更新资源文件
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful

This commit is contained in:
fuyn101 2025-07-08 15:18:01 +08:00
parent 6a836b2505
commit 31e7242edc
52 changed files with 1043 additions and 856 deletions

@ -1 +1 @@
Subproject commit 39e36ab39ed8df3a68e8e424a08ab17edc0f0b09 Subproject commit 521d803b9647e42feb774630790adc703d75724c

@ -1 +1 @@
Subproject commit d6bad2e63c9c8055db38f231ede203de1280dde3 Subproject commit b29dbac9695b219094b0763018510b4bcc82ea6a

@ -1 +1 @@
Subproject commit a4869a31c7fc316e9fe2b4f2c7c26d4842ef8450 Subproject commit 83bf369929da847be61e7e9e2309028f4619260c

View file

@ -27,29 +27,47 @@ def 加载json(file_path):
class Arknights数据处理器: class Arknights数据处理器:
def __init__(self): def __init__(self):
self.当前时间戳 = datetime.now().timestamp() self.当前时间戳 = datetime.now().timestamp()
仓库_1 = "ArknightsGameResource/gamedata/excel" # noqa: F841 仓库_1 = "ArknightsGameResource/gamedata/excel" # noqa: F841
仓库_2 = "ArknightsGameData/zh_CN/gamedata/excel" # noqa: F841 仓库_2 = "ArknightsGameData/zh_CN/gamedata/excel" # noqa: F841
仓库_3 = "ArknightsResource/gamedata/excel" # noqa: F841 仓库_3 = "ArknightsResource/gamedata/excel" # noqa: F841
self.物品表 = 加载json(f"./{仓库_1}/item_table.json") self.物品表 = 加载json(f"./{仓库_2}/item_table.json")
self.干员表 = 加载json(f"./{仓库_1}/character_table.json")
self.阿米娅表 = 加载json(f"./{仓库_1}/char_patch_table.json") self.干员表 = 加载json(f"./{仓库_2}/character_table.json")
self.抽卡表 = 加载json(f"./{仓库_1}/gacha_table.json")
self.关卡表 = 加载json(f"./{仓库_1}/stage_table.json") self.阿米娅表 = 加载json(f"./{仓库_2}/char_patch_table.json")
self.活动表 = 加载json(f"./{仓库_1}/activity_table.json")
self.基建表 = 加载json(f"./{仓库_1}/building_data.json") self.抽卡表 = 加载json(f"./{仓库_2}/gacha_table.json")
self.游戏变量 = 加载json(f"./{仓库_1}/gamedata_const.json")
self.模组 = 加载json(f"./{仓库_1}/uniequip_table.json") self.关卡表 = 加载json(f"./{仓库_2}/stage_table.json")
self.战斗技能 = 加载json(f"./{仓库_1}/skill_table.json")
self.活动表 = 加载json(f"./{仓库_2}/activity_table.json")
self.基建表 = 加载json(f"./{仓库_2}/building_data.json")
self.游戏变量 = 加载json(f"./{仓库_2}/gamedata_const.json")
self.模组 = 加载json(f"./{仓库_2}/uniequip_table.json")
self.战斗技能 = 加载json(f"./{仓库_2}/skill_table.json")
self.装仓库物品的字典 = {"NORMAL": [], "CONSUME": [], "MATERIAL": []} self.装仓库物品的字典 = {"NORMAL": [], "CONSUME": [], "MATERIAL": []}
self.常驻关卡 = 加载json("mower/data/stage_data.json") self.常驻关卡 = 加载json("mower/data/stage_data.json")
self.所有buff = [] self.所有buff = []
self.限定十连 = self.抽卡表["limitTenGachaItem"] self.限定十连 = self.抽卡表["limitTenGachaItem"]
self.联动十连 = self.抽卡表["linkageTenGachaItem"] self.联动十连 = self.抽卡表["linkageTenGachaItem"]
self.普通十连 = self.抽卡表["normalGachaItem"] self.普通十连 = self.抽卡表["normalGachaItem"]
self.所有卡池 = self.限定十连 + self.联动十连 + self.普通十连 self.所有卡池 = self.限定十连 + self.联动十连 + self.普通十连
self.总掉落表 = [] self.总掉落表 = []
def 添加物品至前端文件(self): def 添加物品至前端文件(self):
@ -57,16 +75,21 @@ class Arknights数据处理器:
def 检查图标代码匹配(目标图标代码, 物品类型, 分类类型, 排序代码): def 检查图标代码匹配(目标图标代码, 物品类型, 分类类型, 排序代码):
匹配结果 = False 匹配结果 = False
for 池子限时物品 in self.所有卡池: for 池子限时物品 in self.所有卡池:
if ( if (
池子限时物品["itemId"] == 目标图标代码 池子限时物品["itemId"] == 目标图标代码
and self.当前时间戳 > 池子限时物品["endTime"] and self.当前时间戳 > 池子限时物品["endTime"]
): ):
匹配结果 = True 匹配结果 = True
break break
分割部分 = 目标图标代码.split("_") 分割部分 = 目标图标代码.split("_")
if len(分割部分) == 2 and 分割部分[0].endswith("recruitment10"): if len(分割部分) == 2 and 分割部分[0].endswith("recruitment10"):
匹配结果 = True 匹配结果 = True
if len(分割部分) == 6 and int(分割部分[5]) < 2023: if len(分割部分) == 6 and int(分割部分[5]) < 2023:
匹配结果 = True 匹配结果 = True
@ -75,91 +98,136 @@ class Arknights数据处理器:
if len(分割部分) == 3 and 目标图标代码.startswith("voucher_full"): if len(分割部分) == 3 and 目标图标代码.startswith("voucher_full"):
匹配结果 = True 匹配结果 = True
if 目标图标代码 == "ap_supply_lt_60": if 目标图标代码 == "ap_supply_lt_60":
匹配结果 = True 匹配结果 = True
抽卡 = self.抽卡表.get("gachaPoolClient", []) 抽卡 = self.抽卡表.get("gachaPoolClient", [])
for 卡池 in 抽卡: for 卡池 in 抽卡:
if 卡池["LMTGSID"] == 目标图标代码 and self.当前时间戳 > int( if 卡池["LMTGSID"] == 目标图标代码 and self.当前时间戳 > int(
卡池["endTime"] 卡池["endTime"]
): ):
匹配结果 = True 匹配结果 = True
if 分类类型 == "NONE": if 分类类型 == "NONE":
匹配结果 = True 匹配结果 = True
if 排序代码 <= 0: if 排序代码 <= 0:
匹配结果 = True 匹配结果 = True
if 分类类型 == "NONE": if 分类类型 == "NONE":
for item in self.总掉落表: for item in self.总掉落表:
if 目标图标代码 == item["id"]: if 目标图标代码 == item["id"]:
匹配结果 = False 匹配结果 = False
return 匹配结果 return 匹配结果
self.物品_名称_输出用 = {} self.物品_名称_输出用 = {}
self.物品_名称_模型用 = {} self.物品_名称_模型用 = {}
if not os.path.exists("./ui/public/depot/理智.webp"): if not os.path.exists("./ui/public/depot/理智.webp"):
png_image = Image.open("./ArknightsGameResource/item/AP_GAMEPLAY.png") png_image = Image.open("./ArknightsGameResource/item/AP_GAMEPLAY.png")
png_image.save("./ui/public/depot/理智.webp", "WEBP") png_image.save("./ui/public/depot/理智.webp", "WEBP")
if not os.path.exists("./ui/public/depot/EXP.webp"): if not os.path.exists("./ui/public/depot/EXP.webp"):
png_image = Image.open("./ArknightsGameResource/item/EXP_PLAYER.png") png_image = Image.open("./ArknightsGameResource/item/EXP_PLAYER.png")
png_image.save("./ui/public/depot/EXP.webp", "WEBP") png_image.save("./ui/public/depot/EXP.webp", "WEBP")
for 物品代码, 物品数据 in self.物品表["items"].items(): for 物品代码, 物品数据 in self.物品表["items"].items():
中文名称 = 物品数据.get("name", "") 中文名称 = 物品数据.get("name", "")
图标代码 = 物品数据.get("iconId", "") 图标代码 = 物品数据.get("iconId", "")
排序代码 = 物品数据.get("sortId", "") 排序代码 = 物品数据.get("sortId", "")
分类类型 = 物品数据.get("classifyType", "") 分类类型 = 物品数据.get("classifyType", "")
物品类型 = 物品数据.get("itemType", "") 物品类型 = 物品数据.get("itemType", "")
# 源文件路径 = f"./ArknightsGameResource/item/{图标代码}.png" # 源文件路径 = f"./ArknightsGameResource/item/{图标代码}.png"
源文件路径 = f"./ArknightsResource/items/{图标代码}.png" 源文件路径 = f"./ArknightsResource/items/{图标代码}.png"
排除开关 = False 排除开关 = False
排除开关 = 检查图标代码匹配(图标代码, 物品类型, 分类类型, 排序代码) 排除开关 = 检查图标代码匹配(图标代码, 物品类型, 分类类型, 排序代码)
if not 排除开关: if not 排除开关:
if os.path.exists(源文件路径): if os.path.exists(源文件路径):
目标文件路径 = f"./ui/public/depot/{中文名称}.webp" 目标文件路径 = f"./ui/public/depot/{中文名称}.webp"
if not os.path.exists(目标文件路径): if not os.path.exists(目标文件路径):
png_image = Image.open(源文件路径) png_image = Image.open(源文件路径)
png_image.save(目标文件路径, "WEBP") png_image.save(目标文件路径, "WEBP")
if 分类类型 != "NONE": if 分类类型 != "NONE":
self.装仓库物品的字典[分类类型].append( self.装仓库物品的字典[分类类型].append(
[目标文件路径, 源文件路径] [目标文件路径, 源文件路径]
) )
templist = [物品代码, 图标代码, 中文名称, 分类类型, 排序代码] templist = [物品代码, 图标代码, 中文名称, 分类类型, 排序代码]
self.物品_名称_输出用[物品代码] = templist self.物品_名称_输出用[物品代码] = templist
self.物品_名称_模型用[中文名称] = templist self.物品_名称_模型用[中文名称] = templist
self.物品_名称_模型用[物品代码] = templist self.物品_名称_模型用[物品代码] = templist
print(f"复制 {源文件路径}{目标文件路径}") print(f"复制 {源文件路径}{目标文件路径}")
with open("./mower/data/key_mapping.json", "w", encoding="utf8") as json_file: with open("./mower/data/key_mapping.json", "w", encoding="utf8") as json_file:
json.dump(self.物品_名称_输出用, json_file, ensure_ascii=False, indent=4) json.dump(self.物品_名称_输出用, json_file, ensure_ascii=False, indent=4)
print() print()
def 干员列表(self): def 干员列表(self):
"""读取干员列表并输出至./mower/data/agent.json""" """读取干员列表并输出至./mower/data/agent.json"""
干员_名称字典 = {} 干员_名称字典 = {}
for 干员代码, 干员数据 in self.干员表.items(): for 干员代码, 干员数据 in self.干员表.items():
if not 干员数据["itemObtainApproach"]: if not 干员数据["itemObtainApproach"]:
continue continue
干员名 = 干员数据["name"] 干员名 = 干员数据["name"]
干员_名称字典[干员名] = { 干员_名称字典[干员名] = {
"key": 干员代码, "key": 干员代码,
"profession": 干员数据["profession"], "profession": 干员数据["profession"],
"name": 干员数据["appellation"], "name": 干员数据["appellation"],
} }
干员头像路径 = f"./ArknightsGameResource/avatar/{干员代码}.png" 干员头像路径 = f"./ArknightsGameResource/avatar/{干员代码}.png"
# 干员头像路径 = f"./ArknightsResource/avatar/ASSISTANT/{干员代码}.png" # 干员头像路径 = f"./ArknightsResource/avatar/ASSISTANT/{干员代码}.png"
目标路径 = f"./ui/public/avatar/{干员数据['name']}.webp" 目标路径 = f"./ui/public/avatar/{干员数据['name']}.webp"
if os.path.exists(目标路径): if os.path.exists(目标路径):
continue continue
print(f"{干员名}: {干员代码}") print(f"{干员名}: {干员代码}")
png_image = Image.open(干员头像路径) png_image = Image.open(干员头像路径)
png_image.save(目标路径, "WEBP") png_image.save(目标路径, "WEBP")
干员_名称字典 = dict( 干员_名称字典 = dict(
sorted(干员_名称字典.items(), key=lambda item: len(item[0])) sorted(干员_名称字典.items(), key=lambda item: len(item[0]))
) )
with open("./mower/data/agent.json", "w", encoding="utf-8") as f: with open("./mower/data/agent.json", "w", encoding="utf-8") as f:
json.dump(干员_名称字典, f, ensure_ascii=False, indent=4) json.dump(干员_名称字典, f, ensure_ascii=False, indent=4)
def 读取卡池(self): def 读取卡池(self):
"""读取当前开放的卡池,暂无输出""" """读取当前开放的卡池,暂无输出"""
抽卡 = self.抽卡表.get("gachaPoolClient", []) 抽卡 = self.抽卡表.get("gachaPoolClient", [])
卡池类型映射 = { 卡池类型映射 = {
"SINGLE": "单人池", "SINGLE": "单人池",
"LIMITED": "限定池", "LIMITED": "限定池",
@ -173,85 +241,121 @@ class Arknights数据处理器:
for in 抽卡: for in 抽卡:
卡池名称 = .get("gachaPoolName") 卡池名称 = .get("gachaPoolName")
开始时间戳 = .get("openTime") 开始时间戳 = .get("openTime")
结束时间戳 = .get("endTime") 结束时间戳 = .get("endTime")
卡池类型代码 = .get("gachaPoolId") 卡池类型代码 = .get("gachaPoolId")
卡池出人 = .get("dynMeta") 卡池出人 = .get("dynMeta")
if self.当前时间戳 < 结束时间戳: if self.当前时间戳 < 结束时间戳:
卡池类型 = 卡池类型映射.get(卡池类型代码.split("_")[0], 卡池类型代码) 卡池类型 = 卡池类型映射.get(卡池类型代码.split("_")[0], 卡池类型代码)
if 卡池类型代码.split("_")[1] == "ATTAIN": if 卡池类型代码.split("_")[1] == "ATTAIN":
卡池类型 = "跨年中坚池" 卡池类型 = "跨年中坚池"
if 卡池名称 == "适合多种场合的强力干员": if 卡池名称 == "适合多种场合的强力干员":
卡池名称 = 卡池类型 卡池名称 = 卡池类型
开始时间 = datetime.fromtimestamp(开始时间戳) 开始时间 = datetime.fromtimestamp(开始时间戳)
结束时间 = datetime.fromtimestamp(结束时间戳 + 1) 结束时间 = datetime.fromtimestamp(结束时间戳 + 1)
print("卡池名称:", 卡池名称) print("卡池名称:", 卡池名称)
print("卡池类型:", 卡池类型) print("卡池类型:", 卡池类型)
if 卡池类型 == "中坚池": if 卡池类型 == "中坚池":
print( print(
卡池出人["main6RarityCharId"], 卡池出人["main6RarityCharId"],
卡池出人["sub6RarityCharId"], 卡池出人["sub6RarityCharId"],
卡池出人["rare5CharList"], 卡池出人["rare5CharList"],
) )
if self.当前时间戳 > 开始时间戳: if self.当前时间戳 > 开始时间戳:
print("正在进行") print("正在进行")
print("卡池结束时间:", 结束时间) print("卡池结束时间:", 结束时间)
else: else:
print("卡池开始时间:", 开始时间) print("卡池开始时间:", 开始时间)
print("卡池结束时间:", 结束时间) print("卡池结束时间:", 结束时间)
print(卡池类型代码) print(卡池类型代码)
print() print()
def 输出_活动关卡和掉落(self): def 输出_活动关卡和掉落(self):
"""读取活动关卡及掉落物并写入./ui/src/pages/stage_data/event_data.json""" """读取活动关卡及掉落物并写入./ui/src/pages/stage_data/event_data.json"""
关卡 = self.关卡表["stageValidInfo"] 关卡 = self.关卡表["stageValidInfo"]
还未结束的非常驻关卡 = { 还未结束的非常驻关卡 = {
: :
for , in 关卡.items() for , in 关卡.items()
if ["endTs"] != -1 and ["endTs"] > self.当前时间戳 if ["endTs"] != -1 and ["endTs"] > self.当前时间戳
} }
还未结束的非常驻关卡 = dict(sorted(还未结束的非常驻关卡.items())) 还未结束的非常驻关卡 = dict(sorted(还未结束的非常驻关卡.items()))
for , _ in 还未结束的非常驻关卡.items(): for , _ in 还未结束的非常驻关卡.items():
关卡代码 = self.关卡表["stages"][]["code"] 关卡代码 = self.关卡表["stages"][]["code"]
if .endswith("#f#"): if .endswith("#f#"):
关卡代码 += " 突袭" 关卡代码 += " 突袭"
关卡名称 = self.关卡表["stages"][]["name"] 关卡名称 = self.关卡表["stages"][]["name"]
关卡开始时间戳 = 还未结束的非常驻关卡[]["startTs"] 关卡开始时间戳 = 还未结束的非常驻关卡[]["startTs"]
关卡结束时间戳 = 还未结束的非常驻关卡[]["endTs"] 关卡结束时间戳 = 还未结束的非常驻关卡[]["endTs"]
关卡消耗理智 = self.关卡表["stages"][]["apCost"] 关卡消耗理智 = self.关卡表["stages"][]["apCost"]
# 关卡结束时间 = datetime.fromtimestamp(还未结束的非常驻关卡[键]["endTs"] + 1) # 关卡结束时间 = datetime.fromtimestamp(还未结束的非常驻关卡[键]["endTs"] + 1)
关卡掉落表 = self.关卡表["stages"][]["stageDropInfo"][ 关卡掉落表 = self.关卡表["stages"][]["stageDropInfo"][
"displayDetailRewards" "displayDetailRewards"
] ]
# print(f"{关卡代码=}{关卡掉落表=}") # print(f"{关卡代码=}{关卡掉落表=}")
self.总掉落表.extend(关卡掉落表) self.总掉落表.extend(关卡掉落表)
关卡掉落 = {} 关卡掉落 = {}
突袭首次掉落 = [ 突袭首次掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"]) self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表 for item in 关卡掉落表
if item["dropType"] in {1, "ONCE"} if item["dropType"] in {1, "ONCE"}
] ]
常规掉落 = [ 常规掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"]) self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表 for item in 关卡掉落表
if item["dropType"] in {2, "NORMAL"} if item["dropType"] in {2, "NORMAL"}
] ]
特殊掉落 = [ 特殊掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"]) self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表 for item in 关卡掉落表
if item["dropType"] in {3, "SPECIAL"} if item["dropType"] in {3, "SPECIAL"}
] ]
额外物资 = [ 额外物资 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"]) self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表 for item in 关卡掉落表
if item["dropType"] in {4, "ADDITIONAL"} if item["dropType"] in {4, "ADDITIONAL"}
] ]
首次掉落 = [ 首次掉落 = [
self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"]) self.物品表.get("items", {}).get(item["id"], {}).get("name", item["id"])
for item in 关卡掉落表 for item in 关卡掉落表
if item["dropType"] in {8, "COMPLETE"} if item["dropType"] in {8, "COMPLETE"}
] ]
关卡掉落 = { 关卡掉落 = {
"突袭首次掉落": 突袭首次掉落, "突袭首次掉落": 突袭首次掉落,
"常规掉落": 常规掉落, "常规掉落": 常规掉落,
@ -278,10 +382,14 @@ class Arknights数据处理器:
"周日": 1, "周日": 1,
} }
) )
unkey = 0 unkey = 0
for item in self.常驻关卡: for item in self.常驻关卡:
item["key"] = unkey item["key"] = unkey
unkey += 1 unkey += 1
with open( with open(
"./ui/src/pages/stage_data/event_data.json", "w", encoding="utf-8" "./ui/src/pages/stage_data/event_data.json", "w", encoding="utf-8"
) as f: ) as f:
@ -289,6 +397,7 @@ class Arknights数据处理器:
def 输出_公招资源(self): def 输出_公招资源(self):
recruit_data = {} recruit_data = {}
recruit_result_data = { recruit_result_data = {
4: [], 4: [],
3: [], 3: [],
@ -296,29 +405,47 @@ class Arknights数据处理器:
1: [], 1: [],
-1: [], -1: [],
} }
# for 干员代码, 干员数据 in self.干员表.items(): # for 干员代码, 干员数据 in self.干员表.items():
# print(干员代码,干员数据) # print(干员代码,干员数据)
recruit_list = self.抽卡表["recruitDetail"].replace("\\n<@rc.eml>", "") recruit_list = self.抽卡表["recruitDetail"].replace("\\n<@rc.eml>", "")
recruit_list = recruit_list.replace("\\n", "") recruit_list = recruit_list.replace("\\n", "")
recruit_list = recruit_list.replace("\r", "") recruit_list = recruit_list.replace("\r", "")
recruit_list = recruit_list.replace("", "") recruit_list = recruit_list.replace("", "")
recruit_list = recruit_list.replace("<@rc.eml>", "") recruit_list = recruit_list.replace("<@rc.eml>", "")
recruit_list = recruit_list.replace("</>", "") recruit_list = recruit_list.replace("</>", "")
recruit_list = recruit_list.replace("/", "") recruit_list = recruit_list.replace("/", "")
recruit_list = recruit_list.replace(" ", "\n") recruit_list = recruit_list.replace(" ", "\n")
recruit_list = recruit_list.replace("--------------------", "") recruit_list = recruit_list.replace("--------------------", "")
recruit_list = recruit_list.replace("<@rc.title>公开招募说明", "") recruit_list = recruit_list.replace("<@rc.title>公开招募说明", "")
recruit_list = recruit_list.replace("<@rc.em>※稀有职业需求招募说明※", "") recruit_list = recruit_list.replace("<@rc.em>※稀有职业需求招募说明※", "")
recruit_list = recruit_list.replace( recruit_list = recruit_list.replace(
"<@rc.em>当职业需求包含高级资深干员,且招募时限为9小时时,招募必得6星干员", "<@rc.em>当职业需求包含高级资深干员,且招募时限为9小时时,招募必得6星干员",
"", "",
) )
recruit_list = recruit_list.replace( recruit_list = recruit_list.replace(
"<@rc.em>当职业需求包含资深干员同时不包含高级资深干员,且招募时限为9小时,则该次招募必得5星干员", "<@rc.em>当职业需求包含资深干员同时不包含高级资深干员,且招募时限为9小时,则该次招募必得5星干员",
"", "",
) )
recruit_list = recruit_list.replace("<@rc.subtitle>※全部可能出现的干员※", "") recruit_list = recruit_list.replace("<@rc.subtitle>※全部可能出现的干员※", "")
recruit_list = recruit_list.replace("绿色高亮的不可寻访干员,可以在此招募", "") recruit_list = recruit_list.replace("绿色高亮的不可寻访干员,可以在此招募", "")
recruit_list = recruit_list.split("\n") recruit_list = recruit_list.split("\n")
profession = { profession = {
@ -340,28 +467,37 @@ class Arknights数据处理器:
if 干员名 in recruit_list: if 干员名 in recruit_list:
tag = 干员数据["tagList"] tag = 干员数据["tagList"]
# 数据中稀有度从0-5 # 数据中稀有度从0-5
if isinstance(干员数据["rarity"], str) and 干员数据[ if isinstance(干员数据["rarity"], str) and 干员数据[
"rarity" "rarity"
].startswith("TIER_"): ].startswith("TIER_"):
干员数据["rarity"] = int(干员数据["rarity"][-1]) # 减一没了 干员数据["rarity"] = int(干员数据["rarity"][-1]) # 减一没了
elif isinstance(干员数据["rarity"], int): elif isinstance(干员数据["rarity"], int):
干员数据["rarity"] += 1 干员数据["rarity"] += 1
else: else:
raise ValueError( raise ValueError(
f"出错:数据结构不对,内容是 {干员数据['rarity']},类型是 {type(干员数据['rarity'])}" f"出错:数据结构不对,内容是 {干员数据['rarity']},类型是 {type(干员数据['rarity'])}"
) )
if len(干员名) <= 4: if len(干员名) <= 4:
recruit_result_data[len(干员名)].append(干员代码) recruit_result_data[len(干员名)].append(干员代码)
else: else:
recruit_result_data[-1].append(干员代码) recruit_result_data[-1].append(干员代码)
if 干员数据["rarity"] == 5: if 干员数据["rarity"] == 5:
tag.append("资深干员") tag.append("资深干员")
elif 干员数据["rarity"] == 6: elif 干员数据["rarity"] == 6:
tag.append("高级资深干员") tag.append("高级资深干员")
if 干员数据["position"] == "MELEE": if 干员数据["position"] == "MELEE":
tag.append("近战位") tag.append("近战位")
elif 干员数据["position"] == "RANGED": elif 干员数据["position"] == "RANGED":
tag.append("远程位") tag.append("远程位")
@ -377,13 +513,16 @@ class Arknights数据处理器:
干员名, 干员数据["rarity"], 干员数据["tagList"] 干员名, 干员数据["rarity"], 干员数据["tagList"]
) )
) )
print("载入公招干员数据{}".format(len(recruit_data))) print("载入公招干员数据{}".format(len(recruit_data)))
with open("./mower/data/recruit.json", "w", encoding="utf-8") as f: with open("./mower/data/recruit.json", "w", encoding="utf-8") as f:
json.dump(recruit_data, f, ensure_ascii=False, indent=4) json.dump(recruit_data, f, ensure_ascii=False, indent=4)
def 训练仓库的knn模型(self, 模板文件夹, 模型保存路径): def 训练仓库的knn模型(self, 模板文件夹, 模型保存路径):
def 提取特征点(模板): def 提取特征点(模板):
模板 = 模板[40:173, 40:173] 模板 = 模板[40:173, 40:173]
hog_features = hog( hog_features = hog(
模板, 模板,
orientations=18, orientations=18,
@ -398,20 +537,29 @@ class Arknights数据处理器:
def 加载图片特征点_标签(模板类型): def 加载图片特征点_标签(模板类型):
特征点列表 = [] 特征点列表 = []
标签列表 = [] 标签列表 = []
for [目标文件路径, 源文件路径] in self.装仓库物品的字典[模板类型]: for [目标文件路径, 源文件路径] in self.装仓库物品的字典[模板类型]:
模板 = cv2.imread(源文件路径) 模板 = cv2.imread(源文件路径)
模板 = cv2.resize(模板, (213, 213)) 模板 = cv2.resize(模板, (213, 213))
特征点 = 提取特征点(模板) 特征点 = 提取特征点(模板)
特征点列表.append(特征点) 特征点列表.append(特征点)
标签列表.append(self.物品_名称_模型用[目标文件路径[18:-5]][2]) 标签列表.append(self.物品_名称_模型用[目标文件路径[18:-5]][2])
return 特征点列表, 标签列表 return 特征点列表, 标签列表
def 训练knn模型(images, labels): def 训练knn模型(images, labels):
knn_classifier = KNeighborsClassifier( knn_classifier = KNeighborsClassifier(
weights="distance", n_neighbors=1, n_jobs=1 weights="distance", n_neighbors=1, n_jobs=1
) )
knn_classifier.fit(images, labels) knn_classifier.fit(images, labels)
return knn_classifier return knn_classifier
def 保存knn模型(classifier, filename): def 保存knn模型(classifier, filename):
@ -419,16 +567,21 @@ class Arknights数据处理器:
pickle.dump(classifier, f) pickle.dump(classifier, f)
模板特征点, 模板标签 = 加载图片特征点_标签(模板文件夹) 模板特征点, 模板标签 = 加载图片特征点_标签(模板文件夹)
knn模型 = 训练knn模型(模板特征点, 模板标签) knn模型 = 训练knn模型(模板特征点, 模板标签)
保存knn模型(knn模型, 模型保存路径) 保存knn模型(knn模型, 模型保存路径)
def 输出_扫仓库模型(self): def 输出_扫仓库模型(self):
"""输出扫描仓库的Knn模型 """输出扫描仓库的Knn模型
和添加物品至前端文件() 有联动 添加物品提供了分类的图片位置""" 和添加物品至前端文件() 有联动 添加物品提供了分类的图片位置"""
self.训练仓库的knn模型("NORMAL", "./mower/static/NORMAL.pkl") self.训练仓库的knn模型("NORMAL", "./mower/static/NORMAL.pkl")
self.训练仓库的knn模型("CONSUME", "./mower/static/CONSUME.pkl") self.训练仓库的knn模型("CONSUME", "./mower/static/CONSUME.pkl")
self.训练仓库的knn模型("MATERIAL", "./mower/static/MATERIAL.pkl") self.训练仓库的knn模型("MATERIAL", "./mower/static/MATERIAL.pkl")
def 输出_在房间内的干员名的模型(self): def 输出_在房间内的干员名的模型(self):
@ -440,22 +593,36 @@ class Arknights数据处理器:
with open("./mower/data/agent.json", "r", encoding="utf-8") as f: with open("./mower/data/agent.json", "r", encoding="utf-8") as f:
agent_list = json.load(f) agent_list = json.load(f)
for operator in sorted(agent_list, key=lambda x: len(x), reverse=True): for operator in sorted(agent_list, key=lambda x: len(x), reverse=True):
img = Image.new(mode="L", size=(400, 100)) img = Image.new(mode="L", size=(400, 100))
draw = ImageDraw.Draw(img) draw = ImageDraw.Draw(img)
draw.text((50, 20), operator, fill=(255,), font=font) draw.text((50, 20), operator, fill=(255,), font=font)
img = np.array(img, dtype=np.uint8) img = np.array(img, dtype=np.uint8)
img = thres2(img, 200) img = thres2(img, 200)
dilation = cv2.dilate(img, kernel, iterations=1) dilation = cv2.dilate(img, kernel, iterations=1)
contours, _ = cv2.findContours( contours, _ = cv2.findContours(
dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE
) )
rect = map(lambda c: cv2.boundingRect(c), contours) rect = map(lambda c: cv2.boundingRect(c), contours)
x, y, w, h = sorted(rect, key=lambda c: c[0])[0] x, y, w, h = sorted(rect, key=lambda c: c[0])[0]
img = img[y : y + h, x : x + w] img = img[y : y + h, x : x + w]
tpl = np.zeros((46, 265), dtype=np.uint8) tpl = np.zeros((46, 265), dtype=np.uint8)
tpl[: img.shape[0], : img.shape[1]] = img tpl[: img.shape[0], : img.shape[1]] = img
# cv2.imwrite(f"/home/zhao/Desktop/data/{operator}.png", tpl) # cv2.imwrite(f"/home/zhao/Desktop/data/{operator}.png", tpl)
data[operator] = tpl data[operator] = tpl
with lzma.open("mower/static/operator_room.model", "wb") as f: with lzma.open("mower/static/operator_room.model", "wb") as f:
@ -463,70 +630,109 @@ class Arknights数据处理器:
def avatar_and_portrait(self, save_img=False): def avatar_and_portrait(self, save_img=False):
mapping = {} # char_285_medic2 -> Lancet-2 mapping = {} # char_285_medic2 -> Lancet-2
for name, data in self.干员表.items(): for name, data in self.干员表.items():
mapping[name] = data["name"] mapping[name] = data["name"]
for name in self.阿米娅表["infos"]["char_002_amiya"]["tmplIds"]: for name in self.阿米娅表["infos"]["char_002_amiya"]["tmplIds"]:
mapping[name] = "阿米娅" mapping[name] = "阿米娅"
def extract(name, scope): def extract(name, scope):
data_path = f"./ArknightsGameResource/{name}" data_path = f"./ArknightsGameResource/{name}"
# data_path = f"./ArknightsResource/{name}" # data_path = f"./ArknightsResource/{name}"
file_list = os.listdir(data_path) file_list = os.listdir(data_path)
h, w = loadimg(os.path.join(data_path, file_list[0]), True).shape h, w = loadimg(os.path.join(data_path, file_list[0]), True).shape
total = len(file_list) total = len(file_list)
col = math.ceil(math.sqrt(total * h / w)) col = math.ceil(math.sqrt(total * h / w))
row = math.ceil(total / col) row = math.ceil(total / col)
full = np.zeros((row * h, col * w), dtype=np.uint8) full = np.zeros((row * h, col * w), dtype=np.uint8)
mask = full.copy() mask = full.copy()
name_list = [] name_list = []
i = 0 i = 0
trap_list = [] trap_list = []
for filename in file_list: for filename in file_list:
if filename == "char_017_huang2.png": if filename == "char_017_huang2.png":
continue continue
x = (i % col) * w x = (i % col) * w
y = (i // col) * h y = (i // col) * h
mx, my = sa(scope, (x, y)) mx, my = sa(scope, (x, y))
# filename: char_285_medic2_1.png # filename: char_285_medic2_1.png
for j, k in mapping.items(): for j, k in mapping.items():
# j: char_285_medic2 # j: char_285_medic2
# k: Lancet-2 # k: Lancet-2
if filename.startswith(j): if filename.startswith(j):
if filename.startswith("trap_"): if filename.startswith("trap_"):
if k in trap_list: if k in trap_list:
break break
trap_list.append(k) trap_list.append(k)
img = loadimg(os.path.join(data_path, filename), True) img = loadimg(os.path.join(data_path, filename), True)
if img.shape != (h, w): if img.shape != (h, w):
img = cv2.resize(img, (w, h)) img = cv2.resize(img, (w, h))
full[y : y + h, x : x + w] = img full[y : y + h, x : x + w] = img
cv2.rectangle(mask, mx, my, (255,), -1) cv2.rectangle(mask, mx, my, (255,), -1)
name_list.append(k) name_list.append(k)
i += 1 i += 1
break break
if save_img: if save_img:
disp = cv2.bitwise_and(full, mask) disp = cv2.bitwise_and(full, mask)
cv2.imwrite(f"{name}.png", disp) cv2.imwrite(f"{name}.png", disp)
kp, des = fast_keypoints(full, mask) kp, des = fast_keypoints(full, mask)
pt = [p.pt for p in kp] pt = [p.pt for p in kp]
data = {"w": w, "h": h, "col": col, "name": name_list, "pt": pt, "des": des} data = {"w": w, "h": h, "col": col, "name": name_list, "pt": pt, "des": des}
if name == "avatar/ASSISTANT": if name == "avatar/ASSISTANT":
name = "avatar" name = "avatar"
if name == "charpor": if name == "charpor":
name = "portrait" name = "portrait"
with lzma.open(f"./mower/static/{name}.pkl", "wb") as f: with lzma.open(f"./mower/static/{name}.pkl", "wb") as f:
pickle.dump(data, f) pickle.dump(data, f)
extract("avatar", ((20, 51), (160, 146))) extract("avatar", ((20, 51), (160, 146)))
extract("portrait", ((20, 115), (160, 190))) extract("portrait", ((20, 115), (160, 190)))
# extract("avatar/ASSISTANT", ((20, 51), (160, 146))) # extract("avatar/ASSISTANT", ((20, 51), (160, 146)))
# extract("charpor", ((20, 51), (160, 146))) # extract("charpor", ((20, 51), (160, 146)))
def 获得干员基建描述(self): def 获得干员基建描述(self):
buff描述 = self.基建表["buffs"] buff描述 = self.基建表["buffs"]
buff_table = {} buff_table = {}
for buff名称, 相关buff in buff描述.items(): for buff名称, 相关buff in buff描述.items():
buff_table[buff名称] = [ buff_table[buff名称] = [
相关buff["buffName"], 相关buff["buffName"],
@ -541,6 +747,7 @@ class Arknights数据处理器:
干员技能列表 = [] 干员技能列表 = []
name_key = 0 name_key = 0
for 角色id, 相关buff in self.基建表["chars"].items(): for 角色id, 相关buff in self.基建表["chars"].items():
干员技能字典 = { 干员技能字典 = {
"key": 0, "key": 0,
@ -549,11 +756,20 @@ class Arknights数据处理器:
"child_skill": [], "child_skill": [],
} }
try:
干员技能字典["name"] = self.干员表[角色id]["name"] 干员技能字典["name"] = self.干员表[角色id]["name"]
except KeyError:
print(f"警告:在干员表中找不到 角色id '{角色id}',已跳过。")
continue
skill_key = 0 skill_key = 0
name_key += 1 name_key += 1
干员技能字典["key"] = name_key 干员技能字典["key"] = name_key
for item in 相关buff["buffChar"]: for item in 相关buff["buffChar"]:
skill_level = 0 skill_level = 0
@ -562,8 +778,11 @@ class Arknights数据处理器:
干员技能详情 = {} 干员技能详情 = {}
干员技能详情["skill_key"] = skill_key 干员技能详情["skill_key"] = skill_key
干员技能详情["skill_level"] = skill_level 干员技能详情["skill_level"] = skill_level
skill_level += 1 skill_level += 1
phase = ( phase = (
item2["cond"]["phase"][-1] item2["cond"]["phase"][-1]
if isinstance(item2["cond"]["phase"], (list, str)) if isinstance(item2["cond"]["phase"], (list, str))
@ -573,55 +792,84 @@ class Arknights数据处理器:
干员技能详情["phase_level"] = ( 干员技能详情["phase_level"] = (
f"{phase} {item2['cond']['level']}" f"{phase} {item2['cond']['level']}"
) )
干员技能详情["skillname"] = buff_table[item2["buffId"]][0] 干员技能详情["skillname"] = buff_table[item2["buffId"]][0]
text = buff_table[item2["buffId"]][1] text = buff_table[item2["buffId"]][1]
pattern = r"<\$(.*?)>" pattern = r"<\$(.*?)>"
matches = re.findall(pattern, text) matches = re.findall(pattern, text)
ex_string = [] ex_string = []
干员技能详情["buffer"] = False 干员技能详情["buffer"] = False
干员技能详情["buffer_des"] = [] 干员技能详情["buffer_des"] = []
if matches: if matches:
干员技能详情["buffer"] = True 干员技能详情["buffer"] = True
ex_string = list( ex_string = list(
set([match.replace(".", "_") for match in matches]) set([match.replace(".", "_") for match in matches])
) )
ex_string.sort() ex_string.sort()
干员技能详情["buffer_des"] = ex_string 干员技能详情["buffer_des"] = ex_string
self.所有buff.extend(ex_string) self.所有buff.extend(ex_string)
干员技能详情["des"] = text 干员技能详情["des"] = text
干员技能详情["roomType"] = roomType[ 干员技能详情["roomType"] = roomType[
buff_table[item2["buffId"]][2] buff_table[item2["buffId"]][2]
] ]
干员技能详情["buffCategory"] = buff_table[item2["buffId"]][3] 干员技能详情["buffCategory"] = buff_table[item2["buffId"]][3]
干员技能详情["skillIcon"] = buff_table[item2["buffId"]][4] 干员技能详情["skillIcon"] = buff_table[item2["buffId"]][4]
干员技能详情["buffColor"] = buff_table[item2["buffId"]][5] 干员技能详情["buffColor"] = buff_table[item2["buffId"]][5]
干员技能详情["textColor"] = buff_table[item2["buffId"]][6] 干员技能详情["textColor"] = buff_table[item2["buffId"]][6]
干员技能字典["child_skill"].append(干员技能详情) 干员技能字典["child_skill"].append(干员技能详情)
干员技能详情 = [] 干员技能详情 = []
干员技能字典["span"] = len(干员技能字典["child_skill"]) 干员技能字典["span"] = len(干员技能字典["child_skill"])
skill_key += 1 skill_key += 1
干员技能列表.append(干员技能字典.copy()) 干员技能列表.append(干员技能字典.copy())
干员技能列表 = sorted(干员技能列表, key=lambda x: (-x["key"])) 干员技能列表 = sorted(干员技能列表, key=lambda x: (-x["key"]))
# print(干员技能列表) # print(干员技能列表)
with open("./mower/data/building_skill/skill.json", "w", encoding="utf-8") as f: with open("./mower/data/building_skill/skill.json", "w", encoding="utf-8") as f:
json.dump(干员技能列表, f, ensure_ascii=False, indent=4) json.dump(干员技能列表, f, ensure_ascii=False, indent=4)
def 转换输出基建buff(self): def 转换输出基建buff(self):
buff_table = {} buff_table = {}
pattern = r"<\$(.*?)>" pattern = r"<\$(.*?)>"
for item in self.游戏变量["termDescriptionDict"]: for item in self.游戏变量["termDescriptionDict"]:
matches = re.findall( matches = re.findall(
pattern, self.游戏变量["termDescriptionDict"][item]["description"] pattern, self.游戏变量["termDescriptionDict"][item]["description"]
) )
matches = [match.replace(".", "_") for match in matches] matches = [match.replace(".", "_") for match in matches]
dict1 = self.游戏变量["termDescriptionDict"][item] dict1 = self.游戏变量["termDescriptionDict"][item]
dict1["buffer"] = [] dict1["buffer"] = []
if item.startswith("cc") and matches: if item.startswith("cc") and matches:
dict1["buffer"] = matches dict1["buffer"] = matches
buff_table[item.replace(".", "_")] = dict1 buff_table[item.replace(".", "_")] = dict1
with open( with open(
@ -631,41 +879,58 @@ class Arknights数据处理器:
def 添加基建技能图标(self): def 添加基建技能图标(self):
# 源目录和目标目录 # 源目录和目标目录
source_dir = "./ArknightsGameResource/building_skill" source_dir = "./ArknightsGameResource/building_skill"
destination_dir = "./ui/public/building_skill" destination_dir = "./ui/public/building_skill"
# 创建目标目录(如果不存在) # 创建目标目录(如果不存在)
os.makedirs(destination_dir, exist_ok=True) os.makedirs(destination_dir, exist_ok=True)
# 遍历源目录中的所有文件 # 遍历源目录中的所有文件
for root, dirs, files in os.walk(source_dir): for root, dirs, files in os.walk(source_dir):
for file in files: for file in files:
if file.endswith(".png"): if file.endswith(".png"):
src_file_path = os.path.join(root, file) src_file_path = os.path.join(root, file)
# 修改文件扩展名为 .webp # 修改文件扩展名为 .webp
dest_file_name = os.path.splitext(file)[0] + ".webp" dest_file_name = os.path.splitext(file)[0] + ".webp"
dest_file_path = os.path.join(destination_dir, dest_file_name) dest_file_path = os.path.join(destination_dir, dest_file_name)
if not os.path.exists(dest_file_path): if not os.path.exists(dest_file_path):
with Image.open(src_file_path) as img: with Image.open(src_file_path) as img:
img.save(dest_file_path, "webp") img.save(dest_file_path, "webp")
print(f"转换: {src_file_path}{dest_file_path}") print(f"转换: {src_file_path}{dest_file_path}")
else: else:
print(f"跳过: {dest_file_path} 已存在") print(f"跳过: {dest_file_path} 已存在")
def 输出_前端基建资源(self): def 输出_前端基建资源(self):
self.获得干员基建描述() self.获得干员基建描述()
self.转换输出基建buff() self.转换输出基建buff()
self.添加基建技能图标() self.添加基建技能图标()
def levels(self): def levels(self):
levels_json = 加载json("./ArknightsGameResource/levels.json") levels_json = 加载json("./ArknightsGameResource/levels.json")
LEVELS = [Level.from_json(data) for data in levels_json] LEVELS = [Level.from_json(data) for data in levels_json]
with lzma.open("mower/static/levels.pkl", "wb") as f: with lzma.open("mower/static/levels.pkl", "wb") as f:
pickle.dump(LEVELS, f) pickle.dump(LEVELS, f)
def 读取模组(self): def 读取模组(self):
_ = [] _ = []
for item in self.模组["missionList"]: for item in self.模组["missionList"]:
_.append(self.模组["missionList"][item]["template"]) _.append(self.模组["missionList"][item]["template"])
template_list = list({}.fromkeys(_).keys()) template_list = list({}.fromkeys(_).keys())
print(template_list) print(template_list)
@ -673,21 +938,30 @@ class Arknights数据处理器:
for 干员代码, 干员数据 in self.干员表.items(): for 干员代码, 干员数据 in self.干员表.items():
if not 干员数据["itemObtainApproach"]: if not 干员数据["itemObtainApproach"]:
continue continue
干员名 = 干员数据["name"] 干员名 = 干员数据["name"]
print(干员名) print(干员名)
for 技能数, item in enumerate(干员数据["skills"]): for 技能数, item in enumerate(干员数据["skills"]):
技能图标名 = self.战斗技能[item["skillId"]]["iconId"] or item["skillId"] 技能图标名 = self.战斗技能[item["skillId"]]["iconId"] or item["skillId"]
干员技能路径 = f"./ArknightsResource/skills/skill_icon_{技能图标名}.png" 干员技能路径 = f"./ArknightsResource/skills/skill_icon_{技能图标名}.png"
os.makedirs( os.makedirs(
f"./mower/static/avatar_skill/{干员数据['name']}", exist_ok=True f"./mower/static/avatar_skill/{干员数据['name']}", exist_ok=True
) )
目标路径 = ( 目标路径 = (
f"./mower/static/avatar_skill/{干员数据['name']}/{技能数 + 1}.png" f"./mower/static/avatar_skill/{干员数据['name']}/{技能数 + 1}.png"
) )
if not os.path.exists(目标路径): if not os.path.exists(目标路径):
try: try:
shutil.copy(干员技能路径, 目标路径) shutil.copy(干员技能路径, 目标路径)
print(目标路径) print(目标路径)
except Exception: except Exception:
pass pass

View file

@ -1394,6 +1394,11 @@
"profession": "MEDIC", "profession": "MEDIC",
"name": "Warfarin" "name": "Warfarin"
}, },
"录武官": {
"key": "char_4196_reckpr",
"profession": "MEDIC",
"name": "Record Keeper"
},
"诺威尔": { "诺威尔": {
"key": "char_4173_nowell", "key": "char_4173_nowell",
"profession": "MEDIC", "profession": "MEDIC",
@ -1719,6 +1724,11 @@
"profession": "WARRIOR", "profession": "WARRIOR",
"name": "Entelechia" "name": "Entelechia"
}, },
"司霆惊蛰": {
"key": "char_1043_leizi2",
"profession": "WARRIOR",
"name": "Leizi the Thunderbringer"
},
"正义骑士号": { "正义骑士号": {
"key": "char_4000_jnight", "key": "char_4000_jnight",
"profession": "SNIPER", "profession": "SNIPER",

View file

@ -1,4 +1,74 @@
[ [
{
"key": 376,
"name": "司霆惊蛰",
"span": 2,
"child_skill": [
{
"skill_key": 0,
"skill_level": 0,
"phase_level": "精0 1级",
"skillname": "雷法专精",
"buffer": false,
"buffer_des": [],
"des": "进驻发电站时,无人机充能速度<@cc.vup>+10%</>",
"roomType": "发电站",
"buffCategory": "OUTPUT",
"skillIcon": "bskill_pow_spd1",
"buffColor": "#8fc31f",
"textColor": "#ffffff"
},
{
"skill_key": 1,
"skill_level": 0,
"phase_level": "精2 1级",
"skillname": "克己严修",
"buffer": false,
"buffer_des": [],
"des": "进驻加工站加工<@cc.kw>技巧概要</>时,副产品的产出概率提升<@cc.vup>80%</>",
"roomType": "加工站",
"buffCategory": "FUNCTION",
"skillIcon": "bskill_ws_skill3",
"buffColor": "#e3eb00",
"textColor": "#333333"
}
]
},
{
"key": 375,
"name": "录武官",
"span": 2,
"child_skill": [
{
"skill_key": 0,
"skill_level": 0,
"phase_level": "精0 1级",
"skillname": "医疗专精·α",
"buffer": false,
"buffer_des": [],
"des": "进驻训练室协助位时,<@cc.kw>医疗</>干员的专精技能训练速度<@cc.vup>+30%</>",
"roomType": "训练室",
"buffCategory": "FUNCTION",
"skillIcon": "bskill_train_medic1",
"buffColor": "#7d0022",
"textColor": "#ffffff"
},
{
"skill_key": 1,
"skill_level": 0,
"phase_level": "精2 1级",
"skillname": "学无不精·α",
"buffer": false,
"buffer_des": [],
"des": "进驻训练室协助位时,干员的专精技能训练速度<@cc.vup>+25%</>",
"roomType": "训练室",
"buffCategory": "FUNCTION",
"skillIcon": "bskill_train_all",
"buffColor": "#7d0022",
"textColor": "#ffffff"
}
]
},
{ {
"key": 374, "key": 374,
"name": "Miss.Christine", "name": "Miss.Christine",

View file

@ -3625,6 +3625,13 @@
"MATERIAL", "MATERIAL",
700169 700169
], ],
"p_char_4196_reckpr": [
"p_char_4196_reckpr",
"p_char_4196_reckpr",
"录武官的信物",
"MATERIAL",
700170
],
"p_char_103_angel": [ "p_char_103_angel": [
"p_char_103_angel", "p_char_103_angel",
"p_char_103_angel", "p_char_103_angel",
@ -4409,6 +4416,13 @@
"MATERIAL", "MATERIAL",
600112 600112
], ],
"p_char_1043_leizi2": [
"p_char_1043_leizi2",
"p_char_1043_leizi2",
"司霆惊蛰的信物",
"MATERIAL",
600113
],
"class_p_char_123_fang": [ "class_p_char_123_fang": [
"class_p_char_123_fang", "class_p_char_123_fang",
"class_p_char_123_fang", "class_p_char_123_fang",

BIN
mower/static/MATERIAL.pkl (Stored with Git LFS)

Binary file not shown.

BIN
mower/static/avatar.pkl (Stored with Git LFS)

Binary file not shown.

BIN
mower/static/avatar_skill/司霆惊蛰/1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/司霆惊蛰/2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/司霆惊蛰/3.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/录武官/1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/avatar_skill/录武官/2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/static/operator_room.model (Stored with Git LFS)

Binary file not shown.

BIN
mower/static/portrait.pkl (Stored with Git LFS)

Binary file not shown.

View file

@ -106,7 +106,7 @@ const cc_c_abyssal2_3 = { "termId": "cc.c.abyssal2_3", "termName": "特殊叠加
const cc_c_room1 = { "termId": "cc.c.room1", "termName": "部分设施", "description": "包含以下设施\n发电站、人力办公室、会客室", "buffer": [] }; const cc_c_room1 = { "termId": "cc.c.room1", "termName": "部分设施", "description": "包含以下设施\n发电站、人力办公室、会客室", "buffer": [] };
const cc_c_room2 = { "termId": "cc.c.room2", "termName": "其他设施", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室", "buffer": [] }; const cc_c_room2 = { "termId": "cc.c.room2", "termName": "其他设施", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室", "buffer": [] };
const cc_c_room3 = { "termId": "cc.c.room3", "termName": "工作场所", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室、控制中枢、训练室", "buffer": [] }; const cc_c_room3 = { "termId": "cc.c.room3", "termName": "工作场所", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室、控制中枢、训练室", "buffer": [] };
const cc_c_skill = { "termId": "cc.c.skill", "termName": "部分技能", "description": "包含以下技能\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手", "buffer": [] }; const cc_c_skill = { "termId": "cc.c.skill", "termName": "部分技能", "description": "包含以下技能\r\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手、点滴关照", "buffer": [] };
const cc_t_strong2 = { "termId": "cc.t.strong2", "termName": "特殊叠加规则", "description": "无法单独与<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>进行叠加,且优先生效\n当<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>与其他技能进行叠加时,该技能会对此叠加效果进行叠加", "buffer": ["cc_t_snsant1", "cc_t_snsant2", "cc_t_snsant1", "cc_t_snsant2"] }; const cc_t_strong2 = { "termId": "cc.t.strong2", "termName": "特殊叠加规则", "description": "无法单独与<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>进行叠加,且优先生效\n当<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>与其他技能进行叠加时,该技能会对此叠加效果进行叠加", "buffer": ["cc_t_snsant1", "cc_t_snsant2", "cc_t_snsant1", "cc_t_snsant2"] };
const cc_c_sui2_1 = { "termId": "cc.c.sui2_1", "termName": "特殊比较规则", "description": "在<@cc.kw>公事公办</>,<@cc.kw>孤光共照</>,<@cc.kw>巴别塔之帜</>提供的<$cc.c.room2><@cc.kw>其他设施</></>每小时心情恢复值中取最高生效", "buffer": ["cc_c_room2"] }; const cc_c_sui2_1 = { "termId": "cc.c.sui2_1", "termName": "特殊比较规则", "description": "在<@cc.kw>公事公办</>,<@cc.kw>孤光共照</>,<@cc.kw>巴别塔之帜</>提供的<$cc.c.room2><@cc.kw>其他设施</></>每小时心情恢复值中取最高生效", "buffer": ["cc_c_room2"] };
const cc_m_pow1 = { "termId": "cc.m.pow1", "termName": "自动化·α", "description": "由以下干员提供\n温蒂、森蚺、异客", "buffer": [] }; const cc_m_pow1 = { "termId": "cc.m.pow1", "termName": "自动化·α", "description": "由以下干员提供\n温蒂、森蚺、异客", "buffer": [] };

View file

@ -8,10 +8,10 @@
} }
/* Styles 部分保持不变 */ /* Styles 部分保持不变 */
.float-btn[data-v-249c7f74] { .float-btn[data-v-0185b520] {
z-index: 9999; z-index: 9999;
} }
.settings-panel[data-v-249c7f74] { .settings-panel[data-v-0185b520] {
width: 850px; width: 850px;
height: calc(min(100vh - 70px, 630px)); height: calc(min(100vh - 70px, 630px));
background-color: #f8f8f8; background-color: #f8f8f8;
@ -19,7 +19,7 @@
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
overflow: hidden; overflow: hidden;
} }
.settings-content-area[data-v-249c7f74] { .settings-content-area[data-v-0185b520] {
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
background-color: #fff; background-color: #fff;

View file

@ -1327,7 +1327,7 @@ const _sfc_main = {
}; };
} }
}; };
const DesktopSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-249c7f74"]]); const DesktopSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0185b520"]]);
export { export {
DesktopSettings as default DesktopSettings as default
}; };

View file

@ -1,5 +1,5 @@
.loading[data-v-f9ae5a23] { .loading[data-v-69c55212] {
position: absolute; position: absolute;
top: 48px; top: 48px;
font-size: 28px; font-size: 28px;

View file

@ -46,7 +46,7 @@ const _sfc_main = {
}; };
} }
}; };
const Doc = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f9ae5a23"]]); const Doc = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-69c55212"]]);
export { export {
Doc as default Doc as default
}; };

View file

@ -1,4 +1,4 @@
.help[data-v-e18814d8] { .help[data-v-587b8b4b] {
z-index: 100; z-index: 100;
} }

View file

@ -53,7 +53,7 @@ function _sfc_render(_ctx, _cache) {
_: 3 _: 3
}); });
} }
const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-e18814d8"]]); const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-587b8b4b"]]);
export { export {
__unplugin_components_0 __unplugin_components_0
}; };

View file

@ -1,38 +1,38 @@
.log[data-v-06f47113] { .log[data-v-bb8daf92] {
overflow: hidden; overflow: hidden;
flex: 1; flex: 1;
} }
.task-table[data-v-06f47113] { .task-table[data-v-bb8daf92] {
position: relative; position: relative;
max-width: 600px; max-width: 600px;
} }
.task-table th[data-v-06f47113] { .task-table th[data-v-bb8daf92] {
padding: 2px 16px; padding: 2px 16px;
} }
.task-table td[data-v-06f47113] { .task-table td[data-v-bb8daf92] {
height: 24px; height: 24px;
padding: 2px 8px; padding: 2px 8px;
} }
.task-table td[data-v-06f47113]:last-child { .task-table td[data-v-bb8daf92]:last-child {
width: 100%; width: 100%;
} }
.action-container[data-v-06f47113] { .action-container[data-v-bb8daf92] {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; gap: 12px;
z-index: 15; z-index: 15;
} }
.toggle-table-collapse-btn[data-v-06f47113] { .toggle-table-collapse-btn[data-v-bb8daf92] {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
} }
.toggle-fullscreen-btn[data-v-06f47113] { .toggle-fullscreen-btn[data-v-bb8daf92] {
position: absolute; position: absolute;
top: 0; top: 0;
right: 38px; right: 38px;
} }
.log-bg[data-v-06f47113] { .log-bg[data-v-bb8daf92] {
content: ""; content: "";
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -42,12 +42,12 @@
opacity: 0.25; opacity: 0.25;
background-image: url(/bg1.webp), url(/bg2.webp); background-image: url(/bg1.webp), url(/bg2.webp);
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: var(--d21ecd16); background-size: var(--72ac3b4a);
background-position: var(--0bab789d); background-position: var(--8bac42fa);
pointer-events: none; pointer-events: none;
z-index: 14; z-index: 14;
} }
.sc[data-v-06f47113] { .sc[data-v-bb8daf92] {
max-width: 480px; max-width: 480px;
max-height: 270px; max-height: 270px;
border-radius: 6px; border-radius: 6px;

View file

@ -829,8 +829,8 @@ const _sfc_main = {
__name: "Log", __name: "Log",
setup(__props) { setup(__props) {
useCssVars((_ctx) => ({ useCssVars((_ctx) => ({
"d21ecd16": unref(bg_size), "72ac3b4a": unref(bg_size),
"0bab789d": unref(bg_position) "8bac42fa": unref(bg_position)
})); }));
const mower_store = useMowerStore(); const mower_store = useMowerStore();
const { ws, log, log_mobile, thread_status, task_list, get_task_id, sc_uri } = storeToRefs(mower_store); const { ws, log, log_mobile, thread_status, task_list, get_task_id, sc_uri } = storeToRefs(mower_store);
@ -1037,7 +1037,7 @@ const _sfc_main = {
}; };
} }
}; };
const Log = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-06f47113"]]); const Log = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-bb8daf92"]]);
export { export {
Log as default Log as default
}; };

View file

@ -1,44 +1,44 @@
@charset "UTF-8"; @charset "UTF-8";
.coord-label[data-v-bd41e82d] { .coord-label[data-v-f4ed7511] {
width: 40px; width: 40px;
padding-left: 8px; padding-left: 8px;
} }
.card-title[data-v-bd41e82d] { .card-title[data-v-f4ed7511] {
margin-right: 8px; margin-right: 8px;
} }
.threshold[data-v-9ffc8196] { .threshold[data-v-17303244] {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 14px; gap: 14px;
width: 100%; width: 100%;
} }
.email-title[data-v-f611d9fe] { .email-title[data-v-3b2776a3] {
width: 100%; width: 100%;
} }
.expand[data-v-f611d9fe] { .expand[data-v-3b2776a3] {
flex-grow: 1; flex-grow: 1;
} }
.email-table[data-v-f611d9fe] { .email-table[data-v-3b2776a3] {
width: 100%; width: 100%;
margin-bottom: 12px; margin-bottom: 12px;
} }
.email-test[data-v-f611d9fe] { .email-test[data-v-3b2776a3] {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 16px; gap: 16px;
} }
.email-mode[data-v-f611d9fe] { .email-mode[data-v-3b2776a3] {
margin-left: 20px; margin-left: 20px;
} }
.email-label[data-v-f611d9fe] { .email-label[data-v-3b2776a3] {
width: 68px; width: 68px;
} }
p[data-v-f611d9fe] { p[data-v-3b2776a3] {
margin: 0 0 10px 0; margin: 0 0 10px 0;
} }
.mt-16[data-v-f611d9fe] { .mt-16[data-v-3b2776a3] {
margin-top: 16px; margin-top: 16px;
} }
@ -49,122 +49,122 @@ p[data-v-f611d9fe] {
gap: 12px; gap: 12px;
} }
.subtitle[data-v-e24fdfe6] { .subtitle[data-v-4f64e716] {
margin: 12px 0 6px; margin: 12px 0 6px;
} }
.scale[data-v-60093aec] { .scale[data-v-26ad4730] {
width: 60px; width: 60px;
text-align: right; text-align: right;
} }
.scale-apply[data-v-60093aec] { .scale-apply[data-v-26ad4730] {
margin-left: 24px; margin-left: 24px;
} }
.waiting-table { .waiting-table {
th, th,
td { td {
&[data-v-60093aec] { &[data-v-26ad4730] {
padding: 4px; padding: 4px;
min-width: 70px; min-width: 70px;
width: 100px; width: 100px;
} }
&[data-v-60093aec]:first-child { &[data-v-26ad4730]:first-child {
width: auto; width: auto;
padding: 4px 8px; padding: 4px 8px;
} }
} }
} }
.item[data-v-2ceb271c] { .item[data-v-9889efe8] {
font-weight: 500; font-weight: 500;
font-size: 16px; font-size: 16px;
} }
.n-divider[data-v-2ceb271c]:not(.n-divider--vertical) { .n-divider[data-v-9889efe8]:not(.n-divider--vertical) {
margin: 6px 0; margin: 6px 0;
} }
.telemetry[data-v-2ceb271c] { .telemetry[data-v-9889efe8] {
border-collapse: collapse; border-collapse: collapse;
table-layout: fixed; table-layout: fixed;
margin-bottom: 6px; margin-bottom: 6px;
} }
th[data-v-2ceb271c], th[data-v-9889efe8],
td[data-v-2ceb271c] { td[data-v-9889efe8] {
border: 1px solid white; border: 1px solid white;
padding: 2px 6px; padding: 2px 6px;
} }
p[data-v-e83a44f6] { p[data-v-46384f04] {
margin: 0 0 8px 0; margin: 0 0 8px 0;
} }
h4[data-v-e83a44f6] { h4[data-v-46384f04] {
margin: 12px 0 10px 0; margin: 12px 0 10px 0;
} }
.big-table[data-v-e83a44f6] { .big-table[data-v-46384f04] {
margin-top: 10px; margin-top: 10px;
max-width: 320px; max-width: 320px;
} }
.big-table th[data-v-e83a44f6] { .big-table th[data-v-46384f04] {
text-align: center; text-align: center;
} }
.big-table tr[data-v-e83a44f6] { .big-table tr[data-v-46384f04] {
width: 70px; width: 70px;
} }
.big-table td[data-v-e83a44f6] { .big-table td[data-v-46384f04] {
height: 24px; height: 24px;
} }
.big-table td[data-v-e83a44f6]:nth-child(1) { .big-table td[data-v-46384f04]:nth-child(1) {
width: 70px; width: 70px;
text-align: center; text-align: center;
} }
.big-table td[data-v-e83a44f6]:nth-child(2) { .big-table td[data-v-46384f04]:nth-child(2) {
width: 420px; width: 420px;
} }
.final[data-v-e83a44f6] { .final[data-v-46384f04] {
margin: 16px 0 0; margin: 16px 0 0;
}p[data-v-70be2e67] { }p[data-v-83ca4317] {
margin: 2px 0; margin: 2px 0;
} }
h4[data-v-70be2e67] { h4[data-v-83ca4317] {
margin: 12px 0 8px 0; margin: 12px 0 8px 0;
} }
table[data-v-70be2e67] { table[data-v-83ca4317] {
width: 100%; width: 100%;
} }
td[data-v-70be2e67]:nth-child(1) { td[data-v-83ca4317]:nth-child(1) {
width: 80px; width: 80px;
} }
.ignore-blacklist[data-v-70be2e67] { .ignore-blacklist[data-v-83ca4317] {
margin-bottom: 10px; margin-bottom: 10px;
display: flex; display: flex;
gap: 12px; gap: 12px;
} }
.h4[data-v-70be2e67] { .h4[data-v-83ca4317] {
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
} }
.maa-shop[data-v-70be2e67] { .maa-shop[data-v-83ca4317] {
margin: 8px 0; margin: 8px 0;
} }
.item[data-v-70be2e67] { .item[data-v-83ca4317] {
font-weight: 500; font-weight: 500;
font-size: 16px; font-size: 16px;
} }
/* 表单和活动区域样式调整 (可选) */ /* 表单和活动区域样式调整 (可选) */
.form-item .n-flex[data-v-1081049d] { .form-item .n-flex[data-v-d720c1de] {
gap: 8px 12px; gap: 8px 12px;
} }
.activity .n-tag[data-v-1081049d] { .activity .n-tag[data-v-d720c1de] {
margin-bottom: 4px; margin-bottom: 4px;
} }
/* 周计划表格容器 */ /* 周计划表格容器 */
.plan-container[data-v-1081049d] { .plan-container[data-v-d720c1de] {
border: 1px solid var(--n-border-color); border: 1px solid var(--n-border-color);
border-radius: var(--n-border-radius); border-radius: var(--n-border-radius);
margin-top: 12px; margin-top: 12px;
} }
/* 表头行样式 */ /* 表头行样式 */
.plan-header[data-v-1081049d] { .plan-header[data-v-d720c1de] {
font-size: 12px; font-size: 12px;
color: var(--n-text-color-2); color: var(--n-text-color-2);
padding: 6px 10px; padding: 6px 10px;
@ -173,7 +173,7 @@ td[data-v-70be2e67]:nth-child(1) {
} }
/* 表头 - 关卡列 */ /* 表头 - 关卡列 */
.header-stage[data-v-1081049d] { .header-stage[data-v-d720c1de] {
width: 120px; /* 固定宽度 */ width: 120px; /* 固定宽度 */
flex-shrink: 0; flex-shrink: 0;
text-align: left; text-align: left;
@ -182,22 +182,22 @@ td[data-v-70be2e67]:nth-child(1) {
} }
/* 表头 - 日期列 */ /* 表头 - 日期列 */
.header-days[data-v-1081049d] { .header-days[data-v-d720c1de] {
flex-grow: 1; flex-grow: 1;
text-align: center; text-align: center;
min-width: 210px; /* 保证容纳7个按钮的宽度 */ min-width: 210px; /* 保证容纳7个按钮的宽度 */
} }
.header-days .today-header[data-v-1081049d] { .header-days .today-header[data-v-d720c1de] {
font-weight: normal; font-weight: normal;
color: var(--n-text-color-1); color: var(--n-text-color-1);
} }
.header-days .today-name[data-v-1081049d] { .header-days .today-name[data-v-d720c1de] {
font-weight: bold; font-weight: bold;
color: var(--n-color-error); /* 高亮当天星期名称 */ color: var(--n-color-error); /* 高亮当天星期名称 */
} }
/* 表头 - 操作列 */ /* 表头 - 操作列 */
.header-action[data-v-1081049d] { .header-action[data-v-d720c1de] {
width: 40px; /* 固定宽度 */ width: 40px; /* 固定宽度 */
flex-shrink: 0; flex-shrink: 0;
text-align: center; text-align: center;
@ -206,19 +206,19 @@ td[data-v-70be2e67]:nth-child(1) {
} }
/* 计划项目行样式 */ /* 计划项目行样式 */
.plan-item[data-v-1081049d] { .plan-item[data-v-d720c1de] {
padding: 6px 10px; padding: 6px 10px;
border-bottom: 1px solid var(--n-border-color); border-bottom: 1px solid var(--n-border-color);
} }
.plan-item[data-v-1081049d]:last-child { .plan-item[data-v-d720c1de]:last-child {
border-bottom: none; border-bottom: none;
} }
.plan-item[data-v-1081049d]:nth-child(even) { .plan-item[data-v-d720c1de]:nth-child(even) {
background-color: var(--n-action-color); /* 斑马条纹 */ background-color: var(--n-action-color); /* 斑马条纹 */
} }
/* 行内 - 关卡区域 */ /* 行内 - 关卡区域 */
.stage-area[data-v-1081049d] { .stage-area[data-v-d720c1de] {
width: 120px; /* 同表头宽度 */ width: 120px; /* 同表头宽度 */
flex-shrink: 0; flex-shrink: 0;
display: flex; display: flex;
@ -227,7 +227,7 @@ td[data-v-70be2e67]:nth-child(1) {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.stage-area .stage-name[data-v-1081049d] { .stage-area .stage-name[data-v-d720c1de] {
font-size: 14px; font-size: 14px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -235,18 +235,18 @@ td[data-v-70be2e67]:nth-child(1) {
padding-left: 4px; padding-left: 4px;
cursor: default; /* 显示 title 提示 */ cursor: default; /* 显示 title 提示 */
} }
.stage-area .stage-name[title][data-v-1081049d] { .stage-area .stage-name[title][data-v-d720c1de] {
/* 确保 title 属性生效 */ /* 确保 title 属性生效 */
cursor: default; cursor: default;
} }
.stage-area .custom-stage-input[data-v-1081049d], .stage-area .custom-stage-input[data-v-d720c1de],
.stage-area .custom-stage-tag[data-v-1081049d] { .stage-area .custom-stage-tag[data-v-d720c1de] {
width: 100%; width: 100%;
} }
.stage-area .custom-stage-tag[data-v-1081049d] { .stage-area .custom-stage-tag[data-v-d720c1de] {
justify-content: space-between; justify-content: space-between;
} }
.stage-area .custom-stage-tag[data-v-1081049d] .n-tag__content { .stage-area .custom-stage-tag[data-v-d720c1de] .n-tag__content {
/* 确保标签内容不溢出 */ /* 确保标签内容不溢出 */
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -255,14 +255,14 @@ td[data-v-70be2e67]:nth-child(1) {
} }
/* 行内 - 每日切换按钮区域 */ /* 行内 - 每日切换按钮区域 */
.day-toggles[data-v-1081049d] { .day-toggles[data-v-d720c1de] {
flex-grow: 1; flex-grow: 1;
justify-content: space-around; /* 均匀分布按钮 */ justify-content: space-around; /* 均匀分布按钮 */
min-width: 210px; /* 同表头估算宽度 */ min-width: 210px; /* 同表头估算宽度 */
/* 每个按钮的占位容器 */ /* 每个按钮的占位容器 */
/* 每日切换按钮样式 */ /* 每日切换按钮样式 */
} }
.day-toggles .day-toggle-placeholder[data-v-1081049d] { .day-toggles .day-toggle-placeholder[data-v-d720c1de] {
width: 28px; /* 固定宽度 */ width: 28px; /* 固定宽度 */
height: 28px; /* 固定高度 */ height: 28px; /* 固定高度 */
display: flex; display: flex;
@ -270,7 +270,7 @@ td[data-v-70be2e67]:nth-child(1) {
align-items: center; align-items: center;
flex-shrink: 0; flex-shrink: 0;
} }
.day-toggles .day-toggle[data-v-1081049d] { .day-toggles .day-toggle[data-v-d720c1de] {
width: 28px; width: 28px;
height: 28px; height: 28px;
padding: 0; padding: 0;
@ -283,7 +283,7 @@ td[data-v-70be2e67]:nth-child(1) {
/* 未选中按钮 (ghost) active 状态 */ /* 未选中按钮 (ghost) active 状态 */
/* 选中按钮 (success) active 状态 */ /* 选中按钮 (success) active 状态 */
} }
.day-toggles .day-toggle.today-button[data-v-1081049d] { .day-toggles .day-toggle.today-button[data-v-d720c1de] {
font-weight: bold; /* !!! 新增:当天按钮字体加粗 !!! */ font-weight: bold; /* !!! 新增:当天按钮字体加粗 !!! */
/* 当天且未选中的按钮,边框高亮 */ /* 当天且未选中的按钮,边框高亮 */
/* 当天且未选中的按钮 (ghost 状态),文字颜色也高亮 */ /* 当天且未选中的按钮 (ghost 状态),文字颜色也高亮 */
@ -291,56 +291,56 @@ td[data-v-70be2e67]:nth-child(1) {
/* 当天且选中的按钮 (success 状态),添加外边框 */ /* 当天且选中的按钮 (success 状态),添加外边框 */
/* 当天且未选中的按钮 (ghost 状态) active */ /* 当天且未选中的按钮 (ghost 状态) active */
} }
.day-toggles .day-toggle.today-button[data-v-1081049d]:not(.n-button--success) { .day-toggles .day-toggle.today-button[data-v-d720c1de]:not(.n-button--success) {
border-color: var(--n-color-info); border-color: var(--n-color-info);
} }
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-1081049d]:not(:disabled) { .day-toggles .day-toggle.today-button.n-button--ghost[data-v-d720c1de]:not(:disabled) {
color: var(--n-color-info); color: var(--n-color-info);
} }
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-1081049d]:not(:disabled):hover { .day-toggles .day-toggle.today-button.n-button--ghost[data-v-d720c1de]:not(:disabled):hover {
border-color: var(--n-color-info-hover); border-color: var(--n-color-info-hover);
color: var(--n-color-info-hover); color: var(--n-color-info-hover);
} }
.day-toggles .day-toggle.today-button.n-button--success[data-v-1081049d] { .day-toggles .day-toggle.today-button.n-button--success[data-v-d720c1de] {
outline: 1px solid var(--n-color-info-hover); outline: 1px solid var(--n-color-info-hover);
outline-offset: 1px; outline-offset: 1px;
} }
.day-toggles .day-toggle.today-button.n-button--ghost[data-v-1081049d]:not(:disabled):active { .day-toggles .day-toggle.today-button.n-button--ghost[data-v-d720c1de]:not(:disabled):active {
background-color: var(--n-color-info-pressed); background-color: var(--n-color-info-pressed);
color: #fff; color: #fff;
border-color: var(--n-color-info-pressed); border-color: var(--n-color-info-pressed);
} }
.day-toggles .day-toggle.n-button--ghost[data-v-1081049d]:not(:disabled) { .day-toggles .day-toggle.n-button--ghost[data-v-d720c1de]:not(:disabled) {
color: var(--n-text-color-3); /* 稍暗的颜色 */ color: var(--n-text-color-3); /* 稍暗的颜色 */
border-color: var(--n-border-color); /* 标准边框 */ border-color: var(--n-border-color); /* 标准边框 */
} }
.day-toggles .day-toggle.n-button--ghost[data-v-1081049d]:not(:disabled):hover { .day-toggles .day-toggle.n-button--ghost[data-v-d720c1de]:not(:disabled):hover {
border-color: var(--n-color-primary-hover); border-color: var(--n-color-primary-hover);
color: var(--n-color-primary-hover); color: var(--n-color-primary-hover);
} }
.day-toggles .day-toggle.n-button--success[data-v-1081049d] { .day-toggles .day-toggle.n-button--success[data-v-d720c1de] {
background-color: var(--n-color-success-suppl); /* 浅成功色背景 */ background-color: var(--n-color-success-suppl); /* 浅成功色背景 */
color: var(--n-color-success-hover); /* 深成功色文字 */ color: var(--n-color-success-hover); /* 深成功色文字 */
border-color: var(--n-color-success-hover); /* 成功色边框 */ border-color: var(--n-color-success-hover); /* 成功色边框 */
} }
.day-toggles .day-toggle.n-button--success[data-v-1081049d]:hover { .day-toggles .day-toggle.n-button--success[data-v-d720c1de]:hover {
background-color: var(--n-color-success-hover); background-color: var(--n-color-success-hover);
color: #fff; color: #fff;
border-color: var(--n-color-success-hover); border-color: var(--n-color-success-hover);
} }
.day-toggles .day-toggle.n-button--ghost[data-v-1081049d]:not(:disabled):active { .day-toggles .day-toggle.n-button--ghost[data-v-d720c1de]:not(:disabled):active {
background-color: var(--n-color-primary-pressed); background-color: var(--n-color-primary-pressed);
color: #fff; color: #fff;
border-color: var(--n-color-primary-pressed); border-color: var(--n-color-primary-pressed);
} }
.day-toggles .day-toggle.n-button--success[data-v-1081049d]:active { .day-toggles .day-toggle.n-button--success[data-v-d720c1de]:active {
background-color: var(--n-color-success-pressed); background-color: var(--n-color-success-pressed);
color: #fff; color: #fff;
border-color: var(--n-color-success-pressed); border-color: var(--n-color-success-pressed);
} }
/* 行内 - 操作按钮区域 */ /* 行内 - 操作按钮区域 */
.action-area[data-v-1081049d] { .action-area[data-v-d720c1de] {
width: 40px; /* 同表头宽度 */ width: 40px; /* 同表头宽度 */
flex-shrink: 0; flex-shrink: 0;
text-align: right; text-align: right;
@ -348,12 +348,12 @@ td[data-v-70be2e67]:nth-child(1) {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.action-area .n-button[data-v-1081049d] { .action-area .n-button[data-v-d720c1de] {
padding: 0 4px; /* 图标按钮减小内边距 */ padding: 0 4px; /* 图标按钮减小内边距 */
} }
/* 活动标签进度条样式 (与原版一致) */ /* 活动标签进度条样式 (与原版一致) */
.progress-tag[data-v-1081049d] { .progress-tag[data-v-d720c1de] {
position: relative; position: relative;
padding-bottom: 5px; padding-bottom: 5px;
height: auto; height: auto;
@ -364,7 +364,7 @@ td[data-v-70be2e67]:nth-child(1) {
align-items: center; align-items: center;
overflow: hidden; overflow: hidden;
} }
.progress[data-v-1081049d] { .progress[data-v-d720c1de] {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 0; left: 0;
@ -372,7 +372,7 @@ td[data-v-70be2e67]:nth-child(1) {
background-color: var(--n-color-success); background-color: var(--n-color-success);
transition: width 0.3s ease; transition: width 0.3s ease;
} }
.progress-bar[data-v-1081049d] { .progress-bar[data-v-d720c1de] {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 0; left: 0;
@ -382,84 +382,84 @@ td[data-v-70be2e67]:nth-child(1) {
} }
/* 禁用状态标题样式 */ /* 禁用状态标题样式 */
.card-title.disabled[data-v-1081049d] { .card-title.disabled[data-v-d720c1de] {
color: var(--n-text-color-disabled); color: var(--n-text-color-disabled);
} }
.container[data-v-16974522] { .container[data-v-350b6de3] {
display: flex; display: flex;
width: 100%; width: 100%;
gap: 8px; gap: 8px;
} }
.wrapper[data-v-16974522] { .wrapper[data-v-350b6de3] {
white-space: pre-wrap; white-space: pre-wrap;
user-select: text; user-select: text;
} }
.title[data-v-16974522] { .title[data-v-350b6de3] {
font-size: 18px; font-size: 18px;
font-weight: 500; font-weight: 500;
margin-bottom: 6px; margin-bottom: 6px;
} }
.operator-grid[data-v-16974522] { .operator-grid[data-v-350b6de3] {
display: grid; display: grid;
gap: 8px 16px; gap: 8px 16px;
align-items: center; align-items: center;
} }
/* 非干员组的干员列表 - 桌面端 */ /* 非干员组的干员列表 - 桌面端 */
:not(.mobile) .operator-grid[data-v-16974522]:not([class*='operator-group-']) { :not(.mobile) .operator-grid[data-v-350b6de3]:not([class*='operator-group-']) {
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
} }
/* 非干员组的干员列表 - 移动端 */ /* 非干员组的干员列表 - 移动端 */
.mobile .operator-grid[data-v-16974522]:not([class*='operator-group-']) { .mobile .operator-grid[data-v-350b6de3]:not([class*='operator-group-']) {
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
} }
/* 干员组内样式 */ /* 干员组内样式 */
.n-card .operator-grid.operator-group-desktop[data-v-16974522] { .n-card .operator-grid.operator-group-desktop[data-v-350b6de3] {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.n-card .operator-grid.operator-group-mobile[data-v-16974522] { .n-card .operator-grid.operator-group-mobile[data-v-350b6de3] {
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
} }
.operator-item[data-v-16974522] { .operator-item[data-v-350b6de3] {
display: flex; display: flex;
align-items: center; align-items: center;
margin: 0; margin: 0;
} }
.operator-info[data-v-16974522] { .operator-info[data-v-350b6de3] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-left: 8px; margin-left: 8px;
} }
.operator-name[data-v-16974522] { .operator-name[data-v-350b6de3] {
font-weight: bold; font-weight: bold;
font-size: 1.1em; font-size: 1.1em;
} }
.operator-skill[data-v-16974522] { .operator-skill[data-v-350b6de3] {
font-size: 1em; font-size: 1em;
} }
p[data-v-d479d5bf] { p[data-v-b2d35691] {
margin: 0 0 10px 0; margin: 0 0 10px 0;
} }
.misc-container[data-v-d479d5bf] { .misc-container[data-v-b2d35691] {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; gap: 12px;
} }
.header[data-v-d479d5bf] { .header[data-v-b2d35691] {
margin: 12px 0; margin: 12px 0;
} }
.trials-container[data-v-a4610cbf] { .trials-container[data-v-a113295f] {
display: flex; display: flex;
width: 100%; width: 100%;
gap: 8px; gap: 8px;
} }
.wrapper[data-v-a4610cbf] { .wrapper[data-v-a113295f] {
white-space: pre-wrap; white-space: pre-wrap;
user-select: text; user-select: text;
} }
.title[data-v-a4610cbf] { .title[data-v-a113295f] {
font-size: 18px; font-size: 18px;
font-weight: 500; font-weight: 500;
margin-bottom: 6px; margin-bottom: 6px;

View file

@ -1822,7 +1822,7 @@ const _sfc_main$j = {
}; };
} }
}; };
const Device = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-bd41e82d"]]); const Device = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-f4ed7511"]]);
const _hoisted_1$7 = { class: "threshold" }; const _hoisted_1$7 = { class: "threshold" };
const _sfc_main$i = { const _sfc_main$i = {
__name: "RIIC", __name: "RIIC",
@ -2117,7 +2117,7 @@ const _sfc_main$i = {
}; };
} }
}; };
const RIIC = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-9ffc8196"]]); const RIIC = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-17303244"]]);
const _hoisted_1$6 = { key: 0 }; const _hoisted_1$6 = { key: 0 };
const _hoisted_2$5 = { key: 1 }; const _hoisted_2$5 = { key: 1 };
const _hoisted_3$2 = { key: 0 }; const _hoisted_3$2 = { key: 0 };
@ -2372,7 +2372,7 @@ const _sfc_main$h = {
}; };
} }
}; };
const Email = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-f611d9fe"]]); const Email = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-3b2776a3"]]);
const _hoisted_1$5 = { style: { "display": "flex", "align-items": "center", "width": "100%" } }; const _hoisted_1$5 = { style: { "display": "flex", "align-items": "center", "width": "100%" } };
const _hoisted_2$4 = { class: "misc-container" }; const _hoisted_2$4 = { class: "misc-container" };
const _sfc_main$g = { const _sfc_main$g = {
@ -2604,7 +2604,7 @@ const _sfc_main$f = {
}; };
} }
}; };
const AutoFight = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-e24fdfe6"]]); const AutoFight = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-4f64e716"]]);
const _sfc_main$e = { const _sfc_main$e = {
__name: "Appearance", __name: "Appearance",
setup(__props) { setup(__props) {
@ -2727,7 +2727,7 @@ const _sfc_main$e = {
}; };
} }
}; };
const Appearance = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-60093aec"]]); const Appearance = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-26ad4730"]]);
const _sfc_main$d = { const _sfc_main$d = {
__name: "DailyMission", __name: "DailyMission",
setup(__props) { setup(__props) {
@ -3044,7 +3044,7 @@ const _sfc_main$d = {
}; };
} }
}; };
const DailyMission = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-2ceb271c"]]); const DailyMission = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-9889efe8"]]);
const _sfc_main$c = { const _sfc_main$c = {
__name: "Recruit", __name: "Recruit",
setup(__props) { setup(__props) {
@ -3197,7 +3197,7 @@ const _sfc_main$c = {
}; };
} }
}; };
const Recruit = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-e83a44f6"]]); const Recruit = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-46384f04"]]);
const _hoisted_1$4 = { style: { "display": "flex", "align-items": "center", "width": "100%" } }; const _hoisted_1$4 = { style: { "display": "flex", "align-items": "center", "width": "100%" } };
const _hoisted_2$3 = { style: { "margin-right": "24px" } }; const _hoisted_2$3 = { style: { "margin-right": "24px" } };
const _sfc_main$b = { const _sfc_main$b = {
@ -3682,7 +3682,7 @@ const _sfc_main$9 = {
}; };
} }
}; };
const Clue = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-70be2e67"]]); const Clue = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-83ca4317"]]);
class LuxonError extends Error { class LuxonError extends Error {
} }
class InvalidDateTimeError extends LuxonError { class InvalidDateTimeError extends LuxonError {
@ -10701,7 +10701,7 @@ const _sfc_main$8 = {
}; };
} }
}; };
const WeeklyPlan = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-1081049d"]]); const WeeklyPlan = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-d720c1de"]]);
const _sfc_main$7 = { const _sfc_main$7 = {
__name: "ReclamationAlgorithm", __name: "ReclamationAlgorithm",
setup(__props) { setup(__props) {
@ -10969,7 +10969,7 @@ const _sfc_main$6 = {
}; };
} }
}; };
const MaaCopilotImporter = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-16974522"]]); const MaaCopilotImporter = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-350b6de3"]]);
const _sfc_main$5 = { const _sfc_main$5 = {
__name: "Sss", __name: "Sss",
setup(__props) { setup(__props) {
@ -11203,7 +11203,7 @@ const _sfc_main$4 = {
}; };
} }
}; };
const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-d479d5bf"]]); const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-b2d35691"]]);
const _sfc_main$3 = { const _sfc_main$3 = {
__name: "MaaRogue", __name: "MaaRogue",
setup(__props) { setup(__props) {
@ -11630,7 +11630,7 @@ const _sfc_main$1 = {
}; };
} }
}; };
const Trials = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-a4610cbf"]]); const Trials = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-a113295f"]]);
const _sfc_main = { const _sfc_main = {
__name: "LongTasks", __name: "LongTasks",
setup(__props) { setup(__props) {

File diff suppressed because one or more lines are too long

View file

@ -1,56 +1,56 @@
.select-label[data-v-ef0a8ed8] { .select-label[data-v-5c30c73a] {
width: 44px; width: 44px;
} }
.type-select[data-v-ef0a8ed8] { .type-select[data-v-5c30c73a] {
width: 100px; width: 100px;
margin-right: 8px; margin-right: 8px;
} }
.product-select[data-v-ef0a8ed8] { .product-select[data-v-5c30c73a] {
width: 180px; width: 180px;
margin-right: 8px; margin-right: 8px;
} }
.operator-select[data-v-ef0a8ed8] { .operator-select[data-v-5c30c73a] {
width: 220px; width: 220px;
} }
.replacement-select[data-v-ef0a8ed8] { .replacement-select[data-v-5c30c73a] {
min-width: 400px; min-width: 400px;
} }
.plan-container[data-v-ef0a8ed8] { .plan-container[data-v-5c30c73a] {
width: 980px; width: 980px;
min-width: 980px; min-width: 980px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 12px; gap: 12px;
} }
.group[data-v-ef0a8ed8] { .group[data-v-5c30c73a] {
width: 160px; width: 160px;
} }
.facility-2[data-v-ef0a8ed8] { .facility-2[data-v-5c30c73a] {
width: 124px; width: 124px;
height: 76px; height: 76px;
margin: 2px 3px; margin: 2px 3px;
} }
.facility-3[data-v-ef0a8ed8] { .facility-3[data-v-5c30c73a] {
width: 175px; width: 175px;
height: 76px; height: 76px;
margin: 2px 3px; margin: 2px 3px;
} }
.facility-5[data-v-ef0a8ed8] { .facility-5[data-v-5c30c73a] {
width: 277px; width: 277px;
height: 76px; height: 76px;
margin: 2px 3px; margin: 2px 3px;
} }
.avatars[data-v-ef0a8ed8] { .avatars[data-v-5c30c73a] {
display: flex; display: flex;
gap: 6px; gap: 6px;
z-index: 5; z-index: 5;
} }
.avatars img[data-v-ef0a8ed8] { .avatars img[data-v-5c30c73a] {
box-sizing: content-box; box-sizing: content-box;
border-radius: 2px; border-radius: 2px;
background: lightgray; background: lightgray;
} }
.facility-name[data-v-ef0a8ed8] { .facility-name[data-v-5c30c73a] {
margin-bottom: 4px; margin-bottom: 4px;
text-align: center; text-align: center;
line-height: 1; line-height: 1;
@ -58,83 +58,83 @@
justify-content: space-around; justify-content: space-around;
z-index: 5; z-index: 5;
} }
.outer[data-v-ef0a8ed8] { .outer[data-v-5c30c73a] {
display: flex; display: flex;
margin: 0 auto; margin: 0 auto;
} }
.left_box[data-v-ef0a8ed8] { .left_box[data-v-5c30c73a] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 4px; gap: 4px;
padding-top: 82px; padding-top: 82px;
padding-right: 2px; padding-right: 2px;
} }
.left_box .left_contain[data-v-ef0a8ed8] { .left_box .left_contain[data-v-5c30c73a] {
display: grid; display: grid;
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: 1fr 1fr 1fr;
gap: 4px; gap: 4px;
} }
.left_box .left_contain > div[data-v-ef0a8ed8] { .left_box .left_contain > div[data-v-5c30c73a] {
box-sizing: border-box; box-sizing: border-box;
width: 175px; width: 175px;
height: 76px; height: 76px;
cursor: pointer; cursor: pointer;
} }
.left_box .left_contain .info[data-v-ef0a8ed8] { .left_box .left_contain .info[data-v-5c30c73a] {
background-color: rgba(32, 128, 240, 0.16); background-color: rgba(32, 128, 240, 0.16);
border-radius: 3px; border-radius: 3px;
border: 1px solid transparent; border: 1px solid transparent;
transition: all 0.3s; transition: all 0.3s;
position: relative; position: relative;
} }
.left_box .left_contain .info[data-v-ef0a8ed8]:hover { .left_box .left_contain .info[data-v-5c30c73a]:hover {
background-color: rgba(32, 128, 240, 0.22); background-color: rgba(32, 128, 240, 0.22);
} }
.left_box .left_contain .info.true[data-v-ef0a8ed8] { .left_box .left_contain .info.true[data-v-5c30c73a] {
background-color: var(--n-color); background-color: var(--n-color);
border: 1px solid rgb(32, 128, 240); border: 1px solid rgb(32, 128, 240);
} }
.left_box .left_contain .info .facility-name[data-v-ef0a8ed8] { .left_box .left_contain .info .facility-name[data-v-5c30c73a] {
color: #2080f0; color: #2080f0;
} }
.left_box .left_contain .warning[data-v-ef0a8ed8] { .left_box .left_contain .warning[data-v-5c30c73a] {
background-color: rgba(240, 160, 32, 0.16); background-color: rgba(240, 160, 32, 0.16);
border-radius: 3px; border-radius: 3px;
border: 1px solid transparent; border: 1px solid transparent;
transition: all 0.3s; transition: all 0.3s;
position: relative; position: relative;
} }
.left_box .left_contain .warning[data-v-ef0a8ed8]:hover { .left_box .left_contain .warning[data-v-5c30c73a]:hover {
background-color: rgba(240, 160, 32, 0.22); background-color: rgba(240, 160, 32, 0.22);
} }
.left_box .left_contain .warning.true[data-v-ef0a8ed8] { .left_box .left_contain .warning.true[data-v-5c30c73a] {
background-color: var(--n-color); background-color: var(--n-color);
border: 1px solid rgb(240, 160, 32); border: 1px solid rgb(240, 160, 32);
} }
.left_box .left_contain .warning .facility-name[data-v-ef0a8ed8] { .left_box .left_contain .warning .facility-name[data-v-5c30c73a] {
color: #f0a020; color: #f0a020;
} }
.left_box .left_contain .primary[data-v-ef0a8ed8] { .left_box .left_contain .primary[data-v-5c30c73a] {
background-color: rgba(24, 160, 88, 0.16); background-color: rgba(24, 160, 88, 0.16);
border-radius: 3px; border-radius: 3px;
border: 1px solid transparent; border: 1px solid transparent;
transition: all 0.3s; transition: all 0.3s;
} }
.left_box .left_contain .primary[data-v-ef0a8ed8]:hover { .left_box .left_contain .primary[data-v-5c30c73a]:hover {
background-color: rgba(24, 160, 88, 0.22); background-color: rgba(24, 160, 88, 0.22);
} }
.left_box .left_contain .primary.true[data-v-ef0a8ed8] { .left_box .left_contain .primary.true[data-v-5c30c73a] {
background-color: var(--n-color); background-color: var(--n-color);
border: 1px solid rgb(24, 160, 88); border: 1px solid rgb(24, 160, 88);
} }
.left_box .left_contain .primary .facility-name[data-v-ef0a8ed8] { .left_box .left_contain .primary .facility-name[data-v-5c30c73a] {
color: #18a058; color: #18a058;
} }
.mid_box[data-v-ef0a8ed8] { .mid_box[data-v-5c30c73a] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.waiting[data-v-ef0a8ed8] { .waiting[data-v-5c30c73a] {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
@ -146,15 +146,15 @@
cursor: pointer; cursor: pointer;
border-radius: 3px; border-radius: 3px;
} }
.waiting[data-v-ef0a8ed8]:hover { .waiting[data-v-5c30c73a]:hover {
opacity: 1; opacity: 1;
border: 1px dashed rgb(54, 173, 106); border: 1px dashed rgb(54, 173, 106);
color: rgb(54, 173, 106); color: rgb(54, 173, 106);
} }
.waiting div[data-v-ef0a8ed8] { .waiting div[data-v-5c30c73a] {
text-align: center; text-align: center;
} }
.draggable[data-v-ef0a8ed8] { .draggable[data-v-5c30c73a] {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
@ -162,7 +162,7 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.product-bg[data-v-ef0a8ed8] { .product-bg[data-v-5c30c73a] {
content: ""; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
@ -176,10 +176,10 @@
z-index: 3; z-index: 3;
pointer-events: none; pointer-events: none;
} }
.avatar-wrapper[data-v-ef0a8ed8] { .avatar-wrapper[data-v-5c30c73a] {
position: relative; position: relative;
} }
.workaholic[data-v-ef0a8ed8] { .workaholic[data-v-5c30c73a] {
position: absolute; position: absolute;
content: ""; content: "";
top: 0; top: 0;
@ -194,18 +194,18 @@
display: none; display: none;
} }
.dropdown[data-v-c4c4a151] { .dropdown[data-v-01fc4d7e] {
padding-left: var(--179f97e8); padding-left: var(--5dbb34be);
padding-right: var(--179f97e8); padding-right: var(--5dbb34be);
} }
.n-table[data-v-ab1299ac] { .n-table[data-v-1ad93d71] {
min-width: 100%; min-width: 100%;
} }
.n-table th[data-v-ab1299ac] { .n-table th[data-v-1ad93d71] {
width: 124px; width: 124px;
box-sizing: border-box; box-sizing: border-box;
} }
.label[data-v-ab1299ac] { .label[data-v-1ad93d71] {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
@ -223,26 +223,26 @@
.dropdown-select { .dropdown-select {
flex: 1; flex: 1;
} }
.w-980[data-v-d06834f4] { .w-980[data-v-a3e17cad] {
width: 100%; width: 100%;
max-width: 980px; max-width: 980px;
} }
.mx-auto[data-v-d06834f4] { .mx-auto[data-v-a3e17cad] {
margin: 0 auto; margin: 0 auto;
} }
.mt-12[data-v-d06834f4] { .mt-12[data-v-a3e17cad] {
margin-top: 12px; margin-top: 12px;
} }
.mb-12[data-v-d06834f4] { .mb-12[data-v-a3e17cad] {
margin-bottom: 12px; margin-bottom: 12px;
} }
.px-12[data-v-d06834f4] { .px-12[data-v-a3e17cad] {
padding: 0 12px; padding: 0 12px;
} }
.mw-980[data-v-d06834f4] { .mw-980[data-v-a3e17cad] {
min-width: 980px; min-width: 980px;
} }
.plan-bar[data-v-d06834f4] { .plan-bar[data-v-a3e17cad] {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
flex-grow: 0; flex-grow: 0;

View file

@ -1430,7 +1430,7 @@ const _sfc_main$5 = {
}; };
} }
}; };
const __unplugin_components_9 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-ef0a8ed8"]]); const __unplugin_components_9 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-5c30c73a"]]);
var MdArrowDropup = {}; var MdArrowDropup = {};
var hasRequiredMdArrowDropup; var hasRequiredMdArrowDropup;
function requireMdArrowDropup() { function requireMdArrowDropup() {
@ -1527,7 +1527,7 @@ const _sfc_main$4 = {
}, },
setup(__props) { setup(__props) {
useCssVars((_ctx) => ({ useCssVars((_ctx) => ({
"179f97e8": unref(btn_pad) "5dbb34be": unref(btn_pad)
})); }));
const mobile = inject("mobile"); const mobile = inject("mobile");
const btn_pad = computed(() => { const btn_pad = computed(() => {
@ -1577,7 +1577,7 @@ const _sfc_main$4 = {
}; };
} }
}; };
const __unplugin_components_8 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-c4c4a151"]]); const __unplugin_components_8 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-01fc4d7e"]]);
const _sfc_main$3 = { const _sfc_main$3 = {
__name: "TriggerString", __name: "TriggerString",
props: ["data"], props: ["data"],
@ -1834,7 +1834,7 @@ const _sfc_main$2 = {
}; };
} }
}; };
const __unplugin_components_2 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-ab1299ac"]]); const __unplugin_components_2 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-1ad93d71"]]);
const _hoisted_1$1 = { class: "dropdown-container" }; const _hoisted_1$1 = { class: "dropdown-container" };
const _hoisted_2 = { class: "dropdown-label" }; const _hoisted_2 = { class: "dropdown-label" };
const _sfc_main$1 = { const _sfc_main$1 = {
@ -5474,7 +5474,7 @@ const _sfc_main = {
}; };
} }
}; };
const Plan = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d06834f4"]]); const Plan = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a3e17cad"]]);
export { export {
Plan as default Plan as default
}; };

View file

@ -1,8 +1,8 @@
[data-v-b9b10beb] .n-modal-container { [data-v-b9d6a27e] .n-modal-container {
top: 0 !important; top: 0 !important;
left: 0 !important; left: 0 !important;
} }
[data-v-b9b10beb] .n-card__content { [data-v-b9d6a27e] .n-card__content {
height: calc(100% - 60px); /* 60px为header高度 */ height: calc(100% - 60px); /* 60px为header高度 */
} }

View file

@ -169,7 +169,7 @@ const _sfc_main = {
}; };
} }
}; };
const RecordLine = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b9b10beb"]]); const RecordLine = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b9d6a27e"]]);
export { export {
RecordLine as default RecordLine as default
}; };

View file

@ -1,4 +1,4 @@
.width100[data-v-67be031c] { .width100[data-v-2ee926d4] {
width: 100%; width: 100%;
} }

View file

@ -4754,7 +4754,7 @@ const _sfc_main = {
}; };
} }
}; };
const __unplugin_components_16 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-67be031c"]]); const __unplugin_components_16 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2ee926d4"]]);
export { export {
__unplugin_components_14, __unplugin_components_14,
__unplugin_components_16, __unplugin_components_16,

View file

@ -1,35 +1,35 @@
.button_row[data-v-c3862e91] { .button_row[data-v-9e1304bf] {
margin-top: 8px; margin-top: 8px;
} }
.task_row[data-v-c3862e91] { .task_row[data-v-9e1304bf] {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
width: 100%; width: 100%;
} }
.task_row .n-input[data-v-c3862e91] { .task_row .n-input[data-v-9e1304bf] {
width: 140px; width: 140px;
} }
.outer[data-v-c3862e91] { .outer[data-v-9e1304bf] {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
gap: 18px; gap: 18px;
} }
.inner[data-v-c3862e91] { .inner[data-v-9e1304bf] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 8px; gap: 8px;
} }
.task-col[data-v-c3862e91] { .task-col[data-v-9e1304bf] {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
gap: 8px; gap: 8px;
align-items: center; align-items: center;
} }
.n-dynamic-tags[data-v-c3862e91] { .n-dynamic-tags[data-v-9e1304bf] {
align-items: center; align-items: center;
} }
.ml[data-v-c3862e91] { .ml[data-v-9e1304bf] {
margin-left: 16px; margin-left: 16px;
} }

View file

@ -10340,7 +10340,7 @@ const _sfc_main = {
}; };
} }
}; };
const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c3862e91"]]); const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9e1304bf"]]);
export { export {
__unplugin_components_1, __unplugin_components_1,
__unplugin_components_4, __unplugin_components_4,

View file

@ -1,46 +1,46 @@
.info-container[data-v-6f42e5d7] { .info-container[data-v-f632a889] {
margin-top: 2rem; margin-top: 2rem;
gap: 12px; gap: 12px;
} }
.scan-time[data-v-6f42e5d7] { .scan-time[data-v-f632a889] {
font-size: 0.95rem; font-size: 0.95rem;
color: var(--n-text-color); color: var(--n-text-color);
} }
.notes[data-v-6f42e5d7] { .notes[data-v-f632a889] {
font-size: 0.9rem; font-size: 0.9rem;
line-height: 1.5; line-height: 1.5;
} }
.action-group[data-v-6f42e5d7] { .action-group[data-v-f632a889] {
padding: 8px 0; padding: 8px 0;
} }
.action-btn[data-v-6f42e5d7] { .action-btn[data-v-f632a889] {
transition: transform 0.2s ease; transition: transform 0.2s ease;
} }
.action-btn[data-v-6f42e5d7]:hover { .action-btn[data-v-f632a889]:hover {
transform: translateY(-1px); transform: translateY(-1px);
} }
.category-title[data-v-6f42e5d7] { .category-title[data-v-f632a889] {
margin: 1rem 0; margin: 1rem 0;
color: var(--n-title-text-color); color: var(--n-title-text-color);
} }
.material-grid[data-v-6f42e5d7] { .material-grid[data-v-f632a889] {
padding: 0 8px; padding: 0 8px;
} }
.material-card[data-v-6f42e5d7] { .material-card[data-v-f632a889] {
padding: 4px; padding: 4px;
background: var(--n-color-modal); background: var(--n-color-modal);
border-radius: 8px; border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
transition: box-shadow 0.2s ease; transition: box-shadow 0.2s ease;
} }
.material-card[data-v-6f42e5d7]:hover { .material-card[data-v-f632a889]:hover {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
} }
.material-name[data-v-6f42e5d7] { .material-name[data-v-f632a889] {
font-weight: 500; font-weight: 500;
font-size: 1rem; font-size: 1rem;
} }
.material-count[data-v-6f42e5d7] { .material-count[data-v-f632a889] {
font-size: 0.9rem; font-size: 0.9rem;
} }

View file

@ -386,7 +386,7 @@ const _sfc_main = {
}; };
} }
}; };
const depot = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-6f42e5d7"]]); const depot = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f632a889"]]);
export { export {
depot as default depot as default
}; };

View file

@ -7,10 +7,10 @@
pointer-events: none !important; pointer-events: none !important;
} }
.tabs[data-v-c1c8fa28] { .tabs[data-v-92d60a24] {
height: 100%; height: 100%;
} }
.layout-container[data-v-c1c8fa28] { .layout-container[data-v-92d60a24] {
height: 100%; height: 100%;
} }
html, html,

View file

@ -28142,7 +28142,7 @@ const _sfc_main = {
}; };
} }
}; };
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c1c8fa28"]]); const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-92d60a24"]]);
/*! /*!
* vue-router v4.5.0 * vue-router v4.5.0
* (c) 2024 Eduardo San Martin Morote * (c) 2024 Eduardo San Martin Morote

View file

@ -1,17 +1,17 @@
/* Alert 样式 */ /* Alert 样式 */
.custom-alert[data-v-01ea1f7d] { .custom-alert[data-v-a64db44c] {
position: fixed; position: fixed;
z-index: 5000; z-index: 5000;
margin-top: 10px; margin-top: 10px;
left: var(--abe189c8); left: var(--1b8e3d43);
right: var(--abe189c8); right: var(--1b8e3d43);
background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 255, 0.5), rgba(0, 0, 0, 0)); background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 255, 0.5), rgba(0, 0, 0, 0));
} }
/* Marquee 样式 */ /* Marquee 样式 */
.custom-marquee[data-v-01ea1f7d] { .custom-marquee[data-v-a64db44c] {
pointer-events: none; pointer-events: none;
} }

View file

@ -294,7 +294,7 @@ const _sfc_main = {
__name: "paomadeng", __name: "paomadeng",
setup(__props) { setup(__props) {
useCssVars((_ctx) => ({ useCssVars((_ctx) => ({
"abe189c8": margin_x.value "1b8e3d43": margin_x.value
})); }));
const mower_store = useMowerStore(); const mower_store = useMowerStore();
const { speed_msg } = storeToRefs(mower_store); const { speed_msg } = storeToRefs(mower_store);
@ -343,7 +343,7 @@ const _sfc_main = {
}; };
} }
}; };
const paomadeng = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-01ea1f7d"]]); const paomadeng = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a64db44c"]]);
export { export {
paomadeng as default paomadeng as default
}; };

View file

@ -1,8 +1,8 @@
.chart[data-v-291ce212] { .chart[data-v-d6be4beb] {
height: 400px; height: 400px;
} }
.report-card_1[data-v-291ce212] { .report-card_1[data-v-d6be4beb] {
display: gird; display: gird;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;

View file

@ -565,7 +565,7 @@ const _sfc_main = {
}; };
} }
}; };
const report = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-291ce212"]]); const report = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d6be4beb"]]);
export { export {
report as default report as default
}; };

BIN
ui/public/avatar/司霆惊蛰.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/avatar/录武官.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/depot/“棠梨儿”.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/depot/司霆惊蛰的信物.webp (Stored with Git LFS) Normal file

Binary file not shown.

BIN
ui/public/depot/录武官的信物.webp (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -628,7 +628,7 @@
"cc_c_skill": { "cc_c_skill": {
"termId": "cc.c.skill", "termId": "cc.c.skill",
"termName": "部分技能", "termName": "部分技能",
"description": "包含以下技能\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手", "description": "包含以下技能\r\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手、点滴关照",
"buffer": [] "buffer": []
}, },
"cc_t_strong2": { "cc_t_strong2": {

View file

@ -180,19 +180,31 @@
"key": 11 "key": 11
}, },
{ {
"id": "TN-1", "id": "FM-1",
"id_key": "act5bossrush_01", "id_key": "act19mini_01",
"name": "严寒骤血", "name": "求同则塞",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [],
"常规掉落": [], "常规掉落": [
"首次掉落": [], "酯原料",
"特殊掉落": [], "破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 9,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -203,19 +215,23 @@
"key": 12 "key": 12
}, },
{ {
"id": "TN-2", "id": "FM-1 突袭",
"id_key": "act5bossrush_02", "id_key": "act19mini_01#f#",
"name": "无声破裂", "name": "求同则塞",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [], "常规掉落": [],
"首次掉落": [], "首次掉落": [
"至纯源石"
],
"特殊掉落": [], "特殊掉落": [],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 9,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -226,19 +242,31 @@
"key": 13 "key": 13
}, },
{ {
"id": "TN-3", "id": "FM-2",
"id_key": "act5bossrush_03", "id_key": "act19mini_02",
"name": "幕间重影", "name": "求异则悖",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [],
"常规掉落": [], "常规掉落": [
"首次掉落": [], "酯原料",
"特殊掉落": [], "破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 9,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -249,19 +277,23 @@
"key": 14 "key": 14
}, },
{ {
"id": "TN-4", "id": "FM-2 突袭",
"id_key": "act5bossrush_04", "id_key": "act19mini_02#f#",
"name": "沸海遮日", "name": "求异则悖",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [], "常规掉落": [],
"首次掉落": [], "首次掉落": [
"至纯源石"
],
"特殊掉落": [], "特殊掉落": [],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 9,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -272,19 +304,31 @@
"key": 15 "key": 15
}, },
{ {
"id": "TN-1", "id": "FM-3",
"id_key": "act5bossrush_ex01", "id_key": "act19mini_03",
"name": "严寒骤血", "name": "求遐则失",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [],
"常规掉落": [], "常规掉落": [
"首次掉落": [], "酯原料",
"特殊掉落": [], "破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 12,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -295,19 +339,23 @@
"key": 16 "key": 16
}, },
{ {
"id": "TN-2", "id": "FM-3 突袭",
"id_key": "act5bossrush_ex02", "id_key": "act19mini_03#f#",
"name": "无声破裂", "name": "求遐则失",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [], "常规掉落": [],
"首次掉落": [], "首次掉落": [
"至纯源石"
],
"特殊掉落": [], "特殊掉落": [],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 12,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -318,19 +366,31 @@
"key": 17 "key": 17
}, },
{ {
"id": "TN-3", "id": "FM-4",
"id_key": "act5bossrush_ex03", "id_key": "act19mini_04",
"name": "幕间重影", "name": "求迩则乱",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [],
"常规掉落": [], "常规掉落": [
"首次掉落": [], "酯原料",
"特殊掉落": [], "破损装置",
"异铁碎片",
"双酮",
"代糖",
"源岩"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 12,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -341,19 +401,23 @@
"key": 18 "key": 18
}, },
{ {
"id": "TN-4", "id": "FM-4 突袭",
"id_key": "act5bossrush_ex04", "id_key": "act19mini_04#f#",
"name": "沸海遮日", "name": "求迩则乱",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [], "常规掉落": [],
"首次掉落": [], "首次掉落": [
"至纯源石"
],
"特殊掉落": [], "特殊掉落": [],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 12,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -364,19 +428,34 @@
"key": 19 "key": 19
}, },
{ {
"id": "TN-4", "id": "FM-5",
"id_key": "act5bossrush_fin04", "id_key": "act19mini_05",
"name": "沸海遮日", "name": "求缓则迟",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [],
"常规掉落": [], "常规掉落": [
"首次掉落": [], "装置"
"特殊掉落": [], ],
"额外物资": [] "首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"源岩",
"酯原料",
"破损装置",
"赤金",
"固源岩",
"聚酸酯",
"装置"
]
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 15,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -387,19 +466,23 @@
"key": 20 "key": 20
}, },
{ {
"id": "TN-1", "id": "FM-5 突袭",
"id_key": "act5bossrush_tm01", "id_key": "act19mini_05#f#",
"name": "严寒骤血", "name": "求缓则迟",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [], "常规掉落": [],
"首次掉落": [], "首次掉落": [
"至纯源石"
],
"特殊掉落": [], "特殊掉落": [],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 15,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -410,19 +493,35 @@
"key": 21 "key": 21
}, },
{ {
"id": "TN-2", "id": "FM-6",
"id_key": "act5bossrush_tm02", "id_key": "act19mini_06",
"name": "无声破裂", "name": "求速则贪",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [],
"常规掉落": [], "常规掉落": [
"首次掉落": [], "酮凝集"
"特殊掉落": [], ],
"额外物资": [] "首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"代糖",
"异铁碎片",
"双酮",
"基础作战记录",
"糖",
"异铁",
"酮凝集",
"初级作战记录"
]
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 15,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -433,19 +532,23 @@
"key": 22 "key": 22
}, },
{ {
"id": "TN-3", "id": "FM-6 突袭",
"id_key": "act5bossrush_tm03", "id_key": "act19mini_06#f#",
"name": "幕间重影", "name": "求速则贪",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [], "常规掉落": [],
"首次掉落": [], "首次掉落": [
"至纯源石"
],
"特殊掉落": [], "特殊掉落": [],
"额外物资": [] "额外物资": []
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 15,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -456,19 +559,39 @@
"key": 23 "key": 23
}, },
{ {
"id": "TN-4", "id": "FM-7",
"id_key": "act5bossrush_tm04", "id_key": "act19mini_07",
"name": "沸海遮日", "name": "求退则惘",
"drop": { "drop": {
"突袭首次掉落": [], "突袭首次掉落": [],
"常规掉落": [], "常规掉落": [
"首次掉落": [], "RMA70-12"
"特殊掉落": [], ],
"额外物资": [] "首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"酯原料",
"双酮",
"聚酸酯",
"酮凝集",
"聚酸酯组",
"酮凝集组",
"研磨石",
"晶体元件",
"RMA70-12",
"化合切削液",
"半自然溶剂",
"环烃聚质"
]
}, },
"start": 1750752000, "start": 1751947200,
"end": 1751918399, "end": 1752523199,
"理智消耗": 0, "理智消耗": 21,
"周一": 1, "周一": 1,
"周二": 1, "周二": 1,
"周三": 1, "周三": 1,
@ -477,5 +600,151 @@
"周六": 1, "周六": 1,
"周日": 1, "周日": 1,
"key": 24 "key": 24
},
{
"id": "FM-7 突袭",
"id_key": "act19mini_07#f#",
"name": "求退则惘",
"drop": {
"突袭首次掉落": [
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 21,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 25
},
{
"id": "FM-8",
"id_key": "act19mini_08",
"name": "求进则愎",
"drop": {
"突袭首次掉落": [],
"常规掉落": [
"转质盐组"
],
"首次掉落": [
"“棠梨儿”",
"至纯源石"
],
"特殊掉落": [
"“棠梨儿”"
],
"额外物资": [
"源岩",
"破损装置",
"固源岩",
"装置",
"固源岩组",
"全新装置",
"扭转醇",
"凝胶",
"褐素纤维",
"赤金"
]
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 21,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 26
},
{
"id": "FM-8 突袭",
"id_key": "act19mini_08#f#",
"name": "求进则愎",
"drop": {
"突袭首次掉落": [
"furni_terracommericials_SuisGarden_01",
"“棠梨儿”"
],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 21,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 27
},
{
"id": "FM-S-1",
"id_key": "act19mini_s01",
"name": "有求则苦",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 0,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 28
},
{
"id": "FM-S-2",
"id_key": "act19mini_s02",
"name": "莫向外求",
"drop": {
"突袭首次掉落": [],
"常规掉落": [],
"首次掉落": [
"至纯源石"
],
"特殊掉落": [],
"额外物资": []
},
"start": 1751947200,
"end": 1752523199,
"理智消耗": 0,
"周一": 1,
"周二": 1,
"周三": 1,
"周四": 1,
"周五": 1,
"周六": 1,
"周日": 1,
"key": 29
} }
] ]