@@ -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+
10711089class 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+
13391369def 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+
13571393def 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-
13791409def 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-
13931417def 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 :
0 commit comments