diff --git a/app/resource/i18n/Seraphine.zh_CN.qm b/app/resource/i18n/Seraphine.zh_CN.qm
index 940dbad..90fafbd 100644
Binary files a/app/resource/i18n/Seraphine.zh_CN.qm and b/app/resource/i18n/Seraphine.zh_CN.qm differ
diff --git a/app/resource/i18n/Seraphine.zh_CN.ts b/app/resource/i18n/Seraphine.zh_CN.ts
index a3f440a..721c4a2 100644
--- a/app/resource/i18n/Seraphine.zh_CN.ts
+++ b/app/resource/i18n/Seraphine.zh_CN.ts
@@ -85,12 +85,12 @@
第一率:
-
+ 对局
-
+ 第一率
@@ -98,22 +98,22 @@
AutoAcceptMatchingCard
-
+ 在对局找到后接受对局前延迟的秒数:
-
+ 秒
-
+ 未启用
-
+ 已启用,延迟:
@@ -121,22 +121,22 @@
AutoAcceptSwapingCard
-
+ 自动接受楼层交换请求:
-
+ 自动接受英雄交换请求:
-
+ 已启用
-
+ 未启用
@@ -159,12 +159,12 @@
已启用,自动禁用:
-
+ 未启用
-
+ 启用自动 Ban:
@@ -174,67 +174,67 @@
若队友预选该英雄,则空 Ban:
-
+ 在进入禁用阶段后 Ban 人的秒数:
-
+ 默认设置
-
+ 默认禁用英雄:
-
+ 选择
-
+ 按照位置设置
-
+ 上路:
-
+ 打野:
-
+ 中路:
-
+ 下路:
-
+ 辅助:
-
+ 若队友预选该英雄,则空 Ban:
-
+ 恢复默认
-
+ 已启用
@@ -248,7 +248,7 @@
若非排位模式或按位置设置英雄不可用,则将使用默认设置
-
+
@@ -270,7 +270,7 @@ If champions set by lane are not available, default settings will be used.已启用,自动选择:
-
+ 未启用
@@ -280,7 +280,7 @@ If champions set by lane are not available, default settings will be used.将要自动亮起的英雄:
-
+ 启用自动亮起:
@@ -290,7 +290,7 @@ If champions set by lane are not available, default settings will be used.在时间结束后确定选择(更换亮起英雄后无效)
-
+ 在时间结束时确定选择:
@@ -310,57 +310,57 @@ If champions set by lane are not available, default settings will be used.将要自动亮起的英雄:
-
+ 默认设置
-
+ 默认亮起英雄:
-
+ 选择
-
+ 按照位置设置
-
+ 上路:
-
+ 打野:
-
+ 中路:
-
+ 下路:
-
+ 辅助:
-
+ 已启用
-
+ 恢复默认
@@ -374,7 +374,7 @@ If champions set by lane are not available, default settings will be used.
-
+
@@ -386,92 +386,92 @@ If champions set by lane are not available, default settings will be used.
AuxiliaryInterface
-
+ 其他功能
-
+ 个人主页
-
+ 个人签名
-
+ 修改你个人卡片的的签名
-
+ 个人主页背景
-
+ 修改你的个人主页背景皮肤图片
-
+ 段位展示
-
+ 修改你个人卡片显示的段位
-
+ 在线状态
-
+ 修改你的在线状态
-
+ 卸下勋章
-
+ 卸下你个人卡片中的所有勋章
-
+ 游戏
-
+ 创建 5v5 练习模式
-
+ 自动接受对局
-
+ 观战
-
+ 观战同大区玩家正在进行的游戏
-
+ 自动亮起英雄
@@ -481,42 +481,42 @@ If champions set by lane are not available, default settings will be used.在盲选开始时自动亮起英雄
-
+ 锁定游戏设置
-
+ 让你的游戏设置不会因为切换账号而改变
-
+ 在你设置的秒数之后自动接受对局匹配
-
+ 只能添加人机玩家
-
+ 自动重连
-
+ 当你掉线退出游戏时自动重新连接
-
+ 修复客户端窗口
-
+ 修复客户端错误的窗口大小(需要管理员权限)
@@ -531,27 +531,27 @@ If champions set by lane are not available, default settings will be used.向玩家发送好友请求
-
+ 在你的选择开始时自动亮起英雄
-
+ 自动禁用英雄
-
+ 在你的禁用环节开始时自动禁用英雄
-
+ 英雄选择
-
+ 卸下头像框
@@ -562,32 +562,32 @@ If champions set by lane are not available, default settings will be used.卸下你的召唤师头像框(需要召唤师等级大于等于 525)
-
+ 自动接受交换请求
-
+ 自动接受队友的交换楼层或英雄的请求
-
+ 客户端
-
+ 重启客户端
-
+ 重启客户端而不需要重新排队
-
+ 卸下你的召唤师头像框(需要召唤师等级大于等于 525)
@@ -743,12 +743,12 @@ If champions set by lane are not available, default settings will be used.
ChampionPerksWidget
-
+ 设为当前符文页
-
+ :
@@ -769,7 +769,7 @@ If champions set by lane are not available, default settings will be used.英雄技能
-
+ 局游戏
@@ -777,27 +777,27 @@ If champions set by lane are not available, default settings will be used.
ChampionTitleBar
-
+ 胜率
-
+ 登场率
-
+ 禁用率
-
+ 第一率
-
+ 平均排名
@@ -828,22 +828,22 @@ If champions set by lane are not available, default settings will be used.
ChangeClientMessageBox
-
+ 重新连接
-
+ 取消
-
+ 更改连接的客户端
-
+ 请选择目标客户端:
@@ -853,12 +853,12 @@ If champions set by lane are not available, default settings will be used.[当前]
-
+ 进程 ID:
-
+ ,
@@ -868,7 +868,7 @@ If champions set by lane are not available, default settings will be used.服务器:
-
+ (当前连接)
@@ -881,17 +881,17 @@ If champions set by lane are not available, default settings will be used.
ChangeDpiMessageBox
-
+ 确定
-
+ 窗口太大了!
-
+ 我们将会重新设置你的窗口大小,请重启 Seraphine
@@ -899,7 +899,7 @@ If champions set by lane are not available, default settings will be used.
CounterChampionWidget
-
+ 局游戏
@@ -907,27 +907,27 @@ If champions set by lane are not available, default settings will be used.
CreatePracticeLobbyCard
-
+ 创建
-
+ 房间名:(不可为空)
-
+ 请输入房间名
-
+ 请输入房间密码
-
+ 房间密码:(若留空则不设密码)
@@ -935,7 +935,7 @@ If champions set by lane are not available, default settings will be used.
DodgeCard
-
+ 秒退
@@ -956,12 +956,12 @@ If champions set by lane are not available, default settings will be used.
ExceptionMessageBox
-
+ 复制错误信息并退出
-
+ 直接退出
@@ -969,7 +969,7 @@ If champions set by lane are not available, default settings will be used.
FixClientDpiCard
-
+ 修复
@@ -987,32 +987,32 @@ If champions set by lane are not available, default settings will be used.
FriendRequestCard
-
+ 发送
-
+ 请输入召唤师名及编号
-
+ 召唤师未找到
-
+ 请检查召唤师名后重试
-
+ 发送好友请求成功
-
+ 你想加好友的召唤师名:
@@ -1035,52 +1035,52 @@ If champions set by lane are not available, default settings will be used.重开
-
+ 第一名
-
+ 第二名
-
+ 第三名
-
+ 第四名
-
+ 第五名
-
+ 第六名
-
+ 第七名
-
+ 第八名
-
+ 获取对局详细信息失败
-
+ 服务器返回了不正常的内容
@@ -1144,42 +1144,42 @@ If champions set by lane are not available, default settings will be used.
GameTitleBar
-
+ 复制游戏 ID
-
+ 游戏 ID:
-
+ 重开
-
+ 胜利
-
+ 失败
-
+ 第一名
-
+ 第二名
-
+ 第三名
@@ -1189,27 +1189,27 @@ If champions set by lane are not available, default settings will be used.第四名
-
+ 第四名
-
+ 第五名
-
+ 第六名
-
+ 第七名
-
+ 第八名
@@ -1253,7 +1253,7 @@ If champions set by lane are not available, default settings will be used.
ItemsWidget
-
+ 局游戏
@@ -1307,12 +1307,12 @@ If champions set by lane are not available, default settings will be used.
LockConfigCard
-
+ 错误
-
+ 设置文件读写属性失败
@@ -1423,7 +1423,7 @@ If champions set by lane are not available, default settings will be used.匹配中
-
+ 程序出现异常 😥
@@ -1595,17 +1595,17 @@ If champions set by lane are not available, default settings will be used.
MultiChampionSelectMsgBox
-
+ 确定
-
+ 取消
-
+ 选择英雄
@@ -1613,18 +1613,23 @@ If champions set by lane are not available, default settings will be used.
MultiPathSettingMsgBox
-
+ 确定
-
+ 取消
+ 设置客户端路径和顺序
+
+
+
+
设置客户端路径和顺序
@@ -1699,12 +1704,12 @@ If champions set by lane are not available, default settings will be used.
NoticeMessageBox
-
+ 知道了
-
+ 公告
@@ -1712,32 +1717,32 @@ If champions set by lane are not available, default settings will be used.
OnlineAvailabilityCard
-
+ 应用
-
+ 在线
-
+ 离开
-
+ 离线
-
+ 在线状态
-
+ 你将要被展示的在线状态:
@@ -1745,17 +1750,17 @@ If champions set by lane are not available, default settings will be used.
OnlineStatusCard
-
+ 请输入你的签名
-
+ 应用
-
+ 你想要改成的在线状态(签名):
@@ -2050,7 +2055,7 @@ If champions set by lane are not available, default settings will be used.
PerksSummaryWidget
-
+ 局游戏
@@ -2094,7 +2099,7 @@ If champions set by lane are not available, default settings will be used.
ProfileBackgroundCard
-
+ 应用
@@ -2126,163 +2131,173 @@ If champions set by lane are not available, default settings will be used.
- 请选择皮肤
+ 请选择皮肤
-
+ 英雄:
-
+ 选择英雄
-
+ 皮肤:
-
+ 请选择皮肤版本
-
+ 设置 “签名版本” 需要重启客户端,客户端将会自动重启
-
+ 签名版本
-
+ 未签名版本
+
+
+
+ 选择皮肤
+
+
+
+
+ 成功
+ ProfileTierCard
-
+ 应用
-
+ 云顶之弈
-
+ 单 / 双排
-
+ 灵活排位
-
+ 未定级
-
+ 坚韧黑铁
-
+ 英勇黄铜
-
+ 不屈白银
-
+ 荣耀黄金
-
+ 华贵铂金
-
+ 流光翡翠
-
+ 璀璨钻石
-
+ 超凡大师
-
+ 傲世宗师
-
+ 最强王者
-
+ 游戏模式
-
+ 段位
-
+ 等级
-
+ 游戏模式:
-
+ 段位:
-
+ 等级:
-
+ 请选择游戏模式
-
+ 请选择段位
-
+ 请选择等级
@@ -2313,7 +2328,7 @@ If champions set by lane are not available, default settings will be used.
RemovePrestigeCrestCard
-
+ 卸下
@@ -2321,7 +2336,7 @@ If champions set by lane are not available, default settings will be used.
RemoveTokensCard
-
+ 卸下
@@ -2329,7 +2344,7 @@ If champions set by lane are not available, default settings will be used.
RestartClientCard
-
+ 重启
@@ -2355,12 +2370,12 @@ If champions set by lane are not available, default settings will be used.
SearchInterface
-
+ 生涯
-
+ 召唤师未找到
@@ -2370,32 +2385,32 @@ If champions set by lane are not available, default settings will be used.请检查召唤师名后重试
-
+ 请输入同大区召唤师名及编号
-
+ 全部
-
+ 匹配模式
-
+ 极地大乱斗
-
+ 单 / 双排
-
+ 灵活排位
@@ -2410,7 +2425,7 @@ If champions set by lane are not available, default settings will be used.没有找到该玩家相关对局
-
+ 请检查召唤师名后重试
@@ -2794,50 +2809,65 @@ when they are used by Seraphine, which will cost more time
SpectateCard
-
+ 观战
-
+ 召唤师未找到
-
+ 请检查召唤师名后重试
-
+ 召唤师不在游戏中
-
+ 观战拉起成功
-
+ 请等待游戏观战启动
- 你想观战的同大区召唤师名及编号:
+ 你想观战的同大区召唤师名及编号:
-
+ 请输入召唤师名
+
+
+
+ 你想观战的同大区召唤师名及编号:
+
+
+
+
+ 观战拉起方式:
+
+
+
+
+ 命令行
+ Spell
-
+ 局游戏
@@ -2847,25 +2877,38 @@ when they are used by Seraphine, which will cost more time
召唤师技能
+
+ SplashesMessageBox
+
+
+
+ 保存
+
+
+
+
+ 选择路径
+
+StartInterface
-
+ 启动客户端
-
+ 路径非法
-
+ 请在设置页面中设置正确的 LOL 客户端路径
-
+ 启动客户端成功
@@ -2900,12 +2943,12 @@ when they are used by Seraphine, which will cost more time
更改连接的客户端
-
+ 无法更改连接的客户端
-
+ 仅有一个客户端正在运行
@@ -2918,7 +2961,7 @@ when they are used by Seraphine, which will cost more time
SummonerInfoBar
-
+ 未定级
@@ -2960,17 +3003,17 @@ when they are used by Seraphine, which will cost more time
SynergyItemWidget
-
+ 平均排名
-
+ 第一率
-
+ 局游戏
@@ -2978,52 +3021,52 @@ when they are used by Seraphine, which will cost more time
TeamView
-
+ 胜方
-
+ 败方
-
+ 摧毁防御塔
-
+ 摧毁召唤水晶
-
+ 击杀男爵
-
+ 击杀巨龙
-
+ 击杀峡谷先锋
-
+ 小兵及野怪击杀
-
+ 获取金钱
-
+ 对英雄造成伤害
@@ -3097,7 +3140,7 @@ when they are used by Seraphine, which will cost more time
UpdateMessageBox
-
+ 发现新版本
@@ -3107,12 +3150,12 @@ when they are used by Seraphine, which will cost more time
不再提醒
-
+ 当前版本:v
-
+ 新版本:v
@@ -3122,12 +3165,12 @@ when they are used by Seraphine, which will cost more time
立即下载 🤩
-
+ 知道了
-
+ ,
@@ -3142,22 +3185,22 @@ when they are used by Seraphine, which will cost more time
取消
-
+ 自动下载安装(可能被拦截)
-
+ 一键更新功能仅在发布版本可用
-
+ 下载成功,正在解压缩...
-
+ 转到浏览器手动下载 🤩
@@ -3165,17 +3208,17 @@ when they are used by Seraphine, which will cost more time
WaitingForLolMessageBox
-
+ 连接客户端
-
+ 退出
-
+ 我们无法自动连接至 LOL 客户端 😱
@@ -3192,7 +3235,7 @@ when they are used by Seraphine, which will cost more time
请在英雄联盟客户端完全启动后,点击 “连接客户端” 按钮
-
+ 请在英雄联盟客户端完全启动后,点击 “连接客户端” 按钮
diff --git a/app/view/auxiliary_interface.py b/app/view/auxiliary_interface.py
index 520df2c..376f16f 100644
--- a/app/view/auxiliary_interface.py
+++ b/app/view/auxiliary_interface.py
@@ -322,7 +322,8 @@ def __onSkinButtonClicked(self):
w = SplashesMessageBox(self.skins, self.window())
if w.exec():
self.chosenSkinId = self.skins[w.pager.currentIndex()][1]["skinId"]
- self.skinLabel.setText(self.tr("Skin's name: ") + self.skins[w.pager.currentIndex()][0])
+ self.skinLabel.setText(
+ self.tr("Skin's name: ") + self.skins[w.pager.currentIndex()][0])
async def initChampionList(self, champions: dict = None):
if champions:
@@ -338,7 +339,8 @@ async def initChampionList(self, champions: dict = None):
def __onChampionSelected(self, championId):
self.w.fadeOut()
- self.championLabel.setText(self.tr("Champion's name: ") + connector.manager.getChampionNameById(championId))
+ self.championLabel.setText(self.tr(
+ "Champion's name: ") + connector.manager.getChampionNameById(championId))
self.skinLabel.setText(self.tr("Skin's name: "))
self.chosenSkinId = None
@@ -823,12 +825,15 @@ def __init__(self, title, content=None, parent=None):
super().__init__(Icon.EYES, title, content, parent)
self.inputWidget = QWidget(self.view)
- self.inputLayout = QHBoxLayout(self.inputWidget)
+ self.inputLayout = QGridLayout(self.inputWidget)
self.summonerNameLabel = QLabel(
- self.tr("Summoners's name you want to spectate:"))
+ self.tr("Summoner's name you want to spectate:"))
self.lineEdit = LineEdit()
+ self.spectateTypeLabel = QLabel(self.tr("Method:"))
+ self.spectateTypeComboBox = ComboBox()
+
self.buttonWidget = QWidget(self.view)
self.buttonLayout = QHBoxLayout(self.buttonWidget)
self.button = PushButton(self.tr("Spectate"))
@@ -837,13 +842,19 @@ def __init__(self, title, content=None, parent=None):
self.__initWidget()
def __initLayout(self):
- self.inputLayout.setSpacing(19)
+ self.inputLayout.setVerticalSpacing(19)
self.inputLayout.setAlignment(Qt.AlignTop)
self.inputLayout.setContentsMargins(48, 18, 44, 18)
self.inputLayout.addWidget(
- self.summonerNameLabel, alignment=Qt.AlignLeft)
- self.inputLayout.addWidget(self.lineEdit, alignment=Qt.AlignRight)
+ self.summonerNameLabel, 0, 0, alignment=Qt.AlignLeft)
+ self.inputLayout.addWidget(
+ self.lineEdit, 0, 1, alignment=Qt.AlignRight)
+ self.inputLayout.addWidget(
+ self.spectateTypeLabel, 1, 0, alignment=Qt.AlignLeft)
+ self.inputLayout.addWidget(
+ self.spectateTypeComboBox, 1, 1, alignment=Qt.AlignRight)
+
self.inputLayout.setSizeConstraint(QHBoxLayout.SetMinimumSize)
self.buttonLayout.setContentsMargins(48, 18, 44, 18)
@@ -864,6 +875,10 @@ def __initWidget(self):
self.button.setMinimumWidth(100)
self.button.setEnabled(False)
+ self.spectateTypeComboBox.addItem("LCU API", userData="LCU")
+ self.spectateTypeComboBox.addItem(self.tr("CMD"), userData="CMD")
+ self.spectateTypeComboBox.setMinimumWidth(100)
+
self.lineEdit.textChanged.connect(self.__onLineEditTextChanged)
self.button.clicked.connect(self.__onButtonClicked)
@@ -884,11 +899,14 @@ def info(type, title, content):
text = self.lineEdit.text()
text = text.replace('\u2066', '').replace('\u2069', '')
- res = await connector.spectateDirectly(text)
- pwd = os.getcwd()
- os.chdir(f"{cfg.get(cfg.lolFolder)[0]}/../Game")
- subprocess.Popen(['League of Legends.exe', f'{res}'])
- os.chdir(pwd)
+ if self.spectateTypeComboBox.currentData() == 'LCU':
+ await connector.spectate(text)
+ else:
+ res = await connector.spectateDirectly(text)
+ pwd = os.getcwd()
+ os.chdir(f"{cfg.get(cfg.lolFolder)[0]}/../Game")
+ subprocess.Popen(['League of Legends.exe', f'{res}'])
+ os.chdir(pwd)
except SummonerNotFound:
info('error', self.tr("Summoner not found"),