Skip to content

Commit c8c3f27

Browse files
committed
修复:元素骑士点击一键升级后,发送卡牌信息查询包后,导致卡牌选择框数据更新从而目标升级卡牌被改为默认的第1张的问题
1 parent 246ccee commit c8c3f27

2 files changed

Lines changed: 46 additions & 40 deletions

File tree

mole.py

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
login_socket_num, login_ip, login_port = 0, 0, 0 # 登录后的socket、IP、Port
2323
user_id, serial_num, packet_index = 0, 0, 0 # 米米号、发送包序列号、封包序号索引
2424
recv_buff = bytearray() # 接收封包的数据缓冲区
25-
show_send, show_recv = True, True # 显示send包、recv包
25+
is_show_send, is_show_recv = True, True # 显示send包、recv包
2626
lock = Lock() # 发送锁
2727
is_show_msg = False # 是否已显示消息
2828
# 拉姆
29-
is_get_lamu_info = True # 是否获取拉姆信息
29+
can_get_lamu_info = True # 是否获取拉姆信息
3030
lamu_id, lamu_name, lamu_value, lamu_level, lamu_times = 0, "", 0, 0, 0 # 拉姆ID、名字、变身值、变身等级、变身获得物品成功次数
3131
lamu_thresholds = [40, 180, 660, 1340, 2660, 4280, 6840, 9800, 14000, 18700] # 拉姆变身值阈值
3232
lamu_skill_types = ["火", "水", "木"] # 拉姆技能类型
@@ -35,7 +35,7 @@
3535
lamu_last_type_index, lamu_max_type_index = 0, 0 # 拿取的物品类型索引
3636
lamu_last_item_index, lamu_max_item_index = 0, 0 # 拿取的物品索引
3737
lamu_limit_item_dict, limit_data = {}, {} # 已经拿到上限的物品
38-
lamu_max_skill_success, lamu_last_skill_success = True, True # 最大技能拿取物品是否成功、次大技能拿取物品是否成功
38+
is_max_skill_success, is_last_skill_success = True, True # 最大技能拿取物品是否成功、次大技能拿取物品是否成功
3939
lamu_pick_result_dict = {} # 拉姆拿取物品结果
4040
super_lamu_value, super_lamu_level = 0, 0 # 超拉成长值、等级
4141
# 摩摩怪
@@ -52,6 +52,7 @@
5252
# 元素骑士
5353
ysqs_max_floor, ysqs_attack, ysqs_energy = 0, 0, 0 # 无尽深渊最高层数、最低攻击力、体力值
5454
ysqs_cards_dict, ysqs_material_cards_dict = {}, {} # 元素可升级卡牌、材料卡牌
55+
is_upgrade_start = False
5556
# 餐厅
5657
ct_cooked_dishes_dict, ct_cooking_dishes_dict = {}, {} # 餐台菜信息、灶台菜信息
5758
# 游戏版本
@@ -92,7 +93,7 @@
9293
config = Path(getenv("appdata")) / "mole" / "config.ini"
9394
base_dir = Path(__file__).resolve().parent
9495
log = base_dir / "hook.log"
95-
window_defined = False
96+
is_window_defined = False
9697

9798

9899
class Interval(IntEnum):
@@ -211,12 +212,12 @@ def init_table_size(self):
211212
self.tableWidget.scrollToTop() # 拖动到顶部
212213

213214
def change_show_send(self, state):
214-
global show_send
215-
show_send = state > 0
215+
global is_show_send
216+
is_show_send = state > 0
216217

217218
def change_show_recv(self, state):
218-
global show_recv
219-
show_recv = state > 0
219+
global is_show_recv
220+
is_show_recv = state > 0
220221

221222
def change_set_socket(self, state):
222223
self.socketLineEdit.setEnabled(state > 0)
@@ -423,9 +424,9 @@ def lamu_feed(self):
423424

424425
def lamu_get_vars(self):
425426
if lamu_times == 0:
426-
return lamu_last_skill_success, lamu_last_skill_level, lamu_last_item_level, lamu_last_type_index, lamu_last_item_index
427+
return is_last_skill_success, lamu_last_skill_level, lamu_last_item_level, lamu_last_type_index, lamu_last_item_index
427428
else:
428-
return lamu_max_skill_success, lamu_max_skill_level, lamu_max_item_level, lamu_max_type_index, lamu_max_item_index
429+
return is_max_skill_success, lamu_max_skill_level, lamu_max_item_level, lamu_max_type_index, lamu_max_item_index
429430

430431
def lamu_set_vars(self, *args):
431432
global lamu_last_item_level, lamu_last_type_index, lamu_last_item_index, lamu_max_item_level, lamu_max_type_index, lamu_max_item_index
@@ -440,10 +441,10 @@ def lamu_get_skill_info(self, skill_level, item_level, type_index):
440441
lamu_dict.get(item_level).get(skill_type).items())
441442

442443
def lamu_collect_result(self):
443-
skill_success, skill_level, item_level, type_index, item_index = self.lamu_get_vars()
444+
is_skill_success, skill_level, item_level, type_index, item_index = self.lamu_get_vars()
444445
skill_type, skill_id, items = self.lamu_get_skill_info(skill_level, item_level, type_index)
445446
item_name = items[item_index][0]
446-
if skill_success:
447+
if is_skill_success:
447448
if item_name in lamu_pick_result_dict:
448449
lamu_pick_result_dict[item_name] += 1
449450
else:
@@ -460,7 +461,7 @@ def lamu_show_result(self):
460461
self.info("一键获取拉姆变身值结束", f"拉姆({lamu_name})今天可采集物品已达上限")
461462

462463
def lamu_start(self):
463-
global lamu_times, lamu_max_skill_success, lamu_last_skill_success, lamu_max_skill_level, lamu_last_skill_level, \
464+
global lamu_times, is_max_skill_success, is_last_skill_success, lamu_max_skill_level, lamu_last_skill_level, \
464465
lamu_max_item_level, lamu_last_item_level, lamu_max_type_index, lamu_last_type_index, lamu_max_item_index, \
465466
lamu_last_item_index, limit_data
466467
self.enable_lamu_button(False)
@@ -470,7 +471,7 @@ def lamu_start(self):
470471
self.lamu_learn()
471472
self.lamu_feed()
472473
lamu_times = 0
473-
lamu_max_skill_success, lamu_last_skill_success = True, True
474+
is_max_skill_success, is_last_skill_success = True, True
474475
lamu_max_item_level, lamu_last_item_level = lamu_max_skill_level, lamu_last_skill_level
475476
lamu_max_type_index, lamu_last_type_index = 0, 0
476477
lamu_max_item_index, lamu_last_item_index = 0, 0
@@ -506,10 +507,10 @@ def lamu_get_item(self, skill_level, item_level, type_index, item_index):
506507
return item_id, skill_id, skill_type
507508

508509
def lamu_run(self):
509-
skill_success, skill_level, item_level, type_index, item_index = self.lamu_get_vars()
510+
is_skill_success, skill_level, item_level, type_index, item_index = self.lamu_get_vars()
510511
item_id, skill_id, skill_type = self.lamu_get_item(skill_level, item_level, type_index, item_index)
511512
if lamu_times < 11 or item_level == 6: # 最高级物品全部拿到上限
512-
if not skill_success: # 上次技能拿取失败
513+
if not is_skill_success: # 上次技能拿取失败
513514
limit_data.get("数据").get(skill_type)[item_id] = item_id
514515
limit_data["时间"] = datetime.now()
515516
item_id, skill_id, skill_type = self.lamu_get_item(skill_level, item_level, type_index, item_index)
@@ -725,12 +726,15 @@ def ysqs_run(self):
725726
)
726727

727728
def ysqs_upgrade_start(self):
729+
global is_upgrade_start
730+
is_upgrade_start = True
728731
send_lines([
729732
"00000000000000231E000000000000000000000000" # 获取元素骑士信息
730733
])
731734
run_later(self.ysqs_upgrade_run)
732735

733736
def ysqs_upgrade_run(self):
737+
global is_upgrade_start
734738
card_data = self.ysqsCardBox.currentData()
735739
ysqs_material_cards_dict.pop(card_data.get("ID"), None)
736740
required_exp = get_card_max_exp(card_data.get("星级")) - card_data.get("经验")
@@ -756,6 +760,7 @@ def ysqs_upgrade_run(self):
756760
ids = "".join([get_hex(card_id) for card_id in cards])
757761
lines.append(f"00000000000000231B0000000000000000{get_hex(card_data.get("ID"))}{get_hex(last_size)}{ids}")
758762
send_lines(lines)
763+
is_upgrade_start = False
759764

760765

761766
def mlcs_start(self):
@@ -1087,14 +1092,14 @@ def path(file: str):
10871092

10881093

10891094
def show_data(packet: Packet, data_type: str, socket_num: int = None):
1090-
global window_defined
1091-
if window_defined:
1095+
global is_window_defined
1096+
if is_window_defined:
10921097
if socket_num is None:
10931098
socket_num = login_socket_num
10941099
window.add_data(data_type, socket_num, packet.cmd_id, analyse(packet.cmd_id), packet.data().hex().upper())
10951100
else:
10961101
if "window" in globals():
1097-
window_defined = True
1102+
is_window_defined = True
10981103

10991104

11001105
def run_later(func, delay: int = 350):
@@ -1170,7 +1175,7 @@ def send_lines(lines: list, interval: int = Interval.NONE):
11701175
packet.encrypt()
11711176
send(login_socket_num, packet.data(), packet.length)
11721177
packet.decrypt()
1173-
if show_send:
1178+
if is_show_send:
11741179
show_data(packet, "S ==>")
11751180
if interval > 0:
11761181
sleep(interval / 1000)
@@ -1257,7 +1262,7 @@ def send(socket_num: int, buff: bytes, length: int):
12571262

12581263
@ffi.callback("int(ULONG64, PCHAR, INT)")
12591264
def process_send_packet(socket_num, buff, length):
1260-
global login_socket_num, login_ip, login_port, user_id, is_get_lamu_info
1265+
global login_socket_num, login_ip, login_port, user_id, can_get_lamu_info
12611266
sock_type = get_remote_info(socket_num)
12621267
cipher = ffi.buffer(buff, length)[:]
12631268
# 摩尔主服务器包
@@ -1267,24 +1272,24 @@ def process_send_packet(socket_num, buff, length):
12671272
login_socket_num = socket_num
12681273
login_ip, login_port = get_ip_port(socket_num)
12691274
user_id = packet.user_id
1270-
is_get_lamu_info = True
1275+
can_get_lamu_info = True
12711276
window.enable_all_buttons(True)
12721277
if socket_num == login_socket_num:
12731278
packet.decrypt()
1274-
if show_send:
1279+
if is_show_send:
12751280
show_data(packet, "S ==>") # 界面添加send数据
12761281
with lock:
12771282
packet.encrypt()
12781283
return send(socket_num, packet.data(), length)
12791284
# 其他包
1280-
if show_send and cipher.startswith((b'\x00\x00', b'\x3C\x70', b'\x3C\x3F')):
1285+
if is_show_send and cipher.startswith((b'\x00\x00', b'\x3C\x70', b'\x3C\x3F')):
12811286
show_data(Packet(cipher), "S ==>", socket_num) # 界面添加send数据
12821287
return send(socket_num, cipher, length)
12831288

12841289

12851290
@ffi.callback("void(ULONG64, PCHAR, INT)")
12861291
def process_recv_packet(socket_num, buff, length):
1287-
global recv_buff, is_get_lamu_info, lamu_id, lamu_name, lamu_value, lamu_level, lamu_times, lamu_last_skill_success, lamu_max_skill_success, \
1292+
global recv_buff, can_get_lamu_info, lamu_id, lamu_name, lamu_value, lamu_level, lamu_times, is_last_skill_success, is_max_skill_success, \
12881293
super_lamu_value, super_lamu_level, mmg_game_id, mmg_energy, mmg_vigour, mmg_level, mmg_card, mmg_times, mmg_friends, mmg_friends_num, \
12891294
mmg_friends_dict, mmg_query_page, mmg_super_boss_times, mmg_lamu_boss_times, mmg_limit_boss_times, mmg_boss_index1, mmg_boss_index2, \
12901295
mmg_boss_index3, mlcs_energy, mlcs_arena_times, mlcs_exp_times, ysqs_max_floor, ysqs_attack, ysqs_energy, is_show_msg, ysqs_cards_dict, \
@@ -1302,11 +1307,11 @@ def process_recv_packet(socket_num, buff, length):
13021307
recv_buff = recv_buff[packet_len:]
13031308
packet = Packet(cipher)
13041309
packet.decrypt()
1305-
if show_recv:
1310+
if is_show_recv:
13061311
show_data(packet, "R <==") # 界面添加recv数据
13071312
if packet.version == 0: # 正确包
1308-
if packet.cmd_id == 228 and is_get_lamu_info: # 第1次进入游戏时获取拉姆ID
1309-
is_get_lamu_info = False
1313+
if packet.cmd_id == 228 and can_get_lamu_info: # 第1次进入游戏时获取拉姆ID
1314+
can_get_lamu_info = False
13101315
lamu_id = get_int(packet.body)
13111316
window.lamu_get_info()
13121317
if packet.cmd_id == 212 and get_int(packet.body, 4) == 1: # 获取拉姆信息
@@ -1319,9 +1324,9 @@ def process_recv_packet(socket_num, buff, length):
13191324
super_lamu_value = get_int(packet.body, 100)
13201325
if packet.cmd_id == 1209: # 拉姆变身获得物品
13211326
if lamu_times == 0:
1322-
lamu_last_skill_success = True
1327+
is_last_skill_success = True
13231328
else:
1324-
lamu_max_skill_success = True
1329+
is_max_skill_success = True
13251330
window.lamu_collect_result()
13261331
lamu_times += 1
13271332
if packet.cmd_id == 8200 and is_not_running("摩摩怪"): # 获取摩摩怪能量和活力值
@@ -1438,7 +1443,6 @@ def process_recv_packet(socket_num, buff, length):
14381443
if packet.cmd_id == 8990: # 元素骑士信息
14391444
ysqs_cards_dict.clear()
14401445
ysqs_material_cards_dict.clear()
1441-
window.ysqsCardBox.clear()
14421446
ysqs_energy = get_int(packet.body, 28)
14431447
ysqs_attack = get_int(packet.body, 44)
14441448
ysqs_max_floor = get_int(packet.body, 68)
@@ -1470,12 +1474,13 @@ def process_recv_packet(socket_num, buff, length):
14701474
reverse=True
14711475
)
14721476
)
1473-
for card_id, card_data in ysqs_cards_dict.items():
1474-
window.ysqsCardBox.addItem(card_data.get("名称"), userData=card_data)
1477+
if not is_upgrade_start:
1478+
window.ysqsCardBox.clear()
1479+
for card_id, card_data in ysqs_cards_dict.items():
1480+
window.ysqsCardBox.addItem(card_data.get("名称"), userData=card_data)
14751481
if packet.cmd_id == 1014: # 餐厅信息
14761482
ct_cooked_dishes_dict.clear()
14771483
ct_cooking_dishes_dict.clear()
1478-
window.ctDishBox.clear()
14791484
dishes_num = get_int(packet.body, 68)
14801485
start = 72
14811486
size = 6 * 4
@@ -1501,6 +1506,7 @@ def process_recv_packet(socket_num, buff, length):
15011506
ct_cooking_dishes_dict[dish_pos] = {
15021507
"ID": dish_id, "种类": dish_type, "位置": dish_pos, "时间": -3, "跳过收菜": False
15031508
}
1509+
window.ctDishBox.clear()
15041510
window.ctDishBox.addItems(ct_cooked_dishes_dict.keys())
15051511
window.enable_ct_button(len(ct_cooked_dishes_dict) > 0)
15061512
if packet.cmd_id == 1017: # 餐厅做菜信息
@@ -1537,9 +1543,9 @@ def process_recv_packet(socket_num, buff, length):
15371543
else: # 错误包
15381544
if packet.cmd_id == 1209: # 拉姆变身获得物品
15391545
if lamu_times == 0:
1540-
lamu_last_skill_success = False
1546+
is_last_skill_success = False
15411547
else:
1542-
lamu_max_skill_success = False
1548+
is_max_skill_success = False
15431549
else:
15441550
break
15451551
else:
@@ -1553,15 +1559,15 @@ def process_recv_packet(socket_num, buff, length):
15531559
if packet_len <= len(recv_buff):
15541560
# 不是断包
15551561
cipher = recv_buff[:packet_len]
1556-
if show_recv:
1562+
if is_show_recv:
15571563
show_data(Packet(cipher), "R <==", socket_num) # 界面添加recv数据
15581564
recv_buff = recv_buff[packet_len:]
15591565
else:
15601566
break
15611567
else:
15621568
break
15631569
elif cipher.startswith((b'\x3C\x70', b'\x3C\x3F')): # 其他包
1564-
if show_recv:
1570+
if is_show_recv:
15651571
show_data(Packet(cipher), "R <==", socket_num) # 界面添加recv数据
15661572
recv_buff = recv_buff[length:]
15671573

version.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"version": "1.6.2",
3-
"description": "- 修复:元素骑士卡牌升级修复当材料卡牌大于30张时无法升级的问题,分多个包发送,每个包最多处理30张材料"
2+
"version": "1.6.3",
3+
"description": "- 修复:元素骑士点击一键升级后,发送卡牌信息查询包后,导致卡牌选择框数据更新从而目标升级卡牌被改为默认的第1张的问题"
44
}

0 commit comments

Comments
 (0)