From 4e52e1a5aee00ce98c443c4ee3542738b5ea0098 Mon Sep 17 00:00:00 2001 From: mian <38103855+intmian@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:12:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=BB=B6=E8=BF=9F=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=B9=B6=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gui.py | 25 ++++++++++++++++--------- quick_mgr.py | 10 +++++----- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/gui.py b/gui.py index 089e9e7..3386a20 100644 --- a/gui.py +++ b/gui.py @@ -149,10 +149,10 @@ def on_select_cast(self,cast_name,cast_list): sequence = "" for key in combo["sequence"]: if key[0] == '`': - for i in range(int(key[1:])): - sequence += "空" + sequence += f"空{key[1:]}ms" else: sequence += key + sequence += " " str_list.append(f"{trigger_key}: {sequence}") str_list.append("<双击新增|双击已有项删除>") self.combobox.set(cast_name) @@ -322,7 +322,11 @@ def add_combo(self): root.withdraw() root.update_idletasks() trigger_key = simpledialog.askstring("新增快捷键", "请输入触发键,额外支持鼠标侧键后x1,前x2",parent=root) - if trigger_key == None: + if trigger_key == None or trigger_key == "": + return + # 检测是否包含空格 + if " " in trigger_key: + simpledialog.messagebox.showerror("新增方案", "触发键不能包含空格") return # 检测是否已经存在 for combo in self.quick_mgr.quick_casts[self.now_choose_cast]: @@ -330,18 +334,21 @@ def add_combo(self): simpledialog.messagebox.showerror("新增方案", "已经存在该快捷键,请先删除旧的") return root.update_idletasks() - sequence = simpledialog.askstring("新增快捷键", "请输入按键序列,额外支持`n表示空n次,以空格分隔",parent=root) - if sequence == None: + sequence = simpledialog.askstring("新增快捷键", "请输入按键序列,额外支持`n表示空n ms,对应技能后摇等,以空格分隔",parent=root) + if sequence == None or sequence == "": return + sequence = sequence.split() # 检查是否存在是否存在大于一个键的 for key in sequence: - if key[0] == "`" and len(key) == 2: - pass + if key[0] == "`": + # 遍历下是否都为数字,且小于10000 + if not key[1:].isdigit() or int(key[1:]) > 10000: + simpledialog.messagebox.showerror("新增方案", "无效的按键序列") + return elif len(key) > 1: simpledialog.messagebox.showerror("新增方案", "无效的按键序列") return - sequence = sequence.split() self.quick_mgr.add_combo_to_cast(self.now_choose_cast,trigger_key,sequence,self.is_start) self.ui_mgr.on_add_combo({"trigger_key":trigger_key,"sequence":sequence}) @@ -372,7 +379,7 @@ def start(self): def main(): # 打包的程序的实际路径是一个临时目录,所以注释 # os.chdir(os.path.dirname(os.path.realpath(__file__))) - # 如果没有管理员权限就报错 + # 如果没有管理员权限就以管理员权限重新启动 if ctypes.windll.shell32.IsUserAnAdmin() == 0: messagebox.showwarning("警告", "未以管理员身份运行,将以管理员权限重新启动") # ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) diff --git a/quick_mgr.py b/quick_mgr.py index f15790b..8e6e8ae 100644 --- a/quick_mgr.py +++ b/quick_mgr.py @@ -295,16 +295,16 @@ def run_combo(self, combo): timeline_now = 0 keys = [] for key in combo['sequence']: - if key[0] == "`" and len(key) == 2: + if key[0] == "`": delay = float(0) - for i in range(int(key[1])): - delay += random.uniform(0.91, 1.09) * self.settings["key_up_interval"] + # 为了提高准确度并且操作更加自然,随机延迟设定如下 + delay += random.uniform(0.95, 1.051) * 0.001 * int(key[1:]) timeline_now += delay continue keys.append((key,True,timeline_now)) - delay = self.settings["key_up_interval"] * random.uniform(0.77, 1.23) + delay = self.settings["key_up_interval"] * random.uniform(0.952, 1.05) keys.append((key,False,timeline_now+delay)) - timeline_now += self.settings["key_interval"] * random.uniform(0.66, 1.34) + timeline_now += self.settings["key_interval"] * random.uniform(0.82, 1.19) keys.sort(key=lambda x: x[2]) for i,key in enumerate(keys): if i != 0: