Skip to content

Commit b8b6212

Browse files
committed
修复:摩摩怪往小游戏服务器发包时改用后台线程发送,修复前台发送会导致主界面卡顿1秒的问题
优化:部分list使用pop(0)的地方改为pop()并反转排序顺序,提升性能
1 parent 1ad036d commit b8b6212

4 files changed

Lines changed: 67 additions & 39 deletions

File tree

mole.py

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ def __init__(self):
164164
# 线程初始化
165165
self.send_thread = SendThread()
166166
self.send_ex_thread = SendExThread()
167+
self.send_to_server_thread = SendToServerThread()
168+
self.send_to_server_thread.result.connect(self.mmg_get_reward)
167169
self.update_thread = UpdateThread()
168170
self.update_thread.result.connect(self.update_result)
169171
self.advance_dialog = AdvanceDialog()
@@ -622,7 +624,7 @@ def mmg_run(self):
622624
case 3: # 挑战好友
623625
match mmg_times:
624626
case n if n < mmg_vigour // 10 and len(mmg_fight_friends) > 0:
625-
level_id, fight_type = mmg_fight_friends.pop(0)
627+
level_id, fight_type = mmg_fight_friends.pop()
626628
self.mmg_fight(level_id, fight_type)
627629
case _:
628630
self.mmg_wish()
@@ -633,21 +635,24 @@ def mmg_fight(self, level_id, fight_type):
633635
"00000000000000019300000000000000000000000100000000" # 进入游戏
634636
])
635637

636-
def fight():
637-
is_no_error = send_lines_to_server(("123.206.131.63", 3001), [
638+
run_later(lambda: send_lines_to_server_back(
639+
("123.206.131.63", 3001),
640+
[
638641
f"0000008101000075310000000000000000{mmg_game_id}", # 进入游戏
639642
f"000000212000007724000000000000000000000004{get_hex(fight_type)}{get_hex(level_id)}00000000", # 开始挑战
640643
"000000152000007724000000000000000000000040", # 开始战斗
641644
"000000152000007724000000000000000000000080" # 快速战斗
642-
], [3, 1, 1, 2]) # 摩摩怪服务器操作
643-
if is_no_error:
644-
run_later(lambda: send_lines([
645-
"0000000000000020140000000000000000", # 校验能否翻牌
646-
"000000000000002015000000000000000000000000", # 翻牌
647-
"000000000000000194000000000000000000" # 离开游戏
648-
]))
649-
650-
run_later(fight, 400)
645+
],
646+
[3, 1, 1, 2]
647+
), 400)
648+
649+
def mmg_get_reward(self, is_success):
650+
if is_success:
651+
run_later(lambda: send_lines([
652+
"0000000000000020140000000000000000", # 校验能否翻牌
653+
"000000000000002015000000000000000000000000", # 翻牌
654+
"000000000000000194000000000000000000" # 离开游戏
655+
]))
651656

652657
def mmg_wish(self):
653658
send_lines_back([
@@ -1018,7 +1023,7 @@ def advance(self):
10181023
for need_card_type in need_card_types:
10191024
if need_card_type in owned_cards_dict:
10201025
owned_cards = owned_cards_dict.get(need_card_type)
1021-
card_data = owned_cards.pop(0)
1026+
card_data = owned_cards.pop()
10221027
if card_data.get("已装备"):
10231028
unequip_cards.append(card_data.get("ID"))
10241029
consume_cards.append(card_data.get("名称"))
@@ -1068,6 +1073,19 @@ def run(self):
10681073
send_lines_to_socket(self.lines, self.interval)
10691074

10701075

1076+
class SendToServerThread(QThread):
1077+
result = Signal(bool)
1078+
1079+
def set_data(self, address: tuple, lines: list, wait_recv_nums: list):
1080+
self.address = address
1081+
self.lines = lines
1082+
self.wait_recv_nums = wait_recv_nums
1083+
1084+
def run(self):
1085+
is_success = send_lines_to_server(self.address, self.lines, self.wait_recv_nums)
1086+
self.result.emit(is_success)
1087+
1088+
10711089
class UpdateThread(QThread):
10721090
result = Signal(int, str, str)
10731091

@@ -1336,6 +1354,18 @@ def send_lines(lines: list, interval: int = Interval.NONE):
13361354
sleep(interval / 1000)
13371355

13381356

1357+
def send_lines_back(lines: list, interval: int = Interval.NORMAL):
1358+
if not window.send_thread.isRunning():
1359+
window.send_thread.set_data(lines, interval)
1360+
window.send_thread.start()
1361+
1362+
1363+
def send_lines_back_ex(lines: list, interval: int = Interval.NORMAL):
1364+
if not window.send_ex_thread.isRunning():
1365+
window.send_ex_thread.set_data(lines, interval)
1366+
window.send_ex_thread.start()
1367+
1368+
13391369
def send_lines_to_server(address: tuple, lines: list, wait_recv_nums: list = None):
13401370
need_wait_recv = wait_recv_nums is not None
13411371
with socket(AF_INET, SOCK_STREAM) as s:
@@ -1354,6 +1384,12 @@ def send_lines_to_server(address: tuple, lines: list, wait_recv_nums: list = Non
13541384
return True
13551385

13561386

1387+
def send_lines_to_server_back(address: tuple, lines: list, wait_recv_nums: list = None):
1388+
if not window.send_to_server_thread.isRunning():
1389+
window.send_to_server_thread.set_data(address, lines, wait_recv_nums)
1390+
window.send_to_server_thread.start()
1391+
1392+
13571393
def send_lines_to_socket(lines: list, interval: int = Interval.NONE):
13581394
socket_num = window.socketLineEdit.text()
13591395
if socket_num.isdigit():
@@ -1370,12 +1406,6 @@ def send_lines_to_socket(lines: list, interval: int = Interval.NONE):
13701406
pass
13711407

13721408

1373-
def send_lines_back(lines: list, interval: int = Interval.NORMAL):
1374-
if not window.send_thread.isRunning():
1375-
window.send_thread.set_data(lines, interval)
1376-
window.send_thread.start()
1377-
1378-
13791409
def is_not_running(timer: str):
13801410
return not window.timer(timer).isActive()
13811411

@@ -1384,12 +1414,6 @@ def is_not_sending():
13841414
return not window.send_thread.isRunning()
13851415

13861416

1387-
def send_lines_back_ex(lines: list, interval: int = Interval.NORMAL):
1388-
if not window.send_ex_thread.isRunning():
1389-
window.send_ex_thread.set_data(lines, interval)
1390-
window.send_ex_thread.start()
1391-
1392-
13931417
def get_ip_port(socket_num: int):
13941418
try:
13951419
with fromfd(socket_num, AF_INET, SOCK_STREAM) as s:
@@ -1563,8 +1587,8 @@ def process_recv_packet(socket_num, buf, length):
15631587
start += size1 + other_state_num * size2
15641588
mmg_query_page += 1
15651589
if mmg_query_page == mmg_query_page_max: # 查询完毕
1566-
# 将师徒放在最前面,因为返回的好友挑战信息和查询时的好友ID顺序可能不一样
1567-
mmg_fight_friends.sort(key=lambda item: item[1], reverse=True)
1590+
# 将师徒放后面先pop,因为返回的好友挑战信息和查询时的好友ID顺序可能不一样
1591+
mmg_fight_friends.sort(key=lambda item: item[1])
15681592
window.mmg_start()
15691593
if packet.cmd_id == 12004: # 魔灵用户信息
15701594
mlcs_energy = get_int(packet.body, 13, 2) # 剩余体力值
@@ -1641,9 +1665,9 @@ def process_recv_packet(socket_num, buf, length):
16411665
# 满级卡牌信息
16421666
else:
16431667
ysqs_max_level_cards_dict.setdefault(card_data.get("类型"), []).append(card_data)
1644-
# 未出战的排前面
1668+
# 未装备卡牌放后面先pop
16451669
for card_list in ysqs_max_level_cards_dict.values():
1646-
card_list.sort(key=lambda item: item.get("已装备"))
1670+
card_list.sort(key=lambda item: item.get("已装备"), reverse=True)
16471671
if old_card_id is not None:
16481672
index = window.ysqsCardBox.findData(old_card_id)
16491673
if index != -1:

ui_main.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ def setupUi(self, MainWindow):
234234

235235
self.tabWidget.setCurrentIndex(0)
236236
self.mmgLevelBox.setCurrentIndex(27)
237+
self.mmgBossBox.setCurrentIndex(3)
237238

238239

239240
QMetaObject.connectSlotsByName(MainWindow)
@@ -294,10 +295,10 @@ def retranslateUi(self, MainWindow):
294295
self.mmgLevelBox.setItemText(31, QCoreApplication.translate("MainWindow", u"呐奇树洞疯", None))
295296

296297
self.mmgPVEButton.setText(QCoreApplication.translate("MainWindow", u"一键挑战副本", None))
297-
self.mmgBossBox.setItemText(0, QCoreApplication.translate("MainWindow", u"萨尔冥王", None))
298-
self.mmgBossBox.setItemText(1, QCoreApplication.translate("MainWindow", u"呆呆牛头人", None))
299-
self.mmgBossBox.setItemText(2, QCoreApplication.translate("MainWindow", u"地狱神犬", None))
300-
self.mmgBossBox.setItemText(3, QCoreApplication.translate("MainWindow", u"暗夜精灵", None))
298+
self.mmgBossBox.setItemText(0, QCoreApplication.translate("MainWindow", u"呆呆牛头人", None))
299+
self.mmgBossBox.setItemText(1, QCoreApplication.translate("MainWindow", u"地狱神犬", None))
300+
self.mmgBossBox.setItemText(2, QCoreApplication.translate("MainWindow", u"暗夜精灵", None))
301+
self.mmgBossBox.setItemText(3, QCoreApplication.translate("MainWindow", u"萨尔冥王", None))
301302
self.mmgBossBox.setItemText(4, QCoreApplication.translate("MainWindow", u"独角萨摩", None))
302303

303304
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab1), QCoreApplication.translate("MainWindow", u"第1页", None))

ui_main.ui

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -576,27 +576,30 @@
576576
<height>25</height>
577577
</rect>
578578
</property>
579+
<property name="currentIndex">
580+
<number>3</number>
581+
</property>
579582
<property name="duplicatesEnabled">
580583
<bool>false</bool>
581584
</property>
582585
<item>
583586
<property name="text">
584-
<string>萨尔冥王</string>
587+
<string>呆呆牛头人</string>
585588
</property>
586589
</item>
587590
<item>
588591
<property name="text">
589-
<string>呆呆牛头人</string>
592+
<string>地狱神犬</string>
590593
</property>
591594
</item>
592595
<item>
593596
<property name="text">
594-
<string>地狱神犬</string>
597+
<string>暗夜精灵</string>
595598
</property>
596599
</item>
597600
<item>
598601
<property name="text">
599-
<string>暗夜精灵</string>
602+
<string>萨尔冥王</string>
600603
</property>
601604
</item>
602605
<item>

version.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"version": "1.7.3",
3-
"description": "- 优化:card_dict 增加“上一星级”、“进阶材料”字段,增加星级之间的关联性和进阶材料计算\n- 优化:卡牌进阶所需材料本地计算,并给出可以进阶的消耗提示、无法进阶的卡牌缺失提示\n- 优化:进阶前卸载卡牌功能优化,现在不卸载全部卡牌,只卸载进阶需要消耗的卡牌\n- 优化:提示函数按钮相关功能优化\n- 修复:增加语言文件并加载,修复通用按钮文本是英文的问题"
2+
"version": "1.7.4",
3+
"description": "- 修复:摩摩怪往小游戏服务器发包时改用后台线程发送,修复前台发送会导致主界面卡顿1秒的问题\n- 优化:部分list使用pop(0)的地方改为pop()并反转排序顺序,提升性能"
44
}

0 commit comments

Comments
 (0)