diff --git a/repo/js/AutoCommission/Data/RecognitionObject/IconQuestionCommission.png b/repo/js/AutoCommission/Data/RecognitionObject/IconQuestionCommission.png new file mode 100644 index 00000000..58797b90 Binary files /dev/null and b/repo/js/AutoCommission/Data/RecognitionObject/IconQuestionCommission.png differ diff --git a/repo/js/AutoCommission/Data/RecognitionObject/IconTaskCommission.png b/repo/js/AutoCommission/Data/RecognitionObject/IconTaskCommission.png index c48b73ba..ae586333 100644 Binary files a/repo/js/AutoCommission/Data/RecognitionObject/IconTaskCommission.png and b/repo/js/AutoCommission/Data/RecognitionObject/IconTaskCommission.png differ diff --git a/repo/js/AutoCommission/Data/RecognitionObject/加入.png b/repo/js/AutoCommission/Data/RecognitionObject/加入.png new file mode 100644 index 00000000..b2c523dc Binary files /dev/null and b/repo/js/AutoCommission/Data/RecognitionObject/加入.png differ diff --git a/repo/js/AutoCommission/Data/RecognitionObject/更换.png b/repo/js/AutoCommission/Data/RecognitionObject/更换.png new file mode 100644 index 00000000..3eca22fc Binary files /dev/null and b/repo/js/AutoCommission/Data/RecognitionObject/更换.png differ diff --git a/repo/js/AutoCommission/Data/RecognitionObject/队伍配置.png b/repo/js/AutoCommission/Data/RecognitionObject/队伍配置.png new file mode 100644 index 00000000..a100017a Binary files /dev/null and b/repo/js/AutoCommission/Data/RecognitionObject/队伍配置.png differ diff --git a/repo/js/AutoCommission/Data/avatar/combat_avatar.json b/repo/js/AutoCommission/Data/avatar/combat_avatar.json new file mode 100644 index 00000000..ee0114de --- /dev/null +++ b/repo/js/AutoCommission/Data/avatar/combat_avatar.json @@ -0,0 +1,1902 @@ +[ + { + "alias": [ + "旅行者", + "主角", + "卑鄙的外乡人", + "荣誉骑士", + "爷", + "主", + "履刑者", + "抽卡不歪真君" + ], + "id": "20000000", + "name": "旅行者", + "nameEn": "Traveler", + "weapon": "1" + }, + { + "alias": [ + "荧", + "女主", + "女主角", + "莹", + "萤", + "黄毛阿姨", + "荧妹", + "女爷", + "包包", + "宴宁" + ], + "id": "10000007", + "name": "荧", + "nameEn": "PlayerGirl", + "weapon": "1" + }, + { + "alias": [ + "空", + "男主", + "男主角", + "龙哥", + "空哥", + "男爷" + ], + "id": "10000005", + "name": "空", + "nameEn": "PlayerBoy", + "weapon": "1" + }, + { + "alias": [ + "神里绫华", + "Kamisato Ayaka", + "Ayaka", + "神里", + "绫华", + "神里凌华", + "凌华", + "白鹭公主", + "神里大小姐", + "龟", + "龟龟", + "乌龟" + ], + "burstCD": 20, + "id": "10000002", + "name": "神里绫华", + "nameEn": "Ayaka", + "skillCD": 10, + "weapon": "1" + }, + { + "alias": [ + "琴", + "Jean", + "团长", + "代理团长", + "琴团长", + "蒲公英骑士" + ], + "burstCD": 20, + "id": "10000003", + "name": "琴", + "nameEn": "Qin", + "skillCD": 6, + "weapon": "1" + }, + { + "alias": [ + "丽莎", + "Lisa", + "图书管理员", + "图书馆管理员", + "蔷薇魔女", + "阿姨" + ], + "burstCD": 20, + "id": "10000006", + "name": "丽莎", + "nameEn": "Lisa", + "skillCD": 1, + "skillHoldCD": 16, + "weapon": "10" + }, + { + "alias": [ + "芭芭拉", + "Barbara", + "巴巴拉", + "内鬼", + "加湿器", + "肉身解咒", + "肉身解咒真君", + "闪耀偶像", + "偶像" + ], + "burstCD": 20, + "id": "10000014", + "name": "芭芭拉", + "nameEn": "Barbara", + "skillCD": 32, + "weapon": "10" + }, + { + "alias": [ + "凯亚", + "Kaeya", + "盖亚", + "凯子哥", + "凯鸭", + "矿工", + "矿工头子", + "骑兵队长", + "凯子", + "凝冰渡海真君" + ], + "burstCD": 15, + "id": "10000015", + "name": "凯亚", + "nameEn": "Kaeya", + "skillCD": 6, + "weapon": "1" + }, + { + "alias": [ + "迪卢克", + "Diluc", + "卢姥爷", + "姥爷", + "卢老爷", + "卢锅巴", + "正义人", + "正e人", + "正E人", + "卢本伟", + "暗夜英雄", + "卢卢伯爵", + "落魄了", + "落魄了家人们" + ], + "burstCD": 12, + "id": "10000016", + "name": "迪卢克", + "nameEn": "Diluc", + "skillCD": 10, + "weapon": "11" + }, + { + "alias": [ + "雷泽", + "Razor", + "狼少年", + "狼崽子", + "狼崽", + "卢皮卡", + "小狼", + "小狼狗", + "狼孩" + ], + "burstCD": 20, + "id": "10000020", + "name": "雷泽", + "nameEn": "Razor", + "skillCD": 6, + "skillHoldCD": 10, + "weapon": "11" + }, + { + "alias": [ + "安柏", + "Amber", + "安伯", + "兔兔伯爵", + "飞行冠军", + "侦查骑士", + "点火姬", + "点火机", + "打火机", + "打火姬" + ], + "burstCD": 12, + "id": "10000021", + "name": "安柏", + "nameEn": "Ambor", + "skillCD": 15, + "weapon": "12" + }, + { + "alias": [ + "温迪", + "Venti", + "温蒂", + "风神", + "卖唱的", + "巴巴托斯", + "巴巴脱丝", + "芭芭托斯", + "芭芭脱丝", + "干点正事", + "不干正事", + "吟游诗人", + "诶嘿", + "唉嘿", + "摸鱼" + ], + "burstCD": 15, + "id": "10000022", + "name": "温迪", + "nameEn": "Venti", + "skillCD": 6, + "skillHoldCD": 15, + "weapon": "12" + }, + { + "alias": [ + "香菱", + "Xiangling", + "香玲", + "锅巴", + "厨师", + "万民堂厨师", + "香师傅" + ], + "burstCD": 20, + "id": "10000023", + "name": "香菱", + "nameEn": "Xiangling", + "skillCD": 12, + "weapon": "13" + }, + { + "alias": [ + "北斗", + "Beidou", + "大姐头", + "大姐", + "无冕的龙王" + ], + "burstCD": 20, + "id": "10000024", + "name": "北斗", + "nameEn": "Beidou", + "skillCD": 7.5, + "weapon": "11" + }, + { + "alias": [ + "行秋", + "Xingqiu", + "秋秋人", + "秋妹妹", + "书呆子", + "枕玉", + "飞云商会二少爷" + ], + "burstCD": 20, + "id": "10000025", + "name": "行秋", + "nameEn": "Xingqiu", + "skillCD": 21, + "weapon": "1" + }, + { + "alias": [ + "魈", + "Xiao", + "打桩机", + "插秧", + "三眼五显仙人", + "三眼五显真人", + "降魔大圣", + "护法夜叉", + "快乐风男", + "无聊", + "靖妖傩舞", + "矮子仙人", + "三点五尺仙人", + "跳跳虎", + "风夜叉" + ], + "burstCD": 18, + "id": "10000026", + "name": "魈", + "nameEn": "Xiao", + "skillCD": 10, + "weapon": "13" + }, + { + "alias": [ + "凝光", + "Ningguang", + "富婆", + "天权星", + "天权" + ], + "burstCD": 12, + "id": "10000027", + "name": "凝光", + "nameEn": "Ningguang", + "skillCD": 12, + "weapon": "10" + }, + { + "alias": [ + "可莉", + "逃跑的太阳", + "Klee", + "嘟嘟可", + "火花骑士", + "蹦蹦炸弹", + "炸鱼", + "放火烧山", + "放火烧山真君", + "蒙德最强战力", + "逃跑的太阳", + "啦啦啦", + "哒哒哒", + "炸弹人", + "禁闭室", + "太阳", + "小太阳" + ], + "burstCD": 15, + "id": "10000029", + "name": "可莉", + "nameEn": "Klee", + "skillCD": 20, + "weapon": "10" + }, + { + "alias": [ + "钟离", + "Zhongli", + "摩拉克斯", + "岩王爷", + "岩神", + "钟师傅", + "天动万象", + "岩王帝君", + "未来可期", + "帝君", + "拒收病婿" + ], + "burstCD": 12, + "id": "10000030", + "name": "钟离", + "nameEn": "Zhongli", + "skillCD": 4, + "skillHoldCD": 12, + "weapon": "13" + }, + { + "alias": [ + "菲谢尔", + "Fischl", + "皇女", + "小艾米", + "小艾咪", + "奥兹", + "断罪皇女", + "中二病", + "中二少女", + "中二皇女", + "奥兹发射器" + ], + "burstCD": 15, + "id": "10000031", + "name": "菲谢尔", + "nameEn": "Fischl", + "skillCD": 25, + "weapon": "12" + }, + { + "alias": [ + "班尼特", + "Bennett", + "点赞哥", + "点赞", + "倒霉少年", + "倒霉蛋", + "霹雳闪雷真君", + "班神", + "班爷", + "倒霉", + "蒙德火神", + "六星真神" + ], + "burstCD": 15, + "id": "10000032", + "name": "班尼特", + "nameEn": "Bennett", + "skillCD": 5, + "weapon": "1" + }, + { + "alias": [ + "达达利亚", + "Tartaglia", + "Childe", + "Ajax", + "达达鸭", + "达达利鸭", + "公子", + "玩具销售员", + "玩具推销员", + "钱包", + "鸭鸭", + "愚人众末席" + ], + "burstCD": 15, + "id": "10000033", + "name": "达达利亚", + "nameEn": "Tartaglia", + "skillCD": 6, + "skillHoldCD": 45, + "weapon": "12" + }, + { + "alias": [ + "诺艾尔", + "Noelle", + "女仆", + "高达", + "岩王帝姬" + ], + "burstCD": 15, + "id": "10000034", + "name": "诺艾尔", + "nameEn": "Noel", + "skillCD": 24, + "weapon": "11" + }, + { + "alias": [ + "七七", + "Qiqi", + "僵尸", + "肚饿真君", + "度厄真君", + "77" + ], + "burstCD": 20, + "id": "10000035", + "name": "七七", + "nameEn": "Qiqi", + "skillCD": 30, + "weapon": "1" + }, + { + "alias": [ + "重云", + "Chongyun", + "纯阳之体", + "冰棍" + ], + "burstCD": 12, + "id": "10000036", + "name": "重云", + "nameEn": "Chongyun", + "skillCD": 15, + "weapon": "11" + }, + { + "alias": [ + "甘雨", + "Ganyu", + "椰羊", + "椰奶", + "王小美" + ], + "burstCD": 15, + "id": "10000037", + "name": "甘雨", + "nameEn": "Ganyu", + "skillCD": 10, + "weapon": "12" + }, + { + "alias": [ + "阿贝多", + "Albedo", + "可莉哥哥", + "升降机", + "升降台", + "电梯", + "白垩之子", + "贝爷", + "白垩", + "阿贝少", + "花呗多", + "阿贝夕", + "阿师傅" + ], + "burstCD": 12, + "id": "10000038", + "name": "阿贝多", + "nameEn": "Albedo", + "skillCD": 4, + "weapon": "1" + }, + { + "alias": [ + "迪奥娜", + "Diona", + "迪欧娜", + "dio娜", + "冰猫", + "猫猫", + "猫娘", + "喵喵", + "调酒师" + ], + "burstCD": 20, + "id": "10000039", + "name": "迪奥娜", + "nameEn": "Diona", + "skillCD": 6, + "skillHoldCD": 15, + "weapon": "12" + }, + { + "alias": [ + "莫娜", + "Mona", + "穷鬼", + "穷光蛋", + "穷", + "莫纳", + "占星术士", + "占星师", + "讨龙真君", + "半部讨龙真君", + "阿斯托洛吉斯·莫娜·梅姬斯图斯", + "梅姬斯图斯", + "梅姬斯图斯姬" + ], + "burstCD": 15, + "id": "10000041", + "name": "莫娜", + "nameEn": "Mona", + "skillCD": 12, + "weapon": "10" + }, + { + "alias": [ + "刻晴", + "Keqing", + "刻情", + "氪晴", + "刻师傅", + "刻师父", + "牛杂", + "牛杂师傅", + "斩尽牛杂", + "免疫", + "免疫免疫", + "屁斜剑法", + "玉衡星", + "阿晴", + "啊晴", + "璃月雷神" + ], + "burstCD": 12, + "id": "10000042", + "name": "刻晴", + "nameEn": "Keqing", + "skillCD": 7.5, + "weapon": "1" + }, + { + "alias": [ + "砂糖", + "Sucrose", + "sucrose" + ], + "burstCD": 20, + "id": "10000043", + "name": "砂糖", + "nameEn": "Sucrose", + "skillCD": 15, + "weapon": "10" + }, + { + "alias": [ + "辛焱", + "Xinyan", + "辛炎", + "黑妹", + "摇滚" + ], + "burstCD": 15, + "id": "10000044", + "name": "辛焱", + "nameEn": "Xinyan", + "skillCD": 18, + "weapon": "11" + }, + { + "alias": [ + "罗莎莉亚", + "Rosaria", + "罗莎莉娅", + "白色史莱姆", + "白史莱姆", + "修女", + "罗莎利亚", + "罗莎利娅", + "罗沙莉亚", + "罗沙莉娅", + "罗沙利亚", + "罗沙利娅", + "萝莎莉亚", + "萝莎莉娅", + "萝莎利亚", + "萝莎利娅", + "萝沙莉亚", + "萝沙莉娅", + "萝沙利亚", + "萝沙利娅" + ], + "burstCD": 15, + "id": "10000045", + "name": "罗莎莉亚", + "nameEn": "Rosaria", + "skillCD": 6, + "weapon": "13" + }, + { + "alias": [ + "胡桃", + "Hu Tao", + "HuTao", + "Hutao", + "胡淘", + "往生堂堂主", + "火化", + "抬棺的", + "蝴蝶", + "核桃", + "堂主", + "胡堂主", + "雪霁梅香", + "桃子", + "桃" + ], + "burstCD": 15, + "id": "10000046", + "name": "胡桃", + "nameEn": "Hutao", + "skillCD": 16, + "weapon": "13" + }, + { + "alias": [ + "枫原万叶", + "Kaedehara Kazuha", + "Kazuha", + "万叶", + "叶天帝", + "天帝", + "叶师傅" + ], + "burstCD": 15, + "id": "10000047", + "name": "枫原万叶", + "nameEn": "Kazuha", + "skillCD": 6, + "skillHoldCD": 9, + "weapon": "1" + }, + { + "alias": [ + "烟绯", + "Yanfei", + "烟老师", + "律师", + "罗翔" + ], + "burstCD": 20, + "id": "10000048", + "name": "烟绯", + "nameEn": "Feiyan", + "skillCD": 9, + "weapon": "10" + }, + { + "alias": [ + "宵宫", + "Yoimiya", + "霄宫", + "烟花", + "肖宫", + "肖工", + "绷带女孩" + ], + "burstCD": 15, + "id": "10000049", + "name": "宵宫", + "nameEn": "Yoimiya", + "skillCD": 18, + "weapon": "12" + }, + { + "alias": [ + "托马", + "Thoma", + "家政官", + "太郎丸", + "地头蛇", + "男仆", + "拖马" + ], + "burstCD": 20, + "id": "10000050", + "name": "托马", + "nameEn": "Tohma", + "skillCD": 15, + "weapon": "13" + }, + { + "alias": [ + "优菈", + "Eula", + "优拉", + "尤拉", + "尤菈", + "浪花骑士", + "记仇", + "劳伦斯" + ], + "burstCD": 20, + "id": "10000051", + "name": "优菈", + "nameEn": "Eula", + "skillCD": 4, + "skillHoldCD": 10, + "weapon": "11" + }, + { + "alias": [ + "雷电将军", + "Raiden Shogun", + "Raiden", + "雷神", + "将军", + "雷军", + "巴尔", + "阿影", + "影", + "巴尔泽布", + "煮饭婆", + "奶香一刀", + "无想一刀", + "宅女" + ], + "burstCD": 18, + "id": "10000052", + "name": "雷电将军", + "nameEn": "Shougun", + "skillCD": 10, + "weapon": "13" + }, + { + "alias": [ + "早柚", + "Sayu", + "小狸猫", + "狸猫", + "忍者", + "貉" + ], + "burstCD": 20, + "id": "10000053", + "name": "早柚", + "nameEn": "Sayu", + "skillCD": 6, + "weapon": "11" + }, + { + "alias": [ + "珊瑚宫心海", + "Sangonomiya Kokomi", + "Kokomi", + "心海", + "军师", + "珊瑚宫", + "书记", + "观赏鱼", + "水母", + "鱼", + "美人鱼" + ], + "burstCD": 18, + "id": "10000054", + "name": "珊瑚宫心海", + "nameEn": "Kokomi", + "skillCD": 20, + "weapon": "10" + }, + { + "alias": [ + "五郎", + "Gorou", + "柴犬", + "土狗", + "希娜", + "希娜小姐" + ], + "burstCD": 20, + "id": "10000055", + "name": "五郎", + "nameEn": "Gorou", + "skillCD": 10, + "weapon": "12" + }, + { + "alias": [ + "九条裟罗", + "Kujou Sara", + "Sara", + "九条", + "九条沙罗", + "裟罗", + "沙罗", + "天狗" + ], + "burstCD": 20, + "id": "10000056", + "name": "九条裟罗", + "nameEn": "Sara", + "skillCD": 10, + "weapon": "12" + }, + { + "alias": [ + "荒泷一斗", + "Arataki Itto", + "Itto", + "荒龙一斗", + "荒泷天下第一斗", + "一斗", + "一抖", + "荒泷", + "1斗", + "岩牛", + "岩牛牛", + "斗战岩牛", + "斗子哥", + "牛子哥", + "牛子", + "孩子王", + "斗虫", + "巧乐兹", + "放牛的" + ], + "burstCD": 18, + "id": "10000057", + "name": "荒泷一斗", + "nameEn": "Itto", + "skillCD": 10, + "weapon": "11" + }, + { + "alias": [ + "八重神子", + "Yae Miko", + "Miko", + "八重", + "神子", + "狐狸", + "想得美哦", + "巫女", + "屑狐狸", + "骚狐狸", + "八重宫司", + "婶子", + "小八", + "八重寄子", + "寄子", + "八神虫子", + "八神重子" + ], + "burstCD": 22, + "id": "10000058", + "name": "八重神子", + "nameEn": "Yae", + "skillCD": 4, + "weapon": "10" + }, + { + "alias": [ + "鹿野院平藏", + "shikanoin heizou", + "Heizou", + "鹿野苑", + "鹿野院", + "平藏", + "鹿野苑平藏", + "小鹿" + ], + "burstCD": 12, + "id": "10000059", + "name": "鹿野院平藏", + "nameEn": "Heizo", + "skillCD": 10, + "weapon": "10" + }, + { + "alias": [ + "夜兰", + "Yelan", + "夜阑", + "叶澜", + "腋兰", + "夜天后" + ], + "burstCD": 18, + "id": "10000060", + "name": "夜兰", + "nameEn": "Yelan", + "skillCD": 10, + "weapon": "12" + }, + { + "alias": [ + "绮良良", + "Kirara", + "大猫猫", + "大喵喵", + "稻妻猫猫", + "绮娘娘", + "琦良良", + "良良", + "快递员", + "草猫", + "草猫猫", + "草喵", + "草喵喵", + "猫又" + ], + "burstCD": 15, + "id": "10000061", + "name": "绮良良", + "nameEn": "Momoka", + "skillCD": 8, + "weapon": "1" + }, + { + "alias": [ + "埃洛伊", + "Aloy" + ], + "burstCD": 12, + "id": "10000062", + "name": "埃洛伊", + "nameEn": "Aloy", + "skillCD": 20, + "weapon": "12" + }, + { + "alias": [ + "申鹤", + "Shenhe", + "神鹤", + "小姨", + "小姨子", + "审鹤" + ], + "burstCD": 20, + "id": "10000063", + "name": "申鹤", + "nameEn": "Shenhe", + "skillCD": 10, + "skillHoldCD": 15, + "weapon": "13" + }, + { + "alias": [ + "云堇", + "Yun Jin", + "yun jin", + "云瑾", + "云先生", + "云锦", + "神女劈观" + ], + "burstCD": 15, + "id": "10000064", + "name": "云堇", + "nameEn": "Yunjin", + "skillCD": 9, + "weapon": "13" + }, + { + "alias": [ + "久岐忍", + "Kuki Shinobu", + "Kuki", + "Shinobu", + "97忍", + "小忍", + "久歧忍", + "97", + "茄忍", + "茄子", + "紫茄子", + "阿忍", + "忍姐" + ], + "burstCD": 15, + "id": "10000065", + "name": "久岐忍", + "nameEn": "Shinobu", + "skillCD": 15, + "weapon": "1" + }, + { + "alias": [ + "神里绫人", + "Kamisato Ayato", + "Ayato", + "绫人", + "神里凌人", + "凌人", + "0人", + "神人", + "零人", + "大舅哥" + ], + "burstCD": 20, + "id": "10000066", + "name": "神里绫人", + "nameEn": "Ayato", + "skillCD": 12, + "weapon": "1" + }, + { + "alias": [ + "柯莱", + "Collei", + "柯来", + "科莱", + "科来", + "小天使", + "须弥安柏", + "草安柏", + "须弥飞行冠军" + ], + "burstCD": 15, + "id": "10000067", + "name": "柯莱", + "nameEn": "Collei", + "skillCD": 12, + "weapon": "12" + }, + { + "alias": [ + "多莉", + "Dori", + "多利", + "多力", + "奸商" + ], + "burstCD": 20, + "id": "10000068", + "name": "多莉", + "nameEn": "Dori", + "skillCD": 9, + "weapon": "11" + }, + { + "alias": [ + "提纳里", + "Tighnari", + "提那里", + "小提", + "驴" + ], + "burstCD": 12, + "id": "10000069", + "name": "提纳里", + "nameEn": "Tighnari", + "skillCD": 12, + "weapon": "12" + }, + { + "alias": [ + "妮露", + "Nilou", + "尼露", + "妮璐", + "舞娘", + "红牛" + ], + "burstCD": 18, + "id": "10000070", + "name": "妮露", + "nameEn": "Nilou", + "skillCD": 18, + "weapon": "1" + }, + { + "alias": [ + "赛诺", + "Cyno", + "塞诺", + "胡狼", + "大风纪官", + "大风机关" + ], + "burstCD": 20, + "id": "10000071", + "name": "赛诺", + "nameEn": "Cyno", + "skillCD": 7.5, + "skillHoldCD": 3, + "weapon": "13" + }, + { + "alias": [ + "坎蒂丝", + "Candace", + "坎迪斯" + ], + "burstCD": 15, + "id": "10000072", + "name": "坎蒂丝", + "nameEn": "Candace", + "skillCD": 6, + "skillHoldCD": 9, + "weapon": "13" + }, + { + "alias": [ + "纳西妲", + "Nahida", + "草神", + "小吉祥", + "大吉祥", + "小草神", + "大慈树王", + "小吉祥草王", + "草萝莉", + "羽毛球", + "摩诃善法大吉祥智慧主", + "智慧主", + "智慧之神", + "布耶尔" + ], + "burstCD": 13.5, + "id": "10000073", + "name": "纳西妲", + "nameEn": "Nahida", + "skillCD": 5, + "skillHoldCD": 6, + "weapon": "10" + }, + { + "alias": [ + "莱依拉", + "Layla", + "莱依菈", + "来依菈", + "来依拉" + ], + "burstCD": 12, + "id": "10000074", + "name": "莱依拉", + "nameEn": "Layla", + "skillCD": 12, + "weapon": "1" + }, + { + "alias": [ + "流浪者", + "Wanderer", + "散兵", + "国崩", + "雷电国崩", + "大炮", + "雷电大炮", + "雷大炮", + "伞兵", + "斯卡拉姆齐" + ], + "burstCD": 15, + "id": "10000075", + "name": "流浪者", + "nameEn": "Wanderer", + "skillCD": 6, + "weapon": "10" + }, + { + "alias": [ + "珐露珊", + "Faruzan", + "法露珊", + "法璐珊", + "法露姗", + "法璐姗", + "珐露姗", + "珐璐姗", + "百岁珊", + "百岁山", + "前辈", + "仙贝" + ], + "burstCD": 20, + "id": "10000076", + "name": "珐露珊", + "nameEn": "Faruzan", + "skillCD": 6, + "weapon": "12" + }, + { + "alias": [ + "瑶瑶", + "Yaoyao", + "遥遥", + "萝卜", + "月桂" + ], + "burstCD": 20, + "id": "10000077", + "name": "瑶瑶", + "nameEn": "Yaoyao", + "skillCD": 15, + "weapon": "13" + }, + { + "alias": [ + "艾尔海森", + "Alhaitham", + "海哥", + "埃尔海森", + "海森", + "海参", + "书记官" + ], + "burstCD": 18, + "id": "10000078", + "name": "艾尔海森", + "nameEn": "Alhatham", + "skillCD": 18, + "weapon": "1" + }, + { + "alias": [ + "迪希雅", + "Dehya", + "迪希亚", + "迪希娅", + "迪西雅", + "迪西亚" + ], + "burstCD": 18, + "id": "10000079", + "name": "迪希雅", + "nameEn": "Dehya", + "skillCD": 20, + "weapon": "11" + }, + { + "alias": [ + "米卡", + "Mika", + "鹦鹉", + "凤头", + "凤头鹦鹉" + ], + "burstCD": 18, + "id": "10000080", + "name": "米卡", + "nameEn": "Mika", + "skillCD": 15, + "weapon": "13" + }, + { + "alias": [ + "卡维", + "Kaveh", + "艾尔海森室友" + ], + "burstCD": 20, + "id": "10000081", + "name": "卡维", + "nameEn": "Kaveh", + "skillCD": 6, + "weapon": "11" + }, + { + "alias": [ + "白术", + "Baizhu", + "长生", + "白医生" + ], + "burstCD": 20, + "id": "10000082", + "name": "白术", + "nameEn": "Baizhuer", + "skillCD": 10, + "weapon": "10" + }, + { + "alias": [ + "琳妮特", + "Lynette", + "林妮特", + "林尼特", + "琳尼特", + "女魔术师", + "魔术猫", + "魔术喵", + "登登" + ], + "burstCD": 18, + "id": "10000083", + "name": "琳妮特", + "nameEn": "Linette", + "skillCD": 12, + "weapon": "1" + }, + { + "alias": [ + "林尼", + "Lyney", + "林妮", + "琳尼", + "琳妮", + "男魔术师", + "魔术师" + ], + "burstCD": 15, + "id": "10000084", + "name": "林尼", + "nameEn": "Liney", + "skillCD": 15, + "weapon": "12" + }, + { + "alias": [ + "菲米尼", + "Freminet", + "非米尼", + "潜水员" + ], + "burstCD": 15, + "id": "10000085", + "name": "菲米尼", + "nameEn": "Freminet", + "skillCD": 10, + "weapon": "11" + }, + { + "alias": [ + "莱欧斯利", + "Wriothesley", + "莱欧", + "枫丹桑博", + "公爵", + "典狱长", + "牢大" + ], + "burstCD": 15, + "id": "10000086", + "name": "莱欧斯利", + "nameEn": "Wriothesley", + "skillCD": 16, + "weapon": "10" + }, + { + "alias": [ + "那维莱特", + "Neuvillette", + "那维", + "水龙王", + "水龙", + "审判官", + "海獭", + "龙王", + "最高审判官", + "水之龙王" + ], + "burstCD": 18, + "id": "10000087", + "name": "那维莱特", + "nameEn": "Neuvillette", + "skillCD": 12, + "weapon": "10" + }, + { + "alias": [ + "夏洛蒂", + "Charlotte", + "夏洛", + "夏洛帝", + "记者", + "小记者", + "佳能400D", + "400D" + ], + "burstCD": 20, + "id": "10000088", + "name": "夏洛蒂", + "nameEn": "Charlotte", + "skillCD": 12, + "skillHoldCD": 18, + "weapon": "10" + }, + { + "alias": [ + "芙宁娜", + "Furina", + "Focalors", + "水神", + "芙芙", + "芙卡洛斯", + "傻芙芙" + ], + "burstCD": 15, + "id": "10000089", + "name": "芙宁娜", + "nameEn": "Furina", + "skillCD": 20, + "weapon": "1" + }, + { + "alias": [ + "夏沃蕾", + "chevreuse", + "夏沃雷" + ], + "burstCD": 15, + "id": "10000090", + "name": "夏沃蕾", + "nameEn": "Chevreuse", + "skillCD": 15, + "weapon": "13" + }, + { + "alias": [ + "娜维娅", + "navia", + "大小姐", + "刺玫会", + "黄豆", + "流汗黄豆", + "黄豆姐", + "娜薇娅", + "娜薇雅", + "娜维雅" + ], + "burstCD": 15, + "id": "10000091", + "name": "娜维娅", + "nameEn": "Navia", + "skillCD": 9, + "weapon": "11" + }, + { + "alias": [ + "嘉明", + "Gaming", + "jiaming", + "佳明", + "嘉铭", + "家明", + "镖师", + "舞狮少年", + "舞狮" + ], + "burstCD": 15, + "id": "10000092", + "name": "嘉明", + "nameEn": "Gaming", + "skillCD": 6, + "weapon": "11" + }, + { + "alias": [ + "闲云", + "Xianyun", + "流云", + "刘云", + "留云", + "野鹤", + "那个女人", + "留云借风", + "留云借风真君", + "很会聊天", + "很会聊天真君" + ], + "burstCD": 18, + "id": "10000093", + "name": "闲云", + "nameEn": "Liuyun", + "skillCD": 12, + "weapon": "10" + }, + { + "alias": [ + "千织", + "Chiori", + "千只", + "设计师", + "裁缝", + "千织屋老板" + ], + "burstCD": 13.5, + "id": "10000094", + "name": "千织", + "nameEn": "Chiori", + "skillCD": 16, + "weapon": "1" + }, + { + "alias": [ + "希格雯", + "Sigewinne", + "希格文", + "护士", + "护士长" + ], + "burstCD": 18, + "id": "10000095", + "name": "希格雯", + "nameEn": "Sigewinne", + "skillCD": 18, + "weapon": "12" + }, + { + "alias": [ + "阿蕾奇诺", + "Arlecchino", + "阿雷奇诺", + "仆人", + "黑优菈", + "黑暗优菈", + "父亲", + "佩露薇利" + ], + "burstCD": 15, + "id": "10000096", + "name": "阿蕾奇诺", + "nameEn": "Arlecchino", + "skillCD": 30, + "weapon": "13" + }, + { + "alias": [ + "赛索斯", + "Sethos", + "塞索斯", + "塞索思", + "赛索思" + ], + "burstCD": 15, + "id": "10000097", + "name": "赛索斯", + "nameEn": "Sethos", + "skillCD": 8, + "weapon": "12" + }, + { + "alias": [ + "克洛琳德", + "Clorinde", + "琳德", + "科洛琳德", + "克洛林德", + "克罗林德", + "苹果姐" + ], + "burstCD": 15, + "id": "10000098", + "name": "克洛琳德", + "nameEn": "Clorinde", + "skillCD": 16, + "weapon": "1" + }, + { + "alias": [ + "艾梅莉埃", + "Emilie", + "调香师", + "艾梅", + "香水设计师", + "现场清理人" + ], + "burstCD": 13.5, + "id": "10000099", + "name": "艾梅莉埃", + "nameEn": "Emilie", + "skillCD": 10, + "skillHoldCD": 14, + "weapon": "13" + }, + { + "alias": [ + "卡齐娜", + "Kachina", + "卡奇娜", + "卡齐纳", + "卡齐那", + "卡其那", + "冲天钻钻", + "岩莉莉" + ], + "burstCD": 18, + "id": "10000100", + "name": "卡齐娜", + "nameEn": "Kachina", + "skillCD": 20, + "weapon": "13" + }, + { + "alias": [ + "基尼奇", + "Kinich", + "基哥", + "基尼齐", + "蜘蛛侠" + ], + "burstCD": 18, + "id": "10000101", + "name": "基尼奇", + "nameEn": "Kinich", + "skillCD": 18, + "weapon": "11" + }, + { + "alias": [ + "玛拉妮", + "Mualani", + "马拉尼", + "鲨鱼妹", + "海豹妹", + "海豹", + "纳塔鲨", + "逐浪客" + ], + "burstCD": 15, + "id": "10000102", + "name": "玛拉妮", + "nameEn": "Mualani", + "skillCD": 1.8, + "skillHoldCD": 6, + "weapon": "10" + }, + { + "alias": [ + "希诺宁", + "Xilonen", + "豹女", + "岩大猫", + "大岩猫", + "岩猫", + "岩猫猫", + "西诺宁" + ], + "burstCD": 15, + "id": "10000103", + "name": "希诺宁", + "nameEn": "Xilonen", + "skillCD": 7, + "weapon": "1" + }, + { + "alias": [ + "恰斯卡", + "Chasca", + "武卡", + "调停人", + "鸟人" + ], + "burstCD": 15, + "id": "10000104", + "name": "恰斯卡", + "nameEn": "Chasca", + "skillCD": 6.5, + "weapon": "12" + }, + { + "alias": [ + "欧洛伦", + "Ororon", + "庇笛", + "孙子", + "大孙子", + "蝙蝠侠" + ], + "burstCD": 15, + "id": "10000105", + "name": "欧洛伦", + "nameEn": "Olorun", + "skillCD": 15, + "weapon": "12" + }, + { + "alias": [ + "玛薇卡", + "Mavuika", + "火神", + "马薇卡", + "玛维卡", + "马维卡", + "马微卡", + "玛微卡" + ], + "burstCD": 18, + "id": "10000106", + "name": "玛薇卡", + "nameEn": "Mavuika", + "skillCD": 15, + "weapon": "11" + }, + { + "alias": [ + "茜特菈莉", + "Citlali", + "西特菈莉", + "西特拉莉", + "茜特拉莉", + "西特拉利", + "黑曜石奶奶", + "黑曜石", + "奶奶", + "老伴" + ], + "burstCD": 15, + "id": "10000107", + "name": "茜特菈莉", + "nameEn": "Citlali", + "skillCD": 16, + "weapon": "10" + }, + { + "alias": [ + "蓝砚", + "Lanyan", + "蓝燕", + "兰砚", + "兰燕", + "藤编师", + "风鹰侠", + "蓝研", + "蓝颜", + "兰颜" + ], + "burstCD": 15, + "id": "10000108", + "name": "蓝砚", + "nameEn": "Lanyan", + "skillCD": 16, + "weapon": "10" + }, + { + "alias": [ + "梦见月瑞希", + "Yumemizuki Mizuki", + "Mizuki", + "梦见", + "梦见月", + "瑞希", + "瑞幸", + "木更", + "梗小姐", + "食梦貘", + "梦魔", + "魅魔", + "心理医生", + "心理诊疗师" + ], + "burstCD": 15, + "id": "10000109", + "name": "梦见月瑞希", + "nameEn": "Mizuki", + "skillCD": 15, + "weapon": "10" + }, + { + "alias": [ + "伊安珊", + "Iansan", + "123", + "伊安姗", + "教练", + "依安珊" + ], + "burstCD": 18, + "id": "10000110", + "name": "伊安珊", + "nameEn": "Iansan", + "skillCD": 16, + "weapon": "13" + }, + { + "alias": [ + "瓦雷莎", + "Varesa", + "瓦蕾莎", + "瓦蕾沙", + "瓦蕾砂", + "瓦雷沙", + "牛头人", + "牛战士", + "牛牛", + "雷牛", + "雷牛牛", + "奶牛", + "粉牛" + ], + "burstCD": 18, + "id": "10000111", + "name": "瓦雷莎", + "nameEn": "Varesa", + "skillCD": 9, + "weapon": "10" + }, + { + "alias": [ + "爱可菲", + "Escoffier", + "厨师", + "爱可非", + "艾可菲", + "艾可非" + ], + "burstCD": 15, + "id": "10000112", + "name": "爱可菲", + "nameEn": "Escoffier", + "skillCD": 15, + "skillHoldCD": 6, + "weapon": "13" + }, + { + "alias": [ + "伊法", + "Ifa", + "哥们", + "医生" + ], + "burstCD": 15, + "id": "10000113", + "name": "伊法", + "nameEn": "Ifa", + "skillCD": 7.5, + "weapon": "10" + }, + { + "alias": [ + "丝柯克", + "Skirk", + "丝柯可", + "斯柯克" + ], + "burstCD": 15, + "id": "10000114", + "name": "丝柯克", + "nameEn": "SkirkNew", + "skillCD": 8, + "weapon": "1" + }, + { + "alias": [ + "塔利雅", + "Dahlia", + "塔利亚", + "塔丽雅", + "主祭", + "助祭" + ], + "burstCD": 15, + "id": "10000115", + "name": "塔利雅", + "nameEn": "Dahlia", + "skillCD": 9, + "weapon": "1" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/Data/characterimage/七七01.png b/repo/js/AutoCommission/Data/characterimage/七七01.png new file mode 100644 index 00000000..d7587bb1 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/七七01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/丝柯克01.png b/repo/js/AutoCommission/Data/characterimage/丝柯克01.png new file mode 100644 index 00000000..ec44b6ab Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/丝柯克01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/丽莎01.png b/repo/js/AutoCommission/Data/characterimage/丽莎01.png new file mode 100644 index 00000000..a25c7d73 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/丽莎01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/丽莎02.png b/repo/js/AutoCommission/Data/characterimage/丽莎02.png new file mode 100644 index 00000000..c13a9561 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/丽莎02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/久岐忍01.png b/repo/js/AutoCommission/Data/characterimage/久岐忍01.png new file mode 100644 index 00000000..6a61af25 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/久岐忍01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/九条裟罗01.png b/repo/js/AutoCommission/Data/characterimage/九条裟罗01.png new file mode 100644 index 00000000..be7e5624 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/九条裟罗01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/云堇01.png b/repo/js/AutoCommission/Data/characterimage/云堇01.png new file mode 100644 index 00000000..d74d29b4 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/云堇01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/五郎01.png b/repo/js/AutoCommission/Data/characterimage/五郎01.png new file mode 100644 index 00000000..03539f7c Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/五郎01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/伊安珊01.png b/repo/js/AutoCommission/Data/characterimage/伊安珊01.png new file mode 100644 index 00000000..279bb307 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/伊安珊01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/伊法01.png b/repo/js/AutoCommission/Data/characterimage/伊法01.png new file mode 100644 index 00000000..e4a577b5 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/伊法01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/优菈01.png b/repo/js/AutoCommission/Data/characterimage/优菈01.png new file mode 100644 index 00000000..c38ddef7 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/优菈01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/克洛琳德01.png b/repo/js/AutoCommission/Data/characterimage/克洛琳德01.png new file mode 100644 index 00000000..2661b1d6 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/克洛琳德01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/八重神子01.png b/repo/js/AutoCommission/Data/characterimage/八重神子01.png new file mode 100644 index 00000000..d1673123 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/八重神子01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/凝光01.png b/repo/js/AutoCommission/Data/characterimage/凝光01.png new file mode 100644 index 00000000..25bc1402 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/凝光01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/凝光02.png b/repo/js/AutoCommission/Data/characterimage/凝光02.png new file mode 100644 index 00000000..63a28dee Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/凝光02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/凯亚01.png b/repo/js/AutoCommission/Data/characterimage/凯亚01.png new file mode 100644 index 00000000..f004f797 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/凯亚01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/凯亚02.png b/repo/js/AutoCommission/Data/characterimage/凯亚02.png new file mode 100644 index 00000000..049522d7 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/凯亚02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/刻晴01.png b/repo/js/AutoCommission/Data/characterimage/刻晴01.png new file mode 100644 index 00000000..31d23789 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/刻晴01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/刻晴02.png b/repo/js/AutoCommission/Data/characterimage/刻晴02.png new file mode 100644 index 00000000..8b3c5e69 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/刻晴02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/北斗01.png b/repo/js/AutoCommission/Data/characterimage/北斗01.png new file mode 100644 index 00000000..a2d48426 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/北斗01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/千织01.png b/repo/js/AutoCommission/Data/characterimage/千织01.png new file mode 100644 index 00000000..67361239 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/千织01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/卡维01.png b/repo/js/AutoCommission/Data/characterimage/卡维01.png new file mode 100644 index 00000000..877c27ff Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/卡维01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/卡齐娜01.png b/repo/js/AutoCommission/Data/characterimage/卡齐娜01.png new file mode 100644 index 00000000..907ef8bf Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/卡齐娜01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/可莉.png b/repo/js/AutoCommission/Data/characterimage/可莉.png new file mode 100644 index 00000000..1ec0747f Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/可莉.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/可莉02.png b/repo/js/AutoCommission/Data/characterimage/可莉02.png new file mode 100644 index 00000000..ca17be29 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/可莉02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/嘉明01.png b/repo/js/AutoCommission/Data/characterimage/嘉明01.png new file mode 100644 index 00000000..0b3de5d6 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/嘉明01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/坎蒂丝01.png b/repo/js/AutoCommission/Data/characterimage/坎蒂丝01.png new file mode 100644 index 00000000..26575441 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/坎蒂丝01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/埃洛伊01.png b/repo/js/AutoCommission/Data/characterimage/埃洛伊01.png new file mode 100644 index 00000000..1657169c Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/埃洛伊01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/基尼奇01.png b/repo/js/AutoCommission/Data/characterimage/基尼奇01.png new file mode 100644 index 00000000..f5cdd781 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/基尼奇01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/塔利雅01.png b/repo/js/AutoCommission/Data/characterimage/塔利雅01.png new file mode 100644 index 00000000..3559dbb8 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/塔利雅01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/夏沃蕾01.png b/repo/js/AutoCommission/Data/characterimage/夏沃蕾01.png new file mode 100644 index 00000000..28082c34 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/夏沃蕾01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/夏洛蒂01.png b/repo/js/AutoCommission/Data/characterimage/夏洛蒂01.png new file mode 100644 index 00000000..db6aeb18 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/夏洛蒂01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/多莉01.png b/repo/js/AutoCommission/Data/characterimage/多莉01.png new file mode 100644 index 00000000..0ae1dff2 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/多莉01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/夜兰01.png b/repo/js/AutoCommission/Data/characterimage/夜兰01.png new file mode 100644 index 00000000..ebdb61d6 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/夜兰01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/妮露01.png b/repo/js/AutoCommission/Data/characterimage/妮露01.png new file mode 100644 index 00000000..8c330dbc Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/妮露01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/妮露02.png b/repo/js/AutoCommission/Data/characterimage/妮露02.png new file mode 100644 index 00000000..ef0775ec Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/妮露02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/娜维娅01.png b/repo/js/AutoCommission/Data/characterimage/娜维娅01.png new file mode 100644 index 00000000..9b16cc00 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/娜维娅01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/安柏01.png b/repo/js/AutoCommission/Data/characterimage/安柏01.png new file mode 100644 index 00000000..742e8f64 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/安柏01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/安柏02.png b/repo/js/AutoCommission/Data/characterimage/安柏02.png new file mode 100644 index 00000000..88e5e4f8 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/安柏02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/宵宫01.png b/repo/js/AutoCommission/Data/characterimage/宵宫01.png new file mode 100644 index 00000000..8ab911ff Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/宵宫01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/希格雯01.png b/repo/js/AutoCommission/Data/characterimage/希格雯01.png new file mode 100644 index 00000000..bcf33a9f Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/希格雯01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/希诺宁01.png b/repo/js/AutoCommission/Data/characterimage/希诺宁01.png new file mode 100644 index 00000000..90f0e66f Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/希诺宁01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/恰斯卡01.png b/repo/js/AutoCommission/Data/characterimage/恰斯卡01.png new file mode 100644 index 00000000..5567fc53 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/恰斯卡01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/托马01.png b/repo/js/AutoCommission/Data/characterimage/托马01.png new file mode 100644 index 00000000..7274730c Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/托马01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/提纳里01.png b/repo/js/AutoCommission/Data/characterimage/提纳里01.png new file mode 100644 index 00000000..2717929b Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/提纳里01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/旅行者01.png b/repo/js/AutoCommission/Data/characterimage/旅行者01.png new file mode 100644 index 00000000..af94be42 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/旅行者01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/旅行者02.png b/repo/js/AutoCommission/Data/characterimage/旅行者02.png new file mode 100644 index 00000000..3f9124ec Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/旅行者02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/早柚01.png b/repo/js/AutoCommission/Data/characterimage/早柚01.png new file mode 100644 index 00000000..ea810bab Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/早柚01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/林尼01.png b/repo/js/AutoCommission/Data/characterimage/林尼01.png new file mode 100644 index 00000000..1e51fff6 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/林尼01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/枫原万叶01.png b/repo/js/AutoCommission/Data/characterimage/枫原万叶01.png new file mode 100644 index 00000000..1acb6b33 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/枫原万叶01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/柯莱01.png b/repo/js/AutoCommission/Data/characterimage/柯莱01.png new file mode 100644 index 00000000..48b56f81 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/柯莱01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/梦见月瑞希01.png b/repo/js/AutoCommission/Data/characterimage/梦见月瑞希01.png new file mode 100644 index 00000000..08f01924 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/梦见月瑞希01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/欧洛伦01.png b/repo/js/AutoCommission/Data/characterimage/欧洛伦01.png new file mode 100644 index 00000000..a8f84b00 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/欧洛伦01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/流浪者01.png b/repo/js/AutoCommission/Data/characterimage/流浪者01.png new file mode 100644 index 00000000..5f5604a0 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/流浪者01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/温迪01.png b/repo/js/AutoCommission/Data/characterimage/温迪01.png new file mode 100644 index 00000000..207447ea Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/温迪01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/烟绯01.png b/repo/js/AutoCommission/Data/characterimage/烟绯01.png new file mode 100644 index 00000000..524d57c1 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/烟绯01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/爱可菲01.png b/repo/js/AutoCommission/Data/characterimage/爱可菲01.png new file mode 100644 index 00000000..f7131885 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/爱可菲01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/玛拉妮01.png b/repo/js/AutoCommission/Data/characterimage/玛拉妮01.png new file mode 100644 index 00000000..3e082e4b Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/玛拉妮01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/玛薇卡01.png b/repo/js/AutoCommission/Data/characterimage/玛薇卡01.png new file mode 100644 index 00000000..a0b4ff99 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/玛薇卡01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/珊瑚宫心海01.png b/repo/js/AutoCommission/Data/characterimage/珊瑚宫心海01.png new file mode 100644 index 00000000..a0630add Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/珊瑚宫心海01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/珐露珊01.png b/repo/js/AutoCommission/Data/characterimage/珐露珊01.png new file mode 100644 index 00000000..76671be0 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/珐露珊01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/班尼特01.png b/repo/js/AutoCommission/Data/characterimage/班尼特01.png new file mode 100644 index 00000000..3a1a9f64 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/班尼特01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/琳妮特01.png b/repo/js/AutoCommission/Data/characterimage/琳妮特01.png new file mode 100644 index 00000000..831acfd8 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/琳妮特01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/琴01.png b/repo/js/AutoCommission/Data/characterimage/琴01.png new file mode 100644 index 00000000..dc1da3fa Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/琴01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/琴02.png b/repo/js/AutoCommission/Data/characterimage/琴02.png new file mode 100644 index 00000000..149b8878 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/琴02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/瑶瑶01.png b/repo/js/AutoCommission/Data/characterimage/瑶瑶01.png new file mode 100644 index 00000000..772f63e1 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/瑶瑶01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/瓦蕾莎01.png b/repo/js/AutoCommission/Data/characterimage/瓦蕾莎01.png new file mode 100644 index 00000000..0241a1e8 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/瓦蕾莎01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/甘雨01.png b/repo/js/AutoCommission/Data/characterimage/甘雨01.png new file mode 100644 index 00000000..0e4cd2e6 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/甘雨01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/甘雨02.png b/repo/js/AutoCommission/Data/characterimage/甘雨02.png new file mode 100644 index 00000000..279608a5 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/甘雨02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/申鹤01.png b/repo/js/AutoCommission/Data/characterimage/申鹤01.png new file mode 100644 index 00000000..82151bbc Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/申鹤01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/申鹤02.png b/repo/js/AutoCommission/Data/characterimage/申鹤02.png new file mode 100644 index 00000000..6fd1a5ab Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/申鹤02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/白术01.png b/repo/js/AutoCommission/Data/characterimage/白术01.png new file mode 100644 index 00000000..c8b46ff4 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/白术01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/砂糖01.png b/repo/js/AutoCommission/Data/characterimage/砂糖01.png new file mode 100644 index 00000000..2af77481 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/砂糖01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/神里绫人01.png b/repo/js/AutoCommission/Data/characterimage/神里绫人01.png new file mode 100644 index 00000000..cb2efd81 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/神里绫人01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/神里绫华01.png b/repo/js/AutoCommission/Data/characterimage/神里绫华01.png new file mode 100644 index 00000000..b954fe75 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/神里绫华01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/神里绫华02.png b/repo/js/AutoCommission/Data/characterimage/神里绫华02.png new file mode 100644 index 00000000..ea10af19 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/神里绫华02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/空01.png b/repo/js/AutoCommission/Data/characterimage/空01.png new file mode 100644 index 00000000..3f9124ec Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/空01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/米卡01.png b/repo/js/AutoCommission/Data/characterimage/米卡01.png new file mode 100644 index 00000000..f18bc8e8 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/米卡01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/纳西妲01.png b/repo/js/AutoCommission/Data/characterimage/纳西妲01.png new file mode 100644 index 00000000..7322ee92 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/纳西妲01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/绮良良01.png b/repo/js/AutoCommission/Data/characterimage/绮良良01.png new file mode 100644 index 00000000..aa91b717 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/绮良良01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/绮良良02.png b/repo/js/AutoCommission/Data/characterimage/绮良良02.png new file mode 100644 index 00000000..c18ba9ca Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/绮良良02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/罗莎莉亚01.png b/repo/js/AutoCommission/Data/characterimage/罗莎莉亚01.png new file mode 100644 index 00000000..16751db2 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/罗莎莉亚01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/罗莎莉亚02.png b/repo/js/AutoCommission/Data/characterimage/罗莎莉亚02.png new file mode 100644 index 00000000..3e890689 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/罗莎莉亚02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/胡桃01.png b/repo/js/AutoCommission/Data/characterimage/胡桃01.png new file mode 100644 index 00000000..cab1bb3f Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/胡桃01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/胡桃02.png b/repo/js/AutoCommission/Data/characterimage/胡桃02.png new file mode 100644 index 00000000..4bd8baa0 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/胡桃02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/艾尔海森01.png b/repo/js/AutoCommission/Data/characterimage/艾尔海森01.png new file mode 100644 index 00000000..a12f537f Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/艾尔海森01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/艾梅莉埃01.png b/repo/js/AutoCommission/Data/characterimage/艾梅莉埃01.png new file mode 100644 index 00000000..afabe487 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/艾梅莉埃01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/芙宁娜01.png b/repo/js/AutoCommission/Data/characterimage/芙宁娜01.png new file mode 100644 index 00000000..de18cd93 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/芙宁娜01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/芭芭拉01.png b/repo/js/AutoCommission/Data/characterimage/芭芭拉01.png new file mode 100644 index 00000000..561a2321 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/芭芭拉01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/芭芭拉02.png b/repo/js/AutoCommission/Data/characterimage/芭芭拉02.png new file mode 100644 index 00000000..11b844e8 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/芭芭拉02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/茜特菈莉01.png b/repo/js/AutoCommission/Data/characterimage/茜特菈莉01.png new file mode 100644 index 00000000..dba08386 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/茜特菈莉01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/荒泷一斗01.png b/repo/js/AutoCommission/Data/characterimage/荒泷一斗01.png new file mode 100644 index 00000000..99690f36 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/荒泷一斗01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/荧01.png b/repo/js/AutoCommission/Data/characterimage/荧01.png new file mode 100644 index 00000000..af94be42 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/荧01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/莫娜01.png b/repo/js/AutoCommission/Data/characterimage/莫娜01.png new file mode 100644 index 00000000..a216d746 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/莫娜01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/莱依拉01.png b/repo/js/AutoCommission/Data/characterimage/莱依拉01.png new file mode 100644 index 00000000..99f7c3f9 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/莱依拉01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/莱欧斯利01.png b/repo/js/AutoCommission/Data/characterimage/莱欧斯利01.png new file mode 100644 index 00000000..45dbbd76 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/莱欧斯利01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/菲米尼01.png b/repo/js/AutoCommission/Data/characterimage/菲米尼01.png new file mode 100644 index 00000000..7a5f7698 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/菲米尼01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/菲谢尔01.png b/repo/js/AutoCommission/Data/characterimage/菲谢尔01.png new file mode 100644 index 00000000..9f127a7b Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/菲谢尔01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/菲谢尔02.png b/repo/js/AutoCommission/Data/characterimage/菲谢尔02.png new file mode 100644 index 00000000..2c206c71 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/菲谢尔02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/蓝砚01.png b/repo/js/AutoCommission/Data/characterimage/蓝砚01.png new file mode 100644 index 00000000..59c2c496 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/蓝砚01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/行秋01.png b/repo/js/AutoCommission/Data/characterimage/行秋01.png new file mode 100644 index 00000000..24c89ebf Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/行秋01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/行秋02.png b/repo/js/AutoCommission/Data/characterimage/行秋02.png new file mode 100644 index 00000000..37b5b803 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/行秋02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/诺艾尔01.png b/repo/js/AutoCommission/Data/characterimage/诺艾尔01.png new file mode 100644 index 00000000..2cddb4ec Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/诺艾尔01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/赛索斯01.png b/repo/js/AutoCommission/Data/characterimage/赛索斯01.png new file mode 100644 index 00000000..6e2e7f26 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/赛索斯01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/赛诺01.png b/repo/js/AutoCommission/Data/characterimage/赛诺01.png new file mode 100644 index 00000000..5ced623f Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/赛诺01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/辛焱01.png b/repo/js/AutoCommission/Data/characterimage/辛焱01.png new file mode 100644 index 00000000..673aa4d1 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/辛焱01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/达达利亚.png b/repo/js/AutoCommission/Data/characterimage/达达利亚.png new file mode 100644 index 00000000..1ad00388 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/达达利亚.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/迪卢克01.png b/repo/js/AutoCommission/Data/characterimage/迪卢克01.png new file mode 100644 index 00000000..a6ef63ea Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/迪卢克01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/迪卢克02.png b/repo/js/AutoCommission/Data/characterimage/迪卢克02.png new file mode 100644 index 00000000..73181d53 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/迪卢克02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/迪奥娜01.png b/repo/js/AutoCommission/Data/characterimage/迪奥娜01.png new file mode 100644 index 00000000..bd2cab09 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/迪奥娜01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/迪希雅01.png b/repo/js/AutoCommission/Data/characterimage/迪希雅01.png new file mode 100644 index 00000000..c3d7349e Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/迪希雅01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/那维莱特01.png b/repo/js/AutoCommission/Data/characterimage/那维莱特01.png new file mode 100644 index 00000000..b2209a6f Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/那维莱特01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/重云01.png b/repo/js/AutoCommission/Data/characterimage/重云01.png new file mode 100644 index 00000000..8bcf7a2c Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/重云01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/钟离01.png b/repo/js/AutoCommission/Data/characterimage/钟离01.png new file mode 100644 index 00000000..f7e1010a Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/钟离01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/闲云01.png b/repo/js/AutoCommission/Data/characterimage/闲云01.png new file mode 100644 index 00000000..d833da3b Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/闲云01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/阿蕾奇诺01.png b/repo/js/AutoCommission/Data/characterimage/阿蕾奇诺01.png new file mode 100644 index 00000000..b8ee26f2 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/阿蕾奇诺01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/阿贝多01.png b/repo/js/AutoCommission/Data/characterimage/阿贝多01.png new file mode 100644 index 00000000..448ba0fd Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/阿贝多01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/雷泽01.png b/repo/js/AutoCommission/Data/characterimage/雷泽01.png new file mode 100644 index 00000000..d34305c2 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/雷泽01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/雷电将军01.png b/repo/js/AutoCommission/Data/characterimage/雷电将军01.png new file mode 100644 index 00000000..3d1fe1bd Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/雷电将军01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/香菱01.png b/repo/js/AutoCommission/Data/characterimage/香菱01.png new file mode 100644 index 00000000..9a0a94c6 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/香菱01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/香菱02.png b/repo/js/AutoCommission/Data/characterimage/香菱02.png new file mode 100644 index 00000000..c538002d Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/香菱02.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/魈01.png b/repo/js/AutoCommission/Data/characterimage/魈01.png new file mode 100644 index 00000000..187efb16 Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/魈01.png differ diff --git a/repo/js/AutoCommission/Data/characterimage/鹿野院平藏01.png b/repo/js/AutoCommission/Data/characterimage/鹿野院平藏01.png new file mode 100644 index 00000000..6909a46a Binary files /dev/null and b/repo/js/AutoCommission/Data/characterimage/鹿野院平藏01.png differ diff --git a/repo/js/AutoCommission/README.md b/repo/js/AutoCommission/README.md index 6d4f3211..05566f43 100644 --- a/repo/js/AutoCommission/README.md +++ b/repo/js/AutoCommission/README.md @@ -12,10 +12,10 @@ ## 更新日志 -### 当前版本:0.97.1 -- 大更不想写 +### 当前版本:0.98 +- 大更 -### 当前版本:0.97 +### 上一版本:0.97 - 修复已知问题 - 完成了更多对话委托 diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/process.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/process.json new file mode 100644 index 00000000..16d3d932 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/process.json @@ -0,0 +1,35 @@ +[ + { + "type": "地图追踪", + "data": "冒险就要勇于前进-1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": ["你们在吵什么呢","我知道了"], + "npcWhiteList": ["帕琪"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "地图追踪", + "data": "冒险就要勇于前进-2.json", + "note": "执行第二个地图追踪步骤,清理丘丘人" + }, + { + "type": "地图追踪", + "data": "冒险就要勇于前进-3.json", + "note": "执行第三个地图追踪步骤与帕琪对话" + }, + { + "type": "对话", + "data": { + "skipCount": 4, + "priorityOptions": ["清理掉了"], + "npcWhiteList": ["帕琪"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-1.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-1.json new file mode 100644 index 00000000..5950c9b1 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-1.json @@ -0,0 +1,96 @@ +{ + "info": { + "name": "冒险就要勇于前进-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "冒险就要勇于前进-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750498682625 + }, + "positions": [ + { + "id": 1, + "x": -1505.876953125, + "y": 2296.293212890625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -1504.5263671875, + "y": 2299.05810546875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -1595.7626953125, + "y": 2349.760498046875, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1642.771484375, + "y": 2365.23046875, + "action": "set_time", + "move_mode": "walk", + "action_params": "7:00", + "type": "path" + }, + { + "id": 5, + "x": -1656.6279296875, + "y": 2368.2568359375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -1658.2900390625, + "y": 2366.21533203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1665.25390625, + "y": 2370.830810546875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -1665.6572265625, + "y": 2367.06982421875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -1666.6005859375, + "y": 2363.97021484375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-2.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-2.json new file mode 100644 index 00000000..7ff5da60 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-2.json @@ -0,0 +1,69 @@ +{ + "info": { + "name": "冒险就要勇于前进-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "冒险就要勇于前进-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750497921322 + }, + "positions": [ + { + "id": 1, + "x": -1665.859375, + "y": 2366.588134765625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -1656.3984375, + "y": 2364.759033203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1651.7607421875, + "y": 2352.935302734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1642.884765625, + "y": 2330.879150390625, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -1638.3349609375, + "y": 2308.4287109375, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -1638.3349609375, + "y": 2308.4287109375, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-3.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-3.json new file mode 100644 index 00000000..634994d3 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/千风神殿/冒险就要勇于前进-3.json @@ -0,0 +1,105 @@ +{ + "info": { + "name": "冒险就要勇于前进-3", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "冒险就要勇于前进-3", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750498368841 + }, + "positions": [ + { + "id": 1, + "x": -1628.486328125, + "y": 2307.43505859375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": -1589.62109375, + "y": 2310.628173828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -1588.9345703125, + "y": 2313.46240234375, + "action": "", + "move_mode": "climb", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1589.5615234375, + "y": 2323.090576171875, + "action": "", + "move_mode": "climb", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -1651.814453125, + "y": 2350.292724609375, + "action": "set_time", + "move_mode": "dash", + "action_params": "8:00", + "type": "path" + }, + { + "id": 6, + "x": -1652.3466796875, + "y": 2353.902587890625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1657.45703125, + "y": 2364.302978515625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -1665.732421875, + "y": 2370.632080078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -1666.216796875, + "y": 2366.31298828125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -1666.60546875, + "y": 2364.28857421875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/process.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/process.json new file mode 100644 index 00000000..16d3d932 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/process.json @@ -0,0 +1,35 @@ +[ + { + "type": "地图追踪", + "data": "冒险就要勇于前进-1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": ["你们在吵什么呢","我知道了"], + "npcWhiteList": ["帕琪"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "地图追踪", + "data": "冒险就要勇于前进-2.json", + "note": "执行第二个地图追踪步骤,清理丘丘人" + }, + { + "type": "地图追踪", + "data": "冒险就要勇于前进-3.json", + "note": "执行第三个地图追踪步骤与帕琪对话" + }, + { + "type": "对话", + "data": { + "skipCount": 4, + "priorityOptions": ["清理掉了"], + "npcWhiteList": ["帕琪"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-1.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-1.json new file mode 100644 index 00000000..5950c9b1 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-1.json @@ -0,0 +1,96 @@ +{ + "info": { + "name": "冒险就要勇于前进-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "冒险就要勇于前进-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750498682625 + }, + "positions": [ + { + "id": 1, + "x": -1505.876953125, + "y": 2296.293212890625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -1504.5263671875, + "y": 2299.05810546875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -1595.7626953125, + "y": 2349.760498046875, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1642.771484375, + "y": 2365.23046875, + "action": "set_time", + "move_mode": "walk", + "action_params": "7:00", + "type": "path" + }, + { + "id": 5, + "x": -1656.6279296875, + "y": 2368.2568359375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -1658.2900390625, + "y": 2366.21533203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1665.25390625, + "y": 2370.830810546875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -1665.6572265625, + "y": 2367.06982421875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -1666.6005859375, + "y": 2363.97021484375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-2.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-2.json new file mode 100644 index 00000000..7ff5da60 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-2.json @@ -0,0 +1,69 @@ +{ + "info": { + "name": "冒险就要勇于前进-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "冒险就要勇于前进-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750497921322 + }, + "positions": [ + { + "id": 1, + "x": -1665.859375, + "y": 2366.588134765625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -1656.3984375, + "y": 2364.759033203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1651.7607421875, + "y": 2352.935302734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1642.884765625, + "y": 2330.879150390625, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -1638.3349609375, + "y": 2308.4287109375, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -1638.3349609375, + "y": 2308.4287109375, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-3.json b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-3.json new file mode 100644 index 00000000..634994d3 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/冒险就要勇于前进/摘星崖/冒险就要勇于前进-3.json @@ -0,0 +1,105 @@ +{ + "info": { + "name": "冒险就要勇于前进-3", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "冒险就要勇于前进-3", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750498368841 + }, + "positions": [ + { + "id": 1, + "x": -1628.486328125, + "y": 2307.43505859375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": -1589.62109375, + "y": 2310.628173828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -1588.9345703125, + "y": 2313.46240234375, + "action": "", + "move_mode": "climb", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1589.5615234375, + "y": 2323.090576171875, + "action": "", + "move_mode": "climb", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -1651.814453125, + "y": 2350.292724609375, + "action": "set_time", + "move_mode": "dash", + "action_params": "8:00", + "type": "path" + }, + { + "id": 6, + "x": -1652.3466796875, + "y": 2353.902587890625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1657.45703125, + "y": 2364.302978515625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -1665.732421875, + "y": 2370.632080078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -1666.216796875, + "y": 2366.31298828125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -1666.60546875, + "y": 2364.28857421875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/process.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/process.json new file mode 100644 index 00000000..7f38039a --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/process.json @@ -0,0 +1,3 @@ +圆滚滚的大团骚乱-1.json +F +圆滚滚的大团骚乱-2.json \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/圆滚滚的大团骚乱-1.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/圆滚滚的大团骚乱-1.json new file mode 100644 index 00000000..d02d89d7 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/圆滚滚的大团骚乱-1.json @@ -0,0 +1,130 @@ +{ + "info": { + "name": "圆滚滚的大团骚乱-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "圆滚滚的大团骚乱-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -578.8076171875, + "y": 1853.396484375, + "action_params": "" + }, + { + "id": 2, + "x": -496.169921875, + "y": 1821.05224609375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -488.1904296875, + "y": 1815.54638671875, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -446.2294921875, + "y": 1787.8017578125, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 5, + "x": -444.9365234375, + "y": 1770.681640625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -443.546875, + "y": 1749.72216796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -451.5029296875, + "y": 1708.76025390625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -421.736328125, + "y": 1694.24658203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -403.6259765625, + "y": 1692.9951171875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -402.4580078125, + "y": 1686.95361328125, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 11, + "x": -409.0654296875, + "y": 1685.06787109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 12, + "x": -407.998046875, + "y": 1687.474609375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 13, + "x": -405.185546875, + "y": 1687.04296875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/圆滚滚的大团骚乱-2.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/圆滚滚的大团骚乱-2.json new file mode 100644 index 00000000..457f4d71 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/晨曦酒庄/圆滚滚的大团骚乱-2.json @@ -0,0 +1,105 @@ +{ + "info": { + "name": "圆滚滚的大团骚乱-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "圆滚滚的大团骚乱-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -406.5341796875, + "y": 1686.943359375, + "action_params": "" + }, + { + "id": 2, + "x": -412.4833984375, + "y": 1684.91162109375, + "type": "path", + "move_mode": "run", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -420.6025390625, + "y": 1653.9306640625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -378.134765625, + "y": 1652.35400390625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -353.4072265625, + "y": 1655.490234375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -326.3935546875, + "y": 1633.00146484375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -322.5263671875, + "y": 1631.1552734375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "", + "locked": false + }, + { + "id": 8, + "x": -322.5263671875, + "y": 1631.1552734375, + "type": "path", + "move_mode": "walk", + "action": "anemo_collect", + "action_params": "", + "locked": false + }, + { + "id": 9, + "x": -322.5263671875, + "y": 1631.1552734375, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 10, + "x": -318.3642578125, + "y": 1629.23779296875, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/process.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/process.json new file mode 100644 index 00000000..7f38039a --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/process.json @@ -0,0 +1,3 @@ +圆滚滚的大团骚乱-1.json +F +圆滚滚的大团骚乱-2.json \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/圆滚滚的大团骚乱-1.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/圆滚滚的大团骚乱-1.json new file mode 100644 index 00000000..2837f30a --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/圆滚滚的大团骚乱-1.json @@ -0,0 +1,76 @@ +{ + "info": { + "name": "圆滚滚的大团骚乱-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "圆滚滚的大团骚乱-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -867.7177734375, + "y": 2281.374755859375, + "action_params": "" + }, + { + "id": 2, + "x": -864.625, + "y": 2283.14013671875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -884.576171875, + "y": 2323.191162109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -900.1943359375, + "y": 2330.54296875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -906.2705078125, + "y": 2343.691650390625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -913.14453125, + "y": 2362.91796875, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + }, + { + "id": 7, + "x": -911.99609375, + "y": 2365.779296875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/圆滚滚的大团骚乱-2.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/圆滚滚的大团骚乱-2.json new file mode 100644 index 00000000..914f157a --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/果酒湖/圆滚滚的大团骚乱-2.json @@ -0,0 +1,77 @@ +{ + "info": { + "name": "圆滚滚的大团骚乱-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "圆滚滚的大团骚乱-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -440.43359375, + "y": 2581.087158203125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -461.705078125, + "y": 2627.866943359375, + "action": "", + "move_mode": "run", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -468.1416015625, + "y": 2630.226806640625, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -679.4814453125, + "y": 2652.90185546875, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "target" + }, + { + "id": 5, + "x": -679.4814453125, + "y": 2652.90185546875, + "action": "anemo_collect", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 6, + "x": -679.4814453125, + "y": 2652.90185546875, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "orientation", + "locked": false + }, + { + "id": 7, + "x": -679.4814453125, + "y": 2652.90185546875, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "orientation" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/process.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/process.json new file mode 100644 index 00000000..7f38039a --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/process.json @@ -0,0 +1,3 @@ +圆滚滚的大团骚乱-1.json +F +圆滚滚的大团骚乱-2.json \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/圆滚滚的大团骚乱-1.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/圆滚滚的大团骚乱-1.json new file mode 100644 index 00000000..69490b22 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/圆滚滚的大团骚乱-1.json @@ -0,0 +1,67 @@ +{ + "info": { + "name": "圆滚滚的大团骚乱-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "圆滚滚的大团骚乱-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -914.8447265625, + "y": 1795.43798828125, + "action_params": "" + }, + { + "id": 2, + "x": -905.8896484375, + "y": 1801.232421875, + "type": "path", + "move_mode": "swim", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -888.06640625, + "y": 1808.712890625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -839.55078125, + "y": 1824.93017578125, + "type": "path", + "move_mode": "dash", + "action": "fight", + "action_params": "" + }, + { + "id": 5, + "x": -835.830078125, + "y": 1820.30908203125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -837.5166015625, + "y": 1824.2470703125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/圆滚滚的大团骚乱-2.json b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/圆滚滚的大团骚乱-2.json new file mode 100644 index 00000000..34a8f055 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/圆滚滚的大团骚乱/清泉镇/圆滚滚的大团骚乱-2.json @@ -0,0 +1,68 @@ +{ + "info": { + "name": "圆滚滚的大团骚乱-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "圆滚滚的大团骚乱-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -1130.8056640625, + "y": 1597.88525390625, + "type": "teleport", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -1130.185546875, + "y": 1617.4951171875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1111.919921875, + "y": 1660.89208984375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1101.234375, + "y": 1675.0322265625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1101.890625, + "y": 1682.8193359375, + "type": "path", + "move_mode": "walk", + "action": "anemo_collect", + "action_params": "", + "locked": false + }, + { + "id": 6, + "x": -1101.890625, + "y": 1682.8193359375, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/报答神明的方式/蒙德城/process.json b/repo/js/AutoCommission/assets/process/报答神明的方式/蒙德城/process.json new file mode 100644 index 00000000..4b1e4b4c --- /dev/null +++ b/repo/js/AutoCommission/assets/process/报答神明的方式/蒙德城/process.json @@ -0,0 +1,24 @@ +[ + { + "type": "地图追踪", + "data": "去往蒙德大教堂.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "isinMainUi", + "note": "等待返回主界面" + }, + { + "type": "追踪委托", + "data": { + "npc": "吉丽安娜", + "iconType": "task" + }, + "note": "追踪委托" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/报答神明的方式/蒙德城/去往蒙德大教堂.json b/repo/js/AutoCommission/assets/process/报答神明的方式/蒙德城/去往蒙德大教堂.json new file mode 100644 index 00000000..81f96aa9 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/报答神明的方式/蒙德城/去往蒙德大教堂.json @@ -0,0 +1,67 @@ +{ + "info": { + "name": "惊喜大礼-蒙德城-1", + "type": "collect", + "author": "11", + "version": "1.0", + "description": "惊喜大礼-蒙德城-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -749.412109375, + "y": 2263.095458984375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -748.7392578125, + "y": 2263.28125, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -717.400390625, + "y": 2294.3359375, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -705.4072265625, + "y": 2355.9326171875, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -696.0087890625, + "y": 2357.346923828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -685.0595703125, + "y": 2355.038330078125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/process.json b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/process.json new file mode 100644 index 00000000..84b83c23 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/process.json @@ -0,0 +1,7 @@ +新的风暴尚未出现-1.json +F +新的风暴尚未出现-2.json +新的风暴尚未出现-3.json +F +前往望风角塔楼顶部.json +F \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/前往望风角塔楼顶部.json b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/前往望风角塔楼顶部.json new file mode 100644 index 00000000..406e3a14 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/前往望风角塔楼顶部.json @@ -0,0 +1,112 @@ +{ + "info": { + "name": "未命名路径", + "type": "collect", + "author": "", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -1853.0693359375, + "y": 2885.650390625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": -1844.40234375, + "y": 2885.112060546875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -1841.837890625, + "y": 2884.646728515625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 4, + "x": -1839.5634765625, + "y": 2878, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 5, + "x": -1844.3466796875, + "y": 2876.552978515625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 6, + "x": -1846.408203125, + "y": 2877.3369140625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 7, + "x": -1847.6767578125, + "y": 2879.76025390625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 8, + "x": -1844.6982421875, + "y": 2883.157470703125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 9, + "x": -1840.244140625, + "y": 2881.513671875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 10, + "x": -1841.3525390625, + "y": 2876.749755859375, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 11, + "x": -1845.7763671875, + "y": 2877.882568359375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/前往望风角塔楼顶部by柒叶子.json b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/前往望风角塔楼顶部by柒叶子.json new file mode 100644 index 00000000..6126ecd1 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/前往望风角塔楼顶部by柒叶子.json @@ -0,0 +1,212 @@ +{ + "info": { + "name": "前往望风角塔楼顶部by柒叶子", + "type": "collect", + "author": "柒叶子", + "version": "1.0", + "description": "柒叶子老师nb", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -1629.2958984375, + "y": 2834.411865234375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -1653.572265625, + "y": 2834.874755859375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -1703.2529296875, + "y": 2843.67822265625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1726.9443359375, + "y": 2847.81640625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -1752.2021484375, + "y": 2850.199462890625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -1768.94921875, + "y": 2848.8212890625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": -1795.8515625, + "y": 2847.02783203125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": -1807.73828125, + "y": 2858.350341796875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 9, + "x": -1833.505859375, + "y": 2864.002197265625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 10, + "x": -1859.2421875, + "y": 2871.079345703125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 11, + "x": -1852.779296875, + "y": 2885.40869140625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 12, + "x": -1843.294921875, + "y": 2884.653076171875, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 13, + "x": -1842.29296875, + "y": 2884.297607421875, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "target" + }, + { + "id": 14, + "x": -1839.2431640625, + "y": 2879.853271484375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 15, + "x": -1844.2734375, + "y": 2875.896728515625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 16, + "x": -1846.8552734375, + "y": 2878.77373046875, + "action": "", + "move_mode": "climb", + "action_params": "", + "type": "path" + }, + { + "id": 17, + "x": -1847.1103515625, + "y": 2879.4228515625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 18, + "x": -1846.1953125, + "y": 2882.475830078125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 19, + "x": -1842.1689453125, + "y": 2883.2734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 20, + "x": -1840.6201171875, + "y": 2880.635498046875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 21, + "x": -1841.287109375, + "y": 2877.12548828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target", + "locked": false + }, + { + "id": 22, + "x": -1844.287109375, + "y": 2878.12548828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-1.json b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-1.json new file mode 100644 index 00000000..8f7e8e8e --- /dev/null +++ b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-1.json @@ -0,0 +1,84 @@ +{ + "info": { + "name": "新的风暴尚未出现-1", + "type": "collect", + "author": "星野", + "version": "", + "description": "", + "bgi_version": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": -1629.1162109375, + "y": 2833.7861328125, + "action": "", + "move_mode": "dash", + "type": "teleport" + }, + { + "id": 2, + "x": -1708.4482421875, + "y": 2834.314697265625, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 3, + "x": -1759.6064453125, + "y": 2835.28271484375, + "action": "", + "move_mode": "fly", + "type": "path" + }, + { + "id": 4, + "x": -1785.251953125, + "y": 2850.209228515625, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 5, + "x": -1793.935546875, + "y": 2857.962890625, + "action": "", + "move_mode": "walk", + "type": "path" + }, + { + "id": 6, + "x": -1821.6806640625, + "y": 2855.65478515625, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 7, + "x": -1839.416015625, + "y": 2847.714111328125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 8, + "x": -1858.431640625, + "y": 2837.705078125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 9, + "x": -1875.25, + "y": 2829.442626953125, + "action": "", + "move_mode": "walk", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-2.json b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-2.json new file mode 100644 index 00000000..d32ae8fa --- /dev/null +++ b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-2.json @@ -0,0 +1,80 @@ +{ + "info": { + "name": "新的风暴尚未出现-2", + "type": "collect", + "author": "星野", + "version": "", + "description": "", + "bgi_version": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": -1880.009765625, + "y": 2826.505126953125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 2, + "x": -1866.2666015625, + "y": 2831.68408203125, + "action": "", + "move_mode": "dash", + "type": "path" + }, + { + "id": 3, + "x": -1854, + "y": 2863.25, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1849.755859375, + "y": 2875.167724609375, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -1845.72265625, + "y": 2885.572265625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 6, + "x": -1841.9111328125, + "y": 2884.369384765625, + "action": "", + "move_mode": "walk", + "type": "target" + }, + { + "id": 7, + "x": -1839.34375, + "y": 2881.49072265625, + "action": "", + "move_mode": "walk", + "type": "target" + }, + { + "id": 8, + "x": -1845.462890625, + "y": 2876.641357421875, + "action": "fight", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-3.json b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-3.json new file mode 100644 index 00000000..a8e3ed21 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/新的风暴尚未出现/望风角/新的风暴尚未出现-3.json @@ -0,0 +1,30 @@ +{ + "info": { + "name": "新的风暴尚未出现-3", + "type": "collect", + "author": "星野", + "version": "", + "description": "", + "bgi_version": "0.42.3" + }, + "positions": [ + { + "id": 1, + "x": -1850.3857421875, + "y": 2867.314697265625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -1866.6171875, + "y": 2836.91748046875, + "type": "target", + "move_mode": "dash", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/process.json b/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/process.json index e6e2cabd..d1b1253a 100644 --- a/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/process.json +++ b/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/process.json @@ -1,4 +1,36 @@ -无人注意的盖伊-1.json -F -无人注意的盖伊-2.json -F \ No newline at end of file +[ + { + "type": "地图追踪", + "data": "无人注意的盖伊-1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + "data": { + "skipCount": 3, + "priorityOptions": ["没有"] + "npcWhiteList": ["盖伊"] + }, + }, + { + "type": "地图追踪", + "data": "无人注意的盖伊-2.json", + "note": "执行第二个地图追踪步骤" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": [ + "这是", + "这是", + "不用了" + ], + "npcWhiteList": [ + "纳特" + ] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + } +] diff --git a/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-1.json b/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-1.json index 50812e9f..1bb1460b 100644 --- a/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-1.json +++ b/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-1.json @@ -2,66 +2,68 @@ "info": { "name": "无人注意的盖伊-1", "type": "collect", - "author": "星野工具箱", + "author": "云闲vsv", "version": "1.0", - "description": "自动地图追踪录制", + "description": "无人注意的盖伊-1", "map_name": "Teyvat", - "bgi_version": "0.45.0" + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750997579576 }, "positions": [ { "id": 1, - "x": -867.7041015625, - "y": 2281.3798828125, "action": "", "move_mode": "walk", - "action_params": "", - "type": "teleport" + "type": "teleport", + "x": -868.1650390625, + "y": 2280.830810546875, + "action_params": "" }, { "id": 2, - "x": -870.9990234375, - "y": 2294.775146484375, + "x": -869.7255859375, + "y": 2294.144287109375, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 3, - "x": -877.5693359375, - "y": 2308.788818359375, - "action": "", + "x": -883.7548828125, + "y": 2321.87646484375, + "type": "path", "move_mode": "dash", - "action_params": "", - "type": "path" + "action": "", + "action_params": "" }, { "id": 4, - "x": -883.607421875, - "y": 2321.1171875, + "x": -897.62890625, + "y": 2332.537841796875, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 5, - "x": -896.982421875, - "y": 2334.46337890625, + "x": -898.6005859375, + "y": 2334.73046875, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 6, - "x": -898.177734375, - "y": 2335.824951171875, - "action": "", + "x": -899.4609375, + "y": 2336.443115234375, + "type": "target", "move_mode": "walk", - "action_params": "", - "type": "target" + "action": "", + "action_params": "" } ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-2.json b/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-2.json index f067f340..af97363d 100644 --- a/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-2.json +++ b/repo/js/AutoCommission/assets/process/无人注意的盖伊/蒙德城/无人注意的盖伊-2.json @@ -2,120 +2,113 @@ "info": { "name": "无人注意的盖伊-2", "type": "collect", - "author": "星野工具箱", + "author": "云闲vsv", "version": "1.0", - "description": "自动地图追踪录制", + "description": "无人注意的盖伊-2", "map_name": "Teyvat", - "bgi_version": "0.45.0" + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750999128729 }, "positions": [ { "id": 1, - "x": -201.19921875, - "y": 1861.84228515625, - "action": "", + "x": -578.8310546875, + "y": 1853.5126953125, + "type": "teleport", "move_mode": "walk", - "action_params": "", - "type": "teleport" + "action": "", + "action_params": "" }, { "id": 2, - "x": -213.0185546875, - "y": 1857.92431640625, + "x": -562.353515625, + "y": 1844.78369140625, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 3, - "x": -239.51171875, - "y": 1855.09033203125, + "x": -503.349609375, + "y": 1819.1318359375, + "type": "path", + "move_mode": "run", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 4, - "x": -257.6923828125, - "y": 1849.74853515625, + "x": -497.7810494170153, + "y": 1816.5, + "type": "path", + "move_mode": "fly", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 5, - "x": -280.009765625, - "y": 1834.9599609375, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "x": -453.03125, + "y": 1803.64892578125, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" }, { "id": 6, - "x": -302.1923828125, - "y": 1822.767578125, + "x": -394.595703125, + "y": 1817.10009765625, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 7, - "x": -323.177734375, - "y": 1812.3212890625, - "action": "", + "x": -390.4599609375, + "y": 1817.53857421875, + "type": "path", "move_mode": "dash", - "action_params": "", - "type": "path" + "action": "", + "action_params": "" }, { "id": 8, - "x": -343.8857421875, - "y": 1799.869140625, + "x": -376.1767578125, + "y": 1797.5185546875, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 9, - "x": -357.9912109375, - "y": 1781.021484375, + "x": -373.7099609375, + "y": 1793.98388671875, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 10, - "x": -375.2802734375, - "y": 1788.62939453125, + "x": -374.74609375, + "y": 1792.2900390625, + "type": "path", + "move_mode": "walk", "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" + "action_params": "" }, { "id": 11, - "x": -375.9599609375, - "y": 1788.95947265625, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 12, - "x": -375.203125, - "y": 1789.3525390625, - "action": "", + "x": -376.0537109375, + "y": 1790.169921875, + "type": "target", "move_mode": "walk", - "action_params": "", - "type": "target" + "action": "", + "action_params": "" } ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/process.json b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/process.json new file mode 100644 index 00000000..3eca29ae --- /dev/null +++ b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/process.json @@ -0,0 +1,80 @@ + +[ + { + "type": "地图追踪", + "data": "永不停歇的风与米歇尔小姐-1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + }, + { + "type": "地图追踪", + "data": "永不停歇的风与米歇尔小姐-2.json", + "note": "执行第二个地图追踪步骤" + }, + { + "type": "按键", + "data": "Space", + "note": "按下空格键" + }, + { + "type": "按键", + "data": "Space", + "note": "按下空格键" + }, + { + "type": "按键", + "data": "Space", + "note": "按下空格键" + }, + { + "type": "按键", + "data": "Space", + "note": "按下空格键" + }, + { + "type": "按键", + "data": "Space", + "note": "按下空格键" + }, + { + "type": "按键", + "data": "Space", + "note": "按下空格键" + }, + { + "type": "地图追踪", + "data": "永不停歇的风与米歇尔小姐-3.json", + "note": "执行第三个地图追踪步骤" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": ["发生什么了","很急的话"], + "npcWhiteList": ["昆恩"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": ["已经找好了","关于米歇尔"], + "npcWhiteList": ["昆恩"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "地图追踪", + "data": "永不停歇的风与米歇尔小姐-1.json", + "note": "执行第一个地图追踪步骤" + }, +{ + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + } + +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-1.json b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-1.json new file mode 100644 index 00000000..72677895 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-1.json @@ -0,0 +1,51 @@ +{ + "info": { + "name": "永不停歇的风与米歇尔小姐-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "永不停歇的风与米歇尔小姐-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1750914242844 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -867.912109375, + "y": 2281.140625, + "action_params": "" + }, + { + "id": 2, + "x": -839.4150390625, + "y": 2223.768310546875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -837.41796875, + "y": 2219.519287109375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -839.787109375, + "y": 2218.5390625, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-2.json b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-2.json new file mode 100644 index 00000000..05fe10e8 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-2.json @@ -0,0 +1,69 @@ +{ + "info": { + "name": "永不停歇的风与米歇尔小姐-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.1", + "description": "永不停歇的风与米歇尔小姐-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751003431187 + }, + "positions": [ + { + "id": 1, + "x": -867.7080078125, + "y": 2281.365234375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -877.8466796875, + "y": 2274.699951171875, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -886.45703125, + "y": 2262.963134765625, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 4, + "x": -896.9373796502096, + "y": 2248.9375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -923.1249197668058, + "y": 2237.6875, + "action": "", + "move_mode": "run", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -931.8125, + "y": 2242.04736328125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-3.json b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-3.json new file mode 100644 index 00000000..81e2f867 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/永不停歇的风与米歇尔小姐/蒙德城/永不停歇的风与米歇尔小姐-3.json @@ -0,0 +1,87 @@ +{ + "info": { + "name": "永不停歇的风与米歇尔小姐-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.1", + "description": "永不停歇的风与米歇尔小姐-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751002800075 + }, + "positions": [ + { + "id": 1, + "x": -867.7080078125, + "y": 2281.365234375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -877.8466796875, + "y": 2274.699951171875, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -886.45703125, + "y": 2262.963134765625, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 4, + "x": -896.9373796502096, + "y": 2248.9375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -923.1249197668058, + "y": 2237.6875, + "action": "", + "move_mode": "run", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -928.6064453125, + "y": 2239.2900390625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": -931.287109375, + "y": 2241.751953125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": -933.04296875, + "y": 2242.20458984375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/落叶归风/风起地/process.json b/repo/js/AutoCommission/assets/process/落叶归风/风起地/process.json new file mode 100644 index 00000000..7dd53652 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/落叶归风/风起地/process.json @@ -0,0 +1,5 @@ +落叶归风-1.json +F +落叶归风-2.json +落叶归风-3.json +F \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-1.json b/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-1.json new file mode 100644 index 00000000..d3c00890 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-1.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "落叶归风-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "落叶归风-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1267.353515625, + "y": 1933.14111328125, + "action_params": "" + }, + { + "id": 2, + "x": -1288.4189453125, + "y": 1911.71875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1290.771484375, + "y": 1907.5302734375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-2.json b/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-2.json new file mode 100644 index 00000000..8dca2938 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-2.json @@ -0,0 +1,193 @@ +{ + "info": { + "name": "落叶归风-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "落叶归风-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -1290.771484375, + "y": 1907.5302734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 2, + "x": -1290.33984375, + "y": 1892.49267578125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 3, + "x": -1268.744140625, + "y": 1885.0380859375, + "action": "", + "move_mode": "climb", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -1264.0009765625, + "y": 1887.2626953125, + "action": "", + "move_mode": "climb", + "action_params": "", + "type": "target" + }, + { + "id": 5, + "x": -1264.7138671875, + "y": 1887.85595703125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 6, + "x": -1265.947265625, + "y": 1885.361328125, + "action": "combat_script", + "move_mode": "walk", + "action_params": "attack,wait(1),keypress(F),", + "type": "target" + }, + { + "id": 7, + "x": -1268.0458984375, + "y": 1882.6875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": -1268.3876953125, + "y": 1880.10302734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 9, + "x": -1266.9638671875, + "y": 1871.62939453125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 10, + "x": -1266.9453125, + "y": 1870.853515625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 11, + "x": -1268.1201171875, + "y": 1862.07666015625, + "action": "combat_script", + "move_mode": "walk", + "action_params": "attack,wait(1),keypress(F),", + "type": "target" + }, + { + "id": 12, + "x": -1267.541015625, + "y": 1864.69775390625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 13, + "x": -1266.9453125, + "y": 1870.853515625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 14, + "x": -1267.7177734375, + "y": 1872.92822265625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 15, + "x": -1268.3876953125, + "y": 1880.10302734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 16, + "x": -1268.0458984375, + "y": 1882.6875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 17, + "x": -1266.9374749271265, + "y": 1883.5, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 18, + "x": -1264.1728515625, + "y": 1887.189453125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 19, + "x": -1262.1220703125, + "y": 1892.853515625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 20, + "x": -1264.603515625, + "y": 1894.21435546875, + "action": "combat_script", + "move_mode": "walk", + "action_params": "attack,wait(1),keypress(F),", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-3.json b/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-3.json new file mode 100644 index 00000000..caca154e --- /dev/null +++ b/repo/js/AutoCommission/assets/process/落叶归风/风起地/落叶归风-3.json @@ -0,0 +1,58 @@ +{ + "info": { + "name": "落叶归风-3", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "落叶归风-3", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -1264.603515625, + "y": 1894.21435546875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -1270.54296875, + "y": 1895.66015625, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 3, + "x": -1282.9091796875, + "y": 1909.771484375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1287.861328125, + "y": 1908.69384765625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1290.572265625, + "y": 1907.3955078125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/23332.json b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/23332.json new file mode 100644 index 00000000..c4878ae7 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/23332.json @@ -0,0 +1 @@ +{"macroEvents":[{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":4281},{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":4406},{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":5953},{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":6125},{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":7687},{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":7765},{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":11703},{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":11797}],"info":{"name":"","description":"","x":0,"y":0,"width":2560,"height":1440,"recordDpi":1.25}} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/666.json b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/666.json new file mode 100644 index 00000000..9e213bd3 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/666.json @@ -0,0 +1 @@ +{"macroEvents":[{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":3344},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":3469},{"type":3,"mouseX":18,"mouseY":5,"time":6089},{"type":3,"mouseX":51,"mouseY":12,"time":6120},{"type":3,"mouseX":67,"mouseY":14,"time":6151},{"type":3,"mouseX":103,"mouseY":16,"time":6183},{"type":3,"mouseX":98,"mouseY":12,"time":6214},{"type":3,"mouseX":90,"mouseY":10,"time":6245},{"type":3,"mouseX":68,"mouseY":11,"time":6276},{"type":3,"mouseX":27,"mouseY":4,"time":6308},{"type":3,"mouseX":30,"mouseY":5,"time":6339},{"type":3,"mouseX":44,"mouseY":7,"time":6370},{"type":3,"mouseX":20,"mouseY":4,"time":6401},{"type":3,"mouseX":37,"mouseY":8,"time":6433},{"type":3,"mouseX":34,"mouseY":5,"time":6464},{"type":3,"mouseX":12,"mouseY":1,"time":6495},{"type":3,"mouseX":35,"mouseY":5,"time":6526},{"type":3,"mouseX":29,"mouseY":4,"time":6558},{"type":3,"mouseX":24,"mouseY":3,"time":6589},{"type":3,"mouseX":51,"mouseY":8,"time":6620},{"type":3,"mouseX":41,"mouseY":5,"time":6651},{"type":3,"mouseX":59,"mouseY":8,"time":6683},{"type":3,"mouseX":70,"mouseY":10,"time":6714},{"type":3,"mouseX":22,"mouseY":3,"time":6745},{"type":3,"mouseX":4,"mouseY":0,"time":6776},{"type":3,"mouseX":1,"mouseY":1,"time":6808},{"type":3,"mouseX":2,"mouseY":0,"time":6839},{"type":3,"mouseX":16,"mouseY":0,"time":6870},{"type":3,"mouseX":23,"mouseY":1,"time":6901},{"type":3,"mouseX":5,"mouseY":0,"time":6933},{"type":3,"mouseX":1,"mouseY":0,"time":6979},{"type":3,"mouseX":6,"mouseY":0,"time":7011},{"type":3,"mouseX":11,"mouseY":1,"time":7042},{"type":3,"mouseX":33,"mouseY":2,"time":7073},{"type":3,"mouseX":32,"mouseY":0,"time":7104},{"type":3,"mouseX":5,"mouseY":0,"time":7136},{"type":3,"mouseX":4,"mouseY":0,"time":7183},{"type":3,"mouseX":9,"mouseY":0,"time":7214},{"type":3,"mouseX":2,"mouseY":0,"time":7245},{"type":3,"mouseX":7,"mouseY":0,"time":7276},{"type":3,"mouseX":16,"mouseY":-2,"time":7308},{"type":3,"mouseX":4,"mouseY":-1,"time":7339},{"type":3,"mouseX":3,"mouseY":0,"time":7370},{"type":3,"mouseX":9,"mouseY":-2,"time":7401},{"type":3,"mouseX":2,"mouseY":0,"time":7433},{"type":3,"mouseX":8,"mouseY":-2,"time":7479},{"type":3,"mouseX":6,"mouseY":-1,"time":7511},{"type":3,"mouseX":6,"mouseY":-3,"time":7651},{"type":3,"mouseX":7,"mouseY":-2,"time":7683},{"type":3,"mouseX":2,"mouseY":-1,"time":7729},{"type":3,"mouseX":2,"mouseY":-1,"time":7761},{"type":3,"mouseX":16,"mouseY":-3,"time":7808},{"type":3,"mouseX":34,"mouseY":-5,"time":7839},{"type":3,"mouseX":12,"mouseY":-2,"time":7870},{"type":3,"mouseX":0,"mouseY":-1,"time":8433},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":10734},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":11609},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":12813},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":12984},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":13672},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":14297},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":15234},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":15359},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":16953},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":17047},{"type":3,"mouseX":18,"mouseY":8,"time":18542},{"type":3,"mouseX":39,"mouseY":17,"time":18573},{"type":3,"mouseX":57,"mouseY":23,"time":18604},{"type":3,"mouseX":46,"mouseY":21,"time":18636},{"type":3,"mouseX":46,"mouseY":17,"time":18667},{"type":3,"mouseX":59,"mouseY":22,"time":18714},{"type":3,"mouseX":40,"mouseY":11,"time":18761},{"type":3,"mouseX":43,"mouseY":12,"time":18792},{"type":3,"mouseX":32,"mouseY":7,"time":18823},{"type":3,"mouseX":43,"mouseY":9,"time":18854},{"type":3,"mouseX":50,"mouseY":7,"time":18886},{"type":3,"mouseX":51,"mouseY":0,"time":18917},{"type":3,"mouseX":60,"mouseY":2,"time":18948},{"type":3,"mouseX":54,"mouseY":3,"time":18979},{"type":3,"mouseX":52,"mouseY":3,"time":19011},{"type":3,"mouseX":73,"mouseY":3,"time":19042},{"type":3,"mouseX":74,"mouseY":0,"time":19073},{"type":3,"mouseX":65,"mouseY":-4,"time":19104},{"type":3,"mouseX":65,"mouseY":-2,"time":19136},{"type":3,"mouseX":41,"mouseY":-4,"time":19167},{"type":3,"mouseX":30,"mouseY":0,"time":19198},{"type":3,"mouseX":41,"mouseY":1,"time":19229},{"type":3,"mouseX":28,"mouseY":0,"time":19261},{"type":3,"mouseX":35,"mouseY":1,"time":19292},{"type":3,"mouseX":50,"mouseY":4,"time":19323},{"type":3,"mouseX":30,"mouseY":0,"time":19354},{"type":3,"mouseX":26,"mouseY":1,"time":19386},{"type":3,"mouseX":22,"mouseY":4,"time":19417},{"type":3,"mouseX":17,"mouseY":4,"time":19448},{"type":3,"mouseX":27,"mouseY":10,"time":19479},{"type":3,"mouseX":27,"mouseY":9,"time":19511},{"type":3,"mouseX":15,"mouseY":3,"time":19542},{"type":3,"mouseX":10,"mouseY":5,"time":19573},{"type":3,"mouseX":2,"mouseY":1,"time":19604},{"type":3,"mouseX":3,"mouseY":3,"time":19651},{"type":3,"mouseX":5,"mouseY":3,"time":19683},{"type":3,"mouseX":4,"mouseY":3,"time":19714},{"type":3,"mouseX":4,"mouseY":4,"time":19745},{"type":3,"mouseX":2,"mouseY":3,"time":19792},{"type":3,"mouseX":2,"mouseY":1,"time":19823},{"type":3,"mouseX":1,"mouseY":1,"time":19854},{"type":3,"mouseX":1,"mouseY":1,"time":19917},{"type":3,"mouseX":2,"mouseY":4,"time":19948},{"type":3,"mouseX":2,"mouseY":2,"time":19979},{"type":3,"mouseX":2,"mouseY":1,"time":20011},{"type":3,"mouseX":1,"mouseY":1,"time":20042},{"type":3,"mouseX":0,"mouseY":-1,"time":20558},{"type":3,"mouseX":-1,"mouseY":-3,"time":20683},{"type":3,"mouseX":-1,"mouseY":-1,"time":20714},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":22141},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":22516},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":25156},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":25281},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":26922},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":27031}],"info":{"name":"","description":"","x":319,"y":195,"width":1920,"height":1080,"recordDpi":1.25}} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/process.json b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/process.json new file mode 100644 index 00000000..494b13fc --- /dev/null +++ b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/process.json @@ -0,0 +1,108 @@ + +[ + { + "type": "地图追踪", + "data": "蒙德酒客-1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "键鼠脚本", + "data": "23332.json", + "note": "执行键鼠脚本" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "isinMainUi", + "note": "等待返回主界面" + }, + { + "type": "键鼠脚本", + "data": "666.json", + "note": "键鼠脚本" + }, + { + "type": "追踪委托", + "data": { + "npc": "宁禄", + "iconType": "task" + }, + "note": "追踪委托" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": ["你怎么了","你也太喜欢","我知道了"], + "npcWhiteList": ["宁禄"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "地图追踪", + "data": "蒙德酒客-2.json", + "note": "执行第二个地图追踪步骤,找到优律" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": ["就交给我们"], + "npcWhiteList": ["优律"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "对话", + "data": { + "skipCount": 4, + "priorityOptions": ["这些够了吗"], + "npcWhiteList": ["昆恩"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "地图追踪", + "data": "蒙德酒客-1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "键鼠脚本", + "data": "23332.json", + "note": "执行键鼠脚本" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "isinMainUi", + "note": "等待返回主界面" + }, + { + "type": "键鼠脚本", + "data": "666.json", + "note": "键鼠脚本" + }, + { + "type": "追踪委托", + "data": { + "npc": "宁禄", + "iconType": "task" + }, + "note": "追踪委托" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": ["优律小姐"], + "npcWhiteList": ["宁禄"] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/蒙德酒客-1.json b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/蒙德酒客-1.json new file mode 100644 index 00000000..8386b8ee --- /dev/null +++ b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/蒙德酒客-1.json @@ -0,0 +1,141 @@ +{ + "info": { + "name": "蒙德酒客-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "蒙德酒客-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751348558473 + }, + "positions": [ + { + "id": 1, + "x": -868.1357421875, + "y": 2280.85888671875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -874.130859375, + "y": 2291.739013671875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -885.8427734375, + "y": 2314.918212890625, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -886.931640625, + "y": 2317.78271484375, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -890.6103515625, + "y": 2322.434326171875, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -906.4013671875, + "y": 2312.19287109375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": -910.5029296875, + "y": 2310.13818359375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": -915.9306640625, + "y": 2322.024169921875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -918.798828125, + "y": 2327.326416015625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }, + { + "id": 10, + "x": -922.8818359375, + "y": 2326.80615234375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 11, + "x": -935.3740234375, + "y": 2315.24365234375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 12, + "x": -936.97265625, + "y": 2309.88134765625, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 13, + "x": -933.779296875, + "y": 2310.590576171875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 14, + "x": -930.591796875, + "y": 2314.19482421875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/蒙德酒客-2.json b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/蒙德酒客-2.json new file mode 100644 index 00000000..52791b8f --- /dev/null +++ b/repo/js/AutoCommission/assets/process/蒙德酒客/蒙德城/蒙德酒客-2.json @@ -0,0 +1,87 @@ +{ + "info": { + "name": "蒙德酒客-2", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "蒙德酒客-2", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751348478057 + }, + "positions": [ + { + "id": 1, + "x": -867.701171875, + "y": 2281.37255859375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": -877.2392578125, + "y": 2273.73193359375, + "action": "", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 3, + "x": -885.953125, + "y": 2262.988037109375, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -891.9996790672249, + "y": 2251.5, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -897.1435546875, + "y": 2248.418701171875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -920.9296875, + "y": 2234.560302734375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 7, + "x": -926.216796875, + "y": 2237.862548828125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": -932.439453125, + "y": 2241.526123046875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/1.json b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/1.json new file mode 100644 index 00000000..ae7a7112 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/1.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "1", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1166.845703125, + "y": 2133.358642578125, + "action_params": "" + }, + { + "id": 2, + "x": -1172.5341796875, + "y": 2103.667236328125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1186.0234375, + "y": 2066.802734375, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/2.json b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/2.json new file mode 100644 index 00000000..f5f7db09 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/2.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "2", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -867.685546875, + "y": 2281.36083984375, + "action_params": "" + }, + { + "id": 2, + "x": -846.0087890625, + "y": 2238.015625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -854.142578125, + "y": 2233.718505859375, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/process.json b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/process.json new file mode 100644 index 00000000..f525b968 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/process.json @@ -0,0 +1,38 @@ +[ + { + "type": "地图追踪", + "data": "1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "地图追踪", + "data": "2.json", + "note": "执行第二个地图追踪步骤" + }, + { + "type": "键鼠脚本", + "data": "对话并关闭阅读.json", + "note": "对话并关闭阅读" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "地图追踪", + "data": "1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + } +] + diff --git a/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/对话并关闭阅读.json b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/对话并关闭阅读.json new file mode 100644 index 00000000..494b6fef --- /dev/null +++ b/repo/js/AutoCommission/assets/process/触不可及的恋人/风起地/对话并关闭阅读.json @@ -0,0 +1,153 @@ +{ + "macroEvents": [ + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 0 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 1000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 1300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 2000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 2300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 3000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 3300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 4000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 4300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 5000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 5300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 6000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 6300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 7000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 7300 + }, + { + "type": 0, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 8000 + }, + { + "type": 1, + "keyCode": 70, + "mouseX": 0, + "mouseY": 0, + "time": 8300 + }, + { + "type": 4, + "mouseX": 1840, + "mouseY": 43, + "mouseButton": "Left", + "time": 9000 + }, + { + "type": 5, + "mouseX": 1840, + "mouseY": 43, + "mouseButton": "Left", + "time": 9300 + } + ], + "info": { + "name": "对话并关闭阅读", + "description": "", + "x": 0, + "y": 0, + "width": 1920, + "height": 1080, + "recordDpi": 1.5 + } +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/诗歌交流/坠星山谷/process.json b/repo/js/AutoCommission/assets/process/诗歌交流/坠星山谷/process.json index 13657126..81e17137 100644 --- a/repo/js/AutoCommission/assets/process/诗歌交流/坠星山谷/process.json +++ b/repo/js/AutoCommission/assets/process/诗歌交流/坠星山谷/process.json @@ -36,7 +36,7 @@ "note": "执行第三个地图追踪步骤" }, { - "type": "5", + "type": "对话", "note": "执行对话步骤,默认跳过10次对话" } ] diff --git a/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/process.json b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/process.json new file mode 100644 index 00000000..1c78e354 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/process.json @@ -0,0 +1,42 @@ +[ + { + "type": "地图追踪", + "data": "语言交流-风龙废墟-1.json", + "note": "执行第一个地图追踪步骤" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "地图追踪", + "data": "语言交流-风龙废墟-2.json", + "note": "执行第二个地图追踪步骤" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + }, + { + "type": "地图追踪", + "data": "语言交流-风龙废墟-3.json", + "note": "执行第三个地图追踪步骤" + }, + { + "type": "地图追踪", + "data": "执行战斗策略.json", + "note": "执行战斗策略" + }, + { + "type": "地图追踪", + "data": "语言交流-风龙废墟-4.json", + "note": "执行第四个地图追踪步骤" + }, + { + "type": "按键", + "data": "F", + "note": "按下F键" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/执行战斗策略.json b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/执行战斗策略.json new file mode 100644 index 00000000..3a561e71 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/执行战斗策略.json @@ -0,0 +1,22 @@ +{ + "info": { + "name": "5", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": 72.7578125, + "y": 2767.362060546875, + "type": "fight", + "move_mode": "walk", + "action": "", + "action_params": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-1.json b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-1.json new file mode 100644 index 00000000..4a32f789 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-1.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "1", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -83.3798828125, + "y": 2781.734130859375, + "action_params": "" + }, + { + "id": 2, + "x": -4.775390625, + "y": 2798.0595703125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -7.8662109375, + "y": 2803.570068359375, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-2.json b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-2.json new file mode 100644 index 00000000..3e0d416f --- /dev/null +++ b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-2.json @@ -0,0 +1,31 @@ +{ + "info": { + "name": "2", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -5.537109375, + "y": 2801.556884765625, + "action_params": "" + }, + { + "id": 2, + "x": 43.2666015625, + "y": 2761.027587890625, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-3.json b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-3.json new file mode 100644 index 00000000..e381e7d9 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-3.json @@ -0,0 +1,31 @@ +{ + "info": { + "name": "3", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": 43.578125, + "y": 2761.056640625, + "action_params": "" + }, + { + "id": 2, + "x": 72.7578125, + "y": 2767.362060546875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-4.json b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-4.json new file mode 100644 index 00000000..19afd8b6 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/语言交流/风龙废墟/语言交流-风龙废墟-4.json @@ -0,0 +1,22 @@ +{ + "info": { + "name": "4", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": 72.7578125, + "y": 2767.362060546875, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/process.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/process.json index ed81a6ef..68d1e0a0 100644 --- a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/process.json +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/process.json @@ -7,7 +7,7 @@ { "type": "对话", "data": { - "skipCount": 2, + "skipCount": 5, "priorityOptions": [ "餐品外送订单", "好吧" @@ -19,51 +19,33 @@ "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" }, { - "type": "地图追踪", - "data": "餐品订单-2.json", - "note": "执行第二个地图追踪步骤,找到冒失的拉帕德" - }, - { - "type": "按键", - "data": "F", - "note": "对话" - }, - { - "type": "按键", - "data": "F", - "note": "对话" - }, - { - "type": "按键", - "data": "F", - "note": "对话" - }, - { - "type": "地图追踪", - "data": "餐品订单-3.json", - "note": "执行第三个地图追踪步骤,自动战斗" - }, - { - "type": "地图追踪", - "data": "餐品订单-4.json", - "note": "执行第四个地图追踪步骤,对话" - }, - { - "type": "对话", - "data": { - "skipCount": 2 - }, - "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" - }, - { + "type": "委托描述检测", + "data": "取得制作好的餐品", + "note": "分支名字正确的情况", + "run": "取餐.json" + }, + + { + "type": "委托描述检测", + "data": "询问帕拉德", + "note": "分支名字正确的情况", + "run": "询问帕拉德.json" + }, + { + "type": "委托描述检测", + "data": "运送餐品给活跃的欧琳", + "note": "分支名字正确的情况", + "run": "找到活跃的欧琳.json" + }, + { "type": "地图追踪", "data": "餐品订单-1.json", "note": "执行第四个地图追踪步骤" - }, - { + }, + { "type": "对话", "data": { - "skipCount": 2, + "skipCount": 5, "priorityOptions": [ "交付餐费", "这是餐费" diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/取餐.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/取餐.json new file mode 100644 index 00000000..6d2d34ef --- /dev/null +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/取餐.json @@ -0,0 +1,35 @@ +[ + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": [ + "已经找好了" + + ], + "npcWhiteList": [ + "莎拉" + ] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + }, + { + "type": "地图追踪", + "data": "餐品订单-晨曦酒庄-1.json", + "note": "执行地图追踪找到恩内斯特" + }, + { + "type": "对话", + "data": { + "skipCount": 5, + "priorityOptions": [ + "这是你点的餐" + + ], + "npcWhiteList": [ + "恩内斯特" + ] + }, + "note": "执行对话步骤,优先选择特定选项并与白名单NPC交互" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/找到活跃的欧琳.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/找到活跃的欧琳.json new file mode 100644 index 00000000..5f48b48d --- /dev/null +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/找到活跃的欧琳.json @@ -0,0 +1,16 @@ +[ + { + "type": "地图追踪", + "data": "餐品订单-5.json", + "note": "执行第五个地图追踪步骤,自动战斗" + }, + { + "type": "地图追踪", + "data": "餐品订单-6.json", + "note": "执行第六个地图追踪步骤,对话" + }, + { + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + } +] \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/询问帕拉德.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/询问帕拉德.json new file mode 100644 index 00000000..14167a78 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/询问帕拉德.json @@ -0,0 +1,29 @@ +[ + { + "type": "地图追踪", + "data": "餐品订单-2.json", + "note": "执行第二个地图追踪步骤" + }, + { + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + }, + { + "type": "地图追踪", + "data": "餐品订单-3.json", + "note": "执行第三个地图追踪步骤,找到冒失的帕拉德" + }, + { + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + }, + { + "type": "地图追踪", + "data": "餐品订单-4.json", + "note": "执行第四个地图追踪步骤,对话" + }, + { + "type": "对话", + "note": "执行对话步骤,默认跳过10次对话" + } +] diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-2.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-2.json index 99cf13d9..a13cdb3e 100644 --- a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-2.json +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-2.json @@ -2,17 +2,19 @@ "info": { "name": "餐品订单-2", "type": "collect", - "author": "小鹰划船不用桨", + "author": "云闲vsv", "version": "1.0", - "description": "找到冒失的拉帕德对话", + "description": "餐品订单-2", "map_name": "Teyvat", - "bgi_version": "0.45.0" + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751272328810 }, "positions": [ { "id": 1, - "x": -867.5908203125, - "y": 1992.23193359375, + "x": -867.6806640625, + "y": 1992.19775390625, "action": "", "move_mode": "walk", "action_params": "", @@ -20,30 +22,75 @@ }, { "id": 2, - "x": -880.208984375, - "y": 1973.0556640625, - "type": "path", - "move_mode": "dash", + "x": -876.0380859375, + "y": 1983.77880859375, "action": "", - "action_params": "" + "move_mode": "dash", + "action_params": "", + "type": "path" }, { "id": 3, - "x": -879.7568359375, - "y": 1954.55126953125, - "type": "path", + "x": -880.236328125, + "y": 1966.93603515625, + "action": "", "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 4, + "x": -880.912109375, + "y": 1950.27783203125, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 5, + "x": -890.921875, + "y": 1930.01904296875, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 6, + "x": -884.580078125, + "y": 1928.8720703125, + "type": "path", + "move_mode": "walk", "action": "", "action_params": "" }, { - "id": 4, - "x": -899.2763671875, - "y": 1909.986328125, - "type": "path", - "move_mode": "run", + "id": 7, + "x": -882.423828125, + "y": 1935.13330078125, "action": "", - "action_params": "" + "move_mode": "dash", + "action_params": "", + "type": "path" + }, + { + "id": 8, + "x": -872.28515625, + "y": 1947.14404296875, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "path" + }, + { + "id": 9, + "x": -869.341796875, + "y": 1948.38330078125, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" } ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-3.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-3.json index 3fc6052d..22d7ecde 100644 --- a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-3.json +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-3.json @@ -2,29 +2,47 @@ "info": { "name": "餐品订单-3", "type": "collect", - "author": "小鹰划船不用桨", + "author": "云闲vsv", "version": "1.0", - "description": "寻路+自动战斗", + "description": "餐品订单-3", "map_name": "Teyvat", "bgi_version": "0.45.0" }, "positions": [ { "id": 1, - "x": -906.3720703125, - "y": 1856.09228515625, - "type": "path", - "move_mode": "run", "action": "", + "move_mode": "dash", + "type": "path", + "x": -869.3271484375, + "y": 1948.564453125, "action_params": "" }, { "id": 2, - "x": -840.013671875, - "y": 1825.50830078125, + "x": -889.55859375, + "y": 1932.28955078125, "type": "path", "move_mode": "dash", - "action": "fight", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -896.9921875, + "y": 1917.9619140625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -900.1279296875, + "y": 1908.84814453125, + "type": "target", + "move_mode": "walk", + "action": "", "action_params": "" } ] diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-4.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-4.json index 2ba011af..f65c683b 100644 --- a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-4.json +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-4.json @@ -2,9 +2,9 @@ "info": { "name": "餐品订单-4", "type": "collect", - "author": "小鹰划船不用桨", + "author": "云闲vsv", "version": "1.0", - "description": "寻路", + "description": "餐品订单-4", "map_name": "Teyvat", "bgi_version": "0.45.0" }, @@ -12,17 +12,44 @@ { "id": 1, "action": "", - "move_mode": "walk", + "move_mode": "dash", "type": "path", - "x": -839.8271484375, - "y": 1826.74658203125, + "x": -899.7958984375, + "y": 1907.9736328125, "action_params": "" }, { "id": 2, - "x": -838.728515625, - "y": 1825.83642578125, - "type": "orientation", + "x": -907.2802734375, + "y": 1849.0224609375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -878.3642578125, + "y": 1841.28125, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -878.34765625, + "y": 1852.4248046875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -880.515625, + "y": 1856.84228515625, + "type": "target", "move_mode": "walk", "action": "", "action_params": "" diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-5.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-5.json new file mode 100644 index 00000000..25291130 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-5.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "餐品订单-5", + "type": "collect", + "author": "小鹰划船不用桨", + "version": "1.0", + "description": "餐品订单-5", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -880.248046875, + "y": 1857.73388671875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -872.32421875, + "y": 1838.71630859375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -840.013671875, + "y": 1825.50830078125, + "action": "fight", + "move_mode": "dash", + "action_params": "", + "type": "path" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-6.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-6.json new file mode 100644 index 00000000..3098d63f --- /dev/null +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-6.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "餐品订单-6", + "type": "collect", + "author": "小鹰划船不用桨", + "version": "1.0", + "description": "餐品订单-6", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "x": -845.49609375, + "y": 1827.08056640625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 2, + "x": -844.818359375, + "y": 1824.11279296875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -838.5029296875, + "y": 1825.25634765625, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-晨曦酒庄-1.json b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-晨曦酒庄-1.json new file mode 100644 index 00000000..bc01c577 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/餐品订单/蒙德城/餐品订单-晨曦酒庄-1.json @@ -0,0 +1,105 @@ +{ + "info": { + "name": "餐品订单-晨曦酒庄-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "餐品订单-晨曦酒庄-1", + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751031744808 + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -578.794921875, + "y": 1853.41015625, + "action_params": "" + }, + { + "id": 2, + "x": -558.85546875, + "y": 1844.28125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -505.28515625, + "y": 1820.08203125, + "type": "path", + "move_mode": "run", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -498.1748046875, + "y": 1817.87109375, + "type": "path", + "move_mode": "fly", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -461.40234375, + "y": 1800.5986328125, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + }, + { + "id": 6, + "x": -426.3291015625, + "y": 1785.091796875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -413.607421875, + "y": 1792.0458984375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -405.88671875, + "y": 1792.48388671875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -398.4873046875, + "y": 1789.5810546875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -395.7255859375, + "y": 1788.23876953125, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/process/鸽子鸭子小孩子/坠星山谷/process.json b/repo/js/AutoCommission/assets/process/鸽子鸭子小孩子/坠星山谷/process.json index 5dc5e1c1..a6325bb6 100644 --- a/repo/js/AutoCommission/assets/process/鸽子鸭子小孩子/坠星山谷/process.json +++ b/repo/js/AutoCommission/assets/process/鸽子鸭子小孩子/坠星山谷/process.json @@ -1,3 +1,4 @@ +json [ { "type": "地图追踪", @@ -9,11 +10,6 @@ "data": "F", "note": "按下F键" }, - { - "type": "地图追踪", - "data": "暂停脚本.json", - "note": "暂停一下" - }, { "type": "按键", "data": "F", @@ -36,18 +32,12 @@ }, { "type": "地图追踪", - "data": "鸽子、鸭子、小孩子-坠星山谷-1.json", + "data": "鸽子、鸭子、小孩子-坠星山谷-3.json", "note": "执行第一个地图追踪步骤" }, { "type": "按键", "data": "F", "note": "按下F键" - }, - { - "type": "地图追踪", - "data": "暂停脚本.json", - "note": "暂停一下" } ] - diff --git a/repo/js/AutoCommission/assets/process/鸽子鸭子小孩子/坠星山谷/鸽子、鸭子、小孩子-坠星山谷-3.json b/repo/js/AutoCommission/assets/process/鸽子鸭子小孩子/坠星山谷/鸽子、鸭子、小孩子-坠星山谷-3.json new file mode 100644 index 00000000..4a09e8a1 --- /dev/null +++ b/repo/js/AutoCommission/assets/process/鸽子鸭子小孩子/坠星山谷/鸽子、鸭子、小孩子-坠星山谷-3.json @@ -0,0 +1,58 @@ +{ + "info": { + "name": "到达任务提交点位", + "type": "collect", + "author": "未知_", + "version": "1.0", + "description": "到达任务提交地点", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "path", + "x": -1069.560546875, + "y": 2227.756591796875, + "action_params": "" + }, + { + "id": 2, + "x": -1084.4658203125, + "y": 2217.5849609375, + "type": "path", + "move_mode": "swim", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1070.591796875, + "y": 2196.029296875, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1038.0712890625, + "y": 2185.116943359375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1017.421875, + "y": 2184.506103515625, + "type": "target", + "move_mode": "run", + "action": "", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/冷冰冰的大麻烦/龙脊雪山-2.json b/repo/js/AutoCommission/assets/冷冰冰的大麻烦/龙脊雪山-2.json index f581706e..ce156b63 100644 --- a/repo/js/AutoCommission/assets/冷冰冰的大麻烦/龙脊雪山-2.json +++ b/repo/js/AutoCommission/assets/冷冰冰的大麻烦/龙脊雪山-2.json @@ -1,17 +1,20 @@ { "info": { - "name": "龙脊雪山-2", + "name": "龙脊雪山-1", "type": "collect", - "author": "1", + "author": "星野", "version": "1.0", "description": "", - "bgi_version": "0.42.0" + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751961150219 }, "positions": [ { "id": 1, - "x": -413.59, - "y": 1162.88, + "x": -410.8291015625, + "y": 1161.3203125, "action": "", "move_mode": "walk", "action_params": "", @@ -19,80 +22,44 @@ }, { "id": 2, - "x": -421.08, - "y": 1154.75, + "x": -415.2587890625, + "y": 1153.2080078125, "action": "", - "move_mode": "walk", + "move_mode": "dash", "action_params": "", "type": "path" }, { "id": 3, - "x": -420.58, - "y": 1147.0, + "x": -402.9423828125, + "y": 1140.7822265625, "action": "", - "move_mode": "walk", + "move_mode": "dash", "action_params": "", "type": "path" }, { "id": 4, - "x": -408.71, - "y": 1145.88, + "x": -390.1337890625, + "y": 1114.8896484375, "action": "", - "move_mode": "walk", + "move_mode": "dash", "action_params": "", "type": "path" }, { "id": 5, - "x": -403.22, - "y": 1135.38, + "x": -370.2587890625, + "y": 1090.80810546875, "action": "", - "move_mode": "walk", + "move_mode": "dash", "action_params": "", "type": "path" }, { "id": 6, - "x": -398.22, - "y": 1123.62, - "action": "", - "move_mode": "walk", - "action_params": "", - "type": "path" - }, - { - "id": 7, - "x": -394.22, - "y": 1114.62, - "action": "", - "move_mode": "walk", - "action_params": "", - "type": "path" - }, - { - "id": 8, - "x": -387.1, - "y": 1105.0, - "action": "", - "move_mode": "walk", - "action_params": "", - "type": "path" - }, - { - "id": 9, - "x": -365.57, - "y": 1087.44, - "action": "fight", - "move_mode": "walk", - "action_params": "", - "type": "path" - }, - { - "id": 10, - "x": -358.75, - "y": 1081.44, + "x": -362.462890625, + "y": 1084.03369140625, "action": "fight", "move_mode": "walk", "action_params": "", diff --git a/repo/js/AutoCommission/assets/危险运输现象/望风山地-1.json b/repo/js/AutoCommission/assets/危险运输现象/望风山地-1.json new file mode 100644 index 00000000..59079993 --- /dev/null +++ b/repo/js/AutoCommission/assets/危险运输现象/望风山地-1.json @@ -0,0 +1,112 @@ +{ + "info": { + "name": "危险运输现象-1", + "type": "collect", + "author": "云闲vsv", + "version": "1.0", + "description": "危险运输现象", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -1629.8583984375, + "y": 2833.74169921875, + "action_params": "" + }, + { + "id": 2, + "x": -1575.8056640625, + "y": 2857.052490234375, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": -1535.697265625, + "y": 2829.27197265625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": -1547.1376953125, + "y": 2815.22998046875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 5, + "x": -1534.7470703125, + "y": 2797.421630859375, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 6, + "x": -1540.0478515625, + "y": 2787.2001953125, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 7, + "x": -1545.884765625, + "y": 2785.009033203125, + "type": "path", + "move_mode": "climb", + "action": "", + "action_params": "" + }, + { + "id": 8, + "x": -1570.8525390625, + "y": 2808.103759765625, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 9, + "x": -1592.0322265625, + "y": 2801.07666015625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 10, + "x": -1583.134765625, + "y": 2769.666259765625, + "type": "path", + "move_mode": "dash", + "action": "", + "action_params": "" + }, + { + "id": 11, + "x": -1586.6806640625, + "y": 2758.1416015625, + "type": "path", + "move_mode": "walk", + "action": "fight", + "action_params": "" + } + ] +} \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/持盾的危机/千风神殿-1.json b/repo/js/AutoCommission/assets/持盾的危机/千风神殿-1.json index 853c772f..41dab7eb 100644 --- a/repo/js/AutoCommission/assets/持盾的危机/千风神殿-1.json +++ b/repo/js/AutoCommission/assets/持盾的危机/千风神殿-1.json @@ -6,7 +6,9 @@ "version": "1.0", "description": "", "map_name": "Teyvat", - "bgi_version": "0.45.0" + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751796510684 }, "positions": [ { @@ -19,107 +21,33 @@ }, { "id": 2, - "x": -1604, - "y": 2122.5, - "action": "", - "move_mode": "dash", - "type": "path" + "x": -1684, + "y": 2165.5, + "type": "path", + "move_mode": "dash" }, { "id": 3, - "x": -1568, - "y": 2112, - "action": "", - "move_mode": "dash", - "type": "path" + "x": -1697.75, + "y": 2168.25, + "type": "path", + "move_mode": "jump" }, { "id": 4, - "x": -1561.25, - "y": 2130.75, - "action": "", - "move_mode": "dash", - "type": "path" + "x": -1721.75, + "y": 2177.75, + "type": "path", + "move_mode": "dash" }, { "id": 5, - "x": -1553.5, - "y": 2171.25, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 6, - "x": -1580.5, - "y": 2181.5, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 7, - "x": -1599.5, - "y": 2192.75, - "action": "", - "move_mode": "run", - "type": "path" - }, - { - "id": 8, - "x": -1602, - "y": 2204.25, - "action": "", - "move_mode": "walk", - "type": "path" - }, - { - "id": 9, - "x": -1610, - "y": 2213.75, - "action": "", - "move_mode": "run", - "type": "path" - }, - { - "id": 10, - "x": -1634, - "y": 2198.75, - "action": "", - "move_mode": "walk", - "type": "path" - }, - { - "id": 11, - "x": -1657, - "y": 2188.5, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 12, - "x": -1686.5, - "y": 2184.5, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 13, - "x": -1712.5, - "y": 2194.5, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 14, - "x": -1737.88, + "x": -1737.880000000001, "y": 2179, + "type": "path", + "move_mode": "dash", "action": "fight", - "move_mode": "walk", - "type": "path" + "action_params": "" } ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/攀高危险/风啸山坡-1.json b/repo/js/AutoCommission/assets/攀高危险/风啸山坡-1.json index d19b207e..632fd1b7 100644 --- a/repo/js/AutoCommission/assets/攀高危险/风啸山坡-1.json +++ b/repo/js/AutoCommission/assets/攀高危险/风啸山坡-1.json @@ -2,10 +2,13 @@ "info": { "name": "风啸山坡-1", "type": "collect", - "author": "1", + "author": "星野", "version": "", "description": "", - "bgi_version": "0.42.3" + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751797226582 }, "positions": [ { @@ -29,7 +32,7 @@ "x": -1386.91, "y": 1636.86, "action": "", - "move_mode": "walk", + "move_mode": "dash", "type": "path" }, { @@ -37,7 +40,7 @@ "x": -1372.48, "y": 1627.75, "action": "", - "move_mode": "walk", + "move_mode": "dash", "type": "path" }, { @@ -54,49 +57,17 @@ "x": -1348.7, "y": 1620.9, "action": "", - "move_mode": "walk", + "move_mode": "dash", "type": "path" }, { "id": 7, - "x": -1338.38, - "y": 1621.79, - "action": "", - "move_mode": "walk", - "type": "path" - }, - { - "id": 8, "x": -1330.09, "y": 1622.75, "action": "fight", "move_mode": "walk", "action_params": "", "type": "path" - }, - { - "id": 9, - "x": -1331.35, - "y": 1628.95, - "action": "", - "move_mode": "walk", - "type": "path" - }, - { - "id": 10, - "x": -1336.22, - "y": 1619.83, - "action": "", - "move_mode": "walk", - "type": "path" - }, - { - "id": 11, - "x": -1329.16, - "y": 1618.36, - "action": "", - "move_mode": "walk", - "type": "path" } ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/极速前进/苍风高地-1.json b/repo/js/AutoCommission/assets/极速前进/苍风高地-1.json index 69f86d50..c7feeb7a 100644 --- a/repo/js/AutoCommission/assets/极速前进/苍风高地-1.json +++ b/repo/js/AutoCommission/assets/极速前进/苍风高地-1.json @@ -2,11 +2,13 @@ "info": { "name": "极速前进-1", "type": "collect", - "author": "11", + "author": "星野", "version": "1.0", - "description": "极速前进-1", + "description": "", "map_name": "Teyvat", - "bgi_version": "0.45.0" + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1752243918114 }, "positions": [ { @@ -20,11 +22,11 @@ }, { "id": 2, - "x": -605.744140625, - "y": 1885.2265625, - "action": "", + "x": -605.33, + "y": 1885.12, + "action": "combat_script", "move_mode": "walk", - "action_params": "", + "action_params": "wait(2)", "type": "target" }, { @@ -105,7 +107,7 @@ "y": 1990.375, "action": "combat_script", "move_mode": "walk", - "action_params": "attack,", + "action_params": "attack", "type": "path" }, { @@ -148,10 +150,10 @@ "id": 16, "x": -377.810546875, "y": 1911.63330078125, - "type": "path", - "move_mode": "walk", "action": "", - "action_params": "" + "move_mode": "walk", + "action_params": "", + "type": "path" }, { "id": 17, @@ -184,19 +186,19 @@ "id": 20, "x": -304.83203125, "y": 1870.14453125, - "type": "path", - "move_mode": "walk", "action": "", - "action_params": "" + "move_mode": "walk", + "action_params": "", + "type": "path" }, { "id": 21, "x": -302.966796875, "y": 1865.37890625, - "type": "path", - "move_mode": "fly", "action": "", - "action_params": "" + "move_mode": "fly", + "action_params": "", + "type": "path" }, { "id": 22, diff --git a/repo/js/AutoCommission/assets/邪恶的扩张/明冠峡-1.json b/repo/js/AutoCommission/assets/邪恶的扩张/明冠峡-1.json index b7dc3dc4..46e27b47 100644 --- a/repo/js/AutoCommission/assets/邪恶的扩张/明冠峡-1.json +++ b/repo/js/AutoCommission/assets/邪恶的扩张/明冠峡-1.json @@ -2,101 +2,77 @@ "info": { "name": "明冠峡-1", "type": "collect", - "author": "LX666-666", + "author": "星野", "version": "1.0", "description": "", - "bgi_version": "0.42.3" + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751960781703 }, "positions": [ { "id": 1, + "x": -440.1162109375, + "y": 2580.79345703125, "action": "", - "move_mode": "dash", - "type": "teleport", - "x": -440.1, - "y": 2580.74, - "action_params": "" + "move_mode": "walk", + "action_params": "", + "type": "teleport" }, { "id": 2, - "x": -447.81, - "y": 2608.55, - "type": "path", - "move_mode": "dash", + "x": -456.8173828125, + "y": 2633.22509765625, "action": "", - "action_params": "" + "move_mode": "dash", + "action_params": "", + "type": "path" }, { "id": 3, - "x": -444.1, - "y": 2629.07, - "type": "path", - "move_mode": "dash", + "x": -466.009765625, + "y": 2660.5263671875, "action": "", - "action_params": "" + "move_mode": "fly", + "action_params": "", + "type": "path" }, { "id": 4, - "x": -433.4, - "y": 2649.99, - "type": "path", - "move_mode": "dash", - "action": "", - "action_params": "" + "x": -477.732421875, + "y": 2695.511474609375, + "action": "stop_flying", + "move_mode": "fly", + "action_params": "", + "type": "path" }, { "id": 5, - "x": -424.95, - "y": 2672.84, - "type": "path", - "move_mode": "dash", + "x": -478.943359375, + "y": 2698.708251953125, "action": "", - "action_params": "" + "move_mode": "dash", + "action_params": "", + "type": "path" }, { "id": 6, - "x": -416.86, - "y": 2692.99, - "type": "path", - "move_mode": "dash", + "x": -484.9638671875, + "y": 2718.055419921875, "action": "", - "action_params": "" + "move_mode": "dash", + "action_params": "", + "type": "path" }, { "id": 7, - "x": -422.62, - "y": 2697.44, - "type": "path", - "move_mode": "fly", - "action": "", - "action_params": "" - }, - { - "id": 8, - "x": -493.25, - "y": 2743.29, - "type": "path", - "move_mode": "fly", - "action": "stop_flying", - "action_params": "" - }, - { - "id": 9, - "x": -495.43, - "y": 2738.67, - "type": "path", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - { - "id": 10, - "x": -495.39, - "y": 2738.71, - "type": "path", - "move_mode": "walk", + "x": -492.5908203125, + "y": 2738.40234375, "action": "fight", - "action_params": "" + "move_mode": "dash", + "action_params": "", + "type": "path" } ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/邪恶的扩张/望风山地-1.json b/repo/js/AutoCommission/assets/邪恶的扩张/望风山地-1.json index 0021ba0a..ba5b3c58 100644 --- a/repo/js/AutoCommission/assets/邪恶的扩张/望风山地-1.json +++ b/repo/js/AutoCommission/assets/邪恶的扩张/望风山地-1.json @@ -2,83 +2,68 @@ "info": { "name": "望风山地-1", "type": "collect", - "author": "未知作者", + "author": "星野", "version": "1.0", "description": "", - "bgi_version": "0.42.0" + "map_name": "Teyvat", + "bgi_version": "0.45.0" }, "positions": [ { "id": 1, + "x": -1281, + "y": 2714.75, "action": "", - "move_mode": "walk", - "type": "teleport", - "x": -1281.0, - "y": 2714.75 + "move_mode": "dash", + "type": "teleport" }, { "id": 2, "x": -1339.25, "y": 2732.75, - "type": "path", - "move_mode": "run", - "action": "" + "action": "", + "move_mode": "dash", + "type": "path" }, { "id": 3, - "x": -1372.0, - "y": 2741.5, - "type": "path", - "move_mode": "run", - "action": "" + "x": -1373.75, + "y": 2734.75, + "action": "", + "move_mode": "dash", + "type": "path" }, { "id": 4, - "x": -1401.49, - "y": 2725.5, - "type": "path", - "move_mode": "run", - "action": "" + "x": -1402.4899999999998, + "y": 2739.5, + "action": "", + "move_mode": "dash", + "type": "path" }, { "id": 5, - "x": -1463.49, - "y": 2748.0, - "type": "path", - "move_mode": "run", - "action": "" + "x": -1463.4899999999998, + "y": 2748, + "action": "", + "move_mode": "dash", + "type": "path" }, { "id": 6, "x": -1473.25, "y": 2780.5, - "type": "path", - "move_mode": "walk", - "action": "" + "action": "", + "move_mode": "dash", + "type": "path" }, { "id": 7, - "x": -1468.25, - "y": 2805.0, - "type": "path", - "move_mode": "walk", - "action": "" - }, - { - "id": 8, - "x": -1476.75, - "y": 2816.0, - "type": "path", - "move_mode": "walk", - "action": "" - }, - { - "id": 9, + "x": -1487, + "y": 2802, "action": "fight", "move_mode": "walk", - "type": "path", - "x": -1490.0, - "y": 2805.0 + "type": "path" } ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/assets/邪恶的扩张/苍风高地-1.json b/repo/js/AutoCommission/assets/邪恶的扩张/苍风高地-1.json index b517d597..dae9893a 100644 --- a/repo/js/AutoCommission/assets/邪恶的扩张/苍风高地-1.json +++ b/repo/js/AutoCommission/assets/邪恶的扩张/苍风高地-1.json @@ -2,10 +2,13 @@ "info": { "name": "苍风高地-1", "type": "collect", - "author": "1", + "author": "星野", "version": "", "description": "", - "bgi_version": "0.42.3" + "map_name": "Teyvat", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1752069482976 }, "positions": [ { @@ -21,51 +24,19 @@ "x": -590.93, "y": 1868.54, "action": "", - "move_mode": "walk", + "move_mode": "dash", "type": "path" }, { "id": 3, - "x": -600.77, - "y": 1878.16, + "x": -632.65, + "y": 1913.2, "action": "", - "move_mode": "walk", + "move_mode": "dash", "type": "path" }, { "id": 4, - "x": -616.46, - "y": 1893.5, - "action": "", - "move_mode": "walk", - "type": "path" - }, - { - "id": 5, - "x": -629.45, - "y": 1909.47, - "action": "", - "move_mode": "fly", - "type": "path" - }, - { - "id": 6, - "x": -632.65, - "y": 1913.2, - "action": "", - "move_mode": "fly", - "type": "path" - }, - { - "id": 7, - "x": -635.1, - "y": 1916.73, - "action": "", - "move_mode": "fly", - "type": "path" - }, - { - "id": 8, "x": -646.99, "y": 1931.79, "action": "", @@ -73,44 +44,28 @@ "type": "path" }, { - "id": 9, - "x": -659.29, - "y": 1947.2, - "action": "", - "move_mode": "fly", - "type": "path" - }, - { - "id": 10, + "id": 5, "x": -667.19, "y": 1961.37, - "action": "stop_flying", + "action": "", "move_mode": "fly", - "action_params": "100", + "action_params": "", "type": "path" }, { - "id": 11, + "id": 6, "x": -679.75, "y": 1985.88, "action": "", - "move_mode": "walk", + "move_mode": "dash", "type": "path" }, { - "id": 12, - "x": -689.59, - "y": 1999.97, - "action": "", - "move_mode": "walk", - "type": "path" - }, - { - "id": 13, + "id": 7, "x": -688.12, "y": 2012.46, "action": "fight", - "move_mode": "walk", + "move_mode": "dash", "action_params": "", "type": "path" } diff --git a/repo/js/AutoCommission/assets/邪恶的扩张/风龙废墟-1.json b/repo/js/AutoCommission/assets/邪恶的扩张/风龙废墟-1.json index c8d148e5..30f74679 100644 --- a/repo/js/AutoCommission/assets/邪恶的扩张/风龙废墟-1.json +++ b/repo/js/AutoCommission/assets/邪恶的扩张/风龙废墟-1.json @@ -6,7 +6,9 @@ "version": "1.0", "description": "", "map_name": "Teyvat", - "bgi_version": "0.45.0" + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1751796755147 }, "positions": [ { @@ -20,84 +22,6 @@ }, { "id": 2, - "x": 306.53, - "y": 2537.75, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 3, - "x": 289.13, - "y": 2521, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 4, - "x": 287.76, - "y": 2505.5, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 5, - "x": 277.13, - "y": 2498.75, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 6, - "x": 252.25, - "y": 2493, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 7, - "x": 236.13, - "y": 2492.62, - "action": "", - "move_mode": "dash", - "action_params": "", - "type": "path" - }, - { - "id": 8, - "x": 220, - "y": 2499.75, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 9, - "x": 217.25, - "y": 2522.75, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 10, - "x": 221.91, - "y": 2533.16, - "action": "", - "move_mode": "dash", - "type": "path" - }, - { - "id": 11, "x": 223.22, "y": 2537.84, "action": "fight", diff --git a/repo/js/AutoCommission/main.js b/repo/js/AutoCommission/main.js index 19b3bada..1b04d031 100644 --- a/repo/js/AutoCommission/main.js +++ b/repo/js/AutoCommission/main.js @@ -1,36 +1,131 @@ -// V0.97.2 (async function () { - // 定义常量 - const OCR_REGION_X = 750; - const OCR_REGION_Y = 250; - const OCR_REGION_WIDTH = 450; // 1200 - 750 - const OCR_REGION_HEIGHT = 400; // 650 - 250 + // 版本和编译信息 + const VERSION = "0.98.1"; + const BUILD_TIME = "2025.07.11"; +async function errorlog() { + // 输出版本和编译时间信息 + log.info("=".repeat(20)); + log.info("版本: {version}", VERSION); + log.info("编译时间: {buildTime}", BUILD_TIME); + log.info("=".repeat(20)); +} + // 统一常量定义 + const Datas = { + // 文件路径常量 + SUPPORT_LIST_PATH: "name.json", + OUTPUT_DIR: "Data", + TALK_PROCESS_BASE_PATH: "assets/process", - // 修复文件路径问题 - 使用相对路径 - const SUPPORT_LIST_PATH = "name.json"; - const OUTPUT_DIR = "Data"; + // 图像识别相关常量 + COMPLETED_IMAGE_PATH: "Data/RecognitionObject/Completed.png", + UNCOMPLETED_IMAGE_PATH: "Data/RecognitionObject/UnCompleted.png", - // 添加图像识别相关常量 - const COMPLETED_IMAGE_PATH = "Data/RecognitionObject/Completed.png"; - const UNCOMPLETED_IMAGE_PATH = "Data/RecognitionObject/UnCompleted.png"; + // 基础配置常量 + MIN_TEXT_LENGTH: 4, // 最小文本长度 + MAX_COMMISSION_RETRY_COUNT: 1, // 默认重试机制,超过则跳过该委托 - // 委托类型常量 - const COMMISSION_TYPE = { - FIGHT: "fight", - TALK: "talk", + // 委托类型常量 + COMMISSION_TYPE: { + FIGHT: "fight", + TALK: "talk", + }, + + // OCR识别区域常量 + OCR_REGIONS: { + Main_Dev: [ + // 第1个委托名字 + { + X: 796, + Y: 293, + WIDTH: 440, + HEIGHT: 40, + }, + // 第2个委托名字 + { + X: 796, + Y: 401, + WIDTH: 440, + HEIGHT: 40, + }, + // 第3个委托名字 + { + X: 796, + Y: 509, + WIDTH: 440, + HEIGHT: 40, + }, + // 第4个委托名字(滑动后) + { + X: 796, + Y: 544, + WIDTH: 440, + HEIGHT: 40, + }, + ], + + // 主要委托识别区域 + MAIN: { + X: 750, + Y: 250, + WIDTH: 450, + HEIGHT: 400, + }, + // 委托地点OCR区域 + LOCATION: { + X: 1530, + Y: 100, + WIDTH: 250, // 1630 - 1530 + HEIGHT: 30, // 130 - 100 + }, + // 委托详情页面国家检测OCR区域 + DETAIL_COUNTRY: { + X: 1480, + Y: 100, + WIDTH: 55, // 1535 - 1480 + HEIGHT: 30, // 130 - 100 + }, + // 委托触发检测区域 + COMMISSION_TRIGGER: { + X: 885, + Y: 200, + WIDTH: 165, // 1050 - 885 + HEIGHT: 50, // 250 - 200 + }, + // 委托完成检测区域 + COMMISSION_COMPLETE: { + X: 880, + Y: 165, + WIDTH: 170, // 1050 - 880 + HEIGHT: 45, // 210 - 165 + }, + // 委托追踪检测区域 + COMMISSION_TRACKING: { + X: 1622, + Y: 987, + WIDTH: 137, + HEIGHT: 35, + }, + // 委托详情检测区域 + COMMISSION_DETAIL: { + X: 76, + Y: 239, + WIDTH: 280, // 358 - 76 + HEIGHT: 43, // 272-239 + }, + }, + + // 委托详情按钮位置常量 + COMMISSION_DETAIL_BUTTONS: [ + { id: 1, x: 1550, y: 320, checkX: 1450, checkWidth: 150 }, // 第一个委托详情按钮 + { id: 2, x: 1550, y: 440, checkX: 1450, checkWidth: 150 }, // 第二个委托详情按钮 + { id: 3, x: 1550, y: 530, checkX: 1500, checkWidth: 100 }, // 第三个委托详情按钮 + { id: 4, x: 1550, y: 560, checkX: 1450, checkWidth: 150 }, // 第四个委托详情按钮(滑动后) + ], }; - // 对话委托流程路径 - const TALK_PROCESS_BASE_PATH = "assets/process"; - - // 委托详情按钮位置(扩展检测范围左右+50像素) - const COMMISSION_DETAIL_BUTTONS = [ - { id: 1, x: 1550, y: 320, checkX: 1450, checkWidth: 150 }, // 第一个委托详情按钮 - { id: 2, x: 1550, y: 420, checkX: 1450, checkWidth: 150 }, // 第二个委托详情按钮 - { id: 3, x: 1550, y: 530, checkX: 1500, checkWidth: 100 }, // 第三个委托详情按钮 - { id: 4, x: 1550, y: 560, checkX: 1450, checkWidth: 150 }, // 第四个委托详情按钮(滑动后) - ]; - + // 存储当前委托位置 + let currentCommissionPosition = null; + // 委托地点OCR区域 const LOCATION_OCR_X = 1530; const LOCATION_OCR_Y = 100; @@ -50,902 +145,1086 @@ const COMMISSION_COMPLETE_OCR_HEIGHT = 45; // 210 - 165 // 获取设置 - const skipRecognition = settings.skipRecognition || false; - //const debugMode = settings.debugMode || false; - const minTextLength = parseInt(settings.minTextLength || "4"); - const team = settings.team || ""; - - // 存储当前委托位置 - let currentCommissionPosition = null; - - async function prepareForLeyLineRun() { - // 开局传送到七天神像 - await genshin.returnMainUi(); - await genshin.tpToStatueOfTheSeven(); - // 切换战斗队伍 - if (team) { - log.info(`切换至队伍 ${team}`); - await genshin.switchParty(team); - } - } - -/** - * 自动导航到NPC对话位置 - * @param {string} npcName - 目标NPC名称 - * @param {string} iconType - 图标类型 ("task"或"bigmap") - * @returns {Promise} - */ -const autoNavigateToTalk = async (npcName = "", iconType = "") => { - // 设置目标NPC名称 - const textArray = [npcName]; - //log.info(npcName + iconType); - // 根据图标类型选择不同的识别对象 - let boxIconRo; - if (iconType === "task") { - boxIconRo = RecognitionObject.TemplateMatch( - file.ReadImageMatSync("Data/RecognitionObject/IconTaskCommission.png") - - ); - log.info("使用任务图标"); - } else { // 默认使用大地图图标 - boxIconRo = RecognitionObject.TemplateMatch( - file.ReadImageMatSync("Data/RecognitionObject/IconBigmapCommission.jpg") - ); - } - - const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50); //对话区域检测 - let advanceNum = 0; //前进次数 - - middleButtonClick(); - await sleep(800); - - while (true) { - // 1. 优先检查是否已到达 - let captureRegion = captureGameRegion(); - let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); - let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); - // 检测到特点文字则结束!!! - if (rewardResult.text == textArray[0]) { - log.info("已到达指定位置,检测到文字: " + rewardResult.text); - return; - } else if (advanceNum > 80) { - throw new Error("前进时间超时"); - } - // 2. 未到达领奖点,则调整视野 - for (let i = 0; i < 100; i++) { - captureRegion = captureGameRegion(); - let iconRes = captureRegion.Find(boxIconRo); - log.info( - "检测到委托图标位置 ({x}, {y})", - iconRes.x, - iconRes.y - ) - let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25); - let climbResult = climbTextArea.find(RecognitionObject.ocrThis); - // 检查是否处于攀爬状态 - if (climbResult.isEmpty()) { - log.info("检侧进入攀爬状态,尝试脱离"); - keyPress("x"); - await sleep(1000); - keyDown("a"); - await sleep(800); - keyUp("a"); - keyDown("w"); - await sleep(800); - keyUp("w"); - } - if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { - advanceNum++; - log.info(`视野已调正,前进第${advanceNum}次`); - break; - } else { - // 小幅度调整 - if (iconRes.y >= 520) moveMouseBy(0, 920); - let adjustAmount = iconRes.x < 920 ? -20 : 20; - let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离 - let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1 - let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10; - moveMouseBy(adjustAmount * adjustAmount2, 0); - await sleep(100); - } - if (i > 50) throw new Error("视野调整超时"); - } - // 3. 前进一小步 - keyDown("w"); - await sleep(500); - keyUp("w"); - await sleep(200); // 等待角色移动稳定 - } -}; - - /** - * 检测委托完成状态(使用图像识别) - * @param {number} buttonIndex - 按钮索引(0-3) - * @returns {Promise} 返回 "completed", "uncompleted", 或 "unknown" - */ - async function detectCommissionStatusByImage(buttonIndex) { + const getSetting = async () => { try { - const button = COMMISSION_DETAIL_BUTTONS[buttonIndex]; - if (!button) { - log.error("无效的按钮索引: {index}", buttonIndex); - return "unknown"; - } + const skipRecognition = settings.skipRecognition || false; + const prepare = settings.prepare || false; + const team = settings.team || ""; + const skipCommissions = ""; - //log.info("检测委托{id}的完成状态(图像识别)", button.id); + const result = { + skipRecognition, + prepare, + team, + skipCommissions, + }; - // 截图 - let captureRegion = captureGameRegion(); + log.info("setting:{index}", result); - // 检测区域:按钮位置左右各扩展更大范围 - const checkRegion = captureRegion.deriveCrop( - button.checkX, - button.y - 30, // 稍微向上扩展检测区域 - button.checkWidth, - 60 // 增加高度以确保捕获状态图标 - ); + return result; + } catch { + log.error("getSetting函数出现错误,将使用默认配置"); + return { + skipRecognition: false, + prepare: true, + team: "", + skipCommissions: "", + }; + } + }; - // 加载完成和未完成的模板图像 - let completedTemplate, uncompletedTemplate; + const { skipRecognition, prepare, team, skipCommissions } = + await getSetting(); + const Utils = { + iframe: async ({ X, Y, WIDTH, HEIGHT }) => { try { - completedTemplate = file.readImageMatSync(COMPLETED_IMAGE_PATH); - uncompletedTemplate = file.readImageMatSync(UNCOMPLETED_IMAGE_PATH); - } catch (imageError) { - log.error("加载模板图像失败: {error}", imageError); - return "unknown"; + log.info("i{index}", { X, Y, WIDTH, HEIGHT }); + + // 最简单的方式创建OCR识别对象 + const ro = RecognitionObject.Ocr(X, Y, WIDTH, HEIGHT); + ro.Name = "debug"; + ro.DrawOnWindow = true; + + // 捕获并识别 + const region = captureGameRegion(); + region.Find(ro); + + // 2000毫秒后移除绘制的边框 + setTimeout(() => { + // 使用相同的名称移除边框 + const drawContent = VisionContext.Instance().DrawContent; + drawContent.RemoveRect("debug"); + // 或者也可以使用 drawContent.Clear() 清除所有绘制的内容 + + log.info("已移除边框"); + }, 2000); + } catch (error) { + // 记录完整错误信息 + log.error("详细错误: " + JSON.stringify(error)); } - - // 创建识别对象,使用更灵活的参数 - const completedRo = RecognitionObject.TemplateMatch( - completedTemplate, - 0, - 0, - button.checkWidth, - 60 - ); - const uncompletedRo = RecognitionObject.TemplateMatch( - uncompletedTemplate, - 0, - 0, - button.checkWidth, - 60 - ); - - // 降低匹配阈值,提高识别灵活性 - completedRo.threshold = 0.65; - uncompletedRo.threshold = 0.65; - - // 检测完成状态 - const completedResult = checkRegion.find(completedRo); - if (!completedResult.isEmpty()) { - //log.info("委托{id}已完成", button.id); - return "completed"; - } - - // 检测未完成状态 - const uncompletedResult = checkRegion.find(uncompletedRo); - if (!uncompletedResult.isEmpty()) { - //log.info("委托{id}未完成", button.id); - return "uncompleted"; - } - - /* 尝试使用更低的阈值再次检测 - log.info("使用更低阈值再次检测委托{id}状态", button.id); - completedRo.threshold = 0.6; - uncompletedRo.threshold = 0.6; - - const completedResult2 = checkRegion.find(completedRo); - if (!completedResult2.isEmpty()) { - log.info("委托{id}已完成(低阈值检测)", button.id); - return "completed"; - } - - const uncompletedResult2 = checkRegion.find(uncompletedRo); - if (!uncompletedResult2.isEmpty()) { - log.info("委托{id}未完成(低阈值检测)", button.id); - return "uncompleted"; - }*/ - - log.warn("委托{id}状态识别失败", button.id); - return "unknown"; - } catch (error) { - log.error("检测委托完成状态时出错: {error}", error); - return "unknown"; - } - } - - // 读取支持的委托列表 - function loadSupportedCommissions() { - let supportedCommissions = { - fight: [], - talk: [], - }; - - try { - // 使用正确的文件读取方法 - log.info("开始读取支持的委托列表: {path}", SUPPORT_LIST_PATH); - - // 尝试读取文件内容 + }, + easyOCR: async ({ X, Y, WIDTH, HEIGHT }) => { try { - const supportListContent = file.readTextSync(SUPPORT_LIST_PATH); + // log.info("进行文字识别") + // 创建OCR识别对象 + const locationOcrRo = RecognitionObject.Ocr(X, Y, WIDTH, HEIGHT); - if (supportListContent && supportListContent.trim()) { - try { - // 解析JSON格式 - const commissionData = JSON.parse(supportListContent); - supportedCommissions.fight = commissionData.fight || []; - supportedCommissions.talk = commissionData.talk || []; + // 截图识别 + let captureRegion = captureGameRegion(); + let OCRresults = await captureRegion.findMulti(locationOcrRo); - log.info( - "已加载支持的战斗委托列表,共 {count} 个", - supportedCommissions.fight.length - ); - log.info( - "已加载支持的对话委托列表,共 {count} 个", - supportedCommissions.talk.length - ); - } catch (jsonError) { - log.error("解析委托列表JSON失败: {error}", jsonError); - } - } else { - log.warn("支持的委托列表为空"); - } - } catch (readError) { - // 如果读取失败,检查文件是否存在 - log.error("读取委托列表失败: {error}", readError); - - // 尝试创建文件 - try { - // 创建默认的JSON结构 - const defaultJson = JSON.stringify( - { - fight: [], - talk: [], - }, - null, - 2 - ); - - const writeResult = file.writeTextSync( - SUPPORT_LIST_PATH, - defaultJson - ); - if (writeResult) { - log.info("已创建空的委托列表文件"); - } else { - log.error("创建委托列表文件失败"); - } - } catch (writeError) { - log.error("创建委托列表文件失败: {error}", writeError); - } + return OCRresults; + } catch (error) { + log.error("easyOCR识别出错: {error}", error.message); + return { count: 0 }; } - } catch (error) { - log.error("处理委托列表时出错: {error}", error); - } - - return supportedCommissions; - } - - // 清理文本(去除标点符号等) - function cleanText(text) { - if (!text) return ""; - // 去除标点符号和特殊字符 - return text.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, "").trim(); - } - - // 进入委托界面 - async function enterCommissionScreen() { - log.info("正在进入委托界面..."); - - try { - // 使用F1快捷键直接打开委托界面 - log.info("尝试使用F1快捷键打开委托界面"); - keyPress("VK_F1"); - // 点击委托界面 - log.info("点击委托界面"); - await sleep(900); - click(300, 350); - await sleep(100); - log.info("已进入委托界面"); - return true; - } catch (error) { - log.error("进入委托界面失败: {error}", error); - return false; - } - } - - // 自动执行划页操作 - 新的滑动方法 - async function PageScroll(scrollCount) { - try { - const clickX = 950; // 假设点击的起始坐标 - const clickY = 600; - const totalDistance = 300; // 假设每次滑动的总距离 - const stepDistance = 10; // 每步移动的距离 - - for (let i = 0; i < scrollCount; ++i) { - log.info(`开始第 ${i + 1} 次滑动`); - - // 如果点击坐标为 (0, 0),则跳过点击 - if (clickX !== 0 || clickY !== 0) { - moveMouseTo(clickX, clickY); // 移动到指定坐标 - await sleep(100); - } - - // 按住鼠标左键 - leftButtonDown(); - - // 将鼠标移动到目标位置,模拟更自然的拖动操作 - const steps = totalDistance / stepDistance; // 分成若干步移动 - - for (let j = 0; j < steps; j++) { - moveMouseBy(0, -stepDistance); // 每次移动 stepDistance 像素 - await sleep(10); // 每次移动后延迟10毫秒 - } - - // 释放鼠标左键 - await sleep(700); - leftButtonUp(); - await sleep(1000); // 增加滑动后的等待时间,确保界面稳定 - } - - return true; - } catch (error) { - log.error(`执行滑动操作时发生错误:${error.message}`); - return false; - } - } - - // 识别委托地点 - function recognizeCommissionLocation() { - try { - log.info( - "识别委托地点 ({x}, {y}) ({width}, {height})...", - LOCATION_OCR_X, - LOCATION_OCR_Y, - LOCATION_OCR_X + LOCATION_OCR_WIDTH, - LOCATION_OCR_Y + LOCATION_OCR_HEIGHT - ); - - // 创建OCR识别对象 - const locationOcrRo = RecognitionObject.Ocr( - LOCATION_OCR_X, - LOCATION_OCR_Y, - LOCATION_OCR_WIDTH, - LOCATION_OCR_HEIGHT - ); - - // 截图识别 - let captureRegion = captureGameRegion(); - let results = captureRegion.findMulti(locationOcrRo); - + }, + easyOCROne: async (ocrdata) => { + results = await Utils.easyOCR(ocrdata); if (results.count > 0) { // 取第一个结果作为地点 return results[0].text.trim(); } + return ""; + }, + // 清理文本(去除标点符号等) + cleanText: (text) => { + if (!text) return ""; + // 去除标点符号和特殊字符 + return text.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, "").trim(); + }, + // 解析跳过的委托列表 + parseSkipCommissions: (skipCommissionsStr) => { + if (!skipCommissionsStr || typeof skipCommissionsStr !== "string") { + return []; + } - return "未知地点"; - } catch (error) { - log.error("识别委托地点时出错: {error}", error); - return "识别失败"; - } - } + // 支持中文逗号和英文逗号分割 + return skipCommissionsStr + .split(/[,,]/) + .map((name) => name.trim()) + .filter((name) => name.length > 0); + }, - // 保存委托数据到文件 - function saveCommissionsData(commissionsTable) { - try { - log.info("保存委托数据到文件..."); - - // 创建JSON格式的委托数据 - const commissionsData = { - timestamp: new Date().toISOString(), - commissions: commissionsTable, - }; - - // 保存到文件 - const outputPath = `${OUTPUT_DIR}/commissions_data.json`; + // 读取角色别名文件 + readAliases: () => { try { - const jsonResult = file.writeTextSync( - outputPath, - JSON.stringify(commissionsData, null, 2) - ); - if (jsonResult) { - log.info("委托数据已保存到: {path}", outputPath); - } else { - log.error("保存委托数据失败"); - } - } catch (jsonError) { - log.error("保存委托数据失败: {error}", jsonError); - } - - // 创建可读的文本报告 - let reportContent = "# 原神每日委托识别报告\r\n"; - reportContent += `生成时间: ${new Date().toLocaleString()}\r\n\r\n`; - reportContent += "## 委托列表\r\n\r\n"; - - for (const commission of commissionsTable) { - const supportStatus = commission.supported ? "✅ 支持" : "❌ 不支持"; - const locationInfo = commission.location - ? `(${commission.location})` - : ""; - reportContent += `${commission.id}. ${commission.name} ${locationInfo} - ${supportStatus}\r\n`; - } - - // 保存报告 - const reportPath = `${OUTPUT_DIR}/commissions_report.txt`; - try { - const reportResult = file.writeTextSync(reportPath, reportContent); - if (reportResult) { - log.info("委托报告已保存到: {path}", reportPath); - } else { - log.error("保存委托报告失败"); - } - } catch (reportError) { - log.error("保存委托报告失败: {error}", reportError); - } - - return commissionsTable.filter((c) => c.supported); - } catch (error) { - log.error("处理委托数据时出错: {error}", error); - return []; - } - } - - function ensureDirectoryExists(dirPath) { - try { - // 尝试创建目录,如果目录已存在,writeTextSync不会报错 - // 创建一个临时文件来确保目录存在 - const tempFilePath = `${dirPath}/.temp`; - file.writeTextSync(tempFilePath, ""); - log.info(`已确保目录存在: ${dirPath}`); - return true; - } catch (error) { - log.error(`创建目录时出错: ${error}`); - return false; - } - } - - // 检测是否进入委托详情界面 - async function checkDetailPageEntered() { - try { - //log.info("检测是否进入委托详情界面..."); - - // 创建OCR识别对象 - 检测区域(1480,100)到(1535,130) - const detailOcrRo = RecognitionObject.Ocr( - 1480, - 100, - 55, // 1535 - 1480 - 30 // 130 - 100 - ); - - // 尝试3次OCR识别 - for (let i = 0; i < 3; i++) { - //log.info(`执行第${i + 1}次详情界面OCR检测`); - let captureRegion = captureGameRegion(); - let results = captureRegion.findMulti(detailOcrRo); - - if (results.count > 0) { - // 检查OCR结果 - for (let j = 0; j < results.count; j++) { - const text = results[j].text.trim(); - //log.info(`检测到文本: "${text}"`); - - // 如果有"蒙德",表示进入了详情界面 - if (text.includes("蒙德")) { - log.info("检测到蒙德委托,成功进入详情界面"); - return "蒙德"; - } - // 如果没有文字,可能是已完成委托 - else if (text === "") { - log.info("未检测到地区文本,可能是已完成委托"); - return "已完成"; - } - // 其他地区委托 - else if (text.length >= 2) { - log.info(`检测到其他地区委托: ${text}`); - return text; + const combatText = file.ReadTextSync("Data/avatar/combat_avatar.json"); + const combatData = JSON.parse(combatText); + const aliases = {}; + for (const character of combatData) { + if (character.alias && character.name) { + for (const alias of character.alias) { + aliases[alias] = character.name; } } } - - // 如果没有检测到,等待一会再试 - await sleep(500); + return aliases; + } catch (error) { + log.error("读取角色别名文件失败: {error}", error.message); + return {}; } + }, + }; - log.info("三次OCR检测后仍未确认委托国家"); - return "未知"; - } catch (error) { - log.error("检测委托详情界面时出错: {error}", error); - return "错误"; - } - } + const UI = { + // 进入委托界面 + enterCommissionScreen: async () => { + //log.info("正在进入委托界面..."); - /** - * 优化后的委托识别主函数 - */ - async function Identification() { - try { - log.info("开始执行原神每日委托识别脚本"); - await genshin.returnMainUi(); + try { + // 使用F1快捷键直接打开委托界面 + log.info("尝试使用F1快捷键进入委托界面"); + keyPress("VK_F1"); + // 点击委托界面 + log.debug("点击委托界面"); + await sleep(1000); + click(300, 350); + await sleep(100); + log.debug("已进入委托界面"); + return true; + } catch (error) { + log.error("进入委托界面失败: {error}", error); + return false; + } + }, + + // 自动执行划页操作 - 新的滑动方法 + pageScroll: async (scrollCount) => { + try { + const clickX = 950; // 假设点击的起始坐标 + const clickY = 600; + const totalDistance = 200; // 假设每次滑动的总距离 + const stepDistance = 10; // 每步移动的距离 + + for (let i = 0; i < scrollCount; ++i) { + log.info(`开始第 ${i + 1} 次滑动`); + + // 如果点击坐标为 (0, 0),则跳过点击 + if (clickX !== 0 || clickY !== 0) { + moveMouseTo(clickX, clickY); // 移动到指定坐标 + await sleep(100); + } + + // 按住鼠标左键 + leftButtonDown(); + + // 将鼠标移动到目标位置,模拟更自然的拖动操作 + const steps = totalDistance / stepDistance; // 分成若干步移动 + + for (let j = 0; j < steps; j++) { + moveMouseBy(0, -stepDistance); // 每次移动 stepDistance 像素 + await sleep(10); // 每次移动后延迟10毫秒 + } + + // 释放鼠标左键 + await sleep(100); + leftButtonUp(); + await sleep(300); // 增加滑动后的等待时间,确保界面稳定 + } + + return true; + } catch (error) { + log.error(`执行滑动操作时发生错误:${error.message}`); + return false; + } + }, + + // 角色选择界面滚动页面函数 + scrollPage: async (totalDistance, stepDistance = 10, delayMs = 5) => { + try { + moveMouseTo(400, 750); + await sleep(50); + leftButtonDown(); + const steps = Math.ceil(totalDistance / stepDistance); + for (let j = 0; j < steps; j++) { + const remainingDistance = totalDistance - j * stepDistance; + const moveDistance = + remainingDistance < stepDistance ? remainingDistance : stepDistance; + moveMouseBy(0, -moveDistance); + await sleep(delayMs); + } + await sleep(700); + leftButtonUp(); + await sleep(100); + return true; + } catch (error) { + log.error(`角色选择界面滚动操作时发生错误:${error.message}`); + return false; + } + }, + }; + + const Core = { + PrepareForLeyLineRun: async () => { + log.info("开始执行委托前准备"); setGameMetrics(1920, 1080, 1); - - // 加载支持的委托列表 - const supportedCommissions = loadSupportedCommissions(); - - // 确保所有委托的资源目录存在 - for (const commission of supportedCommissions.fight) { - ensureDirectoryExists(`assets/${commission}`); - } - for (const commission of supportedCommissions.talk) { - ensureDirectoryExists(`assets/process/${commission}`); - } - - // 进入委托界面 - const enterSuccess = await enterCommissionScreen(); - if (!enterSuccess) { - log.error("无法进入委托界面,脚本终止"); - return; - } - await sleep(1000); - - // 步骤1: 执行第一次OCR识别 - log.info("步骤1: 执行第一次OCR识别"); - const ocrRo = RecognitionObject.Ocr( - OCR_REGION_X, - OCR_REGION_Y, - OCR_REGION_WIDTH, - OCR_REGION_HEIGHT - ); - - // 第一次截图识别 - log.info( - "执行第一次OCR识别 ({x}, {y}) ({width}, {height})", - OCR_REGION_X, - OCR_REGION_Y, - OCR_REGION_X + OCR_REGION_WIDTH, - OCR_REGION_Y + OCR_REGION_HEIGHT - ); - let captureRegion = captureGameRegion(); - let firstResults = captureRegion.findMulti(ocrRo); - log.info("第一次OCR识别结果数量: {count}", firstResults.count); - - // 处理第一次识别结果 - let firstCommissions = []; - for (let i = 0; i < firstResults.count; i++) { - let result = firstResults[i]; - let text = cleanText(result.text); - if (text && text.length >= minTextLength) { - log.info('第{index}个委托: "{text}"', i + 1, text); - - // 检查委托类型 - const isFightCommission = supportedCommissions.fight.includes(text); - const isTalkCommission = supportedCommissions.talk.includes(text); - const isSupported = isFightCommission || isTalkCommission; - const commissionType = isFightCommission - ? COMMISSION_TYPE.FIGHT - : isTalkCommission - ? COMMISSION_TYPE.TALK - : ""; - - firstCommissions.push({ - id: i + 1, - name: text, - supported: isSupported, - type: commissionType, - location: "", - }); + try { + await genshin.returnMainUi(); + if (!prepare) { + await genshin.tpToStatueOfTheSeven(); } - } - - // 步骤2: 使用图像识别检测前3个委托的完成状态 - log.info("步骤2: 检测前3个委托的完成状态"); - for (let i = 0; i < Math.min(3, firstCommissions.length); i++) { - const commission = firstCommissions[i]; - - // 使用图像识别检测完成状态 - const status = await detectCommissionStatusByImage(i); - - if (status === "completed") { - log.info( - "委托{id} {name} 已完成,跳过详情查看", - commission.id, - commission.name - ); - commission.location = "已完成"; - continue; - } else if (status === "uncompleted") { - log.info( - "委托{id} {name} 未完成,查看详情", - commission.id, - commission.name - ); - } else { - log.warn( - "委托{id} {name} 状态未知,尝试查看详情", - commission.id, - commission.name - ); + // 切换战斗队伍 + if (team) { + log.info(`切换至队伍 ${team}`); + await genshin.switchParty(team); } + } catch (error) { + log.error("PrepareForLeyLineRun函数出现错误: {error}", error.message); + } + }, + + Identification: async () => { + log.info("开始执行原神每日委托识别脚本"); + try { + // 设置游戏参数 + setGameMetrics(1920, 1080, 1); + await genshin.returnMainUi(); + + // 初始化跳过委托列表 + CommissionsFunc.initSkipCommissionsList(); + + // 加载支持的委托列表 + const supportedCommissions = + await CommissionsFunc.loadSupportedCommissions(); - // 只有未完成或状态未知的委托才点击查看详情 log.info( - "查看第{id}个委托详情: {name}", - commission.id, - commission.name + "支持的战斗委托: {count} 个", + supportedCommissions.fight.length + ); + log.info( + "支持的对话委托: {count} 个", + supportedCommissions.talk.length ); - // 点击详情按钮 - const detailButton = COMMISSION_DETAIL_BUTTONS[commission.id - 1]; - log.info("点击委托详情按钮 ({x}, {y})", detailButton.x, detailButton.y); - click(detailButton.x, detailButton.y); - await sleep(2500); - - // 检测委托国家 - const detailStatus = await checkDetailPageEntered(); - log.info(`委托国家: ${detailStatus}`); - commission.country = detailStatus; - const location = recognizeCommissionLocation(); - commission.location = location; - log.info("委托 {name} 的地点: {location}", commission.name, location); - - // 退出详情页面并获取地图坐标 - if (commission.location !== "已完成") { - log.info("退出详情页面 - 按ESC"); - keyDown("VK_ESCAPE"); - await sleep(300); - keyUp("VK_ESCAPE"); - await sleep(1200); - - // 获取地图坐标并保存 - const bigMapPosition = genshin.getPositionFromBigMap(); - if (bigMapPosition) { - currentCommissionPosition = bigMapPosition; - commission.CommissionPosition = bigMapPosition; - log.info( - "当前委托位置: ({x}, {y})", - bigMapPosition.x, - bigMapPosition.y - ); - } - - keyDown("VK_ESCAPE"); - await sleep(300); - keyUp("VK_ESCAPE"); - await sleep(1200); + // 确保所有委托的资源目录存在 + for (const commission of supportedCommissions.fight) { + await CommissionsFunc.ensureDirectoryExists(`assets/${commission}`); } - } - - // 步骤3: 执行下滑操作 - log.info("步骤3: 执行下滑操作"); - await PageScroll(1); - await sleep(2000); - - // 步骤4: 执行第二次OCR识别 - log.info( - "步骤4: 执行第二次OCR识别({x}, {y}) ({width}, {height})", - OCR_REGION_X, - OCR_REGION_Y, - OCR_REGION_X + OCR_REGION_WIDTH, - OCR_REGION_Y + OCR_REGION_HEIGHT - ); - captureRegion = captureGameRegion(); - let secondResults = captureRegion.findMulti(ocrRo); - log.info("第二次OCR识别结果数量: {count}", secondResults.count); - - // 处理第二次识别结果 - let fourthCommission = null; - for (let i = 0; i < secondResults.count; i++) { - let result = secondResults[i]; - let text = cleanText(result.text); - if (text && text.length >= minTextLength) { - log.info('第4个委托: "{text}"', text); - - // 检查委托类型 - const isFightCommission = supportedCommissions.fight.includes(text); - const isTalkCommission = supportedCommissions.talk.includes(text); - const isSupported = isFightCommission || isTalkCommission; - const commissionType = isFightCommission - ? COMMISSION_TYPE.FIGHT - : isTalkCommission - ? COMMISSION_TYPE.TALK - : ""; - - fourthCommission = { - id: 4, - name: text, - supported: isSupported, - type: commissionType, - location: "", - }; - } - } - - // 步骤5: 检测第4个委托的完成状态 - if (fourthCommission) { - log.info("步骤5: 检测第4个委托的完成状态"); - - // 使用图像识别检测完成状态 - const status = await detectCommissionStatusByImage(3); // 第4个按钮索引为3 - - if (status === "completed") { - log.info("委托4 {name} 已完成,跳过详情查看", fourthCommission.name); - fourthCommission.location = "已完成"; - } else if (status === "uncompleted" || status === "unknown") { - log.info("委托4 {name} 需要查看详情", fourthCommission.name); - - // 点击详情按钮 - const detailButton = COMMISSION_DETAIL_BUTTONS[3]; - log.info( - "点击委托详情按钮 ({x}, {y})", - detailButton.x, - detailButton.y + for (const commission of supportedCommissions.talk) { + await CommissionsFunc.ensureDirectoryExists( + `${Datas.TALK_PROCESS_BASE_PATH}/${commission}` ); - click(detailButton.x, detailButton.y); - await sleep(2500); + } - // 检测是否成功进入详情界面并获取委托国家 - const detailStatus = await checkDetailPageEntered(); - log.info(`委托国家: ${detailStatus}`); - fourthCommission.country = detailStatus; + // 进入委托界面 + const enterSuccess = await UI.enterCommissionScreen(); + if (!enterSuccess) { + log.error("无法进入委托界面,脚本终止"); + return []; + } + await sleep(100); - // 根据检测结果处理 - if (fourthCommission.location === "已完成") { - log.info("该委托已完成,跳过地点识别和退出操作"); - fourthCommission.location = "已完成"; - } else { - location = recognizeCommissionLocation(); - fourthCommission.location = location; - log.info( - "委托 {name} 的地点: {location}", - fourthCommission.name, - location - ); + // 识别委托 + const commissions = await CommissionsFunc.recognizeCommissions( + supportedCommissions + ); + + // 检测委托是否为错误状态,只有在成功识别到委托时才保存数据 + if (commissions && commissions.length > 0) { + log.info("委托识别成功,开始保存数据"); + await CommissionsFunc.saveCommissionsData(commissions); + } else { + log.warn("委托识别失败或未识别到任何委托,跳过保存数据"); + } + + // 根据识别结果输出不同的日志信息 + if (commissions && commissions.length > 0) { + log.info( + "委托识别完成,共识别到 {total} 个委托,其中 {supported} 个受支持", + commissions.length, + commissions.filter((c) => c.supported).length + ); + } else { + log.warn("委托识别失败,未识别到任何委托"); + } + + return commissions; + } catch (error) { + log.error("Identification函数出现错误: ${error.message}"); + errorlog(); + return []; + } + }, + + // 执行委托追踪(优化版 - 按距离排序) + executeCommissionTracking: async () => { + try { + log.info("开始执行委托追踪 - 按距离排序模式"); + + // 确保回到主界面 + await genshin.returnMainUi(); + await sleep(1000); + + // 获取已识别的委托列表 + let commissions = []; + try { + const commissionsData = JSON.parse( + file.readTextSync(`${Datas.OUTPUT_DIR}/commissions_data.json`) + ); + commissions = commissionsData.commissions.filter((c) => c.supported); + log.info("已加载支持的委托数据,共 {count} 个", commissions.length); + } catch (error) { + log.error("读取委托数据失败: {error}", error.message); + return false; + } + + if (commissions.length === 0) { + log.warn("没有找到支持的委托,请先运行识别脚本"); + return false; + } + + // 按距离排序委托(如果有位置信息) + const commissionsWithPosition = commissions.filter( + (c) => + c.CommissionPosition && + c.CommissionPosition.X && + c.CommissionPosition.Y + ); + + // 统计已完成委托 + let completedCount = 0; + for (const commission of commissions) { + if (commission.location === "已完成") { + completedCount++; + continue; + } + } + // 执行每个委托 + for (const commission of commissions) { + // 检查是否在跳过列表中 + if ( + CommissionsFunc.skipCommissionsList.length > 0 && + CommissionsFunc.skipCommissionsList.includes(commission.name) + ) { + log.info("委托 {name} 在跳过列表中,跳过执行", commission.name); + continue; } - // 退出详情页面并获取地图坐标 - if (fourthCommission.location !== "未知") { - log.info("退出详情页面 - 按ESC"); - keyDown("VK_ESCAPE"); - await sleep(300); - keyUp("VK_ESCAPE"); - await sleep(1200); + // 跳过已完成的委托 + if (commission.location === "已完成") { + log.info("委托 {name} 已完成,跳过", commission.name); + continue; + } - // 获取地图坐标并保存 - const bigMapPosition = genshin.getPositionFromBigMap(); - if (bigMapPosition) { - currentCommissionPosition = bigMapPosition; - fourthCommission.CommissionPosition = bigMapPosition; + // 跳过没有地点信息的委托 + if ( + !commission.location || + commission.location === "未知地点" || + commission.location === "识别失败" + ) { + log.warn("委托 {name} 缺少地点信息,跳过", commission.name); + continue; + } + + log.info( + "开始执行委托: {name} ({location}) [{type}]", + commission.name, + commission.location, + commission.type || "未知类型" + ); + + try { + if (commission.CommissionPosition) { log.info( "当前委托位置: ({x}, {y})", - bigMapPosition.x, - bigMapPosition.y + commission.CommissionPosition.X, + commission.CommissionPosition.Y + ); + } + } catch (error) { + log.warn("委托 {name} 缺少坐标信息,尝试全部执行", commission.name); + } + + let success = false; + let retryCount = 0; + + // 委托执行重试循环 + while (retryCount <= Datas.MAX_COMMISSION_RETRY_COUNT && !success) { + if (retryCount > 0) { + log.info( + "委托 {name} 第 {retry} 次重试执行", + commission.name, + retryCount ); } - keyDown("VK_ESCAPE"); - await sleep(300); - keyUp("VK_ESCAPE"); - await sleep(1200); + // 根据委托类型执行不同的处理逻辑 + if (commission.type === Datas.COMMISSION_TYPE.TALK) { + dispatcher.addTimer( + new RealtimeTimer("AutoPick", { forceInteraction: false }) + ); + // 执行对话委托 + const talkSuccess = await Execute.executeTalkCommission( + commission.name, + commission.location + ); + dispatcher.ClearAllTriggers(); + + if (talkSuccess) { + const completed = await CommissionsFunc.iscompleted(completedCount); + if (completed) { + completedCount++; + success = true; + log.info("对话委托 {name} 执行完成", commission.name); + } else { + log.warn( + "对话委托 {name} 执行后检查未完成,重试次数: {retry}/{max}", + commission.name, + retryCount, + Datas.MAX_COMMISSION_RETRY_COUNT + ); + } + } else { + log.warn( + "对话委托 {name} 执行失败,重试次数: {retry}/{max}", + commission.name, + retryCount, + Datas.MAX_COMMISSION_RETRY_COUNT + ); + } + } else { + // 默认执行战斗委托 + const location = commission.location.trim(); + + // 脚本路径 + const scriptPaths = [ + `assets/${commission.name}/${location}-1.json`, + `assets/${commission.name}/${location}-2.json`, + `assets/${commission.name}/${location}-3.json`, + ]; + + // 获取每个脚本对应的目标位置和距离 + const scriptInfo = []; + for (const scriptPath of scriptPaths) { + try { + await file.readText(scriptPath); + const targetPos = + await CommissionsFunc.getCommissionTargetPosition( + scriptPath + ); + if (targetPos) { + const distance = CommissionsFunc.calculateDistance( + commission.CommissionPosition, + targetPos + ); + scriptInfo.push({ + path: scriptPath, + distance: distance, + valid: true, + }); + log.info( + "委托 {name} 目标位置: ({x}, {y}),距离: {distance}", + scriptPath, + targetPos.x, + targetPos.y, + distance + ); + } else { + log.warn("委托 {name} 无法获取距离", scriptPath); + scriptInfo.push({ + path: scriptPath, + distance: Infinity, + valid: false, + }); + } + } catch (readError) { + log.info("路径追踪脚本不存在: {path}", scriptPath); + continue; + } + } + + // 按距离排序脚本 + scriptInfo.sort((a, b) => a.distance - b.distance); + + // 输出排序结果 + log.info("排序后的脚本执行顺序:"); + scriptInfo.forEach((info, index) => { + log.info( + "{index}. 脚本: {path}, 距离: {distance}", + index + 1, + info.path, + info.distance + ); + }); + + // 尝试执行排序后的脚本路径 + // TODO:只执行第一个 + let scriptSuccess = false; + for (const info of scriptInfo) { + const scriptPath = info.path; + try { + // 执行路径追踪脚本 + log.info("开始执行路径追踪脚本: {path}", scriptPath); + dispatcher.addTimer( + new RealtimeTimer("AutoPick", { forceInteraction: false }) + ); + await pathingScript.runFile(scriptPath); + log.info("路径追踪脚本执行完成"); + dispatcher.ClearAllTriggers(); + // 检查委托是否完成 + if (await CommissionsFunc.iscompleted(completedCount)) { + log.info("委托 {name} 已完成", commission.name); + completedCount++; + success = true; + scriptSuccess = true; + break; + } else { + log.info( + "委托 {name} 未完成,尝试下一个脚本", + commission.name + ); + } + } catch (scriptError) { + log.error("执行路径追踪脚本时出错: {error}", scriptError); + continue; // 尝试下一个脚本 + } + } + + if (!scriptSuccess) { + log.warn( + "战斗委托 {name} 所有脚本执行失败,重试次数: {retry}/{max}", + commission.name, + retryCount, + Datas.MAX_COMMISSION_RETRY_COUNT + ); + } + } + + // 增加重试计数 + retryCount++; + + // 如果未成功且还有重试机会,等待一段时间再重试 + if (!success && retryCount <= Datas.MAX_COMMISSION_RETRY_COUNT) { + log.info("等待1秒后重试委托 {name}...", commission.name); + await sleep(1000); + } } + + // 重试循环结束后的处理 + if (!success) { + if (retryCount > Datas.MAX_COMMISSION_RETRY_COUNT) { + log.warn( + "委托 {name} 重试 {retry} 次后仍未完成,跳过该委托", + commission.name, + Datas.MAX_COMMISSION_RETRY_COUNT + ); + } else { + log.warn("委托 {name} 执行失败", commission.name); + } + } else { + log.info("委托 {name} 执行成功", commission.name); + } + + // 每个委托之间等待一段时间 + log.info("立刻执行下一个委托"); + //await sleep(5000); + } + + log.info( + "委托追踪全部执行完成,共执行 {count}/{total} 个委托", + completedCount, + commissions.length + ); + + return completedCount > 0; + } catch (error) { + log.error("执行委托追踪时出错: {error}", error.message); + errorlog(); + return false; + } + }, + }; + + // 步骤处理器类 - 处理不同类型的委托执行步骤 + // TAG:添加脚本功能点1 + const StepProcessor = { + // 处理地图追踪步骤 + processMapTracking: async (step, commissionName, location) => { + const fullPath = `${ + Datas.TALK_PROCESS_BASE_PATH + }/${commissionName}/${location}/${step.data || step}`; + log.info("执行地图追踪: {path}", fullPath); + try { + await pathingScript.runFile(fullPath); + log.info("地图追踪执行完成"); + } catch (error) { + log.error("执行地图追踪时出错: {error}", error.message); + throw error; + } + }, + + // 处理追踪委托步骤 + processCommissionTracking: async (step) => { + try { + // 获取目标NPC名称和图标类型 + let targetNpc = ""; + let iconType = "bigmap"; + + if (typeof step.data === "string") { + targetNpc = step.data; + } else if (typeof step.data === "object") { + if (step.data.npc) targetNpc = step.data.npc; + if (step.data.iconType) iconType = step.data.iconType; + } + + log.info( + "执行追踪委托,目标NPC: {target},图标类型: {type}", + targetNpc, + iconType + ); + await Execute.autoNavigateToTalk(targetNpc, iconType); + log.info("追踪委托执行完成"); + } catch (error) { + log.error("执行追踪委托时出错: {error}", error.message); + throw error; + } + }, + + // 处理键鼠脚本步骤 + processKeyMouseScript: async (step, commissionName, location) => { + log.info("执行键鼠脚本: {path}", step.data); + try { + const fullPath = `${Datas.TALK_PROCESS_BASE_PATH}/${commissionName}/${location}/${step.data}`; + await keyMouseScript.runFile(fullPath); + log.info("键鼠脚本执行完成"); + } catch (error) { + log.error("执行键鼠脚本时出错: {error}", error.message); + throw error; + } + }, + + // 处理按键步骤 + processKeyPress: async (step) => { + if (typeof step.data === "string") { + log.info("执行按键: {key}", step.data); + keyPress(step.data); + } else if (typeof step.data === "object") { + if (step.data.action === "down") { + log.info("按下按键: {key}", step.data.key); + keyDown(step.data.key); + } else if (step.data.action === "up") { + log.info("释放按键: {key}", step.data.key); + keyUp(step.data.key); + } else if (step.data.action === "press") { + log.info("点击按键: {key}", step.data.key); + keyPress(step.data.key); } } + }, - // 合并所有委托结果 - let allCommissions = [...firstCommissions]; - if (fourthCommission) { - allCommissions.push(fourthCommission); + // 处理传送步骤 + processTeleport: async (step) => { + if (Array.isArray(step.data) && step.data.length >= 2) { + log.info("执行传送: {x}, {y}", step.data[0], step.data[1]); + const force = step.data.length > 2 ? step.data[2] : false; + await genshin.tp(step.data[0], step.data[1], force); + log.info("传送完成"); + } else { + log.error("传送参数格式错误"); + throw new Error("传送参数格式错误"); } + }, - // 输出完整委托列表 - log.info("完整委托列表:"); - for (const commission of allCommissions) { - const supportStatus = commission.supported ? "✅ 支持" : "❌ 不支持"; - const locationInfo = commission.location - ? `(${commission.location})` - : ""; - const typeInfo = commission.type ? `[${commission.type}]` : ""; + // 处理等待主界面步骤 + processWaitMainUI: async (isInMainUI) => { + for (let i = 0; i < 60; i++) { + if (isInMainUI()) { + log.info("检测到已返回主界面,结束等待"); + break; + } + await sleep(1000); + } + if (!isInMainUI()) { + log.info("等待返回主界面超时,尝试继续执行后续步骤"); + } + }, + + // 处理地址检测步骤 + processLocationDetection: async ( + step, + commissionName, + location, + processSteps, + currentIndex + ) => { + if (Array.isArray(step.data) && step.data.length >= 2) { log.info( - "{id}. {name} {location} {type} - {status}", - commission.id, - commission.name, - locationInfo, - typeInfo, - supportStatus + `地址检测: {${step.data[0]}},{${step.data[1]}},run:${step.run}` ); + + try { + // 获取当前委托目标位置 + let commissionTarget = await Execute.findCommissionTarget( + commissionName + ); + + if (commissionTarget) { + const distance2 = CommissionsFunc.calculateDistance( + commissionTarget, + { + x: step.data[0], + y: step.data[1], + } + ); + + log.info( + "地址检测 - 委托位置: ({x}, {y}), 目标位置: ({tx}, {ty}), 距离: {d}", + commissionTarget.x, + commissionTarget.y, + step.data[0], + step.data[1], + distance2 + ); + + if (distance2 < 15) { + log.info("地址检测成功,执行后续步骤"); + const nextSteps = await Execute.loadAndParseProcessFile( + commissionName, + location, + step.run + ); + // 插入到processSteps的这一步后面 + if (nextSteps && Array.isArray(nextSteps)) { + processSteps.splice(currentIndex + 1, 0, ...nextSteps); + log.info("已插入 {count} 个后续步骤", nextSteps.length); + } + } else { + log.info("地址检测失败,距离过远: {distance}", distance2); + } + } else { + log.warn("无法获取委托目标位置,跳过地址检测"); + } + } catch (error) { + log.error("地址检测时出错: {error}", error.message); + throw error; + } + } else { + log.error("地址检测参数格式错误"); + throw new Error("地址检测参数格式错误"); } + }, - // 保存委托数据 - saveCommissionsData(allCommissions); + // 处理委托描述检测步骤 + processCommissionDescriptionDetection: async ( + step, + commissionName, + location, + processSteps, + currentIndex + ) => { + // 按v键打开任务界面 + keyPress("v"); + await sleep(300); - log.info("原神每日委托识别脚本执行完成"); - } catch (error) { - log.error("脚本执行出错: {error}", error); - } - } + if (step.data !== "") { + log.info(`委托描述检测: {${step.data}}`); - /** - * 计算两点之间的距离 - * @param {Object} pos1 - 位置1 {x, y} - * @param {Object} pos2 - 位置2 {x, y} - * @returns {number} 距离 - */ - function calculateDistance(point1, point2) { - if ( - !point1 || - !point2 || - !point1.X || - !point1.Y || - !point2.x || - !point2.y - ) { - log.warn("无效的位置数据"); - return Infinity; - } - return Math.sqrt( - Math.pow(point1.X - point2.x, 2) + Math.pow(point1.Y - point2.y, 2) - ); - } + // 循环检测,直到稳定 + for (let c = 0; c < 13; c++) { + try { + // 使用委托详情检测区域进行OCR + const ocrResult = await Utils.easyOCROne( + Datas.OCR_REGIONS.COMMISSION_DETAIL + ); - /** - * 获取委托的目标坐标(从路径追踪文件中获取最后一个坐标) - * @param {string} scriptPath - 委托的脚本路径 - * @returns {Object|null} 目标坐标 {x, y} 或 null - */ - async function getCommissionTargetPosition(scriptPath) { - try { - const scriptContent = await file.readText(scriptPath); - const pathData = JSON.parse(scriptContent); - - if (!pathData.positions || pathData.positions.length === 0) { - log.warn("路径追踪文件 {path} 中没有有效的坐标数据", scriptPath); - return null; + if (ocrResult === commissionName || ocrResult === "") { + await sleep(1000); + // 没有延时13s的错误提示,继续检测 + log.debug("检测到委托名称或空文本,继续等待..."); + } + // 成功匹配,开始插入step + else if (ocrResult === step.data) { + log.info("委托描述检测成功,执行后续步骤"); + const nextSteps = await Execute.loadAndParseProcessFile( + commissionName, + location, + step.run + ); + // 插入到这一步后面 + if (nextSteps && Array.isArray(nextSteps)) { + processSteps.splice(currentIndex + 1, 0, ...nextSteps); + log.info("已插入 {count} 个后续步骤", nextSteps.length); + } + break; + } else { + log.warn(`委托描述不匹配,识别:${ocrResult},期望:${step.data}`); + break; + } + } catch (ocrError) { + log.error("委托描述OCR识别出错: {error}", ocrError); + break; + } + } + } else { + log.error("委托描述检测参数格式错误"); + throw new Error("委托描述检测参数格式错误"); } + }, - const lastPosition = pathData.positions[pathData.positions.length - 1]; - if (!lastPosition.x || !lastPosition.y) { - log.warn( - "路径追踪文件 {path} 的最后一个路径点缺少坐标数据", - scriptPath + // 处理角色切换步骤 + processSwitchRole: async (step) => { + try { + const { position, character } = step.data; + + if (!position || !character) { + log.error("角色切换参数不完整,需要 position 和 character"); + return false; + } + + log.info(`开始切换角色:第${position}号位 -> ${character}`); + + const positionCoordinates = [ + [460, 538], + [792, 538], + [1130, 538], + [1462, 538], + ]; + + // 读取别名 + const aliases = Utils.readAliases(); + const actualName = aliases[character] || character; + log.info(`设置对应号位为【${character}】,切换角色为【${actualName}】`); + + // 识别对象定义 + const roTeamConfig = RecognitionObject.TemplateMatch( + file.ReadImageMatSync(`Data/RecognitionObject/队伍配置.png`), + 0, + 0, + 1920, + 1080 ); - return null; + const roReplace = RecognitionObject.TemplateMatch( + file.ReadImageMatSync(`Data/RecognitionObject/更换.png`), + 0, + 0, + 1920, + 1080 + ); + const roJoin = RecognitionObject.TemplateMatch( + file.ReadImageMatSync(`Data/RecognitionObject/加入.png`), + 0, + 0, + 1920, + 1080 + ); + + let openPairingTries = 0; + let totalOpenPairingTries = 0; + + // 打开配对界面的内部函数 + const openPairingInterface = async () => { + while (openPairingTries < 3) { + keyPress("l"); + await sleep(3500); + const teamConfigResult = captureGameRegion().find(roTeamConfig); + if (teamConfigResult.isExist()) { + openPairingTries = 0; + return true; + } + openPairingTries++; + totalOpenPairingTries++; + } + if (totalOpenPairingTries < 6) { + await genshin.tp("2297.630859375", "-824.5517578125"); + openPairingTries = 0; + return openPairingInterface(); + } else { + log.error("无法打开配对界面,任务结束"); + return false; + } + }; + + if (!(await openPairingInterface())) { + return false; + } + + const rolenum = position; + const selectedCharacter = actualName; + const [x, y] = positionCoordinates[position - 1]; + click(x, y); + log.info(`开始设置${rolenum}号位角色`); + await sleep(1000); + let characterFound = false; + let pageTries = 0; + + // 最多尝试滚动页面20次 + while (pageTries < 20) { + // 尝试识别所有可能的角色文件名 + for (let num = 1; ; num++) { + const paddedNum = num.toString().padStart(2, "0"); + const characterFileName = `${selectedCharacter}${paddedNum}`; + try { + const characterRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync( + `Data/characterimage/${characterFileName}.png` + ), + 0, + 0, + 1920, + 1080 + ); + const characterResult = captureGameRegion().find(characterRo); + if (characterResult.isExist()) { + log.info(`已找到角色${selectedCharacter}`); + // 计算向右偏移35像素、向下偏移35像素的位置 + const targetX = characterResult.x + 35; + const targetY = characterResult.y + 35; + + // 边界检查,确保坐标在屏幕范围内 + const safeX = Math.min(Math.max(targetX, 0), 1920); + const safeY = Math.min(Math.max(targetY, 0), 1080); + + click(safeX, safeY); + await sleep(500); // 点击角色后等待0.5秒 + characterFound = true; + break; + } + } catch (error) { + // 如果文件不存在,跳出循环 + break; + } + } + + if (characterFound) { + break; + } + + // 如果不是最后一次尝试,尝试滚动页面 + if (pageTries < 15) { + log.info("当前页面没有目标角色,滚动页面"); + await UI.scrollPage(200); // 使用UI模块的scrollPage函数 + } + pageTries++; + } + + if (!characterFound) { + log.error(`未找到【${selectedCharacter}】`); + return false; + } + + // 识别"更换"或"加入"按钮 + const replaceResult = captureGameRegion().find(roReplace); + const joinResult = captureGameRegion().find(roJoin); + + if (replaceResult.isExist() || joinResult.isExist()) { + await sleep(300); + click(68, 1020); + keyPress("VK_LBUTTON"); + await sleep(500); + log.info(`角色切换完成:${character} -> ${actualName}`); + return true; + } else { + log.error(`该角色已在队伍中,无需切换`); + await sleep(300); + keyPress("VK_ESCAPE"); + await sleep(500); + return false; + } + } catch (error) { + log.error("角色切换过程中出错: {error}", error.message); + return false; } + }, + }; - log.debug( - "从脚本路径 {path} 获取到目标坐标: ({x}, {y})", - scriptPath, - lastPosition.x, - lastPosition.y - ); - return { - x: lastPosition.x, - y: lastPosition.y, - }; - } catch (error) { - log.error("获取委托目标位置时出错: {error}", error); - return null; - } - } + // 步骤处理器工厂 - 更好的扩展性设计 + // TAG:添加脚本功能点2 + const StepProcessorFactory = { + // 步骤处理器映射表 + processors: { + 地图追踪: async (step, context) => { + await StepProcessor.processMapTracking( + step, + context.commissionName, + context.location + ); + }, - /** - * 统一的对话委托流程处理器 - * @param {Array} processSteps - 处理步骤数组 - * @param {string} commissionName - 委托名称 - * @param {string} location - 委托地点 - * @returns {Promise} - 执行结果 - */ - async function executeUnifiedTalkProcess( - processSteps, - commissionName, - location - ) { - try { - log.info("执行统一对话委托流程: {name}", commissionName); + 等待: async (step, context) => { + await sleep(5000); + }, - // 加载优先选项和白名单NPC名称的默认值 - let priorityOptions = []; - let npcWhiteList = []; - let clickedExtractedName = false; + 追踪委托: async (step, context) => { + await StepProcessor.processCommissionTracking(step); + }, - // 定义识别对象 + 键鼠脚本: async (step, context) => { + await StepProcessor.processKeyMouseScript( + step, + context.commissionName, + context.location + ); + }, + + 对话: async (step, context) => { + await Execute.processDialogStep( + step, + context.priorityOptions, + context.npcWhiteList, + context.isInMainUI + ); + }, + + 按键: async (step, context) => { + await StepProcessor.processKeyPress(step); + }, + + tp: async (step, context) => { + await StepProcessor.processTeleport(step); + }, + + isinMainUi: async (step, context) => { + await StepProcessor.processWaitMainUI(context.isInMainUI); + }, + + 地址检测: async (step, context) => { + await StepProcessor.processLocationDetection( + step, + context.commissionName, + context.location, + context.processSteps, + context.currentIndex + ); + }, + + 委托描述检测: async (step, context) => { + await StepProcessor.processCommissionDescriptionDetection( + step, + context.commissionName, + context.location, + context.processSteps, + context.currentIndex + ); + }, + + 切换角色: async (step, context) => { + await StepProcessor.processSwitchRole(step); + }, + }, + + // 注册新的步骤处理器 + register: (stepType, processor) => { + StepProcessorFactory.processors[stepType] = processor; + log.info("注册新的步骤处理器: {type}", stepType); + }, + + // 处理步骤 + process: async (step, context) => { + const processor = StepProcessorFactory.processors[step.type]; + if (processor) { + await processor(step, context); + } else { + log.warn("未知的流程类型: {type}", step.type); + } + }, + }; + + // UI工具模块 - 处理UI检测和文本提取等工具函数 + const UIUtils = { + // 创建主界面检测函数 + createMainUIChecker: () => { const paimonMenuRo = RecognitionObject.TemplateMatch( file.ReadImageMatSync("Data/RecognitionObject/paimon_menu.png"), 0, @@ -954,435 +1233,403 @@ const autoNavigateToTalk = async (npcName = "", iconType = "") => { genshin.width / 5.0 ); - // 判断是否在主界面的函数 - const isInMainUI = () => { + return () => { let captureRegion = captureGameRegion(); let res = captureRegion.Find(paimonMenuRo); return !res.isEmpty(); }; + }, - // 人名提取函数 - const extractName = (text) => { - const patterns = [ - /与(.+?)对话/, - /与(.+?)一起/, - /同(.+?)交谈/, - /向(.+?)打听/, - /向(.+?)回报/, - /陪同(.+?)\S+/, - /找到(.+?)\S+/, - /询问(.+?)\S+/, - /拜访(.+?)\S+/, - /寻找(.+?)\S+/, - /告诉(.+?)\S+/, - /带(.+?)去\S+/, - /跟随(.+?)\S+/, - /协助(.+?)\S+/, - /请教(.+?)\S+/, - /拜托(.+?)\S+/, - /委托(.+?)\S+/, - ]; + // 人名提取函数 + extractName: (text) => { + const patterns = [ + /与(.+?)对话/, + /与(.+?)一起/, + /同(.+?)交谈/, + /向(.+?)打听/, + /向(.+?)回报/, + /向(.+?)报告/, + /给(.+?)听/, + /陪同(.+?)\S+/, + /找到(.+?)\S+/, + /询问(.+?)\S+/, + /拜访(.+?)\S+/, + /寻找(.+?)\S+/, + /告诉(.+?)\S+/, + /带(.+?)去\S+/, + /跟随(.+?)\S+/, + /协助(.+?)\S+/, + /请教(.+?)\S+/, + /拜托(.+?)\S+/, + /委托(.+?)\S+/, + ]; - for (const pattern of patterns) { - const match = text.match(pattern); - if (match && match[1]) { - return match[1].trim(); - } + for (const pattern of patterns) { + const match = text.match(pattern); + if (match && match[1]) { + return match[1].trim(); } - return null; - }; + } + return null; + }, + }; - // 自动剧情函数 - const executeOptimizedAutoTalk = async ( - extractedName = null, - skipCount = 5, - customPriorityOptions = null, - customNpcWhiteList = null - ) => { - // 使用传入的参数,不再加载默认配置 - const effectivePriorityOptions = customPriorityOptions || []; - const effectiveNpcWhiteList = customNpcWhiteList || []; + // 对话处理模块 - 处理自动对话相关功能 + const DialogProcessor = { + // 执行优化的自动对话 + executeOptimizedAutoTalk: async ( + extractedName = null, + skipCount = 5, + customPriorityOptions = null, + customNpcWhiteList = null, + isInMainUI + ) => { + // 使用传入的参数,不再加载默认配置 + const effectivePriorityOptions = customPriorityOptions || []; + const effectiveNpcWhiteList = customNpcWhiteList || []; - // 初始化 - keyPress("V"); + // 初始化 + keyPress("V"); + + // 初始触发剧情 - 识别人名并点击 + extractedName = []; + // 人名区域OCR识别 + const nameRegion = { X: 75, Y: 240, WIDTH: 225, HEIGHT: 60 }; + let nameResults = await Utils.easyOCR(nameRegion); + // 尝试提取任务人名 + for (let i = 0; i < nameResults.count; i++) { + let text = nameResults[i].text; + log.info(`任务区域识别文本: ${text}`); - // 初始触发剧情 - 识别人名并点击 - extractedName = []; - let captureRegion = captureGameRegion(); - let nameArea = captureRegion.DeriveCrop(75, 240, 225, 60); // 人名区域 - let nameOcrRo = RecognitionObject.Ocr( - 0, - 0, - nameArea.width, - nameArea.height - ); - let nameResults = nameArea.FindMulti(nameOcrRo); // 尝试提取任务人名 + let name = UIUtils.extractName(text); + if (name) { + extractedName = name; + log.info(`提取到人名: ${extractedName}`); + break; + } + } + + // 对话选项区域OCR识别 + const dialogRegion = { X: 1150, Y: 300, WIDTH: 350, HEIGHT: 400 }; + nameResults = await Utils.easyOCR(dialogRegion); + let clickedWhitelistNPC = false; + let clickedExtractedName = false; + + // 处理人名区域的OCR结果 + if (nameResults.count > 0) { + log.info(`人名区域识别到 ${nameResults.count} 个文本`); + + // 首先尝试点击白名单中的NPC for (let i = 0; i < nameResults.count; i++) { let text = nameResults[i].text; - log.info(`任务区域识别文本: ${text}`); - - // 尝试提取任务人名 - let name = extractName(text); - if (name) { - extractedName = name; - log.info(`提取到人名: ${extractedName}`); - break; + let res = nameResults[i]; + log.info( + "人名区域识别到{text}:位置({x},{y},{h},{w})", + res.text, + res.x, + res.y, + res.width, + res.Height + ); + // 检查是否包含白名单中的NPC名称 + for (let j = 0; j < effectiveNpcWhiteList.length; j++) { + if (text.includes(effectiveNpcWhiteList[j])) { + log.info(`找到白名单NPC: ${effectiveNpcWhiteList[j]},点击该NPC`); + keyDown("VK_MENU"); + await sleep(500); + click(res.x, res.y); + leftButtonClick(); + keyUp("VK_MENU"); + clickedWhitelistNPC = true; + break; + } } + if (clickedWhitelistNPC) break; } - nameArea = captureRegion.DeriveCrop(1150, 300, 350, 400); - //nameArea = captureRegion.DeriveCrop(0, 0, 1920, 1080); - nameOcrRo = RecognitionObject.Ocr( - 0, - 0, - nameArea.width, - nameArea.height - ); - nameResults = nameArea.FindMulti(nameOcrRo); - let clickedWhitelistNPC = false; - - // 处理人名区域的OCR结果 - if (nameResults.count > 0) { - log.info(`人名区域识别到 ${nameResults.count} 个文本`); - - // 首先尝试点击白名单中的NPC + // 如果没有点击白名单NPC,尝试点击包含提取到的人名的选项 + if (!clickedWhitelistNPC && extractedName) { for (let i = 0; i < nameResults.count; i++) { let text = nameResults[i].text; let res = nameResults[i]; - log.info( - "人名区域识别到{text}:位置({x},{y},{h},{w})", - res.text, - res.x, - res.y, - res.width, - res.Height - ); - // 检查是否包含白名单中的NPC名称 - for (let j = 0; j < effectiveNpcWhiteList.length; j++) { - if (text.includes(effectiveNpcWhiteList[j])) { - log.info( - `找到白名单NPC: ${effectiveNpcWhiteList[j]},点击该NPC` - ); - keyDown("VK_MENU"); - await sleep(500); - click(res.x + 1150, res.y + 300); - leftButtonClick(); - keyUp("VK_MENU"); - clickedWhitelistNPC = true; - break; - } - } - if (clickedWhitelistNPC) break; - } - - // 如果没有点击白名单NPC,尝试点击包含提取到的人名的选项 - if (!clickedWhitelistNPC && extractedName) { - for (let i = 0; i < nameResults.count; i++) { - let text = nameResults[i].text; - let res = nameResults[i]; - if (text.includes(extractedName)) { - log.info(`点击包含提取到任务人名的选项: ${text}`); - keyDown("VK_MENU"); - await sleep(500); - click(res.x + 1150, res.y + 300); - leftButtonClick(); - keyUp("VK_MENU"); - clickedExtractedName = true; - break; - } + if (text.includes(extractedName)) { + log.info(`点击包含提取到任务人名的选项: ${text}`); + keyDown("VK_MENU"); + await sleep(500); + click(res.x, res.y); + leftButtonClick(); + keyUp("VK_MENU"); + clickedExtractedName = true; + break; } } } - - // 如果没有找到NPC,使用默认触发 - if (!clickedWhitelistNPC && !clickedExtractedName) { - log.info("未找到匹配的NPC,使用默认触发方式"); - keyPress("F"); // 默认触发剧情 - await sleep(500); - } - - // 重复执行自动剧情,直到返回主界面 - let maxAttempts = 100; // 设置最大尝试次数,防止无限循环 - let attempts = 0; - await sleep(1000); - log.info("开始执行自动剧情"); - - while (!isInMainUI() && attempts < maxAttempts) { - attempts++; - - // 正常跳过对话 - await genshin.chooseTalkOption( - "纳西妲美貌举世无双", - skipCount, - false - ); - - if (isInMainUI()) { - log.info("检测到已返回主界面,结束循环"); - break; - } - - // 每skipCount次跳过后,进行OCR识别 - if (true) { - //log.info("执行OCR识别对话选项"); - - // 检查是否有匹配的优先选项 - let foundPriorityOption = false; - - // 获取对话区域截图并进行OCR识别 - let captureRegion = captureGameRegion(); - let dialogArea = captureRegion.DeriveCrop(1250, 450, 550, 400); // 对话选项区域 1250,450 到 1800,850 - - // 创建OCR识别对象并识别文本 - let ocrRo = RecognitionObject.Ocr( - 0, - 0, - dialogArea.width, - dialogArea.height - ); - let ocrResults = dialogArea.FindMulti(ocrRo); - if (ocrResults.count > 0) { - log.info(`识别到 ${ocrResults.count} 个选项`); - - for (let i = 0; i < ocrResults.count; i++) { - let ocrText = ocrResults[i].text; - - // 检查是否在优先选项列表中 - for (let j = 0; j < effectivePriorityOptions.length; j++) { - if (ocrText.includes(effectivePriorityOptions[j])) { - log.info( - `找到优先选项: ${effectivePriorityOptions[j]},点击该选项` - ); - // 点击该选项 - ocrResults[i].click(); - await sleep(500); - foundPriorityOption = true; - break; - } - } - - if (foundPriorityOption) break; - } - - // 如果没有找到优先选项,则使用默认跳过 - if (!foundPriorityOption) { - await genshin.chooseTalkOption("", 1, false); - } - } - } - - // 检查是否已返回主界面 - if (isInMainUI()) { - log.info("检测到已返回主界面,结束循环"); - break; - } - } - - if (isInMainUI()) { - log.info("已返回主界面,自动剧情执行完成"); - keyPress("V"); - } else { - log.warn(`已达到最大尝试次数 ${maxAttempts},但未检测到返回主界面`); - } - }; - - // 执行处理步骤 - for (let i = 0; i < processSteps.length; i++) { - const step = processSteps[i]; - log.info("执行流程步骤 {step}: {type}", i + 1, step.type || step); - - // 重置为默认值 - priorityOptions = []; - npcWhiteList = []; - - // 如果步骤中包含自定义的优先选项和NPC白名单,则使用它们 - if (step.data && typeof step.data === "object") { - if (Array.isArray(step.data.priorityOptions)) { - priorityOptions = step.data.priorityOptions; - log.info( - "使用自定义优先选项: {options}", - priorityOptions.join(", ") - ); - } - if (Array.isArray(step.data.npcWhiteList)) { - npcWhiteList = step.data.npcWhiteList; - log.info("使用自定义NPC白名单: {npcs}", npcWhiteList.join(", ")); - } - } - - if (typeof step === "string") {//typeof step === "string" - // 简单格式处理 - if (step.endsWith(".json")) { - // 地图追踪文件 - const trackingPath = `${TALK_PROCESS_BASE_PATH}/${commissionName}/${location}/${step}`; - log.info("执行地图追踪: {path}", trackingPath); - try { - await pathingScript.runFile(trackingPath); - log.info("地图追踪执行完成"); - } catch (error) { - log.error("执行地图追踪时出错: {error}", error); - } - } else if (step === "F") { - // 按F键并执行优化的自动剧情 - log.info("执行自动剧情"); - await executeOptimizedAutoTalk( - null, - 5, - priorityOptions, - npcWhiteList - ); - } - } else if (typeof step === "object") { - // JSON格式处理 - if (step.note) { - log.info("步骤说明: {note}", step.note); - } - - switch (step.type) { - case "地图追踪": - log.info("执行地图追踪: {path}", step.data); - try { - const fullPath = `${TALK_PROCESS_BASE_PATH}/${commissionName}/${location}/${step.data}`; - await pathingScript.runFile(fullPath); - log.info("地图追踪执行完成"); - } catch (error) { - log.error("执行地图追踪时出错: {error}", error); - } - break; - - case "追踪委托": - try { - // 获取目标NPC名称和图标类型 - let targetNpc = ""; - let iconType = "bigmap"; - - if (typeof step.data === "string") { - targetNpc = step.data; - } else if (typeof step.data === "object") { - if (step.data.npc) targetNpc = step.data.npc; - if (step.data.iconType) iconType = step.data.iconType; - } - - log.info("执行追踪委托,目标NPC: {target},图标类型: {type}", targetNpc, iconType); - await autoNavigateToTalk(targetNpc, iconType); - log.info("追踪委托执行完成"); - } catch (error) { - log.error("执行追踪委托时出错: {error}", error.message); - } - break; - - case "键鼠脚本": - log.info("执行键鼠脚本: {path}", step.data); - try { - const fullPath = `${TALK_PROCESS_BASE_PATH}/${commissionName}/${location}/${step.data}`; - await keyMouseScript.runFile(fullPath); - log.info("键鼠脚本执行完成"); - } catch (error) { - log.error("执行键鼠脚本时出错: {error}", error.message); - } - break; - - case "对话": - log.info("执行对话"); - let skipCount = 5; // 默认跳过5次 - - // 处理对话选项 - if (typeof step.data === "number") { - // 兼容旧版本,如果data是数字,则视为skipCount - skipCount = step.data; - } else if (typeof step.data === "object" && step.data.skipCount) { - // 新版本,data是对象,包含skipCount - skipCount = step.data.skipCount; - } - - // 执行对话,使用当前步骤的优先选项和NPC白名单 - await executeOptimizedAutoTalk( - null, - skipCount, - priorityOptions, - npcWhiteList - ); - break; - - case "按键": - if (typeof step.data === "string") { - log.info("执行按键: {key}", step.data); - keyPress(step.data); - } else if (typeof step.data === "object") { - if (step.data.action === "down") { - log.info("按下按键: {key}", step.data.key); - keyDown(step.data.key); - } else if (step.data.action === "up") { - log.info("释放按键: {key}", step.data.key); - keyUp(step.data.key); - } else if (step.data.action === "press") { - log.info("点击按键: {key}", step.data.key); - keyPress(step.data.key); - } - } - break; - - case "tp": - if (Array.isArray(step.data) && step.data.length >= 2) { - log.info("执行传送: {x}, {y}", step.data[0], step.data[1]); - const force = step.data.length > 2 ? step.data[2] : false; - await genshin.tp(step.data[0], step.data[1], force); - log.info("传送完成"); - } else { - log.error("传送参数格式错误"); - } - break; - - case "isinMainUi": - for (let i = 0; i < 60; i++) { - if (isInMainUI()) { - log.info("检测到已返回主界面,结束等待"); - break; - } - await sleep(1000); - } - if (!isInMainUI()) { - log.info("等待返回主界面超时,尝试继续执行后续步骤"); - } - break; - - default: - log.warn("未知的流程类型: {type}", step.type); - } - } - - // 每个步骤之间等待一段时间 - await sleep(2000); } - log.info("统一对话委托流程执行完成: {name}", commissionName); - return true; - } catch (error) { - log.error("执行统一对话委托流程时出错: {error}", error.message); - return false; - } - } + // 如果没有找到NPC,使用默认触发 + if (!clickedWhitelistNPC && !clickedExtractedName) { + log.info("未找到匹配的NPC,使用默认触发方式"); + keyPress("F"); // 默认触发剧情 + await sleep(500); + } - /** - * 执行对话委托流程(优化版) - * @param {string} commissionName - 委托名称 - * @param {string} location - 委托地点 - * @returns {Promise} - 执行结果 - */ - async function executeTalkCommission(commissionName, location) { - try { - log.info( - "开始执行对话委托: {name} ({location})", - commissionName, - location - ); + // 重复执行自动剧情,直到返回主界面 + let maxAttempts = 100; // 设置最大尝试次数,防止无限循环 + let attempts = 0; + let repetition = 0; + let oldcount = 1; + await sleep(1000); + log.info("开始执行自动剧情"); - // 优化的文件路径:固定使用 ${processBasePath}/${location}/process.json - const processBasePath = TALK_PROCESS_BASE_PATH; - const processFilePath = `${processBasePath}/${commissionName}/${location}/process.json`; + while (!isInMainUI() && attempts < maxAttempts) { + attempts++; + // 正常跳过对话 + await genshin.chooseTalkOption("纳西妲美貌举世无双", skipCount, false); + + keyPress("VK_ESCAPE");//关弹窗 + + if (isInMainUI()) { + log.info("检测到已返回主界面,结束循环"); + break; + } + + // 每skipCount次跳过后,进行OCR识别 + if (true) { + // 检查是否有匹配的优先选项 + let foundPriorityOption = false; + + // 获取对话区域截图并进行OCR识别 + const dialogOptionsRegion = { + X: 1250, + Y: 450, + WIDTH: 550, + HEIGHT: 400, + }; + let ocrResults = await Utils.easyOCR(dialogOptionsRegion); + if (ocrResults.count > 0) { + log.info(`识别到 ${ocrResults.count} 个选项`); + + if (ocrResults.count === oldcount) { + repetition++; + } + else { + repetition = 0; + } + oldcount = ocrResults.count; + if (repetition >= 5) { + log.info("连续5次选项数量一样,执行F跳过"); + keyPress("F"); + repetition = 0; + } + for (let i = 0; i < ocrResults.count; i++) { + let ocrText = ocrResults[i].text; + + // 检查是否在优先选项列表中 + for (let j = 0; j < effectivePriorityOptions.length; j++) { + if (ocrText.includes(effectivePriorityOptions[j])) { + log.info( + `找到优先选项: ${effectivePriorityOptions[j]},点击该选项` + ); + // 点击该选项 + ocrResults[i].click(); + await sleep(500); + foundPriorityOption = true; + break; + } + } + + if (foundPriorityOption) break; + } + + // 如果没有找到优先选项,则使用默认跳过 + if (!foundPriorityOption) { + await genshin.chooseTalkOption("", 1, false); + } + } + } + + // 检查是否已返回主界面 + if (isInMainUI()) { + log.info("检测到已返回主界面,结束循环"); + break; + } + } + + if (isInMainUI()) { + log.info("已返回主界面,自动剧情执行完成"); + keyPress("V"); + } else { + log.warn(`已达到最大尝试次数 ${maxAttempts},但未检测到返回主界面`); + } + }, + }; + + const Execute = { + // 寻找委托目的地址带追踪任务 + findCommissionTarget: async (commissionName) => { + try { + log.info("开始寻找委托目标位置: {name}", commissionName); + + // 确保回到主界面 + await genshin.returnMainUi(); + + // 第一步,检测这个任务是否在1-3之中 + let index = 4; + + try { + // 进入委托界面 + const enterSuccess = await UI.enterCommissionScreen(); + if (!enterSuccess) { + log.error("无法进入委托界面"); + return null; + } + + await sleep(1000); + + // 使用Main_Dev识别前3个委托 + log.info("findCommissionTarget使用Main_Dev识别前3个委托"); + + // 先识别前3个Main_Dev区域(索引0-2) + for (let regionIndex = 0; regionIndex < 3; regionIndex++) { + const region = Datas.OCR_REGIONS.Main_Dev[regionIndex]; + + try { + let results = await Utils.easyOCR(region); + + // 处理识别结果,取第一个有效结果 + for (let i = 0; i < results.count; i++) { + let result = results[i]; + let text = Utils.cleanText(result.text); + if (text && text.length >= 2) { + log.info( + '第{regionIndex}个委托: "{text}"', + regionIndex + 1, + text + ); + if (text === commissionName) { + index = regionIndex + 1; + log.info( + "找到委托 {name} 在位置 {index}", + commissionName, + index + ); + break; + } + } + } + + // 如果找到了委托,跳出外层循环 + if (index !== 4) { + break; + } + } catch (regionError) { + log.error( + "识别第{index}个委托区域时出错: {error}", + regionIndex + 1, + regionError + ); + continue; + } + } + } catch (error) { + log.error("findCommissionTarget第一步失败: {error}", error.message); + } + + // 如果前3个没找到,检查第4个委托(需要翻页) + if (index === 4) { + try { + log.info("前3个委托中未找到,检查第4个委托"); + await UI.pageScroll(1); + + const region = Datas.OCR_REGIONS.Main_Dev[3]; // 第4个区域 + let results = await Utils.easyOCR(region); + + for (let i = 0; i < results.count; i++) { + let result = results[i]; + let text = Utils.cleanText(result.text); + if (text && text.length >= 2) { + log.info('第4个委托: "{text}"', text); + if (text === commissionName) { + index = 4; + log.info("找到委托 {name} 在第4个位置", commissionName); + break; + } + } + } + } catch (fourthError) { + log.error("识别第4个委托时出错: {error}", fourthError); + } + } + + // 第二步:进入对应的大地图,获取位置 + let currentCommissionPosition = null; + try { + // 点击详情按钮 + if (index === 4) { + // 第4个委托已经翻页了,使用索引3 + index = 3; + } + + const button = Datas.COMMISSION_DETAIL_BUTTONS[index - 1]; + if (button) { + log.info("点击委托详情按钮: {id}", button.id); + click(button.x, button.y); + await sleep(2000); + + // 检查是否有追踪按钮并点击 + const trackingResult = await Utils.easyOCROne( + Datas.OCR_REGIONS.COMMISSION_TRACKING + ); + if (trackingResult === "追踪") { + log.info("发现追踪按钮,点击追踪"); + click(1693, 1000); + await sleep(1000); + } + + // 退出详情页面 + log.info("退出详情页面 - 按ESC"); + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + await genshin.setBigMapZoomLevel(2); + // 获取地图坐标并保存 + const bigMapPosition = genshin.getPositionFromBigMap(); + if (bigMapPosition) { + currentCommissionPosition = bigMapPosition; + log.info( + "当前委托位置: ({x}, {y})", + bigMapPosition.x, + bigMapPosition.y + ); + } + + await genshin.returnMainUi(); + } else { + log.error("无效的委托按钮索引: {index}", index); + } + } catch (error) { + log.error("findCommissionTarget第2步失败: {error}", error.message); + } + + return currentCommissionPosition; + } catch (error) { + log.error("寻找委托目标位置时出错: {error}", error.message); + return null; + } + }, + + // 读取并解析流程文件为步骤数组 + loadAndParseProcessFile: async ( + commissionName, + location, + locationprocessFilePath = "process.json" + ) => { + const processFilePath = `${Datas.TALK_PROCESS_BASE_PATH}/${commissionName}/${location}/${locationprocessFilePath}`; let processContent; + let processSteps; try { processContent = await file.readText(processFilePath); log.info("找到对话委托流程文件: {path}", processFilePath); @@ -1395,14 +1642,14 @@ const autoNavigateToTalk = async (npcName = "", iconType = "") => { ); return false; } - // 解析流程内容 - let processSteps; + try { // 尝试解析为JSON格式 const jsonData = JSON.parse(processContent); if (Array.isArray(jsonData)) { processSteps = jsonData; + log.debug("JSON流程解析成功"); } else { log.error("JSON流程格式错误,应为数组"); return false; @@ -1415,454 +1662,1348 @@ const autoNavigateToTalk = async (npcName = "", iconType = "") => { .filter((line) => line.length > 0); processSteps = lines; } + return processSteps; + }, - // 使用统一的处理器执行流程 - return await executeUnifiedTalkProcess( - processSteps, - commissionName, - location - ); - } catch (error) { - log.error("执行对话委托时出错: {error}", error); - return false; - } - } - - /** - * 执行对话委托流程 - * @param {string} processPath - 流程文件路径 - */ - async function executeTalkCommissionWithBranches(processPath) { - try { - log.info("开始执行对话委托流程: {path}", processPath); - - // 读取流程文件 - const processContent = await file.readText(processPath); - - // 解析流程内容 - const branches = parseProcessBranches(processContent); - - // 确定要执行的分支 - const branchToExecute = await determineBranch(branches); - - if (branchToExecute) { - log.info("执行分支: {id}", branchToExecute.id); - await executeUnifiedTalkProcess(branchToExecute.steps); - } else { - log.warn("没有找到匹配的分支,执行默认流程"); - // 尝试解析整个内容作为单一流程 - const steps = JSON.parse(processContent); - await executeUnifiedTalkProcess(steps); - } - - } catch (error) { - log.error("执行对话委托流程出错: {error}", error); - } - } - - /** - * 解析流程文件中的分支 - * @param {string} content - 流程文件内容 - * @returns {Array} - 分支数组 - */ - function parseProcessBranches(content) { - const branches = []; - const branchRegex = /分支:(\d+)[\s\S]*?判断方法"([^"]+)"[\s\S]*?data:"([^"]+)"([\s\S]*?)(?=分支:|$)/g; - - let match; - while ((match = branchRegex.exec(content)) !== null) { - const branchId = parseInt(match[1]); - const judgmentMethod = match[2]; - const judgmentData = match[3]; - const stepsContent = match[4].trim(); - - // 解析步骤 - let steps = []; + // 执行对话委托流程(优化版) + executeTalkCommission: async (commissionName, location) => { try { - // 尝试解析JSON数组 - const jsonContent = `[${stepsContent}]`; - steps = JSON.parse(jsonContent); - } catch (error) { - log.warn("解析分支{id}的步骤出错: {error}", branchId, error); - continue; - } - - branches.push({ - id: branchId, - method: judgmentMethod, - data: judgmentData, - steps: steps - }); - } - - return branches; - } - - /** - * 确定要执行的分支 - * @param {Array} branches - 分支数组 - * @returns {Object|null} - 要执行的分支或null - */ - async function determineBranch(branches) { - for (const branch of branches) { - switch (branch.method) { - case "坐标": - if (await checkCoordinateMatch(branch.data)) { - return branch; - } - break; - - case "任务追踪": - if (await checkTaskMatch(branch.data)) { - return branch; - } - break; - - default: - log.warn("未知的判断方法: {method}", branch.method); - } - } - - return null; - } - - /** - * 检查当前坐标是否匹配 - * @param {string} coordData - 坐标数据 "x,y" - * @returns {Promise} - 是否匹配 - */ - async function checkCoordinateMatch(coordData) { - try { - const [targetX, targetY] = coordData.split(",").map(c => parseFloat(c.trim())); - - // 获取当前委托位置 - const playerPos = await getCurrentCommissionPosition();//委托位置会变,你每完成一个委托,未完成的委托就上一个 - if (!playerPos) return false; - - // 计算距离 - const distance = calculateDistance(playerPos, { x: targetX, y: targetY }); - log.info("当前位置: ({x}, {y}),目标位置: ({tx}, {ty}),距离: {d}", - playerPos.x, playerPos.y, targetX, targetY, distance); - - // 如果距离小于阈值,认为匹配 - return distance < 100; // 可以调整阈值 - } catch (error) { - log.error("检查坐标匹配出错: {error}", error); - return false; - } - } - - /** - * 检查当前任务是否匹配 - * @param {string} taskName - 任务名称 - * @returns {Promise} - 是否匹配 - */ - async function checkTaskMatch(taskName) { - try { - // 截取左上角任务区域 - const captureRegion = captureGameRegion(); - const taskArea = captureRegion.DeriveCrop(75, 240, 225, 60); // 任务区域 - - // 创建OCR识别对象 - const taskOcrRo = RecognitionObject.Ocr( - 0, - 0, - taskArea.width, - taskArea.height - ); - - // 识别任务文本 - const taskResults = taskArea.FindMulti(taskOcrRo); - - // 检查是否包含目标任务名称 - for (let i = 0; i < taskResults.count; i++) { - const text = taskResults[i].text; - log.info(`任务区域识别文本: ${text}`); - - if (text.includes(taskName)) { - log.info(`找到匹配任务: ${taskName}`); - return true; - } - } - - log.info(`未找到匹配任务: ${taskName}`); - return false; - } catch (error) { - log.error("检查任务匹配出错: {error}", error); - return false; - } - } - - /** - * 检查委托状态 - * @param completedCount — 已完成的委托数量 - * @returns — 返回 ture,false - */ - async function iscompleted(completedCount) { - // 记录已完成的委托数量 - log.info("已完成委托数量: {completedCount}", completedCount); - - const enterSuccess = await enterCommissionScreen(); - if (!enterSuccess) { - log.error("无法进入委托界面,脚本终止"); - return false; - } - await sleep(900); - if (completedCount===0) { - await PageScroll(1); - const status = await detectCommissionStatusByImage(3); - if (status === "completed") { - return true; - } else { - return false; - } - }else{ - const status = await detectCommissionStatusByImage(3-completedCount); - if (status === "completed") { - return true; - } else { - return false; - } - } - } - - /** - * 执行委托追踪(优化版 - 按距离排序) - */ - async function executeCommissionTracking() { - try { - log.info("开始执行委托追踪 - 按距离排序模式"); - dispatcher.addTimer( - new RealtimeTimer("AutoPick", { forceInteraction: false }) - ); - // 获取已识别的委托列表 - let commissions = []; - try { - const commissionsData = JSON.parse( - file.readTextSync(`${OUTPUT_DIR}/commissions_data.json`) + const processSteps = await Execute.loadAndParseProcessFile( + commissionName, + location, + "process.json" + ); + + // 使用统一的处理器执行流程 + return await Execute.executeUnifiedTalkProcess( + processSteps, + commissionName, + location ); - commissions = commissionsData.commissions.filter((c) => c.supported); - log.info("已加载支持的委托数据,共 {count} 个", commissions.length); } catch (error) { - log.error("读取委托数据失败: {error}", error); + log.error("执行对话委托时出错: {error}", error.message); return false; } + }, - if (commissions.length === 0) { - log.warn("没有找到支持的委托,请先运行识别脚本"); + // 自动导航到NPC对话位置(从main_branch.js移植) + autoNavigateToTalk: async (npcName = "", iconType = "") => { + try { + // 设置目标NPC名称 + const textArray = npcName; + + // 根据图标类型选择不同的识别对象 + let boxIconRo; + if (iconType === "Bigmap") { + boxIconRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync( + "Data/RecognitionObject/IconBigmapCommission.jpg" + ) + ); + log.info("使用大地图图标"); + } + else if (iconType === "Question") { + boxIconRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync( + "Data/RecognitionObject/IconQuestionCommission.png" + ) + ); + log.info("使用问号任务图标"); + } + else { + // 默认使用任务图标 + boxIconRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync( + "Data/RecognitionObject/IconTaskCommission.png" + ) + ); + log.info("使用任务图标"); + } + + let advanceNum = 0; //前进次数 + + middleButtonClick(); + await sleep(800); + + while (true) { + // 1. 优先检查是否已到达 + await sleep(500);// 等待0.5秒 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + log.debug("检测到文字: " + rewardResult.text); + // 检测到特点文字则结束!!! + if (rewardResult.text == textArray) { + log.info("已到达指定位置,检测到文字: " + rewardResult.text); + return; + } else if (advanceNum > 80) { + throw new Error("前进时间超时"); + } + // 2. 未到达领奖点,则调整视野 + for (let i = 0; i < 100; i++) { + captureRegion = captureGameRegion(); + let iconRes = captureRegion.Find(boxIconRo); + log.info("检测到委托图标位置 ({x}, {y})", iconRes.x, iconRes.y); + if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { + advanceNum++; + log.info(`视野已调正,前进第${advanceNum}次`); + break; + } else { + // 小幅度调整 + if (iconRes.y >= 520) moveMouseBy(0, 920); + let adjustAmount = iconRes.x < 920 ? -20 : 20; + let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离 + let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1 + let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10; + moveMouseBy(adjustAmount * adjustAmount2, 0); + await sleep(100); + } + if (i > 50) throw new Error("视野调整超时"); + } + // 3. 前进一小步 + keyDown("w"); + await sleep(200); + keyPress("VK_SPACE"); + await sleep(200); + keyPress("VK_SPACE"); + await sleep(200); + keyUp("w"); + await sleep(200); // 等待角色移动稳定 + } + } catch (error) { + log.error("自动导航到NPC对话位置时出错: {error}", error.message); + throw error; + } + }, + + // 统一的对话委托流程处理器(重构版 - 更简洁的主控制函数) + executeUnifiedTalkProcess: async ( + processSteps, + commissionName, + location + ) => { + try { + log.info("执行统一对话委托流程: {name}", commissionName); + + if (!processSteps || processSteps.length === 0) { + log.warn("没有找到有效的流程步骤"); + return false; + } + + // 初始化UI检测器和配置 + const isInMainUI = UIUtils.createMainUIChecker(); + let priorityOptions = []; + let npcWhiteList = []; + + // 刚开始就追踪委托目标 + await Execute.findCommissionTarget(commissionName); + + // 执行处理步骤 + for (let i = 0; i < processSteps.length; i++) { + const step = processSteps[i]; + log.info("执行流程步骤 {step}: {type}", i + 1, step.type || step); + + try { + // 重置为默认值并处理自定义配置 + const stepConfig = Execute.processStepConfiguration( + step, + priorityOptions, + npcWhiteList + ); + priorityOptions = stepConfig.priorityOptions; + npcWhiteList = stepConfig.npcWhiteList; + + // TAG:添加脚本功能点3 + const context = { + commissionName, + location, + processSteps, + currentIndex: i, + isInMainUI, + priorityOptions, + npcWhiteList, + }; + + // 处理步骤 + await Execute.processStep(step, context); + } catch (stepError) { + log.error( + "执行步骤 {step} 时出错: {error}", + i + 1, + stepError.message + ); + // 继续执行下一步,不中断整个流程 + } + + // 每个步骤之间等待一段时间 + await sleep(2000); + } + + log.info("统一对话委托流程执行完成: {name}", commissionName); + return true; + } catch (error) { + log.error("执行统一对话委托流程时出错: {error}", error.message); return false; } + }, - // 确保回到主界面 - await genshin.returnMainUi(); + // 处理步骤配置(优先选项和NPC白名单) + processStepConfiguration: ( + step, + defaultPriorityOptions, + defaultNpcWhiteList + ) => { + let priorityOptions = [...defaultPriorityOptions]; + let npcWhiteList = [...defaultNpcWhiteList]; - // 统计已完成委托 - let completedCount = 0; - for (const commission of commissions) { - if (commission.location === "已完成") { - completedCount++; - continue; + // 如果步骤中包含自定义的优先选项和NPC白名单,则使用它们 + if (step.data && typeof step.data === "object") { + if (Array.isArray(step.data.priorityOptions)) { + priorityOptions = step.data.priorityOptions; + log.info("使用自定义优先选项: {options}", priorityOptions.join(", ")); + } + if (Array.isArray(step.data.npcWhiteList)) { + npcWhiteList = step.data.npcWhiteList; + log.info("使用自定义NPC白名单: {npcs}", npcWhiteList.join(", ")); } } - // 执行每个委托 - for (const commission of commissions) { - // 跳过已完成的委托 - if (commission.location === "已完成") { - log.info("委托 {name} 已完成,跳过", commission.name); - continue; + return { priorityOptions, npcWhiteList }; + }, + + // 处理单个步骤 + processStep: async (step, context) => { + if (typeof step === "string") { + // 简单格式处理 + await Execute.processStringStep(step, context); + } else if (typeof step === "object") { + // JSON格式处理 + await Execute.processObjectStep(step, context); + } + }, + + // 处理字符串格式的步骤 + processStringStep: async (step, context) => { + if (step.endsWith(".json")) { + // 地图追踪文件 + await StepProcessor.processMapTracking( + step, + context.commissionName, + context.location + ); + } else if (step === "F") { + // 按F键并执行优化的自动剧情 + log.info("执行自动剧情"); + await DialogProcessor.executeOptimizedAutoTalk( + null, + 5, + context.priorityOptions, + context.npcWhiteList, + context.isInMainUI + ); + } + }, + + // 处理对象格式的步骤 + processObjectStep: async (step, context) => { + if (step.note) { + log.info("步骤说明: {note}", step.note); + } + + // 使用步骤处理器工厂来处理步骤 + await StepProcessorFactory.process(step, context); + }, + + // 示例:注册自定义步骤处理器 + registerCustomStepProcessors: () => { + // 注册等待步骤处理器 + StepProcessorFactory.register("等待", async (step, context) => { + const waitTime = step.data || 1000; + log.info("等待 {time} 毫秒", waitTime); + await sleep(waitTime); + }); + + // 注册截图步骤处理器 + StepProcessorFactory.register("截图", async (step, context) => { + const filename = step.data || `screenshot_${Date.now()}.png`; + log.info("截图保存为: {filename}", filename); + // 这里可以添加实际的截图逻辑 + }); + + // 注册条件检查步骤处理器 + StepProcessorFactory.register("条件检查", async (step, context) => { + const condition = step.data.condition; + const trueSteps = step.data.trueSteps || []; + const falseSteps = step.data.falseSteps || []; + + log.info("执行条件检查: {condition}", condition); + + // 这里可以添加条件判断逻辑 + const conditionResult = true; // 示例结果 + + const stepsToExecute = conditionResult ? trueSteps : falseSteps; + for (const subStep of stepsToExecute) { + await Execute.processStep(subStep, context); + } + }); + + log.info("自定义步骤处理器注册完成"); + }, + + // 处理对话步骤 + processDialogStep: async ( + step, + priorityOptions, + npcWhiteList, + isInMainUI + ) => { + log.info("执行对话"); + let skipCount = 2; // 默认跳过2次 + + // 处理对话选项 + if (typeof step.data === "number") { + // 兼容旧版本,如果data是数字,则视为skipCount + skipCount = step.data; + } else if (typeof step.data === "object" && step.data.skipCount) { + // 新版本,data是对象,包含skipCount + skipCount = step.data.skipCount; + } + + // 执行对话,使用当前步骤的优先选项和NPC白名单 + await DialogProcessor.executeOptimizedAutoTalk( + null, + skipCount, + priorityOptions, + npcWhiteList, + isInMainUI + ); + }, + }; + + const CommissionsFunc = { + // 跳过的委托列表 + skipCommissionsList: [], + + // 初始化跳过委托列表 + initSkipCommissionsList: () => { + CommissionsFunc.skipCommissionsList = + Utils.parseSkipCommissions(skipCommissions); + if (CommissionsFunc.skipCommissionsList.length > 0) { + log.info( + "配置的跳过委托列表: {list}", + CommissionsFunc.skipCommissionsList.join(", ") + ); + } + }, + + // 检测委托完成状态(使用图像识别) + detectCommissionStatusByImage: async (buttonIndex) => { + try { + const button = Datas.COMMISSION_DETAIL_BUTTONS[buttonIndex]; + if (!button) { + log.error("无效的按钮索引: {index}", buttonIndex); + return "unknown"; } - // 跳过没有地点信息的委托 - if ( - !commission.location || - commission.location === "未知地点" || - commission.location === "识别失败" - ) { - log.warn("委托 {name} 缺少地点信息,跳过", commission.name); - continue; + log.debug("检测委托{id}的完成状态(图像识别)", button.id); + // 截图 + let captureRegion = captureGameRegion(); + + // 检测区域:按钮位置左右各扩展更大范围 + const checkRegion = captureRegion.deriveCrop( + button.checkX, + button.y - 30, // 稍微向上扩展检测区域 + button.checkWidth, + 60 // 增加高度以确保捕获状态图标 + ); + + // 加载完成和未完成的模板图像 + let completedTemplate, uncompletedTemplate; + + try { + completedTemplate = file.ReadImageMatSync(Datas.COMPLETED_IMAGE_PATH); + uncompletedTemplate = file.ReadImageMatSync( + Datas.UNCOMPLETED_IMAGE_PATH + ); + } catch (imageError) { + log.error("加载模板图像失败: {error}", imageError); + return "unknown"; } + // 创建识别对象,使用更灵活的参数 + const completedRo = RecognitionObject.TemplateMatch( + completedTemplate, + 0, + 0, + button.checkWidth, + 60 + ); + const uncompletedRo = RecognitionObject.TemplateMatch( + uncompletedTemplate, + 0, + 0, + button.checkWidth, + 60 + ); + + // 降低匹配阈值,提高识别灵活性 + completedRo.threshold = 0.65; + uncompletedRo.threshold = 0.65; + + // 检测完成状态 + const completedResult = checkRegion.find(completedRo); + if (!completedResult.isEmpty()) { + return "completed"; + } + + // 检测未完成状态 + const uncompletedResult = checkRegion.find(uncompletedRo); + if (!uncompletedResult.isEmpty()) { + return "uncompleted"; + } + + log.warn("委托{id}状态识别失败", button.id); + return "unknown"; + } catch (error) { + log.error("检测委托完成状态时出错: {error}", error.message); + return "unknown"; + } + }, + + // 识别委托地点 + recognizeCommissionLocation: async () => { + try { + log.info( + "识别委托地点 ({x}, {y}) ({width}, {height})...", + Datas.OCR_REGIONS.LOCATION.X, + Datas.OCR_REGIONS.LOCATION.Y, + Datas.OCR_REGIONS.LOCATION.X + Datas.OCR_REGIONS.LOCATION.WIDTH, + Datas.OCR_REGIONS.LOCATION.Y + Datas.OCR_REGIONS.LOCATION.HEIGHT + ); + + // 使用Utils.easyOCROne进行识别 + const location = await Utils.easyOCROne(Datas.OCR_REGIONS.LOCATION); + + if (location && location.trim()) { + return location.trim(); + } + + return "未知地点"; + } catch (error) { + log.error("识别委托地点时出错: {error}", error.message); + return "识别失败"; + } + }, + + // 检测是否进入委托详情界面 + checkDetailPageEntered: async () => { + try { + // 尝试3次OCR识别 + for (let i = 0; i < 3; i++) { + // 使用Utils.easyOCR进行识别 + const results = await Utils.easyOCR(Datas.OCR_REGIONS.DETAIL_COUNTRY); + + if (results.count > 0) { + // 检查OCR结果 + for (let j = 0; j < results.count; j++) { + const text = results[j].text.trim(); + + // 如果有"蒙德",表示进入了详情界面 + if (text.includes("蒙德")) { + log.info("检测到蒙德委托,成功进入详情界面"); + return "蒙德"; + } + // 如果没有文字,可能是已完成委托 + else if (text === "") { + log.info("未检测到地区文本,可能是已完成委托"); + return "已完成"; + } + // 其他地区委托 + else if (text.length >= 2) { + log.info(`检测到其他地区委托: ${text}`); + return text; + } + } + } + + // 如果没有检测到,等待一会再试 + await sleep(500); + } + + log.info("三次OCR检测后仍未确认委托国家"); + return "未知"; + } catch (error) { + log.error("检测委托详情界面时出错: {error}", error.message); + return "错误"; + } + }, + + // 识别委托列表 - 使用Main_Dev进行4个单独识别 + recognizeCommissions: async (supportedCommissions) => { + try { + log.info("开始执行委托识别"); + + // 初始化当前委托位置变量 + let currentCommissionPosition = null; + + // 步骤1: 使用Main_Dev识别前3个委托(索引0-2) + log.info("步骤1: 使用Main_Dev识别前3个委托"); + + let allCommissions = []; + + // 先识别前3个Main_Dev区域(索引0-2) + for (let regionIndex = 0; regionIndex < 3; regionIndex++) { + const region = Datas.OCR_REGIONS.Main_Dev[regionIndex]; + + log.info( + "识别第{index}个委托区域 ({x}, {y}) ({width}, {height})", + regionIndex + 1, + region.X, + region.Y, + region.X + region.WIDTH, + region.Y + region.HEIGHT + ); + + try { + let results = await Utils.easyOCR(region); + log.info( + "第{index}个区域OCR识别结果数量: {count}", + regionIndex + 1, + results.count + ); + + // 处理识别结果,取第一个有效结果 + for (let i = 0; i < results.count; i++) { + try { + let result = results[i]; + let text = Utils.cleanText(result.text); + if (text && text.length >= Datas.MIN_TEXT_LENGTH) { + log.info('第{index}个委托: "{text}"', regionIndex + 1, text); + + // 检查委托类型 + const isFightCommission = + supportedCommissions.fight.includes(text); + const isTalkCommission = + supportedCommissions.talk.includes(text); + const isSupported = isFightCommission || isTalkCommission; + const commissionType = isFightCommission + ? Datas.COMMISSION_TYPE.FIGHT + : isTalkCommission + ? Datas.COMMISSION_TYPE.TALK + : ""; + + allCommissions.push({ + id: regionIndex + 1, + name: text, + supported: isSupported, + type: commissionType, + location: "", + }); + + // 找到有效结果后跳出循环 + break; + } + } catch (ocrError) { + log.error( + "处理第{regionIndex}个区域第{resultIndex}个OCR识别结果时出错: {error},跳过该结果", + regionIndex + 1, + i + 1, + ocrError + ); + // 跳过该结果,继续处理下一个 + continue; + } + } + } catch (regionError) { + log.error( + "识别第{index}个委托区域时出错: {error},跳过该区域", + regionIndex + 1, + regionError + ); + continue; + } + } + + // 步骤2: 使用图像识别检测所有委托的完成状态 + log.info("步骤2: 检测所有委托的完成状态"); + + // 处理前3个委托 + for (let i = 0; i < Math.min(3, allCommissions.length); i++) { + const commission = allCommissions[i]; + + try { + // 使用图像识别检测完成状态 + const status = await CommissionsFunc.detectCommissionStatusByImage( + i + ); + + if (status === "completed") { + log.info( + "委托{id} {name} 已完成,跳过详情查看", + commission.id, + commission.name + ); + commission.location = "已完成"; + continue; + } else if (status === "uncompleted") { + log.info( + "委托{id} {name} 未完成,查看详情", + commission.id, + commission.name + ); + } else { + log.warn( + "委托{id} {name} 状态未知,尝试查看详情", + commission.id, + commission.name + ); + } + + // 只有未完成或状态未知的委托才点击查看详情 + log.info( + "查看第{id}个委托详情: {name}", + commission.id, + commission.name + ); + + // 点击详情按钮 + const detailButton = + Datas.COMMISSION_DETAIL_BUTTONS[commission.id - 1]; + log.info( + "点击委托详情按钮 ({x}, {y})", + detailButton.x, + detailButton.y + ); + click(detailButton.x, detailButton.y); + await sleep(700); + + // 检测委托国家 + const detailStatus = await CommissionsFunc.checkDetailPageEntered(); + log.info(`委托国家: ${detailStatus}`); + commission.country = detailStatus; + const location = + await CommissionsFunc.recognizeCommissionLocation(); + commission.location = location; + log.info( + "委托 {name} 的地点: {location}", + commission.name, + location + ); + + // 退出详情页面并获取地图坐标 + if (commission.location !== "已完成") { + log.info("退出详情页面 - 按ESC"); + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + await genshin.setBigMapZoomLevel(2); + // 获取地图坐标并保存 + const bigMapPosition = genshin.getPositionFromBigMap(); + if (bigMapPosition) { + commission.CommissionPosition = bigMapPosition; + log.info( + "当前委托位置: ({x}, {y})", + bigMapPosition.x, + bigMapPosition.y + ); + } + + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + } + } catch (commissionError) { + log.error( + "处理委托{id} {name} 时出错: {error},跳过该委托", + commission.id, + commission.name, + commissionError + ); + // 设置错误状态,但不中断整个流程 + commission.location = "处理失败"; + commission.country = "未知"; + + // 尝试退出可能打开的详情页面 + try { + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + } catch (escapeError) { + log.warn("尝试退出详情页面时出错: {error}", escapeError); + } + } + } + + // 步骤3: 翻页后识别第4个委托 + log.info("步骤3: 翻页后识别第4个委托"); + await UI.pageScroll(1); + + // 识别第4个Main_Dev区域(索引3) + const region = Datas.OCR_REGIONS.Main_Dev[3]; + let fourthCommission = null; + log.info( - "开始执行委托: {name} ({location}) [{type}]", - commission.name, - commission.location, - commission.type || "未知类型" + "识别第4个委托区域 ({x}, {y}) ({width}, {height})", + region.X, + region.Y, + region.X + region.WIDTH, + region.Y + region.HEIGHT ); try { - log.info( - "当前委托位置: ({x}, {y})", - commission.CommissionPosition.X, - commission.CommissionPosition.Y - ); - } catch (error) { - log.warn("委托 {name} 缺少坐标信息,尝试全部执行", commission.name); - } + let results = await Utils.easyOCR(region); + log.info("第4个区域OCR识别结果数量: {count}", results.count); - let success = false; - - // 根据委托类型执行不同的处理逻辑 - if (commission.type === COMMISSION_TYPE.TALK) { - // 执行对话委托 - success = await executeTalkCommission( - commission.name, - commission.location - ); - let completed = await iscompleted(completedCount); - if (success && completed) { - completedCount++; - log.info("对话委托 {name} 执行完成", commission.name); - } else { - log.warn("对话委托 {name} 执行失败", commission.name); - } - } else { - //dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false })); - - // 默认执行战斗委托 - const location = commission.location.trim(); - - // 脚本路径 - const scriptPaths = [ - `assets/${commission.name}/${location}-1.json`, - `assets/${commission.name}/${location}-2.json`, - `assets/${commission.name}/${location}-3.json`, - ]; - - // 获取每个脚本对应的目标位置和距离 - const scriptInfo = []; - for (const scriptPath of scriptPaths) { + // 处理识别结果,取第一个有效结果 + for (let i = 0; i < results.count; i++) { try { - await file.readText(scriptPath); - const targetPos = await getCommissionTargetPosition(scriptPath); - if (targetPos) { - const distance = calculateDistance( - commission.CommissionPosition, - targetPos - ); - scriptInfo.push({ - path: scriptPath, - distance: distance, - valid: true, - }); - log.info( - "委托 {name} 目标位置: ({x}, {y}),距离: {distance}", - scriptPath, - targetPos.x, - targetPos.y, - distance - ); - } else { - log.warn("委托 {name} 无法获取距离", scriptPath); - scriptInfo.push({ - path: scriptPath, - distance: Infinity, - valid: false, - }); + let result = results[i]; + let text = Utils.cleanText(result.text); + if (text && text.length >= Datas.MIN_TEXT_LENGTH) { + log.info('第4个委托: "{text}"', text); + + // 检查委托类型 + const isFightCommission = + supportedCommissions.fight.includes(text); + const isTalkCommission = + supportedCommissions.talk.includes(text); + const isSupported = isFightCommission || isTalkCommission; + const commissionType = isFightCommission + ? Datas.COMMISSION_TYPE.FIGHT + : isTalkCommission + ? Datas.COMMISSION_TYPE.TALK + : ""; + + fourthCommission = { + id: 4, + name: text, + supported: isSupported, + type: commissionType, + location: "", + }; + + // 找到有效结果后跳出循环 + break; } - } catch (readError) { - log.info("路径追踪脚本不存在: {path}", scriptPath); + } catch (ocrError) { + log.error( + "处理第4个区域第{resultIndex}个OCR识别结果时出错: {error},跳过该结果", + i + 1, + ocrError + ); + // 跳过该结果,继续处理下一个 continue; } } + } catch (regionError) { + log.error("识别第4个委托区域时出错: {error}", regionError); + } - // 按距离从小到大排序 - scriptInfo.sort((a, b) => a.distance - b.distance); + // 如果识别到第4个委托,添加到列表中 + if (fourthCommission) { + allCommissions.push(fourthCommission); + } - // 输出排序结果 - log.info("排序后的脚本执行顺序:"); - scriptInfo.forEach((info, index) => { - log.info( - "{index}. 脚本: {path}, 距离: {distance}", - index + 1, - info.path, - info.distance - ); - }); + // 步骤4: 处理第4个委托的完成状态 + if (fourthCommission) { + try { + // 使用图像识别检测第4个委托的完成状态 + const status = await CommissionsFunc.detectCommissionStatusByImage( + 3 + ); // 第4个委托索引为3 - // 尝试执行排序后的脚本路径 - let executed = false; - for (const info of scriptInfo) { - const scriptPath = info.path; - try { - /* 检查脚本文件是否存在 - log.info("检查路径追踪脚本: {path}", scriptPath); - - try { - // 尝试读取文件内容来检查是否存在 - await file.readText(scriptPath); - log.info("找到路径追踪脚本: {path}", scriptPath); - scriptFound = true; - } catch (readError) { - log.info("路径追踪脚本不存在: {path}", scriptPath); - continue; // 尝试下一个脚本路径 - }*/ - - // 执行路径追踪脚本 - log.info("开始执行路径追踪脚本: {path}", scriptPath); - await pathingScript.runFile(scriptPath); - log.info("路径追踪脚本执行完成"); - if (await iscompleted(completedCount)) { - log.info("委托 {name} 已完成", commission.name); - completedCount++; - success = true; - break; - } else { - log.info("委托 {name} 未完成,尝试下一个脚本", commission.name); - } - } catch (scriptError) { - log.error("执行路径追踪脚本时出错: {error}", scriptError); - break; + if (status === "completed") { + log.info( + "委托{id} {name} 已完成,跳过详情查看", + fourthCommission.id, + fourthCommission.name + ); + fourthCommission.location = "已完成"; + } else if (status === "uncompleted") { + log.info( + "委托{id} {name} 未完成,查看详情", + fourthCommission.id, + fourthCommission.name + ); + } else { + log.warn( + "委托{id} {name} 状态未知,尝试查看详情", + fourthCommission.id, + fourthCommission.name + ); } - } - if (!success) { - log.warn("委托 {name} 执行失败", commission.name); + // 只有未完成或状态未知的委托才点击查看详情 + if (status !== "completed") { + log.info("查看第4个委托详情: {name}", fourthCommission.name); + + // 点击详情按钮 + const detailButton = Datas.COMMISSION_DETAIL_BUTTONS[3]; // 第4个按钮索引为3 + log.info( + "点击委托详情按钮 ({x}, {y})", + detailButton.x, + detailButton.y + ); + click(detailButton.x, detailButton.y); + await sleep(700); + + // 检测是否成功进入详情界面并获取委托国家 + const detailStatus = + await CommissionsFunc.checkDetailPageEntered(); + log.info(`委托国家: ${detailStatus}`); + fourthCommission.country = detailStatus; + + // 识别委托地点 + const location = + await CommissionsFunc.recognizeCommissionLocation(); + fourthCommission.location = location; + log.info( + "委托 {name} 的地点: {location}", + fourthCommission.name, + location + ); + + // 退出详情页面并获取地图坐标 + if (fourthCommission.location !== "已完成") { + log.info("退出详情页面 - 按ESC"); + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + await genshin.setBigMapZoomLevel(2); + // 获取地图坐标并保存 + const bigMapPosition = genshin.getPositionFromBigMap(); + if (bigMapPosition) { + fourthCommission.CommissionPosition = bigMapPosition; + log.info( + "当前委托位置: ({x}, {y})", + bigMapPosition.x, + bigMapPosition.y + ); + } + + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + } + } + } catch (fourthCommissionError) { + log.error( + "处理第4个委托{name} 时出错: {error},跳过该委托", + fourthCommission.name, + fourthCommissionError + ); + // 设置错误状态,但不中断整个流程 + fourthCommission.location = "处理失败"; + fourthCommission.country = "未知"; + + // 尝试退出可能打开的详情页面 + try { + keyDown("VK_ESCAPE"); + await sleep(300); + keyUp("VK_ESCAPE"); + await sleep(1200); + } catch (escapeError) { + log.warn("尝试退出详情页面时出错: {error}", escapeError); + } } } - // 每个委托之间等待一段时间 - log.info("等待5秒后执行下一个委托..."); - await sleep(5000); + // 输出完整委托列表 + log.info("完整委托列表:"); + for (const commission of allCommissions) { + const supportStatus = commission.supported ? "✅ 支持" : "❌ 不支持"; + const typeInfo = commission.type ? `[${commission.type}]` : ""; + const locationInfo = commission.location + ? `(${commission.location})` + : ""; + const countryInfo = commission.country + ? `{${commission.country}}` + : ""; + log.info( + "{id}. {name} {location} {country} {type} - {status}", + commission.id, + commission.name, + locationInfo, + countryInfo, + typeInfo, + supportStatus + ); + } + + return allCommissions; + } catch (error) { + log.error("识别委托时出错: {error}", error.message); + return []; + } + }, + + // 读取支持的委托列表 + loadSupportedCommissions: async () => { + let supportedCommissions = { + fight: [], + talk: [], + }; + + try { + // 使用正确的文件读取方法 + log.info("开始读取支持的委托列表: {path}", Datas.SUPPORT_LIST_PATH); + + // 尝试读取文件内容 + try { + const supportListContent = file.readTextSync(Datas.SUPPORT_LIST_PATH); + + if (supportListContent && supportListContent.trim()) { + try { + // 解析JSON格式 + const commissionData = JSON.parse(supportListContent); + supportedCommissions.fight = commissionData.fight || []; + supportedCommissions.talk = commissionData.talk || []; + + log.info( + "已加载支持的战斗委托列表,共 {count} 个", + supportedCommissions.fight.length + ); + log.info( + "已加载支持的对话委托列表,共 {count} 个", + supportedCommissions.talk.length + ); + } catch (jsonError) { + log.error("解析委托列表JSON失败: {error}", jsonError); + } + } else { + log.warn("支持的委托列表为空"); + } + } catch (readError) { + // 如果读取失败,检查文件是否存在 + log.error("读取委托列表失败: {error}", readError); + + // 尝试创建文件 + try { + // 创建默认的JSON结构 + const defaultJson = JSON.stringify( + { + fight: [], + talk: [], + }, + null, + 2 + ); + + const writeResult = file.writeTextSync( + Datas.SUPPORT_LIST_PATH, + defaultJson + ); + if (writeResult) { + log.info("已创建空的委托列表文件"); + } else { + log.error("创建委托列表文件失败"); + } + } catch (writeError) { + log.error("创建委托列表文件失败: {error}", writeError); + } + } + } catch (error) { + log.error("处理委托列表时出错: {error}", error.message); } - log.info( - "委托追踪全部执行完成,共执行 {count}/{total} 个委托", - completedCount, - commissions.length + return supportedCommissions; + }, + + ensureDirectoryExists: async (dirPath) => { + try { + // 尝试创建目录,如果目录已存在,writeTextSync不会报错 + // 创建一个临时文件来确保目录存在 + const tempFilePath = `${dirPath}/.temp`; + file.writeTextSync(tempFilePath, ""); + // log.info(`已确保目录存在: ${dirPath}`); + return true; + } catch (error) { + log.error(`创建目录时出错: ${error}`); + return false; + } + }, + + // 保存委托数据到文件 + saveCommissionsData: async (commissionsTable) => { + try { + log.info("保存委托数据到文件..."); + + // 创建JSON格式的委托数据 + const commissionsData = { + timestamp: new Date().toISOString(), + commissions: commissionsTable, + }; + + // 保存到文件 + const outputPath = `${Datas.OUTPUT_DIR}/commissions_data.json`; + try { + const jsonResult = file.writeTextSync( + outputPath, + JSON.stringify(commissionsData, null, 2) + ); + if (jsonResult) { + log.info("委托数据已保存到: {path}", outputPath); + } else { + log.error("保存委托数据失败"); + } + } catch (jsonError) { + log.error("保存委托数据失败: {error}", jsonError); + } + + // 创建可读的文本报告 + let reportContent = "# 原神每日委托识别报告\r\n"; + reportContent += `生成时间: ${new Date().toLocaleString()}\r\n\r\n`; + reportContent += "## 委托列表\r\n\r\n"; + + for (const commission of commissionsTable) { + const supportStatus = commission.supported ? "✅ 支持" : "❌ 不支持"; + const typeInfo = commission.type ? `[${commission.type}]` : ""; + reportContent += `${commission.id}. ${commission.name} ${typeInfo} - ${supportStatus}\r\n`; + } + + // 保存报告 + const reportPath = `${Datas.OUTPUT_DIR}/commissions_report.txt`; + try { + const reportResult = file.writeTextSync(reportPath, reportContent); + if (reportResult) { + log.info("委托报告已保存到: {path}", reportPath); + } else { + log.error("保存委托报告失败"); + } + } catch (reportError) { + log.error("保存委托报告失败: {error}", reportError); + } + + return commissionsTable.filter((c) => c.supported); + } catch (error) { + log.error("处理委托数据时出错: {error}", error.message); + return []; + } + }, + + // 计算两点之间的距离 + calculateDistance: (point1, point2) => { + if ( + !point1 || + !point2 || + !point1.X || + !point1.Y || + !point2.x || + !point2.y + ) { + log.warn("无效的位置数据"); + return Infinity; + } + return Math.sqrt( + Math.pow(point1.X - point2.x, 2) + Math.pow(point1.Y - point2.y, 2) ); + }, - return completedCount > 0; - } catch (error) { - log.error("执行委托追踪时出错: {error}", error.message); - return false; - } - } + // 获取委托的目标坐标(从路径追踪文件中获取最后一个坐标) + getCommissionTargetPosition: async (scriptPath) => { + try { + const scriptContent = await file.readText(scriptPath); + const pathData = JSON.parse(scriptContent); - // 主函数 - async function main() { + if (!pathData.positions || pathData.positions.length === 0) { + log.warn("路径追踪文件 {path} 中没有有效的坐标数据", scriptPath); + return null; + } + const lastPosition = pathData.positions[pathData.positions.length - 1]; + if (!lastPosition.x || !lastPosition.y) { + log.warn( + "路径追踪文件 {path} 的最后一个路径点缺少坐标数据", + scriptPath + ); + return null; + } + + log.debug( + "从脚本路径 {path} 获取到目标坐标: ({x}, {y})", + scriptPath, + lastPosition.x, + lastPosition.y + ); + return { + x: lastPosition.x, + y: lastPosition.y, + }; + } catch (error) { + log.error("获取委托目标坐标时出错: {error}", error.message); + return null; + } + }, + + // 检查委托状态(通过委托名称查找位置后检测) + iscompleted: async (completedCount) => { + try { + // 记录已完成的委托数量 + log.info("已完成委托数量: {completedCount}", completedCount); + + const enterSuccess = await UI.enterCommissionScreen(); + if (!enterSuccess) { + log.error("无法进入委托界面"); + return false; + } + await sleep(900); + if (completedCount===0) { + await UI.pageScroll(1); + const status = await CommissionsFunc.detectCommissionStatusByImage(3); + if (status === "completed") { + return true; + } else { + return false; + } + }else{ + const status = await CommissionsFunc.detectCommissionStatusByImage(3-completedCount); + if (status === "completed") { + return true; + } else { + return false; + } + } + } catch (error) { + log.error("检查委托完成状态失败: {error}", error.message); + try { + await genshin.returnMainUi(); + } catch (exitError) { + log.warn("退出委托界面失败: {error}", exitError); + } + return false; + } + }, + + // 执行带分支的对话委托流程(从main_branch.js移植) + executeTalkCommissionWithBranches: async (processPath) => { + try { + log.info("开始执行对话委托流程: {path}", processPath); + + // 读取流程文件 + const processContent = await file.readText(processPath); + + // 解析流程内容 + const branches = CommissionsFunc.parseProcessBranches(processContent); + + // 确定要执行的分支 + const branchToExecute = await CommissionsFunc.determineBranch(branches); + + if (branchToExecute) { + log.info("执行分支: {id}", branchToExecute.id); + await Execute.executeUnifiedTalkProcess(branchToExecute.steps); + } else { + log.warn("没有找到匹配的分支,执行默认流程"); + // 尝试解析整个内容作为单一流程 + const steps = JSON.parse(processContent); + await Execute.executeUnifiedTalkProcess(steps); + } + } catch (error) { + log.error("执行对话委托流程出错: {error}", error.message); + } + }, + + // 解析流程文件中的分支(从main_branch.js移植) + parseProcessBranches: (content) => { + const branches = []; + const branchRegex = + /分支:(\d+)[\s\S]*?判断方法"([^"]+)"[\s\S]*?data:"([^"]+)"([\s\S]*?)(?=分支:|$)/g; + + let match; + while ((match = branchRegex.exec(content)) !== null) { + const branchId = parseInt(match[1]); + const judgmentMethod = match[2]; + const judgmentData = match[3]; + const stepsContent = match[4].trim(); + + // 解析步骤 + let steps = []; + try { + // 尝试解析JSON数组 + const jsonContent = `[${stepsContent}]`; + steps = JSON.parse(jsonContent); + } catch (error) { + log.warn("解析分支{id}的步骤出错: {error}", branchId, error); + continue; + } + + branches.push({ + id: branchId, + method: judgmentMethod, + data: judgmentData, + steps: steps, + }); + } + + return branches; + }, + + // 确定要执行的分支(从main_branch.js移植) + determineBranch: async (branches) => { + for (const branch of branches) { + switch (branch.method) { + case "坐标": + if (await CommissionsFunc.checkCoordinateMatch(branch.data)) { + return branch; + } + break; + + case "任务追踪": + if (await CommissionsFunc.checkTaskMatch(branch.data)) { + return branch; + } + break; + + default: + log.warn("未知的判断方法: {method}", branch.method); + } + } + + return null; + }, + + // 检查当前坐标是否匹配(从main_branch.js移植) + checkCoordinateMatch: async (coordData) => { + try { + const [targetX, targetY] = coordData + .split(",") + .map((c) => parseFloat(c.trim())); + + // 获取当前委托位置 + const playerPos = await CommissionsFunc.getCurrentCommissionPosition(); + if (!playerPos) return false; + + // 计算距离 + const distance = CommissionsFunc.calculateDistance(playerPos, { + x: targetX, + y: targetY, + }); + log.info( + "当前位置: ({x}, {y}),目标位置: ({tx}, {ty}),距离: {d}", + playerPos.x, + playerPos.y, + targetX, + targetY, + distance + ); + + // 如果距离小于阈值,认为匹配 + return distance < 100; // 可以调整阈值 + } catch (error) { + log.error("检查坐标匹配出错: {error}", error.message); + return false; + } + }, + + // 检查当前任务是否匹配(从main_branch.js移植) + checkTaskMatch: async (taskName) => { + try { + // 识别左上角任务区域文本 + const taskRegion = { X: 75, Y: 240, WIDTH: 225, HEIGHT: 60 }; + const taskResults = await Utils.easyOCR(taskRegion); + + // 检查是否包含目标任务名称 + for (let i = 0; i < taskResults.count; i++) { + const text = taskResults[i].text; + log.info(`任务区域识别文本: ${text}`); + + if (text.includes(taskName)) { + log.info(`找到匹配任务: ${taskName}`); + return true; + } + } + + log.info(`未找到匹配任务: ${taskName}`); + return false; + } catch (error) { + log.error("检查任务匹配出错: {error}", error.message); + return false; + } + }, + + // 获取当前委托位置(辅助函数) + getCurrentCommissionPosition: async () => { + try { + // 这里可以通过多种方式获取当前位置 + // 1. 从大地图获取 + await genshin.setBigMapZoomLevel(2); + const bigMapPosition = genshin.getPositionFromBigMap(); + if (bigMapPosition) { + return bigMapPosition; + } + + // 2. 从当前委托位置变量获取(如果有的话) + if (currentCommissionPosition) { + return currentCommissionPosition; + } + + log.warn("无法获取当前委托位置"); + return null; + } catch (error) { + log.error("获取当前委托位置时出错: {error}", error.message); + return null; + } + }, + }; + + const Test = async () => { + Utils.iframe(Datas.OCR_REGIONS.Main_Dev[0]); + // 角色切换步骤使用示例: + // 在process.json文件中添加如下步骤: + // { + // "type": "切换角色", + // "data": { + // "position": 1, + // "character": "枫原万叶" + // }, + // "note": "切换第1号位为枫原万叶" + // } + + // // 切换角色示例(可选) + // // 如果需要切换角色,可以取消注释下面的代码 + // const switchRoleStep = { + // type: "切换角色", + // data: { position: 1, character: "枫原万叶" }, + // note: "切换第1号位为枫原万叶", + // }; + // await StepProcessor.processSwitchRole(switchRoleStep); + }; + + // TAG:Main + const Main = async () => { + try { + //await Identification(); - //setGameMetrics(1920, 1080, 1); - //await genshin.returnMainUi(); - //await autoNavigateToTalk("盖伊","task"); + //await Execute.autoNavigateToTalk("汤米","task"); - if (skipRecognition) { - log.info("跳过识别,直接加载数据"); - } else { - await Identification(); - } //识别委托 + if (skipRecognition) { + log.info("跳过识别,直接加载数据"); + } else { + log.info("开始执行委托识别"); + await Core.Identification(); + } - // 开局准备 - await prepareForLeyLineRun(); + // 开局准备 + await Core.PrepareForLeyLineRun(); - // 执行自动委托 - await executeCommissionTracking(); - - log.info("每日委托执行完成,前往安全地点"); - await genshin.tpToStatueOfTheSeven(); - } - // 使用 Promise 包装 main 函数的执行 - return main(); - //log.info(""); + // 执行自动委托 + await Core.executeCommissionTracking(); + if (!prepare) { + log.info("每日委托执行完成,前往安全地点"); + await genshin.tpToStatueOfTheSeven(); + } + else { + log.info("每日委托执行完成"); + } + } catch (error) { + log.error("执行出错: {error}", error.message); + errorlog(); + } + }; + await Main(); + // await Test(); })(); diff --git a/repo/js/AutoCommission/manifest.json b/repo/js/AutoCommission/manifest.json index b8da540d..eb1e525d 100644 --- a/repo/js/AutoCommission/manifest.json +++ b/repo/js/AutoCommission/manifest.json @@ -1,19 +1,13 @@ { "manifest_version": 1, "name": "(对话+成就)全自动蒙德地区每日委托", - "version": "0.97.2", - "tags": [ - "委托", - "对话", - "战斗", - "成就", - "历练点" - ], + "version": "0.98.1", + "tags": ["委托","对话","战斗","成就","历练点"], "description": "自动完成每日委托、自动识别委托内容、自动追踪战斗委托、自动完成对话委托、自动获得到隐藏成就。使用前请阅读README.md(可用记事本打开)获取详细说明和常见问题解答。目前项目正处于开发阶段急需人手,有意者可加群1053392753(会启动js,发送文件即可)。每天只需花 5 ~ 10 分钟做一个蒙德城对话委托记下坐标,就当是顺路补下成就。感谢云闲vsv & 换苏伟u & 小鹰划船不用桨 & 塔台的共同开发", "authors": [ { "name": "星野", - "links": "https://github.com/LX666-666" + "link": "https://github.com/LX666-666" } ], "settings_ui": "settings.json", diff --git a/repo/js/AutoCommission/name.json b/repo/js/AutoCommission/name.json index 7c733972..5cccd44e 100644 --- a/repo/js/AutoCommission/name.json +++ b/repo/js/AutoCommission/name.json @@ -10,26 +10,30 @@ "为了执行官大人", "固若金汤", "极速前进", + "危险运输现象", "安全运输法则", "冰凉凉的大团危机" ], "talk": [ - "说到做到", + "报答神明的方式", + "餐品订单", + "触不可及的恋人", "此路不通", - "那位先生的委托", "父亲能做的事", - "冒险家安娜", "鸽子鸭子小孩子", - "诗歌交流", - "惊喜大礼", - "西风骑士的基础知识", - "无人注意的盖伊", - "钥匙是易丢品", - "新的风暴尚未出现", + "冒险家安娜", "冒险家的能力极限", - "语言交流" - ], - "dev":[ - "餐品订单" + "冒险就要勇于前进", + "蒙德酒客", + "那位先生的委托", + "诗歌交流", + "说到做到", + "无人注意的盖伊", + "西风骑士的基础知识", + "新的风暴尚未出现", + "钥匙是易丢品", + "永不停歇的风与米歇尔小姐", + "语言交流", + "圆滚滚的大团骚乱" ] } \ No newline at end of file diff --git a/repo/js/AutoCommission/settings.json b/repo/js/AutoCommission/settings.json index a3df0999..5b634fa7 100644 --- a/repo/js/AutoCommission/settings.json +++ b/repo/js/AutoCommission/settings.json @@ -1,18 +1,17 @@ [ - { - "name": "skipRecognition", - "type": "checkbox", - "label": "跳过识别(开发者功能,直接从Data文件夹加载委托数据进行追踪)" - }, - { - "name": "minTextLength", - "type": "input-text", - "label": "最小文本长度(小于此长度的文本将被过滤)", - "default": "4" - }, - { - "name": "team", - "type": "input-text", - "label": "战斗的队伍名称(不填表示不切换队伍)" - } + { + "name": "skipRecognition", + "type": "checkbox", + "label": "跳过委托识别(直接从Data文件夹加载委托数据进行追踪)" + }, + { + "name": "prepare", + "type": "checkbox", + "label": "切换队伍不前往七天神像及完成后不去安全地点" + }, + { + "name": "team", + "type": "input-text", + "label": "战斗的队伍名称,不填表示不切换队伍" + } ] \ No newline at end of file