From 23cfa72cdec71c51ea9f88f708a8176f46f3157e Mon Sep 17 00:00:00 2001 From: HibiKier <45528451+HibiKier@users.noreply.github.com> Date: Thu, 20 May 2021 19:34:27 +0800 Subject: [PATCH] Add files via upload --- .../genshin/query_resource_points/__init__.py | 96 ++ .../query_resource_points/query_resource.py | 283 ++++++ .../resource_type_id.json | 926 ++++++++++++++++++ 3 files changed, 1305 insertions(+) create mode 100644 plugins/genshin/query_resource_points/__init__.py create mode 100644 plugins/genshin/query_resource_points/query_resource.py create mode 100644 plugins/genshin/query_resource_points/resource_type_id.json diff --git a/plugins/genshin/query_resource_points/__init__.py b/plugins/genshin/query_resource_points/__init__.py new file mode 100644 index 00000000..8e170d54 --- /dev/null +++ b/plugins/genshin/query_resource_points/__init__.py @@ -0,0 +1,96 @@ +from nonebot import on_command, on_regex +from .query_resource import get_resource_map_mes, get_resource_list_mes, up_label_and_point_list +from util.utils import get_message_text, scheduler +from nonebot.adapters.cqhttp import Bot, MessageEvent +from nonebot.typing import T_State +import os +from services.log import logger +import re +try: + import ujson as json +except ModuleNotFoundError: + import json + +qr = on_command("原神资源查询", priority=5, block=True) +qr_lst = on_command("原神资源列表", priority=5, block=True) +rex_qr = on_regex('.*?(在哪|在哪里|哪有|哪里有).*?', priority=5, block=True) + + +with open(os.path.dirname(__file__) + '/resource_type_id.json', 'r', encoding='utf-8') as f: + in_list = [n['name'] for n in json.load(f).values()] + + +@qr.handle() +async def _(bot: Bot, event: MessageEvent, state: T_State): + resource_name = get_message_text(event.json()) + if resource_name == "" or resource_name not in in_list: + return + + await qr.send(get_resource_map_mes(resource_name), at_sender=True) + logger.info( + f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})" + f" 查询原神材料:" + resource_name) + + +@rex_qr.handle() +async def _(bot: Bot, event: MessageEvent, state: T_State): + msg = get_message_text(event.json()) + if msg.find('在哪') != -1: + rs = re.search('(.*)在哪.*?', msg) + resource_name = rs.group(1) if rs else '' + else: + rs = re.search('.*?(哪有|哪里有)(.*)', msg) + resource_name = rs.group(2) if rs else '' + if resource_name: + msg = get_resource_map_mes(resource_name) + if msg == '发送 原神资源列表 查看所有资源名称': + return + await rex_qr.send(msg, at_sender=True) + logger.info( + f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})" + f" 查询原神材料:" + resource_name) + + +@qr_lst.handle() +async def _(bot: Bot, event: MessageEvent, state: T_State): + # 长条消息经常发送失败,所以只能这样了 + mes_list = [] + txt = get_resource_list_mes() + txt_list = txt.split("\n") + if event.message_type == 'group': + for txt in txt_list: + data = { + "type": "node", + "data": { + "name": f"这里是{list(bot.config.nickname)[0]}酱", + "uin": f"{bot.self_id}", + "content": txt + } + } + mes_list.append(data) + # await bot.send(ev, get_resource_list_mes(), at_sender=True) + if event.message_type == 'group': + await bot.send_group_forward_msg(group_id=event.group_id, messages=mes_list) + else: + rst = '' + for i in range(len(txt_list)): + rst += txt_list[i] + '\n' + if i % 5 == 0: + if rst: + await qr_lst.send(rst) + rst = '' + + # await qr_lst.send(Message(mes_list)) + + +@scheduler.scheduled_job( + 'cron', + hour=5, + minute=1, +) +async def _(): + try: + up_label_and_point_list() + logger.info(f'每日更新原神材料信息成功!') + except Exception as e: + logger.error(f'每日更新原神材料信息错误:{e}') diff --git a/plugins/genshin/query_resource_points/query_resource.py b/plugins/genshin/query_resource_points/query_resource.py new file mode 100644 index 00000000..7637ffae --- /dev/null +++ b/plugins/genshin/query_resource_points/query_resource.py @@ -0,0 +1,283 @@ +from urllib import request +from PIL import Image, ImageMath +from io import BytesIO +import json +import os +import time +import base64 +from configs.path_config import IMAGE_PATH +from util.init_result import image + +LABEL_URL = 'https://api-static.mihoyo.com/common/blackboard/ys_obc/v1/map/label/tree?app_sn=ys_obc' +POINT_LIST_URL = 'https://api-static.mihoyo.com/common/blackboard/ys_obc/v1/map/point/list?map_id=2&app_sn=ys_obc' + +header = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' \ + 'Chrome/84.0.4147.105 Safari/537.36' + +FILE_PATH = os.path.dirname(__file__) + +MAP_PATH = os.path.join(IMAGE_PATH, "genshin", "seek_god_eye", "icon", "map_icon.jpg") +MAP_IMAGE = Image.open(MAP_PATH) +MAP_SIZE = MAP_IMAGE.size + +# resource_point里记录的坐标是相对坐标,是以蒙德城的大雕像为中心的,所以图片合成时需要转换坐标 +CENTER = (3505, 1907) + +zoom = 0.75 +resource_icon_offset = (-int(150 * 0.5 * zoom), -int(150 * zoom)) + +data = { + "all_resource_type": { + # 这个字典保存所有资源类型, + # "1": { + # "id": 1, + # "name": "传送点", + # "icon": "", + # "parent_id": 0, + # "depth": 1, + # "node_type": 1, + # "jump_type": 0, + # "jump_target_id": 0, + # "display_priority": 0, + # "children": [] + # }, + }, + "can_query_type_list": { + # 这个字典保存所有可以查询的资源类型名称和ID,这个字典只有名称和ID + # 上边字典里"depth": 2的类型才可以查询,"depth": 1的是1级目录,不能查询 + # "七天神像":"2" + # "风神瞳":"5" + + }, + "all_resource_point_list": [ + # 这个列表保存所有资源点的数据 + # { + # "id": 2740, + # "label_id": 68, + # "x_pos": -1789, + # "y_pos": 2628, + # "author_name": "✟紫灵心✟", + # "ctime": "2020-10-29 10:41:21", + # "display_state": 1 + # }, + ], + "date": "" # 记录上次更新"all_resource_point_list"的日期 +} + + +def up_icon_image(sublist): + # 检查是否有图标,没有图标下载保存到本地 + id = sublist["id"] + icon_url = sublist["icon"] + + icon_path = os.path.join(FILE_PATH, "icon", f"{id}.png") + + if not os.path.exists(icon_path): + schedule = request.Request(icon_url) + schedule.add_header('User-Agent', header) + with request.urlopen(schedule) as f: + icon = Image.open(f) + icon = icon.resize((150, 150)) + + box_alpha = Image.open(os.path.join(FILE_PATH, "icon", "box_alpha.png")).getchannel("A") + box = Image.open(os.path.join(FILE_PATH, "icon", "box.png")) + + try: + icon_alpha = icon.getchannel("A") + icon_alpha = ImageMath.eval("convert(a*b/256, 'L')", a=icon_alpha, b=box_alpha) + except ValueError: + # 米游社的图有时候会没有alpha导致报错,这时候直接使用box_alpha当做alpha就行 + icon_alpha = box_alpha + + icon2 = Image.new("RGBA", (150, 150), "#00000000") + icon2.paste(icon, (0, -10)) + + bg = Image.new("RGBA", (150, 150), "#00000000") + bg.paste(icon2, mask=icon_alpha) + bg.paste(box, mask=box) + + with open(icon_path, "wb") as icon_file: + bg.save(icon_file) + + +def up_label_and_point_list(): + # 更新label列表和资源点列表 + + schedule = request.Request(LABEL_URL) + schedule.add_header('User-Agent', header) + with request.urlopen(schedule, timeout=5) as f: + if f.code != 200: # 检查返回的状态码是否是200 + raise ValueError(f"资源标签列表初始化失败,错误代码{f.code}") + label_data = json.loads(f.read().decode('utf-8')) + + for label in label_data["data"]["tree"]: + data["all_resource_type"][str(label["id"])] = label + + for sublist in label["children"]: + data["all_resource_type"][str(sublist["id"])] = sublist + data["can_query_type_list"][sublist["name"]] = str(sublist["id"]) + up_icon_image(sublist) + + label["children"] = [] + + schedule = request.Request(POINT_LIST_URL) + schedule.add_header('User-Agent', header) + with request.urlopen(schedule) as f: + if f.code != 200: # 检查返回的状态码是否是200 + raise ValueError(f"资源点列表初始化失败,错误代码{f.code}") + test = json.loads(f.read().decode('utf-8')) + data["all_resource_point_list"] = test["data"]["point_list"] + + data["date"] = time.strftime("%d") + + +# def load_resource_type_id(): +# with open(os.path.join(FILE_PATH,'resource_type_id.json'), 'r', encoding='UTF-8') as f: +# json_data = json.load(f) +# for id in json_data.keys(): +# data["all_resource_type"][id] = json_data[id] +# if json_data[id]["depth"] != 1: +# data["can_query_type_list"][json_data[id]["name"]] = id + + +# 初始化 +# load_resource_type_id() +up_label_and_point_list() + + +class Resource_map(object): + + def __init__(self, resource_name): + self.resource_id = str(data["can_query_type_list"][resource_name]) + + # 地图要要裁切的左上角和右下角坐标 + # 这里初始化为地图的大小 + self.x_start = MAP_SIZE[0] + self.y_start = MAP_SIZE[1] + self.x_end = 0 + self.y_end = 0 + + self.map_image = MAP_IMAGE.copy() + + self.resource_icon = Image.open(self.get_icon_path()) + self.resource_icon = self.resource_icon.resize((int(150 * zoom), int(150 * zoom))) + + self.resource_xy_list = self.get_resource_point_list() + + def get_icon_path(self): + # 检查有没有图标,有返回正确图标,没有返回默认图标 + icon_path = os.path.join(FILE_PATH, "icon", f"{self.resource_id}.png") + + if os.path.exists(icon_path): + return icon_path + else: + return os.path.join(FILE_PATH, "icon", "0.png") + + def get_resource_point_list(self): + temp_list = [] + for resource_point in data["all_resource_point_list"]: + if str(resource_point["label_id"]) == self.resource_id: + # 获取xy坐标,然后加上中心点的坐标完成坐标转换 + x = resource_point["x_pos"] + CENTER[0] + y = resource_point["y_pos"] + CENTER[1] + temp_list.append((int(x), int(y))) + return temp_list + + def paste(self): + for x, y in self.resource_xy_list: + # 把资源图片贴到地图上 + self.map_image.paste(self.resource_icon, (x + resource_icon_offset[0], y + resource_icon_offset[1]), + self.resource_icon) + + # 找出4个方向最远的坐标,用于后边裁切 + self.x_start = min(x, self.x_start) + self.y_start = min(y, self.y_start) + self.x_end = max(x, self.x_end) + self.y_end = max(y, self.y_end) + + def crop(self): + + # 先把4个方向扩展150像素防止把资源图标裁掉 + self.x_start -= 150 + self.y_start -= 150 + self.x_end += 150 + self.y_end += 150 + + # 如果图片裁切的太小会看不出资源的位置在哪,检查图片裁切的长和宽看够不够1000,不到1000的按1000裁切 + if (self.x_end - self.x_start) < 1000: + center = int((self.x_end + self.x_start) / 2) + self.x_start = center - 500 + self.x_end = center + 500 + if (self.y_end - self.y_start) < 1000: + center = int((self.y_end + self.y_start) / 2) + self.y_start = center - 500 + self.y_end = center + 500 + + self.map_image = self.map_image.crop((self.x_start, self.y_start, self.x_end, self.y_end)) + + def get_cq_cod(self): + + if not self.resource_xy_list: + return "没有这个资源的信息" + + self.paste() + + self.crop() + + bio = BytesIO() + self.map_image.save(bio, format='JPEG') + base64_str = 'base64://' + base64.b64encode(bio.getvalue()).decode() + + return image(b64=base64_str) + + def get_resource_count(self): + return len(self.resource_xy_list) + + +def get_resource_map_mes(name): + if data["date"] != time.strftime("%d"): + up_label_and_point_list() + + if not (name in data["can_query_type_list"]): + return f"没有 {name} 这种资源。\n发送 原神资源列表 查看所有资源名称" + + map = Resource_map(name) + count = map.get_resource_count() + + if not count: + return f"没有找到 {name} 资源的位置,可能米游社wiki还没更新。" + + mes = f"资源 {name} 的位置如下\n" + mes += map.get_cq_cod() + + mes += f"\n\n※ {name} 一共找到 {count} 个位置点\n※ 数据来源于米游社wiki" + return mes + + +def get_resource_list_mes(): + temp = {} + + for id in data["all_resource_type"].keys(): + # 先找1级目录 + if data["all_resource_type"][id]["depth"] == 1: + temp[id] = [] + + for id in data["all_resource_type"].keys(): + # 再找2级目录 + if data["all_resource_type"][id]["depth"] == 2: + temp[str(data["all_resource_type"][id]["parent_id"])].append(id) + + mes = "当前资源列表如下:\n" + + for resource_type_id in temp.keys(): + + if resource_type_id in ["1", "12", "50", "51", "95", "131"]: + # 在游戏里能查到的数据这里就不列举了,不然消息太长了 + continue + + mes += f"{data['all_resource_type'][resource_type_id]['name']}:" + for resource_id in temp[resource_type_id]: + mes += f"{data['all_resource_type'][resource_id]['name']}," + mes += "\n" + + return mes diff --git a/plugins/genshin/query_resource_points/resource_type_id.json b/plugins/genshin/query_resource_points/resource_type_id.json new file mode 100644 index 00000000..9459f34b --- /dev/null +++ b/plugins/genshin/query_resource_points/resource_type_id.json @@ -0,0 +1,926 @@ +{ + "1": { + "id": 1, + "name": "传送点", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "2": { + "id": 2, + "name": "七天神像", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/c59585d1fabc9c22ad3fcf94e1622aa8_357413506633071859.png", + "parent_id": 1, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "3": { + "id": 3, + "name": "传送锚点", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/0cc42d15134cbb724304050fd0bbcaac_8799482478853097434.png", + "parent_id": 1, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "4": { + "id": 4, + "name": "神瞳", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "5": { + "id": 5, + "name": "风神瞳", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/4b568dcdea1c699456464c611ce87e4f_3484482126589511603.png", + "parent_id": 4, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "6": { + "id": 6, + "name": "岩神瞳", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/f4409292be83f81d0c41c350a91ebac1_355618004292502793.png", + "parent_id": 4, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "7": { + "id": 7, + "name": "地灵龛", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "8": { + "id": 8, + "name": "蒙德地灵龛", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/a9f458cf7ba149ec659aabb581050a0b_3339433578214432669.png", + "parent_id": 7, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "9": { + "id": 9, + "name": "璃月地灵龛", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/a9f458cf7ba149ec659aabb581050a0b_3479171218459475297.png", + "parent_id": 7, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "10": { + "id": 10, + "name": "区域特产", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "29": { + "id": 29, + "name": "落落莓", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/11e1861e2b94d1b1e132d61c0f7c3948_5882174105995719914.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "30": { + "id": 30, + "name": "绝云椒椒", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/3184e356629e8b071a878063d1c0df94_5172487424247849295.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "31": { + "id": 31, + "name": "嘟嘟莲", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/07a2252a60301893294ef377e563f0e7_7014418407781853378.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "32": { + "id": 32, + "name": "清心", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/0de9385a957ef0cb981a5ed6a6984f57_7797138076139828289.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "33": { + "id": 33, + "name": "小灯草", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/348fe1164e9330226b225c011aea4d5a_2068903308538485227.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "34": { + "id": 34, + "name": "琉璃袋", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/77dc4532fe938a24c4cc714d77d48b0d_6612669651078791213.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "35": { + "id": 35, + "name": "塞西莉亚花", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/e55cfc43f5e483362e9ddf433653d326_9031812646608361297.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "36": { + "id": 36, + "name": "霓裳花", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/e22d205c11b39b9b6984a4ec8adefeb2_2210397206297609865.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "37": { + "id": 37, + "name": "蒲公英籽", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/a348a4302f58f499bdf89025d2cb2cdb_2244957478004520779.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "38": { + "id": 38, + "name": "琉璃百合", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/dfe6d92e18060cd724ebadd73ba084c6_7141991283452930467.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "39": { + "id": 39, + "name": "慕风蘑菇", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/d0f4c83add3dc326ffc92b5fedb6f82c_3118392491847470850.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "40": { + "id": 40, + "name": "石珀", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/5789d9dc9c8840f21f9afc2437e9026e_8487232206600716291.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "41": { + "id": 41, + "name": "钩钩果", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/7dedeee543b94525f0812a18eb09b7d7_4938366361261655916.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "42": { + "id": 42, + "name": "夜泊石", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/51adcbda83a2f2b4422db9ad4908245b_7898256673375056193.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "43": { + "id": 43, + "name": "风车菊", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/387684f5c9a891135e05f95192b6dc21_2171784899125537458.png", + "parent_id": 10, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "11": { + "id": 11, + "name": "矿物", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "15": { + "id": 15, + "name": "白铁块", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/4d0e329b0458a918d376bbbabd4415cd_9079005216548585535.png", + "parent_id": 11, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "16": { + "id": 16, + "name": "水晶块", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/ceede1f6fa9a3e53986b5ac63e2aacb9_3251440935681461856.png", + "parent_id": 11, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "12": { + "id": 12, + "name": "怪物(精英)", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "19": { + "id": 19, + "name": "火斧丘丘暴徒", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/cef1444b97c8f49cd8cd8aa10e5448ae_1229715974301029440.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "20": { + "id": 20, + "name": "木盾丘丘暴徒", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/cef1444b97c8f49cd8cd8aa10e5448ae_2049522587981126653.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "21": { + "id": 21, + "name": "岩盾丘丘暴徒", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/cef1444b97c8f49cd8cd8aa10e5448ae_4383986804076887911.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "22": { + "id": 22, + "name": "火深渊法师", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/3c287ea61919d856723ba802fd91677f_2936850964636137610.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "23": { + "id": 23, + "name": "水深渊法师", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/5d59b593551bb62506096c76bd55ab2a_5561999899365928315.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "24": { + "id": 24, + "name": "冰深渊法师", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/4b9b07114f30df8715f41835d3215add_6327856690043584281.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "25": { + "id": 25, + "name": "愚人众 债务处理人", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/359e5697e4609a7f34714bfa65cce97e_7545179401283346969.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "26": { + "id": 26, + "name": "愚人众 雷萤术士", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/a73112218e1329ae4728a096554258d7_4082505538504798279.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "27": { + "id": 27, + "name": "遗迹守卫", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/86ddf140b786c6a2a73b038e341403a7_6217455819326456307.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "28": { + "id": 28, + "name": "遗迹猎者", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/99ce18638304f8169918c85436d0585c_5415189466598569723.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "47": { + "id": 47, + "name": "冰霜骗骗花", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/14/75276545/54904a37ab2165e5b8ad91c7ee805061_2703681786862158841.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "48": { + "id": 48, + "name": "炽热骗骗花", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/14/75276545/1848c68a09d54637721529abb35b22a1_7882961499456527312.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "49": { + "id": 49, + "name": "幼岩龙蜥", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/14/75276545/83d1ef1dbb3b6d489c0b150886597cbc_5647365818975751099.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "53": { + "id": 53, + "name": "丘丘岩盔王", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/a6e1a33b8f4bd4c8a091f69ead200948_2480904266424771100.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "54": { + "id": 54, + "name": "愚人众先遣队", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/8dd741d0f58dc6abef2f9ee6d278a062_7759801496426769012.png", + "parent_id": 12, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "13": { + "id": 13, + "name": "宝箱", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "17": { + "id": 17, + "name": "普通的宝箱", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/35cf41aad7620ce6d5dc516defb967f7_7806440070871726330.png", + "parent_id": 13, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "44": { + "id": 44, + "name": "精致的宝箱", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/14/75276545/35cf41aad7620ce6d5dc516defb967f7_6214340810257945197.png", + "parent_id": 13, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "45": { + "id": 45, + "name": "珍贵的宝箱", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/14/75276545/44a7de58782f36f15bec044c1069da76_7523256410581248233.png", + "parent_id": 13, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "46": { + "id": 46, + "name": "华丽的宝箱", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/14/75276545/35cf41aad7620ce6d5dc516defb967f7_3987566332689612662.png", + "parent_id": 13, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "14": { + "id": 14, + "name": "解谜", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "18": { + "id": 18, + "name": "指引仙灵", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/08/75276545/8de3558f991ac422463712dd095278b3_109842752079072307.png", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "64": { + "id": 64, + "name": "限时挑战", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/21/75795471/a6978cb8965e81de4a25accbf6c236ce_6189233402996409228.png", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "65": { + "id": 65, + "name": "风车机关", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_7547151797455251961.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "66": { + "id": 66, + "name": "漂浮的风史莱姆", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_6780166156178323412.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "67": { + "id": 67, + "name": "压力机关", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_5932273944571249310.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "68": { + "id": 68, + "name": "蓬蓬果", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_7627546850715675857.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "69": { + "id": 69, + "name": "挖掘宝箱", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_200949033774003499.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "70": { + "id": 70, + "name": "元素方碑", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_8520221369291334139.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "71": { + "id": 71, + "name": "火炬机关", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_1061118532437351431.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "72": { + "id": 72, + "name": "巨型碎石", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_6449674692302465374.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "73": { + "id": 73, + "name": "小石堆", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_7798666829547657712.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "74": { + "id": 74, + "name": "拔植物", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_3891992353724563278.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "75": { + "id": 75, + "name": "被束缚的宝箱", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_7069442788377617628.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "76": { + "id": 76, + "name": "岩种子", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_6714446188416963945.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "77": { + "id": 77, + "name": "微解谜", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/10/21/75795471/de87958fa1e78efcc84da49aad61dede_3053004782269703586.jpg", + "parent_id": 14, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "50": { + "id": 50, + "name": "怪物(普通)", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "55": { + "id": 55, + "name": "丘丘人", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/74c2350936386d12f84e4244b8bd9750_8061221501486024583.png", + "parent_id": 50, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "56": { + "id": 56, + "name": "射手丘丘人", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/74c2350936386d12f84e4244b8bd9750_8668908145618002848.png", + "parent_id": 50, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "57": { + "id": 57, + "name": "丘丘萨满", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/fbd2f8a868f6c3a6f587d57d655f40c9_1156685569894627424.png", + "parent_id": 50, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "58": { + "id": 58, + "name": "盗宝团", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/a9ecb7952e877dfd7c1dfae5132c7181_242314377398779361.png", + "parent_id": 50, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "59": { + "id": 59, + "name": "史莱姆", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/de444c63df86b407045c0cca2d9c24b2_761844897909742071.png", + "parent_id": 50, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "51": { + "id": 51, + "name": "世界任务", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "52": { + "id": 52, + "name": "世界任务", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/16/75795471/c7263000d1f1ec150eddd27fca4d8630_2386396225561541114.png", + "parent_id": 51, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "60": { + "id": 60, + "name": "材料", + "icon": "", + "parent_id": 0, + "depth": 1, + "node_type": 1, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "61": { + "id": 61, + "name": "冰雾花花朵", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/cca41572bb14d20c094ce9af77eefda9_2844359998862121652.png", + "parent_id": 60, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "62": { + "id": 62, + "name": "烈焰花花蕊", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/82a7a8327bfa630eb5e52695a2b456e9_4760074611076337816.png", + "parent_id": 60, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + }, + "63": { + "id": 63, + "name": "电气水晶", + "icon": "https://uploadstatic.mihoyo.com/ys-obc/2020/09/17/75276545/aab9020763a7bee1fb532b7117b21fd1_5874466862813696108.png", + "parent_id": 60, + "depth": 2, + "node_type": 2, + "jump_type": 0, + "jump_target_id": 0, + "display_priority": 0, + "children": [] + } +} \ No newline at end of file