This commit is contained in:
NY 2025-05-09 10:53:51 +08:00
parent c40a1cb0dc
commit e746fe3a67
2 changed files with 51 additions and 22 deletions

View File

@ -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():

Binary file not shown.