From e746fe3a67bc9a87212df1c8a88042eedb60e64e Mon Sep 17 00:00:00 2001 From: NY Date: Fri, 9 May 2025 10:53:51 +0800 Subject: [PATCH] fix --- test/aola.py | 73 +++++++++++++++++++++++++++++++++-------------- test/aola.sqlite | Bin 28672 -> 28672 bytes 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/test/aola.py b/test/aola.py index 3c5a37c..55c3385 100644 --- a/test/aola.py +++ b/test/aola.py @@ -18,10 +18,21 @@ class TeamSwitchPacketGenerator: self.root = tk.Tk() self.root.title("阵容切换封包生成器") - # 创建下拉框 + # 获取所有阵容名称和 spell_code + self.team_data = self.get_team_data() # 存储 team_name 和 spell_code 的列表 + self.team_names = [item[0] for item in self.team_data] # 仅 team_name 列表用于显示 + + # 创建搜索框(替换下拉框) + tk.Label(self.root, text="搜索阵容(输入拼音缩写):").pack(anchor=tk.W, padx=5) + self.search_var = tk.StringVar() + self.search_var.trace("w", self.update_combobox) # 监听输入变化 + self.search_entry = tk.Entry(self.root, textvariable=self.search_var) + self.search_entry.pack(pady=5, padx=5, fill=tk.X) + + # 创建可搜索的下拉框 self.team_var = tk.StringVar() self.team_dropdown = ttk.Combobox(self.root, textvariable=self.team_var) - self.team_dropdown['values'] = self.get_team_names() + self.team_dropdown['values'] = self.team_names self.team_dropdown.pack(pady=10) self.team_dropdown.set("请选择阵容") @@ -52,23 +63,45 @@ class TeamSwitchPacketGenerator: self.info_text = tk.Text(self.root, height=5, width=80, fg="red") self.info_text.pack(pady=5) - def get_team_names(self): - """从数据库获取所有阵容名称""" + def get_team_data(self): + """从数据库获取所有阵容名称和 spell_code""" try: - self.cursor.execute("SELECT team_name FROM aolaer_team order by team_name") - return [row[0] for row in self.cursor.fetchall()] + self.cursor.execute("SELECT team_name, spell_code FROM aolaer_team ORDER BY team_name") + return self.cursor.fetchall() # 返回 [(team_name, spell_code), ...] except sqlite3.Error as e: - self.info_text.insert(tk.END, f"获取阵容名称失败: {e}\n") + self.info_text.insert(tk.END, f"获取阵容数据失败: {e}\n") return [] + def update_combobox(self, *args): + """根据搜索框输入更新下拉框内容""" + search_text = self.search_var.get().strip().lower() + if not search_text: + # 如果搜索框为空,显示所有阵容 + self.team_dropdown['values'] = self.team_names + self.team_dropdown.set("请选择阵容") + else: + # 筛选 spell_code 包含搜索文本的阵容 + filtered_teams = [ + team_name for team_name, spell_code in self.team_data + if spell_code and search_text in spell_code.lower() + ] + self.team_dropdown['values'] = filtered_teams + if filtered_teams: + self.team_dropdown.set(filtered_teams[0]) # 默认选中第一个匹配项 + else: + self.team_dropdown.set("无匹配阵容") + self.team_dropdown['values'] = [] + def refresh_dropdown(self): """刷新下拉框数据""" - # 重新获取阵容名称 - team_names = self.get_team_names() + # 重新获取阵容数据 + self.team_data = self.get_team_data() + self.team_names = [item[0] for item in self.team_data] # 更新下拉框选项 - self.team_dropdown['values'] = team_names - # 重置选择 + self.team_dropdown['values'] = self.team_names self.team_dropdown.set("请选择阵容") + # 清空搜索框 + self.search_var.set("") # 在提示框中显示刷新成功 self.info_text.insert(tk.END, "下拉框数据已刷新!\n") @@ -102,8 +135,8 @@ class TeamSwitchPacketGenerator: packets = [] selected_team = self.team_var.get() - if not selected_team or selected_team == "请选择阵容": - self.info_text.insert(tk.END, "请先选择一个阵容!\n") + if not selected_team or selected_team in ["请选择阵容", "无匹配阵容"]: + self.info_text.insert(tk.END, "请先选择一个有效阵容!\n") return try: @@ -165,14 +198,12 @@ class TeamSwitchPacketGenerator: if team_set_codes and team_set_codes[idx] != '0': typecode = team_set_codes[idx] - # 生成子宠物封包(即使 div_weapon 为空,也生成占位封包) - if div_weapon is not None and str(div_weapon).strip(): + # 生成子宠物封包(仅当 div_weapon 非空时) + if div_weapon and str(div_weapon).strip(): sub_pet_packets.append( f'|#send={{"id":42,"param":{{"subPetId":{id},"petId":{div_weapon}}},"cmd":"ASBS230623_con"}}|') else: - sub_pet_packets.append( - f'|#send={{"id":42,"param":{{"subPetId":{id},"petId":0}},"cmd":"ASBS230623_con"}}|') - self.info_text.insert(tk.END, f"提示:ID {id} 的 div_weapon 为空,使用默认值 0 生成子宠物封包!\n") + self.info_text.insert(tk.END, f"提示:ID {id} 的 div_weapon 为空,跳过生成子宠物封包!\n") # 获取 soul_art 和 soul_card self.cursor.execute("SELECT soul_art, soul_card FROM aolaer_type WHERE aolaer_typecode = ?", @@ -183,7 +214,7 @@ class TeamSwitchPacketGenerator: continue soul_art, soul_card = result - # 生成魂艺封包(即使 soul_art 为空,也生成占位封包) + # 生成魂艺封包(仅当 soul_art 非空时) if soul_art and soul_art.strip(): try: sid1, sid2 = soul_art.split(',') @@ -195,10 +226,8 @@ class TeamSwitchPacketGenerator: self.info_text.insert(tk.END, f"错误:soul_art 格式不正确 for typecode {typecode}!\n") continue else: - soul_art_packets.append(f'|#send={{"id":42,"param":{{"ui":0,"petId":{id}}},"cmd":"ATT231229_1"}}|') - soul_art_packets.append(f'|#send={{"id":42,"param":{{"ui":0,"petId":{id}}},"cmd":"ATT231229_1"}}|') self.info_text.insert(tk.END, - f"提示:typecode {typecode} 的 soul_art 为空,使用默认值 0 生成魂艺封包!\n") + f"提示:typecode {typecode} 的 soul_art 为空,跳过生成魂艺封包!\n") # 生成魂卡封包 if soul_card and soul_card.strip(): diff --git a/test/aola.sqlite b/test/aola.sqlite index 9fb7b28ec996662e45c62bb094e2e85749320f7d..9d6f605852770e046cfc764ff1281398efe30f94 100644 GIT binary patch delta 822 zcmZvaO-vI(6vt;M%OYiGpp7l1z;-DTwXI~fLTOAiF=`A^Ijb?IrD)ZD7;5?f2M}YS znh?q=mJb8Q7?4CDR+Fj-7fncvhIsbCf$fJLYGO>(3r;OZ5APj*@Bilg=gkak!huaV zTC0NR001lv1r10;7dMNwlpYAixXLtOlp6r?xJ0>uhq9U?@C^-7%YKf($~t7 ziknSJR%y#~L(>!pMbAp=LVj57*zMW}!`sG2n7<;+eIT%*fsR%5Zk| zwtVMlekJCPgf8{kh(^UiUQJcU<+*A3*=QyZ&Pk&aF<+R!@j(t9G>7 z^zw^zVkW!vIuQ0zj(2!U1QaK|3mjo>)|QXt!kHb!W-Z z8kU873iEVwbU8P*AU{cFCWn0PHo}*&&|0XJ%1g`g;!tKXnjLy{ z#uz%cQUjTLGc<3d#v_49KqS%(UqcbnMGo5 zw-&P4ej&Mj*e2*$4lRIk)B*8+^aC%V4&06U(0lxao-HD_rIb0sgL>(wuMzvaVo-EP zJeD%XZUlO%-!JU@#~fj-1$q-Gx^4@SgGRB{Xl*yP*^R`^GQRX%kAPYLxx`v_tnie%#7y1}nN9)lQoY|)JDIJB&K|Nm_7IU^#IXluanW(XP+h}O-BKb$_gD&8{u+JDEUP? z7T(0{pp|ZDwzX2Aq0S2=8JW!u-&UQ`kU``8j-wLl=B`zz@fv8^_s=4 z!ODjD%CPFC)V!`pyntf|3} zwUo=`GMYjgl7~5HNvd19eFO{G%Qj(KZ+XouKD&QcRn9P@`#|@jb{9|D2tL6QX~R9Z z2xE+SON{o}>7bhz!9)USV{pSqcu9ur)EsHEi8q7~37i^6^m8i6pX9i65~7z=$N4Dc zW`c;S=`bI)|1IyN!;>MNOUj7dZB