This commit is contained in:
baiqwerdvd 2024-05-26 22:49:36 +08:00
parent d83e0027ca
commit 4db0d70a0a
No known key found for this signature in database
GPG Key ID: 7717E46E1797411A
2 changed files with 55 additions and 41 deletions

View File

@ -16,6 +16,13 @@ async def send_char_snapshot(bot: Bot, ev: Event):
if uid is None: if uid is None:
return "你还没有绑定UID噢,请使用[ark绑定uid123]完成绑定!" return "你还没有绑定UID噢,请使用[ark绑定uid123]完成绑定!"
# 获取需要查询的页数
cur_page = ev.text.strip()
if cur_page.isdigit():
cur_page = int(cur_page)
else:
cur_page = 1
await bot.logger.info("开始执行[ark角色快照]") await bot.logger.info("开始执行[ark角色快照]")
im = await get_char_snapshot(uid) im = await get_char_snapshot(uid, cur_page)
await bot.send(im) await bot.send(im)

View File

@ -113,10 +113,6 @@ char_sort_list = [
TEXT_PATH = Path(__file__).parent / "texture2D" TEXT_PATH = Path(__file__).parent / "texture2D"
bg_img = Image.open(TEXT_PATH / "bg.jpg").convert("RGBA")
avatar_bg = Image.open(TEXT_PATH / "avatar_bg.png").resize((118, 118))
avatar_fg = Image.open(TEXT_PATH / "avatar_fg.png")
skill_selected = Image.open(TEXT_PATH / "skill_selected.png") skill_selected = Image.open(TEXT_PATH / "skill_selected.png")
skill_selected = skill_selected.resize((40, 40)) skill_selected = skill_selected.resize((40, 40))
data = skill_selected.getdata() data = skill_selected.getdata()
@ -131,7 +127,7 @@ skill_selected.putdata(new_data)
equip_selected = Image.open(TEXT_PATH / "equip_selected.png") equip_selected = Image.open(TEXT_PATH / "equip_selected.png")
async def get_char_snapshot(uid: str): async def get_char_snapshot(uid: str, cur_page: int):
data = await ark_skd_api.get_game_player_info(uid) data = await ark_skd_api.get_game_player_info(uid)
if isinstance(data, int): if isinstance(data, int):
return "查询失败, 请检查uid或者Cred是否正确" return "查询失败, 请检查uid或者Cred是否正确"
@ -142,12 +138,42 @@ async def get_char_snapshot(uid: str):
char_cnt = len(chars) char_cnt = len(chars)
six_star_count = 0 six_star_chars = [char for char in chars if charInfoMap[char.charId].rarity == 5]
outher_chars = [char for char in chars if charInfoMap[char.charId].rarity != 5]
six_star_count = len(six_star_chars)
other_char_count = len(outher_chars)
# 6星角色按照list的顺序排序
for char in chars: for char in chars:
char_id = char.charId char_id = char.charId
char_rarity = charInfoMap[char_id].rarity if charInfoMap[char_id].name not in char_sort_list:
if char_rarity == 5: char_sort_list.append(charInfoMap[char_id].name)
six_star_count += 1 six_star_chars = sorted(
six_star_chars,
key=lambda x: char_sort_list.index(charInfoMap[x.charId].name),
)
# 5,4,3,2,1星角色按照 evolvePhase, level, specializeLevelCount, potentialRank, charId 排序
for char in outher_chars:
char.specializeLevelCount = 0
if char.skills is None:
continue
for skill in char.skills:
char.specializeLevelCount += skill.specializeLevel # type: ignore
outher_chars = sorted(
outher_chars,
key=lambda x: (
x.evolvePhase,
x.level,
x.specializeLevelCount,
x.potentialRank,
x.charId,
),
reverse=True,
)
total_char = six_star_chars + outher_chars
if status.avatar is None: if status.avatar is None:
avatar_id = "avatar_activity_AW" avatar_id = "avatar_activity_AW"
@ -170,6 +196,9 @@ async def get_char_snapshot(uid: str):
(235, 235) (235, 235)
) )
bg_img = Image.open(TEXT_PATH / "bg.jpg").convert("RGBA")
avatar_fg = Image.open(TEXT_PATH / "avatar_fg.png")
avatar_fg_draw = ImageDraw.Draw(avatar_fg) avatar_fg_draw = ImageDraw.Draw(avatar_fg)
avatar_fg_draw.text( avatar_fg_draw.text(
(50, 39), (50, 39),
@ -209,39 +238,16 @@ async def get_char_snapshot(uid: str):
info_img = Image.open(TEXT_PATH / "info.png") info_img = Image.open(TEXT_PATH / "info.png")
bg_img.paste(info_img, (0, 440), mask=info_img) bg_img.paste(info_img, (0, 440), mask=info_img)
if six_star_count > 20: avail_page = (char_cnt + 16) // 17
chars = [char for char in chars if charInfoMap[char.charId].rarity == 5] if cur_page > avail_page:
# 按照list的顺序排序, 特殊处理不在list中的角色 cur_page = avail_page
for char in chars: if cur_page < 1:
char_id = char.charId cur_page = 1
if charInfoMap[char_id].name not in char_sort_list:
char_sort_list.append(charInfoMap[char_id].name)
chars = sorted( page_char = total_char[(cur_page - 1) * 17 : cur_page * 17]
chars,
key=lambda x: char_sort_list.index(charInfoMap[x.charId].name),
)
else:
for char in chars:
char.specializeLevelCount = 0
if char.skills is None:
continue
for skill in char.skills:
char.specializeLevelCount += skill.specializeLevel # type: ignore
chars = sorted(
chars,
key=lambda x: (
x.evolvePhase,
x.level,
x.specializeLevelCount,
x.potentialRank,
x.charId,
),
reverse=True,
)
for i in range(17): for i, char in enumerate(page_char):
img = draw_char(chars[i], charInfoMap, equipmentInfoMap) img = draw_char(char, charInfoMap, equipmentInfoMap)
bg_img.paste(img, (0, 490 + 110 * i), mask=img) bg_img.paste(img, (0, 490 + 110 * i), mask=img)
footer_img = Image.open(TEXT_PATH / "footer.png") footer_img = Image.open(TEXT_PATH / "footer.png")
@ -255,6 +261,7 @@ def draw_char(
charInfoMap: Dict[str, PlayerCharInfo], charInfoMap: Dict[str, PlayerCharInfo],
equipmentInfoMap: Dict[str, PlayerEquipmentInfo], equipmentInfoMap: Dict[str, PlayerEquipmentInfo],
): ):
avatar_bg = Image.open(TEXT_PATH / "avatar_bg.png").resize((118, 118))
bar_img: Image.Image = Image.open(TEXT_PATH / "bar.png").convert("RGBA") bar_img: Image.Image = Image.open(TEXT_PATH / "bar.png").convert("RGBA")
ui_char_avatar = ( ui_char_avatar = (