commit 7b648b8ee87007456fc0321f7d667654d2143f2c Author: Wuyi无疑 <444835641@qq.com> Date: Wed Mar 1 23:16:36 2023 +0800 🎉 `v4`分支启动,需结合`core`使用 diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..97f40118 --- /dev/null +++ b/.gitignore @@ -0,0 +1,682 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,jetbrains+all,python +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,visualstudiocode,jetbrains+all,python + +### JetBrains+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### JetBrains+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env/ +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +### VisualStudioCode ### +!.vscode/* + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# Support for Project snippet scope +.vscode/*.code-snippets + +# Ignore code-workspaces +*.code-workspace + +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools + +# Local History for Visual Studio Code + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +### VisualStudio Patch ### +# Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,jetbrains+all,python,data + +### CI ### +result.txt + +### GenshinUID ### +GenshinUID/genshinuid_help/help.png +GenshinUID/genshinuid_map/map_data +GenshinUID/genshinuid_xkdata/abyss_total.png +成就汇总.xlsx +ReliquaryExcelConfigData.json +AvatarSkillExcelConfigData.json +WeaponExcelConfigData.json +AvatarTalentExcelConfigData.json +AvatarExcelConfigData.json +曲线素材.xlsx +参考面板.xlsx + +### Debug ### +testnb2/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..159ef5df --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,37 @@ +ci: + autofix_commit_msg: "🚨 `pre-commit-ci`修复格式错误" + skip: + - "poetry-lock" + autofix_prs: true + autoupdate_branch: v4 + autoupdate_schedule: monthly + autoupdate_commit_msg: "⬆️ `pre-commit-ci`自动升级" +repos: + - repo: https://github.com/pycqa/isort + rev: 5.11.5 + hooks: + - id: isort + + - repo: https://github.com/psf/black + rev: 22.6.0 + hooks: + - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 5.0.4 + hooks: + - id: flake8 + + - repo: https://github.com/hadialqattan/pycln + rev: v2.1.2 + hooks: + - id: pycln + + - repo: https://github.com/python-poetry/poetry + rev: 1.3.1 + hooks: + - id: poetry-check + - id: poetry-lock + - id: poetry-export + args: ["-f", "requirements.txt", "--without-hashes", "-o", "requirements.txt"] + verbose: true diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..60213297 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "ms-python.python", + "ms-python.vscode-pylance", + "ms-python.isort", + "ms-python.black-formatter" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..26934ad2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,26 @@ +{ + "python.languageServer": "Pylance", + "python.analysis.typeCheckingMode": "basic", + "cSpell.words": [ + "enka", + "genshin", + "genshinuid" + ], + "editor.formatOnSave": true, + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": true + } + }, + "isort.args": [ + "--profile", + "black" + ], + "python.formatting.provider": "black", + "python.linting.flake8Enabled": true, + "python.linting.flake8CategorySeverity.W": "Warning", + "python.linting.flake8CategorySeverity.F": "Warning", + "python.linting.flake8CategorySeverity.E": "Warning", +} diff --git a/GenshinUID/__full__.py b/GenshinUID/__full__.py new file mode 100644 index 00000000..e69de29b diff --git a/GenshinUID/genshinuid_abyss/__init__.py b/GenshinUID/genshinuid_abyss/__init__.py new file mode 100644 index 00000000..fc10ffbf --- /dev/null +++ b/GenshinUID/genshinuid_abyss/__init__.py @@ -0,0 +1,39 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..utils.convert import get_uid +from ..utils.error_reply import UID_HINT +from .draw_abyss_card import draw_abyss_img + + +@SV('查询深渊').on_prefix(('查询深渊', 'sy', '查询上期深渊', 'sqsy')) +async def send_abyss_info(bot: Bot, ev: Event): + await bot.logger.info('开始执行[查询深渊信息]') + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[查询深渊信息]uid: {}'.format(uid)) + + if 'sq' in ev.command or '上期' in ev.command: + schedule_type = '2' + else: + schedule_type = '1' + await bot.logger.info('[查询深渊信息]深渊期数: {}'.format(schedule_type)) + + if ev.text in ['九', '十', '十一', '十二']: + floor = ( + ev.text.replace('九', '9') + .replace('十一', '11') + .replace('十二', '12') + .replace('十', '10') + ) + else: + floor = ev.text + if floor is not None: + floor = int(floor) + + await bot.logger.info('[查询深渊信息]深渊层数: {}'.format(floor)) + + im = await draw_abyss_img(uid, floor, schedule_type) + await bot.send(im) diff --git a/GenshinUID/genshinuid_abyss/draw_abyss_card.py b/GenshinUID/genshinuid_abyss/draw_abyss_card.py new file mode 100644 index 00000000..a3f42002 --- /dev/null +++ b/GenshinUID/genshinuid_abyss/draw_abyss_card.py @@ -0,0 +1,315 @@ +import time +import asyncio +from pathlib import Path +from typing import Union, Optional + +from nonebot.log import logger +from PIL import Image, ImageDraw + +from ..utils.convert import GsCookie +from ..utils.image.convert import convert_img +from ..utils.image.image_tools import get_simple_bg +from ..utils.resource.download_url import download_file +from ..gsuid_utils.api.mys.models import AbyssBattleAvatar +from ..utils.fonts.genshin_fonts import genshin_font_origin +from ..utils.resource.RESOURCE_PATH import ( + CHAR_PATH, + TEXT2D_PATH, + CHAR_SIDE_PATH, + CHAR_STAND_PATH, +) + +TEXT_PATH = Path(__file__).parent / 'texture2D' +TALENT_PATH = TEXT2D_PATH / 'talent' + +abyss_title_pic = Image.open(TEXT_PATH / 'abyss_title.png') +char_mask = Image.open(TEXT_PATH / 'char_mask.png') +char_frame = Image.open(TEXT_PATH / 'char_frame.png') + +text_title_color = (29, 29, 29) +text_floor_color = (30, 31, 25) + +genshin_font_70 = genshin_font_origin(70) +genshin_font_32 = genshin_font_origin(32) +genshin_font_27 = genshin_font_origin(27) + + +async def get_abyss_star_pic(star: int) -> Image.Image: + star_pic = Image.open(TEXT_PATH / f'star{star}.png') + return star_pic + + +async def get_rarity_pic(rarity: int) -> Image.Image: + rarity_pic = Image.open(TEXT_PATH / f'rarity{rarity}.png') + return rarity_pic + + +async def get_talent_pic(talent: int) -> Image.Image: + return Image.open(TALENT_PATH / f'talent_{talent}.png') + + +async def get_rank_data(data, path): + char_id = data[0]['avatar_id'] + # 只下载侧视图 + if path == CHAR_SIDE_PATH: + # 确认角色头像路径 + char_side_path = CHAR_PATH / f'{char_id}.png' + # 不存在自动下载 + if not char_side_path.exists(): + await download_file(data[0]['avatar_icon'], 3, f'{char_id}.png') + char_pic = Image.open(path / f'{char_id}.png').convert('RGBA') + if path == CHAR_STAND_PATH: + char_pic = char_pic.resize((862, 528), Image.Resampling.BICUBIC) + elif path == CHAR_SIDE_PATH: + char_pic = char_pic.resize((60, 60), Image.Resampling.BICUBIC) + rank_value = str(data[0]['value']) + return char_pic, rank_value + + +async def _draw_abyss_card( + char: AbyssBattleAvatar, + talent_num: str, + floor_pic: Image.Image, + index_char: int, + index_part: int, +): + char_card = Image.new('RGBA', (150, 190), (0, 0, 0, 0)) + # 根据稀有度获取背景 + char_bg = await get_rarity_pic(char['rarity']) + # 确认角色头像路径 + char_pic_path = CHAR_PATH / f'{char["id"]}.png' + # 不存在自动下载 + if not char_pic_path.exists(): + await download_file(char['icon'], 1, f'{char["id"]}.png') + char_pic = ( + Image.open(char_pic_path) + .convert('RGBA') + .resize((150, 150), Image.Resampling.LANCZOS) # type: ignore + ) + char_img = Image.new('RGBA', (150, 190), (0, 0, 0, 0)) + char_img.paste(char_pic, (0, 3), char_pic) + char_bg = Image.alpha_composite(char_bg, char_img) + char_card.paste(char_bg, (0, 0), char_mask) + char_card = Image.alpha_composite(char_card, char_frame) + talent_pic = await get_talent_pic(int(talent_num)) + char_card.paste(talent_pic, (83, 156), talent_pic) + char_card_draw = ImageDraw.Draw(char_card) + char_card_draw.text( + (9, 172), + f'Lv.{char["level"]}', + font=genshin_font_27, + fill=text_floor_color, + anchor='lm', + ) + floor_pic.paste( + char_card, + (0 + 155 * index_char, 50 + index_part * 195), + char_card, + ) + + +async def _draw_floor_card( + level_star: int, + floor_pic: Image.Image, + bg_img: Image.Image, + time_str: str, + index_floor: int, +): + star_pic = await get_abyss_star_pic(level_star) + floor_pic.paste(star_pic, (420, -5), star_pic) + floor_pic_draw = ImageDraw.Draw(floor_pic) + floor_pic_draw.text( + (31, 25), + time_str, + font=genshin_font_27, + fill=text_floor_color, + anchor='lm', + ) + bg_img.paste(floor_pic, (5, 415 + index_floor * 440), floor_pic) + + +async def draw_abyss_img( + uid: str, + floor: Optional[int] = None, + schedule_type: str = '1', +) -> Union[bytes, str]: + + # 获取Cookies + data = GsCookie() + retcode = await data.get_cookie(uid) + if retcode: + return retcode + raw_data = data.raw_data + raw_abyss_data = await data.get_spiral_abyss_data(schedule_type) + + # 获取数据 + if not raw_abyss_data: + return '没有获取到深渊数据' + if raw_data: + char_data = raw_data['avatars'] + else: + return '没有获取到角色数据' + char_temp = {} + + # 获取查询者数据 + is_unfull = False + if floor: + floor = floor - 9 + if floor < 0: + return '楼层不能小于9层!' + if len(raw_abyss_data['floors']) >= floor + 1: + floors_data = raw_abyss_data['floors'][floor] + else: + return '你还没有挑战该层!' + else: + if len(raw_abyss_data['floors']) == 0: + return '你还没有挑战本期深渊!\n可以使用[上期深渊]命令查询上期~' + floors_data = raw_abyss_data['floors'][-1] + levels_num = len(floors_data['levels']) + if floors_data['levels'][0]['battles']: + floors_title = str(floors_data['index']) + '层' + else: + floors_title = '统计' + is_unfull = True + + # 获取背景图片各项参数 + based_w = 625 + based_h = 415 if is_unfull else 415 + levels_num * 440 + white_overlay = Image.new('RGBA', (based_w, based_h), (255, 255, 255, 188)) + + bg_img = await get_simple_bg(based_w, based_h) + bg_img.paste(white_overlay, (0, 0), white_overlay) + + abyss_title = Image.new('RGBA', (625, 415), (0, 0, 0, 0)) + + damage_rank = raw_abyss_data['damage_rank'] + defeat_rank = raw_abyss_data['defeat_rank'] + take_damage_rank = raw_abyss_data['take_damage_rank'] + normal_skill_rank = raw_abyss_data['normal_skill_rank'] + energy_skill_rank = raw_abyss_data['energy_skill_rank'] + + dmg_pic, dmg_val = await get_rank_data(damage_rank, CHAR_STAND_PATH) + defeat_pic, defeat_val = await get_rank_data(defeat_rank, CHAR_SIDE_PATH) + ( + take_damage_pic, + take_damage_val, + ) = await get_rank_data(take_damage_rank, CHAR_SIDE_PATH) + ( + normal_skill_pic, + normal_skill_val, + ) = await get_rank_data(normal_skill_rank, CHAR_SIDE_PATH) + ( + energy_skill_pic, + energy_skill_val, + ) = await get_rank_data(energy_skill_rank, CHAR_SIDE_PATH) + + abyss_title.paste(dmg_pic, (13, -42), dmg_pic) + abyss_title = Image.alpha_composite(abyss_title, abyss_title_pic) + abyss_title.paste(defeat_pic, (5, 171), defeat_pic) + abyss_title.paste(take_damage_pic, (5, 171 + 54), take_damage_pic) + abyss_title.paste(normal_skill_pic, (5, 171 + 54 * 2), normal_skill_pic) + abyss_title.paste(energy_skill_pic, (5, 171 + 54 * 3), energy_skill_pic) + + abyss_title_draw = ImageDraw.Draw(abyss_title) + abyss_title_draw.text( + (41, 95), + f'深渊{floors_title}', + font=genshin_font_70, + fill=text_title_color, + anchor='lm', + ) + abyss_title_draw.text( + (41, 139), + f'UID{uid}', + font=genshin_font_27, + fill=text_title_color, + anchor='lm', + ) + abyss_title_draw.text( + (610, 282), + dmg_val, + font=genshin_font_32, + fill=text_title_color, + anchor='rm', + ) + abyss_title_draw.text( + (610, 357), + str(raw_abyss_data['total_battle_times']), + font=genshin_font_32, + fill=text_title_color, + anchor='rm', + ) + abyss_title_draw.text( + (64, 217), + defeat_val, + font=genshin_font_27, + fill=text_title_color, + anchor='lm', + ) + abyss_title_draw.text( + (64, 217 + 54), + take_damage_val, + font=genshin_font_27, + fill=text_title_color, + anchor='lm', + ) + abyss_title_draw.text( + (64, 217 + 54 * 2), + normal_skill_val, + font=genshin_font_27, + fill=text_title_color, + anchor='lm', + ) + abyss_title_draw.text( + (64, 217 + 54 * 3), + energy_skill_val, + font=genshin_font_27, + fill=text_title_color, + anchor='lm', + ) + + bg_img.paste(abyss_title, (0, 0), abyss_title) + if is_unfull: + pass + else: + task = [] + for index_floor, level in enumerate(floors_data['levels']): + floor_pic = Image.new('RGBA', (615, 440), (0, 0, 0, 0)) + level_star = level['star'] + timestamp = int(level['battles'][0]['timestamp']) + time_array = time.localtime(timestamp) + time_str = time.strftime('%Y-%m-%d %H:%M:%S', time_array) + for index_part, battle in enumerate(level['battles']): + for index_char, char in enumerate(battle['avatars']): + # 获取命座 + if char["id"] in char_temp: + talent_num = char_temp[char["id"]] + else: + for i in char_data: + if i["id"] == char["id"]: + talent_num = str( + i["actived_constellation_num"] + ) + char_temp[char["id"]] = talent_num + break + task.append( + _draw_abyss_card( + char, + talent_num, # type: ignore + floor_pic, + index_char, + index_part, + ) + ) + await asyncio.gather(*task) + task.clear() + task.append( + _draw_floor_card( + level_star, floor_pic, bg_img, time_str, index_floor + ) + ) + await asyncio.gather(*task) + + res = await convert_img(bg_img) + logger.info('[查询深渊信息]绘图已完成,等待发送!') + return res diff --git a/GenshinUID/genshinuid_abyss/texture2D/abyss_title.png b/GenshinUID/genshinuid_abyss/texture2D/abyss_title.png new file mode 100644 index 00000000..5b979ee6 Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/abyss_title.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/char_frame.png b/GenshinUID/genshinuid_abyss/texture2D/char_frame.png new file mode 100644 index 00000000..e660b49b Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/char_frame.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/char_mask.png b/GenshinUID/genshinuid_abyss/texture2D/char_mask.png new file mode 100644 index 00000000..35c90ad8 Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/char_mask.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/rarity4.png b/GenshinUID/genshinuid_abyss/texture2D/rarity4.png new file mode 100644 index 00000000..05aaf03f Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/rarity4.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/rarity5.png b/GenshinUID/genshinuid_abyss/texture2D/rarity5.png new file mode 100644 index 00000000..4c90d3a8 Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/rarity5.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/star0.png b/GenshinUID/genshinuid_abyss/texture2D/star0.png new file mode 100644 index 00000000..24566a6e Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/star0.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/star1.png b/GenshinUID/genshinuid_abyss/texture2D/star1.png new file mode 100644 index 00000000..c6983882 Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/star1.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/star2.png b/GenshinUID/genshinuid_abyss/texture2D/star2.png new file mode 100644 index 00000000..6c1091da Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/star2.png differ diff --git a/GenshinUID/genshinuid_abyss/texture2D/star3.png b/GenshinUID/genshinuid_abyss/texture2D/star3.png new file mode 100644 index 00000000..18fe43c3 Binary files /dev/null and b/GenshinUID/genshinuid_abyss/texture2D/star3.png differ diff --git a/GenshinUID/genshinuid_achievement/__init__.py b/GenshinUID/genshinuid_achievement/__init__.py new file mode 100644 index 00000000..26a3db7a --- /dev/null +++ b/GenshinUID/genshinuid_achievement/__init__.py @@ -0,0 +1,19 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from .get_achi_desc import get_achi, get_daily_achi + + +@SV('成就委托查询').on_prefix('查委托') +async def send_task_info(bot: Bot, ev: Event): + await bot.logger.info(f'[查委托] 参数:{ev.text}') + im = await get_daily_achi(ev.text) + await bot.send(im) + + +@SV('成就委托查询').on_prefix('查成就') +async def send_achi_info(bot: Bot, ev: Event): + await bot.logger.info(f'[查成就] 参数:{ev.text}') + im = await get_achi(ev.text) + await bot.send(im) diff --git a/GenshinUID/genshinuid_achievement/all_achi.json b/GenshinUID/genshinuid_achievement/all_achi.json new file mode 100644 index 00000000..242c075e --- /dev/null +++ b/GenshinUID/genshinuid_achievement/all_achi.json @@ -0,0 +1,4388 @@ +{ + "妖鬼狂言百物语": { + "book": "天地万象", + "desc": "集齐全套《鹮巷物语》。", + "guide": "《鹮巷物语·五》只能在钓鱼中获得,依旧是10张\n全60残页*视频地址(点击自动跳转):\nhttps://www.bilibili.com/video/BV1Tf4y1n7R8?p=1", + "link": "https://www.bilibili.com/video/BV1Tf4y1n7R8?spm_id_from=333.999.0.0" + }, + "动物园大亨": { + "book": "天地万象", + "desc": "使用道具「四方八方之网」捕获100只野外生物。", + "guide": null, + "link": "" + }, + "昨日重现": { + "book": "天地万象", + "desc": "通过「千籁至音」系列摆设在尘歌壶内激活60首旋律。", + "guide": "日常购买+新增24个掉落", + "link": "" + }, + "俯瞰风景": { + "book": "天地万象", + "desc": "抵达庆云顶的制高点。", + "guide": null, + "link": "" + }, + "烈风的遗骨": { + "book": "天地万象", + "desc": "登上风龙废墟的高塔顶端。", + "guide": null, + "link": "" + }, + "「风带来了故事的种子…」": { + "book": "天地万象", + "desc": "到达蒙德东北方的无名小岛。", + "guide": null, + "link": "" + }, + "矢志不渝": { + "book": "天地万象", + "desc": "开启爱心形石阵中央的宝箱。", + "guide": null, + "link": "" + }, + "启动跃迁引擎!": { + "book": "天地万象", + "desc": "穿越誓言岬上空的时空隧道。", + "guide": null, + "link": "" + }, + "风神的宠儿": { + "book": "天地万象", + "desc": "在蒙德城内的神像手中坐下。", + "guide": null, + "link": "" + }, + "冢里最好的剑": { + "book": "天地万象", + "desc": "解开剑冢的三层封印。", + "guide": "《探索剑冢封印》", + "link": "" + }, + "华清归藏密宫": { + "book": "天地万象", + "desc": "循着长存者之迹,叩开了秘境之门。", + "guide": null, + "link": "" + }, + "塞西莉亚苗圃": { + "book": "天地万象", + "desc": "帮助仙灵归位,解锁奔狼领内的秘境入口。", + "guide": null, + "link": "" + }, + "无妄引咎密宫": { + "book": "天地万象", + "desc": "跟随仙灵点燃火光,解锁无妄坡内的秘境入口。", + "guide": null, + "link": "" + }, + "「只要用心…」": { + "book": "天地万象", + "desc": "烹饪1道口味奇怪的料理。", + "guide": "料理失败获得", + "link": "" + }, + "「…人人都是食神。」": { + "book": "天地万象", + "desc": "烹饪10道口味奇怪的料理。", + "guide": "~", + "link": "" + }, + "十岁差点打倒野猪": { + "book": "天地万象", + "desc": "被野猪击败。", + "guide": "角色残血状态被野猪(雪山的猪不行)撞死即可", + "link": "" + }, + "金牌飞行执照": { + "book": "天地万象", + "desc": "一次滑翔很远、很远的距离。", + "guide": null, + "link": "" + }, + "「在空中飞行程度的能力」": { + "book": "天地万象", + "desc": "持续滑翔超过80秒。", + "guide": null, + "link": "" + }, + "如光似电": { + "book": "天地万象", + "desc": "持续冲刺或使用替代冲刺的能力,移动15秒。", + "guide": "原神 1.0 时期曾用名:奔跑吧!梅洛斯", + "link": "" + }, + "朋友遍天下": { + "book": "天地万象", + "desc": "在冒险中,与各种各样的人相识。", + "guide": "根据解包,达成条件是累计 10000 次对话,但对话的次数怎么算的并不清楚\nPS:不一定是找 NPC 对话,你找合成台对话也算次数", + "link": "" + }, + "威遍风土": { + "book": "天地万象", + "desc": "蒙德的声望等级达到8级。", + "guide": null, + "link": "" + }, + "名震云来": { + "book": "天地万象", + "desc": "璃月的声望等级达到8级。", + "guide": null, + "link": "" + }, + "布武雷国": { + "book": "天地万象", + "desc": "稻妻的声望等级达到10级。", + "guide": null, + "link": "" + }, + "QUEST CLEAR": { + "book": "天地万象", + "desc": "完成30次「讨伐悬赏」。", + "guide": null, + "link": "" + }, + "见习勇者": { + "book": "天地万象", + "desc": "完成30次「居民请求」。", + "guide": null, + "link": "" + }, + "QUEST FAILED": { + "book": "天地万象", + "desc": "跟丢了悬赏目标…", + "guide": "讨伐悬赏失败即可", + "link": "" + }, + "多冷的隆冬": { + "book": "天地万象", + "desc": "因为严寒而倒下…", + "guide": null, + "link": "" + }, + "祭司、公主与记事者": { + "book": "天地万象", + "desc": "获得雪葬之都的宝物。", + "guide": "雪山 3 个宝匣的解密", + "link": "" + }, + "逆子的归乡": { + "book": "天地万象", + "desc": "循着过去的考察队中某人的路径,抵达他启程返乡的地方。", + "guide": "雪山 3 个残旧的记事", + "link": "" + }, + "千年雪藏的事": { + "book": "天地万象", + "desc": "了解过去一支雪山考察队的结局。", + "guide": "《覆雪之国》", + "link": "" + }, + "冰冷的钢铁": { + "book": "天地万象", + "desc": "获得星银铸造的古代武器。", + "guide": "雪山剧情解锁获得,而不是自己锻造雪葬的星银", + "link": "" + }, + "无果的远征": { + "book": "天地万象", + "desc": "发现很多遗迹机器的遗骸…", + "guide": "雪山 9 个遗迹守卫的记录", + "link": "" + }, + "没能讲出的故事": { + "book": "天地万象", + "desc": "在意想不到之处,结识了意想不到的朋友。", + "guide": "雪山喂狐狸拿到宝箱", + "link": "" + }, + "一览众山小": { + "book": "天地万象", + "desc": "抵达龙脊雪山的最高峰。", + "guide": null, + "link": "" + }, + "一个冬天的童话": { + "book": "天地万象", + "desc": "在雪堆下发现了冰晶蝶。", + "guide": null, + "link": "" + }, + "猎人变成了猎物": { + "book": "天地万象", + "desc": "被大雪猪王击败。", + "guide": null, + "link": "" + }, + "冷静点!": { + "book": "天地万象", + "desc": "击败处于狂暴状态下的大雪猪王。", + "guide": null, + "link": "" + }, + "「一口吃掉了几十万摩拉!」": { + "book": "天地万象", + "desc": "掌握「稠汁蔬菜炖肉」的制作方法。", + "guide": "《啊,新鲜的肉!》", + "link": "" + }, + "天雷圣裁": { + "book": "天地万象", + "desc": "被落雷击中。", + "guide": null, + "link": "" + }, + "接近天空的地方…": { + "book": "天地万象", + "desc": "登上复原后的寒天之钉。", + "guide": null, + "link": "" + }, + "嬗变核素": { + "book": "天地万象", + "desc": "利用「参量质变仪」,完成一次物质质变。", + "guide": null, + "link": "" + }, + "…你其实听得见吧?": { + "book": "天地万象", + "desc": "派蒙也会累的。", + "guide": "彩蛋级成就,在游戏设置里打开声音,疯狂拖动音量调节5次并听完派蒙说话。", + "link": "" + }, + "哟嚯嚯,再来瓶蒲公英酒": { + "book": "天地万象", + "desc": "登上「浪船」。", + "guide": null, + "link": "" + }, + "「乘风破浪真君」": { + "book": "天地万象", + "desc": "持续搭乘「浪船」达到一定时间。", + "guide": "大概是 180 秒", + "link": "" + }, + "Nice boat!": { + "book": "天地万象", + "desc": "与其他玩家交换「浪船」。", + "guide": null, + "link": "" + }, + "…其名为「玛丽·塞勒斯特」": { + "book": "天地万象", + "desc": "「浪船」被破坏了…", + "guide": null, + "link": "" + }, + "Deja Vu!": { + "book": "天地万象", + "desc": "持续高速行驶「浪船」达到一定时间。", + "guide": null, + "link": "" + }, + "山田五的木槌": { + "book": "天地万象", + "desc": "多次识破妖狸的法术。", + "guide": "累计做 15 次。同一个地点的妖狸可重复计算,12 小时刷新。", + "link": "" + }, + "「鲸井御殿流手鞠术」": { + "book": "天地万象", + "desc": "陪鲸井小弟玩「手鞠游戏」。", + "guide": "《「手鞠游戏」》", + "link": "" + }, + "本朝手鞠戏小传": { + "book": "天地万象", + "desc": "其他玩家参加了你所设置的「手鞠游戏」。", + "guide": null, + "link": "" + }, + "派蒙的幸运日!": { + "book": "天地万象", + "desc": "在鸣神大社,抽中「大吉」的签文。", + "guide": "欧皇试炼!吉4种:大吉、中吉、末吉、吉;(大吉很好出,统计概率50%概率)", + "link": "" + }, + "诸事不宜…": { + "book": "天地万象", + "desc": "在鸣神大社,抽中「大凶」的签文。", + "guide": "欧皇试炼!凶2种:大凶、凶。(大凶非常难出,统计概率不到10%)", + "link": "" + }, + "地宫传奇…才怪咧!": { + "book": "天地万象", + "desc": "发掘失落记忆的冒险本身,又何尝不是宝藏呢?", + "guide": "《农民的宝藏》:在刃连岛救了被锁在牢笼里的人后触发任务,完成任务后拿到成就", + "link": "" + }, + "SYUUMATSU GAIDEN": { + "book": "天地万象", + "desc": "被卷入终末番与愚人众的战斗中…", + "guide": "这个成就在 2.4 版本终于实装了\n去荒海传送点右边的愚人众营地捡到纸条,之后抽完签找玄冬林檎对暗号,要做 4 天才能触发最终剧情\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Am4y1D7Xa/" + }, + "岩藏武艺帐": { + "book": "天地万象", + "desc": "见证岩藏流的末路。", + "guide": "击败所有的岩藏流后人", + "link": "" + }, + "开门放狗": { + "book": "天地万象", + "desc": "解放寅太郎。", + "guide": "在刃连岛找到钥匙后,“开门放狗”", + "link": "" + }, + "情非得已": { + "book": "天地万象", + "desc": "打开广海的心结。", + "guide": "《广海的守望》", + "link": "" + }, + "不再变老": { + "book": "天地万象", + "desc": "向殁者献上花束。", + "guide": null, + "link": "" + }, + "为人的条件?": { + "book": "天地万象", + "desc": "见证武士的宿命。", + "guide": "《武者的宿命》", + "link": "" + }, + "无灵魂处的灵魂": { + "book": "天地万象", + "desc": "找到鹫津的遗物。", + "guide": "《险恶的教喻》", + "link": "" + }, + "荒岛朝圣指南": { + "book": "天地万象", + "desc": "找到八酝岛所有的神龛。", + "guide": null, + "link": "" + }, + "三千里的起点": { + "book": "天地万象", + "desc": "在踏鞴砂和鸣神岛找到长次。", + "guide": "《执望三千里》后续", + "link": "" + }, + "游医的奥德赛": { + "book": "天地万象", + "desc": "见证保本的结局。", + "guide": "完成《孤岛诊疗谭》后在篮子里每天交付一次鸣草,第四天跟着元素视野找到 3 个纸条后拿到成就", + "link": "" + }, + "「Knock Knock」": { + "book": "天地万象", + "desc": "打开「御影炉心」周围的护罩。", + "guide": "《踏鞴物语》", + "link": "" + }, + "神无冢作战计划": { + "book": "天地万象", + "desc": "打倒复苏的「无相之雷」。", + "guide": "《医樱》", + "link": "" + }, + "挥刀的理由": { + "book": "天地万象", + "desc": "让「公义」恢复清醒。", + "guide": "《刀剑成梦》", + "link": "" + }, + "大业物": { + "book": "天地万象", + "desc": "挑战并轻松击败「公义」。", + "guide": "完成《刀剑成梦》后再次挑战「公义」,并在 30 秒内击败,可无限挑战。\n游戏内时间凌晨 0-2 点公义会进入强化状态,不建议在那个时间点去挑战", + "link": "" + }, + "重开之花": { + "book": "天地万象", + "desc": "获得叶名山薰的赠礼。", + "guide": "完成《踏鞴物语·终幕》且在阿敬处开宝箱拿到“一袋花种”后,与叶名山薰对话,进行到第三天可以拿到成就", + "link": "" + }, + "承蒙惠顾": { + "book": "天地万象", + "desc": "获得阿敬的宝箱里的大奖。", + "guide": "大奖是锻造武器破魔之弓的图纸", + "link": "" + }, + "雷之祸乱": { + "book": "天地万象", + "desc": "因为「雷祸」的伤害而倒下…", + "guide": null, + "link": "" + }, + "框架外收获": { + "book": "天地万象", + "desc": "用「神居岛崩炮」轰开一处藏宝地。", + "guide": null, + "link": "" + }, + "大踏鞴长正": { + "book": "天地万象", + "desc": "获得过去某把武器的绘图。", + "guide": null, + "link": "" + }, + "「…腐肉朽处花争妍。」": { + "book": "天地万象", + "desc": "终结十位已歿武士的怨念。", + "guide": null, + "link": "" + }, + "「这就是我的放生路线!」": { + "book": "天地万象", + "desc": "鱼儿在挣扎状态中逃脱。", + "guide": null, + "link": "" + }, + "「切,原来是来钓鱼的…」": { + "book": "天地万象", + "desc": "抛竿时吓跑了鱼儿。", + "guide": null, + "link": "" + }, + "如愿以偿": { + "book": "天地万象", + "desc": "请小卷婆婆占卜五次,并获得理想的结果。", + "guide": "《海渊仙草灵验记》后续 连续做5天", + "link": "" + }, + "人鱼童话": { + "book": "天地万象", + "desc": "帮助久美解开心结。", + "guide": "《孤独的海兽》", + "link": "" + }, + "远海牧人的宝藏": { + "book": "天地万象", + "desc": "从酒醉的狂言中,寻到大海贼最宝贵的遗产。", + "guide": "2.1版本全58个成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1P3411z78K?spm_id_from=333.999.0.0" + }, + "诚实高个儿西尔弗": { + "book": "天地万象", + "desc": "找到林藏埋藏的所有宝藏。", + "guide": null, + "link": "" + }, + "是时候征服海祇岛了!": { + "book": "天地万象", + "desc": "解除雷神神龛处的封印。", + "guide": null, + "link": "" + }, + "池中宅邸": { + "book": "天地万象", + "desc": "解锁「池中宅邸」。", + "guide": null, + "link": "" + }, + "小猎犬号搁浅记": { + "book": "天地万象", + "desc": "跟随无名学者的脚步探索海祇岛。", + "guide": null, + "link": "" + }, + "「奴家是猫。名字叫寝子」": { + "book": "天地万象", + "desc": "拜见「浅濑神社代宫司」寝子。", + "guide": "《清籁逐雷记·其一》", + "link": "" + }, + "云中的猫": { + "book": "天地万象", + "desc": "和「浅濑神社代宫司」寝子一起,见证某件迟来的「好事」。", + "guide": "《寝子是只猫·迟来的「好事」》", + "link": "" + }, + "猫的赠礼": { + "book": "天地万象", + "desc": "在清籁岛上为小猫喂食,并获得它们的好感。", + "guide": "《寝子是只猫》系列后续", + "link": "" + }, + "无可质疑的宝藏": { + "book": "天地万象", + "desc": "「都说了只有一幅画啊!」", + "guide": "《清籁旧宝》", + "link": "" + }, + "乡愁的另一头": { + "book": "天地万象", + "desc": "为太田太郎在清籁岛上拍摄四张画片。", + "guide": "《清籁旧忆》", + "link": "" + }, + "它和它…": { + "book": "天地万象", + "desc": "…连连看?", + "guide": "清籁丸的解谜", + "link": "" + }, + "戴维·琼斯的箱子": { + "book": "天地万象", + "desc": "解开「清籁丸」内的所有机关。", + "guide": null, + "link": "" + }, + "益智海域": { + "book": "天地万象", + "desc": "在清籁岛上解开一系列机关。", + "guide": null, + "link": "" + }, + "大天云峠": { + "book": "天地万象", + "desc": "解开天云峠之底的机关。", + "guide": null, + "link": "" + }, + "进入夜雾之门": { + "book": "天地万象", + "desc": "适应了鹤观的异常天候。", + "guide": "雾海纪行 - Day 1 - 要求特别多的作家", + "link": "" + }, + "Nihil Sub Caligine Novum": { + "book": "天地万象", + "desc": "似乎又恢复了原状…", + "guide": "雾海纪行 - Day 2 - 倾听木簧笛的八音曲", + "link": "" + }, + "白之幻影": { + "book": "天地万象", + "desc": "与昔日的幻影相遇。", + "guide": "完成《雾海纪行》系列世界任务后与任意幻影(幽灵)对话\n*视频跳转", + "link": "https://www.bilibili.com/video/BV1cu411f7Re?spm_id_from=333.999.0.0" + }, + "「美好的风景,望不到头」": { + "book": "天地万象", + "desc": "与「船工」告别。", + "guide": "送走其他所有幻影(幽灵)后与「船工」对话\n*视频跳转", + "link": "https://www.bilibili.com/video/BV1nr4y1y71F" + }, + "双城记": { + "book": "天地万象", + "desc": "即使是鹤观,似乎也建立在古老遗迹的残骸上。", + "guide": "雾海纪行 Day 2 完成后拿到奇特的羽毛后,解开 4 个雷鸟墙壁\n*视频跳转", + "link": "https://www.bilibili.com/video/BV1C44y1x7ga?spm_id_from=333.999.0.0" + }, + "《我作为冒险家的一生》": { + "book": "天地万象", + "desc": "协助罗尔德,完成冒险日志。", + "guide": "《健忘大王历险记》", + "link": "" + }, + "雾里明灯": { + "book": "天地万象", + "desc": "点亮逢岳之野所有的雷石。", + "guide": "完成 Day 4《日轮与菅名山》后点亮在逢岳之野与幽灵知世对话,点亮所有雷石后再次对话获得成就\n*视频跳转", + "link": "https://www.bilibili.com/video/BV1cu411f7Re?spm_id_from=333.999.0.0" + }, + "「被、被派蒙吃掉…」": { + "book": "天地万象", + "desc": "原本拿到的「木簧笛」,却意外消失了。", + "guide": "雾海纪行 - Day1 - 要求特别多的作家", + "link": "" + }, + "猜想时间": { + "book": "天地万象", + "desc": "从比过去更遥远的过去,来到了今天…", + "guide": "雾海纪行 Day 2 完成后拿到奇特的羽毛后,解谜 4 个壁画\n*视频地址", + "link": "https://www.bilibili.com/video/BV1C44y1x7ga?spm_id_from=333.999.0.0" + }, + "雷鸟的系谱": { + "book": "天地万象", + "desc": "完成所有「雕像」的挑战。", + "guide": "雾海纪行 Day 2 完成后拿到奇特的羽毛后,挑战的 10 个雕像\n*视频地址", + "link": "https://www.bilibili.com/video/BV1eL4y167fF?spm_id_from=333.999.0.0" + }, + "七个字母": { + "book": "天地万象", + "desc": "尝试解读「石根文字」。", + "guide": "雾海纪行 Day 2 完成后拿到奇特的羽毛后,解密 7 个石像\n*视频地址", + "link": "https://www.bilibili.com/video/BV1K34y1S7G9?p=8" + }, + "茂知之壳": { + "book": "天地万象", + "desc": "解锁「茂知之壳」。", + "guide": null, + "link": "" + }, + "渡过雾霭的河流": { + "book": "天地万象", + "desc": "终于,抵达雾海彼端…", + "guide": "雾海纪行 - Day 4 - 日轮与菅名山\n", + "link": "" + }, + "「让你再飞!」": { + "book": "天地万象", + "desc": "使用道具「四方八方之网」捕获1只晶蝶。", + "guide": null, + "link": "" + }, + "面对捕网网眼时的焦虑": { + "book": "天地万象", + "desc": "使用道具「四方八方之网」捕获1只团雀。", + "guide": null, + "link": "" + }, + "海底几万里?": { + "book": "天地万象", + "desc": "进入渊下宫。", + "guide": "《止水之潘》", + "link": "" + }, + "野马泉,又名摩利支": { + "book": "天地万象", + "desc": "解开「阳炎之门」的秘密。", + "guide": "《白夜国晨昏记:常世入口》", + "link": "" + }, + "日月回轮": { + "book": "天地万象", + "desc": "转换一次「白夜」与「常夜」。", + "guide": "2.4版本全41个成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1pP4y1E7Td?spm_id_from=333.999.0.0" + }, + "「智圆行方」小锦旗": { + "book": "天地万象", + "desc": "获得地走官的认可。", + "guide": "《厄瑞玻斯的秘密:八衢彦之试炼》", + "link": "" + }, + "「明察冬鳗」小锦旗": { + "book": "天地万象", + "desc": "获得地走官的认可。", + "guide": "《厄瑞玻斯的秘密:八衢姬之试炼》", + "link": "" + }, + "「常世无双」小锦旗": { + "book": "天地万象", + "desc": "获得地走官的认可。", + "guide": "《厄瑞玻斯的秘密:歧之试炼》", + "link": "" + }, + "「下次,试试社会派…」": { + "book": "天地万象", + "desc": "完成伊达的迷宫挑战。", + "guide": "《伊达的挑战状》:完成 2 个迷宫的挑战\n第一个迷宫:外圈 L 在右上角,内圈 L 在右下角\n第二个迷宫:三块石板呈对角线连接", + "link": "" + }, + "「常世大神倘若有知…」": { + "book": "天地万象", + "desc": "归还所有的图书,并且…", + "guide": "世界任务《龙蛇藏归辑录》\n《常世国龙蛇传》在稻妻八重堂购买,《光昼影底集》要完成一个大世界解密,其他的需要完成世界任务《安提戈努斯》(日月前事)、《伊达的挑战状》(白夜国地理水文考)、《三色档案》(深海龙蜥实验记录,即某人的实验记录)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Eq4y1y7rw?spm_id_from=333.999.0.0" + }, + "「真的有区别吗…」": { + "book": "天地万象", + "desc": "在所有特别的位置上坐下过。", + "guide": "在大日御舆附近的特别位置坐下后触发与桦山的对话,后边三处都坐下后回去找桦山拿到成就与宝箱", + "link": "" + }, + "神的孩子全跳舞": { + "book": "天地万象", + "desc": "和所有的「法厄同」残影对话。", + "guide": "完成世界任务《法厄同们全跳舞》后与所有太阳之子残影对话\n其中神舆之辔在另一世界任务《许伯利翁哀歌》里从阿倍良久处获得", + "link": "" + }, + "阴阳割昏晓": { + "book": "天地万象", + "desc": "前往大日御舆之顶。", + "guide": "正常完成世界任务《许伯利翁哀歌》的流程即可获得\n自己想办法上去也可以完成,不过没有跟着任务走来得安逸", + "link": "" + }, + "射程之内好说话": { + "book": "天地万象", + "desc": "完成弓术的挑战。", + "guide": "渊下宫 - 常世灵庙南边传送点以南,找残影明石完成挑战后对话即可", + "link": "" + }, + "薄缘的道与光与胤": { + "book": "天地万象", + "desc": "归还岩藏宗主的刀。", + "guide": "刀在渊下宫入口处附近", + "link": "" + }, + "一把钥匙开一把锁": { + "book": "天地万象", + "desc": "找到所有的键纹。", + "guide": "全部键纹*视频地址", + "link": "https://www.bilibili.com/video/BV1pP4y1E7Td?p=20" + }, + "岩中幽谷": { + "book": "天地万象", + "desc": "解锁「岩中幽谷」。", + "guide": "打开新本的障碍石头", + "link": "" + }, + "《层岩巨渊矿产志》": { + "book": "天地万象", + "desc": "阅读层岩巨渊矿产相关书籍的全部断章。", + "guide": "找三本矿产志", + "link": "" + }, + "生命之谷的居民": { + "book": "天地万象", + "desc": "寻得干枯的种子,而且没有贸然吃掉它。", + "guide": "“小绿洲”内找到干枯的果实", + "link": "" + }, + "CREDE TENEBRIS": { + "book": "天地万象", + "desc": "打开遗迹中的密室。", + "guide": "翻译:相信黑暗的意思?", + "link": "" + }, + "9文字之传言": { + "book": "天地万象", + "desc": "找到所有密文。", + "guide": "翻译:让天上的人滚回去的意思?", + "link": "" + }, + "狡兔之窟": { + "book": "天地万象", + "desc": "发现盗宝团的藏宝。", + "guide": "完成「好样的,施季里茨!」给后续", + "link": "" + }, + "又,又,又中大奖了!": { + "book": "天地万象", + "desc": "挖出了三次宝箱,通关老臭的挖宝游戏。", + "guide": "累积3次挖到老臭的宝箱", + "link": "" + }, + "人情练达即文章": { + "book": "天地万象", + "desc": "完成所有生态调查任务,收到海迪夫给的推荐信。", + "guide": "层岩巨渊生态调查", + "link": "" + }, + "「舍我其谁!」": { + "book": "天地万象", + "desc": "收集齐层岩巨渊下愚人众的信件文书。", + "guide": "找4本愚人众信件", + "link": "" + }, + "请保持安全距离": { + "book": "天地万象", + "desc": "使用「安全距离爆破机关·贰壹伍陆型」开辟通路。", + "guide": "第一次开炮", + "link": "" + }, + "黑雾,痛苦,像出生一样…": { + "book": "天地万象", + "desc": "击败黑雾中浮现之物。", + "guide": "击败黑雾中的深渊使徒", + "link": "" + }, + "秀逗炼金术士": { + "book": "天地万象", + "desc": "解救克里托夫。", + "guide": "踏破矿贼结新缘分中解救克里托夫", + "link": "" + }, + "勇气的余晖": { + "book": "天地万象", + "desc": "冒险之意义,究竟存在于哪里呢?", + "guide": "做完层岩巨渊主线,第二天找她再做3天任务", + "link": "" + }, + "请勿长期食用": { + "book": "天地万象", + "desc": "在层岩巨渊找到失踪的矿工老何。", + "guide": "层岩巨渊主线做完后才能找到失踪的老何", + "link": "" + }, + "要求太多的大蘑头": { + "book": "天地万象", + "desc": "在层岩巨渊完成「赞玛兰」的委托。", + "guide": "完成蘑菇头一大堆任务", + "link": "" + }, + "唯千岩不动": { + "book": "天地万象", + "desc": "收集所有千岩军留下的供物,得到「千岩军的宝藏」。", + "guide": "找5个圣遗物+1把武器", + "link": "" + }, + "三脚猫渭水非熊": { + "book": "天地万象", + "desc": "了解山巅大侠「唐无仇」的往事。", + "guide": "山顶地图阴间位置", + "link": "" + }, + "「好样的,施季里茨!」": { + "book": "天地万象", + "desc": "帮助彦博完成千岩军的执法任务。", + "guide": "发现假冒的“千岩军”", + "link": "" + }, + "黑暗却无法包容光…": { + "book": "天地万象", + "desc": "第一次使用「流明石」的「纯光绽放」来清除「淤泥涌口」的漆黑结晶物。", + "guide": "对这淤泥使用流明石", + "link": "" + }, + "「…闻起来像沥青。」": { + "book": "天地万象", + "desc": "第一次因漆黑污泥的污染而倒下。", + "guide": "第一次被淤泥毒死", + "link": "" + }, + "「只需一些柴火、一些醋…」": { + "book": "天地万象", + "desc": "通往地面的密道…大概不止一条。", + "guide": "发现地下通往地面的路", + "link": "" + }, + "《塔列辛之书》": { + "book": "天地万象", + "desc": "获得塔列辛的赠礼。", + "guide": "做完层岩巨渊所有任务连续找他2天", + "link": "" + }, + "照亮黑暗": { + "book": "天地万象", + "desc": "送出些许光明。", + "guide": "初次使用流明石触媒", + "link": "" + }, + "慧绝烟林": { + "book": "天地万象", + "desc": "须弥的声望等级达到10级。", + "guide": "当前版本无法拿到(3.0须弥魔神主线做完后开启)", + "link": "" + }, + "美德的报酬": { + "book": "天地万象", + "desc": "在森林中帮助许多兰那罗。", + "guide": "找到76个兰那罗开启最后的宝箱报酬 *视频地址:BV1h8411b7re", + "link": "https://www.bilibili.com/video/BV1h8411b7re/?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "众妙之门": { + "book": "天地万象", + "desc": "真正踏入「兰那罗的世界」…", + "guide": "森林书第一章 兰那罗的世界(剧情必得) ", + "link": "" + }, + "梦与无梦的隙间": { + "book": "天地万象", + "desc": "来到现实中的桓那兰那。", + "guide": "森林书第一章 梦中的苗圃 (剧情必得)", + "link": "" + }, + "森林的大乐章": { + "book": "天地万象", + "desc": "似乎具有成为「采歌者」的潜力…?", + "guide": "森林书第二章II 月华之章(剧情必得)", + "link": "" + }, + "悠游旅情": { + "book": "天地万象", + "desc": "旅途中的风景不应错过。", + "guide": "世界任务 *视频地址:BV16P411H7Au", + "link": "https://www.bilibili.com/video/BV16P411H7Au?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "金光灿灿的歌": { + "book": "天地万象", + "desc": "…他们会将这首歌永远传唱下去吧,一代又一代。", + "guide": "森林书第二章 无忧节完结(剧情必得)", + "link": "" + }, + "关于森林的故事": { + "book": "天地万象", + "desc": "从兰随尼处,听来森林的五个故事。", + "guide": "森林书完结后回去找兰随尼 *视频地址:BV1cG4y1z71P", + "link": "https://www.bilibili.com/video/BV1cG4y1z71P?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "不再苍翠的苗圃": { + "book": "天地万象", + "desc": "踏入曾经的桓那兰那。", + "guide": "森林书第三章 主线(剧情必得)", + "link": "" + }, + "尽末了所毁灭的": { + "book": "天地万象", + "desc": "击败了「无留陀的化身」。接下来…", + "guide": "森林树第三章 森林书最终BOSS(剧情必得)", + "link": "" + }, + "就算回归沙尘…": { + "book": "天地万象", + "desc": "…也要留下梦与愿望。", + "guide": "森林书完结后续探索 *视频地址:BV1bt4y177o1", + "link": "https://www.bilibili.com/video/BV1bt4y177o1?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "永不属于森林的孩子": { + "book": "天地万象", + "desc": "这样一来,问题应该解决了。", + "guide": "森林书主线完结,抓出“坏人”*视频地址:BV18Y4y1M7He0", + "link": "https://www.bilibili.com/video/BV18Y4y1M7He?spm_id_from=333.999.0.0" + }, + "桓那兰那一番!": { + "book": "天地万象", + "desc": "帮助兰帕卡提的哥哥们完成各自的「至上珍馐」。", + "guide": "森林书第二章(剧情必得)", + "link": "" + }, + "「芝麻,芝麻,请开门。」": { + "book": "天地万象", + "desc": "通过暗号,成功进入愚人众藏身的营地。", + "guide": "世界任务《愚人者人愚之》 *视频地址:BV1xg411D7VC", + "link": "https://www.bilibili.com/video/BV1xg411D7VC?spm_id_from=333.999.0.0" + }, + "与「宝箱」主人会谈": { + "book": "天地万象", + "desc": "找到兰那罗的「宝箱」。", + "guide": "世界任务 *视频地址:BV16P411H7Au", + "link": "https://www.bilibili.com/video/BV16P411H7Au?spm_id_from=333.999.0.0" + }, + "转桓摩王": { + "book": "天地万象", + "desc": "转动每一个藏有宝箱的「桓摩达」。", + "guide": "森林书完结后续探索 *视频地址:BV1bt4y177o1", + "link": "https://www.bilibili.com/video/BV1bt4y177o1?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "以「安弗塔斯」之名": { + "book": "天地万象", + "desc": "造访勇士们的终点。", + "guide": "世界任务 *视频地址:BV1Hd4y1M7bG", + "link": "https://www.bilibili.com/video/BV1Hd4y1M7bG/?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "无名之城的呼唤": { + "book": "天地万象", + "desc": "让神秘的羊皮卷安静下来。", + "guide": "森林书第二章VI剧情获得 *视频地址:BV15e4y1y7EX", + "link": "https://www.bilibili.com/video/BV15e4y1y7EX?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "水与风的伙伴": { + "book": "天地万象", + "desc": "完成「直到『桓那』痊愈」。", + "guide": "森林树第二章V(剧情必得)", + "link": "" + }, + "…请悄悄将我忘记": { + "book": "天地万象", + "desc": "完成「吉祥具书」。", + "guide": "森林树第二章IV(剧情必得)", + "link": "" + }, + "然后时间开始流动": { + "book": "天地万象", + "desc": "完成兰帝裟的未竟之事。", + "guide": "世界任务 石锁机关秘话 *视频地址:BV17P4y1o7T1", + "link": "https://www.bilibili.com/video/BV17P4y1o7T1?spm_id_from=333.999.0.0" + }, + "请安全玩耍": { + "book": "天地万象", + "desc": "陪森林中的兰那罗游戏。", + "guide": "世界任务 陪12个兰那罗玩耍 *视频地址:BV1Fd4y1M7P9", + "link": "https://www.bilibili.com/video/BV1Fd4y1M7P9/?spm_id_from=333.999.0.0" + }, + "永久食粮": { + "book": "天地万象", + "desc": "和法莎一道,造访现实中的兰那罗苗圃。", + "guide": "森林书第二章IV后续 带走失少女法莎去兰那罗的苗圃(如下成就地点)\n*视频地址:BV1UT411M7b4", + "link": "https://www.bilibili.com/video/BV1UT411M7b4?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "梦想开花时": { + "book": "天地万象", + "desc": "让毗波耶开满兰那罗的苗圃。", + "guide": "森林书第二章IV后续找到12个桓斯弥利底(种子)种下等现实第二天 \n*视频地址:BV1UT411M7b4", + "link": "https://www.bilibili.com/video/BV1UT411M7b4?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "「众花园中的一棵核桃树…」": { + "book": "天地万象", + "desc": "向海亚姆问起失落的记忆。", + "guide": "森林书第二章IV后续 通关无留陀后(剧情必得)\n*视频地址:BV1KG411V73F", + "link": "https://www.bilibili.com/video/BV1KG411V73F?spm_id_from=333.999.0.0" + }, + "须弥怪物生态调查": { + "book": "天地万象", + "desc": "完成保护森林生态的工作。", + "guide": "★无名字无提示隐藏任务 凶猛动物在哪里 *视频地址:BV13e4y1a7en", + "link": "https://www.bilibili.com/video/BV13e4y1a7en?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "如狮子寻找勇气…": { + "book": "天地万象", + "desc": "找回兰沙恭丢失的「勇气」。", + "guide": "世界任务 *视频地址:BV1dY4y1P7yd", + "link": "https://www.bilibili.com/video/BV1dY4y1P7yd?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "究竟一切智地": { + "book": "天地万象", + "desc": "登上须弥城的最高处。", + "guide": "大世界探索2 *视频地址:BV1qV4y1W75s", + "link": "https://www.bilibili.com/video/BV1qV4y1W75s?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "搜索者": { + "book": "天地万象", + "desc": "利用激化反应,发现原本被隐藏的事物。", + "guide": "大世界探索4 *视频地址:BV1qV4y1W75s", + "link": "https://www.bilibili.com/video/BV1qV4y1W75s?spm_id_from=333.999.0.0" + }, + "茉莉低语,石榴开怀": { + "book": "天地万象", + "desc": "完成「正法炬书」。", + "guide": "森林树第二章III(剧情必得)", + "link": "" + }, + "飞驰如风": { + "book": "天地万象", + "desc": "在无郁稠林激活三处风场。", + "guide": "大世界探索5 *视频地址:BV1qV4y1W75s", + "link": "https://www.bilibili.com/video/BV1qV4y1W75s?spm_id_from=333.999.0.0" + }, + "三之定则": { + "book": "天地万象", + "desc": "找到三篇失落的歌谱,获得三枚恒素果。", + "guide": "森林树第二章II梦中苗圃 (剧情必得)", + "link": "" + }, + "梦凝成的苦果": { + "book": "天地万象", + "desc": "第一次使用「苦舍桓」。", + "guide": "森林树第二章III中获得(剧情必得)", + "link": "" + }, + "雨落进了泥土": { + "book": "天地万象", + "desc": "完成「水天供书」。", + "guide": "森林树第二章II(剧情必得)", + "link": "" + }, + "…都汇进了激流": { + "book": "天地万象", + "desc": "用留影机记录下法留纳法宝启动的瞬间。", + "guide": "大世界探索3 *视频地址:BV1qV4y1W75s", + "link": "https://www.bilibili.com/video/BV1qV4y1W75s?spm_id_from=333.999.0.0" + }, + "呼风唤雨": { + "book": "天地万象", + "desc": "操作法留纳神机,改变水天丛林的天气。", + "guide": "森林书完结后续探索:*视频地址:BV1bt4y177o1", + "link": "https://www.bilibili.com/video/BV1bt4y177o1?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "啊,美好的日子!": { + "book": "天地万象", + "desc": "根据箱底的线索找到秘密宝藏。", + "guide": "世界任务 *视频地址:BV1fB4y1n7hQ", + "link": "https://www.bilibili.com/video/BV1fB4y1n7hQ?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "卡菈的孩子": { + "book": "天地万象", + "desc": "在林中自由地飘荡吧。", + "guide": "大世界探索1 *视频地址:BV1qV4y1W75s", + "link": "https://www.bilibili.com/video/BV1qV4y1W75s?spm_id_from=333.999.0.0" + }, + "漫长的重逢": { + "book": "天地万象", + "desc": "跟随失主的驮兽,完成它的旅程。", + "guide": "需要从起点开始跟随开始,不能从中途开始 *视频地址:BV1y14y1x7s8", + "link": "https://www.bilibili.com/video/BV1y14y1x7s8?spm_id_from=333.999.0.0" + }, + "「我明白了!我明白了!」": { + "book": "天地万象", + "desc": "找到并解开须弥城内的一系列谜语。", + "guide": "★全程无名字无提示真·隐藏任务 *视频地址:BV1UB4y1x78c", + "link": "https://www.bilibili.com/video/BV1UB4y1x78c?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "宵暗与晓光之歌": { + "book": "天地万象", + "desc": "…我们一定会在何处相逢吧。", + "guide": "森林书后续打败无留陀后 *视频地址:BV14d4y1X7RB", + "link": "https://www.bilibili.com/video/BV14d4y1X7RB?spm_id_from=333.999.0.0" + }, + "第几类接触": { + "book": "天地万象", + "desc": "不同寻常的「朋友」加入了考古小队。", + "guide": "黄金梦乡 第一天剧情必给", + "link": "" + }, + "沙漠中的探险": { + "book": "天地万象", + "desc": "沙漠中的探险才刚刚开始。", + "guide": "黄金梦乡 第一天剧情必给 从赤王陵出来", + "link": "" + }, + "像因论派学者一样思考": { + "book": "天地万象", + "desc": "墨水瓶里拥有可怕的权力。", + "guide": "黄金梦乡 第一天剧情必给", + "link": "" + }, + "法达摩加纳": { + "book": "天地万象", + "desc": "通往「御座」的道路终于显现。", + "guide": "黄金梦乡 第一天剧情必给 最后开三个门", + "link": "" + }, + "生成、交换、储存和使用": { + "book": "天地万象", + "desc": "钥匙也需要得到「认可」。", + "guide": "黄金梦乡 第一天剧情必给", + "link": "" + }, + "神奇的匹热迷能": { + "book": "天地万象", + "desc": "迈向隐藏真相的一小步。", + "guide": "黄金梦乡 第一天剧情必给", + "link": "" + }, + "像赤王子民一样行走": { + "book": "天地万象", + "desc": "获得了通过许多门的许可。", + "guide": "黄金梦乡 第二天旧语新知剧情必给", + "link": "" + }, + "笔直航道": { + "book": "天地万象", + "desc": "到达赤王陵顶部的隐秘空间。", + "guide": "黄金梦乡 第二天旧语新知剧情必给", + "link": "" + }, + "通往光明之路": { + "book": "天地万象", + "desc": "无人知晓这些巨大的遗迹如何建成,又因何失落。", + "guide": "黄金梦乡 第二天旧语新知剧情必给", + "link": "" + }, + "再听一遍那首歌谣": { + "book": "天地万象", + "desc": "重新站在圣显厅的赤王御座之前。", + "guide": "*视频地址:BV1g14y187wh", + "link": "https://www.bilibili.com/video/BV1g14y187wh/?spm_id_from=333.999.0.0" + }, + "斜倚在大地之上": { + "book": "天地万象", + "desc": "完成「阿弗拉图之惑」。", + "guide": "1任务3成就 *视频地址:BV1B841147Bn", + "link": "https://www.bilibili.com/video/BV1B841147Bn/?spm_id_from=333.999.0.0" + }, + "让我见识一下巨像的性能吧": { + "book": "天地万象", + "desc": "只要打不中就没有什么大不了的。", + "guide": null, + "link": "" + }, + "强行突破作战": { + "book": "天地万象", + "desc": "坎瑞亚的机器,都是怪物吗?", + "guide": null, + "link": "" + }, + "请说暗语,然后进入": { + "book": "天地万象", + "desc": "打开吞羊岩的神秘大门。", + "guide": "*视频地址:BV1jD4y127s4", + "link": "https://www.bilibili.com/video/BV1jD4y127s4/?spm_id_from=333.999.0.0" + }, + "大走廊的尽头": { + "book": "天地万象", + "desc": "进入赤王陵地下最隐秘的房间。", + "guide": "*视频地址:BV1XW4y1Y7AV", + "link": "https://www.bilibili.com/video/BV1XW4y1Y7AV/?spm_id_from=333.999.0.0" + }, + "四地之王": { + "book": "天地万象", + "desc": "找到并破解沙漠中四处透明的遗迹的秘密。", + "guide": "*视频地址:BV1V24y1d7Cf", + "link": "https://www.bilibili.com/video/BV1V24y1d7Cf/?spm_id_from=333.999.0.0" + }, + "赤王时代的沙漠与大赤沙海": { + "book": "天地万象", + "desc": "探索沙漠中三处巨大的尖碑。", + "guide": "*视频地址:BV1nT411P7So", + "link": "https://www.bilibili.com/video/BV1nT411P7So/?spm_id_from=333.999.0.0" + }, + "碑铭": { + "book": "天地万象", + "desc": "美和希望是对逝者最温柔的缅怀。", + "guide": "连续做6天给成就,但依旧还有后续 *视频地址:BV1NN4y1N7b3", + "link": "https://www.bilibili.com/video/BV1NN4y1N7b3/?spm_id_from=333.999.0.0" + }, + "在「我」诞生之前": { + "book": "天地万象", + "desc": "人们不愿提及他的姓名,不愿记起他的言行。", + "guide": "魔神主线分支:*视频地址:BV1d24y1R7Mm", + "link": "https://www.bilibili.com/video/BV1d24y1R7Mm/?spm_id_from=333.999.0.0" + }, + "犍闼缚城": { + "book": "天地万象", + "desc": "第一次遭遇沙漠中的幻象。", + "guide": "*视频地址:BV1KR4y1o7j7", + "link": "https://www.bilibili.com/video/BV1KR4y1o7j7/?spm_id_from=333.999.0.0" + }, + "发掘报告怎么写?": { + "book": "天地万象", + "desc": "第一次探索沙漠地下的遗迹。", + "guide": "*视频地址:BV1ge411j7Qh", + "link": "https://www.bilibili.com/video/BV1ge411j7Qh/?spm_id_from=333.999.0.0" + }, + "在风中飘荡": { + "book": "天地万象", + "desc": "击碎在沙漠中飘飞的风滚草。", + "guide": "*视频地址:BV1KR4y1o7j7", + "link": "https://www.bilibili.com/video/BV1KR4y1o7j7/?spm_id_from=333.999.0.0" + }, + "飞跃医院": { + "book": "天地万象", + "desc": "曾有一位生还者逃离此处。", + "guide": "*视频地址:BV1VD4y127uN", + "link": "https://www.bilibili.com/video/BV1VD4y127uN/?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "训练有素的考古学家": { + "book": "天地万象", + "desc": "让列柱沙原 、上风蚀地、下风蚀地所有的元能尖碑重新运转。", + "guide": "60方碑", + "link": "" + }, + "超越时间的虚影": { + "book": "天地万象", + "desc": "触碰沙漠中每一处神秘的壁画。", + "guide": "*视频地址:BV1A8411t7Be", + "link": "https://www.bilibili.com/video/BV1A8411t7Be/?spm_id_from=333.999.0.0" + }, + "无坚不摧": { + "book": "天地万象", + "desc": "在无相之岩复苏前,击碎所有复苏岩柱。", + "guide": null, + "link": "" + }, + "棱镜计划": { + "book": "天地万象", + "desc": "在无相之雷复苏前,摧毁所有复苏棱镜。", + "guide": null, + "link": "" + }, + "「这风晶蝶还蛮大的」": { + "book": "天地万象", + "desc": "在无相之风复苏前,吸收所有风之晶球。", + "guide": null, + "link": "" + }, + "「…不代表最终品质」": { + "book": "天地万象", + "desc": "击败一个进行了四种元素转变的无相之风。", + "guide": null, + "link": "" + }, + "…与巨像": { + "book": "天地万象", + "desc": "通过攻击要害,瘫痪遗迹守卫。", + "guide": null, + "link": "" + }, + "传球": { + "book": "天地万象", + "desc": "打落爆弹丘丘人手中的火史莱姆。", + "guide": null, + "link": "" + }, + "「一次…的攻击」": { + "book": "天地万象", + "desc": "通过碎冰伤害,打败一名敌人。", + "guide": null, + "link": "" + }, + "大黄金丘丘王": { + "book": "天地万象", + "desc": "在魔化状态结束前,击败丘丘岩盔王。", + "guide": "原神 1.0 时期曾用名《黄金体验镇魂曲》", + "link": "" + }, + "向无敌大胃王致敬": { + "book": "天地万象", + "desc": "队伍中有四名角色同时处于饱腹状态。", + "guide": null, + "link": "" + }, + "摧枯拉朽": { + "book": "天地万象", + "desc": "造成超过50000的暴击伤害。", + "guide": null, + "link": "" + }, + "神奇四…": { + "book": "天地万象", + "desc": "使用四个相同元素属性的角色完成一次秘境挑战。", + "guide": null, + "link": "" + }, + "「什么嘛,还不如冰雾花」": { + "book": "天地万象", + "desc": "不击破花冠弱点的情况下,击败急冻树。", + "guide": null, + "link": "" + }, + "「总有比火更灼热的火」": { + "book": "天地万象", + "desc": "不击破花冠弱点的情况下,击败爆炎树。", + "guide": null, + "link": "" + }, + "异邦人与异邦人": { + "book": "天地万象", + "desc": "队伍中所有角色都不被「公子」标记的后续攻击命中的情况下,击败「公子」。", + "guide": null, + "link": "" + }, + "罚球": { + "book": "天地万象", + "desc": "有的地方是没办法挖出火史莱姆的…", + "guide": null, + "link": "" + }, + "力场侵蚀": { + "book": "天地万象", + "desc": "粉碎无相之雷的结界。", + "guide": "击碎任意一个雷结界柱子即可\n*视频地址", + "link": "https://www.bilibili.com/video/BV1mX4y137L4?spm_id_from=333.999.0.0" + }, + "「…还有蜥蜴和斯波克」": { + "book": "天地万象", + "desc": "同一个角色连续被猜拳三连击命中。", + "guide": "1.3版本全16个成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1cU4y1x79f?spm_id_from=333.999.0.0" + }, + "基础不牢,地动山摇!": { + "book": "天地万象", + "desc": "通过击碎核心停留的玄岩柱,使同一个无相之岩落地三次。", + "guide": null, + "link": "" + }, + "基础再牢,也能撂倒!": { + "book": "天地万象", + "desc": "在不击碎玄岩柱的情况下,使无相之岩进入复苏模式。", + "guide": null, + "link": "" + }, + "千风散尽还复来": { + "book": "天地万象", + "desc": "在一场战斗中,吸收至少10个无相之风创造的元素晶球。", + "guide": null, + "link": "" + }, + "珠心熔毁": { + "book": "天地万象", + "desc": "摧毁爆炎树创造的炽热之种。", + "guide": null, + "link": "" + }, + "眩晕": { + "book": "天地万象", + "desc": "在急冻树旋转喷发急冻射线时,击破其花冠弱点。", + "guide": null, + "link": "" + }, + "「…唯独死亡与债务不可避」": { + "book": "天地万象", + "desc": "击败处于隐蔽状态下的火之债务处理人。", + "guide": null, + "link": "" + }, + "「孤独地融化…」": { + "book": "天地万象", + "desc": "在冰萤术士操控的冰萤全部存在的情况下,击败冰萤术士。", + "guide": "特别注意:击杀冰莹术士时,需要所有蚊子在场\n(若误杀了几只蚊子,可击杀所有蚊子后等冰莹术士重新召唤全体蚊子)", + "link": "" + }, + "这也算四风守护?": { + "book": "天地万象", + "desc": "触发过风拳先锋军所有元素类型的吸收反击后,击败他。", + "guide": "1.3版本全16个成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1cU4y1x79f?spm_id_from=333.999.0.0" + }, + "碰·一·碰": { + "book": "天地万象", + "desc": "利用护盾反制岩龙蜥的某一式冲撞攻击。", + "guide": null, + "link": "" + }, + "反弹!": { + "book": "天地万象", + "desc": "利用护盾,反制古岩龙蜥的「原岩喷吐」攻击。", + "guide": null, + "link": "" + }, + "悉数奉还!": { + "book": "天地万象", + "desc": "利用同种元素类型或岩元素的护盾,反制古岩龙蜥的「原岩喷吐」攻击,并造成大量伤害。", + "guide": null, + "link": "" + }, + "我们之中最坚强的灵魂": { + "book": "天地万象", + "desc": "击败所有形态的若陀龙王。", + "guide": "一共 4 个形态,至少要连续打 3+1(剧情里) 周;分别是雷水、雷火、冰水、冰火(每周只有 1 个固定的形态)\n*视频讲解", + "link": "https://www.bilibili.com/video/BV1rV411j7xj" + }, + "「…一日之寒」": { + "book": "天地万象", + "desc": "击败处于虚弱状态的无相之冰。", + "guide": "1.5版本全35个成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1L64y117DJ?p=2" + }, + "「冰冻三尺…」": { + "book": "天地万象", + "desc": "击败一个复苏了三次的无相之冰。", + "guide": null, + "link": "" + }, + "只要我跑的够快": { + "book": "天地万象", + "desc": "不被幻影击中的情况下,击败魔偶剑鬼。", + "guide": "剑鬼成就*视频地址", + "link": "https://www.bilibili.com/video/BV1YU4y1H7h9?spm_id_from=333.999.0.0" + }, + "堂堂正正的决斗!": { + "book": "天地万象", + "desc": "不触发「枉死之面」的格挡的情况下,击败魔偶剑鬼。", + "guide": null, + "link": "" + }, + "…全靠我们自己": { + "book": "天地万象", + "desc": "不触发「原岩喷吐」的反噬的情况下,击败古岩龙蜥。", + "guide": null, + "link": "" + }, + "把自己烧着了吧?": { + "book": "天地万象", + "desc": "击败一个复燃过两次的无相之火。", + "guide": null, + "link": "" + }, + "Smells like Animal Spirit!": { + "book": "天地万象", + "desc": "被无相之火的拟态三连击命中后,击败它。", + "guide": "必须被拟态三连击的三个招式都命中后才能拿到成就", + "link": "" + }, + "机元突破": { + "book": "天地万象", + "desc": "在一场战斗中,使恒常机关阵列的所有四种遗迹机兵均进入瘫痪状态,并击败恒常机关阵列。", + "guide": "4 种遗迹机兵,当机兵攻击的时候会暴露核心,攻击核心可以使其进入暂时的瘫痪状态。\n注意,如果直接击杀了遗迹机兵并不算作瘫痪。", + "link": "" + }, + "无关机械请立即离场!": { + "book": "天地万象", + "desc": "不击败任何恒常机关阵列的遗迹机兵的情况下,击败恒常机关阵列。", + "guide": "恒常机关阵列召唤出遗迹机兵后,即便不击败遗迹机兵,过一段时间恒常机关阵列自己会回收\n所有遗迹机兵。所以做这个成就时,等它召唤出小怪后不要打小怪,等它自己回收小怪后再攻击本体。", + "link": "" + }, + "遇火斩火": { + "book": "天地万象", + "desc": "在海乱鬼·炎威的武器附有烈焰的情况下,击败海乱鬼·炎威。", + "guide": null, + "link": "" + }, + "遇雷切雷": { + "book": "天地万象", + "desc": "在海乱鬼·雷腾的武器附有电流的情况下,击败海乱鬼·雷腾。", + "guide": null, + "link": "" + }, + "雷自东来": { + "book": "天地万象", + "desc": "被雷斧丘丘暴徒引来的落雷击中…", + "guide": "可以去稻妻天赋本菫色之庭选最低难度,有 38 级的类斧丘丘暴徒(相对来说打人不痛)", + "link": "" + }, + "A Kill without Water": { + "book": "天地万象", + "desc": "不击败任何「水滴」的情况下(无相之水恢复时除外),击败无相之水。", + "guide": "2.1版本全58个成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1P3411z78K?spm_id_from=333.999.0.0" + }, + "海洋生物学者,欧拉!": { + "book": "天地万象", + "desc": "被无相之水幻化的某种生物击中…", + "guide": null, + "link": "" + }, + "无法传达的恋波": { + "book": "天地万象", + "desc": "不曾被探针的侦测锁定的情况下,击败雷音权现。", + "guide": null, + "link": "" + }, + "雷音坠落": { + "book": "天地万象", + "desc": "击败飞翔的雷音权现。", + "guide": null, + "link": "" + }, + "红莲冰河与红莲魔女": { + "book": "天地万象", + "desc": "在不破坏任何「炎之心」与「霜之眼」的情况下,击败「女士」。", + "guide": null, + "link": "" + }, + "犬神家的末路": { + "book": "天地万象", + "desc": "短时间内击破两个「兽境犬首」。", + "guide": null, + "link": "" + }, + "硬着陆": { + "book": "天地万象", + "desc": "将攀援中的深海龙蜥击落。", + "guide": null, + "link": "" + }, + "正法眼藏": { + "book": "天地万象", + "desc": "仅仅击落真正的对手…", + "guide": null, + "link": "" + }, + "猛犬注意": { + "book": "天地万象", + "desc": "击败正在咆哮的兽境猎犬。", + "guide": null, + "link": "" + }, + "基本上无害": { + "book": "天地万象", + "desc": "击败没有积攒任何怒气的飘浮灵。", + "guide": null, + "link": "" + }, + "光之流溢": { + "book": "天地万象", + "desc": "在遗迹巨蛇的挑战中,利用一次「纯光绽放」破坏二个「淤泥涌口」。", + "guide": "8级流明石可以1次破坏2个淤泥", + "link": "" + }, + "「汉总是先开枪…」": { + "book": "天地万象", + "desc": "…所以不要带着刀进入枪战。", + "guide": "须弥新怪7个成就(5隐藏\n*视频地址:BV1Ga411G7AZ", + "link": "https://www.bilibili.com/video/BV1Ga411G7AZ?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "渔人之利": { + "book": "天地万象", + "desc": "见证了蕈兽间的友军伤害。", + "guide": null, + "link": "" + }, + "「给我下来!」": { + "book": "天地万象", + "desc": "击落飞行中的有翼蕈兽。", + "guide": null, + "link": "" + }, + "金风玉露一相逢": { + "book": "天地万象", + "desc": "放任掣电树释放的电荷相撞。", + "guide": null, + "link": "" + }, + "…三而竭?": { + "book": "天地万象", + "desc": "见识过活化状态下的翠翎恐蕈的三种强力技能。", + "guide": null, + "link": "" + }, + "遗迹先生,别再冲了——!": { + "book": "天地万象", + "desc": "通过攻击头部的核心,中断兆载永劫龙兽的冲锋攻击。", + "guide": "4个隐藏挑战相关:*视频地址:BV1Wt4y1w7wS", + "link": "https://www.bilibili.com/video/BV1Wt4y1w7wS/?spm_id_from=333.999.0.0" + }, + "那诺曼辛,孩子!": { + "book": "天地万象", + "desc": "击败处于活化状态下正在施展强力技能的翠翎恐蕈…", + "guide": null, + "link": "" + }, + "展开攻性防壁": { + "book": "天地万象", + "desc": "见识过半永恒统辖矩阵的超频冲击…", + "guide": null, + "link": "" + }, + "看不见的手": { + "book": "天地万象", + "desc": "在不破除元能构装体的不可视状态的情况下将其击败。", + "guide": null, + "link": "" + }, + "神奇的固氮作用": { + "book": "天地万象", + "desc": "在一次无相之草挑战中,使三枚愈疗草芯同时处于活化状态。", + "guide": null, + "link": "" + }, + "落草之谈": { + "book": "天地万象", + "desc": "在无相之草进行下落攻击时,烧毁它的藤蔓外壳。", + "guide": null, + "link": "" + }, + "落落磊磊": { + "book": "天地万象", + "desc": "利用元素矩阵,使正机之神过载瘫痪。", + "guide": null, + "link": "" + }, + "生灭去来": { + "book": "天地万象", + "desc": "刹那生灭中,一切皆有正机…", + "guide": null, + "link": "" + }, + "漫长旅途的开端": { + "book": "天地万象", + "desc": "完成蒙德的魔神任务。", + "guide": "魔神任务 序章", + "link": "" + }, + "捕风的异乡人": { + "book": "天地万象", + "desc": "完成「捕风的异乡人」。", + "guide": "魔神任务 序章 第一幕「捕风的异乡人」", + "link": "" + }, + "为了没有眼泪的明天": { + "book": "天地万象", + "desc": "完成「为了没有眼泪的明天」。", + "guide": "魔神任务 序章 第二幕「为了没有眼泪的明天」", + "link": "" + }, + "巨龙与自由之歌": { + "book": "天地万象", + "desc": "完成「巨龙与自由之歌」。", + "guide": "魔神任务 序章 第三幕「巨龙与自由之歌」", + "link": "" + }, + "听凭风引": { + "book": "天地万象", + "desc": "掌握「风」的元素力。", + "guide": "魔神任务 序章 第一幕「捕风的异乡人」", + "link": "" + }, + "…还是新的风暴呢?": { + "book": "天地万象", + "desc": "驱逐袭击蒙德城的巨龙。", + "guide": "魔神任务 序章 第一幕「捕风的异乡人」", + "link": "" + }, + "骑士精神": { + "book": "天地万象", + "desc": "成为西风骑士团的荣誉骑士。", + "guide": "魔神任务 序章 第二幕「为了没有眼泪的明天」", + "link": "" + }, + "骑士团的诸多麻烦": { + "book": "天地万象", + "desc": "没能「借」到圣物…但认识了「骑士团的麻烦」。", + "guide": "魔神任务 序章 第二幕「为了没有眼泪的明天」", + "link": "" + }, + "风向是会转变的": { + "book": "天地万象", + "desc": "被特瓦林所救。", + "guide": "魔神任务 序章 第三幕「巨龙与自由之歌」", + "link": "" + }, + "浮世浮生千岩间": { + "book": "天地万象", + "desc": "完成「浮世浮生千岩间」。", + "guide": "魔神任务 第一章 第一幕「浮世浮生千岩间」", + "link": "" + }, + "辞行久远之躯": { + "book": "天地万象", + "desc": "完成「辞行久远之躯」。", + "guide": "魔神任务 第一章 第二幕「辞行久远之躯」", + "link": "" + }, + "异乡异客": { + "book": "天地万象", + "desc": "在「本地人不会去的景点」被外地人搭救。", + "guide": "魔神任务 第一章 第一幕「浮世浮生千岩间」", + "link": "" + }, + "…五丘丘怎么了?": { + "book": "天地万象", + "desc": "与小冥约定一起玩。", + "guide": "魔神任务 第一章 第二幕「辞行久远之躯」", + "link": "" + }, + "春香窑的「副业」": { + "book": "天地万象", + "desc": "了解「岩王帝君」中意的香膏品类。", + "guide": "魔神任务 第一章 第二幕「辞行久远之躯」", + "link": "" + }, + "派蒙都进不去吧?": { + "book": "天地万象", + "desc": "将萍姥姥的「壶」打扫干净。", + "guide": "魔神任务 第一章 第二幕「辞行久远之躯」", + "link": "" + }, + "「勇敢的冒险者啊…」": { + "book": "天地万象", + "desc": "不被摩拉束缚手脚,委托他人完成工作。", + "guide": "魔神任务 第一章 第二幕「辞行久远之躯」", + "link": "" + }, + "文物保护": { + "book": "天地万象", + "desc": "虽然无缘得见「椰羊」…但修好了古迹。", + "guide": "魔神任务 第一章 第二幕「辞行久远之躯」", + "link": "" + }, + "漫长的送别": { + "book": "天地万象", + "desc": "筹备好「送仙典仪」所需的道具。", + "guide": "魔神任务 第一章 第二幕「辞行久远之躯」", + "link": "" + }, + "史莱姆,糖适量": { + "book": "天地万象", + "desc": "精心制作糖霜史莱姆。", + "guide": "魔神任务 第一章 第三幕「迫近的客星」", + "link": "" + }, + "一步登天": { + "book": "天地万象", + "desc": "登上俯瞰璃月港的「空中楼阁」。", + "guide": "魔神任务 第一章 第三幕「迫近的客星」", + "link": "" + }, + "爱乐之花": { + "book": "天地万象", + "desc": "对琉璃百合唱了蒙德的曲子…", + "guide": "魔神任务 第一章 第三幕「迫近的客星」", + "link": "" + }, + "审判之时…还没到": { + "book": "天地万象", + "desc": "击败「公子」。", + "guide": "魔神任务 第一章 第三幕「迫近的客星」", + "link": "" + }, + "轨道抛掷": { + "book": "天地万象", + "desc": "击退「漩涡之魔神」。", + "guide": "魔神任务 第一章 第三幕「迫近的客星」", + "link": "" + }, + "终有一别": { + "book": "天地万象", + "desc": "参与「送仙典仪」。", + "guide": "魔神任务 第一章 第三幕「迫近的客星」", + "link": "" + }, + "迫近的客星": { + "book": "天地万象", + "desc": "完成「迫近的客星」。", + "guide": "魔神任务 第一章 第三幕「迫近的客星」", + "link": "" + }, + "哎呀!海盗!": { + "book": "天地万象", + "desc": "陪璐璐、阿飞与小蒙各玩一次海盗游戏。", + "guide": "《璃月港,有海盗!》;1.5 版本更新后在这三人附近挂机很容易刷到;2.4后又新增后续\n*视频地址", + "link": "https://www.bilibili.com/video/BV1q44y1N7Dn?spm_id_from=333.999.0.0" + }, + "厨子与渔夫": { + "book": "天地万象", + "desc": "完成「独钓江雪」与「勿言勿笑」。", + "guide": "《独钓江雪》/《勿言勿笑》各做一次", + "link": "" + }, + "「知天命…」": { + "book": "天地万象", + "desc": "在「好兆头」中,帮助志华找到五个爱情运来临的征兆。", + "guide": "5 个征兆每次随机刷 2 个:1落叶(别吹别烧)、2猫鱼成朋友(别捕鱼别杀鱼)、\n3有鸟成双对(别收割禽肉)、4店主生意兴隆,5围在一起的狗(别赶走!网上流传的赶走狗是错误的)\n简单来说,完成这个成就,“知天命”:按照天命,不要人为干涉。你看到任何征兆什么都别做,看看就可以了;而另外一个成就“…而尽人事”是看到什么就破坏什么(除了生意兴隆无法破坏以外)\n*视频地址", + "link": "https://www.bilibili.com/video/BV11r4y127Rw?spm_id_from=333.999.0.0" + }, + "过量的思念": { + "book": "天地万象", + "desc": "完成五次「愿风带走思念」。", + "guide": "《愿风带走思念》做 5 次。1.0版本(2020年11月11日之前)有BUG会做1次=5次的情况,拿到成就后不会重置。如果进度不为5次会重置为0。从1.1后后重新计算。\n*视频地址", + "link": "https://www.bilibili.com/video/BV1xu41167hS?spm_id_from=333.999.0.0" + }, + "更上一层楼": { + "book": "天地万象", + "desc": "帮助淮安修复望舒客栈的断桥。", + "guide": "《望舒须筑阶》做 2 次", + "link": "" + }, + "时也运也": { + "book": "天地万象", + "desc": "一次就选中了最高价值的璞石。", + "guide": "《点石成…什么》:正确方法是选最亮的石头。\n不放心的话可以卡视角来透视璞石内部,有完整的石珀就可以选。\n注意并不是 100% 有石珀,纯随机,同理“餐品订单”任务\n外观最亮的,通过透视可以看到里面发光、纹路有完整条纹的即可。\n", + "link": "" + }, + "略表歉意": { + "book": "天地万象", + "desc": "向提米道歉。", + "guide": "《鸽子、鸭子、小孩子》里投食鸭子后故意杀掉鸭子,第二天后有机会刷《提米,对不起》", + "link": "" + }, + "凑合…也能用": { + "book": "天地万象", + "desc": "只带给赫尔曼木桩的材料。", + "guide": "《「冒险家」的能力极限》木桩一定要打坏带回", + "link": "" + }, + "「您好,亲爱的爸爸…」": { + "book": "天地万象", + "desc": "了解提米的故事。", + "guide": "每日委托《鸽子习惯一去不回》有三个支线,第一种:正常赶走鸽子,做完没有后续;\n第二种:赶鸽子的时候玩家杀了鸽子,被杜拉夫要求让旅行者亲自去送信,做完后也没有后续;\n第三种:赶鸽子的时候发现任务提示点的地上一团金光,跑过去发现丘丘人把鸽子抓走烧了吃了,打死丘丘人完成任务,没有后续;\n第三种丘丘人支线又分成两种情况,一是地上有一封信,捡到信的话解锁后续每日委托《一个男孩的去信》,做完这个委托后可以拿到成就\n*建议在另外一个每日委托《鸽子、鸭子、小孩子》里不要杀死提米要你喂的鸽子,这样更有可能进入掉信的支线\n至于提米那个略表歉意的成就可以在另外一次刷到鸽子鸭子小孩子以后再做\n*视频讲解地址", + "link": "https://www.bilibili.com/video/BV1xR4y1E7PR" + }, + "妙手怪医": { + "book": "天地万象", + "desc": "治好安娜的病。", + "guide": "《奇药庐中来》要做 3 次,之后解锁《大病初愈》后续任务;第一次做完《大病初愈》后给成就。\n成就拿完后《大病初愈》可能还会反复刷,安娜会出现在三个位置(风车顶上、教堂顶上、风神像手上)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Hw411Z7zp?spm_id_from=333.999.0.0" + }, + "西风佑我": { + "book": "天地万象", + "desc": "见证吉丽安娜的故事。", + "guide": "《惊喜大礼》要做 4 次不同路线(马乔丽小姐、昆恩、莎拉、薇尔小姐)\n最后触发最终剧情(此任务还有后续,盗宝团来复仇,触发“那位先生的委托”)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Ew411f74K?spm_id_from=333.999.0.0" + }, + "学者与「学者」": { + "book": "天地万象", + "desc": "完成「『遗落』的文物」与「『夺宝』小行动」。", + "guide": "《『遗落』的文物》至少要做 3 次,剧情进展到解救学者索拉雅以后有才有几率刷出《『夺宝』小行动》\n整个任务期间,在和宝儿对话时都不能拆穿宝儿是盗宝团的身份,否则任务进度会重置,就算解救了索拉雅也会重置!", + "link": "" + }, + "梦想与工作,诗与面包": { + "book": "天地万象", + "desc": "完成「所谓『工作』」,并获得霖铃的诗集。", + "guide": "完成《港口驶过几艘船,二四六七八》时故意告诉霖铃错误的数量(注意船有驶入和驶出的区别),大概率第二天刷《所谓工作》;如果第二天没刷,可能过一阵子才会刷", + "link": "" + }, + "故人久未归": { + "book": "天地万象", + "desc": "完成「久久望故人」任务。", + "guide": "《久久望故人》:一定要先做过世界任务的小九九,否则可能做完没成就。\n*视频地址", + "link": "https://www.bilibili.com/video/BV11U4y137Tr?spm_id_from=333.999.0.0" + }, + "这本小说真厉害!": { + "book": "天地万象", + "desc": "偷看常九爷的书稿。", + "guide": "《这本小说真厉害!》", + "link": "" + }, + "「…而尽人事。」": { + "book": "天地万象", + "desc": "破坏了四种爱情运来临的征兆。", + "guide": "在《好兆头》中捕鱼、风吹或者火烧落叶、杀鸽子、看到狗要赶走。人为干涉所有的征兆。\n*视频地址", + "link": "https://www.bilibili.com/video/BV11r4y127Rw?spm_id_from=333.999.0.0" + }, + "这不是应急食品": { + "book": "天地万象", + "desc": "在「餐品订单」任务中吃掉了餐品…?", + "guide": "《餐品订单》:成就是刷到任务以后吃掉任务菜品就可以拿,但是蟹黄火腿焗时蔬的食谱是不一定给的(送餐给活跃的欧琳的支线才会给,途中要打史莱姆)(触发哪条支线是随机的)", + "link": "" + }, + "瞳孔中的伪装者": { + "book": "天地万象", + "desc": "帮助珊瑚和龙二破获案件。", + "guide": "完成《万端珊瑚事件簿·结案时刻》后解锁成就,需要先完成前置任务,推测的顺序是:\n万端珊瑚事件簿 → 搜索工作x3次 → 合适的身份 → 迷惑行动x3次 → 结案时刻→收尾工作\n第二和四环节有 3 个分支地点(随机给其中 1 个):稻妻城附近、甘金岛附近、神里屋敷附近\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "真相只有一个…?": { + "book": "天地万象", + "desc": "见证龙二的故事。", + "guide": "做完《万端珊瑚事件簿·结案时刻》后解锁《万端珊瑚事件簿·收尾工作》,新登场大和田剧情。\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "璃月一番": { + "book": "天地万象", + "desc": "用美味的料理治愈汤雯。", + "guide": "前置任务每日委托《家乡之味》交付奇怪的料理(无论哪种料理的奇怪的版本都行)给汤雯,汤雯拿到以后会说味道很微妙。\n正确完成前置任务后,再接到后续每日委托《绝对独特的美味》 (非强制触发,最快第二天可以接到,最慢1个月后),三个选项 (绝云锅巴、腌笃鲜、烤吃虎鱼) 选哪种都可以,交付美味的料理即可解锁成就\n*.2.5版本后在再做一次该任务,汤雯会回璃月\n*视频地址", + "link": "https://www.bilibili.com/video/BV12f4y157fC?spm_id_from=333.999.0.0" + }, + "噼咔,为什么又是噼咔": { + "book": "天地万象", + "desc": "向香菱请教到特别的烹饪手法。", + "guide": "《全能美食队·突破性思维》\n剧情里旭东会让旅行者去璃月的万民堂找卯师傅,卯师傅会给你 2 个选项,选择“也许香菱知道怎么解决他的问题…”这个选项,卯师傅说香菱去轻策庄了,让你找点绝云椒椒和禽肉。这时候你可以不管卯师傅要的东西,自己传送到轻策庄去找香菱对话,最后回去找旭东\n香菱在轻策庄西南的传送点(刚传送过去就会被野猪撞的那个)附近\n此外只要自己去找香菱对话,最后交付道具时交付香菱给的就行了,对话选哪个选项其实无所谓\n*视频地址:https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "双人餐行": { + "book": "天地万象", + "desc": "帮助旭东和龟井宗久各完成一次烹饪。", + "guide": "《全能美食队·烹饪对决》:双方各胜利 1 次即可。\n灭火BUG已经修护,如实正常做任务即可\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "饮食问题": { + "book": "天地万象", + "desc": "帮助芭尔瓦涅校对全部食谱。", + "guide": "《全能美食队·美食小问答》正确答案如下:\n北地苹果焖肉——胡椒 ;天枢肉———清心\n腌笃鲜—————竹笋 ;串串三味——鸟蛋 ;水煮黑背鲈——盐\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "武士饭": { + "book": "天地万象", + "desc": "帮助龟井宗久搜集过全部两侧营地的食材。", + "guide": "《全能美食队·厨道的极意》:左右两边各要做 1 次\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "「给您添蘑菇了!」": { + "book": "天地万象", + "desc": "在「售后服务」中收到顾客绀田传助的抱怨。", + "guide": "前置任务《稻妻销售员》中,告诉绀田传助错误的化肥使用方法\n任务里有三个选项,选择错误的选项\n每次刷到这个任务时,瓦希德告诉你的方法的顺序可能是不一样的,没有固定答案,需要你自己判断哪个选项是错误的(类似璃月港数船)\n教错了的话,绀田传助会说感觉不对劲\n之后解锁每日委托《售后服务》(解锁代表有机会刷到,但不是第二天一定就刷),为绀田传助摘除田地里的蘑菇时,注意要把全部的蘑菇都摘除、摘了一部分时派蒙会说“这下应该差不多了”,同时系统提示可以找绀田传助交任务了;此时不要理会,继续摘蘑菇,全部摘完以后派蒙会说“这下就全部摘干净了”,这时再去找绀田传助交任务,任务完成后解锁成就", + "link": "" + }, + "饮食武士": { + "book": "天地万象", + "desc": "见证龟井宗久加入全能美食队。", + "guide": "做完前置每日《全能美食队·突破性思维》后给世界任务《全能美食队·吃饱的重要性》\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "喂——有人吗?": { + "book": "天地万象", + "desc": "在离岛中发现一处秘密通道。", + "guide": "《离岛之路》:找到秘密通道后就能拿到成就,触发世界任务", + "link": "" + }, + "编辑部的一己之见": { + "book": "天地万象", + "desc": "帮助阿茂和顺吉回到正确的创作轨道。", + "guide": "一阶段:《这本小说…厉害吗?》(支线:天目锻冶屋、九十九物、观察同心们的工作)\n二阶段支线 A:《这本小说…有问题?》\n二阶段支线 B:《这本小说…好像看过?》(按顺序123依次交书即可)\n从剧情逻辑上来看,在一阶段支持编辑阿茂解锁刷到《这本小说…好像看过》的可能性,支持作家顺吉解锁刷到《这本小说…有问题》的可能性\n需要这三个每日都做完,且在 B 支线交付\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "同心训练家?": { + "book": "天地万象", + "desc": "协助朝仓进行5次训练。", + "guide": "做 4 次每日委托《必须精进的武艺》后解锁世界任务《洗刷耻辱的一战》,完成世界任务后有机会刷到每日委托《永不停歇的修炼》,《必须精进的武艺》+《永不停歇的修炼》合计 5 次即可。\n*该任务的SL良性BUG已经修护\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Eb4y1m7y8?spm_id_from=333.999.0.0" + }, + "猜猜我是谁?": { + "book": "天地万象", + "desc": "获知「枕玉」老师的真实身份。", + "guide": "《「八重堂」的邀约》", + "link": "" + }, + "至少有了个结局": { + "book": "天地万象", + "desc": "听顺吉讲述完他所构思的故事。", + "guide": "需要在 2.1 版本后(2.0 版本做过的不算)重做《这本小说…有问题?》和《这本小说…好像看过?》才能解锁世界任务《故事构思法》 ,做完世界任务后得到成\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "她和她的猫": { + "book": "天地万象", + "desc": "陪寝子前往影向山,寻找「阿响」的痕迹。", + "guide": "做完寝子系列的世界任务后,累积做 4 个寝子相关每日委托(指《神社大扫除》、《鱼之味》、《猫之迹》,大岛纯平那三个不算)后解锁世界任务《鸣神寻踪》,完成世界任务后解锁成就\n*视频地址:https://www.bilibili.com/video/BV1T3411m7kJ", + "link": "https://www.bilibili.com/video/BV1T3411m7kJ" + }, + "啊哈…什么上钩了?": { + "book": "天地万象", + "desc": "与凯万一起钓起奇怪的东西…", + "guide": "√完结!\n累积做3次前置每日委托《鱼钩上的绝景?》,有墩墩桃、鸟蛋、蘑菇三种支线(注意是累积3次),第二天4点后解锁世界任务《鱼钩的物尽其用》,做完世界任务拿到成就。\n任务还有后续,但是无成就(可能未来版本会加后续成就)。\n做完世界任务以后有机会接到每日委托《鱼钩的奇异时光?》,和前边的也差不多,有帕蒂沙兰、香辛果、甜甜花三种支线", + "link": "" + }, + "卡里米之蕈兽": { + "book": "天地万象", + "desc": "见证哈特姆在「期货交易」大赚一笔!", + "guide": "每日委托《吞金和蓄财》\n√完结!\n正式服改为全随机后续,正常需要做5次拿到2成就,最速欧皇可以3次拿2成就。\n2022/9/5更新:\n「吞金料理」中有3种料理:摩拉肉,黄油鸡和「堆高高」。\n建议选择美味的堆高高。\n2022/9/16更新:\n现在发现变成了随机后续,给任何料理都会触发任意成就,原本应该给2次料理2个成就的,也可以1次料理2成就。", + "link": "" + }, + "当财运来敲门": { + "book": "天地万象", + "desc": "将苹果酿带给哈特姆。", + "guide": null, + "link": "" + }, + "捉猫记": { + "book": "天地万象", + "desc": "帮莎莉寻找过所有小猫。", + "guide": "每日委托《喵…喵喵?喵!喵。》\n至少要做 3(但老板还有第4只猫)次,每次随机给一只猫。\n「黑白色」的猫「拉勒」:【喵,喵喵喵,喵——】\n「深灰色」的猫「纳尔吉斯」:【喵!喵喵,喵】\n「灰黑条纹」的猫「萝赞」:【喵喵喵,喵喵喵】", + "link": "" + }, + "推分算数原理": { + "book": "天地万象", + "desc": "帮助加尔恰完善他的机器。", + "guide": "每日委托《加尔恰的赞歌》系列\n任务超级长,参考《稻妻珊瑚侦探事件簿》\n推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "「为了工作。」": { + "book": "天地万象", + "desc": "为范兵卫采到更多的蘑菇。", + "guide": "每日委托《御用在他乡》\n√完结!\n可以一次性拿到成就 :要求采5个蘑菇,但可以采7个给成就\n推测需要先做完稻妻的世界任务《踏鞴物语》系列才能在须弥接到这个委托。\n做完第一次以后他以后还会让你摘蘑菇,对话内容会有些变化", + "link": "" + }, + "放松疗法": { + "book": "天地万象", + "desc": "满足三个病人的愿望。", + "guide": "每日委托《谨遵医嘱》\n《洁净与健康》不是前置任务,可以直接刷到了《谨遵医嘱》\n《谨遵医嘱》这个任务是你和病人对话完成就可以回去交差了的,但这样拿不到成就。你需要:\n细节:① 主动为古尔根清理田里的杂草,清理完以后再次与古尔根对话;② 阿兹拉说药太苦,和她对话,送给她【糖】;③ 阿夫塔想吃肉,给他【美味的烤肉排】。\n满足病人的愿望以后再回去交差。其中阿兹拉和阿夫塔不会主动问你要东西,需要你听完他们的话以后再次与他们对话来交付道具", + "link": "" + }, + "斩花除根": { + "book": "天地万象", + "desc": "找到并打倒逃走的骗骗花。", + "guide": "每日委托《生不出的花》、《花开之时》\n√完结\n前置累积3次《生不出的花》后,后续出《花开之时》,\n随机后续1,有骗骗花的支线才有成就,追击并干掉骗骗花后获得成就。\n随机后续2,无骗骗花,寄了,再来3次……\n细节:前置有 2 个支线,一个是提供肥料,另一个是浇水。", + "link": "" + }, + "出港日": { + "book": "天地万象", + "desc": "拿到亚历山德拉的留信…", + "guide": "世界任务《代价》*视频地址:BV1ge411u7qq", + "link": "https://www.bilibili.com/video/BV1ge411u7qq?spm_id_from=333.999.0.0" + }, + "摩拉无罪": { + "book": "天地万象", + "desc": "见证全能美食队在须弥的故事。", + "guide": "世界任务《全能美食队·职责之内》 \n*视频地址:BV1p14y1a7i9\n", + "link": "https://www.bilibili.com/video/BV1p14y1a7i9/?spm_id_from=333.999.0.0" + }, + "天有多高,地有多…": { + "book": "天地万象", + "desc": "协助法伽尼进行测量工作。", + "guide": "每日委托《衡量世界之人!》\n1和2分支都是随机给的,其中分支1还有3种怪:丘丘人、蕈兽、遗迹蛇\n至少做 3 次,分别是:① 打怪;② 设置信标;③ 回收信标+打怪。", + "link": "" + }, + "结题时刻": { + "book": "天地万象", + "desc": "见证爱拉尼在须弥的故事。", + "guide": "世界任务《求学漫漫路》*视频地址:BV1oB4y1g7Bk", + "link": "https://www.bilibili.com/video/BV1oB4y1g7Bk?spm_id_from=333.999.0.0" + }, + "蔷薇绽放的若干条件": { + "book": "天地万象", + "desc": "帮助柯莱照顾须弥蔷薇。", + "guide": "世界任务《及时浇灌》*视频地址:BV16g411D7Uj", + "link": "https://www.bilibili.com/video/BV16g411D7Uj?spm_id_from=333.999.0.0" + }, + "梦想,梦想!你们去了哪里?": { + "book": "天地万象", + "desc": "见证贾维与「梦想」的故事。", + "guide": "世界任务《趁梦想气息逗留》*视频地址:BV1kU4y1z7Kh", + "link": "https://www.bilibili.com/video/BV1kU4y1z7Kh?spm_id_from=333.999.0.0" + }, + "非必要需求": { + "book": "天地万象", + "desc": "找到古拉布吉尔给小蛇制作的所有道具。", + "guide": "每日委托《宝贝计划》\n帮古拉布吉尔找宠物蛇口粮,有 5 个支线。任务是你找到【古拉布吉尔的特制宠物蛇口粮】交给 NPC 就可以完成,但是做成就需要你额外找到 3 个东西:【奇怪的珠子】、【奇怪的小型帽子】、【破旧的架子】。\n每次随机给1个隐藏道具,但是也可能没有。", + "link": "" + }, + "船说了算": { + "book": "天地万象", + "desc": "与拉菲克成功地测试了船体强度。", + "guide": "每日委托《问题的转化》系列\n√完结!\n目前第三段就可以拿到成就,但是还有后续,可能未来版本还有成就。\n(类似稻妻八重堂作家和编辑《小说有问题》在后续版本上线新成就。)\n细节:在《问题的转化·理论强度》中拿5块木头,这样在《问题的转化·负载问题》中可以成功拿到成就,失败的支线可能会退回到第二阶段。", + "link": "" + }, + "问题何在?": { + "book": "天地万象", + "desc": "享受三道贾法尔制作的料理。", + "guide": "每日委托《食与学》\n每次随机给一个。\n完成 3 个支线:薄荷豆汤、绿汁脆球、烤肉卷", + "link": "" + }, + "须弥博学者": { + "book": "天地万象", + "desc": "答对六道不同的问题。", + "guide": "每日委托《教令院,小问题》\n√完结!\n总共 6 道题,每次抽 3 道,正确答案分别是:1、阿弥利多学院;2、悉般多摩学院;3、圣树;4、防沙壁;5、驮兽;6、蕈兽", + "link": "" + }, + "一步之遥": { + "book": "天地万象", + "desc": "在与希尔米的赛跑中大意落败…", + "guide": "每日委托《跑,希尔米,跑》*视频地址:BV1qd4y1q7tT", + "link": "https://www.bilibili.com/video/BV1qd4y1q7tT/?spm_id_from=333.999.0.0" + }, + "医用笔迹": { + "book": "天地万象", + "desc": "帮助马鲁夫正确地解析药方。", + "guide": "每日委托《良药难求》 *视频地址:BV1CV4y1N7aU", + "link": "https://www.bilibili.com/video/BV1CV4y1N7aU/?spm_id_from=333.999.0.0" + }, + "手有余香": { + "book": "天地万象", + "desc": "见证内尔敏的故事。", + "guide": "每日委托《沙上花·余香》", + "link": "" + }, + "除了时间,什么也没丢": { + "book": "天地万象", + "desc": "解开两座日晷的秘密。", + "guide": "《时与风》", + "link": "" + }, + "与一位往昔神灵的谈话": { + "book": "天地万象", + "desc": "了解一位往昔神灵的故事。", + "guide": "《宝藏归离》", + "link": "" + }, + "卧龙藏螭": { + "book": "天地万象", + "desc": "了解关于「螭」的故事。", + "guide": "《古云有「螭」》", + "link": "" + }, + "战祸不息": { + "book": "天地万象", + "desc": "将某个古老遗迹中的宝物卖个好价钱…", + "guide": "《靖世九柱》宝物无论卖给谁都可以完成成就", + "link": "" + }, + "渌华池之影": { + "book": "天地万象", + "desc": "帮助梵米尔取到他想要的景致。", + "guide": "《渌华景画》完成任务后去渌华池东边传送点附近找梵米尔对话,选第一个选项后才会解锁成就", + "link": "" + }, + "零号玩家": { + "book": "天地万象", + "desc": "陪小姜玩一场简单的游戏。", + "guide": "《游戏一场》", + "link": "" + }, + "盘木森森,荫蔽家庭": { + "book": "天地万象", + "desc": "见证元鸿一家的故事。", + "guide": "《孤木孑立,无林可依》", + "link": "" + }, + "命运初动": { + "book": "天地万象", + "desc": "完成任务「拾枝者·戴因斯雷布」。", + "guide": "世界任务 第一章 第四幕·报幕「拾枝者·戴因斯雷布」(官方把这个算作世界任务)", + "link": "" + }, + "贼寇、狂人与漆黑之谜": { + "book": "天地万象", + "desc": "确认大盗宝家的异状。", + "guide": "魔神任务 第一章 第四幕「我们终将重逢」", + "link": "" + }, + "命运交叉的废都": { + "book": "天地万象", + "desc": "逃离诡异的遗迹。", + "guide": "魔神任务 第一章 第四幕「我们终将重逢」", + "link": "" + }, + "将诸神的力量付之一笑": { + "book": "天地万象", + "desc": "得知「命运的织机」正在进行中…", + "guide": "魔神任务 第一章 第四幕「我们终将重逢」", + "link": "" + }, + "狂言破碎之时": { + "book": "天地万象", + "desc": "击退深渊使徒。", + "guide": "魔神任务 第一章 第四幕「我们终将重逢」", + "link": "" + }, + "我们终将重逢": { + "book": "天地万象", + "desc": "完成「我们终将重逢」。", + "guide": "魔神任务 第一章 第四幕「我们终将重逢」", + "link": "" + }, + "雷电将至": { + "book": "天地万象", + "desc": "得到搭乘「死兆星」号前往稻妻的机会。", + "guide": "魔神任务 第二章 序幕「振袖秋风问红叶」", + "link": "" + }, + "开战!": { + "book": "天地万象", + "desc": "在「南十字武斗会」中取得首次胜利。", + "guide": "魔神任务 第二章 序幕「振袖秋风问红叶」", + "link": "" + }, + "振袖秋风问红叶": { + "book": "天地万象", + "desc": "完成「振袖秋风问红叶」。", + "guide": "魔神任务 第二章 序幕「振袖秋风问红叶」", + "link": "" + }, + "朝着雷霆骤雨": { + "book": "天地万象", + "desc": "抵达「异人居留地」。", + "guide": "魔神任务 第二章 第一幕「不动鸣神,恒常乐土」", + "link": "" + }, + "柊三十郎": { + "book": "天地万象", + "desc": "顺利押送货物,离开离岛。", + "guide": "魔神任务 第二章 第一幕「不动鸣神,恒常乐土」", + "link": "" + }, + "所有人的愿望之诗": { + "book": "天地万象", + "desc": "接触「永恒」的象征,「千手百眼神像」。", + "guide": "魔神任务 第二章 第一幕「不动鸣神,恒常乐土」", + "link": "" + }, + "屏风后的白鹭公主": { + "book": "天地万象", + "desc": "与神里家的大小姐正式会面。", + "guide": "魔神任务 第二章 第一幕「不动鸣神,恒常乐土」", + "link": "" + }, + "御守、仁义、天下一": { + "book": "天地万象", + "desc": "完成「三个小心愿」。", + "guide": "魔神任务 第二章 第一幕「不动鸣神,恒常乐土」", + "link": "" + }, + "牢屋敷花火祭": { + "book": "天地万象", + "desc": "成功营救正胜。", + "guide": "魔神任务 第二章 第一幕「不动鸣神,恒常乐土」", + "link": "" + }, + "直面雷光": { + "book": "天地万象", + "desc": "成为「眼狩令」的目标。", + "guide": "魔神任务 第二章 第二幕「无念无想,泡影断灭」", + "link": "" + }, + "异人一揆": { + "book": "天地万象", + "desc": "顺利融入反抗军中。", + "guide": "魔神任务 第二章 第二幕「无念无想,泡影断灭」", + "link": "" + }, + "不动鸣神,恒常乐土": { + "book": "天地万象", + "desc": "完成「不动鸣神,恒常乐土」。", + "guide": "魔神任务 第二章 第一幕「不动鸣神,恒常乐土」", + "link": "" + }, + "无念无想,泡影断灭": { + "book": "天地万象", + "desc": "完成「无念无想,泡影断灭」。", + "guide": "魔神任务 第二章 第二幕「无念无想,泡影断灭」", + "link": "" + }, + "SWORDFISH Ⅱ": { + "book": "天地万象", + "desc": "获得剑鱼二番队的认可。", + "guide": "魔神任务 第二章 第三幕「千手百眼,天下人间」", + "link": "" + }, + "虽是露水般的愿望…": { + "book": "天地万象", + "desc": "找到派发邪眼的幕后黑手。", + "guide": "魔神任务 第二章 第三幕「千手百眼,天下人间」", + "link": "" + }, + "特大号花火祭": { + "book": "天地万象", + "desc": "燃放烟花引开守卫。", + "guide": "魔神任务 第二章 第三幕「千手百眼,天下人间」", + "link": "" + }, + "御前生死斗": { + "book": "天地万象", + "desc": "在「御前决斗」中,获得胜利。", + "guide": "魔神任务 第二章 第三幕「千手百眼,天下人间」", + "link": "" + }, + "「他们」的愿望…": { + "book": "天地万象", + "desc": "回应「千手百眼神像」中所有的愿望。", + "guide": "魔神任务 第二章 第三幕「千手百眼,天下人间」", + "link": "" + }, + "千手百眼,天下人间": { + "book": "天地万象", + "desc": "完成「千手百眼,天下人间」。", + "guide": "魔神任务 第二章 第三幕「千手百眼,天下人间」", + "link": "" + }, + "「诸事平安」": { + "book": "天地万象", + "desc": "与王平安一起重修铜雀的庙宇。", + "guide": "世界任务《身后事·归于山中》", + "link": "" + }, + "安娜冒险记": { + "book": "天地万象", + "desc": "帮助安娜成为一名冒险家。", + "guide": "《冒险家,安娜!》\n拿到成就的过程和给安娜治病差不多,且需要先给安娜治好病,也就是完成每日委托成就《妙手怪医》,之后完成前置任务:《冒险家测验·作战方式》、《冒险家测验·冒险诀窍》、《冒险家测验·起飞方式》,最后接到后续《冒险家,安娜!》,第一次完成任务后拿到成就\n(做完成就后还有后续支线,其中一条支线有“彩蛋”级内容,但没成就)\n*前置很阴间主要是情商选项,后续这4个也很阴间不按套路出牌\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Bu411r7Kb?spm_id_from=333.999.0.0" + }, + "远大前程": { + "book": "天地万象", + "desc": "一位少年即将启程远行…", + "guide": "《小海盗,要出海!》\n前置《哎呀!海盗想长大!》、《随水而来的烦恼》\n后续《小小的远行》系列 3 个(没成就)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1q44y1N7Dn?spm_id_from=333.999.0.0" + }, + "群玉临空": { + "book": "天地万象", + "desc": "完成群玉阁重建工作。", + "guide": "魔神任务 间章 第一幕「风起鹤归」", + "link": "" + }, + "沧海生威": { + "book": "天地万象", + "desc": "击退「漩涡的余威」跋掣。", + "guide": "魔神任务 间章 第一幕「风起鹤归」", + "link": "" + }, + "前尘一梦": { + "book": "天地万象", + "desc": "见证村庄历史中的真相。", + "guide": "魔神任务 间章 第一幕「风起鹤归」", + "link": "" + }, + "风起鹤归": { + "book": "天地万象", + "desc": "完成「风起鹤归」。", + "guide": "魔神任务 间章 第一幕「风起鹤归」", + "link": "" + }, + "窥伺「深渊」时…": { + "book": "天地万象", + "desc": "虽然与戴因再会,却正被深渊窥伺…", + "guide": "魔神任务 第二章 第四幕「回响渊底的安魂曲」", + "link": "" + }, + "美丽的与被诅咒的": { + "book": "天地万象", + "desc": "知晓黑蛇骑士与丘丘人的秘密。", + "guide": "魔神任务 第二章 第四幕「回响渊底的安魂曲」", + "link": "" + }, + "生命意志与痛苦深渊": { + "book": "天地万象", + "desc": "击败深渊使徒。", + "guide": "魔神任务 第二章 第四幕「回响渊底的安魂曲」", + "link": "" + }, + "愿荣光同在": { + "book": "天地万象", + "desc": "完成「回响渊底的安魂曲」。", + "guide": "魔神任务 第二章 第四幕「回响渊底的安魂曲」", + "link": "" + }, + "蹈刃不旋": { + "book": "天地万象", + "desc": "在「危途疑踪」中突破阻碍成功与魈会合。", + "guide": "魔神任务 间章 第二幕「危途疑踪」", + "link": "" + }, + "层层惊骇": { + "book": "天地万象", + "desc": "成功逃离位于层岩巨渊最下方的神秘空间。", + "guide": "魔神任务 间章 第二幕「危途疑踪」", + "link": "" + }, + "以魂证心": { + "book": "天地万象", + "desc": "完成「危途疑踪」。", + "guide": "魔神任务 间章 第二幕「危途疑踪」", + "link": "" + }, + "阿卡西之声": { + "book": "天地万象", + "desc": "聆听神明的智慧之声。", + "guide": " 3.0魔神主线白嫖8个", + "link": "" + }, + "商人与知识之门": { + "book": "天地万象", + "desc": "与多莉见面并买下罐装知识。", + "guide": null, + "link": "" + }, + "罐装时光屋": { + "book": "天地万象", + "desc": "使用罐装知识提升了战力。", + "guide": null, + "link": "" + }, + "穿越烟帷与暗林": { + "book": "天地万象", + "desc": "完成「穿越烟帷与暗林」。", + "guide": null, + "link": "" + }, + "负荷口味的既视感": { + "book": "天地万象", + "desc": "依靠本能选到日落果口味的糖果盒。", + "guide": null, + "link": "" + }, + "派蒙都不吃!": { + "book": "天地万象", + "desc": "吃掉一看就难吃的「椰炭饼」。", + "guide": null, + "link": "" + }, + "是梦终将醒来": { + "book": "天地万象", + "desc": "从「花神诞日的轮回」中醒来。", + "guide": null, + "link": "" + }, + "千朵玫瑰带来的黎明": { + "book": "天地万象", + "desc": "完成「千朵玫瑰带来的黎明」。", + "guide": null, + "link": "" + }, + "穿行躯壳之灵": { + "book": "天地万象", + "desc": "在纳西妲通过虚空「附身」他人后共享感官。", + "guide": "3.1魔神主线", + "link": "" + }, + "虚构的凯旋式": { + "book": "天地万象", + "desc": "被遭到「博士」控制的民众们视为拯救世界的英雄。", + "guide": null, + "link": "" + }, + "「神明」回以凝视": { + "book": "天地万象", + "desc": "在连接「神明意识」后看到「散兵」的过去。", + "guide": null, + "link": "" + }, + "迷梦与空幻与欺骗": { + "book": "天地万象", + "desc": "完成「迷梦与空幻与欺骗」。", + "guide": null, + "link": "" + }, + "沙海奇兵": { + "book": "天地万象", + "desc": "发现流沙之下的古代神殿。", + "guide": null, + "link": "" + }, + "残阳浩劫之后": { + "book": "天地万象", + "desc": "通过赤王祭司的「遗言」了解到过去的事情。", + "guide": null, + "link": "" + }, + "赤土之王与三朝圣者": { + "book": "天地万象", + "desc": "完成「赤土之王与三朝圣者」。", + "guide": null, + "link": "" + }, + "Eremitis ne credite": { + "book": "天地万象", + "desc": "协同赛诺将拉赫曼一行带入须弥。", + "guide": null, + "link": "" + }, + "胜利的方程式": { + "book": "天地万象", + "desc": "完成「计划」的准备工作。", + "guide": null, + "link": "" + }, + "最长的一日": { + "book": "天地万象", + "desc": "在「识藏日」当天拯救神明。", + "guide": null, + "link": "" + }, + "…并非是适格者": { + "book": "天地万象", + "desc": "阻止「伪神」的诞生。", + "guide": null, + "link": "" + }, + "虚空鼓动,劫火高扬": { + "book": "天地万象", + "desc": "完成「虚空鼓动,劫火高扬」。", + "guide": null, + "link": "" + }, + "美妙旅程:序": { + "book": "心跳的记忆", + "desc": "完成「美妙旅程」,解锁全部结局。", + "guide": "邀约事件·班尼特 第一幕「美妙旅程」", + "link": "" + }, + "霹雳闪雷真君": { + "book": "心跳的记忆", + "desc": "见证班尼特足以影响天气的厄运。", + "guide": "邀约事件·班尼特 第一幕「美妙旅程」", + "link": "" + }, + "运气即实力!": { + "book": "心跳的记忆", + "desc": "在不失误的情况下解开机关,取得宝藏。", + "guide": "邀约事件·班尼特 第一幕「美妙旅程」", + "link": "" + }, + "诸邪退散": { + "book": "心跳的记忆", + "desc": "完成「寻妖觅邪记」,解锁全部结局。", + "guide": "邀约事件·重云 第一幕「寻妖觅邪记」", + "link": "" + }, + "慧眼识妖!": { + "book": "心跳的记忆", + "desc": "正确鉴定所有情报。", + "guide": "邀约事件·重云 第一幕「寻妖觅邪记」", + "link": "" + }, + "辣椒英雄": { + "book": "心跳的记忆", + "desc": "制作错误的冰棍,引发重云「纯阳之体」的剧烈反应。", + "guide": "邀约事件·重云 第一幕「寻妖觅邪记」", + "link": "" + }, + "能跨越的边界线": { + "book": "心跳的记忆", + "desc": "完成「治愈的清泉」,解锁全部结局。", + "guide": "邀约事件·芭芭拉 第一幕「治愈的清泉」", + "link": "" + }, + "偶像的可靠防线": { + "book": "心跳的记忆", + "desc": "成功劝走艾伯特和其他芭芭拉的粉丝。", + "guide": "邀约事件·芭芭拉 第一幕 「治愈的清泉」", + "link": "" + }, + "蒙德城的麻辣传说": { + "book": "心跳的记忆", + "desc": "品尝芭芭拉的辣味饮料。", + "guide": "邀约事件·芭芭拉 第一幕「治愈的清泉」", + "link": "" + }, + "完美而坚强的女仆": { + "book": "心跳的记忆", + "desc": "完成「骑士修行之道」,解锁全部结局。", + "guide": "邀约事件·诺艾尔 第一幕「骑士修行之道」", + "link": "" + }, + "「…因为羁绊。」": { + "book": "心跳的记忆", + "desc": "帮助诺艾尔找到自己强大的原因。", + "guide": "邀约事件·诺艾尔 第一幕「骑士修行之道」", + "link": "" + }, + "只有玫瑰知道的世界": { + "book": "心跳的记忆", + "desc": "阅读诺艾尔的学习笔记。", + "guide": "邀约事件·诺艾尔 第一幕「骑士修行之道」", + "link": "" + }, + "消除焦虑的最好办法": { + "book": "心跳的记忆", + "desc": "完成「骑士备考之道」,解锁全部结局。", + "guide": "邀约事件·诺艾尔 第二幕「骑士备考之道」", + "link": "" + }, + "女仆骑士不会受伤": { + "book": "心跳的记忆", + "desc": "与诺艾尔一起听过《异国骑士璃月行记》。", + "guide": "邀约事件·诺艾尔 第二幕「骑士备考之道」", + "link": "" + }, + "蒙德做题王": { + "book": "心跳的记忆", + "desc": "阅读诺艾尔的学习笔记。", + "guide": "邀约事件·诺艾尔 第二幕「骑士备考之道」", + "link": "" + }, + "迪奥娜特调,搅拌,不要摇": { + "book": "心跳的记忆", + "desc": "完成「猫与特调酒」,解锁全部结局。", + "guide": "邀约事件·迪奥娜 第一幕「猫与特调酒」", + "link": "" + }, + "但是,代价是…": { + "book": "心跳的记忆", + "desc": "帮助迪奥娜找到特制基底饮品。", + "guide": "邀约事件·迪奥娜 第一幕「猫与特调酒」", + "link": "" + }, + "猫咪殿下": { + "book": "心跳的记忆", + "desc": "将所有猫咪带回「猫尾酒馆」。", + "guide": "邀约事件·迪奥娜 第一幕「猫与特调酒」", + "link": "" + }, + "皆大欢喜": { + "book": "心跳的记忆", + "desc": "完成「家政官的日常工作」,解锁全部结局。", + "guide": "邀约事件·托马 第一幕「家政官的日常工作」", + "link": "" + }, + "家政高手": { + "book": "心跳的记忆", + "desc": "在规定时间内完成大扫除。", + "guide": "邀约事件·托马 第一幕「家政官的日常工作」", + "link": "" + }, + "沧海不归客": { + "book": "心跳的记忆", + "desc": "与托马一起见证犬少将的故事", + "guide": "邀约事件·托马 第一幕「家政官的日常工作」", + "link": "" + }, + "「高」人一等": { + "book": "心跳的记忆", + "desc": "完成「呜呼流·生长之术」,解锁全部结局。", + "guide": "邀约事件·早柚 第一幕「呜呼流·生长之术」", + "link": "" + }, + "貉级忍者": { + "book": "心跳的记忆", + "desc": "在敏捷度训练中获得早柚的最高评价。", + "guide": "邀约事件·早柚 第一幕「呜呼流·生长之术」,30 秒内完成", + "link": "" + }, + "料理效果:移动速度降低": { + "book": "心跳的记忆", + "desc": "没能劝阻早柚的暴饮暴食…", + "guide": "邀约事件·早柚 第一幕「呜呼流·生长之术」", + "link": "" + }, + "南十字荣誉船员": { + "book": "心跳的记忆", + "desc": "完成「南十字闪耀时」,解锁全部结局。", + "guide": "邀约事件·北斗 第一幕「南十字闪耀时」", + "link": "" + }, + "洒下甘露三千担": { + "book": "心跳的记忆", + "desc": "与北斗共同参加了轻策庄的宴会。", + "guide": "邀约事件·北斗 第一幕「南十字闪耀时」", + "link": "" + }, + "孤云阁买家俱乐部": { + "book": "心跳的记忆", + "desc": "询问了北斗真正交易的内容。", + "guide": "邀约事件·北斗 第一幕「南十字闪耀时」", + "link": "" + }, + "海祇大将": { + "book": "心跳的记忆", + "desc": "完成「犬大将的特别行动」,解锁全部结局。", + "guide": "邀约事件·五郎 第一幕「犬大将的特别行动」", + "link": "" + }, + "运势无常": { + "book": "心跳的记忆", + "desc": "在神社抽到过所有的运势签。", + "guide": "邀约事件·五郎 第一幕「犬大将的特别行动」(可以直接原地读取进度,把 4 种签都选 1 次就行了)", + "link": "" + }, + "说还是不说,这是个问题。": { + "book": "心跳的记忆", + "desc": "在八重堂察觉了希娜小姐的真实身份。", + "guide": "邀约事件·五郎 第一幕「犬大将的特别行动」", + "link": "" + }, + "天权伴星": { + "book": "心跳的记忆", + "desc": "完成「玉阁归客至」,解锁全部结局。", + "guide": "邀约事件·凝光 第一幕「玉阁归客至」", + "link": "" + }, + "有备才能无患": { + "book": "心跳的记忆", + "desc": "鱼肉,当然是越多越好。", + "guide": "邀约事件·凝光 第一幕「玉阁归客至」", + "link": "" + }, + "过当防卫": { + "book": "心跳的记忆", + "desc": "一石激起千层浪,凝光的假期看来无福消受了。", + "guide": "邀约事件·凝光 第一幕「玉阁归客至」", + "link": "" + }, + "曲终人未散": { + "book": "心跳的记忆", + "desc": "完成「弦歌知雅意」,解锁全部结局。", + "guide": "邀约事件·云堇 第一幕「弦歌知雅意」", + "link": "" + }, + "愿此刻永恒": { + "book": "心跳的记忆", + "desc": "与云堇合影留念。", + "guide": "邀约事件·云堇 第一幕「弦歌知雅意」", + "link": "" + }, + "严师出高徒": { + "book": "心跳的记忆", + "desc": "在不击中任何「蓝色稻草人」的情况下完成演练。", + "guide": "邀约事件·云堇 第一幕「弦歌知雅意」", + "link": "" + }, + "荒泷派首席顾问": { + "book": "心跳的记忆", + "desc": "完成「帮派的日常事务」,解锁全部结局。", + "guide": "邀约事件·久岐忍 第一幕「帮派的日常事务」", + "link": "" + }, + "再看一眼!": { + "book": "心跳的记忆", + "desc": "一睹久岐忍身着巫女服的风采。", + "guide": "邀约事件·久岐忍 第一幕「帮派的日常事务」", + "link": "" + }, + "「楼上的区域…」": { + "book": "心跳的记忆", + "desc": "在惊动九条裟罗和久岐忍之前被劝阻。", + "guide": "邀约事件·久岐忍 第一幕「帮派的日常事务」", + "link": "" + }, + "你以为是本格吧?": { + "book": "心跳的记忆", + "desc": "完成「风暴捕物帐」,解锁全部结局。", + "guide": "邀约事件·鹿野院平藏 第一幕「风暴捕物帐」", + "link": "" + }, + "吾乃完美真探!": { + "book": "心跳的记忆", + "desc": "分析动机和犯罪事实一次成功。", + "guide": "邀约事件·鹿野院平藏 第一幕「风暴捕物帐」", + "link": "" + }, + "珊瑚宫的祈祷": { + "book": "心跳的记忆", + "desc": "询问了五郎,心海是否知道海祇岛的事。", + "guide": "邀约事件·鹿野院平藏 第一幕「风暴捕物帐」", + "link": "" + }, + "风与异乡人": { + "book": "尘世巡游·第一辑", + "desc": "使用风元素吹散一株蒲公英。", + "guide": null, + "link": "" + }, + "千嶂万仞": { + "book": "尘世巡游·第一辑", + "desc": "掌握「岩」的元素力。", + "guide": null, + "link": "" + }, + "流水叮咛": { + "book": "尘世巡游·第一辑", + "desc": "集齐全套《清泉之心》。", + "guide": "书本收集", + "link": "" + }, + "神戟狂言凌云霄": { + "book": "尘世巡游·第一辑", + "desc": "集齐全套《神霄折戟录》。", + "guide": "书本收集", + "link": "" + }, + "醉客与狼的相遇": { + "book": "尘世巡游·第一辑", + "desc": "集齐全套《醉客轶事》。", + "guide": "书本收集", + "link": "" + }, + "清泉、白马与月光": { + "book": "尘世巡游·第一辑", + "desc": "集齐全套《竹林月夜》。", + "guide": "书本收集", + "link": "" + }, + "灿若惊雷": { + "book": "尘世巡游·第二辑", + "desc": "掌握「雷」的元素力。", + "guide": null, + "link": "" + }, + "蒲公英的故乡": { + "book": "尘世巡游·第二辑", + "desc": "集齐全套《蒲公英海的狐狸》。", + "guide": null, + "link": "" + }, + "友谊与牺牲的价值": { + "book": "尘世巡游·第二辑", + "desc": "集齐全套《野猪公主》。", + "guide": null, + "link": "" + }, + "百亿昼夜的百亿青春": { + "book": "尘世巡游·第二辑", + "desc": "集齐全套《少女薇拉的忧郁》。", + "guide": null, + "link": "" + }, + "丘丘学的扩张": { + "book": "尘世巡游·第二辑", + "desc": "集齐全套《丘丘人习俗考察》。", + "guide": null, + "link": "" + }, + "撷草瞻华": { + "book": "尘世巡游·第三辑", + "desc": "掌握「草」的元素力。", + "guide": "第一次接触草元素", + "link": "" + }, + "居尔城往事": { + "book": "尘世巡游·第三辑", + "desc": "集齐全套《希鲁伊与希琳的故事》。", + "guide": "书全在须弥城图书馆,良心无阴间,全部一次性收集齐\n*视频地址:BV13g411D7EM", + "link": "https://www.bilibili.com/video/BV13g411D7EM?spm_id_from=333.999.0.0" + }, + "火一般辉煌": { + "book": "尘世巡游·第三辑", + "desc": "集齐全套《遐叶论经》。", + "guide": null, + "link": "" + }, + "法里斯之旅": { + "book": "尘世巡游·第三辑", + "desc": "集齐全套《浮槃歌卷》。", + "guide": null, + "link": "" + }, + "人铸赋形": { + "book": "冒险手艺", + "desc": "锻造一把四星武器。", + "guide": null, + "link": "" + }, + "生存专家": { + "book": "冒险手艺", + "desc": "掌握40种菜肴的制作方法。", + "guide": null, + "link": "" + }, + "星级大厨": { + "book": "冒险手艺", + "desc": "40个料理食谱达到熟练。", + "guide": null, + "link": "" + }, + "如日方升的旅程": { + "book": "英雄之旅", + "desc": "角色首次突破至6阶。", + "guide": null, + "link": "" + }, + "百炼千锤": { + "book": "英雄之旅", + "desc": "将一个武器突破至6阶。", + "guide": null, + "link": "" + }, + "你所不知道的事": { + "book": "英雄之旅", + "desc": "将16个角色好感等级提升至10级。", + "guide": "尘歌壶的好感经验为所有入驻角色增加同样的经验,不会因为你只放一个角色就给你 8 倍的经验", + "link": "" + }, + "大地的馈赠": { + "book": "英雄之旅", + "desc": "获取800次「藏金之花」或「启示之花」的馈藏。", + "guide": "~", + "link": "" + }, + "英雄之礼": { + "book": "英雄之旅", + "desc": "获得四星圣遗物。", + "guide": null, + "link": "" + }, + "长歌回响": { + "book": "英雄之旅", + "desc": "将一个四星圣遗物强化至最高等级。", + "guide": null, + "link": "" + }, + "神话秘藏": { + "book": "英雄之旅", + "desc": "获得五星圣遗物。", + "guide": null, + "link": "" + }, + "祝圣篇章": { + "book": "英雄之旅", + "desc": "将一个五星圣遗物强化至最高等级。", + "guide": null, + "link": "" + }, + "大地勘探·蒙德": { + "book": "蒙德·风与牧歌的城邦", + "desc": "点亮整个蒙德地图(龙脊雪山地区除外)。", + "guide": null, + "link": "" + }, + "千风拂去": { + "book": "蒙德·风与牧歌的城邦", + "desc": "解锁蒙德的所有传送锚点(龙脊雪山地区除外)。", + "guide": null, + "link": "" + }, + "且听风吟": { + "book": "蒙德·风与牧歌的城邦", + "desc": "将蒙德的七天神像供奉至满级。", + "guide": null, + "link": "" + }, + "圣龛巡礼·蒙德": { + "book": "蒙德·风与牧歌的城邦", + "desc": "解除蒙德所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "风中引路人": { + "book": "蒙德·风与牧歌的城邦", + "desc": "在蒙德追随40个仙灵,并点亮仙灵之庭(龙脊雪山地区除外)。", + "guide": null, + "link": "" + }, + "逐风的寻宝者": { + "book": "蒙德·风与牧歌的城邦", + "desc": "在蒙德开启400个宝箱(龙脊雪山地区除外)。", + "guide": null, + "link": "" + }, + "逐风的冒险家": { + "book": "蒙德·风与牧歌的城邦", + "desc": "在蒙德,完成15个大世界机关限时挑战(龙脊雪山地区除外)。", + "guide": null, + "link": "" + }, + "大地勘探·璃月": { + "book": "璃月·岩与契约的海港", + "desc": "点亮下列区域的地图:碧水原、琼玑野、珉林、璃沙郊、云来海。", + "guide": null, + "link": "" + }, + "尽览群岩": { + "book": "璃月·岩与契约的海港", + "desc": "解锁璃月的所有传送锚点(层岩巨渊另外计算)。", + "guide": null, + "link": "" + }, + "重嶂不移": { + "book": "璃月·岩与契约的海港", + "desc": "将璃月的七天神像供奉至满级。", + "guide": null, + "link": "" + }, + "圣龛巡礼·璃月": { + "book": "璃月·岩与契约的海港", + "desc": "解除璃月所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "岩间引路人": { + "book": "璃月·岩与契约的海港", + "desc": "在璃月追随60个仙灵,并点亮仙灵之庭(层岩巨渊另外计算)。", + "guide": null, + "link": "" + }, + "磐岩的寻宝者": { + "book": "璃月·岩与契约的海港", + "desc": "在璃月开启800个宝箱(层岩巨渊另外计算)。", + "guide": null, + "link": "" + }, + "磐岩的冒险家": { + "book": "璃月·岩与契约的海港", + "desc": "在璃月,完成40个大世界机关限时挑战(层岩巨渊另外计算)。", + "guide": null, + "link": "" + }, + "「老实点!」": { + "book": "元素专家·第一辑", + "desc": "达成10次:持续冻结一名敌人超过10秒。", + "guide": null, + "link": "" + }, + "「随风而去吧!」": { + "book": "元素专家·第一辑", + "desc": "达成10次:2秒内,触发冰、水、火、雷元素四种扩散反应。", + "guide": null, + "link": "" + }, + "白色的季节": { + "book": "元素专家·第一辑", + "desc": "达成10次:2秒内,冻结4名敌人。", + "guide": null, + "link": "" + }, + "低温环境导致可用电量下降": { + "book": "元素专家·第一辑", + "desc": "达成10次:2秒内,通过超导反应打败4名敌人。", + "guide": "击败敌人的最后一击必须是超导反应的伤害,其他类型的伤害打败怪物不算数", + "link": "" + }, + "「艺术就是…」": { + "book": "元素专家·第一辑", + "desc": "达成10次:2秒内,通过超载反应打败4名敌人。", + "guide": "击败敌人的最后一击必须是超载反应的伤害,其他类型的伤害打败怪物不算数", + "link": "" + }, + "…必须毁灭两次": { + "book": "元素专家·第一辑", + "desc": "达成10次:2秒内,通过融化反应打败4名敌人。", + "guide": "击败敌人的最后一击必须是融化反应的伤害,其他类型的伤害打败怪物不算数", + "link": "" + }, + "「略大于突如其来的爱情。」": { + "book": "元素专家·第一辑", + "desc": "达成10次:2秒内,通过感电反应打败4名敌人。", + "guide": "击败敌人的最后一击必须是感电反应的伤害,其他类型的伤害打败怪物不算数", + "link": "" + }, + "草草炸弹,轰轰火花": { + "book": "元素专家·第二辑", + "desc": "达成10次:2秒内,通过烈绽放击败4名敌人。", + "guide": null, + "link": "" + }, + "超绽放马戏": { + "book": "元素专家·第二辑", + "desc": "达成10次:2秒内,通过超绽放击败4名敌人。", + "guide": null, + "link": "" + }, + "热光学迷彩": { + "book": "元素专家·第二辑", + "desc": "3秒内,通过原激化、超激化、蔓激化或「真识波」,破除至少2台元能构装体的不可视状态。", + "guide": null, + "link": "" + }, + "「无他,惟手熟尔」": { + "book": "神射手", + "desc": "用弓箭射中在空中飞行的鹰。", + "guide": null, + "link": "" + }, + "百步穿杨": { + "book": "神射手", + "desc": "在远距离,通过瞄准射击击中敌人要害。", + "guide": null, + "link": "" + }, + "魔弹射手": { + "book": "神射手", + "desc": "在超远距离,通过瞄准射击击中敌人要害。", + "guide": null, + "link": "" + }, + "全什么外壳来着?": { + "book": "挑战者·第一辑", + "desc": "粉碎一个大型岩史莱姆的岩晶护罩。", + "guide": null, + "link": "" + }, + "特斯拉球还流行吗?": { + "book": "挑战者·第一辑", + "desc": "粉碎一个雷萤术士的护罩。", + "guide": null, + "link": "" + }, + "谁的节奏天国?": { + "book": "挑战者·第一辑", + "desc": "阻止深渊法师恢复护罩。", + "guide": null, + "link": "" + }, + "赫炎的达达乌帕": { + "book": "挑战者·第一辑", + "desc": "点燃一扇木盾丘丘暴徒的木盾。", + "guide": null, + "link": "" + }, + "清泉的猎人": { + "book": "挑战者·第二辑", + "desc": "击败过纯水精灵召唤的每一种幻形生物。", + "guide": null, + "link": "" + }, + "水刑物语": { + "book": "挑战者·第二辑", + "desc": "在未被部分幻形生物消散时留下的水弹命中的情况下,击败纯水精灵。", + "guide": null, + "link": "" + }, + "…出奇迹?": { + "book": "挑战者·第二辑", + "desc": "击败「奇怪的丘丘人」50次。", + "guide": "超过 10 次后没奖励,但成就数量可以继续计算", + "link": "" + }, + "提瓦特的园丁,不畏严寒": { + "book": "挑战者·第二辑", + "desc": "通过攻击急冻树的花冠,使其瘫痪。", + "guide": null, + "link": "" + }, + "提瓦特的园丁,不畏酷热": { + "book": "挑战者·第二辑", + "desc": "通过攻击爆炎树的花冠,使其瘫痪。", + "guide": null, + "link": "" + }, + "天降正义!": { + "book": "挑战者·第二辑", + "desc": "维持下落攻击状态超过5秒后,命中敌人。", + "guide": null, + "link": "" + }, + "第三类永动机": { + "book": "挑战者·第二辑", + "desc": "在15秒内,施放5次元素爆发。", + "guide": null, + "link": "" + }, + "约等于天下无敌": { + "book": "挑战者·第二辑", + "desc": "使一名角色同时处于三种或更多不同的护盾庇护下。", + "guide": null, + "link": "" + }, + "抢断": { + "book": "挑战者·第三辑", + "desc": "打落冰弹丘丘人手中的冰史莱姆。", + "guide": null, + "link": "" + }, + "推倒这面墙!": { + "book": "挑战者·第三辑", + "desc": "摧毁一扇冰盾丘丘暴徒的盾牌。", + "guide": null, + "link": "" + }, + "少冰无糖": { + "book": "挑战者·第三辑", + "desc": "在冰丘丘萨满没能创造冰柱的情况下,击败冰丘丘萨满。", + "guide": null, + "link": "" + }, + "…摔得越重": { + "book": "挑战者·第三辑", + "desc": "摧毁冰丘丘萨满的冰柱。", + "guide": null, + "link": "" + }, + "这个丘丘不太冷": { + "book": "挑战者·第三辑", + "desc": "在魔化状态结束前,击败丘丘霜铠王。", + "guide": null, + "link": "" + }, + "玫瑰花蕾…": { + "book": "挑战者·第三辑", + "desc": "粉碎一个冰萤术士的护罩。", + "guide": null, + "link": "" + }, + "国王刺客": { + "book": "挑战者·第三辑", + "desc": "击败龙脊雪山的真正王者…?", + "guide": "大雪猪王", + "link": "" + }, + "歌利亚": { + "book": "挑战者·第三辑", + "desc": "通过攻击要害,瘫痪遗迹重机。", + "guide": "需要击中遗迹重机的所有要害", + "link": "" + }, + "…太阳岩龙蜥、月亮岩龙蜥": { + "book": "挑战者·第四辑", + "desc": "击败过岩龙蜥的所有元素形态。", + "guide": null, + "link": "" + }, + "岩元素反应?": { + "book": "挑战者·第四辑", + "desc": "击败过古岩龙蜥所有元素形态。", + "guide": null, + "link": "" + }, + "傀儡谣": { + "book": "挑战者·第四辑", + "desc": "在魔偶剑鬼挑衅时击败魔偶剑鬼。", + "guide": null, + "link": "" + }, + "废图毁腾": { + "book": "挑战者·第四辑", + "desc": "在场上没有丘丘雷图腾的情况下,击败雷丘丘萨满。", + "guide": null, + "link": "" + }, + "被命运诅咒的王": { + "book": "挑战者·第四辑", + "desc": "击败强化状态下的丘丘雷兜王。", + "guide": null, + "link": "" + }, + "飞越水疗馆": { + "book": "挑战者·第四辑", + "desc": "不被「水牢」攻击命中的情况下,击败藏镜仕女。", + "guide": null, + "link": "" + }, + "完全静默": { + "book": "挑战者·第四辑", + "desc": "在无相之火只进入一次熄灭状态的情况下,击败无相之火。", + "guide": null, + "link": "" + }, + "鸣神岛作战": { + "book": "挑战者·第四辑", + "desc": "击败处于虚弱状态下的恒常机关阵列。", + "guide": null, + "link": "" + }, + "画龙点睛": { + "book": "挑战者·第四辑", + "desc": "在战斗中不曾获取过护盾的情况下,击败若陀龙王。", + "guide": null, + "link": "" + }, + "将盐送给敌人,将水留给自己": { + "book": "挑战者·第五辑", + "desc": "在一次无相之水挑战中,获取至少三个「水滴」发射的愈疗晶球。", + "guide": null, + "link": "" + }, + "碍于归途艰险…": { + "book": "挑战者·第五辑", + "desc": "利用障碍物、击飞等方式,在不破坏「水滴」的情况下,阻止无相之水复苏。", + "guide": null, + "link": "" + }, + "破灭之时": { + "book": "挑战者·第五辑", + "desc": "在不利用「红莲蛾」的情况下,击败「女士」 。", + "guide": null, + "link": "" + }, + "逃逸电子": { + "book": "挑战者·第五辑", + "desc": "在不被追踪电笼击中的情况下,击败雷音权现。", + "guide": null, + "link": "" + }, + "无线电静默": { + "book": "挑战者·第五辑", + "desc": "在攻击雷音权现之前,被它的侦测锁定。", + "guide": null, + "link": "" + }, + "禁止游泳": { + "book": "挑战者·第五辑", + "desc": "在深海龙蜥之群挑战中,在深海龙蜥未入水的情况下击败它们。", + "guide": null, + "link": "" + }, + "不坏之金刚": { + "book": "挑战者·第五辑", + "desc": "在一次祸津御建鸣神命挑战中,躲过恶曜三钴在一轮中释放的所有金刚坏灭波。", + "guide": null, + "link": "" + }, + "自噬之蛇": { + "book": "挑战者·第五辑", + "desc": "在遗迹巨蛇汲取能量时,通过破坏「淤泥涌口」,使其瘫痪。", + "guide": null, + "link": "" + }, + "末路狂花": { + "book": "挑战者·第六辑", + "desc": "掣电树放射集束电光时,通过攻击其花冠,使之瘫痪。", + "guide": "8个挑战相关 *视频地址:BV1qe4y1H742", + "link": "https://www.bilibili.com/video/BV1qe4y1H742/?spm_id_from=333.999.0.0" + }, + "彼竭我盈故克之": { + "book": "挑战者·第六辑", + "desc": "击败活化状态结束后,正处于力竭状态下的翠翎恐蕈。", + "guide": null, + "link": "" + }, + "清晨的焦枯蕈兽的气味": { + "book": "挑战者·第六辑", + "desc": "一次挑战中,击败6个翠翎恐蕈因陷入燃烧状态而产生的蕈兽。", + "guide": null, + "link": "" + }, + "龙兽射落之日": { + "book": "挑战者·第六辑", + "desc": "一次挑战中,通过攻击双翼上的核心,使兆载永劫龙兽坠落。", + "guide": null, + "link": "" + }, + "头盖骨胜负": { + "book": "挑战者·第六辑", + "desc": "一次挑战中,通过攻击头部的核心,中断兆载永劫龙兽的能量洪流。", + "guide": null, + "link": "" + }, + "抗性,有用吗?": { + "book": "挑战者·第六辑", + "desc": "击败提升过至少两种不同元素抗性的兆载永劫龙兽。", + "guide": null, + "link": "" + }, + "电子脑硬化症": { + "book": "挑战者·第六辑", + "desc": "击败处于超频过载状态下的半永恒统辖矩阵。", + "guide": null, + "link": "" + }, + "黛西,黛西": { + "book": "挑战者·第六辑", + "desc": "通过原激化、超激化或蔓激化反应命中半永恒统辖矩阵核心,破除其不可视状态。", + "guide": null, + "link": "" + }, + "深邃的探究者": { + "book": "秘境与深境螺旋·第一辑", + "desc": "深境螺旋:通过12层。", + "guide": "通过即可不需要满星", + "link": "" + }, + "来自深境": { + "book": "秘境与深境螺旋·第一辑", + "desc": "深境螺旋:在没有受到伤害的情况下完成第8层第3间。", + "guide": "可以带盾", + "link": "" + }, + "My Precious": { + "book": "秘境与深境螺旋·第一辑", + "desc": "深境螺旋:在地脉镇石完好的情况下完成第2层第2间。", + "guide": "*地面有水,推荐带冰,控制所有怪逐一击破即可", + "link": "" + }, + "渊星斗士": { + "book": "秘境与深境螺旋·第一辑", + "desc": "深境螺旋:取得「深境回廊」的所有渊星。", + "guide": "原神 1.0 时期曾用名《星尘斗士》", + "link": "" + }, + "…Odomu?": { + "book": "Olah!第一辑", + "desc": "在「语言交流」中与丘丘人交流成功。", + "guide": "《语言交流》:注意 1、不要攻击附近的丘丘人;2、注意雷雨天小心落雷击中丘丘人导致任务失败", + "link": "" + }, + "Yo dala?": { + "book": "Olah!第一辑", + "desc": "在「诗歌交流」中与丘丘人交流成功。", + "guide": "《诗歌交流》:选择这 3 项即可【Celi dada,mimi nunu!】、【Ye dada!】、【Muhe ye!】其余同上", + "link": "" + }, + "追求极致": { + "book": "至冬国不相信眼泪·第一辑", + "desc": "在「说到做到!」中完美完成查耶维奇的所有委托。", + "guide": "《说到做到!》至少 3 次“完美”且不重复地完成委托才能拿到成就。\n山顶(按照顺序击杀:火斧、木盾、丘丘人萨满);山腰(不能损坏货物,可以拉怪出来);\n山底(需要 1 分钟内完成,跑图时间也算,可以提前放个口袋锚点,打怪前保留角色大招)\n*详解地址", + "link": "https://www.bilibili.com/video/BV1m64y1y7rk?" + }, + "有一说一": { + "book": "至冬国不相信眼泪·第一辑", + "desc": "在「来自冬天的故事」中探听到所有关于至冬国的情报。", + "guide": "《来自冬天的故事》:愚人众、邪眼、女皇陛下,三个选项各选 1 次,也就是至少要做 3 次\n*2.4新增后续维克托回至冬(向冬日回归)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Xt4y1z7qw?spm_id_from=333.999.0.0" + }, + "帝君故事": { + "book": "岩港往事·第一辑", + "desc": "搜集到「岩游记」中所有有关岩王帝君的故事。", + "guide": "《岩游记》需要做 4 次,给 4 次不同的道具:财神(必须是琉璃百合);开拓之神(野外采集物:琉璃袋 清心 绝云辣椒 霓裳花等);炉灶之神(各类矿石:夜泊石 铁矿 石珀 等等);历史之神(璃月菜品:翡翠什锦袋 水煮黑背鲈 等等)。\n*当“财神”和“历史之神”共同存在任务道具会被回收,当“炉灶之神”和“开拓之神”共同存在任务道具会被回收,注意记录。\n*视频地址及道具回收演示", + "link": "https://www.bilibili.com/video/BV1s64y1m718?p=1" + }, + "旅者且留步…": { + "book": "岩港往事·第一辑", + "desc": "在「且听下回分解」中听完《裁雨声》。", + "guide": "《且听下回分解》每次任务只能找 2 个人\n找哪两个 NPC 是你接到任务后就决定了的,你无法更改,即便你自己手动找到了系统没有分配给你的那个人,你也无法和他对话\n范二爷给《海山履云记》,茂才公给《裁雨声·上》(但刷到他的概率比较低,刷不到也没办法);\n江舟给《裁雨声·中》,暂无《裁雨声》下(有上和中就可以拿到成就)\n最后给茶博士刘苏交付任务道具的时候只能交 1 个(所以拿完成就至少要做 3 次这个任务),交《海山履云记》能拿到成就《且听我一言。》\n交《裁雨声·上》和《裁雨声·中》后得到成就《旅者且留步…》\n*视频地址", + "link": "https://www.bilibili.com/video/BV18U4y1j7mo?spm_id_from=333.999.0.0" + }, + "且听我一言。": { + "book": "岩港往事·第一辑", + "desc": "在「且听下回分解」中听完《海山履云记》。", + "guide": null, + "link": "" + }, + "「来坦,来补,来输出」": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同完成100次秘境挑战。", + "guide": null, + "link": "" + }, + "「我来,我见,我征服」": { + "book": "异世相逢·第一辑", + "desc": "在其他玩家的世界中,采集50个地区特产。", + "guide": null, + "link": "" + }, + "「你家风晶蝶还蛮大的」": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同战胜无相之风。", + "guide": null, + "link": "" + }, + "「…微笑就可以了。」": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同战胜无相之雷。", + "guide": null, + "link": "" + }, + "「原来那个柱子能打啊」": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同战胜无相之岩。", + "guide": null, + "link": "" + }, + "「急冻树、青空、南风」": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同战胜急冻树。", + "guide": null, + "link": "" + }, + "「This is fine」": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同战胜爆炎树。", + "guide": null, + "link": "" + }, + "一条名叫洛蒂娅的鱼": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同战胜纯水精灵。", + "guide": "可能有的人不知道就说一下,轻策庄的纯水精灵的名字叫洛蒂娅\n它?曾经是枫丹最强的战士,后来枫丹内乱背井离乡来到了轻策庄", + "link": "" + }, + "狼族盟约": { + "book": "异世相逢·第一辑", + "desc": "与其他玩家一同战胜奔狼领的王者。", + "guide": null, + "link": "" + }, + "邪眼的性能不是战力差距的决定因素": { + "book": "异世相逢·第二辑", + "desc": "与其他玩家一同战胜「公子」。", + "guide": "2.0 测试服期间这个成就名是《这个公子就是逊啦》,neta《如果早知道男生也会被性侵》台词:“这个彬彬就是逊啦”", + "link": "" + }, + "「山动了」": { + "book": "异世相逢·第二辑", + "desc": "与其他玩家一同战胜古岩龙蜥。", + "guide": null, + "link": "" + }, + "往日重现": { + "book": "异世相逢·第二辑", + "desc": "与其他玩家一同战胜若陀龙王。", + "guide": null, + "link": "" + }, + "未来解冻计划": { + "book": "异世相逢·第二辑", + "desc": "与其他玩家一同战胜无相之冰。", + "guide": null, + "link": "" + }, + "一线断时…": { + "book": "异世相逢·第二辑", + "desc": "与其他玩家一同战胜魔偶剑鬼。", + "guide": null, + "link": "" + }, + "篝火大作战": { + "book": "异世相逢·第二辑", + "desc": "与其他玩家一同战胜无相之火。", + "guide": null, + "link": "" + }, + "「机关阵列没有永恒」": { + "book": "异世相逢·第二辑", + "desc": "与其他玩家一同战胜恒常机关阵列。", + "guide": null, + "link": "" + }, + "心有灵犀一电通": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜雷音权现。", + "guide": null, + "link": "" + }, + "基本上都是水": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜无相之水。", + "guide": null, + "link": "" + }, + "越过冰霜与烈焰": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜「女士」。", + "guide": null, + "link": "" + }, + "暗夜呢喃": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜黄金王兽。", + "guide": null, + "link": "" + }, + "总有地上的生灵…": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜雷电将军。", + "guide": null, + "link": "" + }, + "超古代文明遗产": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜遗迹巨蛇。", + "guide": null, + "link": "" + }, + "半素食主义": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜翠翎恐蕈。", + "guide": null, + "link": "" + }, + "谨防触电": { + "book": "异世相逢·第三辑", + "desc": "与其他玩家一同战胜掣电树。", + "guide": null, + "link": "" + }, + "大地勘探·龙脊雪山": { + "book": "雪山上的来客", + "desc": "点亮龙脊雪山的地图。", + "guide": null, + "link": "" + }, + "冰峰踏破": { + "book": "雪山上的来客", + "desc": "解锁龙脊雪山的所有传送锚点。", + "guide": null, + "link": "" + }, + "踏雪引路人": { + "book": "雪山上的来客", + "desc": "在龙脊雪山追随20个温暖仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "雪山的寻宝者": { + "book": "雪山上的来客", + "desc": "在龙脊雪山开启160个宝箱。", + "guide": null, + "link": "" + }, + "赤红的新芽": { + "book": "雪山上的来客", + "desc": "将忍冬之树供奉至12级。", + "guide": null, + "link": "" + }, + "寒天之钉": { + "book": "雪山上的来客", + "desc": "将「奇怪的大柱子」升起。", + "guide": null, + "link": "" + }, + "龙与枪": { + "book": "雪山上的来客", + "desc": "利用「龙」的遗骸,制造武器。", + "guide": "《腐殖之牙》", + "link": "" + }, + "洞天无别景…": { + "book": "世外洞天·第一辑", + "desc": "使用「尘歌壶」进入「洞天」。", + "guide": null, + "link": "" + }, + "前方高仙力反应": { + "book": "世外洞天·第一辑", + "desc": "3个洞天形态的洞天仙力达到20000。", + "guide": "~", + "link": "" + }, + "壶中密友": { + "book": "世外洞天·第一辑", + "desc": "与壶灵的信任等阶达到10级。", + "guide": "最快,一月内可以完成", + "link": "" + }, + "伐伐伐伐木工": { + "book": "世外洞天·第一辑", + "desc": "获得2000份木材。", + "guide": "狂肝,半天内可以完成", + "link": "" + }, + "宝钱大亨": { + "book": "世外洞天·第一辑", + "desc": "获得50000份洞天宝钱。", + "guide": "正常肝累积的话,2个月完成", + "link": "" + }, + "不止是个小板凳": { + "book": "世外洞天·第一辑", + "desc": "制作600个摆设。", + "guide": "正常肝累积的话,2个月完成(仙速瓶直接用,最多只能存99个,多的不能再买了)", + "link": "" + }, + "来点颜色瞧瞧?": { + "book": "世外洞天·第一辑", + "desc": "制作600份染料。", + "guide": null, + "link": "" + }, + "标准图样": { + "book": "世外洞天·第一辑", + "desc": "习得180份摆设图纸。", + "guide": null, + "link": "" + }, + "我的…地盘": { + "book": "世外洞天·第一辑", + "desc": "在一个洞天形态中,同时放置300个摆设。", + "guide": null, + "link": "" + }, + "壶中贵客": { + "book": "世外洞天·第二辑", + "desc": "邀请同伴入驻「尘歌壶」。", + "guide": "1.6版本全15个成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1T5411u7HF?spm_id_from=333.999.0.0" + }, + "围炉夜谈": { + "book": "世外洞天·第二辑", + "desc": "解锁30段同伴互动对话。", + "guide": null, + "link": "" + }, + "决胜的礼物!": { + "book": "世外洞天·第二辑", + "desc": "获得20份同伴赠礼。", + "guide": "每个角色可以获得两份赠礼(不同套装给不同的赠礼)", + "link": "" + }, + "传送空间棋盘": { + "book": "世外洞天·第三辑", + "desc": "在「尘歌壶」内首次设置「洞天锚点」。", + "guide": null, + "link": "" + }, + "我们需要更多作物!": { + "book": "世外洞天·第三辑", + "desc": "在「贵本之道-『玄此玉田』」中收获800个采集物。", + "guide": null, + "link": "" + }, + "花开之洞天": { + "book": "世外洞天·第三辑", + "desc": "在「贵本之道-『薿此芝田』」中收获800个采集物。", + "guide": null, + "link": "" + }, + "采集时间到!": { + "book": "世外洞天·第三辑", + "desc": "在「贵本之道-『楚此渚田』」中收获800个采集物。", + "guide": null, + "link": "" + }, + "大地勘探·雷光所照之土·其一": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "点亮稻妻区域中,鸣神岛、神无冢与八酝岛的地图。", + "guide": null, + "link": "" + }, + "跨越雷鸣的大地·其一": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "解锁稻妻区域中,鸣神岛、神无冢与八酝岛所有传送锚点。", + "guide": null, + "link": "" + }, + "圣龛巡礼·稻妻天领·其一": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "解除稻妻区域中,鸣神岛、神无冢与八酝岛所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "隽永如电": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "将稻妻的七天神像供奉至满级。", + "guide": null, + "link": "" + }, + "神篱凭代": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "将「神樱眷顾」等级提升至满级。", + "guide": null, + "link": "" + }, + "鸣草丛中的捕手·其一": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "在稻妻的鸣神岛、神无冢与八酝岛,追上40个雷灵。", + "guide": null, + "link": "" + }, + "烁光引路人·其一": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "在稻妻区域的鸣神岛、神无冢与八酝岛追随16个仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "循雷的寻宝者·其一": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "在稻妻区域的鸣神岛、神无冢与八酝岛开启300个宝箱。", + "guide": null, + "link": "" + }, + "异人祓行芝居": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "完成「神樱大祓」。", + "guide": null, + "link": "" + }, + "踏鞴物语": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "解除「御影炉心」的危机。", + "guide": null, + "link": "" + }, + "遗怨的回音": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "完成了「远吕羽氏遗事」系列任务。", + "guide": null, + "link": "" + }, + "循雷的冒险家·其一": { + "book": "稻妻·雷与永恒的群岛·其之一", + "desc": "在稻妻区域的鸣神岛、神无冢与八酝岛,完成24个大世界机关限时挑战。", + "guide": null, + "link": "" + }, + "大地勘探·雷光所照之土·其二": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "点亮稻妻区域中,海祇岛与清籁岛的地图。", + "guide": null, + "link": "" + }, + "跨越雷鸣的大地·其二": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "解锁稻妻区域中,海祇岛与清籁岛所有的传送锚点。", + "guide": null, + "link": "" + }, + "圣龛巡礼·稻妻天领·其二": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "解锁稻妻区域中,海祇岛与清籁岛所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "鸣草丛中的捕手·其二": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "在稻妻的海祇岛与清籁岛追上16个雷灵。", + "guide": null, + "link": "" + }, + "烁光引路人·其二": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "在稻妻的海祇岛与清籁岛追随6个仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "循雷的寻宝者·其二": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "在稻妻的海祇岛与清籁岛开启160个宝箱。", + "guide": null, + "link": "" + }, + "清籁逐雷记": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "完成「清籁逐雷记」。", + "guide": null, + "link": "" + }, + "一样的月光": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "完成「月浴之渊」。", + "guide": null, + "link": "" + }, + "循雷的冒险家·其二": { + "book": "稻妻·雷与永恒的群岛·其之二", + "desc": "在海祇岛与清籁岛完成24个大世界机关限时挑战。", + "guide": null, + "link": "" + }, + "大地勘探·鹤观": { + "book": "雾海纪行", + "desc": "点亮鹤观的地图。", + "guide": null, + "link": "" + }, + "雾海尽头": { + "book": "雾海纪行", + "desc": "解锁鹤观所有的传送锚点。", + "guide": null, + "link": "" + }, + "圣龛巡礼·鹤观": { + "book": "雾海纪行", + "desc": "解锁鹤观所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "雾夜的灼灼电影": { + "book": "雾海纪行", + "desc": "在鹤观追上6个雷灵。", + "guide": null, + "link": "" + }, + "深雾引路人": { + "book": "雾海纪行", + "desc": "在鹤观追随6个仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "迷失的寻宝者": { + "book": "雾海纪行", + "desc": "在鹤观开启120个宝箱。", + "guide": null, + "link": "" + }, + "迷失的冒险家": { + "book": "雾海纪行", + "desc": "在鹤观完成12个大世界机关限时挑战。", + "guide": null, + "link": "" + }, + "雷与永远": { + "book": "雾海纪行", + "desc": "完成某位作家的取材委托。", + "guide": null, + "link": "" + }, + "稚子敲针作钓钩": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "首次成功钓鱼。", + "guide": null, + "link": "" + }, + "「恭喜这位,喜提鱼缸」": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "首次钓获观赏鱼。", + "guide": null, + "link": "" + }, + "被打碎的水中月亮": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "首次钓获只在夜间出没的鱼儿。", + "guide": null, + "link": "" + }, + "通通400铃": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "成功钓鱼2000次。", + "guide": "钓鱼双倍产出时 (如托马天赋) 成就数仍是 +1", + "link": "" + }, + "「叫我以实玛利。」": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "在其他玩家的世界中完成一次钓鱼。", + "guide": null, + "link": "" + }, + "渔民杀机": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "从钓鱼协会处购买一根鱼竿。", + "guide": null, + "link": "" + }, + "尽倾江海里": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "成功制作20次鱼饵。", + "guide": null, + "link": "" + }, + "正经的钓鱼学位": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "解锁20个鱼类图鉴。", + "guide": null, + "link": "" + }, + "中场": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "在稻妻,通过钓鱼钓到散落的书页。", + "guide": null, + "link": "" + }, + "张力稳定锚": { + "book": "提瓦特钓鱼指南·第一辑", + "desc": "鱼竿始终保持在最佳张力区的情况下成功钓鱼10次。", + "guide": null, + "link": "" + }, + "「…岂知夜色…」": { + "book": "白昼之光", + "desc": "点亮渊下宫的地图。", + "guide": null, + "link": "" + }, + "常世之大权": { + "book": "白昼之光", + "desc": "解锁渊下宫所有的传送锚点。", + "guide": "正常跟着引导任务走就能点亮地图", + "link": "" + }, + "福斯福洛斯的指引": { + "book": "白昼之光", + "desc": "在渊下宫追随30个仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "赫斯珀洛斯的好东西": { + "book": "白昼之光", + "desc": "在渊下宫开启160个宝箱。", + "guide": null, + "link": "" + }, + "卡伊洛斯的时时刻刻": { + "book": "白昼之光", + "desc": "在渊下宫完成12个大世界机关限时挑战。", + "guide": null, + "link": "" + }, + "火鼠裘、龙首珠、佛前钵和…": { + "book": "白昼之光", + "desc": "取得露子委托的珊瑚枝条。", + "guide": "世界任务《白夜国晨昏记:龙蛇洞宫试炼记》", + "link": "" + }, + "丹砂高为千岩镇": { + "book": "岩窟流明", + "desc": "点亮「层岩巨渊」地面区域的地图。", + "guide": null, + "link": "" + }, + "巨渊险过百牢关": { + "book": "岩窟流明", + "desc": "点亮「层岩巨渊·地下矿区」的地图。", + "guide": null, + "link": "" + }, + "自至深处": { + "book": "岩窟流明", + "desc": "解锁层岩巨渊和巨渊矿坑的所有传送锚点。", + "guide": null, + "link": "" + }, + "岩渊引路人": { + "book": "岩窟流明", + "desc": "在层岩巨渊追随24只仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "岩渊的寻宝者": { + "book": "岩窟流明", + "desc": "在层岩巨渊开启200个宝箱。", + "guide": null, + "link": "" + }, + "岩渊的冒险家": { + "book": "岩窟流明", + "desc": "在层岩巨渊完成12个大世界限时机关挑战。", + "guide": null, + "link": "" + }, + "烁然灼目": { + "book": "岩窟流明", + "desc": "将「流明石触媒」强化至最大等级。", + "guide": null, + "link": "" + }, + "「揭开封印之时…」": { + "book": "岩窟流明", + "desc": "解除进入矿坑前的阻碍。", + "guide": null, + "link": "" + }, + "半途的探索…": { + "book": "岩窟流明", + "desc": "完成总务司的勘探委托。", + "guide": null, + "link": "" + }, + "大地勘探·须弥林海": { + "book": "须弥·玄识深藏的雨林", + "desc": "点亮须弥区域中,道成林、护世森、阿陀河谷、善见地、二净甸、失落的苗圃、桓那兰那的地图。", + "guide": "正常探索", + "link": "" + }, + "漫卷琼林": { + "book": "须弥·玄识深藏的雨林", + "desc": "解锁须弥区域中,道成林、护世森、阿陀河谷、善见地、二净甸、失落的苗圃、桓那兰那所有传送锚点。", + "guide": null, + "link": "" + }, + "圣龛巡礼·须弥林海": { + "book": "须弥·玄识深藏的雨林", + "desc": "解除须弥区域中,道成林、护世森、阿陀河谷、善见地、二净甸、失落的苗圃、桓那兰那所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "如草芳绚": { + "book": "须弥·玄识深藏的雨林", + "desc": "将须弥的七天神像供奉至满级。", + "guide": "目前 3.2 版本无法完成", + "link": "" + }, + "大梦的锚点": { + "book": "须弥·玄识深藏的雨林", + "desc": "将桓那兰那的梦之树等级提升至满级。", + "guide": "目前 3.2 版本无法完成", + "link": "" + }, + "林薮引路人": { + "book": "须弥·玄识深藏的雨林", + "desc": "在道成林、护世森、阿陀河谷、善见地、二净甸、失落的苗圃、桓那兰那追随40个仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "瑶林的寻宝者": { + "book": "须弥·玄识深藏的雨林", + "desc": "在道成林、护世森、阿陀河谷、善见地、二净甸、失落的苗圃、桓那兰那开启400个宝箱。", + "guide": null, + "link": "" + }, + "瑶林的冒险家": { + "book": "须弥·玄识深藏的雨林", + "desc": "在道成林、护世森、阿陀河谷、善见地、二净甸、失落的苗圃、桓那兰那完成40个大世界机关限时挑战。", + "guide": null, + "link": "" + }, + "森林会记住一切": { + "book": "须弥·玄识深藏的雨林", + "desc": "完成「森林书」。", + "guide": null, + "link": "" + }, + "大地勘探·沙海热梦·其一": { + "book": "须弥·饰金砂原·其之一", + "desc": "点亮须弥区域中,列柱沙原 、上风蚀地、下风蚀地的地图。", + "guide": null, + "link": "" + }, + "越过沙暴与蜃气楼·其一": { + "book": "须弥·饰金砂原·其之一", + "desc": "解锁须弥区域中,列柱沙原 、上风蚀地、下风蚀地所有传送锚点。", + "guide": null, + "link": "" + }, + "圣龛巡礼·沙海热梦·其一": { + "book": "须弥·饰金砂原·其之一", + "desc": "解除须弥区域中,列柱沙原 、上风蚀地、下风蚀地所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "大漠引路人·其一": { + "book": "须弥·饰金砂原·其之一", + "desc": "在列柱沙原 、上风蚀地、下风蚀地追随40个仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "流沙的寻宝者·其一": { + "book": "须弥·饰金砂原·其之一", + "desc": "在列柱沙原 、上风蚀地、下风蚀地开启240个宝箱。", + "guide": null, + "link": "" + }, + "流沙的冒险家·其一": { + "book": "须弥·饰金砂原·其之一", + "desc": "在列柱沙原 、上风蚀地、下风蚀地完成40个大世界机关限时挑战。", + "guide": null, + "link": "" + }, + "…与睡梦同姓": { + "book": "须弥·饰金砂原·其之一", + "desc": "完成「黄金梦乡」。", + "guide": null, + "link": "" + }, + "天地万象": { + "book": "√", + "desc": "虚空鼓动,劫火高扬", + "guide": 10.0, + "link": "" + }, + "胜负师放浪记": { + "book": "七圣召唤", + "desc": "将牌手等级提升至10级。", + "guide": null, + "link": "" + }, + "色彩缤纷的答复": { + "book": "七圣召唤", + "desc": "在获胜的牌局中,我方一共造成300次元素反应。", + "guide": null, + "link": "" + }, + "胜利的拼图已在手中": { + "book": "七圣召唤", + "desc": "在获胜的牌局中,累计打出600张行动牌。", + "guide": null, + "link": "" + }, + "「那么,来吧,搭档…」": { + "book": "七圣召唤", + "desc": "在获胜的牌局中,累计召唤200次召唤物。", + "guide": null, + "link": "" + }, + "进攻,进攻,再进攻!": { + "book": "七圣召唤", + "desc": "使用过3次以上元素爆发并获得胜利的对局数目达到10场。", + "guide": null, + "link": "" + }, + "已如风中残烛?": { + "book": "七圣召唤", + "desc": "在获胜的牌局中,使用护盾或治疗效果累计为自身抵挡伤害或恢复生命300点。", + "guide": null, + "link": "" + }, + "一撕两半混沌球": { + "book": "七圣召唤", + "desc": "在获胜的牌局中,单次行动击败2名或2名以上对手角色牌的次数累计达到10次。", + "guide": null, + "link": "" + }, + "高倍率牌手传说": { + "book": "七圣召唤", + "desc": "累计获得150000幸运牌币。", + "guide": null, + "link": "" + }, + "微缩型骰子壶": { + "book": "七圣召唤", + "desc": "在获胜的牌局中,累计造成10次8点以上的单次行动伤害。", + "guide": null, + "link": "" + }, + "踏鞴之谜": { + "book": "天地万象", + "desc": "在世界树内部查看有关踏鞴砂往事的回忆。", + "guide": null, + "link": "" + }, + "历史的涟漪": { + "book": "天地万象", + "desc": "确认散兵进入世界树内部引发的种种后果。", + "guide": null, + "link": "" + }, + "经变·狐猫鸟与怪": { + "book": "天地万象", + "desc": "解开纳西妲藏起的谜题,得知散兵过去的经历。", + "guide": null, + "link": "" + }, + "如我是我非我相": { + "book": "天地万象", + "desc": "击败回忆中的七叶寂照秘密主。", + "guide": null, + "link": "" + }, + "倾落伽蓝": { + "book": "天地万象", + "desc": "完成「倾落伽蓝」。", + "guide": null, + "link": "" + }, + "四方求剑": { + "book": "天地万象", + "desc": "见证岚姐与「藏锋」的故事。", + "guide": "在3.3版本之前做过的藏锋是遗迹猎者的话,3.3版本后就可以直接刷到藏锋后续。\n后续在第一段就可以找到剑柄获得隐藏成就:四方求剑。剧情还有后续,推测2年后再出后续……\nPS:前置3次循环是2次丘丘人+1次遗迹留着\n视频地址:BV1oG4y127Yj\n", + "link": "https://www.bilibili.com/video/BV1oG4y127Yj/?spm_id_from=333.999.0.0" + }, + "行万里路…?": { + "book": "天地万象", + "desc": "见证孙宇的故事。", + "guide": "还在开荒,估计和珊瑚侦探一样长", + "link": "" + }, + "越过沙暴与蜃气楼·其二": { + "book": "须弥·饰金砂原·其之二", + "desc": "解锁须弥区域中,千壑沙地所有传送锚点。", + "guide": null, + "link": "" + }, + "圣龛巡礼·沙海热梦·其二": { + "book": "须弥·饰金砂原·其之二", + "desc": "解除须弥区域中,千壑沙地所有地灵龛的封印。", + "guide": null, + "link": "" + }, + "比勒琪丝的哀歌": { + "book": "须弥·饰金砂原·其之二", + "desc": "完成「比勒琪丝的哀歌」。", + "guide": "0剧情必得", + "link": "" + }, + "大漠引路人·其二": { + "book": "须弥·饰金砂原·其之二", + "desc": "在千壑沙地追随16个仙灵,并点亮仙灵之庭。", + "guide": null, + "link": "" + }, + "流沙的寻宝者·其二": { + "book": "须弥·饰金砂原·其之二", + "desc": "在千壑沙地开启200个宝箱。", + "guide": null, + "link": "" + }, + "流沙的冒险家·其二": { + "book": "须弥·饰金砂原·其之二", + "desc": "在千壑沙地完成28个大世界机关限时挑战。", + "guide": null, + "link": "" + }, + "「假若她们能知幽玄…」": { + "book": "天地万象", + "desc": "利露帕尔自行解脱了与你的契约,选择面对自己漆黑深远的命运…", + "guide": "视频地址:BV1CK411k7oo", + "link": "https://www.bilibili.com/video/BV1CK411k7oo/?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "「那只是永恒的奴役而已!」": { + "book": "天地万象", + "desc": "沉睡千百年的镇灵利露帕尔与你订立了契约。", + "guide": "0剧情必得", + "link": "" + }, + "无名之城的过往": { + "book": "天地万象", + "desc": "居尔城神殿的壁画,讲述着一度辉煌的过往…", + "guide": "视频地址:BV1os4y1x7TC", + "link": "https://www.bilibili.com/video/BV1os4y1x7TC/?spm_id_from=333.999.0.0" + }, + "宁静无梦的乐园": { + "book": "天地万象", + "desc": "此处是花神的陵寝,是神明无梦的长眠…", + "guide": "0剧情必得", + "link": "" + }, + "「…她必施行报应。」": { + "book": "天地万象", + "desc": "当复仇者施展义怒,施行不义之人何曾预见过这一天呢?", + "guide": "3.4下半版本开启", + "link": "" + }, + "被染红的月亮": { + "book": "天地万象", + "desc": "这片广阔的棋盘,曾在血红的月亮之下推演何种暴行?", + "guide": "视频地址:BV1W8411w75c", + "link": "https://www.bilibili.com/video/BV1W8411w75c/?spm_id_from=333.999.0.0" + }, + "横冲直撞": { + "book": "天地万象", + "desc": "盲目的沙虫在沙面猪突猛进,偶尔也会带来意外收获。", + "guide": "视频地址:BV16T411175Q", + "link": "https://www.bilibili.com/video/BV16T411175Q/?spm_id_from=333.999.0.0" + }, + "「我也讨厌沙虫!」": { + "book": "天地万象", + "desc": "第一次遭受沙虫的袭击。", + "guide": "视频地址:BV16T411175Q", + "link": "https://www.bilibili.com/video/BV16T411175Q/?spm_id_from=333.999.0.0" + }, + "分歧的原点": { + "book": "天地万象", + "desc": "知悉镀金旅团派往居尔城的调查队覆灭的真相。", + "guide": "视频地址:BV193411d73o", + "link": "https://www.bilibili.com/video/BV193411d73o/?spm_id_from=333.999.0.0" + }, + "甚至不需要操作手册…": { + "book": "天地万象", + "desc": "让奔奔恢复以往的活力。", + "guide": "视频地址:BV1BY4y1Z79m", + "link": "https://www.bilibili.com/video/BV1BY4y1Z79m/?spm_id_from=333.788&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "猎人的仁慈": { + "book": "天地万象", + "desc": "让「猎鹰」塔德菈选择她的命运…", + "guide": "视频地址:BV15Y411X7H5", + "link": "https://www.bilibili.com/video/BV15Y411X7H5/?spm_id_from=333.999.0.0" + }, + "飞毯之旅": { + "book": "天地万象", + "desc": "看看这整个新世界,多令人眩晕的地方!", + "guide": "视频地址:BV16P4y167XK", + "link": "https://www.bilibili.com/video/BV16P4y167XK/?spm_id_from=333.999.0.0" + }, + "「生命,很神奇吧?」": { + "book": "天地万象", + "desc": "沙虫的行宫错综复杂,生命总能开辟出意想不到的通路…", + "guide": "视频地址:BV1WT41117R8\n有点阴间", + "link": "https://www.bilibili.com/video/BV1WT41117R8/?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "旧日的园圃与源泉": { + "book": "天地万象", + "desc": "旧日澧泉不竭的阶池,如今已被黄沙填满…", + "guide": "视频地址:BV1FY411X7Ru", + "link": "https://www.bilibili.com/video/BV1FY411X7Ru/?spm_id_from=333.999.0.0" + }, + "她的黄金时代…": { + "book": "天地万象", + "desc": "紫红色的帕蒂莎兰盛开在空空的王座上,仿佛女主人永恒的笑容…", + "guide": "视频地址:BV19D4y1J7Me", + "link": "https://www.bilibili.com/video/BV19D4y1J7Me/?spm_id_from=333.788&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "「…使列邦观看你的丑陋。」": { + "book": "天地万象", + "desc": "使残损的棋盘重现黄沙之间。", + "guide": "0剧情必得", + "link": "" + }, + "来自泥土,归于黄沙…": { + "book": "天地万象", + "desc": "正如沙漠中的一切生命那般…", + "guide": "0剧情必得", + "link": "" + }, + "完美沙暴": { + "book": "天地万象", + "desc": "「让我们直冲气象地狱。」", + "guide": "视频地址:BV1WT41117R8", + "link": "https://www.bilibili.com/video/BV1WT41117R8/?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "无爱的塔兰图拉": { + "book": "天地万象", + "desc": "「我非要把你煮成润滑油不可!」", + "guide": "0剧情必得", + "link": "" + }, + "帕维兹拉万·赫瓦拉": { + "book": "天地万象", + "desc": "让千壑沙地所有的元能尖碑重新运转。", + "guide": null, + "link": "" + }, + "漫长的盟约": { + "book": "天地万象", + "desc": "尽管命运已各自破碎,盟约依旧在沉眠中存续…", + "guide": "视频地址:BV1GG4y1F72L\n成就很美★为数不多的组队成就", + "link": "https://www.bilibili.com/video/BV1GG4y1F72L/?spm_id_from=333.999.0.0&vd_source=08eba74dd47ebbfed5144f98f5a58b92" + }, + "控制了香料的人…": { + "book": "天地万象", + "desc": "通过使风蚀弹发生扩散反应,击落浮游状态的风蚀沙虫。", + "guide": "视频地址:BV16T411175Q", + "link": "https://www.bilibili.com/video/BV16T411175Q/?spm_id_from=333.999.0.0" + } +} diff --git a/GenshinUID/genshinuid_achievement/daily_achi.json b/GenshinUID/genshinuid_achievement/daily_achi.json new file mode 100644 index 00000000..ccf7acb8 --- /dev/null +++ b/GenshinUID/genshinuid_achievement/daily_achi.json @@ -0,0 +1,542 @@ +{ + "语言交流": { + "achievement": "…Odomu?", + "desc": "在「语言交流」中与丘丘人交流成功。", + "guide": "《语言交流》:注意 1、不要攻击附近的丘丘人;2、注意雷雨天小心落雷击中丘丘人导致任务失败", + "link": "" + }, + "诗歌交流": { + "achievement": "Yo dala?", + "desc": "在「诗歌交流」中与丘丘人交流成功。", + "guide": "《诗歌交流》:选择这 3 项即可【Celi dada,mimi nunu!】、【Ye dada!】、【Muhe ye!】其余同上", + "link": "" + }, + "来自冬天的故事": { + "achievement": "有一说一", + "desc": "在「来自冬天的故事」中探听到所有关于至冬国的情报。", + "guide": "《来自冬天的故事》:愚人众、邪眼、女皇陛下,三个选项各选 1 次,也就是至少要做 3 次\n*2.4新增后续维克托回至冬(向冬日回归)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Xt4y1z7qw?spm_id_from=333.999.0.0" + }, + "说到做到": { + "achievement": "追求极致", + "desc": "在「说到做到!」中完美完成查耶维奇的所有委托。", + "guide": "《说到做到!》至少 3 次“完美”且不重复地完成委托才能拿到成就。\n山顶(按照顺序击杀:火斧、木盾、丘丘人萨满);山腰(不能损坏货物,可以拉怪出来);\n山底(需要 1 分钟内完成,跑图时间也算,可以提前放个口袋锚点,打怪前保留角色大招)\n*详解地址", + "link": "https://www.bilibili.com/video/BV1m64y1y7rk?" + }, + "岩游记": { + "achievement": "帝君故事", + "desc": "搜集到「岩游记」中所有有关岩王帝君的故事。", + "guide": "《岩游记》需要做 4 次,给 4 次不同的道具:财神(必须是琉璃百合);开拓之神(野外采集物:琉璃袋 清心 绝云辣椒 霓裳花等);炉灶之神(各类矿石:夜泊石 铁矿 石珀 等等);历史之神(璃月菜品:翡翠什锦袋 水煮黑背鲈 等等)。\n*当“财神”和“历史之神”共同存在任务道具会被回收,当“炉灶之神”和“开拓之神”共同存在任务道具会被回收,注意记录。\n*视频地址及道具回收演示", + "link": "https://www.bilibili.com/video/BV1s64y1m718?p=1" + }, + "且听下回分解": { + "achievement": "且听我一言。", + "desc": "在「且听下回分解」中听完《海山履云记》。", + "guide": null, + "link": "" + }, + "璃月港,有海盗!": { + "achievement": "哎呀!海盗!", + "desc": "陪璐璐、阿飞与小蒙各玩一次海盗游戏。", + "guide": "《璃月港,有海盗!》;1.5 版本更新后在这三人附近挂机很容易刷到;2.4后又新增后续\n*视频地址", + "link": "https://www.bilibili.com/video/BV1q44y1N7Dn?spm_id_from=333.999.0.0" + }, + "好兆头": { + "achievement": "「…而尽人事。」", + "desc": "破坏了四种爱情运来临的征兆。", + "guide": "在《好兆头》中捕鱼、风吹或者火烧落叶、杀鸽子、看到狗要赶走。人为干涉所有的征兆。\n*视频地址", + "link": "https://www.bilibili.com/video/BV11r4y127Rw?spm_id_from=333.999.0.0" + }, + "愿风带走思念": { + "achievement": "过量的思念", + "desc": "完成五次「愿风带走思念」。", + "guide": "《愿风带走思念》做 5 次。1.0版本(2020年11月11日之前)有BUG会做1次=5次的情况,拿到成就后不会重置。如果进度不为5次会重置为0。从1.1后后重新计算。\n*视频地址", + "link": "https://www.bilibili.com/video/BV1xu41167hS?spm_id_from=333.999.0.0" + }, + "勿言勿笑": { + "achievement": "厨子与渔夫", + "desc": "完成「独钓江雪」与「勿言勿笑」。", + "guide": "正常完成 2 个任务即可", + "link": "" + }, + "独钓江雪": { + "achievement": "厨子与渔夫", + "desc": "完成「独钓江雪」与「勿言勿笑」。", + "guide": "正常完成 2 个任务即可", + "link": "" + }, + "望舒须筑阶": { + "achievement": "更上一层楼", + "desc": "帮助淮安修复望舒客栈的断桥。", + "guide": "正常完成《望舒须筑阶》2次任务即可", + "link": "" + }, + "鸽子、鸭子、小孩子": { + "achievement": "略表歉意", + "desc": "向提米道歉。", + "guide": "《鸽子、鸭子、小孩子》里投食鸭子后故意杀掉鸭子,第二天刷《提米,对不起》", + "link": "" + }, + "提米,对不起!": { + "achievement": "略表歉意", + "desc": "向提米道歉。", + "guide": "《鸽子、鸭子、小孩子》里投食鸭子后故意杀掉鸭子,第二天刷《提米,对不起》", + "link": "" + }, + "鸽子习惯一去不回": { + "achievement": "「您好,亲爱的爸爸…」", + "desc": "了解提米的故事。", + "guide": "水银的讲解视频点此;\n每日委托《鸽子习惯一去不回》有三个支线,第一种:正常赶走鸽子,做完没有后续;\n第二种:赶鸽子的时候玩家杀了鸽子,被杜拉夫要求让旅行者亲自去送信,做完后也没有后续;\n第三种:赶鸽子的时候发现任务提示点的地上一团金光,跑过去发现丘丘人把鸽子抓走烧了吃了,打死丘丘人完成任务,没有后续;\n第三种丘丘人支线又分成两种情况,一是地上有一封信,捡到信的话解锁后续每日委托《一个男孩的去信》,做完这个委托后可以拿到成就\n建议在另外一个每日委托《鸽子、鸭子、小孩子》里不要杀死提米要你喂的鸽子,这样更有可能进入掉信的支线\n至于提米那个略表歉意的成就可以在另外一次刷到鸽子鸭子小孩子以后再做", + "link": "https://www.bilibili.com/video/BV1xR4y1E7PR" + }, + "一个男孩的去信": { + "achievement": "「您好,亲爱的爸爸…」", + "desc": "了解提米的故事。", + "guide": "水银的讲解视频点此;\n每日委托《鸽子习惯一去不回》有三个支线,第一种:正常赶走鸽子,做完没有后续;\n第二种:赶鸽子的时候玩家杀了鸽子,被杜拉夫要求让旅行者亲自去送信,做完后也没有后续;\n第三种:赶鸽子的时候发现任务提示点的地上一团金光,跑过去发现丘丘人把鸽子抓走烧了吃了,打死丘丘人完成任务,没有后续;\n第三种丘丘人支线又分成两种情况,一是地上有一封信,捡到信的话解锁后续每日委托《一个男孩的去信》,做完这个委托后可以拿到成就\n建议在另外一个每日委托《鸽子、鸭子、小孩子》里不要杀死提米要你喂的鸽子,这样更有可能进入掉信的支线\n至于提米那个略表歉意的成就可以在另外一次刷到鸽子鸭子小孩子以后再做", + "link": "https://www.bilibili.com/video/BV1xR4y1E7PR" + }, + "奇药庐中来": { + "achievement": "妙手怪医", + "desc": "治好安娜的病。", + "guide": "《奇药庐中来》要做 3 次,之后解锁《大病初愈》后续任务;第一次做完《大病初愈》后给成就。\n成就拿完后《大病初愈》可能还会反复刷,安娜会出现在三个位置(风车顶上、教堂顶上、风神像手上)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Hw411Z7zp?spm_id_from=333.999.0.0" + }, + "大病初愈": { + "achievement": "妙手怪医", + "desc": "治好安娜的病。", + "guide": "《奇药庐中来》要做 3 次,之后解锁《大病初愈》后续任务;第一次做完《大病初愈》后给成就。\n成就拿完后《大病初愈》可能还会反复刷,安娜会出现在三个位置(风车顶上、教堂顶上、风神像手上)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Hw411Z7zp?spm_id_from=333.999.0.0" + }, + "餐品订单": { + "achievement": "这不是应急食品", + "desc": "在「餐品订单」任务中吃掉了餐品…?", + "guide": "成就是刷到任务以后吃掉任务菜品就可以拿,但是蟹黄火腿焗时蔬的食谱是不一定给的(送餐给活跃的欧琳的支线才会给,途中要打史莱姆)(触发哪条支线是随机的)", + "link": "" + }, + "惊喜大礼": { + "achievement": "西风佑我", + "desc": "见证吉丽安娜的故事。", + "guide": "《惊喜大礼》要做 4 次不同路线(莎拉店、纪念品店、坤恩水果摊、芙萝拉花店)\n最后触发最终剧情(此任务还有后续,盗宝团来复仇,触发“那位先生的委托”)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Ew411f74K?spm_id_from=333.999.0.0" + }, + "「冒险家」的能力极限": { + "achievement": "凑合…也能用", + "desc": "只带给赫尔曼木桩的材料。", + "guide": "《「冒险家」的能力极限》木桩一定要打坏带回", + "link": "" + }, + "冒险家测验·作战方式": { + "achievement": "安娜冒险记", + "desc": "帮助安娜成为一名冒险家。", + "guide": "《冒险家,安娜!》\n拿到成就的过程和给安娜治病差不多,且需要先给安娜治好病,也就是完成每日委托成就《妙手怪医》,之后完成前置任务:《冒险家测验·作战方式》、《冒险家测验·冒险诀窍》、《冒险家测验·起飞方式》,最后接到后续《冒险家,安娜!》,第一次完成任务后拿到成就\n(做完成就后还有后续支线,其中一条支线有“彩蛋”级内容,但没成就)\n*前置很阴间主要是情商选项,后续这4个也很阴间不按套路出牌\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Bu411r7Kb?spm_id_from=333.999.0.0" + }, + "冒险家测验·冒险诀窍": { + "achievement": "安娜冒险记", + "desc": "帮助安娜成为一名冒险家。", + "guide": "《冒险家,安娜!》\n拿到成就的过程和给安娜治病差不多,且需要先给安娜治好病,也就是完成每日委托成就《妙手怪医》,之后完成前置任务:《冒险家测验·作战方式》、《冒险家测验·冒险诀窍》、《冒险家测验·起飞方式》,最后接到后续《冒险家,安娜!》,第一次完成任务后拿到成就\n(做完成就后还有后续支线,其中一条支线有“彩蛋”级内容,但没成就)\n*前置很阴间主要是情商选项,后续这4个也很阴间不按套路出牌\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Bu411r7Kb?spm_id_from=333.999.0.0" + }, + "冒险家测验·起飞方式": { + "achievement": "安娜冒险记", + "desc": "帮助安娜成为一名冒险家。", + "guide": "《冒险家,安娜!》\n拿到成就的过程和给安娜治病差不多,且需要先给安娜治好病,也就是完成每日委托成就《妙手怪医》,之后完成前置任务:《冒险家测验·作战方式》、《冒险家测验·冒险诀窍》、《冒险家测验·起飞方式》,最后接到后续《冒险家,安娜!》,第一次完成任务后拿到成就\n(做完成就后还有后续支线,其中一条支线有“彩蛋”级内容,但没成就)\n*前置很阴间主要是情商选项,后续这4个也很阴间不按套路出牌\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Bu411r7Kb?spm_id_from=333.999.0.0" + }, + "冒险家,安娜!": { + "achievement": "安娜冒险记", + "desc": "帮助安娜成为一名冒险家。", + "guide": "《冒险家,安娜!》\n拿到成就的过程和给安娜治病差不多,且需要先给安娜治好病,也就是完成每日委托成就《妙手怪医》,之后完成前置任务:《冒险家测验·作战方式》、《冒险家测验·冒险诀窍》、《冒险家测验·起飞方式》,最后接到后续《冒险家,安娜!》,第一次完成任务后拿到成就\n(做完成就后还有后续支线,其中一条支线有“彩蛋”级内容,但没成就)\n*前置很阴间主要是情商选项,后续这4个也很阴间不按套路出牌\n*视频地址", + "link": "https://www.bilibili.com/video/BV1Bu411r7Kb?spm_id_from=333.999.0.0" + }, + "『遗落』的文物": { + "achievement": "学者与「学者」", + "desc": "完成「『遗落』的文物」与「『夺宝』小行动」。", + "guide": "《遗落的文物》至少要做 3 次,剧情进展到解救学者索拉雅以后有才有几率刷出《夺宝小行动》", + "link": "" + }, + "『夺宝』小行动": { + "achievement": "学者与「学者」", + "desc": "完成「『遗落』的文物」与「『夺宝』小行动」。", + "guide": "《遗落的文物》至少要做 3 次,剧情进展到解救学者索拉雅以后有才有几率刷出《夺宝小行动》", + "link": "" + }, + "港口驶过几艘船,二四六七八": { + "achievement": "梦想与工作,诗与面包", + "desc": "完成「所谓『工作』」,并获得霖铃的诗集。", + "guide": "完成《港口驶过几艘船,二四六七八》时故意告诉霖铃错误的数量(注意船有驶入和驶出的区别),大概率第二天刷《所谓工作》;如果第二天没刷,可能过一阵子才会刷", + "link": "" + }, + "所谓「工作」": { + "achievement": "梦想与工作,诗与面包", + "desc": "完成「所谓『工作』」,并获得霖铃的诗集。", + "guide": "完成《港口驶过几艘船,二四六七八》时故意告诉霖铃错误的数量(注意船有驶入和驶出的区别),大概率第二天刷《所谓工作》;如果第二天没刷,可能过一阵子才会刷", + "link": "" + }, + "点石成…什么": { + "achievement": "时也运也", + "desc": "一次就选中了最高价值的璞石。", + "guide": "《点石成…什么》:正确方法是选最亮的石头。\n不放心的话可以卡视角来透视璞石内部,有完整的石珀就可以选。\n注意并不是 100% 有石珀,纯随机,同理“餐品订单”任务\n外观最亮的,通过透视可以看到里面发光、纹路有完整条纹的即可。\n", + "link": "" + }, + "这本小说真厉害": { + "achievement": "这本小说真厉害!", + "desc": "偷看常九爷的书稿。", + "guide": "《这本小说真厉害!》,交书稿前派蒙会问你是否偷看,选择偷看即可", + "link": "" + }, + "久久望故人": { + "achievement": "故人久未归", + "desc": "完成「久久望故人」任务。", + "guide": "《久久望故人》:一定要先做过世界任务的小九九,否则可能做完没成就。\n*视频地址", + "link": "https://www.bilibili.com/video/BV11U4y137Tr?spm_id_from=333.999.0.0" + }, + "哎呀!海盗想长大!": { + "achievement": "远大前程", + "desc": "一位少年即将启程远行…", + "guide": "《小海盗,要出海!》\n前置《哎呀!海盗想长大!》、《随水而来的烦恼》\n后续《小小的远行》系列 3 个(没成就)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1q44y1N7Dn?spm_id_from=333.999.0.0" + }, + "随水而来的烦恼": { + "achievement": "远大前程", + "desc": "一位少年即将启程远行…", + "guide": "《小海盗,要出海!》\n前置《哎呀!海盗想长大!》、《随水而来的烦恼》\n后续《小小的远行》系列 3 个(没成就)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1q44y1N7Dn?spm_id_from=333.999.0.0" + }, + "小海盗,要出海!": { + "achievement": "远大前程", + "desc": "一位少年即将启程远行…", + "guide": "《小海盗,要出海!》\n前置《哎呀!海盗想长大!》、《随水而来的烦恼》\n后续《小小的远行》系列 3 个(没成就)\n*视频地址", + "link": "https://www.bilibili.com/video/BV1q44y1N7Dn?spm_id_from=333.999.0.0" + }, + "试问,藏锋何处?": { + "achievement": "四方求剑", + "desc": "见证岚姐与「藏锋」的故事。", + "guide": null, + "link": "" + }, + "剑去之日": { + "achievement": "行万里路…?", + "desc": "见证孙宇的故事。", + "guide": null, + "link": "" + }, + "万端珊瑚事件簿": { + "achievement": "瞳孔中的伪装者", + "desc": "帮助珊瑚和龙二破获案件。", + "guide": "完成《万端珊瑚事件簿·结案时刻》后解锁成就,需要先完成前置任务,推测的顺序是:\n万端珊瑚事件簿 → 搜索工作x3次 → 合适的身份 → 迷惑行动x3次 → 结案时刻→收尾工作\n第二和四环节有 3 个分支地点(随机给其中 1 个):稻妻城附近、甘金岛附近、神里屋敷附近\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "万端珊瑚事件簿·搜索工作": { + "achievement": "瞳孔中的伪装者", + "desc": "帮助珊瑚和龙二破获案件。", + "guide": "完成《万端珊瑚事件簿·结案时刻》后解锁成就,需要先完成前置任务,推测的顺序是:\n万端珊瑚事件簿 → 搜索工作x3次 → 合适的身份 → 迷惑行动x3次 → 结案时刻→收尾工作\n第二和四环节有 3 个分支地点(随机给其中 1 个):稻妻城附近、甘金岛附近、神里屋敷附近\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "万端珊瑚事件簿·迷惑行动": { + "achievement": "瞳孔中的伪装者", + "desc": "帮助珊瑚和龙二破获案件。", + "guide": "完成《万端珊瑚事件簿·结案时刻》后解锁成就,需要先完成前置任务,推测的顺序是:\n万端珊瑚事件簿 → 搜索工作x3次 → 合适的身份 → 迷惑行动x3次 → 结案时刻→收尾工作\n第二和四环节有 3 个分支地点(随机给其中 1 个):稻妻城附近、甘金岛附近、神里屋敷附近\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "万端珊瑚事件簿·合适的身份": { + "achievement": "瞳孔中的伪装者", + "desc": "帮助珊瑚和龙二破获案件。", + "guide": "完成《万端珊瑚事件簿·结案时刻》后解锁成就,需要先完成前置任务,推测的顺序是:\n万端珊瑚事件簿 → 搜索工作x3次 → 合适的身份 → 迷惑行动x3次 → 结案时刻→收尾工作\n第二和四环节有 3 个分支地点(随机给其中 1 个):稻妻城附近、甘金岛附近、神里屋敷附近\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "万端珊瑚事件簿·结案时刻": { + "achievement": "瞳孔中的伪装者", + "desc": "帮助珊瑚和龙二破获案件。", + "guide": "完成《万端珊瑚事件簿·结案时刻》后解锁成就,需要先完成前置任务,推测的顺序是:\n万端珊瑚事件簿 → 搜索工作x3次 → 合适的身份 → 迷惑行动x3次 → 结案时刻→收尾工作\n第二和四环节有 3 个分支地点(随机给其中 1 个):稻妻城附近、甘金岛附近、神里屋敷附近\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "万端珊瑚事件簿·收尾工作": { + "achievement": "真相只有一个…?", + "desc": "见证龙二的故事。", + "guide": "做完《万端珊瑚事件簿·结案时刻》后解锁《万端珊瑚事件簿·收尾工作》,新登场大和田剧情。\n*视频地址", + "link": "https://www.bilibili.com/video/BV1i3411K7YD?spm_id_from=333.999.0.0" + }, + "家乡之味": { + "achievement": "璃月一番", + "desc": "用美味的料理治愈汤雯。", + "guide": "前置任务每日委托《家乡之味》交付奇怪的料理(无论哪种料理的奇怪的版本都行)给汤雯,汤雯拿到以后会说味道很微妙。\n正确完成前置任务后,再接到后续每日委托《绝对独特的美味》 (非强制触发,最快第二天可以接到,最慢1个月后),三个选项 (绝云锅巴、腌笃鲜、烤吃虎鱼) 选哪种都可以,交付美味的料理即可解锁成就\n*.2.5版本后在再做一次该任务,汤雯会回璃月\n*视频地址", + "link": "https://www.bilibili.com/video/BV12f4y157fC?spm_id_from=333.999.0.0" + }, + "绝对独特的美味": { + "achievement": "璃月一番", + "desc": "用美味的料理治愈汤雯。", + "guide": "前置任务每日委托《家乡之味》交付奇怪的料理(无论哪种料理的奇怪的版本都行)给汤雯,汤雯拿到以后会说味道很微妙。\n正确完成前置任务后,再接到后续每日委托《绝对独特的美味》 (非强制触发,最快第二天可以接到,最慢1个月后),三个选项 (绝云锅巴、腌笃鲜、烤吃虎鱼) 选哪种都可以,交付美味的料理即可解锁成就\n*.2.5版本后在再做一次该任务,汤雯会回璃月\n*视频地址", + "link": "https://www.bilibili.com/video/BV12f4y157fC?spm_id_from=333.999.0.0" + }, + "全能美食队·突破性思维": { + "achievement": "噼咔,为什么又是噼咔", + "desc": "向香菱请教到特别的烹饪手法。", + "guide": "《全能美食队·突破性思维》\n剧情里旭东会让旅行者去璃月的万民堂找卯师傅,卯师傅会给你 2 个选项,选择“也许香菱知道怎么解决他的问题…”这个选项,卯师傅说香菱去轻策庄了,让你找点绝云椒椒和禽肉。这时候你可以不管卯师傅要的东西,自己传送到轻策庄去找香菱对话,最后回去找旭东\n香菱在轻策庄西南的传送点(刚传送过去就会被野猪撞的那个)附近\n此外只要自己去找香菱对话,最后交付道具时交付香菱给的就行了,对话选哪个选项其实无所谓\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "全能美食队·烹饪对决": { + "achievement": "双人餐行", + "desc": "帮助旭东和龟井宗久各完成一次烹饪。", + "guide": "《全能美食队·烹饪对决》:双方各胜利 1 次即可。\n灭火BUG已经修护,如实正常做任务即可\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "全能美食队·美食小问答": { + "achievement": "饮食问题", + "desc": "帮助芭尔瓦涅校对全部食谱。", + "guide": "《全能美食队·美食小问答》正确答案如下:\n北地苹果焖肉——胡椒 ;天枢肉———清心\n腌笃鲜—————竹笋 ;串串三味——鸟蛋 ;水煮黑背鲈——盐\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "全能美食队·厨道的极意": { + "achievement": "武士饭", + "desc": "帮助龟井宗久搜集过全部两侧营地的食材。", + "guide": "《全能美食队·厨道的极意》:左右两边各要做 1 次\n*视频地址", + "link": "https://www.bilibili.com/video/BV1zv411g7VE?spm_id_from=333.999.0.0" + }, + "稻妻销售员": { + "achievement": "「给您添蘑菇了!」", + "desc": "在「售后服务」中收到顾客绀田传助的抱怨。", + "guide": "前置任务《稻妻销售员》中,告诉绀田传助错误的化肥使用方法\n任务里有三个选项,选择错误的选项\n每次刷到这个任务时,瓦希德告诉你的方法的顺序可能是不一样的,没有固定答案,需要你自己判断哪个选项是错误的(类似璃月港数船)\n教错了的话,绀田传助会说感觉不对劲\n之后解锁每日委托《售后服务》(解锁代表有机会刷到,但不是第二天一定就刷),为绀田传助摘除田地里的蘑菇时,注意要把全部的蘑菇都摘除、摘了一部分时派蒙会说“这下应该差不多了”,同时系统提示可以找绀田传助交任务了;此时不要理会,继续摘蘑菇,全部摘完以后派蒙会说“这下就全部摘干净了”,这时再去找绀田传助交任务,任务完成后解锁成就", + "link": "" + }, + "售后服务": { + "achievement": "「给您添蘑菇了!」", + "desc": "在「售后服务」中收到顾客绀田传助的抱怨。", + "guide": "前置任务《稻妻销售员》中,告诉绀田传助错误的化肥使用方法\n任务里有三个选项,选择错误的选项\n每次刷到这个任务时,瓦希德告诉你的方法的顺序可能是不一样的,没有固定答案,需要你自己判断哪个选项是错误的(类似璃月港数船)\n教错了的话,绀田传助会说感觉不对劲\n之后解锁每日委托《售后服务》(解锁代表有机会刷到,但不是第二天一定就刷),为绀田传助摘除田地里的蘑菇时,注意要把全部的蘑菇都摘除、摘了一部分时派蒙会说“这下应该差不多了”,同时系统提示可以找绀田传助交任务了;此时不要理会,继续摘蘑菇,全部摘完以后派蒙会说“这下就全部摘干净了”,这时再去找绀田传助交任务,任务完成后解锁成就", + "link": "" + }, + "这本小说…厉害吗?": { + "achievement": "编辑部的一己之见", + "desc": "帮助阿茂和顺吉回到正确的创作轨道。", + "guide": "一阶段:《这本小说…厉害吗?》(支线:天目锻冶屋、九十九物、观察同心们的工作)\n二阶段支线 A:《这本小说…有问题?》\n二阶段支线 B:《这本小说…好像看过?》(按顺序123依次交书即可)\n从剧情逻辑上来看,在一阶段支持编辑阿茂解锁刷到《这本小说…好像看过》的可能性,支持作家顺吉解锁刷到《这本小说…有问题》的可能性\n需要这三个每日都做完,且在 B 支线交付\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "这本小说…有问题?": { + "achievement": "编辑部的一己之见", + "desc": "帮助阿茂和顺吉回到正确的创作轨道。", + "guide": "一阶段:《这本小说…厉害吗?》(支线:天目锻冶屋、九十九物、观察同心们的工作)\n二阶段支线 A:《这本小说…有问题?》\n二阶段支线 B:《这本小说…好像看过?》(按顺序123依次交书即可)\n从剧情逻辑上来看,在一阶段支持编辑阿茂解锁刷到《这本小说…好像看过》的可能性,支持作家顺吉解锁刷到《这本小说…有问题》的可能性\n需要这三个每日都做完,且在 B 支线交付\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "这本小说…好像看过?": { + "achievement": "编辑部的一己之见", + "desc": "帮助阿茂和顺吉回到正确的创作轨道。", + "guide": "一阶段:《这本小说…厉害吗?》(支线:天目锻冶屋、九十九物、观察同心们的工作)\n二阶段支线 A:《这本小说…有问题?》\n二阶段支线 B:《这本小说…好像看过?》(按顺序123依次交书即可)\n从剧情逻辑上来看,在一阶段支持编辑阿茂解锁刷到《这本小说…好像看过》的可能性,支持作家顺吉解锁刷到《这本小说…有问题》的可能性\n需要这三个每日都做完,且在 B 支线交付\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "必须精进的武艺": { + "achievement": "同心训练家?", + "desc": "协助朝仓进行5次训练。", + "guide": "做 4 次每日委托《必须精进的武艺》后解锁世界任务《洗刷耻辱的一战》,完成世界任务后有机会刷到每日委托《永不停歇的修炼》,《必须精进的武艺》+《永不停歇的修炼》合计 5 次即可", + "link": "" + }, + "永不停歇的修炼": { + "achievement": "同心训练家?", + "desc": "协助朝仓进行5次训练。", + "guide": "做 4 次每日委托《必须精进的武艺》后解锁世界任务《洗刷耻辱的一战》,完成世界任务后有机会刷到每日委托《永不停歇的修炼》,《必须精进的武艺》+《永不停歇的修炼》合计 5 次即可", + "link": "" + }, + "每日委托《这本小说…有问题?》": { + "achievement": "至少有了个结局", + "desc": "听顺吉讲述完他所构思的故事。", + "guide": "需要在 2.1 版本后(2.0 版本做过的不算)重做《这本小说…有问题?》和《这本小说…好像看过?》才能解锁世界任务《故事构思法》 ,做完世界任务后得到成\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "每日委托《这本小说…好像看过?》": { + "achievement": "至少有了个结局", + "desc": "听顺吉讲述完他所构思的故事。", + "guide": "需要在 2.1 版本后(2.0 版本做过的不算)重做《这本小说…有问题?》和《这本小说…好像看过?》才能解锁世界任务《故事构思法》 ,做完世界任务后得到成\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "世界任务《故事构思法》": { + "achievement": "至少有了个结局", + "desc": "听顺吉讲述完他所构思的故事。", + "guide": "需要在 2.1 版本后(2.0 版本做过的不算)重做《这本小说…有问题?》和《这本小说…好像看过?》才能解锁世界任务《故事构思法》 ,做完世界任务后得到成\n*视频成就", + "link": "https://www.bilibili.com/video/BV1tu411C7jN?spm_id_from=333.999.0.0" + }, + "每日委托《神社大扫除》": { + "achievement": "她和她的猫", + "desc": "陪寝子前往影向山,寻找「阿响」的痕迹。", + "guide": "做完寝子系列的世界任务后,累积做 4 个寝子相关每日委托(指《神社大扫除》、《鱼之味》、《猫之迹》,大岛纯平那三个不算)后解锁世界任务《鸣神寻踪》,完成世界任务后解锁成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1T3411m7kJ" + }, + "每日委托《鱼之味》": { + "achievement": "她和她的猫", + "desc": "陪寝子前往影向山,寻找「阿响」的痕迹。", + "guide": "做完寝子系列的世界任务后,累积做 4 个寝子相关每日委托(指《神社大扫除》、《鱼之味》、《猫之迹》,大岛纯平那三个不算)后解锁世界任务《鸣神寻踪》,完成世界任务后解锁成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1T3411m7kJ" + }, + "每日委托《猫之迹》": { + "achievement": "她和她的猫", + "desc": "陪寝子前往影向山,寻找「阿响」的痕迹。", + "guide": "做完寝子系列的世界任务后,累积做 4 个寝子相关每日委托(指《神社大扫除》、《鱼之味》、《猫之迹》,大岛纯平那三个不算)后解锁世界任务《鸣神寻踪》,完成世界任务后解锁成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1T3411m7kJ" + }, + "世界任务《鸣神寻踪》": { + "achievement": "她和她的猫", + "desc": "陪寝子前往影向山,寻找「阿响」的痕迹。", + "guide": "做完寝子系列的世界任务后,累积做 4 个寝子相关每日委托(指《神社大扫除》、《鱼之味》、《猫之迹》,大岛纯平那三个不算)后解锁世界任务《鸣神寻踪》,完成世界任务后解锁成就\n*视频地址", + "link": "https://www.bilibili.com/video/BV1T3411m7kJ" + }, + "每日委托《鱼钩上的绝景?》": { + "achievement": "啊哈…什么上钩了?", + "desc": "与凯万一起钓起奇怪的东西…", + "guide": "累积做 3 次前置每日委托《鱼钩上的绝景?》,有墩墩桃、鸟蛋、蘑菇三种支线(注意是累积3次),第二天4点后解锁世界任务《鱼钩的物尽其用》,做完世界任务拿到成就。\n任务还有后续,但是无成就(可能未来版本会加后续成就)。\n做完世界任务以后有机会接到每日委托《鱼钩的奇异时光?》,和前边的也差不多,有帕蒂沙兰、香辛果、甜甜花三种支线", + "link": "" + }, + "世界任务《鱼钩的物尽其用》": { + "achievement": "啊哈…什么上钩了?", + "desc": "与凯万一起钓起奇怪的东西…", + "guide": "累积做 3 次前置每日委托《鱼钩上的绝景?》,有墩墩桃、鸟蛋、蘑菇三种支线(注意是累积3次),第二天4点后解锁世界任务《鱼钩的物尽其用》,做完世界任务拿到成就。\n任务还有后续,但是无成就(可能未来版本会加后续成就)。\n做完世界任务以后有机会接到每日委托《鱼钩的奇异时光?》,和前边的也差不多,有帕蒂沙兰、香辛果、甜甜花三种支线", + "link": "" + }, + "每日委托《鱼钩的奇异时光?》": { + "achievement": "啊哈…什么上钩了?", + "desc": "与凯万一起钓起奇怪的东西…", + "guide": "累积做 3 次前置每日委托《鱼钩上的绝景?》,有墩墩桃、鸟蛋、蘑菇三种支线(注意是累积3次),第二天4点后解锁世界任务《鱼钩的物尽其用》,做完世界任务拿到成就。\n任务还有后续,但是无成就(可能未来版本会加后续成就)。\n做完世界任务以后有机会接到每日委托《鱼钩的奇异时光?》,和前边的也差不多,有帕蒂沙兰、香辛果、甜甜花三种支线", + "link": "" + }, + "吞金和蓄财": { + "achievement": "卡里米之蕈兽", + "desc": "见证哈特姆在「期货交易」大赚一笔!", + "guide": "全随机后续,正常需要做5次拿到2成就,最速欧皇可以3次拿2成就。\n2022/9/5更新:\n「吞金料理」中有3种料理:摩拉肉,黄油鸡和「堆高高」。\n建议选择美味的堆高高。\n2022/9/16更新:\n现在发现变成了随机后续,给任何料理都会触发任意成就,原本应该给2次料理2个成就的,也可以1次料理2成就。", + "link": "" + }, + "喵…喵喵?喵!喵。": { + "achievement": "捉猫记", + "desc": "帮莎莉寻找过所有小猫。", + "guide": "至少要做 3 次,正确完成寻找 3 只不同小猫的支线\n「黑白色」的猫「拉勒」:【喵,喵喵喵,喵——】\n「深灰色」的猫「纳尔吉斯」:【喵!喵喵,喵】\n「灰黑条纹」的猫「萝赞」:【喵喵喵,喵喵喵】", + "link": "" + }, + "世界任务《加尔恰的赞歌》": { + "achievement": "推分算数原理", + "desc": "帮助加尔恰完善他的机器。", + "guide": "推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "每日委托《加尔恰的赞歌·关键物品》": { + "achievement": "推分算数原理", + "desc": "帮助加尔恰完善他的机器。", + "guide": "推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "每日委托《加尔恰的赞歌·替代物》": { + "achievement": "推分算数原理", + "desc": "帮助加尔恰完善他的机器。", + "guide": "推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "每日委托《加尔恰的赞歌·轴承在上》": { + "achievement": "推分算数原理", + "desc": "帮助加尔恰完善他的机器。", + "guide": "推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "每日委托《加尔恰的赞歌·举手之劳》": { + "achievement": "推分算数原理", + "desc": "帮助加尔恰完善他的机器。", + "guide": "推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "每日委托《加尔恰的赞歌·某人的回响》": { + "achievement": "推分算数原理", + "desc": "帮助加尔恰完善他的机器。", + "guide": "推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "世界任务《加尔恰的赞歌·适配性赠礼》": { + "achievement": "推分算数原理", + "desc": "帮助加尔恰完善他的机器。", + "guide": "推测需要先完后璃月望舒客栈的世界任务《加尔恰的赞歌》后才能在须弥接到这系列每日委托。\n《举手之劳》里,正确选项:【二次入炉的时候,燃料记得加多点。】【从内向外敲打。】\n做完《某人的回响》后应该可以拿到成就,同时解锁后续世界任务", + "link": "" + }, + "御用在他乡": { + "achievement": "「为了工作。」", + "desc": "为范兵卫采到更多的蘑菇。", + "guide": "每日委托《御用在他乡》\n√完结!\n可以一次性拿到成就 :要求采5个蘑菇,但可以采7个给成就\n推测需要先做完稻妻的世界任务《踏鞴物语》系列才能在须弥接到这个委托。\n做完第一次以后他以后还会让你摘蘑菇,对话内容会有些变化", + "link": "" + }, + "谨遵医嘱": { + "achievement": "放松疗法", + "desc": "满足三个病人的愿望。", + "guide": "《洁净与健康》不是前置任务,可以直接刷到了《谨遵医嘱》\n《谨遵医嘱》这个任务是你和病人对话完成就可以回去交差了的,但这样拿不到成就。你需要:\n细节:① 主动为古尔根清理田里的杂草,清理完以后再次与古尔根对话;② 阿兹拉说药太苦,和她对话,送给她【糖】;③ 阿夫塔想吃肉,给他【美味的烤肉排】。\n满足病人的愿望以后再回去交差。其中阿兹拉和阿夫塔不会主动问你要东西,需要你听完他们的话以后再次与他们对话来交付道具", + "link": "" + }, + "生不出的花": { + "achievement": "斩花除根", + "desc": "找到并打倒逃走的骗骗花。", + "guide": "前置累积3次《生不出的花》后,后续出《花开之时》,\n随机后续1,有骗骗花的支线才有成就,追击并干掉骗骗花后获得成就。\n随机后续2,无骗骗花,寄了,再来3次……\n细节:前置有 2 个支线,一个是提供肥料,另一个是浇水。", + "link": "" + }, + "花开之时": { + "achievement": "斩花除根", + "desc": "找到并打倒逃走的骗骗花。", + "guide": "前置累积3次《生不出的花》后,后续出《花开之时》,\n随机后续1,有骗骗花的支线才有成就,追击并干掉骗骗花后获得成就。\n随机后续2,无骗骗花,寄了,再来3次……\n细节:前置有 2 个支线,一个是提供肥料,另一个是浇水。", + "link": "" + }, + "衡量世界之人!": { + "achievement": "天有多高,地有多…", + "desc": "协助法伽尼进行测量工作。", + "guide": "1和2分支都是随机给的,其中分支1还有3种怪:丘丘人、蕈兽、遗迹蛇\n至少做 3 次,分别是:① 打怪;② 设置信标;③ 回收信标+打怪。", + "link": "" + }, + "宝贝计划": { + "achievement": "非必要需求", + "desc": "找到古拉布吉尔给小蛇制作的所有道具。", + "guide": "帮古拉布吉尔找宠物蛇口粮,有 5 个支线。任务是你找到【古拉布吉尔的特制宠物蛇口粮】交给 NPC 就可以完成,但是做成就需要你额外找到 3 个东西:【奇怪的珠子】、【奇怪的小型帽子】、【破旧的架子】。\n每次随机给1个隐藏道具,但是也可能没有。", + "link": "" + }, + "问题的转化": { + "achievement": "船说了算", + "desc": "与拉菲克成功地测试了船体强度。", + "guide": "目前第三段就可以拿到成就,但是还有后续,可能未来版本还有成就。\n(类似稻妻八重堂作家和编辑《小说有问题》在后续版本上线新成就。)\n细节:在《问题的转化·理论强度》中拿5块木头,这样在《问题的转化·负载问题》中可以成功拿到成就,失败的支线可能会退回到第二阶段。", + "link": "" + }, + "问题的转化·理论强度": { + "achievement": "船说了算", + "desc": "与拉菲克成功地测试了船体强度。", + "guide": "目前第三段就可以拿到成就,但是还有后续,可能未来版本还有成就。\n(类似稻妻八重堂作家和编辑《小说有问题》在后续版本上线新成就。)\n细节:在《问题的转化·理论强度》中拿5块木头,这样在《问题的转化·负载问题》中可以成功拿到成就,失败的支线可能会退回到第二阶段。", + "link": "" + }, + "问题的转化·负载问题": { + "achievement": "船说了算", + "desc": "与拉菲克成功地测试了船体强度。", + "guide": "目前第三段就可以拿到成就,但是还有后续,可能未来版本还有成就。\n(类似稻妻八重堂作家和编辑《小说有问题》在后续版本上线新成就。)\n细节:在《问题的转化·理论强度》中拿5块木头,这样在《问题的转化·负载问题》中可以成功拿到成就,失败的支线可能会退回到第二阶段。", + "link": "" + }, + "问题的转化·关键在何?": { + "achievement": "船说了算", + "desc": "与拉菲克成功地测试了船体强度。", + "guide": "目前第三段就可以拿到成就,但是还有后续,可能未来版本还有成就。\n(类似稻妻八重堂作家和编辑《小说有问题》在后续版本上线新成就。)\n细节:在《问题的转化·理论强度》中拿5块木头,这样在《问题的转化·负载问题》中可以成功拿到成就,失败的支线可能会退回到第二阶段。", + "link": "" + }, + "食与学": { + "achievement": "问题何在?", + "desc": "享受三道贾法尔制作的料理。", + "guide": "每次随机给一个。\n完成 3 个支线:薄荷豆汤、绿汁脆球、烤肉卷", + "link": "" + }, + "教令院,小问题": { + "achievement": "须弥博学者", + "desc": "答对六道不同的问题。", + "guide": "总共 6 道题,每次抽 3 道,正确答案分别是:1、阿弥利多学院;2、悉般多摩学院;3、圣树;4、防沙壁;5、驮兽;6、蕈兽", + "link": "" + }, + "跑,希尔米,跑": { + "achievement": "一步之遥", + "desc": "在与希尔米的赛跑中大意落败…", + "guide": null, + "link": "" + }, + "良药难求": { + "achievement": "医用笔迹", + "desc": "帮助马鲁夫正确地解析药方。", + "guide": null, + "link": "" + }, + "沙上花·余香": { + "achievement": "手有余香", + "desc": "见证内尔敏的故事。", + "guide": null, + "link": "" + } +} diff --git a/GenshinUID/genshinuid_achievement/get_achi_desc.py b/GenshinUID/genshinuid_achievement/get_achi_desc.py new file mode 100644 index 00000000..074714d2 --- /dev/null +++ b/GenshinUID/genshinuid_achievement/get_achi_desc.py @@ -0,0 +1,62 @@ +import re + +from .template import all_achi, daily_achi, achi_template, daily_template + + +async def get_daily_achi(task: str) -> str: + _similarity = 0 + detail = {} + if task in daily_achi: + detail = daily_achi[task] + else: + for _task in daily_achi: + __task = ''.join(re.findall('[\u4e00-\u9fa5]', _task)) + __task = __task.replace('每日委托', '').replace('世界任务', '') + similarity = len(set(__task) & set(task)) + if similarity >= len(__task) / 2: + if similarity > _similarity: + _similarity = similarity + detail = daily_achi[_task] + task = _task + else: + if detail == {}: + return '该委托暂无成就...' + + achi = detail['achievement'] + desc = detail['desc'] + guide = detail['guide'] + link = detail['link'] + + im = daily_template.format(task, achi, desc, guide) + im = f'{im}\n{link}' if link else im + return im + + +async def get_achi(achi: str) -> str: + _similarity = 0 + detail = {} + if achi in all_achi: + detail = all_achi[achi] + else: + for _achi in all_achi: + __achi = ''.join(re.findall('[\u4e00-\u9fa5]', _achi)) + __achi = __achi.replace('每日委托', '').replace('世界任务', '') + similarity = len(set(__achi) & set(achi)) + if similarity >= len(__achi) / 2: + if similarity > _similarity: + _similarity = similarity + detail = all_achi[_achi] + achi = _achi + else: + if detail == {}: + return '暂无该成就...' + + book = detail['book'] + desc = detail['desc'] + guide = detail['guide'] + link = detail['link'] + + im = achi_template.format(book, achi, desc) + im = f'{im}\n{guide}' if guide else im + im = f'{im}\n{link}' if link else im + return im diff --git a/GenshinUID/genshinuid_achievement/template.py b/GenshinUID/genshinuid_achievement/template.py new file mode 100644 index 00000000..47f87152 --- /dev/null +++ b/GenshinUID/genshinuid_achievement/template.py @@ -0,0 +1,20 @@ +import json +from pathlib import Path + +path = Path(__file__).parent +with open(path / 'all_achi.json', "r", encoding='UTF-8') as f: + all_achi = json.load(f) + +with open(path / 'daily_achi.json', "r", encoding='UTF-8') as f: + daily_achi = json.load(f) + +daily_template = '''任务:【{}】 +成就:【{}】 +描述:【{}】 +攻略:【{}】 +''' + +achi_template = '''合辑:【{}】 +成就:【{}】 +描述:【{}】 +''' diff --git a/GenshinUID/genshinuid_adv/__init__.py b/GenshinUID/genshinuid_adv/__init__.py new file mode 100644 index 00000000..266b60e4 --- /dev/null +++ b/GenshinUID/genshinuid_adv/__init__.py @@ -0,0 +1,15 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from .get_adv import char_adv, weapon_adv + + +@SV('文字推荐').on_suffix(('用什么', '能用啥', '怎么养')) +async def send_char_adv(bot: Bot, ev: Event): + await bot.send(await char_adv(ev.text)) + + +@SV('文字推荐').on_suffix(('能给谁', '谁能用')) +async def send_weapon_adv(bot: Bot, ev: Event): + await bot.send(await weapon_adv(ev.text)) diff --git a/GenshinUID/genshinuid_adv/char_adv_list.json b/GenshinUID/genshinuid_adv/char_adv_list.json new file mode 100644 index 00000000..8e810925 --- /dev/null +++ b/GenshinUID/genshinuid_adv/char_adv_list.json @@ -0,0 +1,1515 @@ +{ + "安柏": { + "weapon": { + "5": [ + "阿莫斯之弓", + "天空之翼", + "终末嗟叹之诗" + ], + "4": [ + "绝弦" + ], + "3": [] + }, + "artifact": [ + [ + "昔日宗室之仪" + ] + ], + "remark": [ + "原神御三家之一,必胜客联动看板角色之一;", + "身份西风骑士团侦查骑士,蒙德飞行冠军,柏菈图的拼图(误);", + "人送外号解谜点火真君/打火姬", + "通常情况下,安柏的大世界解谜意义大于其深渊实战意义,建议根据实际需求选择投入资源培养" + ] + }, + "凯亚": { + "weapon": { + "5": [ + "天空之刃", + "风鹰剑" + ], + "4": [ + "天目影打刀", + "西风剑", + "黑剑" + ], + "3": [ + "黎明神剑", + "飞天御剑" + ] + }, + "artifact": [ + [ + "绝缘之旗印" + ], + [ + "冰风迷途的勇士" + ], + [ + "苍白之火" + ] + ], + "remark": [ + "全名凯亚·亚尔伯里奇,原神御三家之一;", + "身份西风骑士团骑兵队长,坎瑞亚遗民之一;", + "人送外号踏冰渡海真君/矿工头子" + ] + }, + "丽莎": { + "weapon": { + "5": [ + "神乐之真意", + "天空之卷", + "四风原典" + ], + "4": [ + "流浪乐章", + "匣里日月", + "万国诸海图谱" + ], + "3": [] + }, + "artifact": [ + [ + "如雷的盛怒" + ], + [ + "如雷的盛怒", + "昔日宗室之仪" + ], + [ + "战狂" + ] + ], + "remark": [ + "全名丽莎·敏兹,原神御三家之一,\n身份西风骑士团图书管理员,雷泽的师傅,\n可莉对其评价:「丽莎阿……丽莎姐姐是好人!」" + ] + }, + "诺艾尔": { + "weapon": { + "5": [ + "赤角石溃杵" + ], + "4": [ + "白影剑", + "螭骨剑" + ], + "3": [] + }, + "artifact": [ + [ + "华馆梦醒形骸记" + ], + [ + "逆飞的流星" + ], + [ + "角斗士的终幕礼" + ] + ], + "remark": [ + "原神常驻抽卡折扣赠送角色,肯德基联动看板角色之一;\n身份西风骑士团女仆,也因此常用女仆代称,\n人送外号人形高达/岩王帝姬" + ] + }, + "芭芭拉": { + "weapon": { + "5": [ + "不灭月华" + ], + "4": [ + "试作金珀" + ], + "3": [ + "讨龙英杰谭" + ] + }, + "artifact": [ + [ + "被怜爱的少女" + ] + ], + "remark": [ + "原神新手活动赠送角色,大多数萌新能拥有的第一个奶妈,\n唯一一个元素爆发拥有特写动画的四星角色,\n身份西风骑士团祈礼牧师,蒙德闪耀偶像,琴的妹妹,\n人送外号战斗牧师/内鬼/老芭" + ] + }, + "砂糖": { + "weapon": { + "5": [], + "4": [ + "祭礼残章" + ], + "3": [ + "讨龙英杰谭" + ] + }, + "artifact": [ + [ + "翠绿之影" + ] + ], + "remark": [ + "身份西风骑士团炼金术士,师从阿贝多的兽耳娘;\n因为肖像和二创的关系而被人送外号雷莹术士(误)" + ] + }, + "行秋": { + "weapon": { + "5": [ + "雾切之回光", + "磐岩结绿", + "波乱月白经津" + ], + "4": [ + "祭礼剑", + "匣里龙吟" + ], + "3": [ + "飞天御剑" + ] + }, + "artifact": [ + [ + "绝缘之旗印" + ], + [ + "沉沦之心", + "昔日宗室之仪" + ] + ], + "remark": [ + "原神“点秋香”成员之一,\n身份飞云商会二少爷,古华派继承人,重云的好损友,提瓦特代理水神米哈游画女硬说男的典范(误)", + "主流情况下,优选祭礼剑搭配绝缘4件(2宗2水虽作为早期配装,但与绝缘4件相比互有胜负,已经基于2+2毕业成型的旅行者可按需换刷绝缘4件;出于刷本收益考量,一般推荐后入坑的萌新直接刷取绝缘4件);选择祭礼剑以外的非充能词条武器,或者6命之前的行秋,可能存在明显的循环周转问题,上述情况下推荐圣遗物沙漏选择充能主词条(在编入雷神国家队或与夜兰组队获得双水加成时,可忽略此建议);选用西风系列武器时,建议适当提高角色暴击率以获得较为稳定的回能效果" + ] + }, + "凝光": { + "weapon": { + "5": [ + "尘世之锁", + "四风原典", + "天空之卷" + ], + "4": [ + "试作金珀", + "流浪乐章", + "匣里日月" + ], + "3": [] + }, + "artifact": [ + [ + "悠古的磐岩", + "攻18" + ] + ], + "remark": [ + "身份璃月天权星,群玉阁之主,\n原神羽球节球网指定赞助方(误)\n人送外号富婆,原神版渡鸦(大误)" + ] + }, + "重云": { + "weapon": { + "5": [ + "狼的末路" + ], + "4": [ + "螭骨剑", + "祭礼大剑" + ], + "3": [] + }, + "artifact": [ + [ + "冰风迷途的勇士" + ], + [ + "渡过烈火的贤人" + ] + ], + "remark": [ + "身份天衡方士,拥有「纯阳之体」,\n是行秋的朋友,也是申鹤的外甥" + ] + }, + "雷泽": { + "weapon": { + "5": [ + "松籁响起之时", + "狼的末路", + "无工之剑", + "天空之傲" + ], + "4": [ + "螭骨剑", + "雪葬的星银", + "衔珠海皇", + "试作古华" + ], + "3": [] + }, + "artifact": [ + [ + "苍白之火" + ], + [ + "苍白之火", + "染血的骑士" + ], + [ + "苍白之火", + "攻18" + ], + [ + "逆飞的流星" + ], + [ + "角斗士的终幕礼" + ] + ], + "remark": [ + "身份「卢皮卡」,安德留斯的收留者,师从丽莎,是可莉的朋友,昔日的四星战神,人送外号狼崽" + ] + }, + "旅行者风": { + "weapon": { + "5": [ + "磐岩结绿" + ], + "4": [ + "黑剑" + ], + "3": [] + }, + "artifact": [ + [ + "翠绿之影", + "攻18" + ] + ], + "remark": [ + "对初始角色空和荧两兄妹的统称。根据玩家选择,自机一方将踏上寻找血亲之路,另一方将隶属于深渊教团。\n身份:外来的异乡人,小可爱,进化出智商的丘丘人,荣誉骑士,臭保底人(误),等等;\n绰号很多,在国内空常称为龙哥,荧常称为爷" + ] + }, + "旅行者岩": { + "weapon": { + "5": [ + "磐岩结绿" + ], + "4": [ + "黑剑" + ], + "3": [] + }, + "artifact": [ + [ + "悠古的磐岩", + "攻18" + ] + ], + "remark": [ + "对初始角色空和荧两兄妹的统称。根据玩家选择,自机一方将踏上寻找血亲之路,另一方将隶属于深渊教团。\n身份:外来的异乡人,通缉令上的,臭保底人(误),岩王帝君的化身,等等;\n绰号很多,在国内空常称为龙哥,荧常称为爷" + ] + }, + "北斗": { + "weapon": { + "5": [ + "狼的末路", + "无工之剑" + ], + "4": [ + "螭骨剑", + "衔珠海皇" + ], + "3": [] + }, + "artifact": [ + [ + "绝缘之旗印" + ], + [ + "昔日宗室之仪", + "如雷的盛怒" + ] + ], + "remark": [ + "唯一一个拥有盾反机制的自机角色;\n身份南十字船队“死兆星”号船长,\n人送外号大姐头,发电姬(误);\n因为可以给自己挂雷的特性,在稻妻解谜可将其作为继电石使用" + ] + }, + "香菱": { + "weapon": { + "5": [ + "薙草之稻光", + "和璞鸢", + "护摩之杖", + "息灾", + "拿来吧你(五星大多能用,上述都没有的有啥用啥)" + ], + "4": [ + "「渔获」", + "断浪长鳍", + "匣里灭辰", + "决斗之枪", + "西风长枪" + ], + "3": [ + "白缨枪" + ] + }, + "artifact": [ + [ + "炽烈的炎之魔女" + ], + [ + "绝缘之旗印" + ], + [ + "炽烈的炎之魔女", + "昔日宗室之仪" + ] + ], + "remark": [ + "原神“点秋香”成员之一,\n身份万民堂大厨,瑶瑶的师姐,\n人送外号枪神,锅巴发射器,璃月飞行冠军/洲际导弹真君,小哪吒(误);", + "通常情况下,香菱需和班尼特组队以获得较为可观的伤害,不建议将二人拆分;圣遗物方面优选绝缘4件(火套4件和2火2宗虽作为早期配装,但与绝缘4件相比互有胜负,已经基于火套或2+2毕业成型的旅行者可按需换刷绝缘4件;出于刷本收益考量,一般推荐后入坑的萌新直接刷取绝缘4件);选择非充能词条武器的香菱可能存在明显的循环周转问题,此时推荐圣遗物沙漏选择充能主词条(编入雷神国家队时,可忽略此建议);选用西风系列武器时,建议适当提高角色暴击率以获得较为稳定的回能效果" + ] + }, + "菲谢尔": { + "weapon": { + "5": [ + "天空之翼" + ], + "4": [ + "幽夜华尔兹", + "绝弦", + "暗巷猎手" + ], + "3": [] + }, + "artifact": [ + [ + "如雷的盛怒", + "流浪大地的乐团" + ], + [ + "如雷的盛怒/流浪大地的乐团", + "攻18" + ] + ], + "remark": [ + "全名菲谢尔·冯·露弗施洛斯·那菲多特,自称为「断罪之皇女」「幽夜净土之主宰」;\n身份冒险家协会调查员,班尼特的同事,\n人送外号皇女,小艾咪,奥兹发射器" + ] + }, + "班尼特": { + "weapon": { + "5": [ + "雾切之回光674", + "风鹰剑674", + "天空之刃608", + "波乱月白经津608", + "磐岩结绿542" + ], + "4": [ + "腐殖之剑510", + "西风剑454", + "暗巷闪光620" + ], + "3": [] + }, + "artifact": [ + [ + "昔日宗室之仪" + ], + [ + "炽烈的炎之魔女" + ], + [ + "被怜爱的少女" + ], + [ + "教官" + ] + ], + "remark": [ + "原神“点秋香”成员之一,\n身份班尼冒险团团长,冒险家协会成员,菲谢尔的同事,提瓦特代理火神(误),\n人送外号点赞哥,六星角色,倒霉蛋,人品指示器", + "慎重点亮班尼特第6命座,具体原因碍于篇幅不做赘述,可自行了解;武器后数字为最高等级下的基础攻击力数值(后称“白字”),主流情况下,优选高白字武器搭配宗室4件提供高额攻击力加成;选择驻场输出时,考虑魔女4件;追求极致回复量,考虑少女4件;教官4件仅在部分反应队伍推荐;选择非充能词条武器的班尼特可能存在一定循环周转问题,此时推荐圣遗物沙漏选择充能主词条;选用西风系列武器时,建议适当提高角色暴击率以获得较为稳定的回能效果" + ] + }, + "迪卢克": { + "weapon": { + "5": [ + "狼的末路", + "无工之剑", + "赤角石溃杵", + "天空之傲" + ], + "4": [ + "螭骨剑", + "衔珠海皇", + "试作古华", + "雨裁" + ], + "3": [] + }, + "artifact": [ + [ + "炽烈的炎之魔女" + ], + [ + "炽烈的炎之魔女", + "攻18" + ], + [ + "角斗士的终幕礼" + ] + ], + "remark": [ + "全名迪卢克·莱艮芬德,肯德基联动看板角色之一;\n身份「晨曦酒庄」庄主,蒙德暗夜英雄,红色的很烫的女孩子(误),火系角色唯一的面瘫(误),可莉评价为「奇怪的大人」;\n人送外号卢老爷/卢姥爷,正义人/正E人/挣亿人,E键三连真君,卢锅巴", + "选用无工之剑时,推荐与钟离,迪奥娜等盾辅角色搭配,以最大化武器效果增幅;推荐赤角出于其主词条强力考量,但通常情况下不建议为迪卢克专门抽取" + ] + }, + "琴": { + "weapon": { + "5": [ + "苍古自由之誓", + "雾切之回光", + "磐岩结绿", + "天空之刃", + "风鹰剑" + ], + "4": [ + "腐殖之剑", + "天目影打刀", + "黑剑", + "笛剑", + "西风剑" + ], + "3": [] + }, + "artifact": [ + [ + "翠绿之影" + ], + [ + "翠绿之影", + "攻18" + ], + [ + "攻18", + "被怜爱的少女" + ], + [ + "苍白之火" + ], + [ + "角斗士的终幕礼" + ] + ], + "remark": [ + "全名琴·古恩希尔德,\n身份西风骑士团代理团长、蒲公英骑士、狮牙骑士,可莉的监护人,芭芭拉的姐姐,拼一己之力拉高风系角色平均身高的成女(误),\n人送外号吸尘器,骑士团の魂,琴臀长", + "主流情况下,做辅助定位优选风套4件,武器优选苍古;否则,本条目推荐的武器和圣遗物大多为驻场输出时的参考方案;选择以物理伤害做输出时,建议自行了解使用琴打出掉落伤害的方法,碍于篇幅不在此赘述" + ] + }, + "七七": { + "weapon": { + "5": [ + "天空之刃", + "风鹰剑", + "磐岩结绿", + "雾切之回光" + ], + "4": [ + "祭礼剑", + "黑剑", + "试作斩岩", + "笛剑" + ], + "3": [] + }, + "artifact": [ + [ + "海染砗蟝" + ], + [ + "千岩牢固" + ], + [ + "被怜爱的少女" + ], + [ + "被怜爱的少女", + "攻18" + ] + ], + "remark": [ + "璃月仙人之一,别号「救苦度厄真君,起死回骸童子」,\n身份不卜庐采药人暨学徒,\n人送外号旅行者的小保底,不卜庐剑圣,体操达人", + "主流情况下,优选祭礼剑搭配海染4件,提供足够回复量并兼顾一定的伤害输出,追求极致回复量时再考虑少女海染2+2或少女4件;千岩4件为早期增伤辅助探索配装,仅在搭配雷泽等角色贴脸输出时推荐;雾切和绿剑仅在少数需要七七驻场输出的情况下考虑装备" + ] + }, + "莫娜": { + "weapon": { + "5": [ + "天空之卷", + "四风原典" + ], + "4": [ + "流浪乐章", + "匣里日月", + "证誓之明瞳", + "试作金珀" + ], + "3": [ + "讨龙英杰谭" + ] + }, + "artifact": [ + [ + "昔日宗室之仪" + ], + [ + "千岩牢固" + ], + [ + "绝缘之旗印" + ], + [ + "沉沦之心", + "攻18" + ], + [ + "沉沦之心", + "流浪大地的乐团" + ] + ], + "remark": [ + "全名阿斯托洛吉斯·莫娜·梅姬斯图斯,来自枫丹,现居蒙德,\n身份占星术士,\n人送外号半部讨龙真君,没钱吃饭真君", + "主流情况下,做增伤辅助时武器优选讨龙(无需给武器升级,但推荐满精炼)搭配宗室或千岩4件,高精流浪乐章可做备选,金珀仅推荐在中低压环境且需要一定生命回复时携带;其余武器和圣遗物套装仅在做爆发输出时考虑" + ] + }, + "刻晴": { + "weapon": { + "5": [ + "雾切之回光", + "裁叶萃光", + "磐岩结绿", + "风鹰剑" + ], + "4": [ + "黑剑", + "匣里龙吟" + ], + "3": [ + "黎明神剑" + ] + }, + "artifact": [ + [ + "饰金之梦" + ], + [ + "饰金之梦/如雷的盛怒", + "攻18/精80" + ], + [ + "平息鸣雷的尊者" + ], + [ + "如雷的盛怒", + "攻18" + ], + [ + "苍白之火" + ] + ], + "remark": [ + "原神“又甘又刻”“合晴合里”成员之一,\n央视新闻2020年度图鉴《原神》提名代表角色,\n身份璃月玉衡星,猫耳总角发扬者,屁斜剑法开创者(误),爱吃金丝虾球,人送外号阿晴,刻师傅/牛杂师傅,璃月雷神,氪晴,严莉莉(大误)", + "针对萌新前中期过渡,可使用黎明神剑搭配精通主词条沙漏,圣遗物套装按需选择武人4件套;对于激化体系,可考虑使用裁叶萃光;风鹰剑仅推荐物理输出流派使用,此时圣遗物推荐搭配苍白之火4件套" + ] + }, + "温迪": { + "weapon": { + "5": [ + "天空之翼", + "终末嗟叹之诗", + "冬极白星", + "阿莫斯之弓" + ], + "4": [ + "绝弦", + "西风猎弓", + "风花之颂", + "苍翠猎弓" + ], + "3": [ + "鸦羽弓" + ] + }, + "artifact": [ + [ + "翠绿之影" + ], + [ + "翠绿之影", + "昔日宗室之仪" + ], + [ + "绝缘之旗印" + ] + ], + "remark": [ + "巴巴托斯,尘世七执政之一的风神,\n唯一任次七神暨男神之二,旅行者在提瓦特遇到的第一位尘世七执政;喜食苹果酒,对猫毛过敏,\n身份吟游诗人,四风守护的领导人,米哈游画女硬说男的典范(误),\n人送外号卖唱的,摸鱼神,诶嘿摸鱼真君/不务正业真君,巴巴脱丝" + ] + }, + "可莉": { + "weapon": { + "5": [ + "天空之卷", + "四风原典", + "尘世之锁", + "神乐之真意", + "图莱杜拉的回忆" + ], + "4": [ + "流浪乐章", + "嘟嘟可故事集", + "匣里日月" + ], + "3": [] + }, + "artifact": [ + [ + "炽烈的炎之魔女" + ], + [ + "渡过烈火的贤人" + ], + [ + "流浪大地的乐团" + ], + [ + "逆飞的流星" + ] + ], + "remark": [ + "「蒙德最强战力」传说,玩家的宝贝心头肉;\n身份西风骑士团火花骑士,艾莉丝的女儿,羽球节指定羽球(误),西风骑士团禁闭室常客(误),\n人送外号放火烧山真君,火化骑士(误),小太阳" + ] + }, + "达达利亚/「公子」": { + "weapon": { + "5": [ + "冬极白星", + "飞雷之弦振", + "若水", + "天空之翼", + "阿莫斯之弓" + ], + "4": [ + "弓藏", + "破魔之弓", + "绝弦", + "西风猎弓" + ], + "3": [ + "鸦羽弓" + ] + }, + "artifact": [ + [ + "沉沦之心", + "攻18" + ], + [ + "沉沦之心" + ] + ], + "remark": [ + "真名阿贾克斯,原神第一个up三次的限定五星,近战弓兵的典范之一,做什么都不会ooc的传奇/诸舞精通;\n身份愚人众执行官末席,代号「公子」,\n人送外号达达鸭,鸭头,(至冬国最棒的)玩具销售员,钟离的钱包/人形自走ATM,至冬国男狐狸精(误)" + ] + }, + "迪奥娜": { + "weapon": { + "5": [ + "终末嗟叹之诗" + ], + "4": [ + "祭礼弓", + "西风猎弓" + ], + "3": [ + "反曲弓" + ] + }, + "artifact": [ + [ + "昔日宗室之仪" + ], + [ + "被怜爱的少女", + "千岩牢固" + ], + [ + "被怜爱的少女" + ] + ], + "remark": [ + "出身于清泉镇,猎人杜拉夫的女儿,自诩为「酒业杀手」,类似猫的性状是「凯茨莱茵家族」血统的象征;\n身份「猫尾酒馆」超人气调酒师,外号猫猫,dio娜,雷莹术士(考哥)" + ] + }, + "钟离": { + "weapon": { + "5": [ + "护摩之杖", + "和璞鸢", + "贯虹之槊" + ], + "4": [ + "决斗之枪", + "西风长枪" + ], + "3": [ + "黑缨枪" + ] + }, + "artifact": [ + [ + "千岩牢固" + ], + [ + "千岩牢固", + "昔日宗室之仪" + ], + [ + "悠古的磐岩", + "昔日宗室之仪" + ] + ], + "remark": [ + "摩拉克斯,尘世七执政之一的岩神,唯一任次七神暨男神之二;", + "身份岩王帝君/岩王爷,众仙之祖,「往生堂」客卿,听书人;厌恶水产品,", + "外号帝君,不带钱包真君" + ] + }, + "辛焱": { + "weapon": { + "5": [ + "松籁响起之时", + "狼的末路", + "无工之剑", + "赤角石溃杵", + "天空之傲" + ], + "4": [ + "螭骨剑", + "雪葬的星银", + "衔珠海皇", + "试作古华", + "白影剑" + ], + "3": [] + }, + "artifact": [ + [ + "苍白之火" + ], + [ + "苍白之火", + "染血的骑士" + ], + [ + "苍白之火", + "角斗士的终幕礼/追忆之注连/辰砂往生录/来歆余响" + ], + [ + "逆飞的流星" + ], + [ + "角斗士的终幕礼" + ] + ], + "remark": [ + "出身璃月,游学枫丹,璃月摇滚先行者,隶属于「红弦」;", + "外号辛三火,黑妹" + ] + }, + "阿贝多": { + "weapon": { + "5": [ + "苍古自由之誓", + "磐岩结绿" + ], + "4": [ + "辰砂之纺锤", + "腐殖之剑" + ], + "3": [ + "黎明神剑" + ] + }, + "artifact": [ + [ + "千岩牢固" + ], + [ + "华馆梦醒形骸记" + ], + [ + "悠古的磐岩", + "华馆梦醒形骸记" + ] + ], + "remark": [ + "白垩之子,创生原初之人,作画水平了得,炼金术造诣深刻;", + "身份西风骑士团首席炼金术士,砂糖的老师,可莉的义兄;", + "又名人造人,电梯批发商(误)" + ] + }, + "甘雨": { + "weapon": { + "5": [ + "阿莫斯之弓", + "冬极白星", + "飞雷之振弦", + "天空之翼" + ], + "4": [ + "破魔之弓", + "试作澹月", + "黑岩战弓" + ], + "3": [ + "弹弓" + ] + }, + "artifact": [ + [ + "流浪大地的乐团" + ], + [ + "冰风迷途的勇士" + ] + ], + "remark": [ + "半仙血统,师从留云借风真君,与申鹤是同门,绝对的素食主义者;", + "身份璃月月海亭秘书,原神“璃月三c”“又甘又刻”成员之一;", + "人送外号椰羊,王小美,咕噜下山真君/噎羊" + ] + }, + "魈": { + "weapon": { + "5": [ + "护摩之杖", + "和璞鸢", + "贯虹之槊", + "息灾", + "天空之脊" + ], + "4": [ + "决斗之枪", + "黑岩长枪", + "千岩长枪" + ], + "3": [ + "白缨枪" + ] + }, + "artifact": [ + [ + "辰砂往生录" + ], + [ + "翠绿之影", + "攻18" + ], + [ + "沙上楼阁史话" + ] + ], + "remark": [ + "相比原2+2提升10%左右;装备贯虹需要绑定盾辅", + "又名金鹏,号「金鹏翅王」,人称「降魔大圣」,「护法仙众夜叉 」成员之一,原神“璃月三c”成员之一,钟离的友人暨下属,喜食杏仁豆腐;", + "人送外号魈上仙,提瓦特打桩机,抬头不见低头见真君(大误)" + ] + }, + "胡桃": { + "weapon": { + "5": [ + "护摩之杖", + "和璞鸢", + "贯虹之槊" + ], + "4": [ + "匣里灭辰", + "决斗之枪", + "黑岩长枪" + ], + "3": [ + "白缨枪" + ] + }, + "artifact": [ + [ + "炽烈的炎之魔女" + ], + [ + "追忆之注连" + ] + ], + "remark": [ + "原神“璃月三c”成员之一,自诩为“小巷派暗黑打油诗人”", + "身份「往生堂」第七十七代堂主,行秋为其诗友/挂件,也是钟离的二号钱包(误),", + "人送外号胡堂主;", + "提瓦特火c蒸发反应伤害记录保持者" + ] + }, + "罗莎莉亚": { + "weapon": { + "5": [ + "和璞鸢", + "护摩之杖" + ], + "4": [ + "西风长枪", + "决斗之枪", + "龙脊长枪" + ], + "3": [] + }, + "artifact": [ + [ + "昔日宗室之仪" + ] + ], + "remark": [ + "蒙德西风教会的一名修女,特立独行之人;\n又名修女,白色史莱姆(误)" + ] + }, + "烟绯": { + "weapon": { + "5": [ + "天空之卷", + "四风原典", + "尘世之锁" + ], + "4": [ + "流浪乐章", + "匣里日月", + "黑岩绯玉", + "嘟嘟可故事集", + "万国诸海图谱" + ], + "3": [] + }, + "artifact": [ + [ + "炽烈的炎之魔女" + ], + [ + "流浪大地的乐团" + ] + ], + "remark": [ + "半仙血统的律法咨询师;\n人送外号璃月法考创始人/罗翔璃月港分翔(误),葱娘" + ] + }, + "优菈": { + "weapon": { + "5": [ + "松籁响起之时", + "无工之剑", + "狼的末路", + "天空之傲" + ], + "4": [ + "螭骨剑", + "雪葬的星银", + "恶王丸" + ], + "3": [] + }, + "artifact": [ + [ + "苍白之火" + ], + [ + "苍白之火", + "染血的骑士" + ], + [ + "苍白之火", + "攻18" + ], + [ + "角斗士的终幕礼" + ] + ], + "remark": [ + "劳伦斯家族末裔,西风骑士团「游击小队」队长,又名「浪花骑士」;\n必胜客联动看板角色之一,柏菈图的拼图之一(误);\n又名小本记仇真君" + ] + }, + "枫原万叶": { + "weapon": { + "5": [ + "苍古自由之誓" + ], + "4": [ + "西福斯的月光", + "铁蜂刺", + "祭礼剑", + "西风剑" + ], + "3": [] + }, + "artifact": [ + [ + "翠绿之影" + ] + ], + "remark": [ + "稻妻出身的浪人武士,现为「南十字」船队成员;\n人送外号叶天帝,稻妻飞行冠军,精神璃月人(误)" + ] + }, + "旅行者雷": { + "weapon": { + "5": [ + "天空之刃" + ], + "4": [ + "西风剑", + "祭礼剑" + ], + "3": [ + "飞天御剑" + ] + }, + "artifact": [ + [ + "绝缘之旗印", + "昔日宗室之仪" + ] + ], + "remark": [ + "圣遗物选择上,充能词条比套装效果重要;", + "对初始角色空和荧两兄妹的统称。根据玩家选择,自机一方将踏上寻找血亲之路,另一方将隶属于深渊教团。\n身份:外来的异乡人,眼狩令上的,臭保底人(误),大黄金钓鱼手,小家伙,金毛人/黄毛阿姨(误),等等;\n绰号很多,在国内空常称为龙哥,荧常称为爷" + ] + }, + "神里绫华": { + "weapon": { + "5": [ + "雾切之回光", + "斫峰之刃", + "磐岩结绿", + "天空之刃" + ], + "4": [ + "天目影打刀", + "黑剑", + "黑岩长剑" + ], + "3": [ + "黎明神剑" + ] + }, + "artifact": [ + [ + "冰风迷途的勇士" + ], + [ + "冰风迷途的勇士", + "昔日宗室之仪" + ] + ], + "remark": [ + "社奉行神里家大小姐,又名白鹭公主,大型连续剧《等神里》主人公(误);\n人送外号大家gui秀(误)" + ] + }, + "宵宫": { + "weapon": { + "5": [ + "飞雷之弦振", + "阿莫斯之弓", + "天空之翼" + ], + "4": [ + "弓藏", + "破魔之弓", + "苍翠猎弓", + "黑岩战弓" + ], + "3": [ + "弹弓", + "神射手之誓" + ] + }, + "artifact": [ + [ + "追忆之注连" + ], + [ + "炽烈的炎之魔女" + ], + [ + "炽烈的炎之魔女", + "攻18" + ] + ], + "remark": [ + "长野原烟花店现任店主,孩子王,与可莉并称提瓦特军火二人组(大误);", + "人送外号加特凛(误)" + ] + }, + "早柚": { + "weapon": { + "5": [ + "狼的末路", + "天空之傲" + ], + "4": [ + "桂木斩长正", + "玛海菈的水色", + "祭礼大剑", + "西风大剑", + "雨裁" + ], + "3": [ + "沐浴龙血的剑" + ] + }, + "artifact": [ + [ + "翠绿之影" + ], + [ + "翠绿之影", + "被怜爱的少女" + ], + [ + "被怜爱的少女" + ] + ], + "remark": [ + "「终末番」的小小忍者,据说趁其不注意摸摸头会被跳起来打膝盖;\n人送外号柚岩龙蜥,泥头车,小狸猫" + ] + }, + "埃洛伊": { + "weapon": { + "5": [ + "飞雷之弦振", + "天空之翼", + "阿莫斯之弓" + ], + "4": [ + "掠食者", + "弓藏", + "破魔之弓", + "黑岩战弓" + ], + "3": [] + }, + "artifact": [ + [ + "冰风迷途的勇士" + ], + [ + "冰风迷途的勇士", + "昔日宗室之仪/流浪大地的乐团" + ], + [ + "追忆之注连" + ] + ], + "remark": [ + "索尼《地平线》系列游戏联动角色,\n迄今唯一一个红色背景的五星角色", + "通常情况下,埃洛伊的大世界资源采集意义大于深渊实战意义,建议根据实际需求选择投入资源培养" + ] + }, + "雷电将军": { + "weapon": { + "5": [ + "薙草之稻光", + "天空之脊", + "和璞鸢", + "护摩之杖" + ], + "4": [ + "断浪长鳍", + "「渔获」", + "决斗之枪", + "西风长枪" + ], + "3": [] + }, + "artifact": [ + [ + "绝缘之旗印" + ], + [ + "千岩牢固" + ] + ], + "remark": [ + "此身,代表巴尔泽布,尘世七执政成员之一,现任雷神;\n身世复杂,可公开身份「御建鸣神主尊大御所大人」;\n似乎对甜食感兴趣;\n常称呼为雷神,人送外号煮饭婆,雷军(误),土妹子" + ] + }, + "九条裟罗": { + "weapon": { + "5": [ + "终末嗟叹之诗608", + "天空之翼674" + ], + "4": [ + "祭礼弓565", + "绝弦510", + "暗巷猎手565", + "黑岩战弓565" + ], + "3": [] + }, + "artifact": [ + [ + "绝缘之旗印" + ], + [ + "昔日宗室之仪" + ], + [ + "昔日宗室之仪", + "如雷的盛怒" + ] + ], + "remark": [ + "隶属于天领奉行九条家,为鸦天狗一族,雷电将军单推人", + "武器后数字为最高等级下的基础攻击力数值(后称“白字”),主流情况下,综合选择高白字的辅助特效武器,搭配宗室4件(与班尼特组队时任选其中一人佩戴)以提供大量攻击力加成" + ] + }, + "珊瑚宫心海": { + "weapon": { + "5": [ + "不灭月华" + ], + "4": [ + "试作金珀", + "证誓之明瞳", + "白辰之环" + ], + "3": [ + "讨龙英杰谭" + ] + }, + "artifact": [ + [ + "海染砗蟝" + ], + [ + "千岩牢固", + "被怜爱的少女" + ], + [ + "千岩牢固" + ] + ], + "remark": [ + "仅在心海输出队伍推荐不灭月华", + "永冻队辅助首选", + "海祇岛「现人神巫女」暨军师;\n又名观赏鱼(误),千花书记(误)" + ] + }, + "托马": { + "weapon": { + "5": [ + "护摩之杖", + "薙草之稻光", + "天空之脊" + ], + "4": [ + "西风长枪", + "喜多院十文字" + ], + "3": [ + "黑缨枪" + ] + }, + "artifact": [ + [ + "昔日宗室之仪" + ], + [ + "千岩牢固", + "绝缘之旗印" + ] + ], + "remark": [ + "出身蒙德,现为社奉行神里家家政官,稻妻地头蛇;\n人送外号驻日美军/德军,狗托(误)" + ] + }, + "荒泷一斗": { + "weapon": { + "5": [ + "赤角石溃杵", + "无工之剑" + ], + "4": [ + "白影剑", + "螭骨剑" + ], + "3": [ + "白铁大剑" + ] + }, + "artifact": [ + [ + "华馆梦醒形骸记" + ] + ], + "remark": [ + "对豆类过敏的鬼族男儿,荒泷派创始人,希娜小姐头榜大哥;\n又名斗子哥,放牛的,进狱系男孩,岩丘丘萨满(误)" + ] + }, + "五郎": { + "weapon": { + "5": [ + "终末嗟叹之诗" + ], + "4": [ + "祭礼弓", + "西风猎弓" + ], + "3": [] + }, + "artifact": [ + [ + "华馆梦醒形骸记" + ], + [ + "绝缘之旗印", + "充能/防御散件" + ] + ], + "remark": [ + "既是海祇军大将,又是八重堂特邀编辑,希娜小姐的设计原形/中之人(误);", + "又名柴犬" + ] + }, + "申鹤": { + "weapon": { + "5": [ + "息灾741(16.5%)", + "贯虹之槊608(49.6%)", + "天空之脊674(-)", + "和璞鸢608(-)" + ], + "4": [ + "千岩长枪565(27.6%)", + "断浪长鳍620(13.8%)", + "西风长枪565(-)" + ], + "3": [] + }, + "artifact": [ + [ + "昔日宗室之仪" + ], + [ + "角斗士的终幕礼/辰砂往生录", + "追忆之注连/来歆余响" + ] + ], + "remark": [ + "常年住在仙家洞天,由留云借风真君收留的人类,对诸多俗世有着奇妙的理解;", + "甘雨的同门,重云的小姨妈(误)", + "武器后数字为最高等级下的基础攻击力数值,括号内数值表示武器副属性的攻击力加成比例;主流情况下,优选高额攻击加成武器,搭配攻击2件加成的不同套装组成2+2,力求达到高额攻击面板以提供大量冰伤加成;" + ] + }, + "云堇": { + "weapon": { + "5": [ + "天空之脊" + ], + "4": [ + "西风长枪", + "喜多院十文字", + "试作星镰" + ], + "3": [] + }, + "artifact": [ + [ + "华馆梦醒形骸记" + ], + [ + "华馆梦醒形骸记", + "绝缘之旗印" + ] + ], + "remark": [ + "璃月云翰社当家少女,懂得创作的年轻名角;\n人送外号自走三彩团子(误)" + ] + }, + "八重神子": { + "weapon": { + "5": [ + "神乐之真意", + "千夜浮梦", + "天空之卷", + "尘世之锁", + "四风原典" + ], + "4": [ + "流浪乐章", + "匣里日月", + "证誓之明瞳" + ], + "3": [] + }, + "artifact": [ + [ + "如雷的盛怒", + "攻18" + ], + [ + "如雷的盛怒", + "流浪大地的乐团" + ], + [ + "流浪大地的乐团", + "攻18" + ], + [ + "平息鸣雷的尊者" + ], + [ + "饰金之梦" + ] + ], + "remark": [ + "身世复杂,可公开身份为鸣神大社宫司和八重堂编辑;", + "人送外号屑狐狸,雷丘丘萨满,尘歌狐(误)" + ] + }, + "神里绫人": { + "weapon": { + "5": [ + "波乱月白经津", + "雾切之回光", + "磐岩结绿" + ], + "4": [ + "黑剑", + "天目影打刀", + "黑岩长剑" + ], + "3": [ + "黎明神剑" + ] + }, + "artifact": [ + [ + "来歆余响" + ], + [ + "沉沦之心" + ], + [ + "角斗士的终幕礼" + ] + ], + "remark": [ + "社奉行神里家现任家主;", + "人送外号0人,大舅子,主教大人(考哥),饮茶哥(误)" + ] + } +} diff --git a/GenshinUID/genshinuid_adv/get_adv.py b/GenshinUID/genshinuid_adv/get_adv.py new file mode 100644 index 00000000..e62b5054 --- /dev/null +++ b/GenshinUID/genshinuid_adv/get_adv.py @@ -0,0 +1,75 @@ +import json +from pathlib import Path + +with open( + Path(__file__).parent / 'char_adv_list.json', "r", encoding='UTF-8' +) as f: + adv_lst = json.load(f) + + +async def weapon_adv(name): + weapons = {} + artifacts = {} + for char, info in adv_lst.items(): + char_weapons = [] + char_artifacts = [] + + for i in info['weapon'].values(): # 3 stars, 4 stars, 5 stars + char_weapons.extend(i) + for i in info['artifact']: + char_artifacts.extend(i) + # char_artifacts = list(set(char_artifacts)) + + for weapon_name in char_weapons: + if name in weapon_name: # fuzzy search + char_weapon = weapons.get(weapon_name, []) + char_weapon.append(char) + weapons[weapon_name] = char_weapon + for artifact_name in char_artifacts: + if name in artifact_name: # fuzzy search + char_artifact = artifacts.get(artifact_name, []) + char_artifact.append(char) + char_artifact = list(set(char_artifact)) + artifacts[artifact_name] = char_artifact + + im = [] + if weapons: + im.append('✨武器:') + for k, v in weapons.items(): + im.append(f'{"、".join(v)} 可能会用到【{k}】') + if artifacts: + im.append('✨圣遗物:') + for k, v in artifacts.items(): + im.append(f'{"、".join(v)} 可能会用到【{k}】') + if im == []: + im = '没有角色能使用【{}】'.format(name) + else: + im = '\n'.join(im) + return im + + +async def char_adv(name): + for char, info in adv_lst.items(): + if name in char: + im = [f'「{char}」', '-=-=-=-=-=-=-=-=-=-'] + if weapon_5 := info['weapon']['5']: + im.append(f'推荐5★武器:{"、".join(weapon_5)}') + if weapon_4 := info['weapon']['4']: + im.append(f'推荐4★武器:{"、".join(weapon_4)}') + if weapon_3 := info['weapon']['3']: + im.append(f'推荐3★武器:{"、".join(weapon_3)}') + if artifacts := info['artifact']: + im.append('推荐圣遗物搭配:') + for arti in artifacts: + if len(arti) > 1: + im.append(f'[{arti[0]}]两件套 + [{arti[1]}]两件套') + else: + im.append(f'[{arti[0]}]四件套') + if remark := info['remark']: + im.append('-=-=-=-=-=-=-=-=-=-') + im.append('备注:') + mark = "\n".join(remark) + im.append(f'{mark}') + return '\n'.join(im) + + return '没有找到角色信息' diff --git a/GenshinUID/genshinuid_ann/__init__.py b/GenshinUID/genshinuid_ann/__init__.py new file mode 100644 index 00000000..6264c5de --- /dev/null +++ b/GenshinUID/genshinuid_ann/__init__.py @@ -0,0 +1,109 @@ +import random +import asyncio + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.gss import gss +from gsuid_core.models import Event +from gsuid_core.aps import scheduler +from gsuid_core.logger import logger + +from .util import black_ids +from ..utils.convert import get_uid +from .main import ann, consume_remind +from ..utils.error_reply import UID_HINT +from ..utils.image.convert import convert_img +from ..genshinuid_config.gs_config import gsconfig +from .ann_card import sub_ann, unsub_ann, ann_list_card, ann_detail_card + + +@SV('原神公告').on_command(('原神公告')) +async def ann_(bot: Bot, ev: Event): + ann_id = ev.text + if not ann_id: + img = await ann_list_card() + img = await convert_img(img) + return await bot.send(img) + + if not ann_id.isdigit(): + raise Exception('公告ID不正确') + + img = await ann_detail_card(int(ann_id)) + img = await convert_img(img) + await bot.send(img) + + +@SV('原神公告订阅', pm=2).on_fullmatch('订阅原神公告') +async def sub_ann_(bot: Bot, ev: Event): + if ev.group_id is None: + return await bot.send('请在群聊中订阅') + await bot.send(sub_ann(bot.bot_id, ev.group_id)) + + +@SV('原神公告订阅', pm=2).on_fullmatch(('取消订阅原神公告', '取消原神公告', '退订原神公告')) +async def unsub_ann_(bot: Bot, ev: Event): + if ev.group_id is None: + return await bot.send('请在群聊中取消订阅') + await bot.send(unsub_ann(bot.bot_id, ev.group_id)) + + +@SV('原神公告红点').on_fullmatch('取消原神公告红点') +async def consume_remind_(bot: Bot, ev: Event): + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + else: + await bot.send(await consume_remind(uid)) + + +@scheduler.scheduled_job('cron', minute=10) +async def check_ann(): + await check_ann_state() + + +async def check_ann_state(): + logger.info('[原神公告] 定时任务: 原神公告查询..') + ids = gsconfig.get_config('Ann_Ids').data + sub_list = gsconfig.get_config('Ann_Groups').data + + if not sub_list: + logger.info('没有群订阅, 取消获取数据') + return + + if not ids: + ids = await ann().get_ann_ids() + if not ids: + raise Exception('获取原神公告ID列表错误,请检查接口') + gsconfig.set_config('Ann_Ids', ids) + logger.info('初始成功, 将在下个轮询中更新.') + return + + new_ids = await ann().get_ann_ids() + new_ann = set(ids) ^ set(new_ids) + + if not new_ann: + logger.info('[原神公告] 没有最新公告') + return + + for ann_id in new_ann: + if ann_id in black_ids: + continue + try: + img = await ann_detail_card(ann_id) + img = await convert_img(img) + for bot_id in sub_list: + try: + if bot_id in gss.active_bot: + bot = gss.active_bot[bot_id] + else: + continue + for group_id in sub_list[bot_id]: + await bot.target_send(img, 'group', group_id) + await asyncio.sleep(random.uniform(1, 3)) + except Exception as e: + logger.exception(e) + except Exception as e: + logger.exception(str(e)) + + logger.info('[原神公告] 推送完毕, 更新数据库') + gsconfig.set_config('Ann_Ids', new_ids) diff --git a/GenshinUID/genshinuid_ann/ann_card.py b/GenshinUID/genshinuid_ann/ann_card.py new file mode 100644 index 00000000..b3634266 --- /dev/null +++ b/GenshinUID/genshinuid_ann/ann_card.py @@ -0,0 +1,220 @@ +import re +from pathlib import Path + +from bs4 import BeautifulSoup +from PIL import Image, ImageOps, ImageDraw + +from .main import ann +from .util import filter_list +from ..utils.image.convert import convert_img +from ..genshinuid_config.gs_config import gsconfig +from ..utils.fonts.genshin_fonts import gs_font_18, gs_font_26 +from ..utils.image.image_tools import ( + get_pic, + easy_paste, + draw_text_by_line, + easy_alpha_composite, +) + +assets_dir = Path(__file__).parent / 'assets' + +list_head = Image.open(assets_dir / 'list.png') +list_item = ( + Image.open(assets_dir / 'item.png').resize((384, 96)).convert('RGBA') +) + + +async def ann_list_card() -> bytes: + ann_list = await ann().get_ann_list() + if not ann_list: + raise Exception('获取游戏公告失败,请检查接口是否正常') + + height_len = max(len(ann_list[0]['list']), len(ann_list[1]['list'])) + + bg = Image.new( + 'RGBA', + ( + list_head.width, + list_head.height + list_item.height * height_len + 20 + 30, + ), + '#f9f6f2', + ) + easy_paste(bg, list_head, (0, 0)) + + for data in ann_list: + x = 45 + if data['type_id'] == 1: + x = 472 + + for index, ann_info in enumerate(data['list']): + new_item = list_item.copy() + subtitle = ann_info['subtitle'] + draw_text_by_line( + new_item, + (0, 30 - (len(subtitle) > 10 and 10 or 0)), + subtitle, + gs_font_26, + '#3b4354', + 250, + True, + ) + + draw_text_by_line( + new_item, + (new_item.width - 80, 10), + str(ann_info['ann_id']), + gs_font_18, + '#3b4354', + 100, + ) + + bg = easy_alpha_composite( + bg, new_item, (x, list_head.height + (index * new_item.height)) + ) + + tip = '*可以使用 原神公告#0000(右上角ID) 来查看详细内容, 例子: 原神公告#2434' + draw_text_by_line( + bg, (0, bg.height - 35), tip, gs_font_18, '#767779', 1000, True + ) + + return await convert_img(bg) + + +async def ann_detail_card(ann_id): + ann_list = await ann().get_ann_content() + if not ann_list: + raise Exception('获取游戏公告失败,请检查接口是否正常') + content = filter_list(ann_list, lambda x: x['ann_id'] == ann_id) + if not content: + raise Exception('没有找到对应的公告ID :%s' % ann_id) + soup = BeautifulSoup(content[0]['content'], 'lxml') + banner = content[0]['banner'] + ann_img = banner if banner else '' + for a in soup.find_all('a'): + a.string = '' + + for img in soup.find_all('img'): + img.string = img.get('src') + + msg_list = [ann_img] + msg_list += [ + BeautifulSoup(x.get_text('').replace('<<', ''), 'lxml').get_text() + + '\n' + for x in soup.find_all('p') + ] + + drow_height = 0 + for msg in msg_list: + if msg.strip().endswith(('jpg', 'png')): + _msg = re.search(r'(https://.*[png|jpg])', msg) + if _msg: + msg = _msg.group(0) + img = await get_pic(msg.strip()) + img_height = img.size[1] + if img.width > 1080: + img_height = int(img.height * 0.6) + drow_height += img_height + 40 + else: + ( + x_drow_duanluo, + x_drow_note_height, + x_drow_line_height, + x_drow_height, + ) = split_text(msg) + drow_height += x_drow_height + + im = Image.new('RGB', (1080, drow_height), '#f9f6f2') + draw = ImageDraw.Draw(im) + # 左上角开始 + x, y = 0, 0 + for msg in msg_list: + if msg.strip().endswith(('jpg', 'png')): + _msg = re.search(r'(https://.*[png|jpg])', msg) + if _msg: + msg = _msg.group(0) + img = await get_pic(msg.strip()) + if img.width > im.width: + img = img.resize((int(img.width * 0.6), int(img.height * 0.6))) + easy_paste(im, img, (0, y)) + y += img.size[1] + 40 + else: + ( + drow_duanluo, + drow_note_height, + drow_line_height, + drow_height, + ) = split_text(msg) + for duanluo, line_count in drow_duanluo: + draw.text((x, y), duanluo, fill=(0, 0, 0), font=gs_font_26) + y += drow_line_height * line_count + + _x, _y = gs_font_26.getsize('囗') + padding = (_x, _y, _x, _y) + im = ImageOps.expand(im, padding, '#f9f6f2') + + return await convert_img(im) + + +def split_text(content: str): + # 按规定宽度分组 + max_line_height, total_lines = 0, 0 + allText = [] + for text in content.split('\n'): + duanluo, line_height, line_count = get_duanluo(text) + max_line_height = max(line_height, max_line_height) + total_lines += line_count + allText.append((duanluo, line_count)) + line_height = max_line_height + total_height = total_lines * line_height + drow_height = total_lines * line_height + return allText, total_height, line_height, drow_height + + +def get_duanluo(text: str): + txt = Image.new('RGBA', (600, 800), (255, 255, 255, 0)) + draw = ImageDraw.Draw(txt) + # 所有文字的段落 + duanluo = '' + max_width = 1080 + # 宽度总和 + sum_width = 0 + # 几行 + line_count = 1 + # 行高 + line_height = 0 + for char in text: + width, height = draw.textsize(char, gs_font_26) + sum_width += width + if sum_width > max_width: # 超过预设宽度就修改段落 以及当前行数 + line_count += 1 + sum_width = 0 + duanluo += '\n' + duanluo += char + line_height = max(height, line_height) + if not duanluo.endswith('\n'): + duanluo += '\n' + return duanluo, line_height, line_count + + +def sub_ann(bot_id: str, group: str): + groups = gsconfig.get_config('Ann_Groups').data + if bot_id not in groups: + groups[bot_id] = [] + if group in groups[bot_id]: + return '已经订阅了' + else: + groups[bot_id].append(group) + gsconfig.set_config('Ann_Groups', groups) + return '成功订阅原神公告' + + +def unsub_ann(bot_id: str, group: str): + groups = gsconfig.get_config('Ann_Groups').data + if bot_id not in groups: + groups[bot_id] = [] + if group in groups[bot_id]: + groups[bot_id].remove(group) + gsconfig.set_config('Ann_Groups', groups) + return '成功取消订阅原神公告' + else: + return '已经不在订阅中了' diff --git a/GenshinUID/genshinuid_ann/assets/item.png b/GenshinUID/genshinuid_ann/assets/item.png new file mode 100644 index 00000000..116ed6e7 Binary files /dev/null and b/GenshinUID/genshinuid_ann/assets/item.png differ diff --git a/GenshinUID/genshinuid_ann/assets/list.png b/GenshinUID/genshinuid_ann/assets/list.png new file mode 100644 index 00000000..6ac7c292 Binary files /dev/null and b/GenshinUID/genshinuid_ann/assets/list.png differ diff --git a/GenshinUID/genshinuid_ann/main.py b/GenshinUID/genshinuid_ann/main.py new file mode 100644 index 00000000..1d8b5697 --- /dev/null +++ b/GenshinUID/genshinuid_ann/main.py @@ -0,0 +1,120 @@ +import httpx + +from .util import _Dict, black_ids, filter_list, cache_request_json + +# https://webstatic.mihoyo.com/hk4e/announcement/index.html?auth_appid=announcement&authkey_ver=1&bundle_id=hk4e_cn&channel_id=1&game=hk4e&game_biz=hk4e_cn&lang=zh-cn&level=57&platform=pc®ion=cn_gf01&sdk_presentation_style=fullscreen&sdk_screen_transparent=true&sign_type=2&uid=105293904#/ +api_url = 'https://hk4e-api-static.mihoyo.com/common/hk4e_cn/announcement/api/' +api_params = ( + '?game=hk4e' + '&game_biz=hk4e_cn' + '&lang=zh-cn' + '&bundle_id=hk4e_cn' + '&level=57' + '&platform={platform}' + '®ion={region}' + '&uid={uid}' +) +ann_content_url = f'{api_url}getAnnContent{api_params}' +ann_list_url = f'{api_url}getAnnList{api_params}' + + +class ann: + ann_list_data = [] + ann_content_data = [] + today = 0 + + def __init__(self, platform='pc', uid='114514', region='cn_gf01'): + # self.today = datetime.datetime.fromtimestamp( + # time.mktime(datetime.date.today().timetuple())) + self.platform = platform + self.uid = uid + self.region = region + + async def get_ann_content(self): + url = ann_content_url.format( + platform=self.platform, uid=self.uid, region=self.region + ) + res = await cache_request_json(url=url) + if res.retcode == 0: + self.ann_content_data = res.data.list + return self.ann_content_data + + async def get_ann_list(self): + url = ann_list_url.format( + platform=self.platform, uid=self.uid, region=self.region + ) + res = await cache_request_json(url=url) + if res.retcode == 0: + result = [] + for data in res.data.list: + data_list = [ + x for x in data['list'] if not x['ann_id'] in black_ids + ] + data['list'] = data_list + result.append(data) + + self.ann_list_data = result + return self.ann_list_data + + async def get_ann_ids(self): + await self.get_ann_list() + if not self.ann_list_data: + return [] + ids = [] + for label in self.ann_list_data: + ids += [x['ann_id'] for x in label['list']] + return ids + + +async def get_consume_remind_ann_ids(region, platform, uid): + ann_list = await ann( + platform=platform, uid=uid, region=region + ).get_ann_list() + ids = [] + for label in ann_list: + ids += filter_list(label.list, lambda x: x.remind == 1) + return [x.ann_id for x in ids] + + +async def consume_remind(uid): + region = 'cn_gf01' + if uid[0] == "5": + region = 'cn_qd01' + platform = ['pc'] + ids = [] + for p in platform: + ids += await get_consume_remind_ann_ids(region, p, uid) + + ids = set(ids) + msg = f'取消公告红点完毕! 一共取消了{len(ids)}个' + + async with httpx.AsyncClient( + base_url="https://hk4e-api.mihoyo.com/common/hk4e_cn/announcement/api" + ) as client: + for ann_id in ids: + for p in platform: + res = await client.get( + "/consumeRemind", + timeout=10, + params={ + 'ann_id': ann_id, + 'auth_appid': 'announcement', + 'authkey_ver': '1', + 'bundle_id': 'hk4e_cn', + 'channel_id': '1', + 'game': 'hk4e', + 'game_biz': 'hk4e_cn', + 'lang': 'zh-cn', + 'level': '57', + 'platform': p, + 'region': region, + 'sdk_presentation_style': 'fullscreen', + 'sdk_screen_transparent': 'true', + 'sign_type': '2', + 'uid': uid, + }, + ) + res = res.json(object_hook=_Dict) + if res.retcode != 0: + msg += '\n %s 失败,原因:%s' % (ann_id, res.message) + return msg diff --git a/GenshinUID/genshinuid_ann/util.py b/GenshinUID/genshinuid_ann/util.py new file mode 100644 index 00000000..cb1156d2 --- /dev/null +++ b/GenshinUID/genshinuid_ann/util.py @@ -0,0 +1,65 @@ +# -*- coding: UTF-8 -*- +import inspect +import datetime +import functools +from typing import Dict, Optional, TypedDict + +import httpx + + +class _Dict(dict): + __setattr__ = dict.__setitem__ # type: ignore + __getattr__ = dict.__getitem__ + + +class _CacheData(TypedDict): + time: Optional[datetime.datetime] + value: Optional[int] + + +def filter_list(plist, func): + return list(filter(func, plist)) + + +def cache(ttl=datetime.timedelta(hours=1), **kwargs): + def wrap(func): + cache_data: Dict[str, _CacheData] = {} + + @functools.wraps(func) + async def wrapped(*args, **kw): + nonlocal cache_data + bound = inspect.signature(func).bind(*args, **kw) + bound.apply_defaults() + ins_key = '|'.join( + ['%s_%s' % (k, v) for k, v in bound.arguments.items()] + ) + default_data: _CacheData = { + 'time': None, + 'value': None, + } + data = cache_data.get(ins_key, default_data) + + now = datetime.datetime.now() + if not data['time'] or now - data['time'] > ttl: + try: + data['value'] = await func(*args, **kw) + data['time'] = now + cache_data[ins_key] = data + except Exception as e: + raise e + + return data['value'] + + return wrapped + + return wrap + + +@cache(ttl=datetime.timedelta(minutes=30), arg_key='url') +async def cache_request_json(url): + async with httpx.AsyncClient() as client: + res = await client.get(url, timeout=10) + return res.json(object_hook=_Dict) + + +black_ids = [762, 422, 423, 1263, 495, 1957, 2522, 2388, 2516, 2476] diff --git a/GenshinUID/genshinuid_check/__init__.py b/GenshinUID/genshinuid_check/__init__.py new file mode 100644 index 00000000..36d0f40f --- /dev/null +++ b/GenshinUID/genshinuid_check/__init__.py @@ -0,0 +1,119 @@ +import random +import asyncio +from typing import List + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.aps import scheduler + +from ..utils.mys_api import mys_api +from .backup_data import data_backup +from ..utils.database import active_sqla +from ..gsuid_utils.database.models import GsUser + + +@scheduler.scheduled_job('cron', hour=0) +async def daily_refresh_charData(): + await data_backup() + + +@SV('数据管理', pm=2).on_fullmatch(('gs清除缓存')) +async def send_backup_msg(bot: Bot): + await data_backup() + await bot.send('操作成功完成!') + + +@SV('数据管理', pm=2).on_fullmatch(('校验全部Cookies')) +async def send_check_cookie(bot: Bot, ev: Event): + user_list = await active_sqla[bot.bot_id].get_all_user() + invalid_user: List[GsUser] = [] + for user in user_list: + if user.cookie and user.mys_id: + mys_data = await mys_api.get_mihoyo_bbs_info( + user.mys_id, + user.cookie, + True if int(user.uid[0]) > 5 else False, + ) + if isinstance(mys_data, int): + await active_sqla[bot.bot_id].delete_user_data(user.uid) + invalid_user.append(user) + continue + for i in mys_data: + if i['game_id'] != 2: + mys_data.remove(i) + if len(user_list) > 4: + im = f'正常Cookies数量: {len(user_list) - len(invalid_user)}' + invalid = '\n'.join( + [ + f'uid{user.uid}的Cookies是异常的!已删除该条Cookies!\n' + for user in invalid_user + ] + ) + return_str = f'{im}\n{invalid if invalid else "无失效Cookie!"}' + else: + return_str = '\n'.join( + [ + f'uid{user.uid}/mys{user.mys_id}的Cookies是正常的!' + if user not in invalid_user + else f'uid{user.uid}的Cookies是异常的!已删除该条Cookies!' + for user in user_list + ] + ) + + await bot.send(return_str) + + for i in invalid_user: + await bot.target_send( + f'您绑定的Cookies(uid{i.uid})已失效,以下功能将会受到影响:\n' + '查看完整信息列表\n查看深渊配队\n自动签到/当前状态/每月统计\n' + '请及时重新绑定Cookies并重新开关相应功能。', + 'direct', + target_id=i.user_id, + ) + await asyncio.sleep(3 + random.randint(1, 3)) + + +@SV('数据管理', pm=2).on_fullmatch(('校验全部Stoken')) +async def send_check_stoken(bot: Bot, ev: Event): + user_list = await active_sqla[bot.bot_id].get_all_user() + invalid_user: List[GsUser] = [] + for user in user_list: + if user.stoken and user.mys_id: + mys_data = await mys_api.get_cookie_token_by_stoken( + user.stoken, + user.mys_id, + ) + if isinstance(mys_data, int): + await active_sqla[bot.bot_id].update_user_stoken( + user.uid, None + ) + invalid_user.append(user) + continue + if len(user_list) > 4: + im = f'正常Stoken数量: {len(user_list) - len(invalid_user)}' + invalid = '\n'.join( + [f'uid{user.uid}的Stoken是异常的!已清除Stoken!\n' for user in invalid_user] + ) + return_str = f'{im}\n{invalid if invalid else "无失效Stoken!"}' + else: + return_str = '\n'.join( + [ + f'uid{user.uid}/mys{user.mys_id}的Stoken是正常的!' + if user not in invalid_user + else f'uid{user.uid}的Stoken是异常的!已清除Stoken!' + for user in user_list + ] + ) + + await bot.send(return_str) + + for i in invalid_user: + await bot.target_send( + f'您绑定的Stoken(uid{i.uid})已失效,以下功能将会受到影响:\n' + 'gs开启自动米游币,开始获取米游币。\n' + '重新添加后需要重新开启自动米游币。', + 'direct', + target_id=i.user_id, + ) + await asyncio.sleep(3 + random.randint(1, 3)) diff --git a/GenshinUID/genshinuid_check/backup_data.py b/GenshinUID/genshinuid_check/backup_data.py new file mode 100644 index 00000000..ff70a06f --- /dev/null +++ b/GenshinUID/genshinuid_check/backup_data.py @@ -0,0 +1,31 @@ +import os +import datetime +from shutil import copyfile + +from nonebot.log import logger + +from ..utils.database import active_sqla +from ..utils.resource.RESOURCE_PATH import TEMP_PATH + + +async def data_backup(): + try: + today = datetime.date.today() + endday = today - datetime.timedelta(days=5) + date_format = today.strftime("%Y_%d_%b") + endday_format = endday.strftime("%Y_%d_%b") + copyfile('ID_DATA.db', f'ID_DATA_BAK_{date_format}.db') + if os.path.exists(f'ID_DATA_BAK_{endday_format}.db'): + os.remove(f'ID_DATA_BAK_{endday_format}.db') + logger.info(f'————已删除数据库备份{endday_format}————') + logger.info('————数据库成功备份————') + for f in TEMP_PATH.glob('*.jpg'): + try: + f.unlink() + except OSError as e: + print("Error: %s : %s" % (f, e.strerror)) + for bot_id in active_sqla: + await active_sqla[bot_id].delete_cache() + logger.info('————缓存成功清除————') + except Exception: + logger.info('————数据库备份失败————') diff --git a/GenshinUID/genshinuid_collection/__init__.py b/GenshinUID/genshinuid_collection/__init__.py new file mode 100644 index 00000000..929cac18 --- /dev/null +++ b/GenshinUID/genshinuid_collection/__init__.py @@ -0,0 +1,37 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..utils.convert import get_uid +from ..utils.error_reply import UID_HINT +from .draw_collection_card import draw_explora_img, draw_collection_img + + +@SV('查询数据').on_command(('查询收集', 'sj')) +async def send_collection_info(bot: Bot, ev: Event): + await bot.logger.info('开始执行[查询收集信息]') + user_id = ev.at if ev.at else ev.user_id + + # 获取uid + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[查询角色面板]uid: {}'.format(uid)) + + im = await draw_collection_img(user_id, uid) + await bot.send(im) + + +@SV('查询数据').on_command(('查询探索', 'ts')) +async def send_explora_info(bot: Bot, ev: Event): + await bot.logger.info('开始执行[查询探索信息]') + user_id = ev.at if ev.at else ev.user_id + + # 获取uid + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[查询角色面板]uid: {}'.format(uid)) + + im = await draw_explora_img(user_id, uid) + await bot.send(im) diff --git a/GenshinUID/genshinuid_collection/draw_collection_card.py b/GenshinUID/genshinuid_collection/draw_collection_card.py new file mode 100644 index 00000000..c1d530a7 --- /dev/null +++ b/GenshinUID/genshinuid_collection/draw_collection_card.py @@ -0,0 +1,210 @@ +from pathlib import Path +from typing import Dict, Tuple, Union, Literal + +from PIL import Image, ImageDraw + +from ..utils.mys_api import mys_api +from ..utils.image.convert import convert_img +from ..utils.map.GS_MAP_PATH import avatarId2Name +from ..gsuid_utils.api.mys.models import IndexData +from ..utils.fonts.genshin_fonts import gs_font_30, gs_font_40 +from ..utils.image.image_tools import ( + draw_bar, + get_color_bg, + get_qq_avatar, + draw_pic_with_ring, +) + +TEXT_PATH = Path(__file__).parent / 'texture2D' + +first_color = (29, 29, 29) +brown_color = (41, 25, 0) +red_color = (255, 66, 66) +green_color = (74, 189, 119) + +max_data = { + '成就': 892, + '华丽的宝箱': 185, + '珍贵的宝箱': 487, + '精致的宝箱': 1589, + '普通的宝箱': 2527, + '奇馈宝箱': 146, + '解锁传送点': 286, + '解锁秘境': 48, +} + +award_data = { + '成就': 5, + '华丽的宝箱': 10, + '珍贵的宝箱': 8, + '精致的宝箱': 3, + '普通的宝箱': 1, + '奇馈宝箱': 2, + '解锁传送点': 0, + '解锁秘境': 0, +} + +expmax_data = { + '获得角色数': len(avatarId2Name) - 2, + '风神瞳': 66, + '岩神瞳': 131, + '雷神瞳': 181, + '草神瞳': 271, +} + + +async def draw_collection_img( + qid: Union[str, int], uid: str +) -> Union[str, bytes]: + return await draw_base_img(qid, uid, '收集') + + +async def draw_explora_img( + qid: Union[str, int], uid: str +) -> Union[str, bytes]: + return await draw_base_img(qid, uid, '探索') + + +async def get_base_data(uid: str) -> Union[str, IndexData]: + # 获取Cookies + raw_data = await mys_api.get_info(uid) + if isinstance(raw_data, int): + return '数据异常!' + return raw_data + + +async def get_explore_data( + uid: str, +) -> Union[str, Tuple[Dict[str, float], Dict[str, str], str, str, str]]: + raw_data = await get_base_data(uid) + if isinstance(raw_data, str): + return raw_data + + # 处理数据 + data: Dict[str, int] = { + '获得角色数': raw_data['stats']['avatar_number'], + '风神瞳': raw_data['stats']['anemoculus_number'], + '岩神瞳': raw_data['stats']['geoculus_number'], + '雷神瞳': raw_data['stats']['electroculus_number'], + '草神瞳': raw_data['stats']['dendroculus_number'], + } + for i in raw_data['world_explorations']: + data[i['name']] = i['exploration_percentage'] + + percent_data = {} + value_data = {} + day: str = str(raw_data['stats']['active_day_number']) + me_percent = 0 + world_percent = 0 + + for name in data: + # 百分比 + p_str = f'{data[name]}' + if name in expmax_data: + percent = data[name] / expmax_data[name] + if name != '获得角色数': + me_percent += percent + value = f'{p_str} / {expmax_data[name]} | {_f(percent * 100)}' + else: + percent = data[name] / 1000 + world_percent += percent + value = f'{_f(percent * 100)}' + + percent_data[name] = percent + value_data[name] = value + + me_percent = _f(me_percent * 100 / (len(expmax_data) - 1)) + world_percent = _f(world_percent * 100 / (len(data) - len(expmax_data))) + + return percent_data, value_data, day, me_percent, world_percent + + +async def get_collection_data( + uid: str, +) -> Union[str, Tuple[Dict[str, float], Dict[str, str], str, str, str]]: + raw_data = await get_base_data(uid) + if isinstance(raw_data, str): + return raw_data + raw_data = raw_data['stats'] + + # 处理数据 + data: Dict[str, int] = { + '成就': raw_data['achievement_number'], + '普通的宝箱': raw_data['common_chest_number'], + '精致的宝箱': raw_data['exquisite_chest_number'], + '珍贵的宝箱': raw_data['precious_chest_number'], + '华丽的宝箱': raw_data['luxurious_chest_number'], + '奇馈宝箱': raw_data['magic_chest_number'], + '解锁传送点': raw_data['way_point_number'], + '解锁秘境': raw_data['domain_number'], + } + percent_data = {} + value_data = {} + left = 0 + day: str = str(raw_data['active_day_number']) + all_percent = 0 + + for name in data: + # 百分比 + percent = data[name] / max_data[name] + all_percent += percent + p_str = f'{data[name]} / {max_data[name]}' + value = f'{p_str} | {_f(percent * 100)}' + # 可获石头 + left += award_data[name] * (max_data[name] - data[name]) + percent_data[name] = percent + value_data[name] = value + + all_percent = _f(all_percent * 100 / len(data)) + + return percent_data, value_data, day, all_percent, f'约{left}' + + +async def draw_base_img( + qid: Union[str, int], uid: str, mode: Literal['探索', '收集'] = '收集' +) -> Union[str, bytes]: + # 获取数据 + if mode == '收集': + data = await get_collection_data(uid) + else: + data = await get_explore_data(uid) + if isinstance(data, str): + return data + percent_data, value_data = data[0], data[1] + + # 获取背景图片各项参数 + _id = str(qid) + if _id.startswith('http'): + char_pic = await get_qq_avatar(avatar_url=_id) + else: + char_pic = await get_qq_avatar(qid=qid) + char_pic = await draw_pic_with_ring(char_pic, 264) + + if mode == '收集': + title = Image.open(TEXT_PATH / 'collection_title.png') + else: + title = Image.open(TEXT_PATH / 'explora_title.png') + + img = await get_color_bg(750, 600 + len(percent_data) * 115) + img.paste(title, (0, 0), title) + img.paste(char_pic, (241, 40), char_pic) + + for index, name in enumerate(percent_data): + percent = percent_data[name] + value = value_data[name] + bar = await draw_bar(f'·{name}', percent, value) + img.paste(bar, (0, 600 + index * 115), bar) + + # 头 + img_draw = ImageDraw.Draw(img) + img_draw.text((378, 357), f'UID {uid}', first_color, gs_font_30, 'mm') + img_draw.text((137, 498), data[2], first_color, gs_font_40, 'mm') + img_draw.text((372, 498), data[3], first_color, gs_font_40, 'mm') + img_draw.text((607, 498), data[4], first_color, gs_font_40, 'mm') + + res = await convert_img(img) + return res + + +def _f(value: float) -> str: + return '{:.2f}%'.format(value) diff --git a/GenshinUID/genshinuid_collection/texture2D/collection_title.png b/GenshinUID/genshinuid_collection/texture2D/collection_title.png new file mode 100644 index 00000000..bea76f8c Binary files /dev/null and b/GenshinUID/genshinuid_collection/texture2D/collection_title.png differ diff --git a/GenshinUID/genshinuid_collection/texture2D/explora_title.png b/GenshinUID/genshinuid_collection/texture2D/explora_title.png new file mode 100644 index 00000000..f26062a6 Binary files /dev/null and b/GenshinUID/genshinuid_collection/texture2D/explora_title.png differ diff --git a/GenshinUID/genshinuid_config/__init__.py b/GenshinUID/genshinuid_config/__init__.py new file mode 100644 index 00000000..15784e8e --- /dev/null +++ b/GenshinUID/genshinuid_config/__init__.py @@ -0,0 +1,76 @@ +import re + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..utils.database import active_sqla +from ..utils.error_reply import UID_HINT +from .draw_config_card import draw_config_img +from .set_config import set_push_value, set_config_func + + +@SV('原神配置').on_fullmatch(('gs配置', '原神配置')) +async def send_config_card(bot: Bot, ev: Event): + await bot.logger.info('开始执行[gs配置]') + im = await draw_config_img(ev.bot_id) + await bot.send(im) + + +@SV('原神配置').on_prefix(('gs设置')) +async def send_config_ev(bot: Bot, ev: Event): + await bot.logger.info('开始执行[设置阈值信息]') + + sqla = active_sqla[ev.bot_id] + uid = await sqla.get_bind_uid(ev.user_id) + if uid is None: + return await bot.send(UID_HINT) + + func = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text.replace('阈值', ''))) + value = re.findall(r'\d+', ev.text) + value = value[0] if value else None + + if value is None: + return await bot.send('请输入正确的阈值数字...') + + await bot.logger.info('[设置阈值信息]func: {}, value: {}'.format(func, value)) + im = await set_push_value(ev.bot_id, func, uid, int(value)) + await bot.send(im) + + +# 开启 自动签到 和 推送树脂提醒 功能 +@SV('原神配置').on_prefix(('gs开启', 'gs关闭')) +async def open_switch_func(bot: Bot, ev: Event): + sqla = active_sqla[ev.bot_id] + user_id = ev.user_id + config_name = ev.text + + await bot.logger.info(f'[{user_id}]尝试[{ev.command[2:]}]了[{ev.text}]功能') + + if ev.command == 'gs开启': + query = True + gid = ev.group_id if ev.group_id else 'on' + else: + query = False + gid = 'off' + + is_admin = ev.user_pm <= 2 + if ev.at and is_admin: + user_id = ev.at + elif ev.at: + return await bot.send('你没有权限...') + + uid = await sqla.get_bind_uid(ev.user_id) + if uid is None: + return await bot.send(UID_HINT) + + im = await set_config_func( + ev.bot_id, + config_name=config_name, + uid=uid, + user_id=user_id, + option=gid, + query=query, + is_admin=is_admin, + ) + await bot.send(im) diff --git a/GenshinUID/genshinuid_config/config_default.py b/GenshinUID/genshinuid_config/config_default.py new file mode 100644 index 00000000..aa7e1403 --- /dev/null +++ b/GenshinUID/genshinuid_config/config_default.py @@ -0,0 +1,85 @@ +from typing import Dict, Union + +from .models import GsStrConfig, GsBoolConfig, GsDictConfig, GsListConfig + +CONIFG_DEFAULT: Dict[ + str, Union[GsDictConfig, GsBoolConfig, GsListConfig, GsStrConfig] +] = { + 'proxy': GsStrConfig('设置代理', '设置国际服的代理地址', ''), + '_pass_API': GsStrConfig('神奇API', '设置某种神奇的API', ''), + 'random_pic_API': GsStrConfig( + '随机图API', + '用于面板查询的随机图API', + 'https://genshin-res.cherishmoon.fun/img?name=', + ), + 'Ann_Groups': GsDictConfig( + '推送公告群组', + '原神公告推送群组', + {}, + ), + 'Ann_Ids': GsListConfig( + '推送公告ID', + '原神公告推送ID列表', + [], + ), + 'MhyBBSCoinReport': GsBoolConfig( + '米游币推送', + '开启后会私聊每个用户当前米游币任务完成情况', + False, + ), + 'SignReportSimple': GsBoolConfig( + '简洁签到报告', + '开启后可以大大减少每日签到报告字数', + True, + ), + 'PrivateReport': GsBoolConfig( + '私聊报告', + '关闭后将不再给主人推送当天米游币任务完成情况', + False, + ), + 'RandomPic': GsBoolConfig( + '随机图', + '开启后[查询心海]等命令展示图将替换为随机图片', + False, + ), + 'SchedSignin': GsBoolConfig( + '定时签到', + '开启后每晚00:30将开始自动签到任务', + True, + ), + 'SchedMhyBBSCoin': GsBoolConfig( + '定时米游币', + '开启后每晚01:16将开始自动米游币任务', + True, + ), + 'CrazyNotice': GsBoolConfig( + '催命模式', + '开启后当达到推送阈值将会一直推送', + False, + ), + 'OldPanle': GsBoolConfig( + '旧面板', + '会稍微增加面板访问速度,但会损失很多功能', + False, + ), + 'OpenWeb': GsBoolConfig( + '网页控制台', + '开启后重启生效,地址位于Bot所处端口下/genshinuid', + False, + ), + 'ColorBG': GsBoolConfig( + '多彩面板', + '面板颜色不按照属性来渲染,而按照自定义颜色', + False, + ), + 'CaptchaPass': GsBoolConfig( + '失效项', + '该选项已经无效且可能有一定危险性...', + False, + ), + 'MysPass': GsBoolConfig( + '无效项', + '该选项已经无效且可能有一定危险性...', + False, + ), +} diff --git a/GenshinUID/genshinuid_config/draw_config_card.py b/GenshinUID/genshinuid_config/draw_config_card.py new file mode 100644 index 00000000..f5933714 --- /dev/null +++ b/GenshinUID/genshinuid_config/draw_config_card.py @@ -0,0 +1,78 @@ +import asyncio +from pathlib import Path +from typing import Union + +from nonebot.log import logger +from PIL import Image, ImageDraw + +from ..utils.database import active_sqla +from .config_default import CONIFG_DEFAULT +from ..utils.image.convert import convert_img +from ..utils.image.image_tools import CustomizeImage +from ..utils.resource.RESOURCE_PATH import TEXT2D_PATH +from ..utils.fonts.genshin_fonts import gs_font_24, gs_font_36, gs_font_40 + +TEXT_PATH = Path(__file__).parent / 'texture2d' +config_title = Image.open(TEXT_PATH / 'config_title.png') +config_on = Image.open(TEXT_PATH / 'config_on.png') +config_off = Image.open(TEXT_PATH / 'config_off.png') + +first_color = (20, 20, 20) +second_color = (57, 57, 57) + + +async def draw_config_img(bot_id: str) -> Union[bytes, str]: + sqla = active_sqla[bot_id] + # 获取背景图片各项参数 + based_w = 850 + based_h = 850 + 155 * (len(CONIFG_DEFAULT) - 5) + + CI_img = CustomizeImage('', based_w, based_h) + img = CI_img.bg_img + color = CI_img.bg_color + color_mask = Image.new('RGBA', (based_w, based_h), color) + config_mask = Image.open(TEXT2D_PATH / 'mask.png').resize( + (based_w, based_h) + ) + img.paste(color_mask, (0, 0), config_mask) + img.paste(config_title, (0, 0), config_title) + img_draw = ImageDraw.Draw(img) + + # 获取数据 + uid_list = await sqla.get_all_uid_list() + cookie_list = await sqla.get_all_cookie() + stoken_list = await sqla.get_all_stoken() + + uid_num = len(uid_list) + cookie_num = len(cookie_list) + stoken_num = len(stoken_list) + img_draw.text((210, 600), str(uid_num), first_color, gs_font_40, 'mm') + img_draw.text((431, 600), str(cookie_num), first_color, gs_font_40, 'mm') + img_draw.text((651, 600), str(stoken_num), first_color, gs_font_40, 'mm') + + tasks = [] + index = 0 + for name in CONIFG_DEFAULT: + if isinstance(CONIFG_DEFAULT[name].data, bool): + index += 1 + tasks.append(_draw_config_line(img, name, index)) + await asyncio.gather(*tasks) + + res = await convert_img(img) + logger.info('[查询配置信息]绘图已完成,等待发送!') + return res + + +async def _draw_config_line(img: Image.Image, name: str, index: int): + detail = CONIFG_DEFAULT[name].desc + config_line = Image.open(TEXT_PATH / 'config_line.png') + config_line_draw = ImageDraw.Draw(config_line) + if name.startswith('定时'): + name += '(全部)' + config_line_draw.text((52, 46), name, first_color, gs_font_36, 'lm') + config_line_draw.text((52, 80), detail, second_color, gs_font_24, 'lm') + if CONIFG_DEFAULT[name].data: + config_line.paste(config_on, (613, 21), config_on) + else: + config_line.paste(config_off, (613, 21), config_off) + img.paste(config_line, (26, 850 + index * 155), config_line) diff --git a/GenshinUID/genshinuid_config/gs_config.py b/GenshinUID/genshinuid_config/gs_config.py new file mode 100644 index 00000000..3830332b --- /dev/null +++ b/GenshinUID/genshinuid_config/gs_config.py @@ -0,0 +1,106 @@ +from typing import Dict, List, Union, Literal, overload + +from msgspec import json as msgjson + +from .config_default import CONIFG_DEFAULT +from ..utils.resource.RESOURCE_PATH import CONFIG_PATH +from .models import GSC, GsStrConfig, GsBoolConfig, GsDictConfig, GsListConfig + +STR_CONFIG = Literal['proxy', '_pass_API', 'random_pic_API'] +LIST_CONFIG = Literal['Ann_Ids'] +DICT_CONFIG = Literal['Ann_Groups'] + + +class StringConfig: + def __init__(self) -> None: + if not CONFIG_PATH.exists(): + with open(CONFIG_PATH, 'wb') as file: + file.write(msgjson.encode(CONIFG_DEFAULT)) + + self.config: Dict[str, GSC] = {} + self.update_config() + + def write_config(self): + with open(CONFIG_PATH, 'wb') as file: + file.write(msgjson.format(msgjson.encode(self.config), indent=4)) + + def update_config(self): + # 打开config.json + with open(CONFIG_PATH, 'r', encoding='UTF-8') as f: + self.config: Dict[str, GSC] = msgjson.decode( + f.read(), + type=Dict[str, GSC], + ) + # 对没有的值,添加默认值 + for key in CONIFG_DEFAULT: + if key not in self.config: + self.config[key] = CONIFG_DEFAULT[key] + + # 对默认值没有的值,直接删除 + delete_keys = [] + for key in self.config: + if key not in CONIFG_DEFAULT: + delete_keys.append(key) + for key in delete_keys: + self.config.pop(key) + + # 重新写回 + self.write_config() + + @overload + def get_config(self, key: STR_CONFIG) -> GsStrConfig: + ... + + @overload + def get_config(self, key: LIST_CONFIG) -> GsListConfig: + ... + + @overload + def get_config(self, key: DICT_CONFIG) -> GsDictConfig: + ... + + @overload + def get_config(self, key: str) -> GsBoolConfig: + ... + + def get_config(self, key: str) -> GSC: + if key in self.config: + return self.config[key] + elif key in CONIFG_DEFAULT: + self.update_config() + return self.config[key] + else: + return GsBoolConfig('缺省值', '获取错误的配置项', False) + + @overload + def set_config(self, key: STR_CONFIG, value: str) -> bool: + ... + + @overload + def set_config(self, key: LIST_CONFIG, value: List) -> bool: + ... + + @overload + def set_config(self, key: DICT_CONFIG, value: Dict) -> bool: + ... + + @overload + def set_config(self, key: str, value: bool) -> bool: + ... + + def set_config( + self, key: str, value: Union[str, List, bool, Dict] + ) -> bool: + if key in CONIFG_DEFAULT: + temp = self.config[key] + temp.data = value # type:ignore + # 设置值 + self.config[key] = temp + # 重新写回 + self.write_config() + return True + else: + return False + + +gsconfig = StringConfig() diff --git a/GenshinUID/genshinuid_config/models.py b/GenshinUID/genshinuid_config/models.py new file mode 100644 index 00000000..e8c45c56 --- /dev/null +++ b/GenshinUID/genshinuid_config/models.py @@ -0,0 +1,27 @@ +from typing import Dict, List, Union + +import msgspec + + +class GsConfig(msgspec.Struct, tag=True): + title: str + desc: str + + +class GsStrConfig(GsConfig, tag=True): + data: str + + +class GsBoolConfig(GsConfig, tag=True): + data: bool + + +class GsDictConfig(GsConfig, tag=True): + data: Dict[str, List] + + +class GsListConfig(GsConfig, tag=True): + data: List[str] + + +GSC = Union[GsDictConfig, GsBoolConfig, GsListConfig, GsStrConfig] diff --git a/GenshinUID/genshinuid_config/set_config.py b/GenshinUID/genshinuid_config/set_config.py new file mode 100644 index 00000000..405fc970 --- /dev/null +++ b/GenshinUID/genshinuid_config/set_config.py @@ -0,0 +1,92 @@ +from typing import Optional + +from nonebot.log import logger + +from .gs_config import gsconfig +from ..utils.database import active_sqla +from .config_default import CONIFG_DEFAULT + +PUSH_MAP = { + '宝钱': 'coin', + '体力': 'resin', + '派遣': 'go', + '质变仪': 'transform', +} +PRIV_MAP = { + '自动签到': 'sign', + '自动米游币': 'bbs', + '推送': 'push', +} + + +async def set_push_value(bot_id: str, func: str, uid: str, value: int): + sqla = active_sqla[bot_id] + if func in PUSH_MAP: + status = PUSH_MAP[func] + else: + return '该配置项不存在!' + logger.info('[设置推送阈值]func: {}, value: {}'.format(status, value)) + if await sqla.update_push_data(uid, {f'{status}_value': value}): + return f'设置成功!\n当前{func}推送阈值:{value}' + else: + return '设置失败!\n请检查参数是否正确!' + + +async def set_config_func( + bot_id: str, + config_name: str = '', + uid: str = '0', + user_id: Optional[str] = None, + option: str = '0', + query: Optional[bool] = None, + is_admin: bool = False, +): + sqla = active_sqla[bot_id] + # 这里将传入的中文config_name转换为英文status + for _name in CONIFG_DEFAULT: + config = CONIFG_DEFAULT[_name] + if config.title == config_name and isinstance(config.data, bool): + name = _name + break + else: + logger.info( + f'uid: {uid}, option: {option}, config_name: {config_name}' + ) + if config_name in PRIV_MAP: + # 执行设置 + await sqla.update_user_data( + uid, + { + 'user_id': user_id, + f'{PRIV_MAP[config_name]}_switch': option, + }, + ) + elif config_name.replace('推送', '') in PUSH_MAP: + await sqla.update_push_data( + uid, + { + f'{PUSH_MAP[config_name.replace("推送", "")]}_push': option, + }, + ) + else: + return '该配置项不存在!' + + if option == 'on': + succeed_msg = '开启至私聊消息!' + elif option == 'off': + succeed_msg = '关闭!' + else: + succeed_msg = f'开启至群{option}' + return f'{config_name}已{succeed_msg}' + + if is_admin: + logger.info(f'config_name:{config_name},query:{query}') + # 执行设置 + if query is not None: + gsconfig.set_config(name, query) + im = '成功设置{}为{}。'.format(config_name, '开' if query else '关') + else: + im = '未传入参数query!' + else: + im = '只有管理员才能设置群服务。' + return im diff --git a/GenshinUID/genshinuid_config/texture2d/config_line.png b/GenshinUID/genshinuid_config/texture2d/config_line.png new file mode 100644 index 00000000..11b99fa8 Binary files /dev/null and b/GenshinUID/genshinuid_config/texture2d/config_line.png differ diff --git a/GenshinUID/genshinuid_config/texture2d/config_off.png b/GenshinUID/genshinuid_config/texture2d/config_off.png new file mode 100644 index 00000000..7d3b8f07 Binary files /dev/null and b/GenshinUID/genshinuid_config/texture2d/config_off.png differ diff --git a/GenshinUID/genshinuid_config/texture2d/config_on.png b/GenshinUID/genshinuid_config/texture2d/config_on.png new file mode 100644 index 00000000..f289fe82 Binary files /dev/null and b/GenshinUID/genshinuid_config/texture2d/config_on.png differ diff --git a/GenshinUID/genshinuid_config/texture2d/config_title.png b/GenshinUID/genshinuid_config/texture2d/config_title.png new file mode 100644 index 00000000..7cd1ec6f Binary files /dev/null and b/GenshinUID/genshinuid_config/texture2d/config_title.png differ diff --git a/GenshinUID/genshinuid_enka/__init__.py b/GenshinUID/genshinuid_enka/__init__.py new file mode 100644 index 00000000..d103d869 --- /dev/null +++ b/GenshinUID/genshinuid_enka/__init__.py @@ -0,0 +1,60 @@ +import re +from typing import Tuple + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from .to_data import switch_api +from .to_card import enka_to_card +from ..utils.convert import get_uid +from .get_enka_img import draw_enka_img +from ..utils.error_reply import UID_HINT +from .draw_char_rank import draw_cahrcard_list + + +@SV('面板设置', pm=2).on_fullmatch('切换api') +async def send_change_api_info(bot: Bot): + await bot.send(await switch_api()) + + +@SV('面板查询', priority=10).on_prefix('查询') +async def send_char_info(bot: Bot, ev: Event): + # 获取角色名 + msg = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) + await bot.logger.info('开始执行[查询角色面板]') + # 获取uid + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[查询角色面板]uid: {}'.format(uid)) + + im = await draw_enka_img(msg, uid, ev.image) + if isinstance(im, str): + await bot.send(im) + elif isinstance(im, Tuple): + await bot.send(im[0]) + else: + await bot.send('发生未知错误') + + +@SV('面板查询', priority=10).on_command('强制刷新') +async def send_card_info(bot: Bot, ev: Event): + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[强制刷新]uid: {}'.format(uid)) + im = await enka_to_card(uid) + await bot.logger.info(f'UID{uid}获取角色数据成功!') + await bot.send(im) + + +@SV('面板查询', priority=10).on_command('毕业度统计') +async def send_charcard_list(bot: Bot, ev: Event): + uid = await get_uid(bot, ev) + user_id = ev.at if ev.at else ev.user_id + if uid is None: + return await bot.send(UID_HINT) + im = await draw_cahrcard_list(str(uid), user_id) + await bot.logger.info(f'UID{uid}获取角色数据成功!') + await bot.send(im) diff --git a/GenshinUID/genshinuid_enka/curve_calc/char_curve.json b/GenshinUID/genshinuid_enka/curve_calc/char_curve.json new file mode 100644 index 00000000..3f9cedf7 --- /dev/null +++ b/GenshinUID/genshinuid_enka/curve_calc/char_curve.json @@ -0,0 +1,58 @@ +{ + "神里绫华": {"Y": "冰伤收益", "B": "攻击收益", "J": "暴击收益"}, + "琴": {"W": "治疗加成", "X": "攻击对治疗收益"}, + "丽莎": {"B": "攻击/雷伤收益", "D": "暴击收益"}, + "芭芭拉": {"Q": "治疗加成", "R": "生命收益"}, + "凯亚": {"B": "攻击/冰伤收益", "D": "暴击收益"}, + "迪卢克": {"O": "精通收益", "B": "攻击/火伤收益", "K": "暴击收益"}, + "雷泽": {"AE": "物伤收益", "B": "攻击收益", "D": "暴击收益"}, + "安柏": {"P": "精通收益", "B": "火伤收益", "D": "暴击收益", "L": "攻击收益"}, + "温迪": {}, + "香菱": {"N": "精通收益", "B": "攻击/火伤收益", "D": "暴击收益"}, + "北斗": {"L": "雷伤收益", "B": "攻击收益", "D": "暴击收益"}, + "行秋": {"E": "精通收益", "B": "水伤收益", "L": "攻击收益", "D": "暴击收益"}, + "魈": {"AK": "风伤收益", "B": "攻击收益", "K": "暴击收益"}, + "凝光": {"L": "岩伤收益", "B": "攻击收益", "D": "暴击收益"}, + "可莉": {"E": "精通收益", "B": "攻击收益", "M": "火伤收益", "D": "暴击收益"}, + "钟离": {"M": "岩伤收益", "AB": "生命收益", "D": "暴击收益"}, + "菲谢尔": {"C": "物伤收益", "L": "攻击收益", "B": "雷伤收益", "D": "暴击收益"}, + "班尼特": {"E": "精通收益", "B": "攻击收益", "D": "暴击收益"}, + "达达利亚": {"E": "精通收益", "M": "水伤收益", "B": "攻击收益", "D": "暴击收益"}, + "诺艾尔": {"B": "岩伤收益", "AC": "防御收益", "D": "暴击收益"}, + "七七": {"W": "治疗加成", "Z": "攻击对治疗收益"}, + "重云": {"E": "精通收益", "B": "冰伤收益", "L": "攻击收益", "D": "暴击收益"}, + "甘雨": {"E": "精通收益", "B": "攻击/冰伤收益", "J": "暴击收益"}, + "阿贝多": {"M": "岩伤收益", "C": "防御收益", "D": "暴击收益"}, + "迪奥娜": {"Q": "治疗加成", "AA": "生命收益"}, + "莫娜": {"E": "精通收益", "S": "水伤收益", "B": "攻击收益", "D": "暴击收益"}, + "刻晴": {"C": "物伤收益", "B": "攻击/雷伤收益", "J": "暴击收益"}, + "砂糖": {}, + "辛焱": {"C": "物伤收益", "L": "攻击收益", "D": "暴击收益", "B": "火伤收益"}, + "罗莎莉亚": {"L": "攻击收益", "D": "暴击收益", "B": "冰伤收益"}, + "胡桃": {"I": "精通收益", "B": "火伤收益", "H": "生命收益", "J": "暴击收益"}, + "枫原万叶": {}, + "烟绯": {"E": "精通收益", "B": "攻击收益", "L": "火伤收益", "D": "暴击收益"}, + "宵宫": {"O": "精通收益", "B": "攻击/火伤收益", "K": "暴击收益"}, + "托马": {}, + "优菈": {"C": "物伤收益", "B": "攻击收益", "J": "暴击收益"}, + "雷电将军": {"AG": "攻击收益", "AF": "雷伤收益", "D": "暴击收益"}, + "早柚": {"Q": "治疗加成", "AL": "攻击对治疗收益", "AM": "精通对治疗收益"}, + "珊瑚宫心海": {"M": "水伤收益", "T": "生命收益"}, + "五郎": {"L": "岩伤收益", "C": "防御收益", "D": "暴击收益"}, + "九条裟罗": {"L": "攻击收益", "B": "雷伤收益", "D": "暴击收益"}, + "荒泷一斗": {"B": "岩伤收益", "AD": "防御收益", "K": "暴击收益"}, + "八重神子": {"B": "攻击/雷伤收益", "K": "暴击收益"}, + "鹿野院平藏": {"L": "风伤收益", "B": "攻击收益", "D": "暴击收益"}, + "夜兰": {"B": "水伤收益", "U": "生命收益", "K": "暴击收益"}, + "埃洛伊": {"B": "攻击收益", "M": "冰伤收益", "D": "暴击收益"}, + "申鹤": {"B": "冰伤收益", "M": "攻击收益", "D": "暴击收益"}, + "云堇": {"B": "岩伤收益", "C": "防御收益", "D": "暴击收益"}, + "久岐忍": {"Q": "治疗加成", "AH": "生命对治疗收益", "AI": "精通对治疗收益"}, + "神里绫人": {"B": "水伤收益", "V": "4浪闪攻击收益", "J": "暴击收益"}, + "柯莱": {}, + "多莉": {"Q": "治疗加成", "AJ": "生命对治疗收益"}, + "提纳里": {}, + "妮露": {}, + "赛诺": {"B": "雷伤收益", "L": "攻击收益", "J": "暴击收益"}, + "坎蒂丝": {"B": "水伤收益", "L": "生命收益", "D": "暴击收益"} +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/curve_calc/curve.json b/GenshinUID/genshinuid_enka/curve_calc/curve.json new file mode 100644 index 00000000..f051f912 --- /dev/null +++ b/GenshinUID/genshinuid_enka/curve_calc/curve.json @@ -0,0 +1,11780 @@ +{ + "B": [ + 0.015, + 0.01477832512315271, + 0.014563106796116504, + 0.014354066985645933, + 0.014150943396226414, + 0.013953488372093023, + 0.013761467889908256, + 0.013574660633484163, + 0.01339285714285714, + 0.013215859030837003, + 0.013043478260869566, + 0.012875536480686695, + 0.012711864406779662, + 0.012552301255230124, + 0.012396694214876033, + 0.012244897959183673, + 0.012096774193548387, + 0.01195219123505976, + 0.011811023622047244, + 0.011673151750972763, + 0.011538461538461537, + 0.011406844106463879, + 0.011278195488721804, + 0.011152416356877323, + 0.011029411764705883, + 0.010909090909090908, + 0.010791366906474819, + 0.010676156583629892, + 0.01056338028169014, + 0.010452961672473867, + 0.010344827586206896, + 0.010238907849829353, + 0.010135135135135136, + 0.01003344481605351, + 0.009933774834437087, + 0.009836065573770493, + 0.00974025974025974, + 0.00964630225080386, + 0.009554140127388536, + 0.00946372239747634, + 0.009375, + 0.009287925696594427, + 0.009202453987730062, + 0.00911854103343465, + 0.009036144578313253, + 0.008955223880597015, + 0.008875739644970414, + 0.00879765395894428, + 0.00872093023255814, + 0.008645533141210375, + 0.008571428571428572, + 0.008498583569405098, + 0.008426966292134831, + 0.008356545961002786, + 0.008287292817679558, + 0.00821917808219178, + 0.008152173913043478, + 0.008086253369272238, + 0.00802139037433155, + 0.007957559681697613, + 0.007894736842105263, + 0.007832898172323759, + 0.007772020725388601, + 0.007712082262210798, + 0.007653061224489796, + 0.007594936708860759, + 0.007537688442211055, + 0.007481296758104738, + 0.007425742574257425, + 0.00737100737100737, + 0.007317073170731708, + 0.007263922518159807, + 0.007211538461538461, + 0.007159904534606206, + 0.007109004739336493, + 0.007058823529411764, + 0.007009345794392524, + 0.006960556844547563, + 0.006912442396313364, + 0.006864988558352402, + 0.006818181818181817, + 0.006772009029345372, + 0.0067264573991031385, + 0.006681514476614699, + 0.006637168141592921, + 0.006593406593406593, + 0.006550218340611353, + 0.0065075921908893716, + 0.00646551724137931, + 0.006423982869379015, + 0.006382978723404256, + 0.006342494714587737, + 0.0063025210084033615, + 0.006263048016701461, + 0.006224066390041493, + 0.006185567010309279, + 0.006147540983606557, + 0.006109979633401222, + 0.006072874493927126, + 0.006036217303822938, + 0.006, + 0.005964214711729623, + 0.005928853754940711, + 0.005893909626719057, + 0.005859375, + 0.005825242718446601, + 0.005791505791505791, + 0.005758157389635317, + 0.005725190839694656, + 0.0056925996204933585, + 0.005660377358490566, + 0.005628517823639775, + 0.005597014925373135, + 0.0055658627087198514, + 0.005535055350553505, + 0.005504587155963303, + 0.005474452554744525, + 0.0054446460980036296, + 0.005415162454873646, + 0.0053859964093357264, + 0.005357142857142857, + 0.0053285968028419185, + 0.005300353356890459, + 0.005272407732864675, + 0.005244755244755245, + 0.005217391304347826, + 0.005190311418685122, + 0.005163511187607573, + 0.005136986301369863, + 0.0051107325383304945, + 0.005084745762711864, + 0.00505902192242833, + 0.0050335570469798654, + 0.005008347245409015, + 0.004983388704318937, + 0.0049586776859504135, + 0.004934210526315789, + 0.004909983633387889, + 0.00488599348534202, + 0.00486223662884927, + 0.004838709677419354, + 0.004815409309791333, + 0.004792332268370607, + 0.0047694753577106515, + 0.004746835443037974, + 0.004724409448818898, + 0.004702194357366771, + 0.004680187207488299, + 0.004658385093167702, + 0.00463678516228748, + 0.004615384615384615, + 0.004594180704441041, + 0.004573170731707317, + 0.004552352048558422, + 0.004531722054380664, + 0.004511278195488722, + 0.004491017964071856, + 0.004470938897168405, + 0.004451038575667655, + 0.004431314623338257, + 0.004411764705882353, + 0.004392386530014641, + 0.004373177842565598, + 0.0043541364296081275, + 0.004335260115606936, + 0.004316546762589928, + 0.004297994269340974, + 0.0042796005706134095, + 0.004261363636363636, + 0.004243281471004243, + 0.004225352112676057, + 0.004207573632538569, + 0.004189944134078212, + 0.004172461752433936, + 0.004155124653739612, + 0.004137931034482759, + 0.004120879120879121, + 0.004103967168262654, + 0.004087193460490463, + 0.004070556309362279, + 0.004054054054054054, + 0.004037685060565276, + 0.004021447721179625, + 0.004005340453938584, + 0.003989361702127659, + 0.003973509933774834, + 0.003957783641160949, + 0.003942181340341656, + 0.003926701570680628, + 0.003911342894393742, + 0.0038961038961038957, + 0.0038809831824062097, + 0.003865979381443299, + 0.003851091142490372, + 0.0038363171355498722, + 0.003821656050955414, + 0.0038071065989847713, + 0.0037926675094816687, + 0.003778337531486146, + 0.0037641154328732747, + 0.00375, + 0.0037359900373599006, + 0.003722084367245658, + 0.003708281829419036, + 0.0036945812807881767, + 0.003680981595092025, + 0.003667481662591687, + 0.0036540803897685743, + 0.003640776699029126, + 0.0036275695284159614, + 0.003614457831325301, + 0.003601440576230492, + 0.0035885167464114833, + 0.003575685339690107, + 0.003562945368171021, + 0.003550295857988166, + 0.0035377358490566034, + 0.0035252643948296123, + 0.0035128805620608904, + 0.0035005834305717617, + 0.0034883720930232558, + 0.003476245654692932, + 0.0034642032332563508, + 0.0034522439585730727, + 0.0034403669724770644, + 0.0034285714285714284, + 0.003416856492027335, + 0.0034052213393870605, + 0.003393665158371041, + 0.003382187147688838, + 0.003370786516853933, + 0.0033594624860022394, + 0.003348214285714285, + 0.003337041156840935, + 0.0033259423503325942, + 0.003314917127071823, + 0.0033039647577092508, + 0.003293084522502744, + 0.0032822757111597373, + 0.003271537622682661, + 0.0032608695652173916, + 0.0032502708559046583, + 0.0032397408207343412, + 0.0032292787944025836, + 0.003218884120171674, + 0.0032085561497326204, + 0.003198294243070363, + 0.003188097768331562, + 0.0031779661016949155, + 0.0031678986272439284, + 0.003157894736842105, + 0.0031479538300104933, + 0.0031380753138075318, + 0.0031282586027111575, + 0.0031185031185031182, + 0.0031088082901554407, + 0.0030991735537190084, + 0.0030895983522142116, + 0.0030800821355236145, + 0.0030706243602865915, + 0.003061224489795918, + 0.003051881993896236, + 0.0030425963488843813, + 0.0030333670374115265, + 0.0030241935483870967, + 0.0030150753768844224, + 0.003006012024048096, + 0.002997002997002997, + 0.00298804780876494, + 0.002979145978152929, + 0.0029702970297029703, + 0.0029615004935834156, + 0.002952755905511811, + 0.002944062806673209, + 0.002935420743639922, + 0.002926829268292683, + 0.0029182879377431907, + 0.0029097963142580016, + 0.0029013539651837525, + 0.0028929604628736743, + 0.0028846153846153843, + 0.0028763183125599234, + 0.0028680688336520078, + 0.002859866539561487, + 0.0028517110266159697, + 0.0028436018957345975, + 0.0028355387523629487, + 0.002827521206409048, + 0.002819548872180451, + 0.0028116213683223993, + 0.0028037383177570096, + 0.0027958993476234852, + 0.0027881040892193307, + 0.0027803521779425394, + 0.0027726432532347504, + 0.0027649769585253456, + 0.0027573529411764708, + 0.002749770852428964, + 0.002742230347349177, + 0.0027347310847766638 + ], + "C": [ + 0.01875, + 0.01840490797546012, + 0.018072289156626505, + 0.01775147928994083, + 0.01744186046511628, + 0.017142857142857144, + 0.016853932584269662, + 0.016574585635359115, + 0.016304347826086956, + 0.016042780748663103, + 0.015789473684210527, + 0.015544041450777202, + 0.01530612244897959, + 0.015075376884422112, + 0.01485148514851485, + 0.014634146341463414, + 0.014423076923076922, + 0.014218009478672985, + 0.014018691588785047, + 0.013824884792626727, + 0.013636363636363636, + 0.013452914798206277, + 0.013274336283185839, + 0.013100436681222708, + 0.01293103448275862, + 0.01276595744680851, + 0.012605042016806721, + 0.012448132780082987, + 0.012295081967213115, + 0.012145748987854251, + 0.012, + 0.011857707509881424, + 0.011718749999999998, + 0.011583011583011582, + 0.011450381679389313, + 0.011320754716981131, + 0.01119402985074627, + 0.01107011070110701, + 0.010948905109489052, + 0.010830324909747292, + 0.010714285714285714, + 0.01060070671378092, + 0.010489510489510488, + 0.010380622837370242, + 0.010273972602739725, + 0.010169491525423728, + 0.010067114093959733, + 0.009966777408637873, + 0.009868421052631578, + 0.009771986970684038, + 0.00967741935483871, + 0.009584664536741215, + 0.009493670886075948, + 0.009404388714733543, + 0.009316770186335402, + 0.00923076923076923, + 0.009146341463414635, + 0.00906344410876133, + 0.008982035928143712, + 0.00890207715133531, + 0.008823529411764706, + 0.008746355685131196, + 0.008670520231213874, + 0.008595988538681949, + 0.008522727272727272, + 0.008450704225352112, + 0.008379888268156424, + 0.008310249307479225, + 0.008241758241758242, + 0.008174386920980926, + 0.008108108108108109, + 0.00804289544235925, + 0.00797872340425532, + 0.0079155672823219, + 0.007853403141361256, + 0.007792207792207792, + 0.007731958762886598, + 0.007672634271099745, + 0.007614213197969543, + 0.007556675062972291, + 0.0075, + 0.007444168734491315, + 0.007389162561576355, + 0.007334963325183374, + 0.007281553398058252, + 0.007228915662650602, + 0.007177033492822967, + 0.007125890736342043, + 0.007075471698113208, + 0.007025761124121779, + 0.0069767441860465115, + 0.006928406466512702, + 0.006880733944954129, + 0.00683371298405467, + 0.006787330316742081, + 0.006741573033707865, + 0.006696428571428572, + 0.006651884700665189, + 0.006607929515418502, + 0.006564551422319475, + 0.006521739130434782, + 0.0064794816414686825, + 0.0064377682403433485, + 0.006396588486140725, + 0.00635593220338983, + 0.00631578947368421, + 0.006276150627615063, + 0.0062370062370062365, + 0.006198347107438017, + 0.006160164271047228, + 0.006122448979591836, + 0.006085192697768763, + 0.006048387096774193, + 0.006012024048096192, + 0.00597609561752988, + 0.005940594059405941, + 0.005905511811023622, + 0.005870841487279843, + 0.005836575875486381, + 0.005802707930367505, + 0.005769230769230769, + 0.0057361376673040155, + 0.0057034220532319385, + 0.005671077504725898, + 0.005639097744360903, + 0.005607476635514018, + 0.0055762081784386614, + 0.005545286506469501, + 0.0055147058823529415, + 0.005484460694698355, + 0.005454545454545454, + 0.0054249547920434, + 0.0053956834532374095, + 0.005366726296958855, + 0.005338078291814947, + 0.005309734513274336, + 0.00528169014084507, + 0.005253940455341506, + 0.005226480836236933, + 0.005199306759098787, + 0.005172413793103448, + 0.005145797598627788, + 0.005119453924914676, + 0.0050933786078098476, + 0.005067567567567568, + 0.0050420168067226885, + 0.005016722408026756, + 0.004991680532445923, + 0.004966887417218543, + 0.0049423393739703465, + 0.0049180327868852455, + 0.004893964110929854, + 0.00487012987012987, + 0.004846526655896607, + 0.00482315112540193, + 0.0048, + 0.004777070063694267, + 0.004754358161648177, + 0.00473186119873817, + 0.004709576138147567, + 0.0046875, + 0.004665629860031105, + 0.0046439628482972135, + 0.004622496147919876, + 0.004601226993865031, + 0.004580152671755725, + 0.004559270516717325, + 0.0045385779122541605, + 0.004518072289156626, + 0.004497751124437782, + 0.004477611940298508, + 0.004457652303120356, + 0.004437869822485207, + 0.004418262150220912, + 0.004398826979472141, + 0.00437956204379562, + 0.00436046511627907, + 0.004341534008683068, + 0.004322766570605187, + 0.004304160688665711, + 0.004285714285714286, + 0.004267425320056899, + 0.00424929178470255, + 0.0042313117066290545, + 0.0042134831460674165, + 0.004195804195804196, + 0.004178272980501393, + 0.004160887656033287, + 0.004143646408839779, + 0.004126547455295736, + 0.00410958904109589, + 0.004092769440654843, + 0.004076086956521739, + 0.0040595399188092015, + 0.004043126684636119, + 0.004026845637583892, + 0.004010695187165776, + 0.0039946737683089215, + 0.0039787798408488055, + 0.003963011889035668, + 0.003947368421052632, + 0.003931847968545216, + 0.00391644908616188, + 0.0039011703511053313, + 0.003886010362694301, + 0.003870967741935484, + 0.0038560411311053984, + 0.0038412291933418697, + 0.0038265306122448974, + 0.003811944091486659, + 0.0037974683544303796, + 0.0037831021437578815, + 0.003768844221105528, + 0.003754693366708385, + 0.003740648379052369, + 0.0037267080745341614, + 0.0037128712871287127, + 0.0036991368680641184, + 0.0036855036855036856, + 0.003671970624235006, + 0.0036585365853658534, + 0.0036452004860267314, + 0.0036319612590799033, + 0.003618817852834741, + 0.0036057692307692305, + 0.003592814371257485, + 0.003579952267303103, + 0.0035671819262782403, + 0.0035545023696682467, + 0.0035419126328217233, + 0.003529411764705882, + 0.0035169988276670576, + 0.0035046728971962616, + 0.003492433061699651, + 0.0034802784222737818, + 0.003468208092485549, + 0.003456221198156682, + 0.0034443168771526983, + 0.0034324942791762016, + 0.003420752565564424, + 0.003409090909090909, + 0.0033975084937712344, + 0.003386004514672686, + 0.0033745781777277844, + 0.0033632286995515692, + 0.0033519553072625698, + 0.0033407572383073497, + 0.0033296337402885685, + 0.0033185840707964606, + 0.00330760749724366, + 0.0032967032967032967, + 0.0032858707557502738, + 0.003275109170305677, + 0.003264417845484222, + 0.0032537960954446853, + 0.003243243243243243, + 0.003232758620689655, + 0.00322234156820623, + 0.0032119914346895075, + 0.0032017075773745998, + 0.0031914893617021275, + 0.003181336161187699, + 0.003171247357293869, + 0.003161222339304531, + 0.0031512605042016803, + 0.0031413612565445023, + 0.003131524008350731, + 0.003121748178980229, + 0.003112033195020747, + 0.0031023784901758012, + 0.003092783505154639, + 0.003083247687564234, + 0.0030737704918032786, + 0.003064351378958121, + 0.003054989816700611, + 0.003045685279187817, + 0.003036437246963563, + 0.003027245206861756, + 0.003018108651911469, + 0.003009027081243731, + 0.003, + 0.002991026919242273, + 0.002982107355864811, + 0.002973240832507433, + 0.0029644268774703555, + 0.0029556650246305416, + 0.0029469548133595285, + 0.002938295788442703, + 0.0029296875, + 0.0029211295034079843, + 0.002912621359223301, + 0.002904162633107454, + 0.0028957528957528956, + 0.002887391722810395, + 0.002879078694817658, + 0.0028708133971291866, + 0.0028625954198473282, + 0.0028544243577545195, + 0.0028462998102466793, + 0.002838221381267739 + ], + "D": [ + 0.0048543689320388345, + 0.004830917874396136, + 0.004807692307692308, + 0.004784688995215312, + 0.0047619047619047615, + 0.004739336492890996, + 0.0047169811320754715, + 0.004694835680751174, + 0.004672897196261682, + 0.004651162790697674, + 0.004629629629629629, + 0.004608294930875576, + 0.004587155963302752, + 0.004566210045662101, + 0.004545454545454545, + 0.004524886877828055, + 0.0045045045045045045, + 0.004484304932735426, + 0.004464285714285714, + 0.0044444444444444444, + 0.004424778761061948, + 0.004513074642714924, + 0.004580690627202255, + 0.004647288351089482, + 0.004712864374236342, + 0.0047774158523344185, + 0.004840940525587829, + 0.004903436706955138, + 0.004964903269988016, + 0.005025339636301691, + 0.005084745762711865, + 0.005143122128072173, + 0.005200469719845664, + 0.0052567900204430725, + 0.005312084993359893, + 0.0053663570691434475, + 0.005419609131220233, + 0.005471844501612969, + 0.0055230669265757, + 0.005573280562174388, + 0.005622489959839358, + 0.0056707000519148594, + 0.005717916137229989, + 0.005764143866714044, + 0.005809389229078348, + 0.005853658536585367, + 0.005896958410924891, + 0.0059392957692159356, + 0.005980677810151817, + 0.006021112000304867, + 0.006060606060606061, + 0.006099167953013816, + 0.0061368058673851224, + 0.006173528208561121, + 0.0062093435836782975, + 0.006244260789715335, + 0.00627828880128486, + 0.006311436758678225, + 0.006343713956170704, + 0.00637512983059346, + 0.006405693950177937, + 0.006435416003677381, + 0.006464305789769534, + 0.00649237320674369, + 0.006519628242474685, + 0.006546080964685617, + 0.006571741511500548, + 0.006596620082287735, + 0.006620726928793406, + 0.006644072346565551, + 0.006666666666666667, + 0.006688520247673919, + 0.006709643467964742, + 0.006730046718285471, + 0.006749740394600207, + 0.006768734891216761, + 0.006787040594186195, + 0.006804667874972178, + 0.006821627084386053, + 0.006837928546783351, + 0.006853582554517134, + 0.006868599362643482, + 0.00688298918387414, + 0.006896762183771249, + 0.0069099284761789306, + 0.006922498118886381, + 0.006934481109516976, + 0.006945887381637925, + 0.006956726801084778, + 0.0069670091624952435, + 0.006976744186046511, + 0.0069859415143904615, + 0.006994610709780988, + 0.007002761251387743, + 0.007010402532790593, + 0.007017543859649123, + 0.007024194447541532, + 0.007030363419967339, + 0.007036059806508355, + 0.007041292541142437, + 0.007046070460704607, + 0.007050402303490219, + 0.00705429670799487, + 0.007057762211785931, + 0.007060807250500582, + 0.007063440156965337, + 0.0070656691604322535, + 0.0070675023859269005, + 0.007068947853703514, + 0.007070013478802675, + 0.007070707070707072, + 0.007071036333090946, + 0.007071008863658999, + 0.007070632154070558, + 0.007069913589945012, + 0.007068860450944544, + 0.007067479910930392, + 0.007065779038188854, + 0.007063764795723558, + 0.007061444041610388, + 0.007058823529411764, + 0.007055909908646995, + 0.007052709725315518, + 0.007049229422469996, + 0.007045475340836308, + 0.00704145371947757, + 0.007037170696499458, + 0.007032632309794173, + 0.0070278444978204785, + 0.007022813100417393, + 0.007017543859649122, + 0.007012042420678991, + 0.007006314332670183, + 0.007000365049711182, + 0.0069941999317639034, + 0.00698782424563261, + 0.006981243165951721, + 0.006974461776190774, + 0.006967485069674852, + 0.006960317950618811, + 0.006952965235173825, + 0.006945431652484719, + 0.0069377218457566964, + 0.006929840373330128, + 0.006921791709762115, + 0.006913580246913581, + 0.0069052102950408045, + 0.006896686083890199, + 0.006888011763795372, + 0.0068791914067754265, + 0.0068702290076335885, + 0.0068611284850552505, + 0.0068518936827046155, + 0.006842528370319131, + 0.00683303624480095, + 0.006823420931304748, + 0.0068136859843211965, + 0.006803834888755481, + 0.006793871061000289, + 0.006783797850002691, + 0.00677361853832442, + 0.0067633363431950574, + 0.006752954417557681, + 0.00674247585110657, + 0.006731903671316538, + 0.006721240844463593, + 0.006710490276636538, + 0.00669965481473924, + 0.006688737247483279, + 0.0066777403063706985, + 0.006666666666666667, + 0.006622516556291391, + 0.006578947368421052, + 0.006535947712418301, + 0.006493506493506493, + 0.0064516129032258064, + 0.00641025641025641, + 0.006369426751592356, + 0.006329113924050633, + 0.006289308176100628, + 0.0062499999999999995, + 0.006211180124223602, + 0.006172839506172839, + 0.006134969325153374, + 0.0060975609756097554, + 0.0060606060606060615, + 0.006024096385542169, + 0.005988023952095809, + 0.005952380952380953, + 0.00591715976331361, + 0.0058823529411764705, + 0.0058479532163742695, + 0.005813953488372093, + 0.005780346820809249, + 0.005747126436781609, + 0.005714285714285714, + 0.005681818181818182, + 0.005649717514124294, + 0.0056179775280898875, + 0.00558659217877095, + 0.005555555555555556, + 0.0055248618784530384, + 0.005494505494505494, + 0.00546448087431694, + 0.005434782608695652, + 0.005405405405405405, + 0.005376344086021506, + 0.0053475935828877, + 0.0053191489361702135, + 0.005291005291005291, + 0.005263157894736843, + 0.005235602094240837, + 0.005208333333333334, + 0.0051813471502590676, + 0.005154639175257732, + 0.005128205128205128, + 0.005102040816326531, + 0.005076142131979696, + 0.005050505050505051, + 0.005025125628140704, + 0.005, + 0.0049751243781094535, + 0.0049504950495049506, + 0.004926108374384236, + 0.004901960784313725, + 0.004878048780487806, + 0.0048543689320388345, + 0.004830917874396135, + 0.004807692307692308, + 0.004784688995215312, + 0.0047619047619047615, + 0.004739336492890996, + 0.0047169811320754715, + 0.004694835680751174, + 0.004672897196261682, + 0.004651162790697674, + 0.004629629629629629, + 0.004608294930875576, + 0.004587155963302752, + 0.004566210045662101, + 0.004545454545454545, + 0.004524886877828055, + 0.004504504504504505, + 0.004484304932735426, + 0.004464285714285714, + 0.0044444444444444444, + 0.004424778761061948, + 0.004405286343612335, + 0.0043859649122807015, + 0.004366812227074236, + 0.004347826086956522, + 0.004329004329004329, + 0.004310344827586207, + 0.004291845493562232, + 0.004273504273504274, + 0.00425531914893617, + 0.00423728813559322, + 0.004219409282700422, + 0.004201680672268908, + 0.0041841004184100415, + 0.004166666666666667, + 0.004149377593360996, + 0.004132231404958678, + 0.004115226337448559, + 0.004098360655737705, + 0.004081632653061224, + 0.0040650406504065045, + 0.004048582995951418, + 0.004032258064516129, + 0.004016064257028112, + 0.004, + 0.003984063745019921, + 0.003968253968253968, + 0.003952569169960474, + 0.003937007874015748, + 0.00392156862745098, + 0.00390625, + 0.003891050583657587, + 0.003875968992248062, + 0.003861003861003861, + 0.003846153846153846, + 0.0038314176245210726, + 0.003816793893129771, + 0.003802281368821293, + 0.003787878787878788, + 0.003773584905660377, + 0.0037593984962406013, + 0.003745318352059925, + 0.00373134328358209, + 0.003717472118959108, + 0.0037037037037037034, + 0.003690036900369004, + 0.0036764705882352945, + 0.003663003663003663, + 0.0036496350364963502, + 0.0036363636363636364, + 0.003623188405797102, + 0.0036101083032490976, + 0.003597122302158273, + 0.0035842293906810036 + ], + "E": [ + 0.011914285714285714, + 0.011674318431173173, + 0.01144230062134162, + 0.011217858615705487, + 0.011000641572189532, + 0.010790319763492751, + 0.010586583016582093, + 0.010389139288461056, + 0.010197713364531326, + 0.010012045667413288, + 0.009831891165444558, + 0.00965701837126164, + 0.009487208421910948, + 0.009322254232851133, + 0.009161959719015659, + 0.00900613907681675, + 0.008854616121601697, + 0.008707223675630234, + 0.008563803002136638, + 0.008424203281479702, + 0.008288281125775163, + 0.008155900128753694, + 0.008026930447898869, + 0.007901248416197597, + 0.007778736181084501, + 0.0076592813683848005, + 0.0075427767692604905, + 0.007429120048344508, + 0.007318213471409478, + 0.007209963651063348, + 0.007104281309095865, + 0.00700108105421842, + 0.006900281174047264, + 0.006801803440277148, + 0.006705572926080466, + 0.00661151783484682, + 0.006519569339450367, + 0.006429661431298144, + 0.006341730778472546, + 0.006255716592335652, + 0.006171560502012788, + 0.006089206436218191, + 0.006008600511927, + 0.005929690929435683, + 0.005852427873387705, + 0.005776763419372937, + 0.005702651445738383, + 0.005630047550274501, + 0.005558908971465867, + 0.00548919451401739, + 0.00542086447838804, + 0.005353880594083024, + 0.005288205956472866, + 0.005223804966924045, + 0.0051606432760407045, + 0.005098687729830686, + 0.0050379063186218416, + 0.004978268128566341, + 0.00491974329558148, + 0.004862302961585591, + 0.00480591923289692, + 0.004750565140671981, + 0.004696214603267845, + 0.00464284239042029, + 0.004590424089136569, + 0.004538936071207961, + 0.004488355462253253, + 0.004438660112209753, + 0.004389828567193643, + 0.004341840042656236, + 0.004294674397767181, + 0.0042483121109598, + 0.004202734256577632, + 0.004157922482564894, + 0.004113858989146911, + 0.004070526508449759, + 0.0040279082850113125, + 0.0039859880571386135, + 0.003944750039069108, + 0.003904178903895687, + 0.003864259767217733, + 0.0038249781714824855, + 0.003786320070983059, + 0.0037482718174812746, + 0.0037108201464252258, + 0.0036739521637331584, + 0.003637655333116761, + 0.0036019174639184185, + 0.003566726699438356, + 0.0035320715057288593, + 0.0034979406608339693, + 0.0034643232444541957, + 0.0034312086280168306, + 0.0033985864651334776, + 0.003366446682427342, + 0.003334779470713719, + 0.003303575276517965, + 0.0032728247939160307, + 0.0032425189566833686, + 0.003212648930738756, + 0.003183206106870229, + 0.003154182093730946, + 0.003125568711093415, + 0.0030973579833510696, + 0.0030695421332567006, + 0.003042113575887785, + 0.003015064912829195, + 0.002988388926564248, + 0.002962078575065464, + 0.0029361269865768305, + 0.0029105274545797185, + 0.002885273432935002, + 0.0028603585311942335, + 0.0028357765100730926, + 0.0028115212770806136, + 0.0027875868822979876, + 0.002763967514301046, + 0.002740657496220752, + 0.002717651281936313, + 0.0026949434523957623, + 0.002672528712059065, + 0.0026504018854590374, + 0.0026285579138755834, + 0.002606991852118919, + 0.0025856988654176603, + 0.0025646742264078416, + 0.0025439133122190562, + 0.002523411601654123, + 0.0025031646724588013, + 0.0024831681986782284, + 0.0024634179480969064, + 0.002443909779759188, + 0.002424639641567324, + 0.0024056035679542913, + 0.0023867976776286884, + 0.0023682181713891417, + 0.0023498613300057345, + 0.002331723512166089, + 0.002313801152483824, + 0.002296090759567196, + 0.0022785889141458296, + 0.002261292267253511, + 0.0022441975384651152, + 0.002227301514185801, + 0.00221060104599068, + 0.00219409304901325, + 0.002177774500380928, + 0.0021616424376960995, + 0.002145693957561158, + 0.0021299262141460506, + 0.0021143364177969325, + 0.0020989218336845547, + 0.0020836797804910804, + 0.0020686076291340713, + 0.0020537028015264183, + 0.002038962769371063, + 0.002024385052989371, + 0.0020099672201820762, + 0.0019957068851217514, + 0.0019816017072758, + 0.00196764939035899, + 0.001953847681314605, + 0.0019401943693233032, + 0.0019266872848388147, + 0.0019133242986496424, + 0.0019001033209659541, + 0.0018870223005308822, + 0.0018740792237554869, + 0.001861272113876645, + 0.0018485990301371734, + 0.0018360580669874998, + 0.001823647353308234, + 0.0018113650516530073, + 0.0017992093575109678, + 0.0017871784985883433, + 0.0017752707341085064, + 0.0017634843541299873, + 0.0017518176788819048, + 0.001740269058116306, + 0.00172883687047691, + 0.0017175195228837853, + 0.0017063154499334927, + 0.0016952231133142417, + 0.0016842410012356352, + 0.0016733676278725743, + 0.001662601532822924, + 0.0016519412805785423, + 0.0016413854600092965, + 0.0016309326838596957, + 0.0016205815882577865, + 0.0016103308322359656, + 0.0016001790972633753, + 0.0015901250867895612, + 0.001580167525799077, + 0.0015703051603767346, + 0.0015605367572832064, + 0.001550861103540694, + 0.001541277006028389, + 0.0015317832910874602, + 0.0015223788041353065, + 0.0015130624092888243, + 0.0015038329889964504, + 0.0014946894436787398, + 0.0014856306913772533, + 0.0014766556674115337, + 0.001467763324043952, + 0.0014589526301522196, + 0.001450222570909363, + 0.001441572147470964, + 0.0014330003766694754, + 0.00142450629071543, + 0.0014160889369053593, + 0.001407747377336253, + 0.0013994806886263869, + 0.0013912879616423577, + 0.0013831683012321642, + 0.0013751208259641806, + 0.0013671446678718744, + 0.0013592389722041174, + 0.0013514028971809574, + 0.0013436356137547043, + 0.001335936305376202, + 0.0013283041677661543, + 0.0013207384086913836, + 0.0013132382477458913, + 0.0013058029161366082, + 0.0012984316564737185, + 0.00129112372256544, + 0.0012838783792171557, + 0.0012766949020347914, + 0.0012695725772323319, + 0.0012625107014433768, + 0.0012555085815366411, + 0.001248565534435303, + 0.0012416808869401017, + 0.00123485397555611, + 0.001228084146323075, + 0.0012213707546492561, + 0.0012147131651486732, + 0.0012081107514816812, + 0.0012015628961987968, + 0.0011950689905876996, + 0.001188628434523334, + 0.0011822406363210351, + 0.0011759050125926174, + 0.0011696209881053472, + 0.0011633879956437399, + 0.0011572054758741113, + 0.0011510728772118266, + 0.0011449896556911766, + 0.0011389552748378286, + 0.0011329692055437894, + 0.001127030925944825, + 0.0011211399213002793, + 0.0011152956838752421, + 0.0011094977128250087, + 0.0011037455140817812, + 0.0010980386002435645, + 0.0010923764904652038, + 0.0010867587103515174, + 0.0010811847918524818, + 0.0010756542731604165, + 0.0010701666986091323, + 0.0010647216185749955, + 0.0010593185893798664, + 0.0010539571731958725, + 0.0010486369379519764, + 0.0010433574572422982, + 0.0010381183102361553, + 0.0010329190815897829, + 0.0010277593613596985, + 0.0010226387449176757, + 0.0010175568328672907, + 0.0010125132309620137, + 0.0010075075500248036, + 0.001002539405869183, + 0.0009976084192217564, + 0.0009927142156461424, + 0.0009878564254682937, + 0.0009830346837031686, + 0.000978248629982734, + 0.000973497908485267, + 0.0009687821678659275, + 0.0009641010611885813, + 0.000959454245858839, + 0.0009548413835582954, + 0.0009502621401799363, + 0.0009457161857646944, + 0.0009412031944391278, + 0.0009367228443541996, + 0.0009322748176251361, + 0.000927858800272341, + 0.0009234744821633451, + 0.0009191215569557699, + 0.0009147997220412855, + 0.0009105086784905426, + 0.0009062481309990585, + 0.0009020177878340384, + 0.0008978173607821148, + 0.0008936465650979841 + ], + "F": [ + 1.1111111111111112, + 0.5263157894736842, + 0.3448275862068966, + 0.25641025641025644, + 0.2040816326530612, + 0.1694915254237288, + 0.14492753623188406, + 0.12658227848101264, + 0.11235955056179775, + 0.10101010101010101, + 0.09174311926605504, + 0.3333333333333333, + 0.25, + 0.2, + 0.16666666666666666, + 0.14285714285714285, + 0.125, + 0.1111111111111111, + 0.1, + 0.09090909090909091, + 0.08333333333333333, + 0.07692307692307693, + 0.07142857142857142, + 0.06666666666666667, + 0.0625, + 0.058823529411764705, + 0.05555555555555555, + 0.05263157894736842, + 0.05, + 0.047619047619047616, + 0.045454545454545456, + 0.043478260869565216, + 0.041666666666666664, + 0.04, + 0.038461538461538464, + 0.037037037037037035, + 0.03571428571428571, + 0.034482758620689655, + 0.03333333333333333, + 0.03225806451612903, + 0.03125, + 0.030303030303030304, + 0.029411764705882353, + 0.02857142857142857, + 0.027777777777777776, + 0.02702702702702703, + 0.02631578947368421, + 0.02564102564102564, + 0.025, + 0.024390243902439025, + 0.023809523809523808, + 0.023255813953488372, + 0.022727272727272728, + 0.022222222222222223, + 0.021739130434782608, + 0.02127659574468085, + 0.020833333333333332, + 0.02040816326530612, + 0.02, + 0.0196078431372549, + 0.019230769230769232, + 0.018867924528301886, + 0.018518518518518517, + 0.01818181818181818, + 0.017857142857142856, + 0.017543859649122806, + 0.017241379310344827, + 0.01694915254237288, + 0.016666666666666666, + 0.01639344262295082, + 0.016129032258064516, + 0.015873015873015872, + 0.015625, + 0.015384615384615385, + 0.015151515151515152, + 0.014925373134328358, + 0.014705882352941176, + 0.014492753623188406, + 0.014285714285714285, + 0.014084507042253521, + 0.013888888888888888, + 0.0136986301369863, + 0.013513513513513514, + 0.013333333333333334, + 0.013157894736842105, + 0.012987012987012988, + 0.01282051282051282, + 0.012658227848101266, + 0.0125, + 0.012345679012345678, + 0.012195121951219513, + 0.012048192771084338, + 0.011904761904761904, + 0.011764705882352941, + 0.011627906976744186, + 0.011494252873563218, + 0.011363636363636364, + 0.011235955056179775, + 0.011111111111111112, + 0.01098901098901099, + 0.010869565217391304, + 0.010752688172043012, + 0.010638297872340425, + 0.010526315789473684, + 0.010416666666666666, + 0.010309278350515464, + 0.01020408163265306, + 0.010101010101010102, + 0.01, + 0.009900990099009901, + 0.00980392156862745, + 0.009708737864077669, + 0.009615384615384616, + 0.009523809523809525, + 0.009433962264150943, + 0.009345794392523364, + 0.009259259259259259, + 0.009174311926605505, + 0.00909090909090909, + 0.009009009009009009, + 0.008928571428571428, + 0.008849557522123894, + 0.008771929824561403, + 0.008695652173913044, + 0.008620689655172414, + 0.008547008547008548, + 0.00847457627118644, + 0.008403361344537815, + 0.008333333333333333, + 0.008264462809917356, + 0.00819672131147541, + 0.008130081300813009, + 0.008064516129032258, + 0.008, + 0.007936507936507936, + 0.007874015748031496, + 0.0078125, + 0.007751937984496124, + 0.007692307692307693, + 0.007633587786259542, + 0.007575757575757576, + 0.007518796992481203, + 0.007462686567164179, + 0.007407407407407408, + 0.007352941176470588, + 0.0072992700729927005, + 0.007246376811594203, + 0.007194244604316547, + 0.007142857142857143, + 0.0070921985815602835, + 0.007042253521126761, + 0.006993006993006993, + 0.006944444444444444, + 0.006896551724137931, + 0.00684931506849315, + 0.006802721088435374, + 0.006756756756756757, + 0.006711409395973154, + 0.006666666666666667, + 0.006622516556291391, + 0.006578947368421052, + 0.006535947712418301, + 0.006493506493506494, + 0.0064516129032258064, + 0.00641025641025641, + 0.006369426751592357, + 0.006329113924050633, + 0.006289308176100629, + 0.00625, + 0.006211180124223602, + 0.006172839506172839, + 0.006134969325153374, + 0.006097560975609756, + 0.006060606060606061, + 0.006024096385542169, + 0.005988023952095809, + 0.005952380952380952, + 0.005917159763313609, + 0.0058823529411764705, + 0.005847953216374269, + 0.005813953488372093, + 0.005780346820809248, + 0.005747126436781609, + 0.005714285714285714, + 0.005681818181818182, + 0.005649717514124294, + 0.0056179775280898875, + 0.00558659217877095, + 0.005555555555555556, + 0.0055248618784530384, + 0.005494505494505495, + 0.00546448087431694, + 0.005434782608695652, + 0.005405405405405406, + 0.005376344086021506, + 0.0053475935828877, + 0.005319148936170213, + 0.005291005291005291, + 0.005263157894736842, + 0.005235602094240838, + 0.005208333333333333, + 0.0051813471502590676, + 0.005154639175257732, + 0.005128205128205128, + 0.00510204081632653, + 0.005076142131979695, + 0.005050505050505051, + 0.005025125628140704, + 0.005, + 0.004975124378109453, + 0.0049504950495049506, + 0.0049261083743842365, + 0.004901960784313725, + 0.004878048780487805, + 0.0048543689320388345, + 0.004830917874396135, + 0.004807692307692308, + 0.004784688995215311, + 0.004761904761904762, + 0.004739336492890996, + 0.0047169811320754715, + 0.004694835680751174, + 0.004672897196261682, + 0.004651162790697674, + 0.004629629629629629, + 0.004608294930875576, + 0.0045871559633027525, + 0.0045662100456621, + 0.004545454545454545, + 0.004524886877828055, + 0.0045045045045045045, + 0.004484304932735426, + 0.004464285714285714, + 0.0044444444444444444, + 0.004424778761061947, + 0.004405286343612335, + 0.0043859649122807015, + 0.004366812227074236, + 0.004347826086956522, + 0.004329004329004329, + 0.004310344827586207, + 0.004291845493562232, + 0.004273504273504274, + 0.00425531914893617, + 0.00423728813559322, + 0.004219409282700422, + 0.004201680672268907, + 0.0041841004184100415, + 0.004166666666666667, + 0.004149377593360996, + 0.004132231404958678, + 0.00411522633744856, + 0.004098360655737705, + 0.004081632653061225, + 0.0040650406504065045, + 0.004048582995951417, + 0.004032258064516129, + 0.004016064257028112, + 0.004, + 0.00398406374501992, + 0.003968253968253968, + 0.003952569169960474, + 0.003937007874015748, + 0.00392156862745098, + 0.00390625, + 0.0038910505836575876, + 0.003875968992248062, + 0.003861003861003861, + 0.0038461538461538464, + 0.0038314176245210726, + 0.003816793893129771, + 0.0038022813688212928, + 0.003787878787878788, + 0.0037735849056603774, + 0.0037593984962406013, + 0.003745318352059925, + 0.0037313432835820895, + 0.0037174721189591076, + 0.003703703703703704, + 0.0036900369003690036, + 0.003676470588235294, + 0.003663003663003663, + 0.0036496350364963502, + 0.0036363636363636364, + 0.0036231884057971015, + 0.0036101083032490976, + 0.0035971223021582736, + 0.0035842293906810036, + 0.0035714285714285713, + 0.0035587188612099642, + 0.0035460992907801418, + 0.0035335689045936395, + 0.0035211267605633804, + 0.0035087719298245615, + 0.0034965034965034965, + 0.003484320557491289, + 0.003472222222222222, + 0.0034602076124567475, + 0.0034482758620689655, + 0.003436426116838488 + ], + "G": [ + 0.005, + 0.005025125628140704, + 0.005050505050505051, + 0.005076142131979696, + 0.005102040816326531, + 0.005128205128205128, + 0.005154639175257732, + 0.0051813471502590676, + 0.005208333333333334, + 0.005235602094240838, + 0.005263157894736843, + 0.005291005291005292, + 0.0053191489361702135, + 0.0053475935828877, + 0.005376344086021506, + 0.005405405405405405, + 0.005434782608695652, + 0.00546448087431694, + 0.005494505494505494, + 0.0055248618784530384, + 0.005555555555555556, + 0.00558659217877095, + 0.0056179775280898875, + 0.005649717514124294, + 0.005681818181818182, + 0.005714285714285714, + 0.005747126436781609, + 0.005780346820809249, + 0.005813953488372093, + 0.0058479532163742695, + 0.0058823529411764705, + 0.00591715976331361, + 0.005952380952380953, + 0.005988023952095809, + 0.006024096385542169, + 0.0060606060606060615, + 0.0060975609756097554, + 0.006134969325153374, + 0.006172839506172839, + 0.006211180124223603, + 0.0062499999999999995, + 0.006289308176100629, + 0.006329113924050633, + 0.006369426751592356, + 0.00641025641025641, + 0.0064516129032258064, + 0.006493506493506493, + 0.006535947712418301, + 0.006578947368421052, + 0.006622516556291391, + 0.006666666666666667, + 0.006711409395973154, + 0.006756756756756757, + 0.006802721088435375, + 0.006849315068493151, + 0.006896551724137932, + 0.006944444444444445, + 0.006993006993006994, + 0.007042253521126761, + 0.0070921985815602835, + 0.0071428571428571435, + 0.007194244604316546, + 0.007246376811594204, + 0.0072992700729927005, + 0.007352941176470589, + 0.007407407407407407, + 0.00746268656716418, + 0.007518796992481203, + 0.007575757575757577, + 0.007633587786259542, + 0.007692307692307694, + 0.007751937984496124, + 0.0078125, + 0.007874015748031496, + 0.007936507936507936, + 0.008, + 0.008064516129032258, + 0.008130081300813009, + 0.00819672131147541, + 0.008264462809917356, + 0.008333333333333333, + 0.008403361344537816, + 0.00847457627118644, + 0.008547008547008548, + 0.008620689655172414, + 0.008695652173913044, + 0.008771929824561403, + 0.008849557522123895, + 0.008928571428571428, + 0.00900900900900901, + 0.00909090909090909, + 0.009174311926605507, + 0.009259259259259259, + 0.009345794392523366, + 0.009433962264150943, + 0.009523809523809526, + 0.009615384615384616, + 0.009708737864077669, + 0.00980392156862745, + 0.009900990099009901, + 0.01, + 0.010101010101010102, + 0.010204081632653062, + 0.010309278350515464, + 0.010416666666666668, + 0.010526315789473686, + 0.010638297872340427, + 0.010752688172043012, + 0.010869565217391306, + 0.01098901098901099, + 0.011111111111111113, + 0.011235955056179777, + 0.011363636363636366, + 0.01149425287356322, + 0.011627906976744188, + 0.011764705882352943, + 0.011904761904761904, + 0.012048192771084336, + 0.012195121951219511, + 0.012345679012345678, + 0.012499999999999999, + 0.012658227848101266, + 0.01282051282051282, + 0.012987012987012986, + 0.013157894736842105, + 0.013333333333333334, + 0.013513513513513514, + 0.013698630136986302, + 0.01388888888888889, + 0.014084507042253521, + 0.014285714285714287, + 0.014492753623188408, + 0.014705882352941178, + 0.01492537313432836, + 0.015151515151515154, + 0.015384615384615387, + 0.015625000000000003, + 0.015873015873015876, + 0.01612903225806452, + 0.016393442622950824, + 0.01666666666666667, + 0.016949152542372878, + 0.017241379310344827, + 0.017543859649122806, + 0.017857142857142856, + 0.01818181818181818, + 0.018518518518518517, + 0.018867924528301886, + 0.019230769230769232, + 0.0196078431372549, + 0.02, + 0.020408163265306124, + 0.020833333333333336, + 0.021276595744680854, + 0.02173913043478261, + 0.022222222222222227, + 0.02272727272727273, + 0.023255813953488375, + 0.023809523809523815, + 0.02439024390243903, + 0.025000000000000005, + 0.025641025641025647, + 0.02631578947368422, + 0.027027027027027035, + 0.027777777777777787, + 0.028571428571428584, + 0.029411764705882366, + 0.030303030303030297, + 0.031249999999999993, + 0.032258064516129024, + 0.033333333333333326, + 0.034482758620689655, + 0.03571428571428571, + 0.037037037037037035, + 0.038461538461538464, + 0.04, + 0.04166666666666667, + 0.04347826086956522, + 0.04545454545454546, + 0.04761904761904763, + 0.05000000000000001, + 0.05263157894736844, + 0.05555555555555557, + 0.05882352941176473, + 0.06250000000000003, + 0.06666666666666671, + 0.07142857142857148, + 0.07692307692307698, + 0.08333333333333341, + 0.09090909090909101, + 0.10000000000000013, + 0.11111111111111129, + 0.12499999999999989, + 0.14285714285714274, + 0.16666666666666652, + 0.19999999999999982, + 0.24999999999999978, + 0.33333333333333304, + 0.49999999999999956, + 0.9999999999999991, + "#DIV/0!", + -0.9999999999999769, + -0.49999999999999956, + -0.3333333333333306, + -0.24999999999999978, + -0.2000000000000007, + -0.16666666666666652, + -0.14285714285714318, + -0.12499999999999989, + -0.11111111111111129, + -0.09999999999999991, + -0.09090909090909101, + -0.08333333333333326, + -0.07692307692307698, + -0.07142857142857137, + -0.06666666666666671, + -0.062499999999999944, + -0.05882352941176473, + -0.05555555555555551, + -0.05263157894736844, + -0.049999999999999954, + -0.04761904761904763, + -0.045454545454545414, + -0.04347826086956522, + -0.04166666666666663, + -0.04, + -0.03846153846153843, + -0.037037037037037035, + -0.035714285714285685, + -0.034482758620689655, + -0.033333333333333305, + -0.032258064516129024, + -0.031250000000000014, + -0.030303030303030297, + -0.029411764705882366, + -0.028571428571428564, + -0.027777777777777787, + -0.027027027027027018, + -0.02631578947368422, + -0.025641025641025633, + -0.025000000000000005, + -0.024390243902439015, + -0.023809523809523815, + -0.023255813953488365, + -0.02272727272727273, + -0.022222222222222213, + -0.02173913043478261, + -0.021276595744680844, + -0.020833333333333336, + -0.020408163265306114, + -0.02, + -0.019607843137254895, + -0.019230769230769232, + -0.01886792452830188, + -0.018518518518518517, + -0.018181818181818174, + -0.017857142857142856, + -0.017543859649122813, + -0.017241379310344827, + -0.016949152542372885, + -0.016666666666666663, + -0.016393442622950824, + -0.016129032258064512, + -0.015873015873015876, + -0.015624999999999997, + -0.015384615384615387, + -0.015151515151515148, + -0.01492537313432836, + -0.014705882352941173, + -0.014492753623188408, + -0.014285714285714282, + -0.014084507042253521, + -0.013888888888888885, + -0.013698630136986302, + -0.013513513513513509, + -0.013333333333333334, + -0.013157894736842101, + -0.012987012987012986, + -0.012820512820512817, + -0.012658227848101266, + -0.012499999999999995, + -0.012345679012345678, + -0.012195121951219514, + -0.012048192771084336, + -0.011904761904761908, + -0.011764705882352941, + -0.011627906976744188, + -0.011494252873563216, + -0.011363636363636366, + -0.011235955056179773, + -0.011111111111111113, + -0.010989010989010988, + -0.010869565217391306, + -0.01075268817204301, + -0.010638297872340427, + -0.010526315789473682, + -0.010416666666666668, + -0.010309278350515462, + -0.010204081632653062, + -0.010101010101010098 + ], + "H": [ + 0.005940707661932887, + 0.005905624075737803, + 0.005870952437674326, + 0.0058366855345075574, + 0.0058028163204308925, + 0.005769337912235217, + 0.005736243584648859, + 0.005703526765828526, + 0.005671181033012784, + 0.005639200108317199, + 0.005607577854671586, + 0.005576308271895369, + 0.005545385492900401, + 0.005514803780022559, + 0.005484557521471478, + 0.005454641227897961, + 0.0054250495290733, + 0.0053957771706745206, + 0.0053668190111750835, + 0.005338170018832855, + 0.00530982526877799, + 0.005281779940187414, + 0.0052540293135538985, + 0.005226568768037287, + 0.005199393778899664, + 0.005172499915020445, + 0.005145882836485871, + 0.0051195382922570865, + 0.0050934621179044015, + 0.005067650233413712, + 0.005042098641057979, + 0.005016803423335103, + 0.004991760740961304, + 0.004966966830933117, + 0.0049424180046393484, + 0.0049181106460334245, + 0.004894041209857258, + 0.0048702062199164065, + 0.004846602267408295, + 0.004823226009295523, + 0.004800074166728008, + 0.004777143523509997, + 0.004754430924610364, + 0.004731933274716216, + 0.004709647536824235, + 0.004687570730877999, + 0.004665699932435707, + 0.004644032271380771, + 0.004622564930666151, + 0.004601295145092887, + 0.004580220200122609, + 0.0045593374307233425, + 0.0045386442202450805, + 0.004518137999328209, + 0.00449781624483836, + 0.004477676478832793, + 0.004457716267552092, + 0.004437933220441392, + 0.004418324989193145, + 0.004398889266820527, + 0.004379623786752385, + 0.004360526321949942, + 0.004341594684051042, + 0.004322826722532369, + 0.004304220323896546, + 0.004285773410877658, + 0.0042674839416694255, + 0.004249349909169364, + 0.004231369340247815, + 0.004213540295029405, + 0.004195860866197387, + 0.004178329178311957, + 0.0041609433871483414, + 0.004143701679048206, + 0.004126602270292379, + 0.004109643406480901, + 0.004092823361937725, + 0.004076140439122078, + 0.0040595929680584675, + 0.004043179305780242, + 0.004026897835784027, + 0.004010746967500589, + 0.003994725135776367, + 0.003978830800367206, + 0.00396306244544542, + 0.003947418579118178, + 0.00393189773295588, + 0.003916498461533635, + 0.0039012193419827312, + 0.0038860589735512097, + 0.0038710159771762065, + 0.003856088995066953, + 0.0038412766902942153, + 0.0038265777463937223, + 0.003811990866972481, + 0.003797514775331967, + 0.0037831482140915362, + 0.0037688899448278246, + 0.0037547387477157024, + 0.003740693421184327, + 0.0037267527815716406, + 0.0037129156627975224, + 0.0036991809160351607, + 0.003685547409392864, + 0.0036720140276063074, + 0.003658579671730555, + 0.0036452432588451877, + 0.0036320037217625334, + 0.0036188600087421197, + 0.0036058110832140056, + 0.0035928559235045565, + 0.003579993522571101, + 0.003567222887739252, + 0.003554543040449998, + 0.0035419530160072377, + 0.003529451863334865, + 0.0035170386447371804, + 0.003504712435661972, + 0.0034924723244755818, + 0.0034803174122324254, + 0.003468246812461384, + 0.0034562596509439825, + 0.003444355065507443, + 0.0034325322058166297, + 0.0034207902331722106, + 0.003409128320310373, + 0.00339754565121142, + 0.0033860414209070377, + 0.003374614835295109, + 0.003363265110956304, + 0.0033519914749766677, + 0.0033407931647684297, + 0.003329669427902804, + 0.0033186195219379044, + 0.003307642714254433, + 0.0032967382818958058, + 0.003285905511405618, + 0.00327514369867532, + 0.0032644521487910083, + 0.0032538301758813226, + 0.0032432771029748952, + 0.0032327922618531346, + 0.0032223749929114476, + 0.003212024645018907, + 0.0032017405753836936, + 0.0031915221494207557, + 0.0031813687406192503, + 0.003171279730417531, + 0.0031612545080730303, + 0.0031512924705447976, + 0.0031413930223658237, + 0.003131555575532019, + 0.003121779549378534, + 0.003112064370470291, + 0.003102409472488743, + 0.003092814296119295, + 0.003083278288948721, + 0.003073800905352586, + 0.003064381606396438, + 0.003055019859731223, + 0.0030457151394926996, + 0.0030364669262052946, + 0.0030272747066817374, + 0.0030181379739320224, + 0.003009056227067486, + 0.0030000289712102113, + 0.0029910557174035457, + 0.0029821359825228377, + 0.0029732692891901724, + 0.0029644551656864415, + 0.0029556931458720737, + 0.002946982769100437, + 0.002938323580139901, + 0.0029297151290927914, + 0.0029211569713196717, + 0.0029126486673598517, + 0.0029041897828590013, + 0.0028957798884934327, + 0.0028874185598983804, + 0.002879105377594726, + 0.0028708399269230522, + 0.002862621797969922, + 0.0028544505855025992, + 0.0028463258889024345, + 0.002838247312098696, + 0.0028302144635052873, + 0.0028222269559552426, + 0.002814284406640777, + 0.002806386437052444, + 0.0027985326729151883, + 0.0027907227441350546, + 0.0027829562847347944, + 0.002775232932803018, + 0.0027675523304324656, + 0.002759914123667606, + 0.0027523179624502347, + 0.002744763500565073, + 0.002737250395587365, + 0.0027297783088315875, + 0.0027223469053001548, + 0.0027149558536341267, + 0.0027076048260623597, + 0.0027002934983544336, + 0.0026930215497724674, + 0.002685788663025157, + 0.0026785945242189246, + 0.0026714388228163966, + 0.002664321251588442, + 0.0026572415065719834, + 0.0026501992870255897, + 0.00264319429538884, + 0.002636226237236805, + 0.002629294821243633, + 0.0026223997591381387, + 0.0026155407656638374, + 0.0026087175585434164, + 0.0026019298584358808, + 0.0025951773888994722, + 0.0025884598763563638, + 0.0025817770500526915, + 0.002575128642023472, + 0.002568514387058185, + 0.00256193402266236, + 0.0025553872890253793, + 0.0025488739289856177, + 0.0025423936879975795, + 0.002535946314095261, + 0.002529531557864617, + 0.0025231491724080346, + 0.002516798913312801, + 0.0025104805386211293, + 0.002504193808799293, + 0.002497938486706097, + 0.0024917143375642326, + 0.0024855211289311896, + 0.0024793586306686155, + 0.002473226614915003, + 0.002467124856058822, + 0.002461053130708102, + 0.002455011217664893, + 0.0024489988978984023, + 0.002443015954518346, + 0.0024370621727480835, + 0.002431137339900191, + 0.0024252412453504846, + 0.002419373680512482, + 0.002413534438814313, + 0.0024077233156729605, + 0.0024019401084707237, + 0.0023961846165327927, + 0.002390456641103267, + 0.002384755985320508, + 0.002379082454198267, + 0.002373435854600592, + 0.0023678159952205124, + 0.0023622226865587237, + 0.0023566557409033795, + 0.002351114972306334, + 0.0023456001965649342, + 0.0023401112312011474, + 0.002334647895440245, + 0.002329210010191707, + 0.0023237973980307913, + 0.002318409883176553, + 0.002313047291475856, + 0.002307709450381834, + 0.0023023961889385713, + 0.0022971073377582307, + 0.0022918427290086196, + 0.0022866021963905414, + 0.0022813855751235845, + 0.0022761927019272488, + 0.002271023415004292, + 0.00226587755402341, + 0.0022607549601039167, + 0.00225565547579909, + 0.0022505789450777414, + 0.002245525213312005, + 0.0022404941272589074, + 0.0022354855350461555, + 0.0022304992861561512, + 0.002225535231410891, + 0.0022205932229586445, + 0.0022156731142570774, + 0.002210774760059264, + 0.002205898016401475, + 0.002201042740586079, + 0.0021962087911693295, + 0.002191396027947823, + 0.0021866043119440626, + 0.002181833505393138, + 0.002177083471730734, + 0.002172354075577587, + 0.0021676451827308263, + 0.002162956660145987, + 0.0021582883759285743, + 0.0021536401993205168, + 0.002149012000687067, + 0.0021444036515054776, + 0.002139815024353675 + ], + "I": [ + 0.010842000000000001, + 0.010623629772367587, + 0.010412493565420873, + 0.010208251340291994, + 0.010010583830692475, + 0.009819190984778403, + 0.009633790545089706, + 0.009454116752499561, + 0.009279919161723507, + 0.009110961557346094, + 0.008947020960554547, + 0.008787886717848092, + 0.008633359663938963, + 0.008483251351894532, + 0.00833738334430425, + 0.008195586559903243, + 0.008057700670657544, + 0.007923573544823514, + 0.007793060731944341, + 0.0076660249861465295, + 0.007542335824455398, + 0.007421869117165862, + 0.0073045067075879705, + 0.007190136058739813, + 0.007078649924786897, + 0.006969946045230169, + 0.006863926860027046, + 0.006760499243993502, + 0.006659574258982625, + 0.0065610669224676465, + 0.006464895991277237, + 0.006370983759338762, + 0.0062792558683830105, + 0.006189641130652204, + 0.006102071362733224, + 0.006016481229710606, + 0.005932808098899835, + 0.005850991902481311, + 0.005770975008410018, + 0.005692702099025443, + 0.005616120056831637, + 0.005541177856958554, + 0.00546782646585357, + 0.005396018745786472, + 0.005325709364782812, + 0.0052568547116293735, + 0.0051894128156219285, + 0.0051233432707497965, + 0.00505860716403394, + 0.004995167007755825, + 0.004932986675333117, + 0.004872031340615552, + 0.004812267420390308, + 0.004753662519900881, + 0.004696185381197041, + 0.0046398058341459245, + 0.004584494749945876, + 0.004530223996995371, + 0.004476966398979147, + 0.004424695695042888, + 0.004373386501936197, + 0.004323014278011503, + 0.004273555288973739, + 0.004224986575282464, + 0.004177285921114278, + 0.004130431824799245, + 0.004084403470650461, + 0.004039180702110875, + 0.003994743996146215, + 0.003951074438817175, + 0.003908153701968135, + 0.0038659640209734183, + 0.003824488173485645, + 0.003783709459134054, + 0.003743611680123689, + 0.003704179122689281, + 0.0036653965393602943, + 0.0036272491319961383, + 0.003589722535552888, + 0.0035528028025450754, + 0.003516476388168137, + 0.003480730136049062, + 0.003445551264594584, + 0.00341092735390796, + 0.0033768463332469554, + 0.0033432964689971744, + 0.0033102663531362525, + 0.003277744892165761, + 0.0032457212964889038, + 0.003214185070213262, + 0.003183126001358912, + 0.003152534152453318, + 0.003122399851495316, + 0.0030927136832714646, + 0.0030634664810088815, + 0.0030346493183494843, + 0.0030062535016313484, + 0.002978270562463588, + 0.0029506922505818656, + 0.0029235105269722677, + 0.0028967175572519083, + 0.002870305705295161, + 0.002844267527095008, + 0.0028185957648494734, + 0.002793283341263598, + 0.002768323354057884, + 0.0027437090706745678, + 0.0027194339231734655, + 0.0026954915033095724, + 0.0026718755577849157, + 0.002648579983667544, + 0.002625598823970852, + 0.0026029262633867527, + 0.0025805566241665144, + 0.0025584843621433585, + 0.0025367040628911687, + 0.0025152104380139523, + 0.0024939983215608846, + 0.002473062666562045, + 0.0024523985416801436, + 0.0024320011279737493, + 0.002411865715767724, + 0.002391987701626781, + 0.0023723625854282166, + 0.002352985967530071, + 0.002333853546031136, + 0.002314961114119341, + 0.002296304557505252, + 0.0022778798519375093, + 0.0022596830607971878, + 0.002241710332768185, + 0.002223957899580861, + 0.002206422073826265, + 0.002189099246838405, + 0.0021719858866421065, + 0.002155078535964119, + 0.0021383738103052186, + 0.002121868396071141, + 0.00210555904876028, + 0.0020894425912061482, + 0.002073515911872705, + 0.002057775963200695, + 0.002042219760003255, + 0.002026844377909079, + 0.002011646951851519, + 0.0019966246746020576, + 0.0019817747953466444, + 0.0019670946183034505, + 0.001952581501380654, + 0.0019382328548729062, + 0.0019240461401952087, + 0.0019100188686529448, + 0.0018961486002468833, + 0.001882432942512005, + 0.0018688695493890408, + 0.0018554561201276675, + 0.0018421903982203279, + 0.0018290701703656894, + 0.0018160932654607937, + 0.001803257553620978, + 0.001790560945226681, + 0.0017780013899962904, + 0.0017655768760842059, + 0.0017532854292033214, + 0.0017411251117711746, + 0.0017290940220790183, + 0.0017171902934831028, + 0.001705412093617493, + 0.001693757623627747, + 0.0016822251174248278, + 0.0016708128409586248, + 0.0016595190915104931, + 0.0016483421970042366, + 0.0016372805153349807, + 0.0016263324337153925, + 0.0016154963680387409, + 0.0016047707622582885, + 0.0015941540877825334, + 0.0015836448428858385, + 0.0015732415521339882, + 0.0015629427658242446, + 0.0015527470594394785, + 0.00154265303311596, + 0.001532659311124428, + 0.0015227645413640426, + 0.0015129673948688607, + 0.0015032665653264734, + 0.0014936607686084598, + 0.0014841487423123232, + 0.0014747292453145858, + 0.0014654010573347286, + 0.0014561629785096715, + 0.0014470138289785007, + 0.00143795244847716, + 0.0014289776959428284, + 0.0014200884491277178, + 0.0014112836042220315, + 0.001402562075485834, + 0.001393922794889589, + 0.001385364711763129, + 0.0013768867924528303, + 0.0013684880199867698, + 0.0013601673937476532, + 0.0013519239291533006, + 0.0013437566573444957, + 0.0013356646248799964, + 0.0013276468934385198, + 0.0013197025395275204, + 0.0013118306541985772, + 0.0013040303427692226, + 0.0012963007245510414, + 0.001288640932583877, + 0.0012810501133759902, + 0.0012735274266500122, + 0.0012660720450945455, + 0.0012586831541212694, + 0.0012513599516274043, + 0.0012441016477634057, + 0.001236907464705747, + 0.0012297766364346712, + 0.001222708408516781, + 0.001215702037892344, + 0.0012087567926672004, + 0.001201871951909159, + 0.001195046805448761, + 0.0011882806536843136, + 0.001181572807391084, + 0.0011749225875345504, + 0.0011683293250876118, + 0.0011617923608516602, + 0.001155311045281422, + 0.0011488847383134728, + 0.0011425128091983434, + 0.0011361946363361258, + 0.0011299296071154926, + 0.00112371711775606, + 0.0011175565731539982, + 0.0011114473867308231, + 0.0011053889802852927, + 0.00109938078384833, + 0.001093422235540905, + 0.0010875127814348067, + 0.001081651875416234, + 0.001075838979052142, + 0.0010700735614592818, + 0.001064355099175866, + 0.0010586830760358032, + 0.0010530569830454414, + 0.0010474763182627622, + 0.0010419405866789707, + 0.001036449300102424, + 0.0010310019770448484, + 0.0010255981426097907, + 0.0010202373283832542, + 0.0010149190723264703, + 0.001009642918670758, + 0.001004408417814421, + 0.0009992151262216437, + 0.0009940626063233355, + 0.000988950426419881, + 0.0009838781605857585, + 0.000978845388575979, + 0.0009738516957343105, + 0.0009688966729032459, + 0.0009639799163356785, + 0.000959101027608244, + 0.0009542596135362985, + 0.0009494552860904914, + 0.0009446876623149014, + 0.0009399563642467024, + 0.0009352610188373256, + 0.0009306012578750849, + 0.0009259767179092346, + 0.0009213870401754325, + 0.0009168318705225714, + 0.0009123108593409566, + 0.0009078236614917983, + 0.0009033699362379897, + 0.0008989493471761473, + 0.0008945615621698834, + 0.000890206253284288, + 0.0008858830967215929, + 0.000881591772757994, + 0.000877331965681609, + 0.0008731033637315435, + 0.0008689056590380489, + 0.0008647385475637421, + 0.000860601729045872, + 0.0008564949069396064, + 0.0008524177883623217, + 0.0008483700840388738, + 0.0008443515082478303, + 0.000840361778768644, + 0.0008364006168297506, + 0.0008324677470575698, + 0.0008285628974263937, + 0.0008246857992091432, + 0.000820836186928975, + 0.0008170137983117245, + 0.0008132183742391656 + ], + "J": [ + 0.008465811147289792, + 0.008394742839778167, + 0.008324857799374695, + 0.008256126718469814, + 0.008188521249397902, + 0.008122013965453877, + 0.008056578323794248, + 0.007992188630117171, + 0.007928820005022784, + 0.007866448351961272, + 0.0078050503266819705, + 0.007744603308102047, + 0.0076850853705184834, + 0.007626475257091587, + 0.007568752354532691, + 0.007511896668932699, + 0.007455888802671975, + 0.007400709932355503, + 0.007346341787720641, + 0.007292766631467794, + 0.00723996723996724, + 0.007187926884798023, + 0.007136629315077341, + 0.007086058740541234, + 0.007036199815339554, + 0.006987037622510275, + 0.006938557659100186, + 0.006890745821900724, + 0.0068435883937695485, + 0.006797072030509935, + 0.006751183748281655, + 0.006705910911518389, + 0.006661241221328029, + 0.006617162704353555, + 0.006573663702073233, + 0.0065307328605200944, + 0.006488359120401633, + 0.006446531707601657, + 0.006405240124047184, + 0.006364474138924088, + 0.00638745714902209, + 0.006417683273132056, + 0.006447071238021074, + 0.006475630883433038, + 0.006503372144678446, + 0.006530305042723691, + 0.006556439674569673, + 0.006581786203920669, + 0.00660635485214381, + 0.006630155889518962, + 0.006653199626778259, + 0.006675496406934006, + 0.006697056597393299, + 0.00671789058235714, + 0.006738008755501512, + 0.006757421512937486, + 0.006776139246447027, + 0.0067941723369909475, + 0.006811531148485036, + 0.006828226021840244, + 0.006844267269262483, + 0.0068596651688074125, + 0.006874429959185387, + 0.006888571834811557, + 0.006902100941095985, + 0.006915027369968471, + 0.006927361155632712, + 0.006939112270544304, + 0.006950290621606998, + 0.006960906046581632, + 0.006970968310702013, + 0.006980487103492099, + 0.006989472035778728, + 0.006997932636894199, + 0.0070058783520629865, + 0.007013318539966895, + 0.007020262470482986, + 0.007026719322588679, + 0.007032698182428412, + 0.007038208041536391, + 0.007043257795209932, + 0.007047856241028035, + 0.007052012077509878, + 0.007055733902907985, + 0.007059030214130972, + 0.007061909405790766, + 0.007064379769369392, + 0.007066449492500447, + 0.0070681266583605025, + 0.0070694192451658255, + 0.007070335125769799, + 0.007070882067356699, + 0.007071067731227415, + 0.00707089967267296, + 0.007070385340931613, + 0.007069532079225759, + 0.007068347124874455, + 0.0070668376094780595, + 0.007065010559171141, + 0.007062872894940241, + 0.007060431433002933, + 0.007057692885244917, + 0.007054663859711904, + 0.007051350861153165, + 0.007047760291613717, + 0.007043898451072278, + 0.0070397715381221295, + 0.007035385650692202, + 0.00703074678680578, + 0.007025860845374286, + 0.007020733627023748, + 0.007015370834951591, + 0.007009778075811576, + 0.00700396086062463, + 0.006997924605713631, + 0.006991674633660065, + 0.006985216174280721, + 0.0069785543656225675, + 0.006971694254974099, + 0.006964640799891477, + 0.006957398869237865, + 0.006949973244234458, + 0.006942368619521746, + 0.006934589604229617, + 0.0069266407230550095, + 0.006918526417345825, + 0.006910251046189946, + 0.006901818887508178, + 0.006893234139150072, + 0.006884500919991604, + 0.006875623271033696, + 0.006866605156500742, + 0.0068574504649381645, + 0.006848163010308287, + 0.006838746533083648, + 0.006829204701337102, + 0.006819541111827967, + 0.0068097592910836, + 0.006799862696475754, + 0.0067898547172912105, + 0.006779738675796045, + 0.006769517828293172, + 0.006759195366172522, + 0.006748774416953595, + 0.006738258045319838, + 0.006727649254144564, + 0.0067169509855080235, + 0.006706166121705306, + 0.006695297486244792, + 0.00668434784483688, + 0.006673319906372719, + 0.006662216323892757, + 0.006622516556291391, + 0.006578947368421052, + 0.006535947712418301, + 0.006493506493506493, + 0.0064516129032258064, + 0.00641025641025641, + 0.006369426751592356, + 0.006329113924050633, + 0.006289308176100628, + 0.0062499999999999995, + 0.006211180124223602, + 0.006172839506172839, + 0.006134969325153374, + 0.0060975609756097554, + 0.0060606060606060615, + 0.006024096385542169, + 0.005988023952095809, + 0.005952380952380953, + 0.00591715976331361, + 0.0058823529411764705, + 0.0058479532163742695, + 0.005813953488372093, + 0.005780346820809249, + 0.005747126436781609, + 0.005714285714285714, + 0.005681818181818182, + 0.005649717514124294, + 0.0056179775280898875, + 0.00558659217877095, + 0.005555555555555556, + 0.0055248618784530384, + 0.005494505494505494, + 0.00546448087431694, + 0.005434782608695652, + 0.005405405405405405, + 0.005376344086021506, + 0.0053475935828877, + 0.0053191489361702135, + 0.005291005291005291, + 0.005263157894736843, + 0.005235602094240837, + 0.005208333333333334, + 0.0051813471502590676, + 0.005154639175257732, + 0.005128205128205128, + 0.005102040816326531, + 0.005076142131979696, + 0.005050505050505051, + 0.005025125628140704, + 0.005, + 0.0049751243781094535, + 0.0049504950495049506, + 0.004926108374384236, + 0.004901960784313725, + 0.004878048780487806, + 0.0048543689320388345, + 0.004830917874396135, + 0.004807692307692308, + 0.004784688995215312, + 0.0047619047619047615, + 0.004739336492890996, + 0.0047169811320754715, + 0.004694835680751174, + 0.004672897196261682, + 0.004651162790697674, + 0.004629629629629629, + 0.004608294930875576, + 0.004587155963302752, + 0.004566210045662101, + 0.004545454545454545, + 0.004524886877828055, + 0.004504504504504505, + 0.004484304932735426, + 0.004464285714285714, + 0.0044444444444444444, + 0.004424778761061948, + 0.004405286343612335, + 0.0043859649122807015, + 0.004366812227074236, + 0.004347826086956522, + 0.004329004329004329, + 0.004310344827586207, + 0.004291845493562232, + 0.004273504273504274, + 0.00425531914893617, + 0.00423728813559322, + 0.004219409282700422, + 0.004201680672268908, + 0.0041841004184100415, + 0.004166666666666667, + 0.004149377593360996, + 0.004132231404958678, + 0.004115226337448559, + 0.004098360655737705, + 0.004081632653061224, + 0.0040650406504065045, + 0.004048582995951418, + 0.004032258064516129, + 0.004016064257028112, + 0.004, + 0.003984063745019921, + 0.003968253968253968, + 0.003952569169960474, + 0.003937007874015748, + 0.00392156862745098, + 0.00390625, + 0.003891050583657587, + 0.003875968992248062, + 0.003861003861003861, + 0.003846153846153846, + 0.0038314176245210726, + 0.003816793893129771, + 0.003802281368821293, + 0.003787878787878788, + 0.003773584905660377, + 0.0037593984962406013, + 0.003745318352059925, + 0.00373134328358209, + 0.003717472118959108, + 0.0037037037037037034, + 0.003690036900369004, + 0.0036764705882352945, + 0.003663003663003663, + 0.0036496350364963502, + 0.0036363636363636364, + 0.003623188405797102, + 0.0036101083032490976, + 0.003597122302158273, + 0.0035842293906810036, + 0.0035714285714285718, + 0.0035587188612099642, + 0.0035460992907801418, + 0.0035335689045936395, + 0.0035211267605633804, + 0.0035087719298245615, + 0.003496503496503496, + 0.003484320557491289, + 0.0034722222222222225, + 0.0034602076124567475, + 0.003448275862068965, + 0.003436426116838488, + 0.0034246575342465756, + 0.003412969283276451, + 0.0034013605442176874, + 0.003389830508474576, + 0.0033783783783783786, + 0.0033670033670033673, + 0.003355704697986577 + ], + "K": [ + 0.0044603033006244425, + 0.004440497335701599, + 0.0045130746427149235, + 0.004580690627202255, + 0.004647288351089482, + 0.004712864374236342, + 0.0047774158523344185, + 0.004840940525587829, + 0.004903436706955138, + 0.004964903269988016, + 0.00502533963630169, + 0.005084745762711865, + 0.005143122128072172, + 0.005200469719845663, + 0.0052567900204430725, + 0.0053120849933598925, + 0.005366357069143447, + 0.005419609131220233, + 0.005471844501612969, + 0.005523066926575699, + 0.005573280562174388, + 0.005622489959839358, + 0.0056707000519148594, + 0.005717916137229988, + 0.005764143866714044, + 0.005809389229078348, + 0.005853658536585366, + 0.005896958410924891, + 0.0059392957692159356, + 0.0059806778101518165, + 0.006021112000304867, + 0.006060606060606061, + 0.006099167953013816, + 0.006136805867385121, + 0.006173528208561121, + 0.006209343583678297, + 0.006244260789715335, + 0.00627828880128486, + 0.006311436758678225, + 0.006343713956170704, + 0.00637512983059346, + 0.006405693950177937, + 0.006435416003677381, + 0.006464305789769534, + 0.00649237320674369, + 0.006519628242474685, + 0.006546080964685616, + 0.006571741511500548, + 0.006596620082287735, + 0.006620726928793406, + 0.0066440723465655506, + 0.006666666666666667, + 0.006688520247673919, + 0.006709643467964742, + 0.006730046718285471, + 0.006749740394600207, + 0.00676873489121676, + 0.006787040594186195, + 0.006804667874972178, + 0.006821627084386053, + 0.006837928546783351, + 0.006853582554517134, + 0.006868599362643483, + 0.006882989183874139, + 0.006896762183771249, + 0.0069099284761789306, + 0.006922498118886381, + 0.006934481109516976, + 0.006945887381637924, + 0.006956726801084778, + 0.0069670091624952435, + 0.006976744186046511, + 0.0069859415143904615, + 0.006994610709780988, + 0.007002761251387742, + 0.007010402532790593, + 0.007017543859649123, + 0.007024194447541532, + 0.007030363419967339, + 0.007036059806508356, + 0.007041292541142436, + 0.007046070460704606, + 0.007050402303490219, + 0.00705429670799487, + 0.007057762211785932, + 0.007060807250500581, + 0.007063440156965336, + 0.0070656691604322535, + 0.0070675023859269005, + 0.007068947853703514, + 0.0070700134788026755, + 0.007070707070707071, + 0.007071036333090945, + 0.007071008863658999, + 0.007070632154070558, + 0.007069913589945012, + 0.0070688604509445445, + 0.007067479910930391, + 0.0070657790381888535, + 0.007063764795723558, + 0.007061444041610388, + 0.007058823529411765, + 0.007055909908646994, + 0.007052709725315517, + 0.007049229422469996, + 0.007045475340836308, + 0.00704145371947757, + 0.0070371706964994585, + 0.007032632309794172, + 0.0070278444978204785, + 0.007022813100417393, + 0.007017543859649122, + 0.007012042420678991, + 0.007006314332670183, + 0.007000365049711182, + 0.006994199931763902, + 0.00698782424563261, + 0.006981243165951721, + 0.006974461776190774, + 0.006967485069674852, + 0.006960317950618809, + 0.006952965235173825, + 0.006945431652484719, + 0.0069377218457566964, + 0.0069298403733301294, + 0.006921791709762113, + 0.006913580246913581, + 0.0069052102950408045, + 0.006896686083890199, + 0.006888011763795372, + 0.0068791914067754265, + 0.0068702290076335885, + 0.006861128485055249, + 0.0068518936827046155, + 0.006842528370319131, + 0.00683303624480095, + 0.00682342093130475, + 0.006813685984321195, + 0.006803834888755481, + 0.006793871061000289, + 0.006783797850002691, + 0.006773618538324421, + 0.0067633363431950574, + 0.006752954417557682, + 0.00674247585110657, + 0.006731903671316538, + 0.006721240844463593, + 0.006710490276636538, + 0.006699654814739241, + 0.006688737247483278, + 0.0066777403063706985, + 0.006666666666666667, + 0.006666666666666667, + 0.006622516556291391, + 0.006578947368421052, + 0.006535947712418301, + 0.006493506493506493, + 0.0064516129032258064, + 0.00641025641025641, + 0.006369426751592356, + 0.006329113924050633, + 0.006289308176100628, + 0.0062499999999999995, + 0.006211180124223602, + 0.006172839506172839, + 0.006134969325153374, + 0.0060975609756097554, + 0.0060606060606060615, + 0.006024096385542169, + 0.005988023952095809, + 0.005952380952380953, + 0.00591715976331361, + 0.0058823529411764705, + 0.0058479532163742695, + 0.005813953488372093, + 0.005780346820809249, + 0.005747126436781609, + 0.005714285714285714, + 0.005681818181818182, + 0.005649717514124294, + 0.0056179775280898875, + 0.00558659217877095, + 0.005555555555555556, + 0.0055248618784530384, + 0.005494505494505494, + 0.00546448087431694, + 0.005434782608695652, + 0.005405405405405405, + 0.005376344086021506, + 0.0053475935828877, + 0.0053191489361702135, + 0.005291005291005291, + 0.005263157894736843, + 0.005235602094240837, + 0.005208333333333334, + 0.0051813471502590676, + 0.005154639175257732, + 0.005128205128205128, + 0.005102040816326531, + 0.005076142131979696, + 0.005050505050505051, + 0.005025125628140704, + 0.005, + 0.0049751243781094535, + 0.0049504950495049506, + 0.004926108374384236, + 0.004901960784313725, + 0.004878048780487806, + 0.0048543689320388345, + 0.004830917874396135, + 0.004807692307692308, + 0.004784688995215312, + 0.0047619047619047615, + 0.004739336492890996, + 0.0047169811320754715, + 0.004694835680751174, + 0.004672897196261682, + 0.004651162790697674, + 0.004629629629629629, + 0.004608294930875576, + 0.004587155963302752, + 0.004566210045662101, + 0.004545454545454545, + 0.004524886877828055, + 0.004504504504504505, + 0.004484304932735426, + 0.004464285714285714, + 0.0044444444444444444, + 0.004424778761061948, + 0.004405286343612335, + 0.0043859649122807015, + 0.004366812227074236, + 0.004347826086956522, + 0.004329004329004329, + 0.004310344827586207, + 0.004291845493562232, + 0.004273504273504274, + 0.00425531914893617, + 0.00423728813559322, + 0.004219409282700422, + 0.004201680672268908, + 0.0041841004184100415, + 0.004166666666666667, + 0.004149377593360996, + 0.004132231404958678, + 0.004115226337448559, + 0.004098360655737705, + 0.004081632653061224, + 0.0040650406504065045, + 0.004048582995951418, + 0.004032258064516129, + 0.004016064257028112, + 0.004, + 0.003984063745019921, + 0.003968253968253968, + 0.003952569169960474, + 0.003937007874015748, + 0.00392156862745098, + 0.00390625, + 0.003891050583657587, + 0.003875968992248062, + 0.003861003861003861, + 0.003846153846153846, + 0.0038314176245210726, + 0.003816793893129771, + 0.003802281368821293, + 0.003787878787878788, + 0.003773584905660377, + 0.0037593984962406013, + 0.003745318352059925, + 0.00373134328358209, + 0.003717472118959108, + 0.0037037037037037034, + 0.003690036900369004, + 0.0036764705882352945, + 0.003663003663003663, + 0.0036496350364963502, + 0.0036363636363636364, + 0.003623188405797102, + 0.0036101083032490976, + 0.003597122302158273, + 0.0035842293906810036, + 0.0035714285714285718, + 0.0035587188612099642, + 0.0035460992907801418, + 0.0035335689045936395, + 0.0035211267605633804, + 0.0035087719298245615, + 0.003496503496503496, + 0.003484320557491289, + 0.0034722222222222225, + 0.0034602076124567475, + 0.003448275862068965, + 0.003436426116838488, + 0.0034246575342465756, + 0.003412969283276451, + 0.0034013605442176874, + 0.003389830508474576, + 0.0033783783783783786, + 0.0033670033670033673 + ], + "L": [ + 0.012096774193548387, + 0.01195219123505976, + 0.011811023622047244, + 0.011673151750972763, + 0.011538461538461537, + 0.011406844106463879, + 0.011278195488721804, + 0.011152416356877323, + 0.011029411764705881, + 0.010909090909090908, + 0.01079136690647482, + 0.010676156583629892, + 0.01056338028169014, + 0.010452961672473867, + 0.010344827586206896, + 0.010238907849829351, + 0.010135135135135136, + 0.010033444816053512, + 0.009933774834437087, + 0.009836065573770493, + 0.00974025974025974, + 0.00964630225080386, + 0.009554140127388535, + 0.00946372239747634, + 0.009375, + 0.009287925696594427, + 0.00920245398773006, + 0.00911854103343465, + 0.009036144578313253, + 0.008955223880597014, + 0.008875739644970414, + 0.008797653958944282, + 0.00872093023255814, + 0.008645533141210374, + 0.008571428571428572, + 0.0084985835694051, + 0.008426966292134831, + 0.008356545961002786, + 0.008287292817679558, + 0.00821917808219178, + 0.008152173913043478, + 0.008086253369272238, + 0.008021390374331552, + 0.007957559681697613, + 0.007894736842105263, + 0.00783289817232376, + 0.007772020725388601, + 0.007712082262210797, + 0.007653061224489796, + 0.00759493670886076, + 0.007537688442211055, + 0.007481296758104738, + 0.007425742574257425, + 0.00737100737100737, + 0.007317073170731708, + 0.007263922518159807, + 0.007211538461538461, + 0.007159904534606206, + 0.007109004739336492, + 0.007058823529411764, + 0.007009345794392524, + 0.006960556844547563, + 0.006912442396313364, + 0.006864988558352404, + 0.006818181818181817, + 0.006772009029345372, + 0.0067264573991031385, + 0.006681514476614699, + 0.006637168141592921, + 0.0065934065934065925, + 0.006550218340611353, + 0.0065075921908893716, + 0.006465517241379309, + 0.006423982869379015, + 0.006382978723404256, + 0.006342494714587737, + 0.0063025210084033615, + 0.00626304801670146, + 0.006224066390041493, + 0.006185567010309279, + 0.006147540983606556, + 0.006109979633401222, + 0.006072874493927126, + 0.006036217303822936, + 0.006, + 0.005964214711729623, + 0.005928853754940711, + 0.005893909626719057, + 0.005859375000000001, + 0.005825242718446601, + 0.005791505791505791, + 0.005758157389635315, + 0.005725190839694656, + 0.0056925996204933585, + 0.005660377358490565, + 0.005628517823639775, + 0.005597014925373135, + 0.005565862708719851, + 0.005535055350553505, + 0.005504587155963303, + 0.005474452554744525, + 0.0054446460980036296, + 0.005415162454873645, + 0.0053859964093357264, + 0.005357142857142857, + 0.005328596802841918, + 0.005300353356890459, + 0.005272407732864675, + 0.005244755244755244, + 0.005217391304347826, + 0.005190311418685122, + 0.005163511187607573, + 0.005136986301369863, + 0.0051107325383304945, + 0.005084745762711864, + 0.00505902192242833, + 0.005033557046979865, + 0.005008347245409015, + 0.004983388704318937, + 0.004958677685950413, + 0.004934210526315789, + 0.004909983633387889, + 0.004885993485342019, + 0.00486223662884927, + 0.004838709677419355, + 0.004815409309791332, + 0.004792332268370607, + 0.004769475357710651, + 0.004746835443037974, + 0.004724409448818898, + 0.0047021943573667705, + 0.004680187207488299, + 0.004658385093167702, + 0.00463678516228748, + 0.004615384615384615, + 0.004594180704441042, + 0.004573170731707317, + 0.004552352048558422, + 0.004531722054380665, + 0.004511278195488721, + 0.004491017964071856, + 0.004470938897168406, + 0.004451038575667655, + 0.004431314623338257, + 0.004411764705882352, + 0.004392386530014641, + 0.004373177842565598, + 0.0043541364296081275, + 0.004335260115606936, + 0.004316546762589928, + 0.004297994269340973, + 0.0042796005706134095, + 0.004261363636363637, + 0.004243281471004243, + 0.004225352112676057, + 0.00420757363253857, + 0.004189944134078212, + 0.004172461752433936, + 0.0041551246537396115, + 0.004137931034482759, + 0.004120879120879121, + 0.004103967168262654, + 0.004087193460490463, + 0.00407055630936228, + 0.004054054054054053, + 0.004037685060565276, + 0.004021447721179625, + 0.004005340453938584, + 0.003989361702127659, + 0.003973509933774834, + 0.003957783641160949, + 0.003942181340341656, + 0.003926701570680628, + 0.003911342894393742, + 0.0038961038961038965, + 0.0038809831824062092, + 0.003865979381443299, + 0.0038510911424903724, + 0.003836317135549872, + 0.003821656050955414, + 0.0038071065989847717, + 0.0037926675094816687, + 0.003778337531486146, + 0.0037641154328732743, + 0.00375, + 0.0037359900373599006, + 0.003722084367245657, + 0.003708281829419036, + 0.0036945812807881776, + 0.003680981595092024, + 0.003667481662591687, + 0.003654080389768575, + 0.003640776699029126, + 0.0036275695284159614, + 0.0036144578313253017, + 0.003601440576230492, + 0.0035885167464114833, + 0.003575685339690107, + 0.003562945368171021, + 0.003550295857988166, + 0.0035377358490566034, + 0.0035252643948296123, + 0.0035128805620608904, + 0.0035005834305717617, + 0.003488372093023255, + 0.003476245654692932, + 0.0034642032332563508, + 0.003452243958573072, + 0.003440366972477064, + 0.0034285714285714284, + 0.0034168564920273345, + 0.0034052213393870596, + 0.003393665158371041, + 0.003382187147688838, + 0.0033707865168539322, + 0.0033594624860022394, + 0.003348214285714285, + 0.003337041156840934, + 0.0033259423503325942, + 0.003314917127071823, + 0.0033039647577092508, + 0.003293084522502744, + 0.0032822757111597373, + 0.003271537622682661, + 0.0032608695652173916, + 0.0032502708559046583, + 0.0032397408207343412, + 0.0032292787944025836, + 0.003218884120171674, + 0.0032085561497326195, + 0.003198294243070363, + 0.003188097768331562, + 0.0031779661016949146, + 0.0031678986272439284, + 0.003157894736842105, + 0.003147953830010493, + 0.003138075313807531, + 0.0031282586027111575, + 0.0031185031185031182, + 0.0031088082901554403, + 0.0030991735537190084, + 0.0030895983522142116, + 0.0030800821355236136, + 0.0030706243602865915, + 0.003061224489795918, + 0.003051881993896236, + 0.0030425963488843813, + 0.0030333670374115265, + 0.0030241935483870967, + 0.0030150753768844224, + 0.003006012024048096, + 0.002997002997002997, + 0.00298804780876494, + 0.002979145978152929, + 0.00297029702970297, + 0.0029615004935834156, + 0.002952755905511811, + 0.0029440628066732086, + 0.002935420743639922, + 0.002926829268292683, + 0.0029182879377431903, + 0.0029097963142580016, + 0.0029013539651837525, + 0.002892960462873674, + 0.0028846153846153843, + 0.0028763183125599234, + 0.0028680688336520073, + 0.002859866539561487, + 0.0028517110266159697, + 0.002843601895734597, + 0.0028355387523629487, + 0.002827521206409048, + 0.002819548872180451, + 0.0028116213683223993, + 0.0028037383177570096, + 0.0027958993476234852, + 0.0027881040892193307, + 0.002780352177942539, + 0.0027726432532347504, + 0.0027649769585253456, + 0.0027573529411764703, + 0.002749770852428964, + 0.002742230347349177, + 0.0027347310847766633, + 0.002727272727272727, + 0.0027198549410698096, + 0.0027124773960216994, + 0.0027051397655545534, + 0.0026978417266187047, + 0.0026905829596412553, + 0.0026833631484794273, + 0.0026761819803746653, + 0.002669039145907473, + 0.0026619343389529724, + 0.0026548672566371677, + 0.0026478375992939097, + 0.002640845070422535, + 0.0026338893766461808, + 0.002626970227670753, + 0.0026200873362445414 + ], + "M": [ + 0.011645962732919254, + 0.011511895625479662, + 0.011380880121396054, + 0.011252813203300824, + 0.011127596439169139, + 0.011005135730007337, + 0.010885341074020317, + 0.010768126346015794, + 0.01065340909090909, + 0.010541110330288123, + 0.01043115438108484, + 0.01032346868547832, + 0.010217983651226158, + 0.010114632501685771, + 0.010013351134846462, + 0.00991407799074686, + 0.00981675392670157, + 0.009721322099805575, + 0.00962772785622593, + 0.009535918626827717, + 0.009445843828715364, + 0.009357454772301934, + 0.009270704573547589, + 0.009185548071034905, + 0.009101941747572815, + 0.009019843656043294, + 0.008939213349225266, + 0.008860011813349083, + 0.008782201405152224, + 0.008705745792222866, + 0.00863060989643268, + 0.008556759840273816, + 0.008484162895927601, + 0.008412787436904092, + 0.008342602892102336, + 0.00827357970215113, + 0.008205689277899343, + 0.008138903960933261, + 0.008073196986006458, + 0.00800854244527496, + 0.007944915254237288, + 0.007882291119285338, + 0.007820646506777894, + 0.007759958613554061, + 0.0077002053388090345, + 0.007641365257259297, + 0.007583417593528817, + 0.007526342197691921, + 0.00747011952191235, + 0.007414730598121602, + 0.007360157016683021, + 0.007306380905991232, + 0.007253384912959381, + 0.007201152184349495, + 0.007149666348903718, + 0.00709891150023663, + 0.007048872180451127, + 0.006999533364442371, + 0.006950880444856347, + 0.006902899217671421, + 0.006855575868372944, + 0.00680889695869269, + 0.006762849413886384, + 0.00671742051052396, + 0.006672597864768683, + 0.006628369421122404, + 0.0065847234416154515, + 0.006541648495420846, + 0.006499133448873484, + 0.006457167455876021, + 0.0064157399486740796, + 0.006374840628984276, + 0.006334459459459458, + 0.00629458665547629, + 0.006255212677231026, + 0.006216328222130128, + 0.006177924217462933, + 0.006139991813344247, + 0.006102522375915378, + 0.00606550748079256, + 0.00602893890675241, + 0.0059928086296444265, + 0.005957108816521049, + 0.0059218318199763115, + 0.005886970172684458, + 0.0058525165821303165, + 0.005818463925523661, + 0.005784805244890089, + 0.005751533742331289, + 0.00571864277544796, + 0.005686125852918878, + 0.005653976630229927, + 0.005622188905547226, + 0.005590756615728662, + 0.0055596738324684945, + 0.0055289347585698485, + 0.005498533724340176, + 0.005468465184104994, + 0.005438723712835387, + 0.005409304002884962, + 0.005380200860832137, + 0.005351409204423832, + 0.005322924059616749, + 0.005294740557712671, + 0.0052668539325842695, + 0.005239259517988123, + 0.005211952744961779, + 0.005184929139301763, + 0.005158184319119669, + 0.005131713992473486, + 0.0051055139550714775, + 0.005079580088046054, + 0.005053908355795148, + 0.005028494803888703, + 0.0050033355570380245, + 0.004978426817125788, + 0.004953764861294583, + 0.004929346040092014, + 0.004905166775670373, + 0.004881223560039049, + 0.0048575129533678756, + 0.004834031582339671, + 0.004810776138550352, + 0.004787743376954995, + 0.004764930114358323, + 0.0047423332279481496, + 0.004719949653870358, + 0.004697776385844033, + 0.004675810473815461, + 0.004654049022649705, + 0.004632489190858554, + 0.004611128189363664, + 0.004589963280293758, + 0.004568991775814803, + 0.004548211036992116, + 0.004527618472683369, + 0.004507211538461538, + 0.004486987735566856, + 0.004466944609886838, + 0.004447079750963533, + 0.004427390791027155, + 0.004407875404055245, + 0.004388531304856641, + 0.004369356248179435, + 0.004350348027842226, + 0.004331504475887958, + 0.004312823461759632, + 0.0042943028914972795, + 0.00427594070695553, + 0.004257734885041158, + 0.004239683436970039, + 0.004221784407542921, + 0.004204035874439462, + 0.004186435947530002, + 0.004168982768204558, + 0.004151674508718517, + 0.004134509371554575, + 0.0041174855888004395, + 0.0041006014215418255, + 0.004083855159270351, + 0.004067245119305857, + 0.0040507696462327835, + 0.004034427111350188, + 0.004018215912135012, + 0.00400213447171825, + 0.003986181238373638, + 0.003970354685018529, + 0.003954653308726601, + 0.003939075630252101, + 0.003923620193565263, + 0.003908285565398645, + 0.003893070334804049, + 0.0038779731127197513, + 0.0038629925315477724, + 0.003848127244740893, + 0.0038333759263991817, + 0.0038187372708757637, + 0.00380420999239158, + 0.003789792824658918, + 0.003775484520513466, + 0.0037612838515546643, + 0.003747189607794154, + 0.0037332005973120955, + 0.00371931564592115, + 0.0037055335968379445, + 0.003691853310361802, + 0.0036782736635605686, + 0.003664793549963352, + 0.0036514118792599806, + 0.0036381275770070334, + 0.003624939584340261, + 0.003611846857693234, + 0.0035988483685220726, + 0.0035859431030360986, + 0.0035731300619342545, + 0.0035604082601471635, + 0.003547776726584674, + 0.0035352345038887575, + 0.0035227806481916393, + 0.0035104142288790077, + 0.0034981343283582086, + 0.0034859400418312805, + 0.0034738304770727192, + 0.003461804754211862, + 0.0034498620055197784, + 0.0034380013752005503, + 0.003426222019186843, + 0.003414523104939676, + 0.003402903811252268, + 0.003391363328057879, + 0.00337990085624155, + 0.0033685156074556477, + 0.0033572068039391225, + 0.0033459736783403964, + 0.003334815473543797, + 0.003323731442499446, + 0.003312720848056537, + 0.003301782962799912, + 0.003290917068889864, + 0.003280122457905095, + 0.003269398430688753, + 0.00325874429719748, + 0.0032481593763533994, + 0.0032376429958989855, + 0.003227194492254733, + 0.0032168132103795838, + 0.0032064985036340315, + 0.003196249733645856, + 0.0031860662701784196, + 0.0031759474910014814, + 0.003165892781764458, + 0.0031559015358720807, + 0.0031459731543624155, + 0.003136107045787163, + 0.0031263026260942056, + 0.003116559318512362, + 0.0031068765534382763, + 0.003097253768325418, + 0.0030876904075751335, + 0.0030781859224297144, + 0.0030687397708674302, + 0.0030593514174994895, + 0.0030500203334688897, + 0.003040745996351105, + 0.0030315278900565883, + 0.0030223655047350393, + 0.003013258336681398, + 0.0030042058882435406, + 0.0029952076677316293, + 0.002986263189329086, + 0.0029773719730051603, + 0.002968533544429052, + 0.0029597474348855564, + 0.002951013181192209, + 0.002942330325617889, + 0.0029336984158028555, + 0.002925117004680187, + 0.0029165856503985997, + 0.0029081039162466072, + 0.002899671370578001, + 0.002891287586738627, + 0.002882952142994426, + 0.0028746646224607126, + 0.002866424613032677, + 0.002858231707317073, + 0.002850085502565077, + 0.00284198560060629, + 0.0028339316077838654, + 0.002825923134890731, + 0.0028179597971068945, + 0.002810041213937804, + 0.0028021670091537454, + 0.002794336810730253, + 0.0027865502507895224, + 0.0027788069655427937, + 0.0027711065952336963, + 0.002763448784082535, + 0.0027558331802314895, + 0.002748259435690729, + 0.002740727206285401, + 0.0027332361516034984, + 0.0027257859349445754, + 0.0027183762232693004, + 0.002711006687149828, + 0.0027036770007209804, + 0.002696386841632213, + 0.002689135891000358, + 0.0026819238333631325, + 0.0026747503566333804, + 0.0026676151520540633, + 0.002660517914153955, + 0.0026534583407040505, + 0.0026464361326746645, + 0.002639450994193208, + 0.0026325026325026324, + 0.002625590757920532, + 0.0026187150837988825, + 0.0026118753264844155, + 0.002605071205279611, + 0.0025983024424042957 + ], + "N": [ + 0.008854616121601697, + 0.008707223675630234, + 0.008563803002136638, + 0.008424203281479702, + 0.008288281125775163, + 0.008155900128753694, + 0.008026930447898869, + 0.007901248416197597, + 0.007778736181084501, + 0.0076592813683848005, + 0.0075427767692604905, + 0.007429120048344508, + 0.007318213471409478, + 0.007209963651063348, + 0.007104281309095865, + 0.00700108105421842, + 0.006900281174047264, + 0.006801803440277148, + 0.006705572926080466, + 0.00661151783484682, + 0.006519569339450367, + 0.006429661431298144, + 0.006341730778472546, + 0.006255716592335652, + 0.006171560502012788, + 0.006089206436218191, + 0.006008600511927, + 0.005929690929435683, + 0.005852427873387705, + 0.005776763419372937, + 0.005702651445738383, + 0.005630047550274501, + 0.005558908971465867, + 0.00548919451401739, + 0.00542086447838804, + 0.005353880594083024, + 0.005288205956472866, + 0.005223804966924045, + 0.0051606432760407045, + 0.005098687729830686, + 0.0050379063186218416, + 0.004978268128566341, + 0.00491974329558148, + 0.004862302961585591, + 0.00480591923289692, + 0.004750565140671981, + 0.004696214603267845, + 0.00464284239042029, + 0.004590424089136569, + 0.004538936071207961, + 0.004488355462253253, + 0.004438660112209753, + 0.004389828567193643, + 0.004341840042656236, + 0.004294674397767181, + 0.0042483121109598, + 0.004202734256577632, + 0.004157922482564894, + 0.004113858989146911, + 0.004070526508449759, + 0.0040279082850113125, + 0.0039859880571386135, + 0.003944750039069108, + 0.003904178903895687, + 0.003864259767217733, + 0.0038249781714824855, + 0.003786320070983059, + 0.0037482718174812746, + 0.0037108201464252258, + 0.0036739521637331584, + 0.003637655333116761, + 0.0036019174639184185, + 0.003566726699438356, + 0.0035320715057288593, + 0.0034979406608339693, + 0.0034643232444541957, + 0.0034312086280168306, + 0.0033985864651334776, + 0.003366446682427342, + 0.003334779470713719, + 0.003303575276517965, + 0.0032728247939160307, + 0.0032425189566833686, + 0.003212648930738756, + 0.003183206106870229, + 0.003154182093730946, + 0.003125568711093415, + 0.0030973579833510696, + 0.0030695421332567006, + 0.003042113575887785, + 0.003015064912829195, + 0.002988388926564248, + 0.002962078575065464, + 0.0029361269865768305, + 0.0029105274545797185, + 0.002885273432935002, + 0.0028603585311942335, + 0.0028357765100730926, + 0.0028115212770806136, + 0.0027875868822979876, + 0.002763967514301046, + 0.002740657496220752, + 0.002717651281936313, + 0.0026949434523957623, + 0.002672528712059065, + 0.0026504018854590374, + 0.0026285579138755834, + 0.002606991852118919, + 0.0025856988654176603, + 0.0025646742264078416, + 0.0025439133122190562, + 0.002523411601654123, + 0.0025031646724588013, + 0.0024831681986782284, + 0.0024634179480969064, + 0.002443909779759188, + 0.002424639641567324, + 0.0024056035679542913, + 0.0023867976776286884, + 0.0023682181713891417, + 0.0023498613300057345, + 0.002331723512166089, + 0.002313801152483824, + 0.002296090759567196, + 0.0022785889141458296, + 0.002261292267253511, + 0.0022441975384651152, + 0.002227301514185801, + 0.00221060104599068, + 0.00219409304901325, + 0.002177774500380928, + 0.0021616424376960995, + 0.002145693957561158, + 0.0021299262141460506, + 0.0021143364177969325, + 0.0020989218336845547, + 0.0020836797804910804, + 0.0020686076291340713, + 0.0020537028015264183, + 0.002038962769371063, + 0.002024385052989371, + 0.0020099672201820762, + 0.0019957068851217514, + 0.0019816017072758, + 0.00196764939035899, + 0.001953847681314605, + 0.0019401943693233032, + 0.0019266872848388147, + 0.0019133242986496424, + 0.0019001033209659541, + 0.0018870223005308822, + 0.0018740792237554869, + 0.001861272113876645, + 0.0018485990301371734, + 0.0018360580669874998, + 0.001823647353308234, + 0.0018113650516530073, + 0.0017992093575109678, + 0.0017871784985883433, + 0.0017752707341085064, + 0.0017634843541299873, + 0.0017518176788819048, + 0.001740269058116306, + 0.00172883687047691, + 0.0017175195228837853, + 0.0017063154499334927, + 0.0016952231133142417, + 0.0016842410012356352, + 0.0016733676278725743, + 0.001662601532822924, + 0.0016519412805785423, + 0.0016413854600092965, + 0.0016309326838596957, + 0.0016205815882577865, + 0.0016103308322359656, + 0.0016001790972633753, + 0.0015901250867895612, + 0.001580167525799077, + 0.0015703051603767346, + 0.0015605367572832064, + 0.001550861103540694, + 0.001541277006028389, + 0.0015317832910874602, + 0.0015223788041353065, + 0.0015130624092888243, + 0.0015038329889964504, + 0.0014946894436787398, + 0.0014856306913772533, + 0.0014766556674115337, + 0.001467763324043952, + 0.0014589526301522196, + 0.001450222570909363, + 0.001441572147470964, + 0.0014330003766694754, + 0.00142450629071543, + 0.0014160889369053593, + 0.001407747377336253, + 0.0013994806886263869, + 0.0013912879616423577, + 0.0013831683012321642, + 0.0013751208259641806, + 0.0013671446678718744, + 0.0013592389722041174, + 0.0013514028971809574, + 0.0013436356137547043, + 0.001335936305376202, + 0.0013283041677661543, + 0.0013207384086913836, + 0.0013132382477458913, + 0.0013058029161366082, + 0.0012984316564737185, + 0.00129112372256544, + 0.0012838783792171557, + 0.0012766949020347914, + 0.0012695725772323319, + 0.0012625107014433768, + 0.0012555085815366411, + 0.001248565534435303, + 0.0012416808869401017, + 0.00123485397555611, + 0.001228084146323075, + 0.0012213707546492561, + 0.0012147131651486732, + 0.0012081107514816812, + 0.0012015628961987968, + 0.0011950689905876996, + 0.001188628434523334, + 0.0011822406363210351, + 0.0011759050125926174, + 0.0011696209881053472, + 0.0011633879956437399, + 0.0011572054758741113, + 0.0011510728772118266, + 0.0011449896556911766, + 0.0011389552748378286, + 0.0011329692055437894, + 0.001127030925944825, + 0.0011211399213002793, + 0.0011152956838752421, + 0.0011094977128250087, + 0.0011037455140817812, + 0.0010980386002435645, + 0.0010923764904652038, + 0.0010867587103515174, + 0.0010811847918524818, + 0.0010756542731604165, + 0.0010701666986091323, + 0.0010647216185749955, + 0.0010593185893798664, + 0.0010539571731958725, + 0.0010486369379519764, + 0.0010433574572422982, + 0.0010381183102361553, + 0.0010329190815897829, + 0.0010277593613596985, + 0.0010226387449176757, + 0.0010175568328672907, + 0.0010125132309620137, + 0.0010075075500248036, + 0.001002539405869183, + 0.0009976084192217564, + 0.0009927142156461424, + 0.0009878564254682937, + 0.0009830346837031686, + 0.000978248629982734, + 0.000973497908485267, + 0.0009687821678659275, + 0.0009641010611885813, + 0.000959454245858839, + 0.0009548413835582954, + 0.0009502621401799363, + 0.0009457161857646944, + 0.0009412031944391278, + 0.0009367228443541996, + 0.0009322748176251361, + 0.000927858800272341, + 0.0009234744821633451, + 0.0009191215569557699, + 0.0009147997220412855, + 0.0009105086784905426, + 0.0009062481309990585, + 0.0009020177878340384, + 0.0008978173607821148, + 0.0008936465650979841, + 0.0008895051194539249, + 0.0008853927458901798, + 0.0008813091697661838, + 0.0008772541197126216, + 0.0008732273275843004, + 0.0008692285284138195, + 0.0008652574603660209, + 0.00086131386469321, + 0.0008573974856911257, + 0.0008535080706556496, + 0.0008496453698402383, + 0.000845809136414065, + 0.0008419991264208584, + 0.000838215098738422, + 0.0008344568150388249, + 0.0008307240397492487 + ], + "O": [ + 0.006672000000000001, + 0.006537618321456978, + 0.0064076883479513074, + 0.006282000824795074, + 0.006160359280426139, + 0.006042579067555941, + 0.005928486489285973, + 0.0058179180015381915, + 0.005710719484137543, + 0.005606745573751442, + 0.005505859052648953, + 0.005407930287906519, + 0.005312836716270131, + 0.005220462370396635, + 0.005130697442648769, + 0.005043437883017381, + 0.004958585028096951, + 0.004876045258352932, + 0.004795729681196518, + 0.004717553837628633, + 0.004641437430434091, + 0.0045673040721020694, + 0.004495081050823367, + 0.004424699113070654, + 0.004356092261407321, + 0.004289197566295489, + 0.0042239549907858755, + 0.004160307227072925, + 0.004098199543989308, + 0.004037579644595475, + 0.0039783975330936845, + 0.003920605390362315, + 0.003864157457466468, + 0.003809009926555203, + 0.003755120838605061, + 0.0037024499875142197, + 0.003650958830092206, + 0.0036006104015269607, + 0.003551369235944626, + 0.003503201291707965, + 0.0034560738811271613, + 0.0034099556042821873, + 0.00336481628667912, + 0.003320626920483983, + 0.0032773596090971153, + 0.0032349875148488453, + 0.003193484809613495, + 0.003152826628153721, + 0.003112989024020886, + 0.0030739489278497384, + 0.003035684107897303, + 0.002998173132686494, + 0.002961395335624805, + 0.002925330781477465, + 0.0028899602345827946, + 0.002855265128705184, + 0.0028212275384282316, + 0.0027878301519971512, + 0.002755056245525629, + 0.0027228896584879313, + 0.0026913147704222757, + 0.0026603164787763096, + 0.0026298801778299936, + 0.002599991738635363, + 0.0025706374899164787, + 0.002541804199876458, + 0.002513479058861822, + 0.002485649662837462, + 0.00245830399762844, + 0.0024314304238874924, + 0.002405017662749622, + 0.0023790547821374883, + 0.002353531183683474, + 0.002328436590236341, + 0.0023037610339222705, + 0.0022794948447318656, + 0.0022556286396063353, + 0.0022321533119976237, + 0.0022090600218787003, + 0.002186340186181585, + 0.0021639854696419306, + 0.002141987776030192, + 0.0021203392397505134, + 0.002099032217789514, + 0.002078059281998127, + 0.002057413211690569, + 0.002037086986545386, + 0.0020170737797943145, + 0.0019973669516854795, + 0.0019779600432081614, + 0.001958846770067023, + 0.0019400210168943497, + 0.0019214768316894253, + 0.0019032084204747477, + 0.0018852101421593117, + 0.0018674765035996826, + 0.0018500021548500606, + 0.0018327818845929773, + 0.0018158106157426866, + 0.0017990834012137035, + 0.0017825954198473284, + 0.0017663419724893298, + 0.0017503184782123127, + 0.001734520470676599, + 0.0017189435946237525, + 0.0017035836024971596, + 0.0016884363511843494, + 0.001673497798875979, + 0.00165876400203666, + 0.0016442311124830252, + 0.0016298953745646425, + 0.0016157531224436012, + 0.0016018007774687708, + 0.001588034845640932, + 0.0015744519151651437, + 0.0015610486540868732, + 0.001547821808008586, + 0.0015347681978836213, + 0.0015218847178843354, + 0.001509168333341627, + 0.0014966160787530764, + 0.001484225055857061, + 0.0014719924317703268, + 0.0014599154371865949, + 0.00144799136463389, + 0.0014362175667883914, + 0.0014245914548426716, + 0.0014131104969263089, + 0.0014017722165769288, + 0.001390574191259808, + 0.0013795140509342677, + 0.0013685894766651454, + 0.0013577981992777017, + 0.0013471379980544032, + 0.0013366066994720657, + 0.0013262021759779194, + 0.0013159223448032113, + 0.00130576516681301, + 0.0012957286453909415, + 0.0012858108253576298, + 0.0012760097919216648, + 0.0012663236696619663, + 0.0012567506215404645, + 0.0012472888479440486, + 0.0012379365857547809, + 0.00122869210744742, + 0.0012195537202133197, + 0.0012105197651098157, + 0.0012015886162342487, + 0.0011927586799217885, + 0.0011840283939662823, + 0.0011753962268633508, + 0.001166860677075005, + 0.00115842027231508, + 0.0011500735688547944, + 0.0011418191508477955, + 0.001133655629674048, + 0.0011255816433019628, + 0.001117595855668181, + 0.001109696956074448, + 0.0011018836586010345, + 0.001094154701536179, + 0.0010865088468210498, + 0.0010789448795097364, + 0.0010714616072437998, + 0.0010640578597409345, + 0.0010567324882972942, + 0.0010494843653030728, + 0.0010423123837709214, + 0.0010352154568768171, + 0.001028192517513, + 0.0010212425178526112, + 0.0010143644289256843, + 0.0010075572402061422, + 0.0010008199592094723, + 0.0009941516111007637, + 0.000987551238312793, + 0.0009810179001738667, + 0.0009745506725451315, + 0.0009681486474670697, + 0.0009618109328149199, + 0.000955536651962756, + 0.0009493249434559754, + 0.0009431749606919559, + 0.0009370858716086416, + 0.0009310568583808374, + 0.0009250871171239838, + 0.0009191758576052061, + 0.0009133223029614296, + 0.0009075256894243605, + 0.0009017852660521408, + 0.0008961002944674903, + 0.0008904700486021544, + 0.0008848938144474832, + 0.0008793708898109714, + 0.0008739005840785956, + 0.0008684822179827887, + 0.0008631151233758978, + 0.0008577986430089778, + 0.0008525321303157718, + 0.0008473149492017417, + 0.0008421464738380122, + 0.0008370260884600943, + 0.000831953187171262, + 0.000826927173750459, + 0.0008219474614646132, + 0.000817013472885243, + 0.0008121246397092433, + 0.0008072804025837398, + 0.0008024802109349063, + 0.000797723522800641, + 0.0007930098046670013, + 0.0007883385313083017, + 0.0007837091856307768, + 0.0007791212585197204, + 0.000774574248690012, + 0.0007700676625399412, + 0.0007656010140082497, + 0.0007611738244343058, + 0.0007567856224213362, + 0.0007524359437026345, + 0.0007481243310106732, + 0.0007438503339490465, + 0.0007396135088671749, + 0.0007354134187376992, + 0.0007312496330365006, + 0.0007271217276252825, + 0.0007230292846366464, + 0.0007189718923616072, + 0.0007149491451394832, + 0.0007109606432501059, + 0.0007070059928082911, + 0.0007030848056605191, + 0.0006991966992837697, + 0.000695341296686457, + 0.0006915182263114217, + 0.000687727121940922, + 0.0006839676226035834, + 0.000680239372483257, + 0.0006765420208297415, + 0.0006728752218713263, + 0.0006692386347291119, + 0.0006656319233330671, + 0.0006620547563397798, + 0.0006585068070518658, + 0.0006549877533389945, + 0.0006514972775604944, + 0.0006480350664895024, + 0.0006446008112386229, + 0.000641194207187059, + 0.0006378149539091841, + 0.0006344627551045221, + 0.000631137318529102, + 0.0006278383559281564, + 0.0006245655829701356, + 0.000621318719182005, + 0.0006180974878857976, + 0.0006149016161363962, + 0.0006117308346605142, + 0.0006085848777968498, + 0.0006054634834373898, + 0.0006023663929698333, + 0.0005992933512211141, + 0.0005962441064019976, + 0.0005932184100527252, + 0.0005902160169896886, + 0.0005872366852531068, + 0.000584280176055687, + 0.0005813462537322471, + 0.0005784346856902785, + 0.0005755452423614312, + 0.0005726776971538985, + 0.0005698318264056828, + 0.0005670074093387278, + 0.0005642042280138901, + 0.0005614220672867426, + 0.0005586607147641836, + 0.0005559199607618399, + 0.0005531995982622445, + 0.0005504994228737745, + 0.0005478192327903311, + 0.0005451588287517495, + 0.0005425180140049195, + 0.0005398965942656056, + 0.0005372943776809499, + 0.0005347111747926454, + 0.0005321467985007644, + 0.0005296010640282289, + 0.0005270737888859116, + 0.0005245647928383519, + 0.0005220738978700762, + 0.000519600928152511, + 0.0005171457100114733, + 0.0005147080718952312, + 0.0005122878443431199, + 0.0005098848599547039, + 0.0005074989533594729, + 0.0005051299611870616, + 0.0005027777220379843, + 0.0005004420764548712 + ], + "P": [ + 0.004765714285714286, + 0.004669727372469269, + 0.004576920248536648, + 0.004487143446282195, + 0.004400256628875813, + 0.0043161279053971005, + 0.004234633206632837, + 0.004155655715384422, + 0.00407908534581253, + 0.004004818266965316, + 0.003932756466177824, + 0.003862807348504656, + 0.003794883368764379, + 0.003728901693140453, + 0.0036647838876062637, + 0.0036024556307267005, + 0.003541846448640679, + 0.0034828894702520936, + 0.0034255212008546553, + 0.003369681312591881, + 0.0033153124503100652, + 0.0032623600515014777, + 0.0032107721791595476, + 0.0031604993664790387, + 0.0031114944724338007, + 0.0030637125473539206, + 0.0030171107077041964, + 0.0029716480193378034, + 0.0029272853885637913, + 0.0028839854604253393, + 0.002841712523638346, + 0.002800432421687368, + 0.0027601124696189057, + 0.002720721376110859, + 0.0026822291704321865, + 0.0026446071339387284, + 0.002607827735780147, + 0.002571864572519258, + 0.002536692311389019, + 0.002502286636934261, + 0.002468624200805115, + 0.0024356825744872765, + 0.0024034402047708003, + 0.0023718763717742735, + 0.0023409711493550824, + 0.002310705367749175, + 0.0022810605782953536, + 0.0022520190201098006, + 0.002223563588586347, + 0.0021956778056069558, + 0.002168345791355216, + 0.0021415522376332097, + 0.0021152823825891466, + 0.002089521986769618, + 0.002064257310416282, + 0.0020394750919322745, + 0.0020151625274487366, + 0.0019913072514265366, + 0.0019678973182325923, + 0.0019449211846342366, + 0.0019223676931587681, + 0.0019002260562687924, + 0.0018784858413071382, + 0.0018571369561681162, + 0.0018361696356546276, + 0.0018155744284831844, + 0.0017953421849013014, + 0.0017754640448839013, + 0.0017559314268774573, + 0.0017367360170624944, + 0.0017178697591068725, + 0.00169932484438392, + 0.001681093702631053, + 0.0016631689930259577, + 0.0016455435956587645, + 0.001628210603379904, + 0.0016111633140045252, + 0.0015943952228554454, + 0.0015779000156276432, + 0.0015616715615582749, + 0.0015457039068870933, + 0.0015299912685929943, + 0.0015145280283932238, + 0.00149930872699251, + 0.0014843280585700904, + 0.0014695808654932635, + 0.0014550621332467045, + 0.0014407669855673675, + 0.0014266906797753423, + 0.0014128286022915438, + 0.0013991762643335878, + 0.0013857292977816783, + 0.0013724834512067324, + 0.0013594345860533912, + 0.001346578672970937, + 0.0013339117882854876, + 0.0013214301106071861, + 0.0013091299175664124, + 0.0012970075826733475, + 0.0012850595722955025, + 0.0012732824427480916, + 0.0012616728374923785, + 0.0012502274844373661, + 0.001238943193340428, + 0.0012278168533026803, + 0.001216845430355114, + 0.001206025965131678, + 0.0011953555706256992, + 0.0011848314300261856, + 0.0011744507946307324, + 0.0011642109818318874, + 0.0011541093731740008, + 0.0011441434124776935, + 0.0011343106040292371, + 0.0011246085108322455, + 0.001115034752919195, + 0.0011055870057204186, + 0.001096262998488301, + 0.0010870605127745253, + 0.001077977380958305, + 0.001069011484823626, + 0.001060160754183615, + 0.0010514231655502334, + 0.0010427967408475677, + 0.0010342795461670642, + 0.0010258696905631366, + 0.0010175653248876225, + 0.0010093646406616492, + 0.0010012658689835207, + 0.0009932672794712913, + 0.0009853671792387625, + 0.0009775639119036753, + 0.0009698558566269297, + 0.0009622414271817166, + 0.0009547190710514754, + 0.0009472872685556567, + 0.0009399445320022938, + 0.0009326894048664356, + 0.0009255204609935297, + 0.0009184363038268784, + 0.0009114355656583319, + 0.0009045169069014044, + 0.0008976790153860461, + 0.0008909206056743204, + 0.0008842404183962721, + 0.0008776372196053, + 0.0008711098001523712, + 0.0008646569750784399, + 0.0008582775830244633, + 0.0008519704856584202, + 0.0008457345671187731, + 0.0008395687334738219, + 0.0008334719121964322, + 0.0008274430516536286, + 0.0008214811206105673, + 0.0008155851077484253, + 0.0008097540211957485, + 0.0008039868880728306, + 0.0007982827540487006, + 0.00079264068291032, + 0.0007870597561435961, + 0.000781539072525842, + 0.0007760777477293213, + 0.000770674913935526, + 0.0007653297194598571, + 0.0007600413283863817, + 0.000754808920212353, + 0.0007496316895021948, + 0.0007445088455506581, + 0.0007394396120548694, + 0.000734423226795, + 0.0007294589413232937, + 0.000724546020661203, + 0.0007196837430043872, + 0.0007148713994353374, + 0.0007101082936434027, + 0.0007053937416519949, + 0.0007007270715527619, + 0.0006961076232465225, + 0.0006915347481907641, + 0.0006870078091535142, + 0.0006825261799733971, + 0.0006780892453256967, + 0.0006736964004942542, + 0.0006693470511490297, + 0.0006650406131291696, + 0.000660776512231417, + 0.0006565541840037187, + 0.0006523730735438784, + 0.0006482326353031147, + 0.0006441323328943863, + 0.0006400716389053502, + 0.0006360500347158245, + 0.0006320670103196308, + 0.0006281220641506939, + 0.0006242147029132826, + 0.0006203444414162777, + 0.0006165108024113556, + 0.0006127133164349841, + 0.0006089515216541226, + 0.0006052249637155298, + 0.0006015331955985802, + 0.0005978757774714959, + 0.0005942522765509014, + 0.0005906622669646135, + 0.0005871053296175808, + 0.0005835810520608878, + 0.0005800890283637452, + 0.0005766288589883856, + 0.0005732001506677901, + 0.000569802516286172, + 0.0005664355747621437, + 0.0005630989509345012, + 0.0005597922754505548, + 0.0005565151846569431, + 0.0005532673204928657, + 0.0005500483303856723, + 0.0005468578671487498, + 0.000543695588881647, + 0.000540561158872383, + 0.0005374542455018818, + 0.0005343745221504808, + 0.0005313216671064617, + 0.0005282953634765535, + 0.0005252952990983565, + 0.0005223211664546433, + 0.0005193726625894874, + 0.000516449489026176, + 0.0005135513516868624, + 0.0005106779608139166, + 0.0005078290308929327, + 0.0005050042805773507, + 0.0005022034326146564, + 0.0004994262137741212, + 0.0004966723547760407, + 0.0004939415902224441, + 0.0004912336585292299, + 0.0004885483018597025, + 0.0004858852660594693, + 0.0004832443005926725, + 0.0004806251584795187, + 0.00047802759623507987, + 0.0004754513738093336, + 0.00047289625452841407, + 0.00047036200503704695, + 0.0004678483952421389, + 0.00046535519825749596, + 0.00046288219034964454, + 0.00046042915088473065, + 0.00045799586227647065, + 0.0004555821099351315, + 0.0004531876822175158, + 0.00045081237037793, + 0.0004484559685201117, + 0.00044611827355009687, + 0.0004437990851300035, + 0.0004414982056327125, + 0.0004392154400974258, + 0.00043695059618608154, + 0.000434703484140607, + 0.00043247391674099275, + 0.00043026170926416664, + 0.000428066679443653, + 0.0004258886474299982, + 0.00042372743575194656, + 0.000421582869278349, + 0.0004194547751807906, + 0.0004173429828969193, + 0.00041524732409446214, + 0.00041316763263591315, + 0.0004111037445438794, + 0.0004090554979670703, + 0.0004070227331469163, + 0.0004050052923848055, + 0.0004030030200099215, + 0.0004010157623476733, + 0.0003990433676887026, + 0.000397085686258457, + 0.0003951425701873175, + 0.00039321387348126746, + 0.0003912994519930937, + 0.0003893991633941068, + 0.000387512867146371, + 0.00038564042447543253, + 0.00038378169834353564, + 0.00038193655342331817, + 0.00038010485607197457, + 0.0003782864743058778, + 0.00037648127777565113, + 0.00037468913774167987, + 0.00037290992705005444, + 0.0003711435201089364, + 0.0003693897928653381, + 0.00036764862278230797, + 0.00036591988881651424, + 0.00036420347139621705, + 0.0003624992523996234, + 0.0003608071151336154, + 0.00035912694431284594, + 0.0003574586260391937 + ], + "Q": [ + 0.011633788568538188, + 0.0115, + 0.011369253583786454, + 0.011241446725317693, + 0.011116481391976801, + 0.010994263862332695, + 0.010874704491725767, + 0.010757717492984098, + 0.010643220731142988, + 0.01053113553113553, + 0.01042138649750793, + 0.01031390134529148, + 0.01020861074123391, + 0.010105448154657293, + 0.010004349717268378, + 0.009905254091300603, + 0.009808102345415778, + 0.009712837837837838, + 0.009619406106231703, + 0.009527754763877381, + 0.00943783340172343, + 0.00934959349593496, + 0.009262988320579943, + 0.009177972865123701, + 0.009094503756425464, + 0.009012539184952978, + 0.008932038834951455, + 0.008852963818321785, + 0.00877527661198016, + 0.00869894099848714, + 0.008623922009748783, + 0.008550185873605948, + 0.008477699963140434, + 0.008406432748538013, + 0.008336353751359188, + 0.00826743350107836, + 0.00819964349376114, + 0.008132956152758133, + 0.008067344791301298, + 0.008002783576896311, + 0.007939247497411114, + 0.007876712328767124, + 0.00781515460414543, + 0.007754551584625758, + 0.007694881231180997, + 0.0076361221779548474, + 0.00757825370675453, + 0.007521255722694572, + 0.007465108730931516, + 0.007409793814432989, + 0.007355292612727855, + 0.007301587301587302, + 0.007248660573589662, + 0.007196495619524406, + 0.0071450761105933515, + 0.007094386181369525, + 0.007044410413476264, + 0.0069951338199513375, + 0.00694654183026276, + 0.006898620275944811, + 0.0068513553768245455, + 0.006804733727810651, + 0.006758742286218043, + 0.006713368359603035, + 0.006668599594085243, + 0.0066244239631336405, + 0.006580829756795421, + 0.006537805571347356, + 0.006495340299350466, + 0.006453423120089787, + 0.006412043490381935, + 0.006371191135734072, + 0.006330856041838701, + 0.006291028446389497, + 0.006251698831204131, + 0.006212857914640735, + 0.006174496644295303, + 0.0061366061899679825, + 0.006099177936886768, + 0.0060622034791776485, + 0.006025674613570867, + 0.005989583333333334, + 0.00595392182241781, + 0.005918682449819866, + 0.00588385776413405, + 0.005849440488301119, + 0.005815423514538559, + 0.0057817998994469585, + 0.005748562859285179, + 0.005715705765407555, + 0.0056832221398566835, + 0.00565110565110565, + 0.005619350109943806, + 0.005587949465500486, + 0.0055568978014013054, + 0.005526189332051898, + 0.005495818399044204, + 0.005465779467680608, + 0.00543606712361144, + 0.0054066760695815706, + 0.005377601122281973, + 0.005348837209302326, + 0.005320379366180892, + 0.00529222273354809, + 0.005264362554360266, + 0.005236794171220401, + 0.005209513023782559, + 0.005182514646237043, + 0.0051557946648733465, + 0.005129348795718109, + 0.005103172842245396, + 0.005077262693156733, + 0.0050516143202284204, + 0.005026223776223775, + 0.0050010871928680145, + 0.0049762007788836, + 0.0049515608180839615, + 0.004927163667523564, + 0.004903005755702409, + 0.00487908358082308, + 0.004855393709098586, + 0.004831932773109244, + 0.004808697470206983, + 0.00478568456096546, + 0.004762890867674467, + 0.004740313272877164, + 0.004717948717948718, + 0.0046957942017149855, + 0.004673846779109938, + 0.00465210355987055, + 0.004630561707267968, + 0.004609218436873747, + 0.004588071015360064, + 0.0045671167593328045, + 0.004546353034196481, + 0.00452577725304998, + 0.0045053868756121445, + 0.004485179407176287, + 0.004465152397592701, + 0.004445303440278315, + 0.004425630171252646, + 0.004406130268199234, + 0.004386801449551783, + 0.004367641473604253, + 0.004348648137644167, + 0.004329819277108434, + 0.004311152764761012, + 0.00429264650989175, + 0.004274298457535774, + 0.0042561065877128055, + 0.004238068914685831, + 0.004220183486238533, + 0.0042024483829709485, + 0.004184861717612809, + 0.0041674216343540495, + 0.004150126308191989, + 0.0041329739442947, + 0.0041159627773801, + 0.004099091071110319, + 0.0040823571175008875, + 0.0040657592363443525, + 0.004049295774647887, + 0.004032965106084517, + 0.004016765630457562, + 0.004000695773177944, + 0.003984753984753985, + 0.003968938740293356, + 0.0039532485390168445, + 0.003937681903783599, + 0.003922237380627558, + 0.003906913538304739, + 0.0038917089678511, + 0.0038766222821506827, + 0.003861652115513768, + 0.00384679712326476, + 0.0038320559813395535, + 0.003817427385892116, + 0.0038029100529100527, + 0.0037885027178389064, + 0.0037742041352149653, + 0.003760013078306359, + 0.0037459283387622153, + 0.0037319487262696734, + 0.003718073068218558, + 0.00370430020937349, + 0.003690629011553273, + 0.0036770583533173463, + 0.0036635871296591275, + 0.0036502142517060784, + 0.0036369386464263124, + 0.003623759256341579, + 0.003610675039246468, + 0.0035976849679336775, + 0.0035847880299251867, + 0.003571983227209194, + 0.003559269575982668, + 0.003546646106399383, + 0.0035341118623232943, + 0.003521665901087123, + 0.003509307293256027, + 0.0034970351223962293, + 0.003484848484848485, + 0.003472746489506266, + 0.0034607282575985555, + 0.0034487929224771333, + 0.0034369396294082486, + 0.003425167535368578, + 0.003413475808845355, + 0.0034018636296405855, + 0.0033903301886792454, + 0.0033788746878213607, + 0.0033674963396778915, + 0.0033561943674303226, + 0.0033449680046538682, + 0.0033338164951442237, + 0.0033227390927477608, + 0.0033117350611951042, + 0.0033008036739380023, + 0.003289944213989415, + 0.003279155973766752, + 0.0032684382549381837, + 0.0032577903682719546, + 0.0032472116334886347, + 0.00323670137911624, + 0.0032262589423481557, + 0.003215883668903803, + 0.003205574912891986, + 0.0031953320366768546, + 0.0031851544107464338, + 0.0031750414135836556, + 0.0031649924315398374, + 0.0031550068587105624, + 0.003145084096813893, + 0.0031352235550708833, + 0.0031254246500883273, + 0.003115686805743701, + 0.0031060094530722484, + 0.0030963920301561657, + 0.003086833982015837, + 0.0030773347605030773, + 0.003067893824196345, + 0.0030585106382978724, + 0.003049184674532679, + 0.0030399154110494317, + 0.0030307023323230993, + 0.00302154492905938, + 0.0030124426981008516, + 0.0030033951423348135, + 0.002994401770602786, + 0.0029854620976116305, + 0.002976575643846253, + 0.002967741935483871, + 0.00295896050430979, + 0.0029502308876346844, + 0.0029415526282133265, + 0.002932925274164754, + 0.002924348378893833, + 0.0029158215010141987, + 0.002907344204272532, + 0.002898916057474162, + 0.0028905366344099534, + 0.0028822055137844613, + 0.0028739222791453202, + 0.002865686518813855, + 0.002857497825816872, + 0.0028493557978196238, + 0.0028412600370599137, + 0.002833210150283321, + 0.0028252057486795232, + 0.002817246447819696, + 0.002809331867594967, + 0.002801461632155907, + 0.00279363536985303, + 0.0027858527131782943, + 0.0027781132987075735, + 0.0027704167670440857, + 0.002762762762762763, + 0.0027551509343555344, + 0.0027475809341775182, + 0.002740052418394091, + 0.0027325650469288347, + 0.0027251184834123222, + 0.0027177123951317495, + 0.002710346452981381, + 0.002703020331413797, + 0.0026957337083919363, + 0.0026884862653419055, + 0.002681277687106552, + 0.002674107661899779, + 0.002666975881261596, + 0.0026598820400138773, + 0.00265282583621684, + 0.0026458069711261935, + 0.0026388251491509863, + 0.0026318800778121062, + 0.0026249714677014377, + 0.002618099032441662, + 0.002611262488646685, + 0.002604461555882686, + 0.002597695956629772 + ], + "R": [ + 0.006004547910202662, + 0.005968708513968579, + 0.005933294409113055, + 0.005898298070149854, + 0.005863712148102884, + 0.005829529465359196, + 0.005795743010704735, + 0.005762345934529511, + 0.005729331544197747, + 0.005696693299579225, + 0.005664424808725421, + 0.005632519823700388, + 0.005600972236545987, + 0.005569776075383892, + 0.005538925500647052, + 0.0055084148014354906, + 0.00547823839199113, + 0.005448390808290515, + 0.005418866704745007, + 0.005389660851009559, + 0.005360768128894078, + 0.005332183529372481, + 0.005303902149688344, + 0.005275919190551814, + 0.005248229953424444, + 0.0052208298378872975, + 0.0051937143390963225, + 0.005166879045310324, + 0.005140319635499324, + 0.005114031877025527, + 0.005088011623392674, + 0.005062254812068456, + 0.005036757462367314, + 0.005011515673401412, + 0.004986525622090676, + 0.0049617835612312255, + 0.004937285817624204, + 0.004913028790256568, + 0.0048890089485365, + 0.004865222830581217, + 0.004841667041552533, + 0.004818338252042587, + 0.004795233196504434, + 0.004772348671728599, + 0.004749681535362038, + 0.004727228704471065, + 0.004704987154141582, + 0.004682953916123056, + 0.004661126077504907, + 0.004639500779435091, + 0.00461807521587132, + 0.0045968466323675905, + 0.0045758123248915705, + 0.004554969638679296, + 0.004534315967116731, + 0.004513848750653526, + 0.004493565475744976, + 0.004473463673823286, + 0.004453540920296595, + 0.00443379483357309, + 0.004414223074112433, + 0.0043948233435031625, + 0.004375593383559417, + 0.004356530975448081, + 0.004337633938833463, + 0.004318900131046188, + 0.004300327446275176, + 0.00428191381477494, + 0.004263657202099758, + 0.00424555560835338, + 0.004227607067458283, + 0.004209809646444018, + 0.004192161444754872, + 0.0041746605935693015, + 0.004157305255145127, + 0.004140093622173158, + 0.004123023917149471, + 0.004106094391766124, + 0.004089303326311855, + 0.004072649029090103, + 0.004056129835852351, + 0.004039744109241683, + 0.004023490238252991, + 0.004007366637705179, + 0.003991371747724681, + 0.003975504033243427, + 0.003959761983507448, + 0.003944144111596604, + 0.00392864895395828, + 0.00391327506994843, + 0.0038980210413848138, + 0.003882885472113351, + 0.003867866987579349, + 0.0038529642344125037, + 0.003838175880021666, + 0.003823500612194497, + 0.0038089371387128867, + 0.0037944841869708146, + 0.0037801405036055336, + 0.0037659048541334172, + 0.003751776022598685, + 0.0037377528112227942, + 0.00372383404007115, + 0.0037100185467175972, + 0.003696305185923343, + 0.0036826928293201, + 0.003669180365100333, + 0.003655766697713503, + 0.003642450747572523, + 0.0036292314507615497, + 0.0036161077587542056, + 0.0036030786381355817, + 0.003590143070330898, + 0.003577300051341048, + 0.0035645485914816977, + 0.003551887715129487, + 0.003539316460473785, + 0.0035268338792715515, + 0.0035144390366104172, + 0.0035021310106753134, + 0.003489908892518434, + 0.0034777717858367474, + 0.0034657188067530598, + 0.0034537490836001883, + 0.003441861756712017, + 0.003430055978217439, + 0.0034183309118376304, + 0.0034066857326906508, + 0.003395119627096266, + 0.0033836317923869874, + 0.0033722214367228887, + 0.003360887778908417, + 0.003349630048215202, + 0.0033384474842079737, + 0.0033273393365707005, + 0.0033163048649416105, + 0.00330534333874688, + 0.0032944540370407616, + 0.0032836362483459336, + 0.003272889270500956, + 0.0032622124105041728, + 0.003251604984370049, + 0.003241066316979291, + 0.003230595741936293, + 0.0032201926014299165, + 0.003209856246094711, + 0.00319958603487569, + 0.003189381334896657, + 0.0031792415213294234, + 0.0031691659772663527, + 0.0031591540935962392, + 0.003149205268879074, + 0.0031393189092294715, + 0.00312949442819499, + 0.003119731246641111, + 0.003110028792638886, + 0.003100386501351249, + 0.0030908038149251027, + 0.0030812801823825176, + 0.0030718150595157034, + 0.0030624079087828715, + 0.00305305819920787, + 0.0030437654062775987, + 0.003034529011847198, + 0.0030253485040407924, + 0.0030162233771588998, + 0.0030071531315847277, + 0.0029981372736931355, + 0.002989175315761372, + 0.002980266775880258, + 0.0029714111778695873, + 0.0029626080511904185, + 0.0029538569308653617, + 0.002945157357392425, + 0.002936508876669519, + 0.0029279110399107466, + 0.0029193634035717952, + 0.002910865529272888, + 0.0029024169837235103, + 0.002894017338648469, + 0.0028856661707168385, + 0.0028773630614695733, + 0.002869107597249787, + 0.002860899369135028, + 0.0028527379728677804, + 0.002844623008792402, + 0.002836554081785625, + 0.0028285308011961607, + 0.0028205527807791952, + 0.0028126196386362157, + 0.0028047309971523937, + 0.002796886482938188, + 0.0027890857267696134, + 0.0027813283635289565, + 0.0027736140321521496, + 0.002765942375567043, + 0.002758313040642779, + 0.0027507256781336142, + 0.0027431799426256287, + 0.00273567549248499, + 0.0027282119898066615, + 0.0027207891003608875, + 0.0027134064935483426, + 0.0027060638423468397, + 0.0026987608232635907, + 0.0026914971162903534, + 0.0026842724048534716, + 0.0026770863757694663, + 0.0026699387192001822, + 0.002662829128607047, + 0.002655757300708217, + 0.002648722935435055, + 0.0026417257358890556, + 0.0026347654083018757, + 0.0026278416619927025, + 0.0026209542093269533, + 0.00261410276567986, + 0.002607287049392948, + 0.002600506781739176, + 0.002593761686882079, + 0.002587051491840908, + 0.00258037592645044, + 0.002573734723329446, + 0.0025671276178402813, + 0.002560554348056243, + 0.0025540146547273768, + 0.0025475082812436156, + 0.0025410349736056936, + 0.0025345944803871756, + 0.0025281865527051472, + 0.0025218109441875747, + 0.002515467410940886, + 0.0025091557115197727, + 0.0025028756068952163, + 0.0024966268604271757, + 0.002490409237830171, + 0.002484222507149747, + 0.002478066438728277, + 0.002471940805180539, + 0.0024658453813630743, + 0.002459779944348206, + 0.0024537442733956194, + 0.002447738149927714, + 0.00244176135749985, + 0.0024358136817774767, + 0.002429894910509489, + 0.0024240048335013586, + 0.0024181432425933735, + 0.0024123099316328833, + 0.0024065046964532044, + 0.002400727334847197, + 0.002394977646544616, + 0.0023892554331903515, + 0.002383560498319337, + 0.0023778926473358997, + 0.0023722516874904453, + 0.0023666374278588087, + 0.0023610496793184943, + 0.002355488254530691, + 0.002349952967916069, + 0.0023444436356363507, + 0.0023389600755732154, + 0.00233350210730765, + 0.0023280695521019634, + 0.0023226622328778035, + 0.002317279974198838, + 0.002311922602250549, + 0.0023065899448233562, + 0.002301281831290636, + 0.002295998092595619, + 0.0022907385612285225, + 0.0022855030712112256, + 0.002280291458080841, + 0.0022751035588690627, + 0.002269939212089289, + 0.002264798257716638, + 0.00225968053717307, + 0.0022545858933107343, + 0.002249514170395095, + 0.0022444652140911625, + 0.0022394388714450653, + 0.002234434990870948, + 0.0022294534221338758, + 0.002224494016336953, + 0.0022195566259033406, + 0.0022146411045658176, + 0.002209747307348353, + 0.0022048750905538927, + 0.0022000243117503704, + 0.002195194829755609, + 0.0021903865046257742, + 0.0021855991976387212, + 0.0021808327712835585, + 0.0021760870892459927, + 0.0021713620163963387, + 0.0021666574187744203, + 0.002161973163580466, + 0.002157309119159345, + 0.002152665154989908, + 0.002148041141672774 + ], + "S": [ + 0.010714285714285714, + 0.010600706713780918, + 0.010489510489510488, + 0.010380622837370243, + 0.010273972602739725, + 0.010169491525423728, + 0.01006711409395973, + 0.009966777408637875, + 0.009868421052631578, + 0.009771986970684038, + 0.00967741935483871, + 0.009584664536741214, + 0.009493670886075948, + 0.009404388714733541, + 0.009316770186335404, + 0.00923076923076923, + 0.009146341463414634, + 0.00906344410876133, + 0.008982035928143712, + 0.00890207715133531, + 0.008823529411764704, + 0.008746355685131196, + 0.008670520231213872, + 0.008595988538681947, + 0.008522727272727274, + 0.008450704225352114, + 0.008379888268156424, + 0.008310249307479223, + 0.008241758241758242, + 0.008174386920980926, + 0.008108108108108107, + 0.00804289544235925, + 0.007978723404255319, + 0.007915567282321899, + 0.007853403141361256, + 0.007792207792207793, + 0.007731958762886598, + 0.007672634271099744, + 0.007614213197969543, + 0.007556675062972292, + 0.0075, + 0.007444168734491314, + 0.007389162561576355, + 0.007334963325183374, + 0.007281553398058252, + 0.0072289156626506035, + 0.007177033492822967, + 0.007125890736342042, + 0.007075471698113207, + 0.007025761124121781, + 0.0069767441860465115, + 0.0069284064665127015, + 0.006880733944954128, + 0.00683371298405467, + 0.006787330316742082, + 0.0067415730337078645, + 0.006696428571428572, + 0.0066518847006651885, + 0.0066079295154185015, + 0.006564551422319475, + 0.006521739130434783, + 0.0064794816414686825, + 0.006437768240343348, + 0.006396588486140726, + 0.006355932203389831, + 0.00631578947368421, + 0.006276150627615062, + 0.006237006237006237, + 0.006198347107438017, + 0.006160164271047227, + 0.006122448979591837, + 0.006085192697768763, + 0.006048387096774193, + 0.006012024048096193, + 0.00597609561752988, + 0.005940594059405941, + 0.005905511811023623, + 0.005870841487279843, + 0.005836575875486381, + 0.005802707930367505, + 0.005769230769230769, + 0.0057361376673040155, + 0.005703422053231939, + 0.005671077504725897, + 0.005639097744360903, + 0.005607476635514019, + 0.0055762081784386614, + 0.005545286506469502, + 0.0055147058823529415, + 0.005484460694698354, + 0.005454545454545455, + 0.005424954792043399, + 0.00539568345323741, + 0.005366726296958855, + 0.005338078291814946, + 0.005309734513274336, + 0.00528169014084507, + 0.005253940455341506, + 0.005226480836236934, + 0.005199306759098787, + 0.005172413793103448, + 0.005145797598627788, + 0.005119453924914676, + 0.0050933786078098476, + 0.005067567567567568, + 0.0050420168067226885, + 0.005016722408026756, + 0.004991680532445923, + 0.004966887417218543, + 0.0049423393739703465, + 0.004918032786885246, + 0.004893964110929853, + 0.004870129870129871, + 0.004846526655896607, + 0.00482315112540193, + 0.0048000000000000004, + 0.004777070063694267, + 0.004754358161648178, + 0.00473186119873817, + 0.004709576138147566, + 0.0046875, + 0.004665629860031105, + 0.0046439628482972135, + 0.004622496147919877, + 0.004601226993865031, + 0.004580152671755725, + 0.004559270516717326, + 0.00453857791225416, + 0.004518072289156626, + 0.004497751124437782, + 0.004477611940298507, + 0.004457652303120356, + 0.004437869822485207, + 0.004418262150220913, + 0.004398826979472141, + 0.004379562043795621, + 0.00436046511627907, + 0.004341534008683068, + 0.004322766570605188, + 0.00430416068866571, + 0.004285714285714286, + 0.004267425320056899, + 0.00424929178470255, + 0.0042313117066290545, + 0.004213483146067416, + 0.004195804195804196, + 0.004178272980501393, + 0.004160887656033287, + 0.004143646408839779, + 0.004126547455295736, + 0.00410958904109589, + 0.004092769440654843, + 0.004076086956521739, + 0.0040595399188092015, + 0.004043126684636119, + 0.004026845637583893, + 0.004010695187165776, + 0.0039946737683089215, + 0.003978779840848806, + 0.003963011889035667, + 0.003947368421052632, + 0.003931847968545216, + 0.00391644908616188, + 0.0039011703511053317, + 0.0038860103626943004, + 0.003870967741935484, + 0.003856041131105399, + 0.0038412291933418692, + 0.003826530612244898, + 0.0038119440914866584, + 0.00379746835443038, + 0.0037831021437578815, + 0.0037688442211055275, + 0.003754693366708386, + 0.003740648379052369, + 0.003726708074534161, + 0.0037128712871287127, + 0.0036991368680641184, + 0.003685503685503685, + 0.0036719706242350062, + 0.003658536585365854, + 0.003645200486026731, + 0.0036319612590799033, + 0.00361881785283474, + 0.0036057692307692305, + 0.003592814371257485, + 0.0035799522673031024, + 0.00356718192627824, + 0.0035545023696682467, + 0.0035419126328217233, + 0.003529411764705882, + 0.0035169988276670576, + 0.003504672897196261, + 0.0034924330616996507, + 0.003480278422273782, + 0.0034682080924855487, + 0.003456221198156682, + 0.0034443168771526975, + 0.003432494279176201, + 0.0034207525655644243, + 0.0034090909090909085, + 0.0033975084937712344, + 0.003386004514672686, + 0.0033745781777277835, + 0.003363228699551569, + 0.0033519553072625698, + 0.0033407572383073493, + 0.0033296337402885677, + 0.0033185840707964597, + 0.00330760749724366, + 0.0032967032967032963, + 0.0032858707557502733, + 0.0032751091703056767, + 0.003264417845484221, + 0.003253796095444685, + 0.003243243243243243, + 0.0032327586206896547, + 0.0032223415682062296, + 0.0032119914346895075, + 0.0032017075773745993, + 0.0031914893617021275, + 0.003181336161187699, + 0.0031712473572938684, + 0.003161222339304531, + 0.0031512605042016808, + 0.0031413612565445023, + 0.0031315240083507304, + 0.003121748178980229, + 0.0031120331950207467, + 0.003102378490175801, + 0.0030927835051546395, + 0.003083247687564234, + 0.003073770491803278, + 0.003064351378958121, + 0.003054989816700611, + 0.0030456852791878168, + 0.0030364372469635624, + 0.0030272452068617556, + 0.003018108651911468, + 0.003009027081243731, + 0.003, + 0.002991026919242273, + 0.002982107355864811, + 0.002973240832507433, + 0.0029644268774703555, + 0.0029556650246305416, + 0.0029469548133595285, + 0.0029382957884427027, + 0.0029296875, + 0.0029211295034079843, + 0.0029126213592233006, + 0.0029041626331074537, + 0.0028957528957528956, + 0.0028873917228103944, + 0.0028790786948176576, + 0.0028708133971291866, + 0.002862595419847328, + 0.002854424357754519, + 0.0028462998102466793, + 0.002838221381267739, + 0.0028301886792452824, + 0.002822201317027281, + 0.0028142589118198874, + 0.0028063610851262856, + 0.002798507462686567, + 0.0027906976744186047, + 0.0027829313543599253, + 0.0027752081406105457, + 0.0027675276752767526, + 0.002759889604415823, + 0.002752293577981651, + 0.0027447392497712718, + 0.0027372262773722625, + 0.0027297543221110098, + 0.0027223230490018148, + 0.0027149321266968325, + 0.002707581227436823, + 0.0027002700270027, + 0.0026929982046678632, + 0.002685765443151298, + 0.002678571428571428, + 0.002671415850400712, + 0.0026642984014209592, + 0.002657218777679362, + 0.0026501766784452294, + 0.0026431718061674008, + 0.002636203866432337, + 0.0026292725679228747, + 0.002622377622377622, + 0.0026155187445510023, + 0.002608695652173913, + 0.002601908065915004, + 0.0025951557093425604, + 0.0025884383088869713, + 0.0025817555938037863, + 0.0025751072961373387, + 0.0025684931506849314, + 0.002561912894961571, + 0.002555366269165247, + 0.002548853016142736 + ], + "T": [ + 0.00850380796908845, + 0.008432102984532452, + 0.00836159713636353, + 0.00829226059392707, + 0.008224064507886597, + 0.008156980970197791, + 0.00809098297603228, + 0.008026044387528186, + 0.007962139899276632, + 0.0078992450054447, + 0.007837335968440051, + 0.0077763897890417155, + 0.0077163841779122055, + 0.007657297528418594, + 0.007599108890691486, + 0.007541797946861495, + 0.007485344987404385, + 0.0074297308885395985, + 0.007374937090636191, + 0.007320945577558247, + 0.007267738856914674, + 0.007215299941167874, + 0.007163612329547986, + 0.007112659990742509, + 0.007062427346318678, + 0.007012899254844607, + 0.0069640609966703515, + 0.006915898259345132, + 0.006868397123633629, + 0.006821544050101158, + 0.0067753258662504035, + 0.006729729754174407, + 0.006684743238701829, + 0.006640354176020935, + 0.006596550742749008, + 0.006553321425432523, + 0.006510655010458999, + 0.006468540574358084, + 0.006426967474479461, + 0.0063859253400244675, + 0.006345404063423432, + 0.0063053937920340974, + 0.00626588492015645, + 0.006226868081345982, + 0.006188334141006946, + 0.006150274189264504, + 0.006112679534098886, + 0.00607554169472313, + 0.006038852395207517, + 0.0060026035583318205, + 0.005966787299655385, + 0.00593139592179992, + 0.0058964219089356895, + 0.005861857921460878, + 0.005827696790863257, + 0.005793931514768147, + 0.005760555252150468, + 0.00572756131871377, + 0.005694943182429579, + 0.0056626944592250705, + 0.005630808908815954, + 0.005599280430683917, + 0.005568103060183294, + 0.005537270964778962, + 0.005506778440411253, + 0.005476619907975877, + 0.005446789909920868, + 0.005417283106954329, + 0.005388094274860755, + 0.005359218301413282, + 0.005330650183392072, + 0.005302385023693068, + 0.005274418028529793, + 0.0052467445047230665, + 0.005219359857074668, + 0.005192259585824921, + 0.005165439284186668, + 0.005138894635956515, + 0.005112621413200902, + 0.005086615474007461, + 0.005060872760313195, + 0.005035389295788395, + 0.00501016118379316, + 0.004985184605389437, + 0.004960455817412779, + 0.004935971150603846, + 0.0049117270077940756, + 0.004887719862140427, + 0.004863946255419638, + 0.004840402796363552, + 0.004817086159048634, + 0.004793993081330328, + 0.004771120363318504, + 0.004748464865902191, + 0.004726023509312727, + 0.004703793271727763, + 0.00468177118791413, + 0.0046599543479111105, + 0.004638339895746801, + 0.004616925028192886, + 0.004595706993552051, + 0.004574683090480036, + 0.004553850666837889, + 0.004533207118577964, + 0.00451274988865813, + 0.004492476465986606, + 0.004472384384393013, + 0.004452471221629173, + 0.00443273459839677, + 0.004413172177397229, + 0.0043937816624113335, + 0.004374560797398619, + 0.004355507365623845, + 0.004336619188805457, + 0.004317894126282251, + 0.004299330074207575, + 0.00428092496476129, + 0.004262676765379725, + 0.004244583478009378, + 0.004226643138376618, + 0.004208853815278024, + 0.004191213609885391, + 0.004173720655071822, + 0.004156373114752698, + 0.004139169183241975, + 0.004122107084627347, + 0.004105185072157624, + 0.004088401427647881, + 0.004071754460896804, + 0.0040552425091204825, + 0.004038863936397075, + 0.004022617133127904, + 0.004006500515510547, + 0.0039905125250219164, + 0.003974651627917769, + 0.003958916314742877, + 0.0039433050998489705, + 0.003927816520930882, + 0.003912449138567142, + 0.003897201535775663, + 0.003882072317577423, + 0.0038670601105719182, + 0.003852163562519939, + 0.0038373813419390057, + 0.00382271213770613, + 0.0038081546586701265, + 0.0037937076332728026, + 0.00377936980917859, + 0.003765139952913499, + 0.003751016849509403, + 0.0037369993021600934, + 0.003723086131883546, + 0.0037092761771888583, + 0.0036955682937556134, + 0.0036819613541165808, + 0.003668454247348407, + 0.003655045878770302, + 0.0036417351696469424, + 0.003628521056900258, + 0.003615402492825881, + 0.0036023784448162566, + 0.003589447895090192, + 0.0035766098404270696, + 0.0035638632919072766, + 0.003551207274659074, + 0.003538640827609685, + 0.0035261630032417113, + 0.0035137728673548807, + 0.003501469498834009, + 0.0034892519894194063, + 0.0034771194434837227, + 0.003465070977813678, + 0.003453105721395122, + 0.0034412228152034263, + 0.0034294214119976463, + 0.0034177006761189066, + 0.003406059783294779, + 0.003394497920443218, + 0.0033830142854864853, + 0.0033716080871626364, + 0.003360278544845441, + 0.0033490248883671914, + 0.00333784635784129, + 0.0033267422034937155, + 0.0033157116854951596, + 0.0033047540737949355, + 0.003293868647961995, + 0.0032830546970259444, + 0.0032723115193222796, + 0.003261638422340951, + 0.003251034722577373, + 0.00324049974538676, + 0.0032300328248400234, + 0.003219633303585656, + 0.0032093005327094026, + 0.0031990338716008093, + 0.0031888326878217743, + 0.0031786963569739868, + 0.003168624262573916, + 0.0031586157959269112, + 0.0031486703560041907, + 0.003138787349323602, + 0.0031289661898306065, + 0.003119206298782373, + 0.003109507104635423, + 0.0030998680429328296, + 0.0030902885561938653, + 0.003080768093809194, + 0.003071306111933403, + 0.0030619020733810842, + 0.003052555447527139, + 0.0030432657102053007, + 0.0030340323436104377, + 0.0030248548362026284, + 0.003015732682612793, + 0.0030066653835501, + 0.0029976524457095977, + 0.002988693381684504, + 0.0029797877098773906, + 0.0029709349544131403, + 0.002962134645056347, + 0.002953386317126494, + 0.002944689511415133, + 0.002936043774108388, + 0.002927448656705911, + 0.0029189037159436104, + 0.0029104085137179325, + 0.0029019626170108115, + 0.0028935655978161723, + 0.0028852170330671, + 0.002876916504565452, + 0.0028686635989116915, + 0.0028604579074362757, + 0.0028522990261325987, + 0.0028441865555901558, + 0.0028361201009288184, + 0.0028280992717368836, + 0.002820123682005793, + 0.002812192950068848, + 0.002804306698541259, + 0.0027964645542597477, + 0.002788666148222374, + 0.0027809111155332467, + 0.0027731990953436814, + 0.0027655297307958016, + 0.002757902668970136, + 0.0027503175608287744, + 0.002742774061162967, + 0.0027352718285413857, + 0.0027278105252579454, + 0.002720389817281621, + 0.0027130093742058214, + 0.0027056688692002062, + 0.0026983679789620574, + 0.002691106383668096, + 0.002683883766930073, + 0.002676699815745698, + 0.002669554220455561, + 0.0026624466746982822, + 0.002655376875366544, + 0.0026483445225631286, + 0.0026413493195605042, + 0.0026343909727573056, + 0.002627469191637699, + 0.002620583688731415, + 0.002613734179573779, + 0.002606920382666189, + 0.002600142019437701, + 0.0025933988142077258, + 0.0025866904941476143, + 0.0025800167892440218, + 0.0025733774322638236, + 0.0025667721587168124, + 0.0025602007068217247, + 0.0025536628174716025, + 0.00254715823419871, + 0.0025406867031421143, + 0.002534247973014603, + 0.0025278417950695964, + 0.00252146792306851, + 0.0025151261132514424, + 0.002508816124304092, + 0.0025025377173271135, + 0.002496290655807476, + 0.002490074705587819, + 0.002483889634836478, + 0.0024777352140203934, + 0.00247161121587558, + 0.002465517415378704, + 0.0024594535897208836, + 0.002453419518279709, + 0.0024474149825919334, + 0.0024414397663288234, + 0.002435493655268184, + 0.0024295764372703754, + 0.00242368790225167, + 0.0024178278421609356, + 0.0024119960509538796, + 0.0024061923245690675, + 0.0024004164609050527 + ], + "U": [ + 0.012711864406779662, + 0.012552301255230127, + 0.012396694214876033, + 0.012244897959183675, + 0.012096774193548387, + 0.01195219123505976, + 0.011811023622047244, + 0.011673151750972763, + 0.011538461538461537, + 0.011406844106463879, + 0.011278195488721806, + 0.011152416356877323, + 0.011029411764705883, + 0.010909090909090908, + 0.01079136690647482, + 0.010676156583629892, + 0.01056338028169014, + 0.010452961672473868, + 0.010344827586206896, + 0.010238907849829353, + 0.010135135135135136, + 0.010033444816053512, + 0.009933774834437087, + 0.009836065573770493, + 0.009740259740259742, + 0.00964630225080386, + 0.009554140127388535, + 0.00946372239747634, + 0.009375, + 0.009287925696594427, + 0.009202453987730062, + 0.009118541033434652, + 0.009036144578313253, + 0.008955223880597014, + 0.008875739644970414, + 0.008797653958944282, + 0.00872093023255814, + 0.008645533141210375, + 0.008571428571428572, + 0.0084985835694051, + 0.008426966292134831, + 0.008356545961002786, + 0.008287292817679558, + 0.00821917808219178, + 0.008152173913043478, + 0.008086253369272238, + 0.008021390374331552, + 0.007957559681697613, + 0.007894736842105263, + 0.00783289817232376, + 0.007772020725388601, + 0.007712082262210797, + 0.007653061224489796, + 0.00759493670886076, + 0.007537688442211055, + 0.007481296758104738, + 0.007425742574257425, + 0.00737100737100737, + 0.007317073170731706, + 0.007263922518159807, + 0.007211538461538461, + 0.007159904534606205, + 0.007109004739336493, + 0.007058823529411764, + 0.007009345794392522, + 0.006960556844547563, + 0.006912442396313364, + 0.006864988558352402, + 0.006818181818181817, + 0.0067720090293453715, + 0.0067264573991031385, + 0.006681514476614699, + 0.006637168141592919, + 0.006593406593406593, + 0.006550218340611353, + 0.00650759219088937, + 0.00646551724137931, + 0.006423982869379014, + 0.006382978723404255, + 0.006342494714587737, + 0.006302521008403361, + 0.006263048016701461, + 0.006224066390041493, + 0.006185567010309277, + 0.006147540983606557, + 0.006109979633401222, + 0.006072874493927125, + 0.006036217303822938, + 0.006, + 0.005964214711729622, + 0.005928853754940712, + 0.005893909626719056, + 0.005859375, + 0.005825242718446601, + 0.00579150579150579, + 0.005758157389635317, + 0.005725190839694656, + 0.005692599620493358, + 0.005660377358490566, + 0.005628517823639775, + 0.005597014925373134, + 0.0055658627087198514, + 0.005535055350553504, + 0.005504587155963302, + 0.005474452554744525, + 0.005444646098003629, + 0.005415162454873646, + 0.0053859964093357264, + 0.005357142857142856, + 0.0053285968028419185, + 0.005300353356890459, + 0.005272407732864674, + 0.005244755244755245, + 0.005217391304347826, + 0.005190311418685121, + 0.0051635111876075735, + 0.005136986301369862, + 0.005110732538330494, + 0.005084745762711864, + 0.00505902192242833, + 0.0050335570469798654, + 0.005008347245409015, + 0.0049833887043189366, + 0.0049586776859504135, + 0.004934210526315789, + 0.004909983633387888, + 0.00488599348534202, + 0.00486223662884927, + 0.004838709677419354, + 0.004815409309791333, + 0.004792332268370606, + 0.0047694753577106515, + 0.004746835443037974, + 0.004724409448818897, + 0.004702194357366771, + 0.004680187207488299, + 0.004658385093167701, + 0.00463678516228748, + 0.004615384615384615, + 0.004594180704441041, + 0.004573170731707317, + 0.004552352048558422, + 0.004531722054380664, + 0.004511278195488721, + 0.004491017964071856, + 0.004470938897168405, + 0.004451038575667655, + 0.0044313146233382564, + 0.004411764705882353, + 0.004392386530014641, + 0.004373177842565597, + 0.0043541364296081275, + 0.004335260115606936, + 0.004316546762589928, + 0.004297994269340973, + 0.0042796005706134095, + 0.004261363636363636, + 0.004243281471004243, + 0.004225352112676056, + 0.004207573632538569, + 0.004189944134078212, + 0.004172461752433936, + 0.004155124653739612, + 0.004137931034482759, + 0.004120879120879121, + 0.004103967168262654, + 0.004087193460490463, + 0.004070556309362279, + 0.004054054054054053, + 0.004037685060565276, + 0.004021447721179625, + 0.004005340453938584, + 0.003989361702127659, + 0.003973509933774834, + 0.003957783641160949, + 0.003942181340341655, + 0.003926701570680628, + 0.003911342894393742, + 0.0038961038961038957, + 0.0038809831824062092, + 0.003865979381443299, + 0.003851091142490372, + 0.003836317135549872, + 0.0038216560509554136, + 0.0038071065989847713, + 0.0037926675094816687, + 0.0037783375314861456, + 0.0037641154328732747, + 0.00375, + 0.0037359900373599006, + 0.003722084367245657, + 0.003708281829419036, + 0.0036945812807881776, + 0.003680981595092024, + 0.003667481662591687, + 0.003654080389768575, + 0.003640776699029126, + 0.0036275695284159614, + 0.0036144578313253017, + 0.003601440576230492, + 0.0035885167464114833, + 0.0035756853396901075, + 0.003562945368171022, + 0.003550295857988166, + 0.0035377358490566034, + 0.0035252643948296128, + 0.0035128805620608904, + 0.0035005834305717617, + 0.0034883720930232558, + 0.003476245654692932, + 0.0034642032332563508, + 0.0034522439585730727, + 0.0034403669724770644, + 0.0034285714285714284, + 0.003416856492027335, + 0.0034052213393870605, + 0.003393665158371041, + 0.003382187147688839, + 0.003370786516853933, + 0.0033594624860022394, + 0.003348214285714286, + 0.003337041156840935, + 0.0033259423503325942, + 0.0033149171270718237, + 0.0033039647577092516, + 0.003293084522502744, + 0.0032822757111597377, + 0.0032715376226826612, + 0.0032608695652173916, + 0.0032502708559046583, + 0.0032397408207343417, + 0.0032292787944025836, + 0.003218884120171674, + 0.003208556149732621, + 0.003198294243070363, + 0.003188097768331562, + 0.0031779661016949155, + 0.0031678986272439284, + 0.003157894736842105, + 0.0031479538300104933, + 0.0031380753138075318, + 0.0031282586027111575, + 0.0031185031185031187, + 0.0031088082901554407, + 0.0030991735537190084, + 0.0030895983522142125, + 0.0030800821355236145, + 0.0030706243602865915, + 0.0030612244897959186, + 0.0030518819938962364, + 0.0030425963488843813, + 0.003033367037411527, + 0.003024193548387097, + 0.0030150753768844224, + 0.003006012024048096, + 0.0029970029970029974, + 0.00298804780876494, + 0.002979145978152929, + 0.0029702970297029708, + 0.0029615004935834156, + 0.002952755905511811, + 0.002944062806673209, + 0.002935420743639922, + 0.002926829268292683, + 0.0029182879377431907, + 0.002909796314258002, + 0.0029013539651837525, + 0.0028929604628736743, + 0.0028846153846153848, + 0.0028763183125599234, + 0.0028680688336520078, + 0.0028598665395614875, + 0.0028517110266159697, + 0.0028436018957345975, + 0.002835538752362949, + 0.002827521206409048, + 0.0028195488721804514, + 0.0028116213683223993, + 0.0028037383177570096, + 0.0027958993476234857, + 0.0027881040892193307, + 0.0027803521779425394, + 0.002772643253234751, + 0.0027649769585253456, + 0.0027573529411764708, + 0.0027497708524289646, + 0.002742230347349177, + 0.0027347310847766638, + 0.002727272727272727, + 0.0027198549410698096, + 0.0027124773960217, + 0.0027051397655545534, + 0.002697841726618705, + 0.0026905829596412557, + 0.0026833631484794273, + 0.0026761819803746657, + 0.0026690391459074734, + 0.0026619343389529724, + 0.002654867256637168, + 0.00264783759929391 + ], + "V": [ + 0.007988109406202204, + 0.007924805195279383, + 0.007862496442623046, + 0.007801159851045902, + 0.007740772844713639, + 0.0076813135414404154, + 0.007622760726250677, + 0.007565093826142233, + 0.007508292885985757, + 0.007452338545500314, + 0.007397212017255184, + 0.007342895065634236, + 0.007289369986726912, + 0.007236619589088944, + 0.007184627175331526, + 0.0071333765245018554, + 0.007082851875208851, + 0.007033037909463191, + 0.00698391973719481, + 0.006935482881412547, + 0.00688771326397819, + 0.006840597191965392, + 0.006794121344573689, + 0.006748272760572105, + 0.00670303882624812, + 0.006658407263837596, + 0.00661436612041566, + 0.006570903757223245, + 0.006528008839413069, + 0.006485670326194404, + 0.006443877461357772, + 0.0064026197641655624, + 0.006361887020590373, + 0.006321669274881758, + 0.006281956821457602, + 0.006242740197091923, + 0.0062040101733993325, + 0.006165757749593714, + 0.006127974145517134, + 0.00609065079491633, + 0.00605377933897322, + 0.0060173516200603405, + 0.0059813596757254395, + 0.005945795732888781, + 0.0059106522022460695, + 0.005875921672869877, + 0.005841596907000035, + 0.005807670835013434, + 0.0057741365505710185, + 0.005740987305931755, + 0.005708216507422925, + 0.005675817711071618, + 0.005643784618376779, + 0.005612111072230919, + 0.005580791052970824, + 0.005549818674566165, + 0.00551918818093089, + 0.005488893942358297, + 0.005458930452068023, + 0.005429292322873591, + 0.005399974283949893, + 0.005370971177710571, + 0.005342277956781105, + 0.0053138896810733804, + 0.005285801514946842, + 0.005258008724465579, + 0.005230506674736235, + 0.0052032908273331735, + 0.0051763567378007025, + 0.005149700053232342, + 0.005123316509928255, + 0.005097201931120399, + 0.005071352224766956, + 0.00504576338141649, + 0.005020431472135822, + 0.004995352646494977, + 0.004970523130619853, + 0.004945939225298179, + 0.004921597304140102, + 0.0048974938117991584, + 0.004873625262236336, + 0.004849988237042524, + 0.00482657938380604, + 0.004803395414526124, + 0.004780433104074389, + 0.004757689288700018, + 0.0047351608645742616, + 0.004712844786380899, + 0.004690738065942668, + 0.00466883777088678, + 0.0046471410233503985, + 0.0046256449987176484, + 0.004604346924394154, + 0.004583244078617321, + 0.004562333789292827, + 0.004541613432869962, + 0.004521080433243396, + 0.004500732260684259, + 0.004480566430802968, + 0.004460580503537148, + 0.004440772082166644, + 0.004421138812357173, + 0.004401678381226848, + 0.004382388516435576, + 0.004363266985305092, + 0.004344311593953432, + 0.004325520186457377, + 0.004306890644035777, + 0.004288420884251742, + 0.004270108860237265, + 0.004251952559938044, + 0.004233950005374076, + 0.004216099251923344, + 0.004198398387622371, + 0.004180845532479882, + 0.004163438837814892, + 0.004146176485606556, + 0.004129056687859345, + 0.004112077685989091, + 0.004095237750217695, + 0.004078535178986931, + 0.0040619682983862315, + 0.004045535461591143, + 0.004029235048319979, + 0.004013065464300247, + 0.003997025140747956, + 0.003981112533861797, + 0.0039653261243275395, + 0.003949664416832865, + 0.0039341259395979655, + 0.003918709243912133, + 0.0039034129036832343, + 0.0038882355150016146, + 0.0038731756957057772, + 0.003858232084965607, + 0.0038434033428729197, + 0.0038286881500382286, + 0.003814085207201945, + 0.0037995932348520167, + 0.0037852109728466754, + 0.003770937180055167, + 0.0037567706339940443, + 0.00374271013048455, + 0.003728754483305785, + 0.0037149025238647493, + 0.00370115310086927, + 0.0036875050800080356, + 0.003673957343639511, + 0.0036605087904872935, + 0.0036471583353401282, + 0.0036339049087625863, + 0.0036207474568059617, + 0.0036076849407316036, + 0.003594716336737802, + 0.003581840635688671, + 0.0035690568428581315, + 0.003556363977667898, + 0.0035437610734407876, + 0.0035312471771538068, + 0.003518821349197232, + 0.0035064826631419077, + 0.003494230205505211, + 0.003482063075529007, + 0.003469980384958049, + 0.0034579812578214852, + 0.0034460648302256924, + 0.0034342302501415567, + 0.0034224766772061876, + 0.003410803282521524, + 0.00339920924845849, + 0.0033876937684700348, + 0.003376256046899284, + 0.003364895298799464, + 0.0033536107497533774, + 0.003342401635698211, + 0.0033312672027507872, + 0.003320206707041251, + 0.003309219414545872, + 0.0032983046009256167, + 0.0032874615513651673, + 0.00327668956041971, + 0.003265987931858838, + 0.0032553559785188924, + 0.0032447930221555232, + 0.0032342983932971414, + 0.0032238714311074723, + 0.0032135114832430034, + 0.0032032179057195354, + 0.003192990062778067, + 0.0031828273267517915, + 0.0031727290779421935, + 0.003162694704488711, + 0.003152723602247054, + 0.003142815174668412, + 0.003132968832679328, + 0.0031231839945655704, + 0.0031134600858577777, + 0.0031037965392182176, + 0.0030941927943313186, + 0.0030846482977955336, + 0.0030751625030152052, + 0.0030657348700982023, + 0.00305636486575378, + 0.003047051963189329, + 0.0030377956420146734, + 0.0030285953881425964, + 0.0030194506936975785, + 0.003010361056915878, + 0.0030013259820600435, + 0.0029923449793265444, + 0.0029834175647553973, + 0.002974543260146012, + 0.0029657215929699277, + 0.0029569520962888785, + 0.0029482343086693064, + 0.0029395677741050896, + 0.0029309520419351642, + 0.0029223866667666965, + 0.0029138712083989216, + 0.002905405231745428, + 0.00289698830676266, + 0.002888620008375531, + 0.0028802999164070364, + 0.0028720276155058677, + 0.002863802695080242, + 0.0028556247492277365, + 0.0028474933766675647, + 0.0028394081806797367, + 0.002831368769034448, + 0.0028233747539330167, + 0.002815425751942824, + 0.002807521383939804, + 0.0027996612750424976, + 0.002791845054556763, + 0.0027840723559189318, + 0.0027763428166323045, + 0.002768656078217857, + 0.002761011786153844, + 0.002753409589824729, + 0.0027458491424632303, + 0.002738330101103248, + 0.0027308521265239083, + 0.002723414883198494, + 0.00271601803924737, + 0.0027086612663858034, + 0.0027013442398760024, + 0.0026940666384802636, + 0.0026868281444132336, + 0.002679628443295057, + 0.002672467224107411, + 0.002665344179147988, + 0.002658259003984753, + 0.0026512113974161977, + 0.0026442010614251554, + 0.0026372277011388334, + 0.002630291024785736, + 0.0026233907436583603, + 0.002616526572068789, + 0.0026096982273116076, + 0.0026029054296266008, + 0.0025961479021556766, + 0.0025894253709113357, + 0.002582737564734483, + 0.002576084215262009, + 0.0025694650568872657, + 0.0025628798267274266, + 0.0025563282645879593, + 0.0025498101129266537, + 0.002543325116823425, + 0.0025368730239434534, + 0.0025304535845063203, + 0.002524066551254478, + 0.0025177116794186105, + 0.0025113887266898782, + 0.002505097453186611, + 0.0024988376214254426, + 0.00249260899628978, + 0.002486411345002937, + 0.0024802444370959353, + 0.002474108044382195, + 0.0024680019409268894, + 0.002461925903019413, + 0.002455879709148956, + 0.0024498631399731963, + 0.002443875978295429, + 0.002437918009035922, + 0.0024319890192083804, + 0.0024260887978921897, + 0.002420217136209546, + 0.0024143738272994764, + 0.0024085586662940806, + 0.0024027714502945496, + 0.0023970119783467414, + 0.002391280051419864, + 0.002385575472381829, + 0.0023798980459763808, + 0.0023742475788031125, + 0.0023686238792925973, + 0.002363026757686848, + 0.002357456026017113 + ], + "W": [ + 0.00950020652622883, + 0.009410801963993453, + 0.009323064450749898, + 0.009236947791164659, + 0.00915240748109829, + 0.009069400630914826, + 0.008987885892926924, + 0.008907823392718823, + 0.008829174664107485, + 0.008751902587519025, + 0.008675971331572992, + 0.008601346297681377, + 0.008527994067482388, + 0.008455882352941178, + 0.008384979948960992, + 0.008315256688358641, + 0.008246683399067766, + 0.00817923186344239, + 0.008112874779541446, + 0.008047585724282715, + 0.00798333911836168, + 0.007920110192837466, + 0.007857874957294158, + 0.007796610169491525, + 0.007736293306424487, + 0.007676902536715621, + 0.0076184166942696255, + 0.007560815253122946, + 0.007504078303425775, + 0.007448186528497409, + 0.00739312118289939, + 0.007338864071474154, + 0.007285397529299968, + 0.007232704402515723, + 0.007180768029971901, + 0.00712957222566646, + 0.007079101261926748, + 0.007029339853300734, + 0.006980273141122913, + 0.006931886678722122, + 0.006884166417240347, + 0.006837098692033294, + 0.0067906702096250365, + 0.006744868035190615, + 0.0066996795805418004, + 0.006655092592592593, + 0.006611095142282265, + 0.0065676756139348945, + 0.006524822695035461, + 0.006482525366403607, + 0.00644077289274713, + 0.006399554813578186, + 0.006358860934476085, + 0.006318681318681319, + 0.006279006279006278, + 0.006239826370048833, + 0.006201132380695606, + 0.006162915326902465, + 0.006125166444740347, + 0.006087877183695077, + 0.006051039200210471, + 0.006014644351464435, + 0.005978684689368339, + 0.005943152454780361, + 0.005908040071923967, + 0.005873340143003065, + 0.005839045443005839, + 0.005805148914689551, + 0.005771643663739021, + 0.005738522954091816, + 0.005705780203423469, + 0.005673408978786383, + 0.00564140299239637, + 0.005609756097560976, + 0.005578462284744118, + 0.005547515677761698, + 0.005516910530103143, + 0.005486641221374045, + 0.005456702253855279, + 0.005427088249174138, + 0.005397793945083313, + 0.005368814192343604, + 0.005340143951706524, + 0.005311778290993071, + 0.005283712382265104, + 0.005255941499085923, + 0.005228461013866788, + 0.005201266395296247, + 0.0051743532058492695, + 0.005147717099373322, + 0.0051213538187486075, + 0.005095259193619849, + 0.005069429138197046, + 0.005043859649122807, + 0.005018546803403885, + 0.00499348675640469, + 0.004968675739900626, + 0.004944110060189166, + 0.004919786096256685, + 0.004895700297999149, + 0.00487184918449481, + 0.00484822934232715, + 0.004824837423956366, + 0.004801670146137787, + 0.0047787242883856225, + 0.004755996691480563, + 0.004733484256019757, + 0.004711183941007783, + 0.004689092762487258, + 0.004667207792207792, + 0.004645526156332055, + 0.004624045034177725, + 0.004602761656994196, + 0.004581673306772908, + 0.004560777315090224, + 0.0045400710619818395, + 0.004519551974847711, + 0.004499217527386541, + 0.0044790652385589096, + 0.00445909267157813, + 0.004439297432928006, + 0.004419677171406611, + 0.004400229577195333, + 0.004380952380952381, + 0.004361843352930021, + 0.004342900302114803, + 0.004324121075390111, + 0.00430550355672033, + 0.004287045666356012, + 0.004268745360059391, + 0.004250600628349657, + 0.004232609495767391, + 0.004214770020157596, + 0.004197080291970803, + 0.004179538433581683, + 0.004162142598624683, + 0.004144890971346188, + 0.004127781765972721, + 0.004110813226094728, + 0.004093983624065504, + 0.00407729126041482, + 0.004060734463276836, + 0.004044311587831897, + 0.004028021015761821, + 0.0040118611547182974, + 0.003995830437804031, + 0.0039799273230662745, + 0.003964150293002413, + 0.003948497854077253, + 0.00393296853625171, + 0.0039175608925225685, + 0.0039022734984730236, + 0.0038871049518336997, + 0.0038720538720538717, + 0.0038571188998826095, + 0.0038422986969595726, + 0.003827591945415211, + 0.003812997347480106, + 0.0037985136251032204, + 0.0037841395195788085, + 0.0037698737911817733, + 0.0037557152188112345, + 0.0037416625996421022, + 0.0037277147487844407, + 0.0037138704989504276, + 0.0037001287001287, + 0.003686488219265908, + 0.003672947939955286, + 0.003659506762132061, + 0.003646163601775523, + 0.003632917390617596, + 0.0036197670758577275, + 0.003606711619883958, + 0.00359375, + 0.0035808812081581814, + 0.0035681042506981076, + 0.003555418148090895, + 0.003542821934688848, + 0.00353031465848043, + 0.003517895380850413, + 0.0035055631763450694, + 0.0034933171324422843, + 0.003481156349326472, + 0.0034690799396681748, + 0.003457087028408237, + 0.0034451767525464348, + 0.0034333482609344677, + 0.003421600714073193, + 0.0034099332839140103, + 0.0033983451536643027, + 0.0033868355175968195, + 0.0033754035808629293, + 0.0033640485593096387, + 0.003352769679300291, + 0.0033415661775388636, + 0.00333043730089777, + 0.0033193823062490978, + 0.0033084004602991946, + 0.0032974910394265233, + 0.003286653329522721, + 0.003275886625836775, + 0.00326519023282226, + 0.0032545634639875474, + 0.003244005641748942, + 0.0032335160972866584, + 0.003223094170403587, + 0.0032127392093867857, + 0.0032024505708716238, + 0.0031922276197085355, + 0.0031820697288323188, + 0.0031719762791339126, + 0.0031619466593346165, + 0.0031519802658626834, + 0.00314207650273224, + 0.0031322347814244857, + 0.0031224545207711105, + 0.003112735146839897, + 0.00310307609282245, + 0.003093476798924008, + 0.003083936712255296, + 0.0030744552867263734, + 0.0030650319829424308, + 0.0030556662681015014, + 0.0030463576158940397, + 0.0030371055064043312, + 0.0030279094260136914, + 0.003018768867305421, + 0.0030096833289714737, + 0.003000652315720809, + 0.0029916753381893863, + 0.00298275191285177, + 0.0029738815619343158, + 0.0029650638133298956, + 0.0029562982005141387, + 0.002947584262463155, + 0.0029389215435727065, + 0.0029303095935787997, + 0.0029217479674796746, + 0.0029132362254591514, + 0.002904773932811316, + 0.0028963606598665158, + 0.002887995981918634, + 0.0028796794791536248, + 0.002871410736579276, + 0.0028631893439561807, + 0.0028550148957298903, + 0.002846886990964228, + 0.002838805233275734, + 0.002830769230769231, + 0.002822778595974472, + 0.0028148329457838694, + 0.0028069319013912615, + 0.0027990750882317143, + 0.00279126213592233, + 0.0027834926782040422, + 0.0027757663528843834, + 0.0027680828017812007, + 0.0027604416706673066, + 0.002752842609216038, + 0.00274528527094772, + 0.0027377693131770027, + 0.0027302943969610637, + 0.0027228601870486558, + 0.002715466351829988, + 0.002708112563287413, + 0.002700798496946923, + 0.002693523831830425, + 0.0026862882504087825, + 0.00267909143855562, + 0.0026719330855018587, + 0.002664812883790985, + 0.002657730529235035, + 0.0026506857208712683, + 0.00264367816091954, + 0.002636707554740341, + 0.0026297736107935054, + 0.0026228760405975597, + 0.002616014558689718, + 0.0026091888825865005, + 0.0026023987327449647, + 0.0025956438325245457, + 0.002588923908149482, + 0.0025822386886718307, + 0.00257558790593505, + 0.002568971294538143, + 0.002562388591800356, + 0.002555839537726414, + 0.00254932387497229, + 0.002542841348811498, + 0.002536391707101897, + 0.002529974700252997, + 0.0025235900811937675, + 0.0025172376053409213, + 0.002510917030567685, + 0.0025046281171730365, + 0.002498370627851401, + 0.002492144327662802, + 0.0024859489840034586, + 0.0024797843665768193, + 0.0024736502473650247 + ], + "X": [ + 0.008020459849977346, + 0.00795664390698092, + 0.007893835469093169, + 0.007832010863940697, + 0.007771147154997715, + 0.007711222113210958, + 0.00765221418993467, + 0.0075941024910923804, + 0.007536866752512195, + 0.007480487316364748, + 0.007424945108654768, + 0.007370221617704953, + 0.007316298873585092, + 0.007263159428440025, + 0.007210786337665143, + 0.007159163141892577, + 0.007108273849744995, + 0.007058102921320586, + 0.007008635252371498, + 0.006959856159142852, + 0.006911751363842811, + 0.006864306980707058, + 0.0068175095026370425, + 0.006771345788379124, + 0.006725803050221746, + 0.006680868842184884, + 0.00663653104868156, + 0.006592777873625888, + 0.006549597829971443, + 0.006506979729654194, + 0.0064649126739311225, + 0.006423386044085211, + 0.006382389492491036, + 0.006341912934018978, + 0.006301946537761616, + 0.006262480719076091, + 0.00622350613192002, + 0.006185013661471617, + 0.0061469944170255975, + 0.006109439725143773, + 0.006072341123062319, + 0.006035690352329315, + 0.005999479352681414, + 0.005963700256129245, + 0.005928345381260636, + 0.00589340722774212, + 0.005858878471014739, + 0.0058247519571736905, + 0.005791020698028726, + 0.005757677866332189, + 0.0057247167911729235, + 0.005692130953525387, + 0.005659913981954423, + 0.005628059648459027, + 0.005596561864459559, + 0.005565414676918623, + 0.0055346122645905105, + 0.005504148934392106, + 0.005474019117897244, + 0.005444217367943205, + 0.005414738355346227, + 0.005385576865725605, + 0.005356727796429039, + 0.005328186153555903, + 0.005299947049074438, + 0.005272005698032434, + 0.0052443574158533846, + 0.005216997615719254, + 0.0051899218060311725, + 0.005163125587955175, + 0.00513660465303567, + 0.005110354780889503, + 0.005084371836964863, + 0.005058651770370348, + 0.005033190611771543, + 0.005007984471346649, + 0.00498302953680585, + 0.004958322071471066, + 0.004933858412407011, + 0.004909634968615295, + 0.0048856482192736195, + 0.004861894712031356, + 0.004838371061353541, + 0.0048150739469103865, + 0.004792000112017414, + 0.004769146362116006, + 0.0047465095632994725, + 0.0047240866408804205, + 0.004701874577999643, + 0.004679870414270315, + 0.004658071244465711, + 0.004636474217239117, + 0.004615076533878826, + 0.004593875447103546, + 0.004572868259881568, + 0.0045520523242903455, + 0.004531425040402937, + 0.004510983855204653, + 0.004490726261540345, + 0.0044706497970907755, + 0.004450752043371198, + 0.004431030624763688, + 0.004411483207570566, + 0.004392107499092246, + 0.004372901246733729, + 0.004353862237128858, + 0.004334988295291442, + 0.004316277283787251, + 0.004297727101925108, + 0.004279335684973518, + 0.004261101003392609, + 0.004243021062087404, + 0.004225093899681731, + 0.004207317587807458, + 0.004189690230413712, + 0.004172209963091866, + 0.004154874952420284, + 0.0041376833953197245, + 0.004120633518432282, + 0.0041037235775085446, + 0.004086951856813625, + 0.004070316668547402, + 0.004053816352277417, + 0.004037449274387317, + 0.004021213827537284, + 0.00400510843013735, + 0.003989131525834022, + 0.003973281583010468, + 0.003957557094293795, + 0.003941956576080763, + 0.003926478568068825, + 0.003911121632800274, + 0.003895884355219703, + 0.0038807653422365807, + 0.003865763222302032, + 0.0038508766449945053, + 0.003836104280612318, + 0.0038214448197808615, + 0.0038068969730640223, + 0.00379245947058493, + 0.00377813106165914, + 0.0037639105144311458, + 0.0037497966155231044, + 0.0037357881696880035, + 0.0037218839994739294, + 0.0037080829448923325, + 0.0036943838630978387, + 0.003680785628069838, + 0.003667287130306729, + 0.003653887276521939, + 0.0036405849893503817, + 0.0036273792070584676, + 0.003614268883262328, + 0.003601252986652037, + 0.0035883305007193833, + 0.0035755004234943044, + 0.0035627617672866485, + 0.003550113558431045, + 0.0035375548370404353, + 0.0035250846567618233, + 0.0035127020845397983, + 0.003500406200383166, + 0.0034881960971364645, + 0.003476070880258808, + 0.0034640296676027305, + 0.0034520715892030207, + 0.0034401957870651145, + 0.0034284014149610353, + 0.0034166876382277778, + 0.003405053633570354, + 0.0033934985888699476, + 0.0033820217029931765, + 0.003370622185608907, + 0.003359299257005066, + 0.0033480521479123393, + 0.003336880099328532, + 0.003325782362348706, + 0.003314758197998424, + 0.003303806877067883, + 0.0032929276799531504, + 0.003282119896497182, + 0.0032713828258355004, + 0.0032607157762452044, + 0.003250118064995977, + 0.003239589018204647, + 0.0032291279706924136, + 0.003218734265844292, + 0.003208407255472334, + 0.0031981462996806265, + 0.0031879507667325058, + 0.0031778200329217743, + 0.003167753482445912, + 0.003157750507279733, + 0.0031478105070543716, + 0.003137932888936046, + 0.003128117067509706, + 0.0031183624646611285, + 0.003108668509466117, + 0.003099034638077036, + 0.0030894602936140103, + 0.0030799449260587863, + 0.0030704879921465977, + 0.0030610889552664666, + 0.003051747285357287, + 0.003042462458807682, + 0.003033233958360304, + 0.003024061273015022, + 0.003014943897933442, + 0.0030058813343460944, + 0.0029968730894649465, + 0.0029879186763901444, + 0.002979017614024082, + 0.0029701694269843593, + 0.0029613736455209594, + 0.002952629805429874, + 0.0029439374479756086, + 0.0029352961198076954, + 0.002926705372882754, + 0.002918164764387887, + 0.0029096738566636304, + 0.002901232217129124, + 0.002892839418210169, + 0.002884495037264845, + 0.0028761986565137843, + 0.0028679498629708977, + 0.0028597482483740944, + 0.0028515934091171147, + 0.0028434849461855816, + 0.002835422465090165, + 0.002827405575802411, + 0.002819433892693679, + 0.0028115070344711945, + 0.002803624624118539, + 0.0027957862888350338, + 0.0027879916599791166, + 0.002780240373006393, + 0.0027725320674170106, + 0.0027648663866977063, + 0.0027572429782674046, + 0.0027496614934217067, + 0.0027421215872829308, + 0.0027346229187446003, + 0.0027271651504208183, + 0.0027197479485974174, + 0.0027123709831804454, + 0.0027050339276462054, + 0.0026977364589968467, + 0.0026904782577090725, + 0.002683259007688843, + 0.0026760783962269663, + 0.002668936113951581, + 0.0026618318547850794, + 0.0026547653159001428, + 0.0026477361976771085, + 0.002640744203660228, + 0.0026337890405174758, + 0.002626870418000138, + 0.002619988048898847, + 0.002613141649008055, + 0.0026063309370856214, + 0.0025995556348119564, + 0.0025928154667551606, + 0.002586110160332611, + 0.002579439445774101, + 0.0025728030560849824, + 0.002566200727011969, + 0.0025596321970071667, + 0.0025530972071934332, + 0.0025465955013312946, + 0.0025401268257838616, + 0.0025336909294855214, + 0.002527287563908631, + 0.0025209164830317654, + 0.0025145774433068535, + 0.00250827020363098, + 0.0025019945253137443, + 0.002495750172046618, + 0.0024895369098756337, + 0.0024833545071694108, + 0.002477202734593398, + 0.0024710813650785646, + 0.0024649901737947566, + 0.002458928938124272, + 0.002452897437632773, + 0.0024468954540433074, + 0.002440922771210774, + 0.0024349791750950533, + 0.0024290644537350303, + 0.0024231783972252785, + 0.002417320797689193, + 0.002411491449255454, + 0.0024056901480340454, + 0.002399916692091608, + 0.0023941708814294582, + 0.002388452517959605, + 0.002382761405480771, + 0.002377097349658852, + 0.002371460158002714, + 0.002365849639841766, + 0.002360265606307088 + ], + "Y": [ + 0.012711864406779662, + 0.012552301255230127, + 0.012396694214876033, + 0.012244897959183675, + 0.012096774193548387, + 0.01195219123505976, + 0.011811023622047244, + 0.011673151750972763, + 0.011538461538461537, + 0.011406844106463879, + 0.011278195488721806, + 0.011152416356877323, + 0.011029411764705883, + 0.010909090909090908, + 0.01079136690647482, + 0.010676156583629892, + 0.01056338028169014, + 0.010452961672473868, + 0.010344827586206896, + 0.010238907849829353, + 0.010135135135135136, + 0.010033444816053512, + 0.009933774834437087, + 0.009836065573770493, + 0.009740259740259742, + 0.00964630225080386, + 0.009554140127388535, + 0.00946372239747634, + 0.009375, + 0.009287925696594427, + 0.009202453987730062, + 0.009118541033434652, + 0.009036144578313253, + 0.008955223880597014, + 0.008875739644970414, + 0.008797653958944282, + 0.00872093023255814, + 0.008645533141210375, + 0.008571428571428572, + 0.0084985835694051, + 0.008426966292134831, + 0.008356545961002786, + 0.008287292817679558, + 0.00821917808219178, + 0.008152173913043478, + 0.008086253369272238, + 0.008021390374331552, + 0.007957559681697613, + 0.007894736842105263, + 0.00783289817232376, + 0.007772020725388601, + 0.007712082262210797, + 0.007653061224489796, + 0.00759493670886076, + 0.007537688442211055, + 0.007481296758104738, + 0.007425742574257425, + 0.00737100737100737, + 0.007317073170731706, + 0.007263922518159807, + 0.007211538461538461, + 0.007159904534606205, + 0.007109004739336493, + 0.007058823529411764, + 0.007009345794392522, + 0.006960556844547563, + 0.006912442396313364, + 0.006864988558352402, + 0.006818181818181817, + 0.0067720090293453715, + 0.0067264573991031385, + 0.006681514476614699, + 0.006637168141592919, + 0.006593406593406593, + 0.006550218340611353, + 0.00650759219088937, + 0.00646551724137931, + 0.006423982869379014, + 0.006382978723404255, + 0.006342494714587737, + 0.006302521008403361, + 0.006263048016701461, + 0.006224066390041493, + 0.006185567010309277, + 0.006147540983606557, + 0.006109979633401222, + 0.006072874493927125, + 0.006036217303822938, + 0.006, + 0.005964214711729622, + 0.005928853754940712, + 0.005893909626719056, + 0.005859375, + 0.005825242718446601, + 0.00579150579150579, + 0.005758157389635317, + 0.005725190839694656, + 0.005692599620493358, + 0.005660377358490566, + 0.005628517823639775, + 0.005597014925373134, + 0.0055658627087198514, + 0.005535055350553504, + 0.005504587155963302, + 0.005474452554744525, + 0.005444646098003629, + 0.005415162454873646, + 0.0053859964093357264, + 0.005357142857142856, + 0.0053285968028419185, + 0.005300353356890459, + 0.005272407732864674, + 0.005244755244755245, + 0.005217391304347826, + 0.005190311418685121, + 0.0051635111876075735, + 0.005136986301369862, + 0.005110732538330494, + 0.005084745762711864, + 0.00505902192242833, + 0.0050335570469798654, + 0.005008347245409015, + 0.0049833887043189366, + 0.0049586776859504135, + 0.004934210526315789, + 0.004909983633387888, + 0.00488599348534202, + 0.00486223662884927, + 0.004838709677419354, + 0.004815409309791333, + 0.004792332268370606, + 0.0047694753577106515, + 0.004746835443037974, + 0.004724409448818897, + 0.004702194357366771, + 0.004680187207488299, + 0.004658385093167701, + 0.00463678516228748, + 0.004615384615384615, + 0.004594180704441041, + 0.004573170731707317, + 0.004552352048558422, + 0.004531722054380664, + 0.004511278195488721, + 0.004491017964071856, + 0.004470938897168405, + 0.004451038575667655, + 0.0044313146233382564, + 0.004411764705882353, + 0.004392386530014641, + 0.004373177842565597, + 0.0043541364296081275, + 0.004335260115606936, + 0.004316546762589928, + 0.004297994269340973, + 0.0042796005706134095, + 0.004261363636363636, + 0.004243281471004243, + 0.004225352112676056, + 0.004207573632538569, + 0.004189944134078212, + 0.004172461752433936, + 0.004155124653739612, + 0.004137931034482759, + 0.004120879120879121, + 0.004103967168262654, + 0.004087193460490463, + 0.004070556309362279, + 0.004054054054054053, + 0.004037685060565276, + 0.004021447721179625, + 0.004005340453938584, + 0.003989361702127659, + 0.003973509933774834, + 0.003957783641160949, + 0.003942181340341655, + 0.003926701570680628, + 0.003911342894393742, + 0.0038961038961038957, + 0.0038809831824062092, + 0.003865979381443299, + 0.003851091142490372, + 0.003836317135549872, + 0.0038216560509554136, + 0.0038071065989847713, + 0.0037926675094816687, + 0.0037783375314861456, + 0.0037641154328732747, + 0.00375, + 0.0037359900373599006, + 0.003722084367245657, + 0.003708281829419036, + 0.0036945812807881776, + 0.003680981595092024, + 0.003667481662591687, + 0.003654080389768575, + 0.003640776699029126, + 0.0036275695284159614, + 0.0036144578313253017, + 0.003601440576230492, + 0.0035885167464114833, + 0.0035756853396901075, + 0.003562945368171022, + 0.003550295857988166, + 0.0035377358490566034, + 0.0035252643948296128, + 0.0035128805620608904, + 0.0035005834305717617, + 0.0034883720930232558, + 0.003476245654692932, + 0.0034642032332563508, + 0.0034522439585730727, + 0.0034403669724770644, + 0.0034285714285714284, + 0.003416856492027335, + 0.0034052213393870605, + 0.003393665158371041, + 0.003382187147688839, + 0.003370786516853933, + 0.0033594624860022394, + 0.003348214285714286, + 0.003337041156840935, + 0.0033259423503325942, + 0.0033149171270718237, + 0.0033039647577092516, + 0.003293084522502744, + 0.0032822757111597377, + 0.0032715376226826612, + 0.0032608695652173916, + 0.0032502708559046583, + 0.0032397408207343417, + 0.0032292787944025836, + 0.003218884120171674, + 0.003208556149732621, + 0.003198294243070363, + 0.003188097768331562, + 0.0031779661016949155, + 0.0031678986272439284, + 0.003157894736842105, + 0.0031479538300104933, + 0.0031380753138075318, + 0.0031282586027111575, + 0.0031185031185031187, + 0.0031088082901554407, + 0.0030991735537190084, + 0.0030895983522142125, + 0.0030800821355236145, + 0.0030706243602865915, + 0.0030612244897959186, + 0.0030518819938962364, + 0.0030425963488843813, + 0.003033367037411527, + 0.003024193548387097, + 0.0030150753768844224, + 0.003006012024048096, + 0.0029970029970029974, + 0.00298804780876494, + 0.002979145978152929, + 0.0029702970297029708, + 0.0029615004935834156, + 0.002952755905511811, + 0.002944062806673209, + 0.002935420743639922, + 0.002926829268292683, + 0.0029182879377431907, + 0.002909796314258002, + 0.0029013539651837525, + 0.0028929604628736743, + 0.0028846153846153848, + 0.0028763183125599234, + 0.0028680688336520078, + 0.0028598665395614875, + 0.0028517110266159697, + 0.0028436018957345975, + 0.002835538752362949, + 0.002827521206409048, + 0.0028195488721804514, + 0.0028116213683223993, + 0.0028037383177570096, + 0.0027958993476234857, + 0.0027881040892193307, + 0.0027803521779425394, + 0.002772643253234751, + 0.0027649769585253456, + 0.0027573529411764708, + 0.0027497708524289646, + 0.002742230347349177, + 0.0027347310847766638, + 0.002727272727272727, + 0.0027198549410698096, + 0.0027124773960217, + 0.0027051397655545534, + 0.002697841726618705, + 0.0026905829596412557, + 0.0026833631484794273, + 0.0026761819803746657, + 0.0026690391459074734, + 0.0026619343389529724, + 0.002654867256637168, + 0.00264783759929391 + ], + "Z": [ + 0.00654558893871382, + 0.006503022824445814, + 0.006461006750081433, + 0.006419530122626638, + 0.006378582619362083, + 0.0063381541792753016, + 0.0062982349948208505, + 0.006258815503987547, + 0.006219886382662576, + 0.006181438537279149, + 0.006143463097734614, + 0.006105951410567245, + 0.006068895032383725, + 0.006032285723522213, + 0.005996115441945005, + 0.005960376337349027, + 0.005925060745484156, + 0.005890161182676268, + 0.005855670340537911, + 0.0058215810808674995, + 0.005787886430724365, + 0.005754579577672114, + 0.005721653865188969, + 0.005689102788231093, + 0.005656919988949349, + 0.005625099252547727, + 0.005593634503284317, + 0.005562519800602406, + 0.005531749335392355, + 0.005501317426375385, + 0.005471218516606147, + 0.005441447170092095, + 0.005411998068517665, + 0.005382866008079024, + 0.005354045896417414, + 0.0053255327496528615, + 0.005297321689510026, + 0.005269407940535764, + 0.005241786827404615, + 0.005214453772308891, + 0.005187404292427811, + 0.005160633997477682, + 0.0051341385873360235, + 0.005107913849739409, + 0.005081955658049919, + 0.005056259969091315, + 0.0050308228210496075, + 0.005005640331436245, + 0.004980708695112801, + 0.004956024182374508, + 0.004931583137089746, + 0.004907381974895042, + 0.004883417181442917, + 0.004859685310700135, + 0.0048361829832967995, + 0.004812906884919199, + 0.004789853764757046, + 0.004767020433985136, + 0.0047444037642934145, + 0.004722000686461447, + 0.004699808188967092, + 0.004677823316637131, + 0.004656043169336321, + 0.004634464900691748, + 0.004613085716853371, + 0.00459190287528588, + 0.004570913683599853, + 0.004550115498405782, + 0.004529505724210292, + 0.00450908181233034, + 0.004488841259846943, + 0.004468781608581551, + 0.0044489004440979585, + 0.004429195394739516, + 0.004409664130679669, + 0.004390304363007358, + 0.004371113842831953, + 0.004352090360412175, + 0.004333231744308552, + 0.004314535860555413, + 0.004296000611858863, + 0.00427762393680875, + 0.004259403809118378, + 0.004241338236876446, + 0.004223425261822733, + 0.004205662958640888, + 0.0041880494342658725, + 0.00417058282721583, + 0.00415326130693261, + 0.004136083073142283, + 0.004119046355234968, + 0.004102149411652434, + 0.004085390529296129, + 0.0040687680229494205, + 0.0040522802347102704, + 0.004035925533442342, + 0.004019702314235429, + 0.004003608997881658, + 0.003987644030361004, + 0.003971805882344803, + 0.003956093048702813, + 0.003940504048029814, + 0.003925037422179312, + 0.003909691735806797, + 0.003894465575929651, + 0.0038793575514881606, + 0.0038643662929283007, + 0.003849490451781401, + 0.003834728700264467, + 0.0038200797308831635, + 0.0038055422560456797, + 0.003791115007686585, + 0.0037767967368964594, + 0.0037625862135626242, + 0.0037484822260172024, + 0.0037344835806916166, + 0.003720589101780858, + 0.0037067976309124173, + 0.003693108026828096, + 0.003679519165064704, + 0.0036660299376494176, + 0.0036526392527971296, + 0.003639346034616686, + 0.00362614922282134, + 0.003613047772449418, + 0.0036000406535854346, + 0.0035871268510916376, + 0.0035743053643455536, + 0.0035615752069775297, + 0.0035489354066220447, + 0.003536385004667908, + 0.0035239230560146773, + 0.0035115486288392894, + 0.003499260804359805, + 0.003487058676610033, + 0.0034749413522172645, + 0.0034629079501822257, + 0.0034509576016676924, + 0.003439089449788213, + 0.0034273026494053838, + 0.0034155963669277867, + 0.0034039697801133695, + 0.0033924220778791536, + 0.0033809524601091656, + 0.0033695601374728046, + 0.0033582443312425436, + 0.003347004273115628, + 0.0033358392050419905, + 0.003324748379051945, + 0.003313731057091429, + 0.003302786510855471, + 0.0032919140216300935, + 0.00328111288013333, + 0.003270382386362458, + 0.003259721849441677, + 0.003249130587473781, + 0.0032386079273962753, + 0.0032281532048361594, + 0.003217765763972702, + 0.003207444957398886, + 0.0031971901459875163, + 0.0031870006987582133, + 0.003176875992749295, + 0.0031668154128907666, + 0.003156818351878199, + 0.003146884210052825, + 0.003137012395279193, + 0.003127202322829925, + 0.0031174534152684785, + 0.003107765102336346, + 0.0030981368208422566, + 0.003088568014552706, + 0.0030790581340849332, + 0.0030696066368012254, + 0.0030602129867072225, + 0.0030508766543488886, + 0.003041597116713479, + 0.003032373857132953, + 0.0030232063651862706, + 0.0030140941366072482, + 0.003005036673190409, + 0.0029960334827006108, + 0.0029870840787848962, + 0.002978187980883895, + 0.0029693447141447837, + 0.0029605538093402384, + 0.002951814802781616, + 0.002943127236238796, + 0.002934490656862243, + 0.0029259046171006275, + 0.0029173686746257754, + 0.0029088823922560625, + 0.0029004453378833617, + 0.0028920570843959936, + 0.002883717209610337, + 0.002875425296199108, + 0.0028671809316194174, + 0.002858983708047713, + 0.0028508332223107224, + 0.0028427290758197277, + 0.002834670874503953, + 0.0028266582287508335, + 0.0028186907533387373, + 0.002810768067377456, + 0.002802889794247143, + 0.0027950555615396944, + 0.002787265000997019, + 0.002779517748457083, + 0.002771813443794846, + 0.0027641517308663044, + 0.002756532257455646, + 0.002748954675219295, + 0.002741418639632842, + 0.0027339238099410856, + 0.00272646984910363, + 0.00271905642374648, + 0.0027116832041107486, + 0.0027043498640066943, + 0.0026970560807615396, + 0.0026898015351748406, + 0.0026825859114720796, + 0.0026754088972569257, + 0.0026682701834674916, + 0.002661169464332813, + 0.0026541064373268863, + 0.002647080803126922, + 0.002640092265572491, + 0.00263314053162067, + 0.0026262253113082945, + 0.0026193463177095477, + 0.002612503266897548, + 0.002605695877903935, + 0.002598923872682013, + 0.0025921869760674454, + 0.0025854849157420645, + 0.0025788174221963445, + 0.0025721842286945407, + 0.00256558507123672, + 0.002559019688526787, + 0.002552487821935845, + 0.002545989215468447, + 0.002539523615730399, + 0.002533090771894564, + 0.002526690435668444, + 0.0025203223612630943, + 0.002513986305362259, + 0.002507682027087954, + 0.0025014092879738214, + 0.0024951678519340437, + 0.002488957485232257, + 0.0024827779564531305, + 0.002476629036475053, + 0.0024705104984399373, + 0.002464422117725462, + 0.002458363671918651, + 0.0024523349407892248, + 0.00244633570625985, + 0.0024403657523832667, + 0.002434424865315199, + 0.0024285128332881545, + 0.002422629446586777, + 0.0024167744975234218, + 0.00241094778041262, + 0.002405149091548875, + 0.002399378229180904, + 0.002393634993488769, + 0.0023879191865623373, + 0.0023822306123761905, + 0.002376569076768753, + 0.0023709343874209754, + 0.002365326353831243, + 0.002359744787296947, + 0.002354189500894277, + 0.002348660309452688, + 0.0023431570295384674, + 0.002337679479433419, + 0.002332227479114213, + 0.0023268008502328463, + 0.002321399416097547, + 0.0023160230016538996, + 0.0023106714334648615, + 0.0023053445396925554, + 0.0023000421500807278, + 0.002294764095935875, + 0.0022895102101083697, + 0.0022842803269766954, + 0.002279074282429905, + 0.0022738919138480806, + 0.002268733060088124, + 0.0022635975614653248, + 0.0022584852597391514, + 0.002253395998093044, + 0.0022483296211222026, + 0.002243285974816489, + 0.0022382649065437743, + 0.002233266265035727, + 0.002228289900372493, + 0.002223335663967374, + 0.00221840340855195, + 0.0022134929881623133 + ], + "AA": [ + 0.005536159623191761, + 0.005505679303732247, + 0.005475532776249015, + 0.0054457145875348445, + 0.005416219402525346, + 0.005387042001116393, + 0.005358177275086362, + 0.005329620225111187, + 0.005301365957881332, + 0.005273409683304253, + 0.005245746711798338, + 0.005218372451669007, + 0.005191282406569631, + 0.0051644721730386145, + 0.0051379374381124165, + 0.00511167397701473, + 0.005085677650910947, + 0.005059944404737005, + 0.005034470265088409, + 0.0050092513381758685, + 0.004984283807841772, + 0.004959563933633282, + 0.004935088048936498, + 0.0049108525591616825, + 0.004886853939984226, + 0.004863088735636012, + 0.004839553557246523, + 0.004816245081230575, + 0.004793160047727563, + 0.004770295259075574, + 0.004747647578341008, + 0.004725213927879057, + 0.004702991287942826, + 0.004680976695325523, + 0.004659167242045736, + 0.004637560074065794, + 0.004616152390045869, + 0.0045949414401347255, + 0.004573924524791773, + 0.0045530989936410915, + 0.00453246224435766, + 0.004512011721583331, + 0.004491744915872342, + 0.004471659362664804, + 0.004451752641286166, + 0.004432022373976663, + 0.004412466224943179, + 0.004393081899438656, + 0.004373867142862808, + 0.004354819739889049, + 0.004335937513614274, + 0.004317218324725536, + 0.004298660070696014, + 0.00428026068499765, + 0.004262018136329981, + 0.004243930427877185, + 0.004225995596576659, + 0.004208211712410703, + 0.00419057687771196, + 0.004173089226490845, + 0.004155746923775183, + 0.004138548164969835, + 0.004121491175229419, + 0.004104574208849465, + 0.0040877955486697815, + 0.004071153505491809, + 0.004054646417515739, + 0.004038272649783403, + 0.00402203059364048, + 0.004005918666209363, + 0.0039899353098744594, + 0.003974078991781038, + 0.003958348203343842, + 0.003942741459770138, + 0.003927257299591869, + 0.00391189428420935, + 0.0038966509974445174, + 0.0038815260451097178, + 0.0038665180545764954, + 0.003851625674367254, + 0.0038368475737435848, + 0.003822182442313471, + 0.0038076289896424864, + 0.0037931859448756544, + 0.003778852056367521, + 0.0037646260913208884, + 0.0037505068354326543, + 0.0037364930925483097, + 0.003722583684325542, + 0.0037087774499018344, + 0.003695073245572944, + 0.003681469944476712, + 0.003667966436284198, + 0.003654561626897257, + 0.0036412544381538847, + 0.003628043807537784, + 0.0036149286878968123, + 0.0036019080471663134, + 0.0035889808680960034, + 0.003576146147989512, + 0.003563402898440593, + 0.0035507501450819934, + 0.0035381869273363176, + 0.0035257122981735556, + 0.003513325323871719, + 0.0035010250837852475, + 0.0034888106701165267, + 0.0034766811876922876, + 0.0034646357537453376, + 0.0034526734976987328, + 0.0034407935609601648, + 0.0034289950967105742, + 0.0034172772697087517, + 0.003405639256090165, + 0.003394080243175557, + 0.003382599429282207, + 0.003371196023536971, + 0.003359869245696201, + 0.003348618325967223, + 0.0033374425048335876, + 0.003326341032884761, + 0.0033153131706484817, + 0.0033043581884260043, + 0.0032934753661313376, + 0.0032826639931347046, + 0.003271923368106, + 0.0032612527988640228, + 0.0032506516022283716, + 0.0032401191038715638, + 0.003229654638179813, + 0.0032192575481080343, + 0.003208927185046395, + 0.003198662908682648, + 0.0031884640868724556, + 0.0031783300955063876, + 0.00316826031838624, + 0.003158254147096917, + 0.00314831098088475, + 0.0031384302265398123, + 0.003128611298274464, + 0.0031188536176087744, + 0.003109156613257724, + 0.003099519721019073, + 0.0030899423836641127, + 0.0030804240508297553, + 0.0030709641789139486, + 0.0030615622309710933, + 0.0030522176766116793, + 0.0030429299919014774, + 0.0030336986592651716, + 0.0030245231673871054, + 0.0030154030111211316, + 0.003006337691393801, + 0.002997326715116655, + 0.002988369595094964, + 0.0029794658499393556, + 0.002970615003981658, + 0.002961816587188526, + 0.0029530701350795052, + 0.0029443751886433223, + 0.0029357312942601688, + 0.002927138003620211, + 0.002918594873648317, + 0.0029101014664267844, + 0.002901657349119846, + 0.0028932620939021714, + 0.002884915277884481, + 0.0028766164830442698, + 0.002868365296153863, + 0.0028601613087142486, + 0.00285200411688713, + 0.0028438933214265383, + 0.002835828527615769, + 0.002827809345204102, + 0.0028198353883410743, + 0.002811906275516751, + 0.0028040216294999976, + 0.0027961810772791917, + 0.002788384250003162, + 0.0027806307829230104, + 0.002772920315335714, + 0.0027652524905275033, + 0.002757626955720349, + 0.002750043362016008, + 0.002742501364343397, + 0.002735000621407968, + 0.0027275407956368625, + 0.002720121553131394, + 0.0027127425636161995, + 0.0027054035003890586, + 0.002698104040274041, + 0.0026908438635737664, + 0.002683622654023221, + 0.0026764400987420167, + 0.0026692958881915363, + 0.002662189716128749, + 0.002655121279563133, + 0.0026480902787138216, + 0.0026410964169669704, + 0.0026341394008337904, + 0.0026272189399094703, + 0.0026203347468336524, + 0.0026134865372495764, + 0.0026066740297661095, + 0.002599896945916891, + 0.0025931550101256917, + 0.0025864479496666704, + 0.0025797754946284, + 0.0025731373778761224, + 0.0025665333350202157, + 0.0025599631043766724, + 0.0025534264269340134, + 0.002546923046319982, + 0.002540452708768015, + 0.0025340151630828256, + 0.002527610160609539, + 0.002521237455200609, + 0.0025148968031842855, + 0.002508587963334641, + 0.0025023106968402598, + 0.002496064767273154, + 0.0024898499405605623, + 0.002483665984955641, + 0.002477512671007265, + 0.0024713897715333832, + 0.002465297061591709, + 0.002459234318452408, + 0.0024532013215723403, + 0.0024471978525664184, + 0.002441223695182071, + 0.0024352786352728195, + 0.002429362460774964, + 0.0024234749616787177, + 0.0024176159300048905, + 0.002411785159783353, + 0.0024059824470226143, + 0.0024002075896927266, + 0.0023944603876968618, + 0.002388740642851328, + 0.002383048158860035, + 0.0023773827412956194, + 0.0023717441975734666, + 0.0023661323369326137, + 0.002360546970413102, + 0.0023549879108351046, + 0.002349454972776943, + 0.0023439479725568813, + 0.0023384667282104754, + 0.002333011059471257, + 0.0023275807877516375, + 0.002322175736122478, + 0.0023167957292942187, + 0.002311440593598668, + 0.002306110156968577, + 0.0023008042489207625, + 0.0022955227005376777, + 0.002290265344449649, + 0.0022850320148151138, + 0.0022798225473061873, + 0.0022746367790904554, + 0.0022694745488125445, + 0.002264335696579245, + 0.002259220063941969, + 0.0022541274938809863, + 0.002249057830789214, + 0.002244010920456674, + 0.002238986610052729, + 0.002233984748114537, + 0.0022290051845286207, + 0.0022240477705179895, + 0.0022191123586237094, + 0.0022141988026964654, + 0.0022093069578754676, + 0.002204436680578681, + 0.0021995878284879478, + 0.0021947602605321137, + 0.0021899538368785887, + 0.002185168418915362, + 0.0021804038692398997, + 0.0021756600516449343, + 0.0021709368311071398, + 0.002166234073771145, + 0.0021615516469415397, + 0.002156889419065555, + 0.0021522472597237385, + 0.002147625039617518, + 0.0021430226305556577, + 0.002138439905444045, + 0.002133876738273699, + 0.0021293330041081138, + 0.0021248085790730453, + 0.0021203033403458527, + 0.002115817166140399, + 0.002111349935702833, + 0.0021069015292944915, + 0.002102471828184349, + 0.002098060714638139, + 0.002093668071906807, + 0.0020892937842180714, + 0.002084937736763992 + ], + "AB": [ + 0.0060888279686379665, + 0.006051978512604972, + 0.006015572397712887, + 0.005979601670951684, + 0.005944058568404076, + 0.0059089355096575424, + 0.005874225092417085, + 0.005839920087302719, + 0.005806013432829271, + 0.005772498230561585, + 0.005739367740435375, + 0.005706615376237956, + 0.005674234701243286, + 0.005642219423995787, + 0.005610563394233381, + 0.0055792605989497535, + 0.005548305158587619, + 0.005517691323354779, + 0.005487413469665636, + 0.005457466096696173, + 0.005427843823053946, + 0.005398541383551558, + 0.005369553626089818, + 0.005340875508635934, + 0.005312502096300298, + 0.005284428558505638, + 0.005256650166244992, + 0.005229162289426936, + 0.005201960394301652, + 0.005175040040970025, + 0.0051483968809640235, + 0.005122026654909906, + 0.005095925190253814, + 0.005070088399064199, + 0.005044512275895308, + 0.005019192895717728, + 0.00499412641191066, + 0.0049693090543136975, + 0.004944737127335674, + 0.004920407008121019, + 0.004896315144768515, + 0.00487245805460379, + 0.004848832322498442, + 0.004825434599243561, + 0.00480226159996433, + 0.0047793101025845885, + 0.004756576946331137, + 0.00473405903028512, + 0.004711753311970046, + 0.004689656805982434, + 0.004667766582659549, + 0.004646079766783773, + 0.004624593536324939, + 0.00460330512121554, + 0.004582211802160341, + 0.004561310909477534, + 0.004540599821973856, + 0.004520075965848136, + 0.0044997368136243665, + 0.004479579883114537, + 0.0044596027364098845, + 0.0044398029788961235, + 0.004420178258297325, + 0.004400726263746213, + 0.00438144472487223, + 0.00436233141092357, + 0.004343384129903871, + 0.004324600727734884, + 0.004305979087440015, + 0.004287517128348073, + 0.004269212805320555, + 0.004251064107994473, + 0.004233069060046946, + 0.004215225718476656, + 0.004197532172907303, + 0.004179986544903036, + 0.004162586987303651, + 0.00414533168358, + 0.00412821884719583, + 0.00411124672099672, + 0.004094413576605449, + 0.004077717713836471, + 0.0040611574601223666, + 0.004044731169957627, + 0.004028437224349979, + 0.004012274030291918, + 0.003996240020240238, + 0.003980333651607548, + 0.003964553406270888, + 0.0039488977900863365, + 0.003933365332417171, + 0.003917954585676231, + 0.0039026641248718352, + 0.0038874925471721333, + 0.003872438471475226, + 0.0038575005379879457, + 0.003842677407819739, + 0.003827967762580986, + 0.0038133703039904265, + 0.0037988837534963515, + 0.003784506851902014, + 0.003770238358998812, + 0.003756077053213902, + 0.003742021731255818, + 0.0037280712077809586, + 0.003714224315052528, + 0.0037004799026212343, + 0.0036868368370013282, + 0.003673294001363958, + 0.0036598502952289724, + 0.003646504634166714, + 0.003633255949509806, + 0.00362010318806405, + 0.00360704531183087, + 0.0035940812977359737, + 0.003581210137357793, + 0.0035684308366712436, + 0.0035557424157872664, + 0.0035431439087061367, + 0.003530634363068552, + 0.003518212839919377, + 0.0035058784134698318, + 0.003493630170869011, + 0.003481467211978728, + 0.0034693886491508064, + 0.0034573936070150246, + 0.0034454812222641795, + 0.0034336506434484715, + 0.00342190103077189, + 0.003410231555895926, + 0.0033986414017403987, + 0.0033871297622971586, + 0.0033756958424409067, + 0.0033643388577462296, + 0.0033530580343090755, + 0.0033418526085706723, + 0.00333072182714389, + 0.0033196649466473716, + 0.003308681233536781, + 0.0032977699639444857, + 0.003286930423520351, + 0.003276161907274977, + 0.003265463719427597, + 0.0032548351732568648, + 0.0032442755909516396, + 0.0032337843034693226, + 0.0032233606503939694, + 0.0032130039797957366, + 0.003202713648098099, + 0.0031924890199428457, + 0.003182329468057965, + 0.003172234373132854, + 0.003162203123689089, + 0.003152235115958746, + 0.00314232975376294, + 0.003132486448393035, + 0.0031227046184931773, + 0.0031129836899475016, + 0.0031033230957657754, + 0.0030937222759743754, + 0.003084180677509707, + 0.0030746977541071807, + 0.0030652729662019595, + 0.003055905780825041, + 0.0030465956715006737, + 0.0030373421181506544, + 0.003028144606995964, + 0.0030190026304621753, + 0.003009915687085085, + 0.0030008832814212294, + 0.002991904923955513, + 0.0029829801310132797, + 0.002974108424675048, + 0.002965289332689025, + 0.002956522388389171, + 0.0029478071306106024, + 0.0029391431036118743, + 0.002930529856993047, + 0.002921966945617527, + 0.0029134539295381234, + 0.0029049903739175598, + 0.002896575848959415, + 0.0028882099298297437, + 0.0028798921965909052, + 0.002871622234126958, + 0.0028633996320783783, + 0.002855223984771005, + 0.0028470948911507588, + 0.0028390119547185844, + 0.0028309747834647236, + 0.002822982989806544, + 0.002815036190525033, + 0.0028071340067044037, + 0.0027992760636721403, + 0.00279146199093816, + 0.0027836914221386344, + 0.0027759639949775927, + 0.002768279351170966, + 0.002760637136389965, + 0.0027530370002093463, + 0.002745478596051232, + 0.0027379615811333746, + 0.002730485616417866, + 0.0027230503665591765, + 0.002715655499854863, + 0.0027083006881956084, + 0.002700985607017259, + 0.0026937099352528637, + 0.002686473355284935, + 0.002679275552900595, + 0.0026721162172451685, + 0.0026649950407777734, + 0.002657911719227135, + 0.002650865951548731, + 0.0026438574398803816, + 0.002636885889503393, + 0.002629951008798148, + 0.00262305250920547, + 0.002616190105185323, + 0.002609363514178842, + 0.0026025724565676978, + 0.0025958166556374618, + 0.0025890958375391904, + 0.0025824097312532324, + 0.0025757580685517034, + 0.002569140583963403, + 0.002562557014738065, + 0.002556007100812163, + 0.00254949058477405, + 0.002543007211830428, + 0.002536556729773265, + 0.0025301388889473753, + 0.0025237534422171137, + 0.002517400144935733, + 0.0025110787549142977, + 0.0025047890323894872, + 0.002498530739994953, + 0.0024923036427300094, + 0.0024861075079321004, + 0.0024799421052446036, + 0.0024738072065930705, + 0.0024677025861514768, + 0.002461628020319573, + 0.0024555832876924644, + 0.0024495681690346327, + 0.0024435824472532897, + 0.0024376259073728423, + 0.002431698336509358, + 0.0024257995238421426, + 0.0024199292605942, + 0.00241408734000248, + 0.0024082735572963365, + 0.002402487709673551, + 0.0023967295962752377, + 0.002390999018163864, + 0.00238529577829949, + 0.0023796196815195625, + 0.0023739705345120488, + 0.00236834814579856, + 0.002362752325709039, + 0.002357182886362219, + 0.0023516396416438656, + 0.0023461224071867903, + 0.002340631000350424, + 0.002335165240197945, + 0.002329724947481404, + 0.002324309944617964, + 0.0023189200556714695, + 0.002313555106335796, + 0.0023082149239117555, + 0.0023028993372933293, + 0.0022976081769450207, + 0.0022923412748878658, + 0.0022870984646772285, + 0.002281879581390367, + 0.002276684461604006, + 0.0022715129433812375, + 0.002266364866253534, + 0.0022612400712016534, + 0.002256138400644092, + 0.0022510596984164355, + 0.0022460038097578128, + 0.002240970581294466, + 0.002235959861025316, + 0.0022309714983037576, + 0.0022260053438265537, + 0.0022210612496162963, + 0.0022161390690058624, + 0.0022112386566286446, + 0.002206359868396346, + 0.0022015025614949835, + 0.0021966665943609076, + 0.0021918518266732523, + 0.0021870581193395022, + 0.0021822853344797277, + 0.0021775333354168147, + 0.0021728019866595893, + 0.002168091153893048, + 0.002163400703964369, + 0.0021587305048706984 + ], + "AC": [ + 0.008448001629058899, + 0.00837723076986796, + 0.008307635787722312, + 0.008239187617806731, + 0.008171858145361144, + 0.008105620167174754, + 0.00804044735494136, + 0.007976314220366154, + 0.007913196081929197, + 0.007851069033216751, + 0.007789909912729209, + 0.007729696275093456, + 0.007670406363596172, + 0.007612019083974797, + 0.007554513979393551, + 0.007497871206548101, + 0.007442071512834936, + 0.00738709621453415, + 0.007332927175951243, + 0.0072795467894701815, + 0.007226937956471335, + 0.0071750840690716355, + 0.00712396899264367, + 0.007073577049079294, + 0.007023893000754011, + 0.006974902035168151, + 0.006926589750222645, + 0.00687894214010254, + 0.006831945581741383, + 0.0067855868218344995, + 0.00673985296437829, + 0.00669473145871069, + 0.00665021008802702, + 0.006606276958354584, + 0.00656292048795537, + 0.006520129397150853, + 0.006477892698535381, + 0.006436199687572808, + 0.006395039933550839, + 0.0063544032708793274, + 0.0063142797907240755, + 0.0062746598329472825, + 0.006235533978356189, + 0.0061968930412372725, + 0.006158728062165997, + 0.006121030301081243, + 0.006083791230613311, + 0.006047002529651957, + 0.0060106560771486794, + 0.005974743946139283, + 0.005939258397981373, + 0.00590419187679414, + 0.005869537004093761, + 0.005835286573620646, + 0.005801433546339663, + 0.005767971045621323, + 0.005734892352581955, + 0.005702190901587301, + 0.0056698602759091, + 0.005637894203524452, + 0.0056062865530635, + 0.0055750313298861265, + 0.005544122672291207, + 0.005513554847854429, + 0.0054833222498811285, + 0.005453419393980363, + 0.005423840914746014, + 0.005394581562549128, + 0.0053656362004308455, + 0.005336999801096365, + 0.00530866744400349, + 0.005280634312545107, + 0.00525289569131715, + 0.005225446963477598, + 0.005198283608181642, + 0.005171401198102332, + 0.005144795397022284, + 0.0051184619575033174, + 0.005092396718626713, + 0.005066595603799184, + 0.005041054618629914, + 0.005015769848867535, + 0.00499073745839973, + 0.004965953687316116, + 0.004941414850020642, + 0.004917117333410381, + 0.004893057595096062, + 0.004869232161685, + 0.004845637627107324, + 0.004822270650992833, + 0.0047991279570949175, + 0.004776206331759347, + 0.004753502622435901, + 0.004731013736233969, + 0.004708736638517008, + 0.004686668351537415, + 0.004664805953110696, + 0.004643146575325385, + 0.004621687403286501, + 0.004600425673899622, + 0.004579358674682288, + 0.0045584837426122515, + 0.00453779826300349, + 0.004517299668414632, + 0.004496985437588252, + 0.0044768530944163665, + 0.004456900206933678, + 0.004437124386338365, + 0.004417523286038172, + 0.004398094600725155, + 0.0043788360654684055, + 0.004359745454834529, + 0.00434082058203189, + 0.004322059298073722, + 0.004303459490966999, + 0.004285019084917074, + 0.004266736039557406, + 0.004248608349195937, + 0.0042306340420823485, + 0.004212811179692633, + 0.004195137856032316, + 0.004177612196956781, + 0.004160232359510019, + 0.004142996531275145, + 0.0041259029297486816, + 0.004108949801723494, + 0.004092135422689935, + 0.004075458096250761, + 0.004058916153550474, + 0.004042507952720209, + 0.00402623187833262, + 0.004010086340872299, + 0.003994069776218634, + 0.003978180645138885, + 0.003962417432799903, + 0.0039467786482805245, + 0.003931262824105719, + 0.0039158685157856254, + 0.00390059430136791, + 0.003885438781000339, + 0.003870400576502453, + 0.0038554783309476814, + 0.003840670708255889, + 0.003825976392793251, + 0.0038113940889852316, + 0.0037969225209326662, + 0.003782560432041393, + 0.003768306584658765, + 0.003754159759716158, + 0.0037401187563843585, + 0.00372618239173117, + 0.00371234950039101, + 0.0036986189342385067, + 0.003684989562071417, + 0.003671460269301763, + 0.003658029957648301, + 0.0036446975448425345, + 0.003631461964337168, + 0.003618322165020116, + 0.0036052771109384985, + 0.0035923257810250853, + 0.0035794671688322843, + 0.003566700282271018, + 0.003554024143355372, + 0.003541437787954793, + 0.0035289402655469537, + 0.0035165306389801643, + 0.00350420798423845, + 0.0034919713902117344, + 0.0034798199584737954, + 0.0034677528030586657, + 0.0034557690502476923, + 0.0034438678383592602, + 0.0034320483175385164, + 0.0034203096495601937, + 0.003408651007626773, + 0.0033970715761757475, + 0.00338557055068911, + 0.003374147137506611, + 0.0033628005536443517, + 0.003351530026615368, + 0.00334033479425333, + 0.003329214104542677, + 0.0033181672154476427, + 0.003307193394749941, + 0.0032962919198853413, + 0.0032854620777853505, + 0.0032747031647217817, + 0.0032640144861542097, + 0.0032533953565809792, + 0.003242845099392655, + 0.003232363046727027, + 0.0032219485393298886, + 0.00321160092641648, + 0.0032013195655338222, + 0.0031911038224314847, + 0.0031809530709276945, + 0.0031708666927838802, + 0.0031608440775774405, + 0.0031508846225789533, + 0.003140987732632272, + 0.003131152820035732, + 0.0031213793044242433, + 0.003111666612657382, + 0.003102014178705259, + 0.003092421443541049, + 0.00308288785502997, + 0.003073412867826253, + 0.00306399594326745, + 0.0030546365492720717, + 0.003045334160241442, + 0.003036088256959113, + 0.0030268983264949423, + 0.003017763862111167, + 0.0030086843631673688, + 0.002999659335031213, + 0.0029906882889869646, + 0.0029817707421480044, + 0.0029729062173700083, + 0.0029640942431656825, + 0.002955334353621275, + 0.002946626088315085, + 0.002937968992236195, + 0.0029293626157040897, + 0.0029208065142936057, + 0.0029123002487552174, + 0.0029038433849430945, + 0.002895435493738052, + 0.0028870761509771636, + 0.002878764937382483, + 0.0028705014384884375, + 0.0028622852445765457, + 0.0028541159506048075, + 0.0028459931561426455, + 0.002837916465304735, + 0.002829885486686834, + 0.0028218998333038314, + 0.0028139591225251337, + 0.0028060629760151556, + 0.002798211019674035, + 0.0027904028835759043, + 0.002782638201913379, + 0.002774916612938938, + 0.0027672377589098573, + 0.0027596012860318098, + 0.0027520068444046863, + 0.002744454087970194, + 0.0027369426744590086, + 0.0027294722653372627, + 0.0027220425257581393, + 0.002714653124510358, + 0.00270730373396999, + 0.002699994030050723, + 0.0026927236921572284, + 0.002685492403138534, + 0.00267829984923984, + 0.0026711457200605526, + 0.0026640297085063214, + 0.0026569515107477404, + 0.0026499108261750504, + 0.0026429073573559503, + 0.0026359408099956294, + 0.0026290108928932465, + 0.002622117317901962, + 0.0026152597998900795, + 0.0026084380566997467, + 0.002601651809110539, + 0.0025949007807997138, + 0.0025881846983053514, + 0.002581503290989051, + 0.0025748562909999606, + 0.0025682434332388038, + 0.0025616644553234647, + 0.0025551190975521276, + 0.002548607102871525, + 0.0025421282168414105, + 0.002535682187603472, + 0.0025292687658462487, + 0.0025228877047747122, + 0.0025165387600785127, + 0.002510221689899339, + 0.002503936254802497, + 0.00249768221774449, + 0.0024914593440446, + 0.002485267401355129, + 0.002479106159632094, + 0.002472975391107246, + 0.002466874870260316, + 0.0024608043737899266, + 0.002454763680588057, + 0.002448752571712287, + 0.0024427708303593754, + 0.002436818241839056, + 0.002430894593550059, + 0.0024249996749505787, + 0.002419133277538954, + 0.002413295194824361, + 0.0024074852223061605, + 0.0024017031574459224, + 0.0023959487996489948 + ], + "AD": [ + 0.01009446202864317, + 0.00999358219266977, + 0.009894698707860528, + 0.009797752894951106, + 0.009702688352061006, + 0.009609450845274647, + 0.009517988205468342, + 0.009428250230971713, + 0.009340188595687193, + 0.009253756762308774, + 0.009168909900315603, + 0.00908560480843712, + 0.009003799841304838, + 0.008923454840032097, + 0.008844531066479089, + 0.008766991140973346, + 0.008690798983278958, + 0.00861591975661824, + 0.00854231981456044, + 0.00846996665061206, + 0.008398828850345819, + 0.008328876045920364, + 0.0082600788728584, + 0.008192408928946904, + 0.008125838735137947, + 0.008060341698347129, + 0.007995892076031241, + 0.007932464942454365, + 0.007870036156546467, + 0.0078085823312683544, + 0.007748080804397928, + 0.007688509610668914, + 0.007629847455181915, + 0.007572073688022707, + 0.007515168280028517, + 0.0074591117996347656, + 0.0074038853907532065, + 0.007349470751625953, + 0.007295850114600322, + 0.007243006226790305, + 0.007190922331566485, + 0.007139582150839763, + 0.007088969868102257, + 0.0070390701121769705, + 0.006989867941661121, + 0.006941348830002303, + 0.006893498651205032, + 0.006846303666116826, + 0.006799750509276503, + 0.006753826176294941, + 0.006708518011742992, + 0.006663813697526111, + 0.006619701241718179, + 0.006576168967836082, + 0.006533205504536621, + 0.006490799775712652, + 0.006448940990975149, + 0.00640761863649586, + 0.0063668224662061235, + 0.006326542493326093, + 0.0062867689822143635, + 0.006247492440522695, + 0.006208703611643385, + 0.006170393467437085, + 0.006132553201225743, + 0.006095174221043997, + 0.00605824814313749, + 0.006021766785689442, + 0.005985722162781482, + 0.005950106478561867, + 0.005914912121626648, + 0.005880131659596444, + 0.005845757833883303, + 0.005811783554640071, + 0.005778201895886292, + 0.005745006090800198, + 0.0057121895271747825, + 0.005679745743024656, + 0.005647668422344765, + 0.0056159513910123415, + 0.005584588612823849, + 0.005553574185666044, + 0.0055229023378127184, + 0.005492567424344674, + 0.0054625639236838275, + 0.005432886434246331, + 0.005403529671198948, + 0.00537448846331956, + 0.00534575774996493, + 0.005317332578126388, + 0.005289208099585885, + 0.005261379568158642, + 0.005233842337023953, + 0.005206591856135923, + 0.0051796236697190245, + 0.005152933413840044, + 0.0051265168140526285, + 0.005100369683114003, + 0.00507448791877585, + 0.005048867501635579, + 0.005023504493055997, + 0.004998395033148917, + 0.004973535338814283, + 0.004948921701841247, + 0.004924550487063861, + 0.004900418130572071, + 0.004876521137973322, + 0.00485285608270658, + 0.004829419604403418, + 0.004806208407298396, + 0.004783219258683413, + 0.004760448987406907, + 0.004737894482415683, + 0.00471555269133761, + 0.004693420619106048, + 0.004671495326617592, + 0.0046497739294366625, + 0.004628253596524523, + 0.004606931549014037, + 0.00458580505900974, + 0.00456487144842832, + 0.004544128087861532, + 0.004523572395481956, + 0.00450320183596542, + 0.004483013919452716, + 0.004463006200533082, + 0.004443176277257654, + 0.00442352179017802, + 0.004404040421408517, + 0.004384729893719852, + 0.004365587969645812, + 0.0043466124506224, + 0.004327801176146728, + 0.004309152022953233, + 0.004290662904219644, + 0.004272331768784943, + 0.004254156600391745, + 0.004236135416947562, + 0.0042182662698040385, + 0.004200547243053743, + 0.004182976452847154, + 0.0041655520467220875, + 0.004148272202957326, + 0.004131135129930907, + 0.004114139065507949, + 0.004097282276432246, + 0.0040805630577378516, + 0.004063979732175316, + 0.004047530649649689, + 0.004031214186673626, + 0.004015028745833815, + 0.003998972755267616, + 0.003983044668156577, + 0.003967242962228612, + 0.003951566139272611, + 0.003936012724666371, + 0.003920581266911638, + 0.0039052703371851294, + 0.003890078528897334, + 0.003875004457258413, + 0.0038600467588629783, + 0.003845204091273091, + 0.003830475132621469, + 0.0038158585812169132, + 0.0038013531551592816, + 0.003786957591968454, + 0.003772670648215515, + 0.003758491099164152, + 0.0037444177384227117, + 0.0037304493776004755, + 0.003716584845975701, + 0.0037028229901625576, + 0.0036891626737998173, + 0.0036756027772304467, + 0.0036621421971991808, + 0.00364877984655565, + 0.003635514653954175, + 0.0036223455635759905, + 0.0036092715348441384, + 0.0035962915421499098, + 0.0035834045745863907, + 0.0035706096356835637, + 0.003557905743154288, + 0.0035452919286402818, + 0.003532767237467427, + 0.0035203307284055185, + 0.0035079814734295667, + 0.0034957185574935323, + 0.0034835410783002896, + 0.0034714481460820235, + 0.0034594388833841805, + 0.0034475124248507516, + 0.003435667917018881, + 0.0034239045181154726, + 0.0034122213978540206, + 0.003400617737245426, + 0.003389092728399934, + 0.003377645574344834, + 0.0033662754888379443, + 0.0033549816961884193, + 0.003343763431081115, + 0.003332619938400949, + 0.0033215504730683687, + 0.0033105542998674853, + 0.0032996306932875363, + 0.0032887789373625687, + 0.0032779983255128986, + 0.0032672881603941217, + 0.0032566477537459004, + 0.003246076426243638, + 0.0032355735073563707, + 0.0032251383352013274, + 0.0032147702564084835, + 0.0032044686259820043, + 0.003194232807167463, + 0.0031840621713195016, + 0.0031739560977752657, + 0.0031639139737256183, + 0.003153935194092572, + 0.0031440191614089397, + 0.003134165285695323, + 0.0031243729843482004, + 0.0031146416820211353, + 0.003104970810513308, + 0.0030953598086593814, + 0.003085808122220479, + 0.003076315203778268, + 0.0030668805126290444, + 0.0030575035146827023, + 0.0030481836823603725, + 0.003038920494496944, + 0.003029713436243142, + 0.0030205619989700505, + 0.003011465680175185, + 0.0030024239833918998, + 0.0029934364180974615, + 0.002984502499624897, + 0.002975621749077062, + 0.0029667936932384897, + 0.0029580178644936783, + 0.00294929380074338, + 0.002940621045323999, + 0.002931999146927433, + 0.002923427659523803, + 0.002914906142282847, + 0.002906434159498872, + 0.0028980112805185865, + 0.002889637079665164, + 0.0028813111361678523, + 0.002873033034092476, + 0.002864802362269492, + 0.002856618714228487, + 0.0028484816881315655, + 0.0028403908867031813, + 0.0028323459171721854, + 0.002824346391202548, + 0.0028163919248334057, + 0.0028084821384177783, + 0.0028006166565612833, + 0.002792795108063073, + 0.0027850171258581025, + 0.0027772823469585095, + 0.002769590412397882, + 0.0027619409671753026, + 0.0027543336602025015, + 0.0027467681442456815, + 0.0027392440758786663, + 0.002731761115426723, + 0.0027243189269159362, + 0.0027169171780254686, + 0.0027095555400336035, + 0.002702233687774225, + 0.002694951299585746, + 0.0026877080572640377, + 0.0026805036460171294, + 0.002673337754419247, + 0.002666210074366182, + 0.0026591203010306597, + 0.002652068132819041, + 0.002645053271328468, + 0.0026380754213053415, + 0.002631134290603132, + 0.002624229590142191, + 0.0026173610338688924, + 0.002610528338717666, + 0.00260373122456925, + 0.002596969414216055, + 0.002590242633322193, + 0.002583550610385732, + 0.0025768930767045006, + 0.00257026976633834, + 0.0025636804160744653, + 0.002557124765391716, + 0.0025506025564281387, + 0.0025441135339447918, + 0.0025376574452933287, + 0.002531234040385133, + 0.002524843071655569, + 0.002518484294034673, + 0.0025121574649151768 + ], + "AE": [ + 0.014423076923076922, + 0.014218009478672985, + 0.014018691588785045, + 0.013824884792626727, + 0.013636363636363636, + 0.013452914798206277, + 0.013274336283185839, + 0.013100436681222705, + 0.01293103448275862, + 0.01276595744680851, + 0.012605042016806721, + 0.012448132780082987, + 0.012295081967213113, + 0.012145748987854251, + 0.012, + 0.011857707509881422, + 0.011718749999999998, + 0.011583011583011582, + 0.011450381679389313, + 0.011320754716981131, + 0.011194029850746268, + 0.01107011070110701, + 0.01094890510948905, + 0.010830324909747292, + 0.010714285714285714, + 0.010600706713780918, + 0.010489510489510488, + 0.010380622837370242, + 0.010273972602739725, + 0.010169491525423728, + 0.010067114093959731, + 0.009966777408637875, + 0.009868421052631578, + 0.009771986970684038, + 0.00967741935483871, + 0.009584664536741214, + 0.00949367088607595, + 0.009404388714733541, + 0.009316770186335404, + 0.00923076923076923, + 0.009146341463414635, + 0.00906344410876133, + 0.008982035928143712, + 0.008902077151335312, + 0.008823529411764706, + 0.008746355685131196, + 0.008670520231213874, + 0.008595988538681949, + 0.008522727272727274, + 0.008450704225352112, + 0.008379888268156424, + 0.008310249307479225, + 0.008241758241758242, + 0.008174386920980927, + 0.008108108108108109, + 0.00804289544235925, + 0.00797872340425532, + 0.007915567282321902, + 0.007853403141361258, + 0.007792207792207792, + 0.007731958762886598, + 0.007672634271099745, + 0.007614213197969544, + 0.007556675062972293, + 0.0075, + 0.007444168734491315, + 0.007389162561576355, + 0.007334963325183375, + 0.007281553398058253, + 0.007228915662650602, + 0.007177033492822967, + 0.007125890736342043, + 0.007075471698113209, + 0.007025761124121781, + 0.0069767441860465115, + 0.006928406466512702, + 0.006880733944954129, + 0.006833712984054671, + 0.006787330316742082, + 0.006741573033707865, + 0.006696428571428572, + 0.006651884700665189, + 0.006607929515418503, + 0.0065645514223194755, + 0.006521739130434782, + 0.0064794816414686825, + 0.0064377682403433485, + 0.006396588486140726, + 0.006355932203389831, + 0.00631578947368421, + 0.006276150627615063, + 0.006237006237006237, + 0.006198347107438018, + 0.006160164271047228, + 0.006122448979591836, + 0.006085192697768763, + 0.006048387096774194, + 0.006012024048096193, + 0.00597609561752988, + 0.005940594059405941, + 0.005905511811023622, + 0.005870841487279844, + 0.005836575875486382, + 0.005802707930367505, + 0.005769230769230769, + 0.0057361376673040155, + 0.005703422053231939, + 0.005671077504725898, + 0.005639097744360903, + 0.005607476635514019, + 0.0055762081784386614, + 0.005545286506469502, + 0.0055147058823529415, + 0.005484460694698355, + 0.005454545454545455, + 0.0054249547920434, + 0.00539568345323741, + 0.005366726296958855, + 0.005338078291814947, + 0.005309734513274337, + 0.00528169014084507, + 0.005253940455341506, + 0.005226480836236933, + 0.005199306759098787, + 0.005172413793103449, + 0.005145797598627788, + 0.0051194539249146765, + 0.0050933786078098476, + 0.005067567567567568, + 0.005042016806722689, + 0.005016722408026756, + 0.004991680532445923, + 0.004966887417218543, + 0.0049423393739703465, + 0.004918032786885246, + 0.004893964110929854, + 0.00487012987012987, + 0.004846526655896607, + 0.00482315112540193, + 0.0048000000000000004, + 0.004777070063694267, + 0.004754358161648178, + 0.00473186119873817, + 0.004709576138147567, + 0.004687500000000001, + 0.004665629860031105, + 0.0046439628482972135, + 0.004622496147919876, + 0.00460122699386503, + 0.004580152671755725, + 0.004559270516717325, + 0.0045385779122541605, + 0.004518072289156626, + 0.004497751124437781, + 0.004477611940298508, + 0.004457652303120356, + 0.004437869822485207, + 0.004418262150220912, + 0.00439882697947214, + 0.00437956204379562, + 0.00436046511627907, + 0.004341534008683068, + 0.004322766570605188, + 0.00430416068866571, + 0.004285714285714287, + 0.004267425320056899, + 0.00424929178470255, + 0.004231311706629055, + 0.004213483146067416, + 0.004195804195804197, + 0.004178272980501393, + 0.004160887656033287, + 0.00414364640883978, + 0.0041265474552957355, + 0.004109589041095891, + 0.004092769440654843, + 0.004076086956521739, + 0.004059539918809202, + 0.004043126684636118, + 0.004026845637583893, + 0.004010695187165776, + 0.0039946737683089215, + 0.003978779840848806, + 0.003963011889035667, + 0.003947368421052633, + 0.003931847968545216, + 0.00391644908616188, + 0.0039011703511053317, + 0.0038860103626943004, + 0.0038709677419354843, + 0.0038560411311053984, + 0.0038412291933418697, + 0.0038265306122448983, + 0.003811944091486658, + 0.0037974683544303805, + 0.0037831021437578815, + 0.003768844221105528, + 0.003754693366708386, + 0.003740648379052369, + 0.003726708074534162, + 0.0037128712871287127, + 0.0036991368680641184, + 0.0036855036855036856, + 0.003671970624235006, + 0.0036585365853658543, + 0.0036452004860267314, + 0.0036319612590799033, + 0.003618817852834741, + 0.0036057692307692305, + 0.0035928143712574854, + 0.003579952267303103, + 0.0035671819262782403, + 0.0035545023696682467, + 0.0035419126328217233, + 0.003529411764705882, + 0.0035169988276670576, + 0.0035046728971962616, + 0.003492433061699651, + 0.003480278422273782, + 0.003468208092485549, + 0.003456221198156682, + 0.0034443168771526983, + 0.0034324942791762016, + 0.0034207525655644243, + 0.003409090909090909, + 0.0033975084937712344, + 0.003386004514672686, + 0.0033745781777277844, + 0.0033632286995515697, + 0.0033519553072625698, + 0.0033407572383073497, + 0.0033296337402885685, + 0.0033185840707964606, + 0.003307607497243661, + 0.0032967032967032967, + 0.0032858707557502738, + 0.003275109170305677, + 0.003264417845484222, + 0.0032537960954446858, + 0.003243243243243243, + 0.003232758620689655, + 0.00322234156820623, + 0.0032119914346895075, + 0.0032017075773746, + 0.0031914893617021275, + 0.003181336161187699, + 0.003171247357293869, + 0.003161222339304531, + 0.0031512605042016808, + 0.0031413612565445023, + 0.003131524008350731, + 0.003121748178980229, + 0.003112033195020747, + 0.0031023784901758017, + 0.003092783505154639, + 0.003083247687564234, + 0.0030737704918032786, + 0.003064351378958121, + 0.0030549898167006114, + 0.003045685279187817, + 0.003036437246963563, + 0.003027245206861756, + 0.003018108651911469, + 0.0030090270812437314, + 0.003, + 0.002991026919242273, + 0.002982107355864811, + 0.002973240832507433, + 0.002964426877470356, + 0.0029556650246305416, + 0.0029469548133595285, + 0.002938295788442703, + 0.0029296875, + 0.0029211295034079847, + 0.002912621359223301, + 0.002904162633107454, + 0.0028957528957528956, + 0.002887391722810395, + 0.0028790786948176585, + 0.0028708133971291866, + 0.0028625954198473282, + 0.0028544243577545195, + 0.0028462998102466793, + 0.002838221381267739, + 0.002830188679245283, + 0.002822201317027281, + 0.0028142589118198874, + 0.0028063610851262865, + 0.0027985074626865674, + 0.0027906976744186047, + 0.0027829313543599257, + 0.0027752081406105457, + 0.002767527675276753, + 0.0027598896044158236, + 0.002752293577981651, + 0.0027447392497712718, + 0.002737226277372263, + 0.00272975432211101, + 0.002722323049001815, + 0.0027149321266968325 + ], + "AF": [ + 0.006550218340611353, + 0.00650759219088937, + 0.006465517241379309, + 0.006423982869379015, + 0.006382978723404255, + 0.006342494714587737, + 0.006302521008403361, + 0.006263048016701461, + 0.006224066390041493, + 0.006185567010309277, + 0.006147540983606557, + 0.006109979633401222, + 0.006072874493927125, + 0.006036217303822936, + 0.006, + 0.005964214711729622, + 0.005928853754940711, + 0.005893909626719057, + 0.005859375, + 0.005825242718446601, + 0.00579150579150579, + 0.005758157389635317, + 0.005725190839694656, + 0.005692599620493358, + 0.005660377358490566, + 0.005628517823639775, + 0.005597014925373134, + 0.005565862708719851, + 0.005535055350553505, + 0.005504587155963302, + 0.005474452554744525, + 0.0054446460980036296, + 0.005415162454873646, + 0.0053859964093357264, + 0.005357142857142856, + 0.0053285968028419185, + 0.005300353356890459, + 0.005272407732864674, + 0.005244755244755245, + 0.005217391304347826, + 0.005190311418685121, + 0.005163511187607573, + 0.005136986301369863, + 0.005110732538330494, + 0.005084745762711864, + 0.00505902192242833, + 0.0050335570469798654, + 0.005008347245409015, + 0.0049833887043189366, + 0.0049586776859504135, + 0.004934210526315789, + 0.004909983633387888, + 0.004885993485342019, + 0.00486223662884927, + 0.004838709677419354, + 0.004815409309791332, + 0.004792332268370607, + 0.0047694753577106515, + 0.004746835443037974, + 0.004724409448818897, + 0.004702194357366771, + 0.004680187207488299, + 0.004658385093167701, + 0.00463678516228748, + 0.004615384615384615, + 0.004594180704441041, + 0.004573170731707317, + 0.004552352048558422, + 0.004531722054380664, + 0.004511278195488721, + 0.004491017964071856, + 0.004470938897168405, + 0.004451038575667655, + 0.004431314623338257, + 0.004411764705882353, + 0.004392386530014641, + 0.004373177842565598, + 0.0043541364296081275, + 0.004335260115606936, + 0.004316546762589928, + 0.004297994269340973, + 0.0042796005706134095, + 0.004261363636363636, + 0.004243281471004243, + 0.004225352112676057, + 0.004207573632538569, + 0.004189944134078212, + 0.004172461752433936, + 0.004155124653739612, + 0.004137931034482759, + 0.004120879120879121, + 0.004103967168262654, + 0.004087193460490463, + 0.004070556309362279, + 0.004054054054054053, + 0.004037685060565276, + 0.004021447721179625, + 0.004005340453938584, + 0.003989361702127659, + 0.003973509933774834, + 0.003957783641160949, + 0.003942181340341656, + 0.003926701570680628, + 0.003911342894393742, + 0.0038961038961038957, + 0.0038809831824062092, + 0.003865979381443299, + 0.003851091142490372, + 0.003836317135549872, + 0.003821656050955414, + 0.0038071065989847713, + 0.0037926675094816687, + 0.003778337531486146, + 0.0037641154328732747, + 0.00375, + 0.0037359900373599006, + 0.003722084367245657, + 0.003708281829419036, + 0.0036945812807881776, + 0.003680981595092024, + 0.003667481662591687, + 0.003654080389768575, + 0.003640776699029126, + 0.0036275695284159614, + 0.0036144578313253017, + 0.003601440576230492, + 0.0035885167464114833, + 0.003575685339690107, + 0.003562945368171021, + 0.003550295857988166, + 0.0035377358490566034, + 0.0035252643948296123, + 0.0035128805620608904, + 0.0035005834305717617, + 0.0034883720930232558, + 0.003476245654692932, + 0.0034642032332563508, + 0.0034522439585730727, + 0.0034403669724770644, + 0.0034285714285714284, + 0.003416856492027335, + 0.0034052213393870605, + 0.003393665158371041, + 0.003382187147688839, + 0.0033707865168539322, + 0.0033594624860022394, + 0.003348214285714286, + 0.003337041156840934, + 0.0033259423503325942, + 0.0033149171270718237, + 0.0033039647577092508, + 0.003293084522502744, + 0.0032822757111597377, + 0.003271537622682661, + 0.0032608695652173916, + 0.003250270855904659, + 0.0032397408207343412, + 0.0032292787944025836, + 0.003218884120171674, + 0.0032085561497326204, + 0.003198294243070363, + 0.003188097768331562, + 0.0031779661016949155, + 0.0031678986272439284, + 0.003157894736842105, + 0.0031479538300104933, + 0.0031380753138075318, + 0.0031282586027111575, + 0.0031185031185031187, + 0.0031088082901554407, + 0.0030991735537190084, + 0.0030895983522142125, + 0.0030800821355236136, + 0.0030706243602865915, + 0.0030612244897959186, + 0.003051881993896236, + 0.0030425963488843813, + 0.003033367037411527, + 0.0030241935483870967, + 0.0030150753768844224, + 0.0030060120240480966, + 0.002997002997002997, + 0.00298804780876494, + 0.002979145978152929, + 0.0029702970297029703, + 0.0029615004935834156, + 0.002952755905511811, + 0.002944062806673209, + 0.002935420743639922, + 0.002926829268292683, + 0.0029182879377431907, + 0.002909796314258002, + 0.0029013539651837525, + 0.0028929604628736743, + 0.0028846153846153848, + 0.0028763183125599234, + 0.0028680688336520078, + 0.002859866539561487, + 0.0028517110266159697, + 0.0028436018957345975, + 0.0028355387523629487, + 0.002827521206409048, + 0.0028195488721804514, + 0.0028116213683223993, + 0.002803738317757009, + 0.0027958993476234857, + 0.0027881040892193307, + 0.002780352177942539, + 0.0027726432532347504, + 0.0027649769585253456, + 0.0027573529411764703, + 0.002749770852428964, + 0.002742230347349177, + 0.0027347310847766633, + 0.002727272727272727, + 0.0027198549410698096, + 0.0027124773960216994, + 0.0027051397655545534, + 0.002697841726618705, + 0.0026905829596412553, + 0.0026833631484794273, + 0.0026761819803746657, + 0.002669039145907473, + 0.0026619343389529724, + 0.002654867256637168, + 0.0026478375992939097, + 0.002640845070422535, + 0.002633889376646181, + 0.002626970227670753, + 0.002620087336244541, + 0.002613240418118467, + 0.0026064291920069502, + 0.002599653379549393, + 0.002592912705272256, + 0.002586206896551724, + 0.002579535683576956, + 0.0025728987993138934, + 0.0025662959794696323, + 0.002559726962457338, + 0.002553191489361702, + 0.0025466893039049238, + 0.002540220152413209, + 0.002533783783783784, + 0.002527379949452401, + 0.0025210084033613443, + 0.002514668901927913, + 0.002508361204013378, + 0.0025020850708924102, + 0.0024958402662229617, + 0.0024896265560165978, + 0.0024834437086092716, + 0.002477291494632535, + 0.0024711696869851732, + 0.0024650780608052587, + 0.0024590163934426227, + 0.0024529844644317253, + 0.0024469820554649264, + 0.002441008950366151, + 0.0024350649350649354, + 0.0024291497975708503, + 0.0024232633279483036, + 0.0024174053182917, + 0.002411575562700965, + 0.0024057738572574178, + 0.0024, + 0.0023942537909018356, + 0.0023885350318471337, + 0.002382843526608419, + 0.002377179080824089, + 0.0023715415019762843, + 0.002365930599369085, + 0.0023603461841070024, + 0.002354788069073783, + 0.002349256068911511, + 0.00234375, + 0.0023382696804364767, + 0.0023328149300155523, + 0.0023273855702094647, + 0.0023219814241486067, + 0.0023166023166023165, + 0.002311248073959938, + 0.0023059185242121443, + 0.0023006134969325155, + 0.0022953328232593723, + 0.0022900763358778627, + 0.002284843869002285, + 0.0022796352583586625, + 0.002274450341167551, + 0.00226928895612708, + 0.0022641509433962265, + 0.002259036144578313, + 0.002253944402704733, + 0.0022488755622188904, + 0.002243829468960359, + 0.0022388059701492534, + 0.0022338049143708115, + 0.002228826151560178, + 0.002223869532987398, + 0.0022189349112426036, + 0.002214022140221402 + ], + "AG": [ + 0.008680555555555554, + 0.008605851979345956, + 0.008532423208191127, + 0.008460236886632826, + 0.008389261744966441, + 0.008319467554076539, + 0.00825082508250825, + 0.00818330605564648, + 0.008116883116883114, + 0.008051529790660225, + 0.007987220447284345, + 0.007923930269413628, + 0.007861635220125786, + 0.007800312012480499, + 0.007739938080495355, + 0.007680491551459292, + 0.007621951219512195, + 0.0075642965204236, + 0.007507507507507507, + 0.007451564828614009, + 0.0073964497041420114, + 0.007342143906020557, + 0.007288629737609328, + 0.00723589001447178, + 0.0071839080459770105, + 0.007132667617689015, + 0.007082152974504248, + 0.007032348804500703, + 0.006983240223463687, + 0.006934812760055477, + 0.006887052341597796, + 0.006839945280437756, + 0.006793478260869564, + 0.006747638326585694, + 0.006702412868632708, + 0.006657789613848202, + 0.0066137566137566125, + 0.006570302233902759, + 0.006527415143603133, + 0.006485084306095979, + 0.006443298969072164, + 0.006402048655569782, + 0.006361323155216285, + 0.00632111251580278, + 0.00628140703517588, + 0.006242197253433208, + 0.006203473945409429, + 0.0061652281134401965, + 0.006127450980392157, + 0.0060901339829476245, + 0.006053268765133171, + 0.0060168471720818285, + 0.005980861244019139, + 0.005945303210463733, + 0.005910165484633569, + 0.005875440658049354, + 0.005841121495327103, + 0.005807200929152148, + 0.005773672055427251, + 0.00574052812858783, + 0.005707762557077625, + 0.005675368898978433, + 0.0056433408577878106, + 0.005611672278338945, + 0.005580357142857142, + 0.005549389567147613, + 0.005518763796909492, + 0.00548847420417124, + 0.0054585152838427945, + 0.005428881650380021, + 0.005399568034557235, + 0.005370569280343716, + 0.005341880341880341, + 0.005313496280552604, + 0.005285412262156448, + 0.005257623554153522, + 0.005230125523012552, + 0.005202913631633714, + 0.005175983436853002, + 0.005149330587023686, + 0.00512295081967213, + 0.00509683995922528, + 0.005070993914807301, + 0.005045408678102926, + 0.0050200803212851405, + 0.004995004995004995, + 0.004970178926441351, + 0.004945598417408506, + 0.004921259842519685, + 0.004897159647404505, + 0.004873294346978557, + 0.004849660523763336, + 0.004826254826254826, + 0.0048030739673390966, + 0.004780114722753345, + 0.004757373929590866, + 0.004734848484848484, + 0.00471253534401508, + 0.004690431519699812, + 0.004668534080298786, + 0.004646840148698884, + 0.004625346901017576, + 0.004604051565377532, + 0.00458295142071494, + 0.004562043795620438, + 0.004541326067211625, + 0.0045207956600361665, + 0.0045004500450045, + 0.004480286738351254, + 0.0044603033006244425, + 0.004440497335701598, + 0.004420866489832006, + 0.0044014084507042256, + 0.0043821209465381246, + 0.004363001745200698, + 0.004344048653344918, + 0.004325259515570934, + 0.004306632213608957, + 0.004288164665523155, + 0.004269854824935952, + 0.004251700680272108, + 0.004233700254022015, + 0.0042158516020236085, + 0.0041981528127623844, + 0.004180602006688963, + 0.004163197335553705, + 0.0041459369817578775, + 0.004128819157720891, + 0.004111842105263158, + 0.004095004095004095, + 0.004078303425774877, + 0.004061738424045491, + 0.0040453074433656954, + 0.0040290088638195, + 0.0040128410914927765, + 0.003996802557953637, + 0.003980891719745223, + 0.003965107057890563, + 0.0039494470774091624, + 0.003933910306845004, + 0.003918495297805642, + 0.0039032006245121, + 0.0038880248833592533, + 0.0038729666924864443, + 0.003858024691358024, + 0.003843197540353574, + 0.003828483920367534, + 0.003813882532418001, + 0.003799392097264438, + 0.003785011355034065, + 0.0037707390648567115, + 0.0037565740045078884, + 0.0037425149700598802, + 0.0037285607755406414, + 0.003714710252600297, + 0.003700962250185048, + 0.0036873156342182895, + 0.003673769287288758, + 0.0036603221083455345, + 0.0036469730123997084, + 0.003633720930232558, + 0.003620564808110065, + 0.003607503607503608, + 0.0035945363048166786, + 0.0035816618911174787, + 0.00356887937187723, + 0.0035561877667140826, + 0.0035435861091424525, + 0.003531073446327683, + 0.003518648838845883, + 0.003506311360448808, + 0.0034940600978336823, + 0.003481894150417827, + 0.003469812630117974, + 0.003457814661134163, + 0.0034458993797381117, + 0.0034340659340659344, + 0.0034223134839151265, + 0.0034106412005457027, + 0.0033990482664853837, + 0.003387533875338753, + 0.0033760972316002704, + 0.003364737550471063, + 0.00335345405767941, + 0.003342245989304813, + 0.003331112591605596, + 0.0033200531208499337, + 0.0033090668431502318, + 0.0032981530343007912, + 0.003287310979618672, + 0.00327653997378768, + 0.0032658393207054214, + 0.0032552083333333335, + 0.0032446463335496427, + 0.003234152652005175, + 0.0032237266279819474, + 0.0032133676092544984, + 0.0032030749519538757, + 0.0031928480204342275, + 0.0031826861871419474, + 0.0031725888324873096, + 0.003162555344718533, + 0.003152585119798235, + 0.0031426775612822125, + 0.003132832080200501, + 0.0031230480949406628, + 0.0031133250311332506, + 0.0031036623215394163, + 0.003094059405940594, + 0.0030845157310302285, + 0.003075030750307503, + 0.0030656039239730227, + 0.003056234718826406, + 0.0030469226081657527, + 0.003037667071688943, + 0.0030284675953967297, + 0.0030193236714975845, + 0.0030102347983142685, + 0.003001200480192077, + 0.002992220227408737, + 0.002983293556085919, + 0.0029744199881023203, + 0.0029655990510083037, + 0.0029568302779420462, + 0.00294811320754717, + 0.0029394473838918285, + 0.0029308323563892145, + 0.0029222676797194627, + 0.002913752913752914, + 0.0029052876234747236, + 0.002896871378910777, + 0.0028885037550548816, + 0.0028801843317972347, + 0.0028719126938541073, + 0.00286368843069874, + 0.0028555111364934323, + 0.0028473804100227792, + 0.0028392958546280523, + 0.0028312570781426952, + 0.0028232636928289105, + 0.0028153153153153156, + 0.002807411566535654, + 0.002799552071668533, + 0.0027917364600781687, + 0.0027839643652561247, + 0.00277623542476402, + 0.0027685492801771874, + 0.0027609055770292656, + 0.0027533039647577094, + 0.0027457440966501927, + 0.002738225629791895, + 0.002730748225013654, + 0.0027233115468409588, + 0.0027159152634437804, + 0.0027085590465872156, + 0.0027012425715829285, + 0.0026939655172413795, + 0.0026867275658248252, + 0.002679528403001072, + 0.002672367717797969, + 0.0026652452025586353, + 0.002658160552897395, + 0.002651113467656416, + 0.0026441036488630354, + 0.0026371308016877636, + 0.002630194634402946, + 0.0026232948583420775, + 0.0026164311878597592, + 0.002609603340292276, + 0.0026028110359187923, + 0.002596053997923157, + 0.002589331952356292, + 0.0025826446280991736, + 0.002575991756826378, + 0.0025693730729701957, + 0.0025627883136852894, + 0.002556237218813906, + 0.0025497195308516064, + 0.00254323499491353, + 0.002536783358701167, + 0.0025303643724696357, + 0.002523977788995457, + 0.0025176233635448137, + 0.0025113008538422904, + 0.00250501002004008, + 0.0024987506246876563, + 0.0024925224327018943, + 0.0024863252113376433, + 0.00248015873015873, + 0.002474022761009401, + 0.0024679170779861796, + 0.0024618414574101425, + 0.002455795677799607, + 0.0024497795198432145, + 0.0024437927663734115, + 0.0024378352023403218, + 0.0024319066147859923, + 0.0024260067928190197, + 0.0024201355275895453, + 0.002414292612264607 + ], + "AH": [ + 0.0067341844754096325, + 0.006689138582215426, + 0.006644691321132434, + 0.006600830837752314, + 0.006557545588611102, + 0.006514824331058655, + 0.006472656113523545, + 0.006431030266154769, + 0.0063899363918205054, + 0.0063493643574477066, + 0.006309304285695871, + 0.006269746546937238, + 0.006230681751540068, + 0.006192100742440809, + 0.006153994587983602, + 0.00611635457503068, + 0.00607917220231835, + 0.006042439174057446, + 0.006006147393760264, + 0.005970288958293102, + 0.0059348561521392895, + 0.005899841441861398, + 0.005865237470764839, + 0.005831037053743993, + 0.005797233172306848, + 0.00576381896977618, + 0.005730787746650368, + 0.005698132956126534, + 0.005665848199774892, + 0.005633927223358981, + 0.0056023639127955605, + 0.005571152290251735, + 0.005540286510370862, + 0.005509760856621693, + 0.0054795697377691965, + 0.005449707684461957, + 0.005420169345926373, + 0.005390949486772545, + 0.005362042983900528, + 0.005333444823504729, + 0.0053051500981755595, + 0.005277154004092566, + 0.0052494518383048305, + 0.005222038996096856, + 0.005194910968438826, + 0.005168063339510587, + 0.005141491784309782, + 0.005115192066325713, + 0.00508916003528892, + 0.005063391624987812, + 0.005037882851151698, + 0.005012629809395763, + 0.0049876286732302155, + 0.0049628756921262784, + 0.004938367189642134, + 0.004914099561600382, + 0.00489006927432345, + 0.004866272862915855, + 0.004842706929601537, + 0.004819368142103153, + 0.0047962532320751095, + 0.004773358993574561, + 0.004750682281579932, + 0.0047282200105522865, + 0.0047059691530342285, + 0.004683926738288546, + 0.004662089850979267, + 0.0046404556298833555, + 0.004619021266641932, + 0.004597784004545691, + 0.004576741137351403, + 0.004555890008133723, + 0.004535228008166747, + 0.0045147525758348905, + 0.004494461195575061, + 0.004474351396846821, + 0.00445442075312763, + 0.004434666880940297, + 0.00441508743889818, + 0.00439568012678504, + 0.004376442684650428, + 0.0043573728919330534, + 0.0043384685666083556, + 0.004319727564354503, + 0.004301147777740155, + 0.0042827271354388685, + 0.004264463601455271, + 0.004246355174374994, + 0.004228399886637035, + 0.004210595803817885, + 0.004192941023936303, + 0.004175433676780527, + 0.004158071923241691, + 0.0041408539546743395, + 0.00412377799226693, + 0.004106842286428325, + 0.004090045116192043, + 0.0040733847886309515, + 0.004056859638290389, + 0.0040404680266334925, + 0.004024208341497193, + 0.004008078996565745, + 0.003992078430854695, + 0.0039762051082052885, + 0.00396045751679619, + 0.00394483416866076, + 0.003929333599218099, + 0.003913954366818739, + 0.003898695052294121, + 0.00388355425852116, + 0.003868530609996146, + 0.0038536227524192945, + 0.003838829352284412, + 0.0038241490964856517, + 0.0038095806919244968, + 0.0037951228651338376, + 0.0037807743619053813, + 0.0037665339469252768, + 0.003752400403423506, + 0.0037383725328234974, + 0.0037244491544043967, + 0.0037106291049719964, + 0.003696911238532108, + 0.0036832944259737044, + 0.0036697775547616107, + 0.0036563595286316364, + 0.0036430392672932577, + 0.003629815706142736, + 0.0036166877959766808, + 0.003603654502715825, + 0.003590714807133244, + 0.0035778677045881224, + 0.0035651122047677397, + 0.0035524473314296756, + 0.003539872122155563, + 0.0035273856281066163, + 0.003514986913784046, + 0.003502675056795912, + 0.0034904491476295263, + 0.0034783082894258577, + 0.0034662515977597064, + 0.00345427820042854, + 0.003442387237237776, + 0.003430577859796502, + 0.0034188492313178553, + 0.0034072005264169647, + 0.003395630930921545, + 0.0033841396416800507, + 0.003372725866374715, + 0.0033613888233432476, + 0.003350127741396758, + 0.003338941859645894, + 0.003327830427330092, + 0.003316792703649929, + 0.0033058279576005933, + 0.0032949354678124543, + 0.0032841145223923007, + 0.003273364418767466, + 0.0032626844635352814, + 0.003252073972311198, + 0.0032415322695868998, + 0.0032310586885830883, + 0.0032206525711100387, + 0.003210313267431264, + 0.003200040136126292, + 0.0031898325439578823, + 0.0031796898657443506, + 0.003169611484229895, + 0.0031595967899586963, + 0.003149645181154792, + 0.003139756063599286, + 0.003129928850511998, + 0.003120162962437556, + 0.003110457827129265, + 0.003100812879437864, + 0.003091227561202947, + 0.003081701321143493, + 0.0030722336147541718, + 0.003062823904199652, + 0.003053471658213791, + 0.003044176352000605, + 0.0030349374671332363, + 0.003025754491460697, + 0.0030166269190117223, + 0.0030075542499008456, + 0.0029985359902398034, + 0.0029895716520460525, + 0.00298066075315373, + 0.002971802817130609, + 0.002962997373190168, + 0.0029542439561081046, + 0.002945542106143728, + 0.0029368913689553633, + 0.002928291295523522, + 0.002919741442073631, + 0.0029112413699978745, + 0.0029027906457814723, + 0.002894388840928741, + 0.002886035531890485, + 0.0028777302999936083, + 0.0028694727313696156, + 0.0028612624168868894, + 0.0028530989520836325, + 0.002844981937100588, + 0.0028369109766148703, + 0.002828885679777793, + 0.002820905660152251, + 0.002812970535646553, + 0.0028050799284573547, + 0.0027972334650094854, + 0.0027894307758948855, + 0.002781671495815985, + 0.002773955263528638, + 0.002766281721786168, + 0.002758650517283412, + 0.00275106130060343, + 0.002743513726163771, + 0.0027360074521638467, + 0.002728542140533863, + 0.002721117456883304, + 0.0027137330704518625, + 0.0027063886540601434, + 0.0026990838840599274, + 0.0026918184402886514, + 0.002684592006022335, + 0.002677404267927841, + 0.0026702549160191325, + 0.002663143643612642, + 0.002656070147283085, + 0.002649034126819494, + 0.0026420352851848072, + 0.002635073328472126, + 0.0026281479658638585, + 0.0026212589095926386, + 0.0026144058749000276, + 0.002607588579996989, + 0.002600806746027251, + 0.0025940600970273398, + 0.0025873483598897185, + 0.002580671264326595, + 0.002574028542832396, + 0.0025674199306497947, + 0.00256084516573174, + 0.0025543039887103713, + 0.0025477961428606033, + 0.002541321374065708, + 0.002534879430787562, + 0.0025284700640311186, + 0.002522093027312655, + 0.00251574807663002, + 0.002509434970429991, + 0.0025031534695769686, + 0.002496903337324996, + 0.002490684339286009, + 0.002484496243401635, + 0.0024783388199132173, + 0.0024722118413362804, + 0.0024661150824274447, + 0.0024600483201611123, + 0.0024540113337023772, + 0.0024480039043761614, + 0.0024420258156445662, + 0.002436076853080449, + 0.002430156804340333, + 0.0024242654591390966, + 0.0024184026092273214, + 0.0024125680483642054, + 0.002406761572294691, + 0.0024009829787259296, + 0.002395232067302411, + 0.0023895086395835374, + 0.0023838124990218645, + 0.0023781434509393407, + 0.002372501302504215, + 0.0023668858627121647, + 0.002361296942361646, + 0.0023557343540343556, + 0.0023501979120741368, + 0.002344687432565662, + 0.0023392027333146714, + 0.0023337436338275452, + 0.002328309955291763, + 0.002322901520556364, + 0.002317518154112186, + 0.0023121596820736556, + 0.002306825932159917, + 0.0023015167336755127, + 0.0022962319174928414, + 0.002290971316035062, + 0.0022857347632561087, + 0.0022805220946262583, + 0.00227533314711148, + 0.002270167759159669, + 0.002265025770681328, + 0.0022599070230349128, + 0.002254811359008846, + 0.002249738622807529, + 0.002244688660032912, + 0.002239661317670727, + 0.002234656444074501 + ], + "AI": [ + 0.0030571067541678154, + 0.0030477893368010545, + 0.003038528541911445, + 0.0030293238549155, + 0.0030201747674465373, + 0.003011080777260311, + 0.0030020413881439723, + 0.002993056109825254, + 0.0029841244578840964, + 0.002975245953665606, + 0.0029664201241941246, + 0.002957646502089961, + 0.002948924625486571, + 0.0029402540379488418, + 0.0029316342883947133, + 0.002923064931015684, + 0.0029145455252010954, + 0.002906075635461969, + 0.0028976548313564, + 0.00288928268741806, + 0.002880958783082921, + 0.0028726827026199775, + 0.0028644540350608594, + 0.0028562723741336615, + 0.0028481373181938885, + 0.0028400484701605055, + 0.0028320054374504355, + 0.002824007831915054, + 0.0028160552697780172, + 0.002808147371573977, + 0.002800283762087963, + 0.0027924640702956527, + 0.0027846879293060844, + 0.0027769549763032586, + 0.002769264852490405, + 0.002761617203034028, + 0.0027540116770095047, + 0.0027464479273473508, + 0.002738925610780374, + 0.002731444387792159, + 0.0027240039225655543, + 0.002716603882932489, + 0.0027092439403244573, + 0.0027019237697241127, + 0.002694643049617307, + 0.0026874014619464592, + 0.0026801986920630405, + 0.002673034428683385, + 0.0026659083638431724, + 0.0026588201928530175, + 0.002651769614255839, + 0.0026447563297835597, + 0.002637780044314697, + 0.002630840465834172, + 0.002623937305391344, + 0.002617070277060485, + 0.002610239097901257, + 0.0026034434879200763, + 0.0025966831700308113, + 0.002589957870018589, + 0.002583267316501825, + 0.0025766112408960318, + 0.00256998937737718, + 0.0025634014628477253, + 0.002556847236900417, + 0.002550326441784545, + 0.002543838822372191, + 0.0025373841261249197, + 0.0025309621030606966, + 0.0025245725057223556, + 0.0025182150891447375, + 0.0025118896108244915, + 0.002505595830688545, + 0.002499333511063684, + 0.0024931024166472415, + 0.002486902314477124, + 0.0024807329739027217, + 0.0024745941665567095, + 0.0024684856663266252, + 0.0024624072493268923, + 0.0024563586938721738, + 0.0024503397804496174, + 0.002444350291692432, + 0.0024383900123545743, + 0.0024324587292836597, + 0.002426556231396315, + 0.0024206823096537544, + 0.0024148367570351326, + 0.0024090193685157857, + 0.0024032299410408076, + 0.0023974682735032893, + 0.0023917341667198944, + 0.002386027423408432, + 0.0023803478481656537, + 0.0023746952474432703, + 0.002369069429528192, + 0.0023634702045189915, + 0.002357897384305918, + 0.0023523507825486956, + 0.002346830214656759, + 0.002341335497767938, + 0.0023358664507286964, + 0.002330422894074591, + 0.002325004650009399, + 0.0023196115423871344, + 0.0023142433966922837, + 0.0023089000400209336, + 0.002303581301062785, + 0.0022982870100818342, + 0.0022930169988992777, + 0.002287771100875524, + 0.002282549150891766, + 0.0022773509853337703, + 0.0022721764420745583, + 0.0022670253604570867, + 0.0022618975812775943, + 0.0022567929467698367, + 0.0022517113005884326, + 0.0022466524877930993, + 0.002241616354832887, + 0.002236602749530414, + 0.0022316115210663234, + 0.002226642519965516, + 0.0022216955980804975, + 0.0022167706085773897, + 0.002211867405921941, + 0.0022069858458642067, + 0.00220212578542478, + 0.0021972870828816937, + 0.002192469597754876, + 0.0021876731907943814, + 0.0021828977239652936, + 0.0021781430604361773, + 0.0021734090645646464, + 0.002168695601885373, + 0.0021640025390963213, + 0.0021593297440474224, + 0.0021546770857274744, + 0.0021500444342517078, + 0.002145431660850239, + 0.0021408386378556354, + 0.0021362652386920367, + 0.0021317113378620522, + 0.0021271768109365485, + 0.00212266153454288, + 0.0021181653863533434, + 0.002113688245075185, + 0.002109229990438166, + 0.0021047905031852387, + 0.002100369665060997, + 0.002095967358801687, + 0.002091583468124325, + 0.0020872178777169292, + 0.0020828704732280823, + 0.002078541141257606, + 0.0020742297693456813, + 0.0020699362459635218, + 0.0020656604605044926, + 0.002061402303273452, + 0.002057161665478091, + 0.0020529384392193872, + 0.002048732517482499, + 0.0020445437941281064, + 0.002040372163882642, + 0.002036217522330519, + 0.00203207976590436, + 0.002027958791877449, + 0.002023854498353961, + 0.002019766784262078, + 0.002015695549344221, + 0.002011640694150163, + 0.0020076021200279293, + 0.002003579729116023, + 0.0019995734243360985, + 0.0019955831093845244, + 0.001991608688724833, + 0.001987650067580171, + 0.001983707151925529, + 0.001979779848480856, + 0.001975868064703068, + 0.0019719717087791633, + 0.0019680906896188954, + 0.00196422491684789, + 0.001960374300799872, + 0.0019565387525108946, + 0.001952718183711788, + 0.0019489125068212765, + 0.0019451216349395395, + 0.001941345481841994, + 0.001937583961971745, + 0.0019338369904340347, + 0.0019301044829893588, + 0.0019263863560474714, + 0.001922682526661168, + 0.0019189929125194016, + 0.0019153174319423982, + 0.001911656003874329, + 0.0019080085478782038, + 0.0019043749841303192, + 0.0019007552334127098, + 0.001897149217109817, + 0.0018935568572004957, + 0.0018899780762542395, + 0.0018864127974245193, + 0.00188286094444301, + 0.001879322441615816, + 0.0018757972138159218, + 0.0018722851864796386, + 0.0018687862856003878, + 0.0018653004377238158, + 0.0018618275699426867, + 0.0018583676098915536, + 0.0018549204857418733, + 0.0018514861261973437, + 0.0018480644604883523, + 0.0018446554183677577, + 0.0018412589301057825, + 0.001837874926484906, + 0.0018345033387960896, + 0.001831144098833004, + 0.0018277971388882541, + 0.0018244623917484937, + 0.0018211397906904292, + 0.0018178292694750464, + 0.0018145307623449458, + 0.0018112442040185694, + 0.0018079695296868703, + 0.0018047066750084273, + 0.0018014555761054485, + 0.0017982161695597743, + 0.0017949883924084364, + 0.0017917721821396615, + 0.0017885674766890958, + 0.0017853742144353646, + 0.0017821923341967416, + 0.0017790217752264859, + 0.0017758624772097331, + 0.001772714380259055, + 0.0017695774249109064, + 0.0017664515521220725, + 0.0017633367032656722, + 0.0017602328201276052, + 0.0017571398449032216, + 0.0017540577201926588, + 0.0017509863889990651, + 0.0017479257947234927, + 0.0017448758811622334, + 0.0017418365925030432, + 0.0017388078733220347, + 0.0017357896685799012, + 0.0017327819236190312, + 0.0017297845841597326, + 0.001726797596297791, + 0.0017238209065000287, + 0.0017208544616020838, + 0.0017178982088048578, + 0.001714952095671407, + 0.0017120160701242781, + 0.001709090080441067, + 0.0017061740752537524, + 0.0017032680035427017, + 0.0017003718146368918, + 0.0016974854582079146, + 0.0016946088842695328, + 0.0016917420431732388, + 0.0016888848856062566, + 0.0016860373625879888, + 0.0016831994254680183, + 0.0016803710259225557, + 0.001677552115952441, + 0.0016747426478798122, + 0.001671942574345664, + 0.0016691518483074042, + 0.0016663704230359677, + 0.001663598252112708, + 0.0016608352894282863, + 0.0016580814891782314, + 0.001655336805862051, + 0.0016526011942799013, + 0.0016498746095297001, + 0.001647157007006017, + 0.0016444483423960765, + 0.0016417485716786473, + 0.0016390576511211563, + 0.0016363755372765798, + 0.0016337021869825552, + 0.0016310375573580504, + 0.0016283816058013656, + 0.0016257342899876903, + 0.0016230955678671055, + 0.0016204653976621408, + 0.0016178437378662203, + 0.0016152305472401096, + 0.0016126257848112502, + 0.0016100294098706502, + 0.0016074413819708866, + 0.0016048616609247723, + 0.0016022902068022482, + 0.0015997269799288283, + 0.0015971719408833795 + ], + "AJ": [ + 0.006762192156118729, + 0.006716772052828501, + 0.00667195803158438, + 0.006627738041526943, + 0.006584100349173561, + 0.0065410335280375875, + 0.006498526448654118, + 0.006456568268990548, + 0.0064151484252272795, + 0.006374256622891039, + 0.006333882828323922, + 0.006294017260476847, + 0.006254650383007654, + 0.006215772896678962, + 0.006177375732031143, + 0.006139450042331518, + 0.006101987196778014, + 0.0060649787739506245, + 0.006028416555501126, + 0.005992292520067721, + 0.005956598837409288, + 0.0059213278627459065, + 0.005886472131301446, + 0.0058520243530360005, + 0.005817977407561514, + 0.005784324339237701, + 0.005751058352433391, + 0.005718172806951305, + 0.005685661213609805, + 0.00565351722997498, + 0.005621734656233723, + 0.0055903074312086964, + 0.005559229628504747, + 0.005528495452782334, + 0.005498099236156628, + 0.005468035434709639, + 0.005438298625122684, + 0.005408883501413886, + 0.0053797848717795915, + 0.005350997655543477, + 0.0053225168801958045, + 0.005294337678532379, + 0.005266455285880101, + 0.005238865037411777, + 0.005211562365544653, + 0.005184542797419089, + 0.005157801952455854, + 0.005131335539988902, + 0.005105139356970101, + 0.005079209285743236, + 0.005053541291887509, + 0.005028131422124771, + 0.005002975802289145, + 0.004978070635358156, + 0.004953412199542928, + 0.004928996846432332, + 0.004904820999195092, + 0.0048808811508316285, + 0.004857173862480302, + 0.004833695761766954, + 0.004810443541209519, + 0.004787413956662601, + 0.004764603825809122, + 0.0047420100266937215, + 0.004719629496300115, + 0.0046974592291642026, + 0.004675496276031588, + 0.0046537377425468485, + 0.004632180787983442, + 0.004610822624007804, + 0.004589660513475646, + 0.004568691769263777, + 0.004547913753133015, + 0.004527323874618183, + 0.0045069195899578585, + 0.004486698401040101, + 0.004466657854386824, + 0.004446795540160364, + 0.004427109091197812, + 0.004407596182069762, + 0.004388254528165714, + 0.004369081884800785, + 0.004350076046349072, + 0.004331234845396992, + 0.004312556151919056, + 0.004294037872475398, + 0.004275677949430401, + 0.004257474360187974, + 0.004239425116452811, + 0.004221528263502972, + 0.004203781879484669, + 0.004186184074727484, + 0.004168732991068458, + 0.004151426801202174, + 0.004134263708041486, + 0.004117241944094685, + 0.004100359770860207, + 0.004083615478233549, + 0.004067007383930399, + 0.004050533832923087, + 0.004034193196890579, + 0.004017983873682018, + 0.0040019042867938115, + 0.003985952884856925, + 0.003970128141139506, + 0.003954428553058831, + 0.003938852641706347, + 0.003923398951382051, + 0.003908066049143066, + 0.0038928525243582257, + 0.0038777569882775254, + 0.003862778073608686, + 0.003847914434103261, + 0.003833164744155848, + 0.0038185276984079586, + 0.0038040020113625506, + 0.0037895864170101046, + 0.0037752796684580314, + 0.0037610805375729583, + 0.0037469878146290103, + 0.003733000307963197, + 0.0037191168436403466, + 0.0037053362651255917, + 0.0036916574329606267, + 0.003678079224452846, + 0.0036646005333651477, + 0.0036512202696175056, + 0.00363793735899276, + 0.003624750742848404, + 0.0036116593778354744, + 0.003598662235624772, + 0.003585758302634856, + 0.0035729465797715854, + 0.0035602260821681053, + 0.0035475958389334927, + 0.003535054892904732, + 0.0035226023004071294, + 0.003510237131014282, + 0.003497958467319595, + 0.0034857654047073527, + 0.003473657051130452, + 0.00346163252689502, + 0.003449690964445029, + 0.003437831508153799, + 0.003426053314121935, + 0.0034143555499743794, + 0.003402737394665678, + 0.0033911980382881346, + 0.003379736681882628, + 0.0033683525372549816, + 0.003357044826794997, + 0.0033458127832992623, + 0.0033346556497981794, + 0.0033235726793856557, + 0.0033125631350510165, + 0.0033016262895186888, + 0.00329076142508522, + 0.003279967833463182, + 0.0032692448156284026, + 0.003258591681666756, + 0.003248007750628501, + 0.003237492350382176, + 0.0032270448174709365, + 0.00321666449697644, + 0.0032063507423787385, + 0.003196102915423049, + 0.0031859203859889718, + 0.003175802531960814, + 0.003165748739099472, + 0.0031557584009207496, + 0.0031458309185719013, + 0.003135965700710841, + 0.003126162163391566, + 0.0031164197299464735, + 0.003106737830874673, + 0.0030971159037298523, + 0.0030875533930128096, + 0.0030780497500630943, + 0.003068604432955313, + 0.0030592169063947683, + 0.0030498866416182047, + 0.0030406131162927785, + 0.0030313958144185804, + 0.003022234226234932, + 0.003013127848124464, + 0.003004076182520743, + 0.0029950787378201227, + 0.0029861350282882615, + 0.0029772445739779663, + 0.0029684069006401526, + 0.0029596215396381353, + 0.0029508880278701355, + 0.002942205907681572, + 0.0029335747267897894, + 0.0029249940382032324, + 0.002916463400145286, + 0.002907982375977447, + 0.0028995505341258276, + 0.002891167448007659, + 0.0028828326959591255, + 0.0028745458611645347, + 0.0028663065315872593, + 0.0028581142999015707, + 0.002849968763424471, + 0.0028418695240512992, + 0.002833816188189342, + 0.002825808366694993, + 0.002817845674811137, + 0.0028099277321047555, + 0.002802054162406753, + 0.002794224593753114, + 0.0027864386583253964, + 0.0027786959923921106, + 0.0027709962362554297, + 0.002763339034192569, + 0.0027557240344004974, + 0.002748150888945755, + 0.002740619253707388, + 0.0027331287883272104, + 0.0027256791561578453, + 0.0027182700242120994, + 0.0027109010631136687, + 0.002703571947048067, + 0.002696282353715107, + 0.0026890319642813854, + 0.0026818204633329845, + 0.0026746475388310653, + 0.0026675128820663474, + 0.0026604161876142562, + 0.0026533571532920686, + 0.0026463354801160577, + 0.002639350872258195, + 0.0026324030370064033, + 0.0026254916847217036, + 0.002618616528800244, + 0.0026117772856302235, + 0.002604973674557698, + 0.002598205417842836, + 0.0025914722406270574, + 0.0025847738708926205, + 0.002578110039425985, + 0.002571480479785171, + 0.0025648849282591257, + 0.0025583231238373028, + 0.0025517948081721364, + 0.0025452997255472898, + 0.0025388376228427934, + 0.0025324082495024047, + 0.0025260113575023, + 0.002519646701317546, + 0.002513314037893455, + 0.002507013126608282, + 0.002500743729253241, + 0.0024945056099914265, + 0.002488298535335609, + 0.002482122274116483, + 0.0024759765974537995, + 0.0024698612787286134, + 0.0024637760935557473, + 0.0024577208197553713, + 0.002451695237326801, + 0.002445699128421852, + 0.002439732277317308, + 0.0024337944703918257, + 0.0024278854960966267, + 0.0024220051449337365, + 0.0024161532094295612, + 0.002410329484110907, + 0.0024045337654803323, + 0.0023987658519937227, + 0.002393025544035865, + 0.0023873126438973546, + 0.002381626955752836, + 0.0023759682856376863, + 0.0023703364414262573, + 0.0023647312328116676, + 0.002359152471279158, + 0.002353599970093878, + 0.002348073544269802, + 0.002342573010558402, + 0.00233709818742156, + 0.002331648895015359, + 0.0023262249551689873, + 0.0023208261913660877, + 0.0023154524287245515, + 0.0023101034939789766, + 0.002304779215460462, + 0.002299479423079287, + 0.002294203948308482, + 0.0022889526241600677, + 0.0022837252851759526, + 0.0022785217674030633, + 0.002273341908380022, + 0.0022681855471198276, + 0.0022630525240923127, + 0.0022579426812083803, + 0.002252855861803349, + 0.0022477919106214106, + 0.0022427506737991987, + 0.0022377319988506894 + ], + "AK": [ + 0.007894736842105263, + 0.007832898172323759, + 0.0077720207253886, + 0.007712082262210798, + 0.007653061224489796, + 0.007594936708860759, + 0.007537688442211054, + 0.007481296758104738, + 0.007425742574257425, + 0.00737100737100737, + 0.007317073170731708, + 0.007263922518159807, + 0.007211538461538461, + 0.007159904534606205, + 0.007109004739336493, + 0.007058823529411764, + 0.007009345794392522, + 0.006960556844547564, + 0.006912442396313364, + 0.006864988558352402, + 0.006818181818181817, + 0.006772009029345372, + 0.0067264573991031385, + 0.006681514476614699, + 0.006637168141592921, + 0.006593406593406593, + 0.006550218340611353, + 0.00650759219088937, + 0.00646551724137931, + 0.006423982869379015, + 0.006382978723404255, + 0.0063424947145877385, + 0.0063025210084033615, + 0.006263048016701461, + 0.006224066390041493, + 0.006185567010309279, + 0.006147540983606557, + 0.006109979633401222, + 0.006072874493927126, + 0.006036217303822938, + 0.006, + 0.005964214711729622, + 0.005928853754940712, + 0.005893909626719057, + 0.005859375, + 0.005825242718446602, + 0.005791505791505791, + 0.005758157389635317, + 0.005725190839694656, + 0.0056925996204933585, + 0.005660377358490566, + 0.005628517823639775, + 0.005597014925373134, + 0.0055658627087198514, + 0.005535055350553505, + 0.005504587155963302, + 0.005474452554744526, + 0.0054446460980036296, + 0.005415162454873646, + 0.0053859964093357264, + 0.005357142857142857, + 0.0053285968028419185, + 0.005300353356890459, + 0.005272407732864675, + 0.005244755244755245, + 0.005217391304347826, + 0.005190311418685121, + 0.0051635111876075735, + 0.005136986301369863, + 0.005110732538330494, + 0.005084745762711865, + 0.00505902192242833, + 0.0050335570469798654, + 0.005008347245409016, + 0.004983388704318937, + 0.0049586776859504135, + 0.00493421052631579, + 0.004909983633387888, + 0.00488599348534202, + 0.00486223662884927, + 0.004838709677419354, + 0.004815409309791333, + 0.004792332268370607, + 0.0047694753577106515, + 0.004746835443037975, + 0.004724409448818898, + 0.004702194357366771, + 0.0046801872074883, + 0.004658385093167702, + 0.00463678516228748, + 0.004615384615384616, + 0.004594180704441041, + 0.004573170731707317, + 0.004552352048558422, + 0.004531722054380664, + 0.004511278195488722, + 0.004491017964071856, + 0.004470938897168405, + 0.004451038575667656, + 0.004431314623338257, + 0.004411764705882353, + 0.004392386530014641, + 0.004373177842565597, + 0.0043541364296081275, + 0.004335260115606936, + 0.004316546762589928, + 0.004297994269340974, + 0.0042796005706134095, + 0.004261363636363636, + 0.004243281471004243, + 0.004225352112676057, + 0.004207573632538569, + 0.004189944134078212, + 0.004172461752433936, + 0.004155124653739612, + 0.004137931034482759, + 0.004120879120879121, + 0.004103967168262654, + 0.004087193460490463, + 0.004070556309362279, + 0.004054054054054054, + 0.004037685060565276, + 0.004021447721179625, + 0.004005340453938585, + 0.003989361702127659, + 0.003973509933774834, + 0.00395778364116095, + 0.003942181340341655, + 0.003926701570680628, + 0.003911342894393742, + 0.0038961038961038957, + 0.0038809831824062097, + 0.003865979381443299, + 0.003851091142490372, + 0.0038363171355498722, + 0.003821656050955414, + 0.0038071065989847713, + 0.003792667509481669, + 0.003778337531486146, + 0.0037641154328732747, + 0.00375, + 0.0037359900373599006, + 0.003722084367245657, + 0.003708281829419036, + 0.0036945812807881767, + 0.003680981595092024, + 0.003667481662591687, + 0.0036540803897685743, + 0.003640776699029126, + 0.0036275695284159614, + 0.003614457831325301, + 0.003601440576230492, + 0.0035885167464114833, + 0.003575685339690107, + 0.003562945368171021, + 0.003550295857988166, + 0.0035377358490566034, + 0.0035252643948296123, + 0.0035128805620608895, + 0.0035005834305717617, + 0.0034883720930232558, + 0.003476245654692931, + 0.0034642032332563508, + 0.0034522439585730727, + 0.003440366972477064, + 0.0034285714285714284, + 0.003416856492027335, + 0.0034052213393870596, + 0.003393665158371041, + 0.003382187147688839, + 0.0033707865168539322, + 0.0033594624860022394, + 0.003348214285714285, + 0.003337041156840934, + 0.0033259423503325942, + 0.003314917127071823, + 0.0033039647577092508, + 0.003293084522502744, + 0.0032822757111597373, + 0.003271537622682661, + 0.0032608695652173916, + 0.0032502708559046583, + 0.0032397408207343412, + 0.003229278794402583, + 0.003218884120171674, + 0.0032085561497326204, + 0.003198294243070362, + 0.003188097768331562, + 0.0031779661016949155, + 0.003167898627243928, + 0.003157894736842105, + 0.0031479538300104933, + 0.003138075313807531, + 0.0031282586027111575, + 0.0031185031185031187, + 0.0031088082901554403, + 0.0030991735537190084, + 0.0030895983522142116, + 0.0030800821355236136, + 0.0030706243602865915, + 0.003061224489795918, + 0.003051881993896236, + 0.0030425963488843813, + 0.0030333670374115265, + 0.0030241935483870963, + 0.0030150753768844224, + 0.003006012024048096, + 0.0029970029970029966, + 0.0029880478087649398, + 0.002979145978152929, + 0.00297029702970297, + 0.002961500493583415, + 0.002952755905511811, + 0.0029440628066732086, + 0.0029354207436399216, + 0.002926829268292683, + 0.0029182879377431903, + 0.0029097963142580016, + 0.0029013539651837525, + 0.002892960462873674, + 0.0028846153846153843, + 0.0028763183125599234, + 0.0028680688336520073, + 0.002859866539561487, + 0.0028517110266159697, + 0.002843601895734597, + 0.0028355387523629487, + 0.002827521206409048, + 0.002819548872180451, + 0.002811621368322399, + 0.0028037383177570096, + 0.0027958993476234852, + 0.0027881040892193303, + 0.0027803521779425394, + 0.0027726432532347504, + 0.002764976958525345, + 0.0027573529411764703, + 0.002749770852428964, + 0.0027422303473491768, + 0.0027347310847766633, + 0.002727272727272727, + 0.002719854941069809, + 0.0027124773960216994, + 0.0027051397655545534, + 0.0026978417266187047, + 0.0026905829596412553, + 0.0026833631484794273, + 0.0026761819803746653, + 0.002669039145907473, + 0.0026619343389529724, + 0.0026548672566371677, + 0.0026478375992939097, + 0.002640845070422535, + 0.0026338893766461808, + 0.0026269702276707526, + 0.0026200873362445414, + 0.0026132404181184667, + 0.0026064291920069502, + 0.0025996533795493936, + 0.0025929127052722557, + 0.0025862068965517237, + 0.002579535683576956, + 0.0025728987993138934, + 0.002566295979469632, + 0.002559726962457338, + 0.002553191489361702, + 0.0025466893039049233, + 0.002540220152413209, + 0.002533783783783784, + 0.0025273799494524006, + 0.0025210084033613443, + 0.002514668901927913, + 0.0025083612040133776, + 0.0025020850708924102, + 0.0024958402662229617, + 0.0024896265560165973, + 0.0024834437086092716, + 0.002477291494632535, + 0.002471169686985173, + 0.0024650780608052587, + 0.0024590163934426227, + 0.002452984464431725, + 0.0024469820554649264, + 0.002441008950366151, + 0.002435064935064935, + 0.0024291497975708503, + 0.0024232633279483036, + 0.0024174053182917, + 0.0024115755627009644, + 0.0024057738572574178, + 0.0024, + 0.002394253790901835, + 0.0023885350318471337, + 0.002382843526608419, + 0.0023771790808240884, + 0.0023715415019762843, + 0.002365930599369085, + 0.002360346184107002, + 0.002354788069073783, + 0.002349256068911511 + ], + "AL": [ + 0.007367905597974067, + 0.00731401661401998, + 0.007260910196212, + 0.007208569421002675, + 0.007156977849331669, + 0.00710611950940776, + 0.00705597888022913, + 0.007006540875786005, + 0.006957790829931199, + 0.006909714481871498, + 0.006862297962262787, + 0.006815527779867381, + 0.006769390808757381, + 0.0067238742760340475, + 0.006678965750036792, + 0.00663465312902467, + 0.0065909246303030855, + 0.0065477687797788064, + 0.006505174401923108, + 0.0064631306101217145, + 0.006421626797400659, + 0.006380652627502981, + 0.006340198026307586, + 0.006300253173571191, + 0.006260808494981562, + 0.006221854654506309, + 0.00618338254702544, + 0.006145383291237483, + 0.006107848222823398, + 0.0060707688878607335, + 0.006034137036474485, + 0.005997944616720208, + 0.005962183768680962, + 0.005926846818778531, + 0.005891926274283366, + 0.005857414818017714, + 0.005823305303244597, + 0.005789590748733531, + 0.005756264333998562, + 0.005723319394694615, + 0.005690749418179264, + 0.0056585480392172816, + 0.005626709035835287, + 0.005595226325313174, + 0.005564093960309879, + 0.005533306125118598, + 0.0055028571320443476, + 0.005472741417900995, + 0.0054429535406232965, + 0.0054134881759888565, + 0.005384340114443775, + 0.005355504258034216, + 0.005326975617432561, + 0.00529874930906038, + 0.005270820552300659, + 0.005243184666799294, + 0.005215837069850293, + 0.005188773273861358, + 0.005161988883900515, + 0.005135479595315795, + 0.00510924119142997, + 0.005083269541302338, + 0.005057560597563571, + 0.005032110394310729, + 0.005006915045068894, + 0.004981970740812747, + 0.004957273748045665, + 0.004932820406938543, + 0.004908607129520348, + 0.0048846303979239725, + 0.004860886762682037, + 0.0048373728410728845, + 0.004814085315512973, + 0.0047910209319979025, + 0.004768176498585852, + 0.004745548883924533, + 0.004723135015821445, + 0.0047009318798529875, + 0.004678936518011545, + 0.00465714602739431, + 0.004635557558923864, + 0.004614168316107836, + 0.00459297555383098, + 0.0045719765771792265, + 0.004551168740299927, + 0.004530549445288079, + 0.004510116141106746, + 0.0044898663225338975, + 0.004469797529139674, + 0.004449907344286963, + 0.004430193394165505, + 0.004410653346844873, + 0.00439128491135321, + 0.004372085836787276, + 0.004353053911434257, + 0.004334186961926667, + 0.004315482852413455, + 0.004296939483753315, + 0.004278554792730871, + 0.004260326751290844, + 0.004242253365790649, + 0.00422433267627631, + 0.0042065627557728025, + 0.00418894170959061, + 0.004171467674658258, + 0.004154138818859288, + 0.004136953340396321, + 0.004119909467164007, + 0.004103005456141284, + 0.004086239592796748, + 0.004069610190509554, + 0.0040531155900009885, + 0.004036754158786682, + 0.004020524290636152, + 0.00400442440504567, + 0.003988452946727339, + 0.003972608385107712, + 0.003956889213837744, + 0.003941293950317171, + 0.003925821135226881, + 0.0039104693320741735, + 0.003895237126749329, + 0.0038801231270881864, + 0.0038651259624520318, + 0.003850244283310822, + 0.0038354767608386187, + 0.0038208220865185716, + 0.0038062789717558942, + 0.0037918461475003884, + 0.00377752236387785, + 0.003763306389828358, + 0.003749197012753447, + 0.0037351930381726017, + 0.003721293289385086, + 0.003707496607140426, + 0.003693801849316669, + 0.0036802078906046365, + 0.0036667136221995023, + 0.003653317951500812, + 0.00364001980181472, + 0.00362681811206933, + 0.003613711836528477, + 0.003600699944519503, + 0.003587781420159031, + 0.003574955262091617, + 0.003562220483230405, + 0.0035495761105028834, + 0.003537021184603528, + 0.0035245547597519966, + 0.0035121759034544286, + 0.003499883696271633, + 0.0034876772315908244, + 0.0034755556154038025, + 0.0034635179660877924, + 0.0034515634141916163, + 0.0034396911022269716, + 0.0034279001844632617, + 0.0034161898267259794, + 0.0034045592062013075, + 0.003393007511242274, + 0.003381533941180237, + 0.0033701377061405857, + 0.00335881802686, + 0.003347574134510811, + 0.0033364052705249225, + 0.0033253106864246096, + 0.0033142896436546554, + 0.0033033414134187034, + 0.003292465276518719, + 0.00328166052319645, + 0.0032709264529817705, + 0.0032602623745370263, + 0.0032496676055131513, + 0.003239141472400453, + 0.0032286833103887247, + 0.0032182924632246923, + 0.0032079682830770118, + 0.0031977101304001554, + 0.0031875173738031837, + 0.003177389389919405, + 0.0031673255632800323, + 0.003157325286189838, + 0.0031473879586025877, + 0.003137512988004243, + 0.003127699789292615, + 0.003117947784663677, + 0.0031082564034961013, + 0.0030986250822422345, + 0.0030890532643170765, + 0.00307954039999192, + 0.0030700859462888808, + 0.0030606893668774227, + 0.0030513501319742176, + 0.0030420677182405598, + 0.0030328416086879972, + 0.003023671292581076, + 0.003014556265341639, + 0.0030054960284586762, + 0.0029964900893955093, + 0.0029875379615023068, + 0.0029786391639263776, + 0.0029697932215277945, + 0.0029609996647945724, + 0.0029522580297582923, + 0.0029435678579134983, + 0.002934928696137984, + 0.0029263400966141884, + 0.0029178016167490384, + 0.0029093128191015616, + 0.0029008732713069474, + 0.002892482546001718, + 0.0028841402207526734, + 0.002875845877987171, + 0.0028675991049218474, + 0.002859399493493564, + 0.002851246640294347, + 0.0028431401465041084, + 0.0028350796178238102, + 0.002827064664415513, + 0.0028190949008357613, + 0.0028111699459756334, + 0.0028032894229996774, + 0.0027954529592868482, + 0.002787660186369001, + 0.0027799107398780443, + 0.00277220425948399, + 0.0027645403888423292, + 0.0027569187755387414, + 0.002749339071033363, + 0.002741800930609939, + 0.0027343040133214203, + 0.002726847981940894, + 0.0027194325029085142, + 0.002712057246282651, + 0.002704721885693706, + 0.0026974260982908227, + 0.0026901695646979196, + 0.0026829519689675063, + 0.0026757729985327217, + 0.0026686323441629245, + 0.0026615296999208393, + 0.002654464763116593, + 0.002647437234265526, + 0.002640446817046893, + 0.002633493218261229, + 0.0026265761477886063, + 0.0026196953185504412, + 0.0026128504464679736, + 0.0026060412504229635, + 0.0025992674522217207, + 0.002592528776554026, + 0.0025858249509573827, + 0.0025791557057808223, + 0.002572520774148268, + 0.002565919891921453, + 0.0025593527976672803, + 0.0025528192326225163, + 0.0025463189406582654, + 0.0025398516682488825, + 0.002533417164437779, + 0.002527015180803893, + 0.002520645471431937, + 0.0025143077928799773, + 0.002508001904148127, + 0.0025017275666470162, + 0.002495484544170923, + 0.0024892726028642453, + 0.002483091511194857, + 0.002476941039925018, + 0.0024708209620816213, + 0.0024647310529302136, + 0.0024586710899459074, + 0.00245264085278718, + 0.002446640123268784, + 0.0024406686853353232, + 0.002434726325036829, + 0.0024288128304994494, + 0.002422927991905688, + 0.0024170716014639826, + 0.0024112434533882787, + 0.0024054433438733813, + 0.002399671071067422, + 0.0023939264350552047, + 0.0023882092378284536, + 0.0023825192832667152, + 0.002376856377114711, + 0.0023712203269590226, + 0.002365610942207219, + 0.0023600280340658752, + 0.002354471415519921, + 0.002348940901311103, + 0.002343436307917779, + 0.0023379574535347114, + 0.0023325041580530836, + 0.0023270762430400715, + 0.002321673531720192, + 0.002316295848955985, + 0.0023109430212291393, + 0.0023056148766198437, + 0.0023003112447932406 + ], + "AM": [ + 0.006933778053873407, + 0.0068860318374406315, + 0.00683893868790153, + 0.006792485297413942, + 0.006746658717270204, + 0.006701446345862561, + 0.006656835917130843, + 0.00661281548946735, + 0.006569373435059589, + 0.006526498429652028, + 0.006484179442701521, + 0.006442405727919098, + 0.006401166814170134, + 0.0063604524967249, + 0.006320252828839745, + 0.0062805581136553545, + 0.006241358896398319, + 0.006202645956874253, + 0.006164410302236467, + 0.006126643160022649, + 0.006089335971444232, + 0.0060524803849197895, + 0.006016068249843354, + 0.005980091610573668, + 0.005944542700641042, + 0.005909413937155827, + 0.005874697915417837, + 0.005840387403712066, + 0.0058064753382862655, + 0.005772954818503706, + 0.005739819102160482, + 0.0057070616009660124, + 0.005674675876175206, + 0.005642655634369165, + 0.005610994723378893, + 0.00557968712834378, + 0.005548726967902207, + 0.005518108490509155, + 0.005487826070873059, + 0.005457874206511004, + 0.005428247514415618, + 0.0053989407278289825, + 0.005369948693123572, + 0.005341266366777564, + 0.005312888812453176, + 0.005284811198162709, + 0.005257028793525409, + 0.005229536967112702, + 0.005202331183871367, + 0.005175407002632193, + 0.005148760073692138, + 0.005122386136470425, + 0.005096281017240356, + 0.005070440626924411, + 0.0050448609589606175, + 0.005019538087232656, + 0.004994468164057464, + 0.004969647418240575, + 0.004945072153181629, + 0.004920738745040287, + 0.004896643640955656, + 0.004872783357315225, + 0.004849154478077544, + 0.004825753653140197, + 0.004802577596757951, + 0.004779623086004436, + 0.00475688695927623, + 0.004734366114844235, + 0.0047120575094403705, + 0.004689958156887997, + 0.0046680651267700934, + 0.004646375543130965, + 0.004624886583221244, + 0.0046035954762684295, + 0.0045824995022896164, + 0.004561595990931533, + 0.004540882320343664, + 0.004520355916082908, + 0.004500014250045092, + 0.004479854839429365, + 0.004459875245726552, + 0.004440073073735951, + 0.004420445970608089, + 0.004400991624913031, + 0.0043817077657331005, + 0.004362592161778922, + 0.00434364262052922, + 0.004324856987391268, + 0.0043062331448850966, + 0.0042877690118485745, + 0.004269462542660918, + 0.004251311726487739, + 0.004233314586544079, + 0.004215469179377873, + 0.004197773594169396, + 0.004180225952050254, + 0.004162824405437027, + 0.0041455671373831215, + 0.004128452360947277, + 0.004111478318575834, + 0.004094643281501664, + 0.004077945549156636, + 0.004061383448598965, + 0.004044955333955436, + 0.004028659585874506, + 0.004012494610996731, + 0.003996458841432515, + 0.00398055073425696, + 0.00396476877101426, + 0.003949111457235199, + 0.003933577321965087, + 0.003918164917302791, + 0.0039028728179508754, + 0.003887699620776619, + 0.003872643944382359, + 0.0038577044286873807, + 0.003842879734516913, + 0.003828168543201782, + 0.003813569556189611, + 0.003799081494659795, + 0.0037847030991531305, + 0.0037704331292041093, + 0.0037562703629852034, + 0.003742213596958921, + 0.0037282616455358575, + 0.003714413340741851, + 0.0037006675318920212, + 0.003687023085271024, + 0.003673478883823078, + 0.0036600338268457655, + 0.0036466868296933797, + 0.0036334368234827163, + 0.003620282754809967, + 0.00360722358547072, + 0.003594258292186847, + 0.0035813858663391596, + 0.0035686053137062856, + 0.003555915654207542, + 0.003543315921654022, + 0.0035308051635016824, + 0.003518382440613088, + 0.0035060468270211587, + 0.0034937974096986846, + 0.003481633288334285, + 0.0034695535751114726, + 0.003457557394492161, + 0.0034456438830059444, + 0.003433812189041374, + 0.0034220614726450105, + 0.0034103909053209147, + 0.0033987996698379153, + 0.0033872869600366506, + 0.003375851980643718, + 0.003364493947088487, + 0.003353212085323909, + 0.0033420056316506574, + 0.0033308738325441567, + 0.0033198159444858266, + 0.003308831233798326, + 0.003297918976482128, + 0.0032870784580580903, + 0.0032763089734098028, + 0.003265609826631266, + 0.003254980330877233, + 0.0032444198082162146, + 0.003233927589486596, + 0.0032235030141545273, + 0.003213145430175368, + 0.003202854193858906, + 0.0031926286697343542, + 0.0031824682304215646, + 0.0031723722565002443, + 0.0031623401363858328, + 0.0031523712662060444, + 0.0031424650496783, + 0.0031326208979924886, + 0.003122838229693059, + 0.003113116470565336, + 0.003103455053522497, + 0.0030938534184958844, + 0.003084311012326868, + 0.0030748272886593764, + 0.003065401707837534, + 0.0030560337368015222, + 0.0030467228489881037, + 0.0030374685242324784, + 0.0030282702486690294, + 0.003019127514639841, + 0.003010039820597221, + 0.003001006671015549, + 0.00299202757629935, + 0.002983102052694475, + 0.002974229622203506, + 0.002965409812497155, + 0.0029566421568332224, + 0.002947926193972883, + 0.002939261468100085, + 0.0029306475287422806, + 0.002922083930692043, + 0.0029135702339304625, + 0.0029051060035523157, + 0.00289669080969035, + 0.00288832422744556, + 0.0028800058368119164, + 0.002871735222608862, + 0.0028635119744118143, + 0.002855335686482441, + 0.0028472059577047126, + 0.0028391223915169572, + 0.0028310845958483544, + 0.0028230921830565414, + 0.002815144769862332, + 0.0028072419772924295, + 0.0027993834306154763, + 0.0027915687592852123, + 0.002783797596881632, + 0.002776069581053031, + 0.0027683843534607178, + 0.0027607415597228346, + 0.0027531408493601806, + 0.0027455818757429196, + 0.0027380642960370682, + 0.0027305877711536475, + 0.002723151965697168, + 0.002715756547915227, + 0.0027084011896503224, + 0.0027010855662890076, + 0.0026938093567174803, + 0.002686572243270957, + 0.0026793739116903748, + 0.0026722140510755388, + 0.0026650923538400484, + 0.002658008515668664, + 0.0026509622354720097, + 0.002643953215345718, + 0.002636981160527796, + 0.002630045779355994, + 0.002623146783230279, + 0.002616283886569315, + 0.002609456806772714, + 0.0026026652641837345, + 0.0025959089820468684, + 0.002589187686475425, + 0.002582501106410451, + 0.0025758489735860923, + 0.0025692310224942894, + 0.0025626469903465843, + 0.0025560966170441457, + 0.0025495796451382446, + 0.0025430958198002784, + 0.002536644888787576, + 0.0025302266024087583, + 0.002523840713495318, + 0.0025174869773663122, + 0.002511165151798389, + 0.0025048749969966977, + 0.0024986162755604724, + 0.0024923887524588295, + 0.0024861921949956844, + 0.0024800263727839944, + 0.002473891057717781, + 0.002467786023940377, + 0.0024617110478217796, + 0.002455665907926674, + 0.0024496503849895657, + 0.0024436642618901327, + 0.0024377073236219182, + 0.002431779357273456, + 0.00242588015199674, + 0.0024200094989852428, + 0.002414167191450156, + 0.0024083530245924134, + 0.002402566795583594, + 0.002396808303538167, + 0.0023910773494923987, + 0.002385373736381702, + 0.002379697269015102, + 0.0023740477540585836, + 0.0023684250000066687, + 0.002362828817165097, + 0.0023572590176290653, + 0.002351715415259248, + 0.0023461978256655858, + 0.0023407060661826407, + 0.002335239955851609, + 0.0023297993154016705, + 0.002324383967225785, + 0.0023189937353673695, + 0.0023136284454963185, + 0.0023082879248925714, + 0.0023029720024283495, + 0.002297680508546396, + 0.00229241327524643, + 0.002287170136063832, + 0.0022819509260536552, + 0.0022767554817739732, + 0.002271583641265895, + 0.002266435244041798, + 0.002261310131063121, + 0.0022562081447274895 + ], + "AN": [ + 0.025, + 0.02487562189054726, + 0.02403152936652897, + 0.02323636025652931, + 0.02248605864364106, + 0.021777003484320545, + 0.021105951878429563, + 0.020469990993204012, + 0.019866497139224393, + 0.0192931007871584, + 0.01874765654293231, + 0.018228217280349845, + 0.017733011774719865, + 0.017260425296879323, + 0.016808982720365684, + 0.01637733377006234, + 0.015964240102171123, + 0.015568563955660863, + 0.015189258156631524, + 0.014825357291110786, + 0.014475969889982565, + 0.01414027149321262, + 0.013817498480075185, + 0.013506942568480174, + 0.013207945900253648, + 0.012919896640827044, + 0.012642225031605614, + 0.012374399841607708, + 0.012115925172046182, + 0.01186633757357125, + 0.011625203441060217, + 0.01139211665527462, + 0.011166696444523838, + 0.010948585442760672, + 0.010737447923377719, + 0.010532968190436032, + 0.01033484911120297, + 0.01014281077572221, + 0.009956589270779359, + 0.009775935557032822, + 0.00960061443932414, + 0.009430403621274897, + 0.009265092836230115, + 0.009104483047452705, + 0.008948385711217588, + 0.008796622097114737, + 0.008649022660439432, + 0.008505426462082744, + 0.008365680631776229, + 0.008229639870959149, + 0.00809716599190291, + 0.007968127490039834, + 0.007842399146746892, + 0.007719861660078875, + 0.007600401301188775, + 0.007483909594371951, + 0.007370283018867996, + 0.007259422730704568, + 0.0071512343030408765, + 0.007045627483583505, + 0.006942515967786722, + 0.006841817186644894, + 0.006743452108003201, + 0.006647345050386777, + 0.006553423508440792, + 0.006461617989144575, + 0.006371861858034844, + 0.006284091194731278, + 0.006198244657113383, + 0.006114263353550919, + 0.006032090722644545, + 0.005951672419950205, + 0.005872956211238289, + 0.005795891871841263, + 0.005720431091687184, + 0.005646527385657629, + 0.005574136008918762, + 0.005503213876904223, + 0.005433719489664979, + 0.005365612860300795, + 0.005298855447223527, + 0.005233410090014434, + 0.005169240948659004, + 0.005106313445944588, + 0.0050445942128416466, + 0.004984051036682313, + 0.0049246528119768485, + 0.004866369493703004, + 0.004809172052939292, + 0.004753032434693383, + 0.004697923517805069, + 0.004643819076808553, + 0.0045906937456390295, + 0.004538522983080329, + 0.004487283039865009, + 0.004436950927322991, + 0.0043875043875043485, + 0.004338921864694978, + 0.004291182478243671, + 0.00424426599663863, + 0.00419815281276259, + 0.004152823920265725, + 0.004108260890999693, + 0.0040644458534524475, + 0.004021361472139828, + 0.003978990927900661, + 0.003937317899047166, + 0.003896326543334938, + 0.0038560014807045295, + 0.00381632777676022, + 0.003777290926947119, + 0.003738876841396843, + 0.003701071830402025, + 0.0036638625904974464, + 0.0036272361911116047, + 0.0035911800617682843, + 0.0035556819798037154, + 0.0035207300585848866, + 0.0034863127361977053, + 0.0034524187645865734, + 0.0034190371991247304, + 0.003386157388595379, + 0.0033537689655633862, + 0.003321861837122464, + 0.0032904261759985065, + 0.0032594524119948787, + 0.003228931223764775, + 0.003198853530894441, + 0.0031692104862837134, + 0.00313999346881344, + 0.003111194076286461, + 0.003082804118626381, + 0.0030548156113294755, + 0.0030272207691564024, + 0.003000012000047958, + 0.002973181899268651, + 0.002946723243753002, + 0.002920628986658569, + 0.0028948922521103704, + 0.0028695063301309442, + 0.002844464671748703, + 0.002819760884277045, + 0.0027953887267564426, + 0.0027713421055548526, + 0.0027476150701191138, + 0.002724201808870008, + 0.002701096645237877, + 0.0026782940338323513, + 0.0026557885567382034, + 0.002633574919939319, + 0.002611647949856355, + 0.002590002590002527, + 0.002568633897747752, + 0.0025475370411887077, + 0.0025267072961199233, + 0.0025061400431056757, + 0.0024858307646413724, + 0.002465775042411522, + 0.0024459685546283083, + 0.002426407073461867, + 0.0024070864625458377, + 0.00238800267456285, + 0.0023691517489079494, + 0.0023505298094190774, + 0.0023321330621839387, + 0.0023139577934099265, + 0.002296000367359996, + 0.002278257224353597, + 0.0022607248788251155, + 0.002243399917442934, + 0.0022262789972840036, + 0.0022093588440634804, + 0.0021926362504165464, + 0.0021761080742312977, + 0.0021597712370304833, + 0.002143622722400984, + 0.0021276595744681437, + 0.002111878896416508, + 0.002096277849051198, + 0.0020808536494012486, + 0.002065603569362917, + 0.00205052493438318, + 0.0020356151221776475, + 0.002020871561486892, + 0.0020062917308680817, + 0.0019918731575172544, + 0.0019776134161293424, + 0.001963510127785284, + 0.0019495609588719987, + 0.0019357636200327821, + 0.001922115865144347, + 0.0019086154903233954, + 0.001895260332959392, + 0.0018820482707739838, + 0.001868977220905732, + 0.0018560451390177146, + 0.0018432500184326628, + 0.0018305898892858607, + 0.0018180628177064673, + 0.0018056669050148244, + 0.0017934002869439691, + 0.0017812611328820172, + 0.001769247645131422, + 0.001757358058189551, + 0.0017455906380483555, + 0.0017339436815093645, + 0.0017224155155188825, + 0.0017110044965198412, + 0.0016997090098174183, + 0.0016885274689648622, + 0.0016774583151608624, + 0.0016665000166649069, + 0.0016556510682261827, + 0.0016449099905253561, + 0.001634275329633228, + 0.0016237456564802688, + 0.0016133195663396993, + 0.001602995678323671, + 0.0015927726348918814, + 0.001582649101371958, + 0.0015726237654902775, + 0.0015626953369172192, + 0.0015528625468188562, + 0.0015431241474239688, + 0.0015334789115979408, + 0.0015239256324290906, + 0.0015144631228229954, + 0.001505090215107474, + 0.0014958057606471176, + 0.0014866086294658132, + 0.0014774977098785946, + 0.0014684719081323738, + 0.0014595301480546663, + 0.0014506713707105323, + 0.0014418945340661793, + 0.0014331986126636664, + 0.00142458259729894, + 0.001416045494709639, + 0.001407586327269561, + 0.0013992041326893467, + 0.0013908979637253793, + 0.0013826668878933468, + 0.001374509987189576, + 0.001366426357817918, + 0.0013584151099230724, + 0.0013504753673292402, + 0.001342606267286106, + 0.0013348069602172608, + 0.0013270766094783948, + 0.0013194143911166023, + 0.0013118194936376781, + 0.001304291117777412, + 0.0012968284762784332, + 0.0012894307936703875, + 0.0012820973060572172, + 0.0012748272609059974, + 0.0012676199168442093, + 0.0012604745434561249, + 0.0012533904210889624, + 0.0012463668406594852, + 0.0012394031034654862, + 0.0012324985210017125, + 0.0012256524147804537, + 0.0012188641161530178, + 0.0012121329661376468, + 0.0012054583152516507, + 0.0011988395233413218, + 0.0011922759594242827, + 0.0011857670015273936, + 0.0011793120365304333, + 0.0011729104600155527, + 0.0011665616761158404, + 0.0011602650973694395, + 0.0011540201445756626, + 0.0011478262466539935, + 0.0011416828405068635, + 0.0011355893708835385, + 0.0011295452902480019, + 0.0011235500586492808, + 0.0011176031435939926, + 0.0011117040199217776, + 0.0011058521696820645, + 0.0011000470820150543, + 0.001094288253034481, + 0.0010885751857110382, + 0.0010829073897600239, + 0.0010772843815309852, + 0.0010717056838982497, + 0.0010661708261543446, + 0.001060679343906079, + 0.0010552307789712945, + 0.0010498246792784993, + 0.001044460598768282, + 0.0010391380972964992, + 0.0010338567405392407, + 0.0010286160998991267, + 0.0010234157524153797, + 0.001018255280671898, + 0.0010131342727113246, + 0.0010080523219477833 + ] +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/curve_calc/curve_calc.py b/GenshinUID/genshinuid_enka/curve_calc/curve_calc.py new file mode 100644 index 00000000..26e0e58e --- /dev/null +++ b/GenshinUID/genshinuid_enka/curve_calc/curve_calc.py @@ -0,0 +1,219 @@ +import json +from pathlib import Path +from typing import List, Tuple + +from PIL import Image, ImageDraw + +from ...utils.fonts.genshin_fonts import gs_font_22 + +DATA_PATH = Path(__file__).parent +TEXT_PATH = DATA_PATH / 'texture2D' + +WEIGHT_MAP = { + '暴击率': 1, + '治疗加成': 1.15, + '百分比攻击力': 1.5, + '百分比血量': 1.5, + '元素伤害加成': 1.5, + '元素充能效率': 1.67, + '百分比防御力': 1.875, + '物理伤害加成': 1.875, + '暴击伤害': 2, + '元素精通': 6, +} + +COLOR_MAP = { + '攻击': '#f19b60', + '精通': '#4dbe6b', + '暴击': '#5dbbee', + '物伤': '#ffffff', + '伤': '#a1252a', + '生命': '#67c750', + '防御': '#9999de', + '治疗': '#f9deb3', + '充能': '#ff5858', +} + +# 引入曲线Map +with open(DATA_PATH / 'char_curve.json', 'r', encoding='UTF-8') as f: + CHAR_CURVE = json.load(f) + +# 引入曲线Map +with open(DATA_PATH / 'curve.json', 'r', encoding='UTF-8') as f: + CURVE = json.load(f) + + +async def get_weight_temp(prop: dict, attr: str) -> List[float]: + weight = [] + if '攻击' in attr: + weight.append( + (prop['atk_green'] / prop['baseAtk']) * 100 / WEIGHT_MAP['百分比攻击力'] + ) + elif '生命' in attr: + weight.append( + (prop['hp_green'] / prop['baseHp']) * 100 / WEIGHT_MAP['百分比血量'] + ) + elif '防御' in attr: + weight.append( + (prop['def_green'] / prop['baseDef']) * 100 / WEIGHT_MAP['百分比防御力'] + ) + elif '精通' in attr: + weight.append(prop['elementalMastery'] / WEIGHT_MAP['元素精通']) + elif '充能' in attr: + weight.append(prop['energyRecharge'] * 100 / WEIGHT_MAP['元素充能效率']) + elif '物伤' in attr: + weight.append(prop['physicalDmgBonus'] * 100 / WEIGHT_MAP['物理伤害加成']) + elif '伤' in attr: + weight.append(prop['dmgBonus'] * 100 / WEIGHT_MAP['元素伤害加成']) + elif '治疗' in attr: + weight.append(prop['healBonus'] * 100 / WEIGHT_MAP['治疗加成']) + elif '暴击' in attr: + weight.append(prop['critRate'] * 100 / WEIGHT_MAP['暴击率']) + weight.append(prop['critDmg'] * 100 / WEIGHT_MAP['暴击伤害']) + return weight + + +async def get_weight(prop: dict, attr: str) -> List[float]: + weight = [] + if '/' in attr: + attr_list = attr.split('/') + else: + attr_list = [attr] + for i in attr_list: + weight.extend(await get_weight_temp(prop, i)) + + return weight + + +BLUE = "#0000ff" +lu_point = (23, 45) +rd_point = (927, 495) +X_D = rd_point[0] - lu_point[0] +Y_D = rd_point[1] - lu_point[1] +frame_img = Image.open(TEXT_PATH / 'frame.png') +point_img = Image.open(TEXT_PATH / 'point.png') + + +async def draw_char_curve_data( + char_name: str, raw_data: dict +) -> Tuple[Image.Image, int]: + # 如果曲线列表里不存在该角色,则返回空白图片 + if char_name not in CHAR_CURVE or CHAR_CURVE[char_name] == {}: + return Image.new('RGBA', (950, 1)), 0 + + # 获得面板属性 + if 'avatarFightProp' in raw_data: + fight_prop = raw_data['avatarFightProp'] + else: + fight_prop = raw_data + fight_prop['atk_green'] = fight_prop['atk'] - fight_prop['baseAtk'] + fight_prop['def_green'] = fight_prop['def'] - fight_prop['baseDef'] + fight_prop['hp_green'] = fight_prop['hp'] - fight_prop['baseHp'] + + img = Image.open(TEXT_PATH / 'curve_bg.png') + img_draw = ImageDraw.Draw(img) + + # 初始化X_MAX和Y_MAX值 + X_MAX = 0 + Y_MAX = 0 + wight_point_dict: dict = {} + line_points_dict: dict = {} + wight_temp_dict: dict = {} + # 遍历曲线列表,根据函数获得权重 + for col in CHAR_CURVE[char_name]: + wight_temp = await get_weight(fight_prop, CHAR_CURVE[char_name][col]) + wight_temp_dict[CHAR_CURVE[char_name][col]] = wight_temp + # 对单个属性的权重列表进行遍历 + for i in wight_temp: + # 确定X_MAX值 + if i >= X_MAX: + X_MAX = i + # 确定Y_MAX值 + for j in CURVE[col]: + if j >= Y_MAX: + Y_MAX = j + + # 增加Y_MAX和X_MAX的值 + X_MAX = X_MAX + 15 + Y_MAX = Y_MAX + 0.002 + + # 遍历曲线列表,COL为列名,这一步拿到所有曲线的点,和所有权重的点 + for col_index, col in enumerate(CHAR_CURVE[char_name]): + line_points = [] + # 确定颜色 + for m in COLOR_MAP: + if m in CHAR_CURVE[char_name][col]: + color = COLOR_MAP[m] + break + else: + color = '#ffffff' + + for index, i in enumerate(CURVE[col]): + if index >= X_MAX: + break + x, y = (X_D / X_MAX) * index + lu_point[0], ( + Y_D - (Y_D / Y_MAX) * i + ) + lu_point[1] + line_points.append((x, y)) + line_points_dict[color] = line_points + + for wight in wight_temp_dict[CHAR_CURVE[char_name][col]]: + w_x = (wight / X_MAX) * X_D + lu_point[0] + w_y = line_points[int(wight)][1] + if CHAR_CURVE[char_name][col] not in wight_point_dict: + wight_point_dict[CHAR_CURVE[char_name][col]] = { + 'color': color, + 'point': [(w_x, w_y)], + } + else: + wight_point_dict[CHAR_CURVE[char_name][col]]['point'].append( + (w_x, w_y) + ) + + # 绘制右上角方块和文字 + img_draw.rectangle( + ((710, 65 + col_index * 30), (750, 85 + col_index * 30)), + fill=color, + ) + img_draw.text( + (762, 75 + col_index * 30), + f'{CHAR_CURVE[char_name][col]}', + color, + gs_font_22, + 'lm', + ) + + # 根据素材画曲线 + for c in line_points_dict: + img_draw.line(line_points_dict[c], width=6, fill=c, joint='curve') + + for attr in wight_point_dict: + attr_str = attr.replace('收益', '') + if attr_str == '暴击': + attr_list = ['暴击', '爆伤'] + else: + attr_list = attr_str.split('/') + for index, point in enumerate(wight_point_dict[attr]['point']): + img_draw.text( + (point[0], 512), + f'{int((point[0] - lu_point[0])/X_D * X_MAX)}', + wight_point_dict[attr]['color'], + gs_font_22, + 'mm', + ) + img_draw.text( + (point[0], 535), + attr_list[index], + wight_point_dict[attr]['color'], + gs_font_22, + 'mm', + ) + img.paste( + point_img, (int(point[0] - 15), int(point[1] - 15)), point_img + ) + img_draw.line( + [point, (point[0], rd_point[1])], width=1, fill=(255, 255, 255) + ) + + img.paste(frame_img, (0, 0), frame_img) + return img, 550 diff --git a/GenshinUID/genshinuid_enka/curve_calc/texture2D/curve_bg.png b/GenshinUID/genshinuid_enka/curve_calc/texture2D/curve_bg.png new file mode 100644 index 00000000..7254dacd Binary files /dev/null and b/GenshinUID/genshinuid_enka/curve_calc/texture2D/curve_bg.png differ diff --git a/GenshinUID/genshinuid_enka/curve_calc/texture2D/frame.png b/GenshinUID/genshinuid_enka/curve_calc/texture2D/frame.png new file mode 100644 index 00000000..3e8de0b8 Binary files /dev/null and b/GenshinUID/genshinuid_enka/curve_calc/texture2D/frame.png differ diff --git a/GenshinUID/genshinuid_enka/curve_calc/texture2D/point.png b/GenshinUID/genshinuid_enka/curve_calc/texture2D/point.png new file mode 100644 index 00000000..ea396207 Binary files /dev/null and b/GenshinUID/genshinuid_enka/curve_calc/texture2D/point.png differ diff --git a/GenshinUID/genshinuid_enka/dmg_calc/base_value.py b/GenshinUID/genshinuid_enka/dmg_calc/base_value.py new file mode 100644 index 00000000..fd4b19c5 --- /dev/null +++ b/GenshinUID/genshinuid_enka/dmg_calc/base_value.py @@ -0,0 +1,92 @@ +base_value_list = [ + 8.6, + 9.3, + 10.0, + 10.6, + 11.3, + 12.3, + 13.3, + 14.4, + 15.7, + 17.1, + 18.6, + 20.3, + 22.2, + 24.3, + 26.9, + 29.5, + 32.2, + 34.9, + 37.6, + 40.3, + 43.1, + 45.9, + 48.6, + 51.4, + 54.2, + 56.6, + 59.1, + 61.5, + 64.9, + 68.2, + 71.3, + 74.5, + 77.7, + 80.9, + 84.6, + 88.3, + 92, + 95.9, + 99.8, + 103.7, + 107.7, + 112.1, + 116.8, + 121.1, + 128.0, + 134.3, + 140.8, + 147.5, + 154.5, + 161.8, + 168.4, + 175.3, + 182.2, + 189.3, + 199.3, + 208.2, + 217.2, + 226.5, + 236.3, + 246.4, + 256.8, + 269.6, + 282.8, + 296.3, + 312.2, + 325.7, + 339.8, + 353.9, + 368.3, + 382.8, + 397.4, + 412.3, + 425.6, + 438.9, + 457.1, + 473.4, + 489.7, + 505.6, + 522.4, + 538.7, + 555.0, + 571.5, + 588.2, + 605.1, + 626.9, + 644.5, + 622.7, + 681.7, + 702.6, + 723.4, +] diff --git a/GenshinUID/genshinuid_enka/dmg_calc/dmg_calc.py b/GenshinUID/genshinuid_enka/dmg_calc/dmg_calc.py new file mode 100644 index 00000000..2e23c5a5 --- /dev/null +++ b/GenshinUID/genshinuid_enka/dmg_calc/dmg_calc.py @@ -0,0 +1,112 @@ +from typing import Dict, Tuple + +from PIL import Image, ImageDraw + +from ..mono.Enemy import Enemy +from ..mono.Fight import Fight +from ..etc.MAP_PATH import dmgMap +from ..mono.Character import Character +from ..etc.etc import TEXT_PATH, get_char_std +from ...utils.fonts.genshin_fonts import gs_font_28 + +dmgBar_1 = Image.open(TEXT_PATH / 'dmgBar_1.png') +dmgBar_2 = Image.open(TEXT_PATH / 'dmgBar_2.png') + +text_color = (255, 255, 255) +title_color = (255, 255, 100) + + +async def get_char_dmg_percent(char: Character) -> Dict: + enemy = Enemy(char.char_level, char.char_level) + fight = Fight({char.char_name: char}, enemy) + dmg_data = await fight.get_dmg_dict(char.char_name) + without_talent = await fight.get_dmg_dict(char.char_name, True) + percent = 0 + char.seq_str = '无匹配' + if char.char_name in dmgMap: + std = await get_char_std(char.card_prop, char.char_name) + if std['skill']: + value = 0 + std_value = 0 + if std['skill'] == 'atk': + value = char.fight_prop['atk'] + std_value = std['atk'] + elif std['skill'] == 'def': + value = char.fight_prop['def'] + std_value = std['other']['防御'] + elif std['skill'] in without_talent: + if without_talent[std['skill']]['crit'] == 0: + value = without_talent[std['skill']]['normal'] + elif char.char_name == '妮露': + value = without_talent[std['skill']]['normal'] + else: + value = without_talent[std['skill']]['avg'] + std_value = std['value'] + if char.char_name == '夜兰': + std_value *= 3 + elif char.char_name == '刻晴': + std_value *= 2 + if std_value != 0: + percent = (value / std_value) * 100 + char.seq_str = ( + '|'.join([i[:2] for i in std['seq'].split('|')]) + + std['seq'][-1] + ) + char.percent = '{:.2f}'.format(percent) + char.dmg_data = dmg_data + return dmg_data + + +async def draw_dmg_img(char: Character) -> Tuple[Image.Image, int]: + # 获取值 + dmg_data = await get_char_dmg_percent(char) + if dmg_data == {}: + return Image.new('RGBA', (950, 1)), 0 + # 计算伤害计算部分图片长宽值 + w = 950 + h = 40 * (len(dmg_data) + 1) + result_img = Image.new('RGBA', (w, h), (0, 0, 0, 0)) + # 反复贴上不同颜色的长条 + for i in range(0, len(dmg_data) + 1): + pic = dmgBar_1 if i % 2 == 0 else dmgBar_2 + result_img.paste(pic, (0, i * 40)) + + result_draw = ImageDraw.Draw(result_img) + + text_size = gs_font_28 + result_draw.text((45, 22), '角色动作', title_color, text_size, anchor='lm') + result_draw.text((450, 22), '暴击值', title_color, text_size, anchor='lm') + result_draw.text((615, 22), '期望值', title_color, text_size, anchor='lm') + result_draw.text((780, 22), '普通值', title_color, text_size, anchor='lm') + + for index, name in enumerate(dmg_data): + result_draw.text( + (45, 22 + (index + 1) * 40), + name, + text_color, + text_size, + anchor='lm', + ) + result_draw.text( + (450, 22 + (index + 1) * 40), + str(round(dmg_data[name]['crit'])), + text_color, + text_size, + anchor='lm', + ) + result_draw.text( + (615, 22 + (index + 1) * 40), + str(round(dmg_data[name]['avg'])), + text_color, + text_size, + anchor='lm', + ) + result_draw.text( + (780, 22 + (index + 1) * 40), + str(round(dmg_data[name]['normal'])), + text_color, + text_size, + anchor='lm', + ) + + return result_img, len(dmg_data) + 2 diff --git a/GenshinUID/genshinuid_enka/draw_char_card.py b/GenshinUID/genshinuid_enka/draw_char_card.py new file mode 100644 index 00000000..eb968f5e --- /dev/null +++ b/GenshinUID/genshinuid_enka/draw_char_card.py @@ -0,0 +1,77 @@ +from typing import Tuple, Union, Optional + +from PIL import Image, ImageDraw + +from .mono.Character import Character +from .dmg_calc.dmg_calc import draw_dmg_img +from ..utils.image.convert import convert_img +from .draw_char_curve import draw_char_curve_card +from .etc.etc import TEXT_PATH, get_all_artifacts_value +from ..utils.fonts.genshin_fonts import gs_font_18, gs_font_50 +from .draw_normal import ( + get_bg_card, + get_char_img, + get_artifacts_card, + get_char_card_base, +) + + +async def draw_char_img( + char: Character, + charUrl: Optional[str] = None, + is_curve: bool = False, +) -> Union[str, Tuple[bytes, Optional[bytes]]]: + + if is_curve: + res = await draw_char_curve_card(char, charUrl) + else: + res = await draw_char_card(char, charUrl) + return res, char.char_bytes + + +async def draw_char_card(char: Character, char_url: Optional[str]) -> bytes: + dmg_img, dmg_len = await draw_dmg_img(char) + char_img = await get_char_img(char, char_url) + ex_len = dmg_len * 40 + 765 + img = await get_bg_card(char.char_element, ex_len, char_img) + img.paste(char_img, (0, 0), char_img) + char_info_1 = await get_char_card_base(char) + char_info_2 = Image.open(TEXT_PATH / 'char_info_2.png') + img.paste(char_info_1, (0, 0), char_info_1) + img.paste(char_info_2, (0, 1085), char_info_2) + img.paste(dmg_img, (0, 1850), dmg_img) + await get_artifacts_card(char, img) + img_text = ImageDraw.Draw(img) + artifacts_all_score = await get_all_artifacts_value( + char.card_prop, char.baseHp, char.baseAtk, char.baseDef, char.char_name + ) + if char.percent == '0.00': + percent_str = '暂无匹配' + else: + percent_str = f'{char.percent}%' + # 角色评分 + img_text.text( + (768, 1564), + f'{round(artifacts_all_score, 1)}', + (255, 255, 255), + gs_font_50, + anchor='mm', + ) + img_text.text( + (768, 1726), + percent_str, + (255, 255, 255), + gs_font_50, + anchor='mm', + ) + img_text.text( + (768, 1673), + f'{char.seq_str}', + (255, 255, 255), + gs_font_18, + anchor='mm', + ) + res = await convert_img(img) + if isinstance(res, str): + res = b'' + return res diff --git a/GenshinUID/genshinuid_enka/draw_char_curve.py b/GenshinUID/genshinuid_enka/draw_char_curve.py new file mode 100644 index 00000000..9b4ba36e --- /dev/null +++ b/GenshinUID/genshinuid_enka/draw_char_curve.py @@ -0,0 +1,80 @@ +from io import BytesIO +from typing import Optional + +from PIL import Image, ImageDraw + +from .etc.etc import TEXT_PATH +from .mono.Character import Character +from .curve_calc.curve_calc import draw_char_curve_data +from ..utils.fonts.genshin_fonts import genshin_font_origin +from .draw_normal import ( + get_bg_card, + get_char_img, + get_artifacts_card, + get_char_card_base, +) + + +async def get_adv_card() -> Image.Image: + adv_img = Image.open(TEXT_PATH / 'adv.png') + return adv_img + + +async def draw_char_curve_card( + char: Character, char_url: Optional[str] +) -> bytes: + await get_artifacts_card(char, Image.new('RGB', (1, 1))) + curve_img, curve_len = await draw_char_curve_data( + char.char_name, char.card_prop + ) + curve2_img, curve2_len = await draw_char_curve_data( + char.char_name, char.fight_prop + ) + char_img = await get_char_img(char, char_url) + adv_img = await get_adv_card() + img = await get_bg_card( + char.char_element, curve_len + curve2_len + 460, char_img + ) + img.paste(char_img, (0, 0), char_img) + char_info_1 = await get_char_card_base(char) + img.paste(char_info_1, (0, 0), char_info_1) + img.paste(curve_img, (0, 1085), curve_img) + img.paste(curve2_img, (0, 1085 + curve_len), curve2_img) + img.paste(adv_img, (0, 1085 + curve_len + curve2_len), adv_img) + img_text = ImageDraw.Draw(img) + # 顶栏 + img_text.text( + (475, 2240), + '曲线(上)为正常面板,曲线(下)为触发各种战斗buff后面板', + (255, 255, 255), + genshin_font_origin(32), + anchor='mm', + ) + # 角色评分 + img_text.text( + (785, 2380), + f'{round(char.artifacts_all_score, 1)}', + (255, 255, 255), + genshin_font_origin(50), + anchor='mm', + ) + img_text.text( + (785, 2542), + f'{str(char.percent)+"%"}', + (255, 255, 255), + genshin_font_origin(50), + anchor='mm', + ) + img_text.text( + (785, 2490), + f'{char.seq_str}', + (255, 255, 255), + genshin_font_origin(18), + anchor='mm', + ) + + img = img.convert('RGB') + result_buffer = BytesIO() + img.save(result_buffer, format='JPEG', subsampling=0, quality=90) + res = result_buffer.getvalue() + return res diff --git a/GenshinUID/genshinuid_enka/draw_char_rank.py b/GenshinUID/genshinuid_enka/draw_char_rank.py new file mode 100644 index 00000000..8da631e5 --- /dev/null +++ b/GenshinUID/genshinuid_enka/draw_char_rank.py @@ -0,0 +1,238 @@ +import json +import asyncio +from typing import Tuple, Union, Literal + +from PIL import Image, ImageDraw + +from .mono.Character import Character +from ..utils.image.convert import convert_img +from .dmg_calc.dmg_calc import get_char_dmg_percent +from .etc.etc import TEXT_PATH, get_all_artifacts_value +from ..utils.map.name_covert import avatar_id_to_char_star +from ..utils.fonts.genshin_fonts import genshin_font_origin +from ..utils.resource.RESOURCE_PATH import CHAR_PATH, PLAYER_PATH, WEAPON_PATH +from ..utils.image.image_tools import ( + get_color_bg, + get_qq_avatar, + get_fetter_pic, + get_talent_pic, + draw_pic_with_ring, + get_weapon_affix_pic, +) + +black_color = (24, 24, 24) +white_color = (245, 245, 245) + +level_color = { + 5: (230, 0, 0), + 4: (203, 131, 21), + 3: (97, 17, 156), + 2: (17, 105, 156), + 1: (94, 96, 95), +} + +level_map = { + 'skill': { + 10: 5, + 7: 4, + 5: 3, + 3: 2, + 0: 1, + }, + 'equip': {33: 5, 27: 4, 21: 3, 15: 2, 0: 1}, + 'percent': {99: 5, 90: 4, 85: 3, 70: 2, 0: 1}, +} +star_color_map = { + '1': (94, 96, 95), + '2': (17, 105, 156), + '3': (91, 141, 192), + '4': (143, 123, 174), + '5': (205, 135, 76), +} + +gs_font_24 = genshin_font_origin(24) +gs_font_26 = genshin_font_origin(26) +gs_font_28 = genshin_font_origin(28) +gs_font_30 = genshin_font_origin(30) +gs_font_36 = genshin_font_origin(36) + +char_rank_title = Image.open(TEXT_PATH / 'char_rank_title.png') +skill_mask = Image.open(TEXT_PATH / 'skill_mask.png') +percent_mask = Image.open(TEXT_PATH / 'percent_mask.png') +value_mask = Image.open(TEXT_PATH / 'value_mask.png') + + +async def draw_cahrcard_list( + uid: str, qid: Union[str, int] +) -> Union[str, bytes]: + uid_fold = PLAYER_PATH / str(uid) + char_file_list = uid_fold.glob('*') + char_list = [] + for i in char_file_list: + file_name = i.name + if '\u4e00' <= file_name[0] <= '\u9fff': + char_list.append(file_name.split('.')[0]) + if not char_list: + return '你还没有已缓存的角色!\n请先使用【强制刷新】进行刷新!' + + char_done_list = [] + for char_name in char_list: + temp = {} + with open(uid_fold / f'{char_name}.json', 'r', encoding='UTF-8') as f: + raw_data = json.load(f) + + skill_list = raw_data['avatarSkill'] + + temp['char_name'] = char_name + temp['fetter'] = raw_data['avatarFetter'] + temp['id'] = raw_data['avatarId'] + char = Character(raw_data) + await char.new() + await char.get_fight_prop() + await get_char_dmg_percent(char) + temp['percent'] = char.percent + temp['percent'] = float(temp['percent']) + temp['value'] = await get_all_artifacts_value( + raw_data, + char.baseHp, + char.baseAtk, + char.baseDef, + char_name, + ) + temp['value'] = float('{:.2f}'.format(temp['value'])) + temp['avatarElement'] = raw_data['avatarElement'] + temp['a_skill_level'] = skill_list[0]['skillLevel'] + temp['e_skill_level'] = skill_list[1]['skillLevel'] + temp['q_skill_level'] = skill_list[-1]['skillLevel'] + temp['talent_num'] = len(raw_data['talentList']) + # 武器 + temp['weapon_name'] = raw_data['weaponInfo']['weaponName'] + temp['weapon_level'] = raw_data['weaponInfo']['weaponLevel'] + temp['weapon_affix'] = raw_data['weaponInfo']['weaponAffix'] + temp['weapon_star'] = raw_data['weaponInfo']['weaponStar'] + char_done_list.append(temp) + + # 排序 + char_done_list.sort(key=lambda x: (-x['percent'])) + qid = str(qid) + if qid.startswith('http'): + char_pic = await get_qq_avatar(avatar_url=qid) + else: + char_pic = await get_qq_avatar(qid=qid) + char_pic = await draw_pic_with_ring(char_pic, 320) + + img = await get_color_bg(950, 540 + 100 * len(char_done_list)) + img.paste(char_rank_title, (0, 0), char_rank_title) + img.paste(char_pic, (318, 83), char_pic) + img_draw = ImageDraw.Draw(img) + img_draw.text((475, 464), f'UID {uid}', black_color, gs_font_36, 'mm') + + tasks = [] + for index, char in enumerate(char_done_list): + tasks.append(draw_single_rank(img, char, index)) + await asyncio.wait(tasks) + + res = await convert_img(img) + return res + + +async def get_color( + type: Literal['skill', 'equip', 'percent'], value: int +) -> Tuple[int, int, int]: + for v in level_map[type]: + if value >= v: + level = level_map[type][v] + break + else: + level = 1 + return level_color[level] + + +async def draw_single_rank(img: Image.Image, char: dict, index: int): + char_id = char['id'] + char_rank = Image.open(TEXT_PATH / 'char_rank.png') + char_pic = Image.open(CHAR_PATH / f'{char_id}.png') + char_star = await avatar_id_to_char_star(char_id) + weapon_star = str(char['weapon_star']) + char_pic = await draw_pic_with_ring( + char_pic, 82, star_color_map[char_star] + ) + weapon_pic = Image.open(WEAPON_PATH / f'{char["weapon_name"]}.png') + weapon_pic = await draw_pic_with_ring( + weapon_pic, 82, star_color_map[weapon_star] + ) + char_rank.paste(char_pic, (0, 0), char_pic) + char_rank.paste(weapon_pic, (626, 0), weapon_pic) + + char_rank_draw = ImageDraw.Draw(char_rank) + # 角色名称 + char_rank_draw.text( + (85, 24), char['char_name'], black_color, gs_font_28, 'lm' + ) + # AEQ等级 + for s_index, s in enumerate(['a', 'e', 'q']): + s_offset = s_index * 38 + skill_color_img = Image.new( + 'RGBA', + (35, 28), + await get_color('skill', char[f'{s}_skill_level']), + ) + char_rank.paste(skill_color_img, (86 + s_offset, 44), skill_mask) + char_rank_draw.text( + (103 + s_offset, 58), + str(char[f'{s}_skill_level']), + white_color, + gs_font_26, + 'mm', + ) + + # 圣遗物词条数 + value_color_img = Image.new( + 'RGBA', + (77, 33), + await get_color('equip', char['value']), + ) + char_rank.paste(value_color_img, (233, 23), value_mask) + char_rank_draw.text( + (271, 40), + f'{str(char["value"])[:4]}条', + white_color, + gs_font_24, + 'mm', + ) + + # 毕业度 + percent_color_img = Image.new( + 'RGBA', + (99, 33), + await get_color('percent', char['percent']), + ) + char_rank.paste(percent_color_img, (329, 23), percent_mask) + char_rank_draw.text( + (379, 40), + f'{char["percent"]}%', + white_color, + gs_font_24, + 'mm', + ) + + # 好感和天赋 + fetter_pic = await get_fetter_pic(char['fetter']) + fetter_pic = fetter_pic.resize((77, 33)) + talent_pic = await get_talent_pic(char['talent_num']) + talent_pic = talent_pic.resize((66, 33)) + + char_rank.paste(fetter_pic, (444, 23), fetter_pic) + char_rank.paste(talent_pic, (536, 23), talent_pic) + + # 武器 + weapon_affix_pic = await get_weapon_affix_pic(char['weapon_affix']) + char_rank.paste(weapon_affix_pic, (714, 42), weapon_affix_pic) + char_rank_draw.text( + (788, 56), f'Lv.{char["weapon_level"]}', black_color, gs_font_26, 'lm' + ) + char_rank_draw.text( + (712, 22), str(char['weapon_name']), black_color, gs_font_26, 'lm' + ) + + img.paste(char_rank, (30, 540 + 100 * index), char_rank) diff --git a/GenshinUID/genshinuid_enka/draw_group_dmg.py b/GenshinUID/genshinuid_enka/draw_group_dmg.py new file mode 100644 index 00000000..9d4d4490 --- /dev/null +++ b/GenshinUID/genshinuid_enka/draw_group_dmg.py @@ -0,0 +1,167 @@ +from typing import Dict, List, Union + +from PIL import Image, ImageDraw + +from .mono.Enemy import Enemy +from .mono.Fight import Fight +from .etc.etc import TEXT_PATH +from .mono.Character import Character +from .mono.SEQ import ALL_SEQ, SEQ_ARG +from ..utils.image.convert import convert_img +from ..utils.resource.RESOURCE_PATH import CHAR_PATH +from ..utils.map.name_covert import name_to_avatar_id +from ..utils.image.image_tools import get_color_bg, draw_pic_with_ring +from ..utils.fonts.genshin_fonts import ( + gs_font_26, + gs_font_32, + gs_font_44, + gs_font_50, +) + +TD_PATH = TEXT_PATH / 'team_dmg' + +team_title = Image.open(TD_PATH / 'team_title.png') +action_title = Image.open(TD_PATH / 'action_title.png') + + +async def get_group_dmg_data( + char_list: List[Character], +) -> Union[Dict[float, Dict], str]: + # 获取值 + enemy = Enemy(90, 90) + char_dict: Dict[str, Character] = {} + char_arg = [char.char_name for char in char_list] + for arg in SEQ_ARG: + if sorted(char_arg) == sorted(SEQ_ARG[arg]): + seq = ALL_SEQ[arg] + break + else: + return '暂时不支持该配队...' + + for char in char_list: + char_dict[char.char_name] = char + fight = Fight(char_dict, enemy) + fight.SEQ = seq + + dmg_data: Dict[float, Dict] = await fight.update_dmg() + return dmg_data + + +def _f(value: float, is_float: bool = True) -> str: + if is_float: + return '{:.1f}'.format(value) + else: + return str(int(value)) + + +def _p(value: float) -> str: + return '{:.2f}%'.format(value * 100) + + +async def draw_group_dmg_img( + uid: str, char_list: List[Character] +) -> Union[bytes, str]: + # 获取数据 + dmg_data = await get_group_dmg_data(char_list) + if isinstance(dmg_data, str): + return dmg_data + + # 计算高度 + bar_offset = 65 + h = 900 + 120 + len(dmg_data) * bar_offset + 50 + + # 开始绘图 + img = await get_color_bg(950, h, 'teamdmg_bg') + img.paste(team_title, (0, 0), team_title) + + # 角色基本情况 + for index, char in enumerate(char_list): + char_bg = Image.open(TD_PATH / 'char_bg.png') + char_pic = Image.open(CHAR_PATH / f'{char.char_id}.png') + char_img = await draw_pic_with_ring(char_pic, 100) + char_bg.paste(char_img, (31, 27), char_img) + + hp = _f(char.fight_prop['hp'], False) + atk = _f(char.fight_prop['atk'], False) + critr = _p(char.fight_prop['critRate']) + critd = _p(char.fight_prop['critDmg']) + lv = f'Lv.{char.char_level}' + char_draw = ImageDraw.Draw(char_bg) + char_draw.text((210, 69), hp, 'white', gs_font_26, 'lm') + char_draw.text((344, 69), atk, 'white', gs_font_26, 'lm') + char_draw.text((210, 130), critr, 'white', gs_font_26, 'lm') + char_draw.text((344, 130), critd, 'white', gs_font_26, 'lm') + char_draw.text((85, 154), lv, 'white', gs_font_26, 'mm') + + # 将绘制好的角色卡贴到队伍伤害卡上 + img.paste( + char_bg, + (16 + 443 * (index % 2), 540 + 170 * (index // 2)), + char_bg, + ) + + img.paste(action_title, (0, 895), action_title) + + # 初始化一些数值 + all_avgdmg = 0 + all_critdmg = 0 + dmg_info = {} + + # 粘贴动作序列 + for index, time in enumerate(dmg_data): + _data = dmg_data[time] + char_id = await name_to_avatar_id(_data['char']) + char_pic = Image.open(CHAR_PATH / f'{char_id}.png') + char_img = await draw_pic_with_ring(char_pic, 50) + + bar = Image.open(TD_PATH / 'dmg_bar.png') + + bar.paste(char_img, (100, 10), char_img) + + bar_draw = ImageDraw.Draw(bar) + + # Action + bar_draw.text((190, 35), _data['action'], 'white', gs_font_32, 'lm') + # 具体伤害 + _dmg = _data['avg_dmg'] if _data['avg_dmg'] else _data['normal_dmg'] + bar_draw.text((600, 35), _f(_dmg), 'white', gs_font_32, 'lm') + + img.paste(bar, (0, 1030 + index * bar_offset), bar) + + # 总平均伤害加值 + all_avgdmg += _data['avg_dmg'] + all_critdmg += _data['crit_dmg'] + + # 计算一些数据 + if _data['char'] not in dmg_info: + dmg_info[_data['char']] = _data['avg_dmg'] + else: + dmg_info[_data['char']] += _data['avg_dmg'] + + ac_len = len(dmg_data) + all_time = list(dmg_data.keys())[-1] + avg_dps = all_avgdmg / all_time + + char_id = '10000029' + char_pic = Image.open(CHAR_PATH / f'{char_id}.png') + char_img = await draw_pic_with_ring(char_pic, 280) + img.paste(char_img, (60, 78), char_img) + + img_draw = ImageDraw.Draw(img) + # UID + img_draw.text((395, 98), f'UID{uid}', 'white', gs_font_50, 'lm') + + # 标题 + img_draw.text((396, 200), '总期望伤害', 'white', gs_font_26, 'lm') + img_draw.text((656, 200), '总暴击伤害', 'white', gs_font_26, 'lm') + img_draw.text((396, 297), '平均DPS', 'white', gs_font_26, 'lm') + img_draw.text((656, 297), f'{ac_len}个动作', 'white', gs_font_26, 'lm') + + # 数值 + img_draw.text((390, 236), f'{_f(all_avgdmg)}', 'white', gs_font_44, 'lm') + img_draw.text((650, 236), f'{_f(all_critdmg)}', 'white', gs_font_44, 'lm') + img_draw.text((390, 333), f'{_f(avg_dps)}', 'white', gs_font_44, 'lm') + img_draw.text((650, 333), f'{_f(all_time)}秒内', 'white', gs_font_44, 'lm') + + img = await convert_img(img) + return img diff --git a/GenshinUID/genshinuid_enka/draw_normal.py b/GenshinUID/genshinuid_enka/draw_normal.py new file mode 100644 index 00000000..747ddf22 --- /dev/null +++ b/GenshinUID/genshinuid_enka/draw_normal.py @@ -0,0 +1,595 @@ +import math +import random +from io import BytesIO +from typing import Optional + +import aiofiles +from httpx import get +from PIL import Image, ImageDraw, ImageChops + +from .mono.Character import Character +from ..genshinuid_config.gs_config import gsconfig +from .etc.MAP_PATH import COLOR_MAP, avatarName2SkillAdd +from ..utils.fonts.genshin_fonts import genshin_font_origin +from ..utils.image.image_tools import CustomizeImage, get_weapon_affix_pic +from .etc.etc import TEXT_PATH, strLenth, get_star_png, get_artifacts_value +from ..utils.resource.RESOURCE_PATH import ( + REL_PATH, + ICON_PATH, + CU_CHBG_PATH, + GACHA_IMG_PATH, + CHAR_STAND_PATH, +) + +ARTIFACTS_POS = { + '生之花': (18, 1075), + '死之羽': (318, 1075), + '时之沙': (618, 1075), + '空之杯': (18, 1447), + '理之冠': (318, 1447), +} +PIC_API = gsconfig.get_config('random_pic_API').data + + +async def get_char_card_base(char: Character) -> Image.Image: + card_prop = char.card_prop + char_info_1 = Image.open(TEXT_PATH / 'char_info_1.png') + # 命座处理 + lock_img = Image.open(TEXT_PATH / 'icon_lock.png') + # holo_img = Image.open(TEXT_PATH / 'holo.png') + for talent_num in range(0, 6): + if talent_num + 1 <= len(card_prop['talentList']): + talent = card_prop['talentList'][talent_num] + try: + talent_img = Image.open( + ICON_PATH / '{}.png'.format(talent['talentIcon']) + ) + except Exception: + talent_img = Image.open( + ICON_PATH / 'UI_Talent_S_Kazuha_02.png' + ) + talent_img_new = talent_img.resize( + (50, 50), Image.Resampling.LANCZOS + ).convert("RGBA") + for _ in range(2): + char_info_1.paste( + talent_img_new, + (850, 375 + talent_num * 81), + talent_img_new, + ) + else: + char_info_1.paste(lock_img, (850, 375 + talent_num * 81), lock_img) + + # 天赋处理 + skillList = card_prop['avatarSkill'] + a_skill_level = skillList[0]['skillLevel'] + e_skill_level = skillList[1]['skillLevel'] + q_skill_level = skillList[-1]['skillLevel'] + + if char.char_name in avatarName2SkillAdd: + skill_add = avatarName2SkillAdd[char.char_name] + else: + skill_add = ['E', 'Q'] + for skillAdd_index in range(0, 2): + if len(card_prop['talentList']) >= 3 + skillAdd_index * 2: + if skill_add[skillAdd_index] == 'E': + e_skill_level += 3 + elif skill_add[skillAdd_index] == 'Q': + q_skill_level += 3 + + for skill_num, skill in enumerate(skillList[0:2] + [skillList[-1]]): + skill_img = Image.open(ICON_PATH / '{}.png'.format(skill['skillIcon'])) + skill_img_new = skill_img.resize( + (50, 50), Image.Resampling.LANCZOS + ).convert("RGBA") + char_info_1.paste( + skill_img_new, (78, 756 + 101 * skill_num), skill_img_new + ) + + # 武器部分 + char_info_text = ImageDraw.Draw(char_info_1) + weapon_star_img = get_star_png(card_prop['weaponInfo']['weaponStar']) + weaponName = card_prop['weaponInfo']['weaponName'] + + weaponAtk = card_prop['weaponInfo']['weaponStats'][0]['statValue'] + weaponLevel = card_prop['weaponInfo']['weaponLevel'] + weaponAffix = card_prop['weaponInfo']['weaponAffix'] + weaponEffect = card_prop['weaponInfo']['weaponEffect'] + weapon_type = card_prop['weaponInfo']['weaponType'] + + char_info_1.paste(weapon_star_img, (402, 825), weapon_star_img) + char_info_text.text( + (412, 670), + weaponName, + (255, 255, 255), + genshin_font_origin(50), + anchor='lm', + ) + char_info_text.text( + (412, 710), + weapon_type, + (255, 255, 255), + genshin_font_origin(20), + anchor='lm', + ) + char_info_text.text( + (412, 750), + '基础攻击力', + (255, 255, 255), + genshin_font_origin(32), + anchor='lm', + ) + char_info_text.text( + (755, 750), + str(weaponAtk), + (255, 255, 255), + genshin_font_origin(32), + anchor='rm', + ) + if len(card_prop['weaponInfo']['weaponStats']) == 2: + weapon_sub_info = card_prop['weaponInfo']['weaponStats'][1]['statName'] + weapon_sub_value = card_prop['weaponInfo']['weaponStats'][1][ + 'statValue' + ] + char_info_text.text( + (412, 801), + weapon_sub_info, + (255, 255, 255), + genshin_font_origin(32), + anchor='lm', + ) + char_info_text.text( + (755, 801), + str(weapon_sub_value), + (255, 255, 255), + genshin_font_origin(32), + anchor='rm', + ) + else: + char_info_text.text( + (412, 801), + '该武器无副词条', + (255, 255, 255), + genshin_font_origin(32), + anchor='lm', + ) + char_info_text.text( + (460, 893), + f'Lv.{weaponLevel}', + (255, 255, 255), + genshin_font_origin(28), + anchor='mm', + ) + affix_pic = await get_weapon_affix_pic(weaponAffix) + char_info_1.paste(affix_pic, (420 + len(weaponName) * 50, 660), affix_pic) + ''' + char_info_text.text( + (517, 895), + f'精炼{str(weaponAffix)}阶', + (255, 239, 173), + genshin_font_origin(28), + anchor='lm', + ) + ''' + + weaponEffect = strLenth(weaponEffect, 25, 455) + weaponEffect = '\n'.join(weaponEffect.split('\n')[:5]) + char_info_text.text( + (412, 925), weaponEffect, (255, 255, 255), genshin_font_origin(25) + ) + + fight_prop = card_prop['avatarFightProp'] + hp = fight_prop['hp'] + attack = fight_prop['atk'] + defense = fight_prop['def'] + em = fight_prop['elementalMastery'] + critrate = fight_prop['critRate'] + critdmg = fight_prop['critDmg'] + ce = fight_prop['energyRecharge'] + dmgBonus = ( + fight_prop['dmgBonus'] + if fight_prop['physicalDmgBonus'] <= fight_prop['dmgBonus'] + else fight_prop['physicalDmgBonus'] + ) + + hp_green = fight_prop['hp'] - fight_prop['baseHp'] + attack_green = fight_prop['atk'] - fight_prop['baseAtk'] + defense_green = fight_prop['def'] - fight_prop['baseDef'] + # 角色基本信息 + char_info_text.text( + (411, 72), + char.char_name, + (255, 255, 255), + genshin_font_origin(55), + anchor='lm', + ) + char_info_text.text( + (411, 122), + '等级{}'.format(char.char_level), + (255, 255, 255), + genshin_font_origin(40), + anchor='lm', + ) + char_info_text.text( + (747, 126), + str(char.char_fetter), + (255, 255, 255), + genshin_font_origin(28), + anchor='lm', + ) + char_info_text.text( + (103, 812), + f'{str(a_skill_level)}', + (255, 255, 255), + genshin_font_origin(30), + anchor='mm', + ) + char_info_text.text( + (103, 915), + f'{str(e_skill_level)}', + (255, 255, 255), + genshin_font_origin(30), + anchor='mm', + ) + + char_info_text.text( + (103, 1016), + f'{str(q_skill_level)}', + (255, 255, 255), + genshin_font_origin(30), + anchor='mm', + ) + + # 属性 + char_info_text.text( + (785, 174), + str(round(hp)), + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + char_info_text.text( + (785, 227), + str(round(attack)), + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + char_info_text.text( + (785, 280), + str(round(defense)), + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + char_info_text.text( + (785, 333), + str(round(em)), + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + char_info_text.text( + (785, 386), + f'{str(round(critrate * 100, 2))}%', + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + char_info_text.text( + (785, 439), + f'{str(round(critdmg * 100, 2))}%', + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + char_info_text.text( + (785, 492), + f'{str(round(ce * 100, 1))}%', + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + char_info_text.text( + (785, 545), + f'{str(round(dmgBonus * 100, 1))}%', + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + + char_info_text.text( + (805, 174), + f'(+{str(round(hp_green))})', + (95, 251, 80), + genshin_font_origin(28), + anchor='lm', + ) + char_info_text.text( + (805, 227), + f'(+{str(round(attack_green))})', + (95, 251, 80), + genshin_font_origin(28), + anchor='lm', + ) + char_info_text.text( + (805, 280), + f'(+{str(round(defense_green))})', + (95, 251, 80), + genshin_font_origin(28), + anchor='lm', + ) + + uid = card_prop['playerUid'] + data_time = card_prop['dataTime'] + # uid + char_info_text.text( + (350, 1035), + f'UID{uid}', + (255, 255, 255), + genshin_font_origin(24), + anchor='rm', + ) + # 数据最后更新时间 + char_info_text.text( + (780, 600), + f'数据最后更新于{data_time}', + (255, 255, 255), + genshin_font_origin(22), + anchor='rm', + ) + return char_info_1 + + +async def get_bg_card( + char_element: str, ex_len: int, char_img: Image.Image +) -> Image.Image: + img_w, img_h = 950, 1085 + ex_len + overlay = Image.open(TEXT_PATH / 'overlay.png') + overlay_w, overlay_h = overlay.size + if overlay_h < img_h: + new_overlay_h = img_h + new_overlay_w = math.ceil(new_overlay_h * overlay_w / overlay_h) + overlay = overlay.resize( + (new_overlay_w, new_overlay_h), Image.Resampling.LANCZOS + ) + overlay = overlay.crop((0, 0, img_w, img_h)) + elif overlay_h > img_h: + new_overlay_w = img_w + new_overlay_h = math.ceil(overlay_w / new_overlay_w * overlay_h) + overlay = overlay.resize( + (new_overlay_w, new_overlay_h), Image.Resampling.LANCZOS + ) + overlay = overlay.crop((0, 0, img_w, img_h)) + if ( + gsconfig.get_config('ColorBG').data + and gsconfig.get_config('RandomPic').data + ): + bg_color = CustomizeImage.get_bg_color(char_img) + else: + bg_color = COLOR_MAP[char_element] + color_img = Image.new('RGBA', overlay.size, bg_color) + return ImageChops.overlay(color_img, overlay) + + +async def get_char_img( + char: Character, char_url: Optional[str] = None +) -> Image.Image: + char_name = char.char_name + if gsconfig.get_config('RandomPic').data and char_url is None: + if char_name == '旅行者': + char_name_url = '荧' + else: + char_name_url = char_name + chbg_path = CU_CHBG_PATH / char_name_url + char_url = f'{PIC_API}{char_name_url}' + if chbg_path.exists(): + cuch_img = random.choice(list(chbg_path.iterdir())) + async with aiofiles.open(cuch_img, 'rb') as f: + char.char_bytes = await f.read() + else: + char_data = get(char_url, follow_redirects=True) + if char_data.headers['Content-Type'] == 'application/json': + char_url = None + else: + char.char_bytes = char_data.content + + based_w, based_h = 600, 1200 + if char_url: + offset_x, offset_y = 200, 0 + if char.char_bytes is None: + char.char_bytes = get(char_url).content + char_img = Image.open(BytesIO(char.char_bytes)).convert('RGBA') + else: + offset_x, offset_y = 200, 0 + if char_name == '旅行者': + char_img = ( + Image.open(CHAR_STAND_PATH / '10000007.png') + .convert('RGBA') + .resize((1421, 800)) + ) + else: + char_img = Image.open(GACHA_IMG_PATH / f'{char_name}.png') # 角色图像 + # 确定图片的长宽 + w, h = char_img.size + if (w, h) != (based_w, based_h): + based_new_w, based_new_h = based_w + offset_x, based_h + offset_y + based_scale = '%.3f' % (based_new_w / based_new_h) + scale_f = '%.3f' % (w / h) + new_w = math.ceil(based_new_h * float(scale_f)) + new_h = math.ceil(based_new_w / float(scale_f)) + if scale_f > based_scale: + bg_img2 = char_img.resize( + (new_w, based_new_h), Image.Resampling.LANCZOS + ) + x1 = new_w / 2 - based_new_w / 2 + offset_x + y1 = 0 + offset_y / 2 + x2 = new_w / 2 + based_new_w / 2 + y2 = based_new_h - offset_y / 2 + else: + bg_img2 = char_img.resize( + (based_new_w, new_h), Image.Resampling.LANCZOS + ) + x1 = 0 + offset_x + y1 = new_h / 2 - based_new_h / 2 + offset_y / 2 + x2 = based_new_w + y2 = new_h / 2 + based_new_h / 2 - offset_y / 2 + char_img = bg_img2.crop((x1, y1, x2, y2)) # type: ignore + + char_info_mask = Image.open(TEXT_PATH / 'char_info_mask.png') + char_result = Image.new('RGBA', (based_w, based_h), (0, 0, 0, 0)) + char_result.paste(char_img, (0, 0), char_info_mask) + return char_result + + +async def get_artifacts_card(char: Character, img: Image.Image): + card_prop = char.card_prop + # 圣遗物部分 + for aritifact in card_prop['equipList']: + artifacts_img = Image.open(TEXT_PATH / 'char_info_artifacts.png') + artifacts_piece_img = Image.open( + REL_PATH / '{}.png'.format(aritifact['aritifactName']) + ) + artifacts_piece_new_img = artifacts_piece_img.resize( + (120, 120), Image.Resampling.LANCZOS + ).convert("RGBA") + + artifacts_img.paste( + artifacts_piece_new_img, (165, 22), artifacts_piece_new_img + ) + aritifactStar_img = get_star_png(aritifact['aritifactStar']) + artifactsPos = aritifact['aritifactPieceName'] + + # 圣遗物星星和名称&位置 + artifacts_img.paste(aritifactStar_img, (16, 115), aritifactStar_img) + artifacts_text = ImageDraw.Draw(artifacts_img) + if len(aritifact['aritifactName']) <= 5: + main_name = aritifact['aritifactName'] + else: + main_name = ( + aritifact['aritifactName'][:2] + aritifact['aritifactName'][4:] + ) + artifacts_text.text( + (22, 100), + main_name, + (255, 255, 255), + genshin_font_origin(28), + anchor='lm', + ) + ''' + artifacts_text.text( + (30, 102), + artifactsPos, + (255, 255, 255), + genshin_font_origin(20), + anchor='lm', + ) + ''' + + mainValue: float = aritifact['reliquaryMainstat']['statValue'] + mainName: str = aritifact['reliquaryMainstat']['statName'] + mainLevel: int = aritifact['aritifactLevel'] + + if mainName in ['攻击力', '血量', '防御力', '元素精通']: + mainValueStr = str(mainValue) + else: + mainValueStr = str(mainValue) + '%' + + mainNameNew = ( + mainName.replace('百分比', '') + .replace('伤害加成', '伤加成') + .replace('元素', '') + .replace('理', '') + ) + + artifacts_text.text( + (34, 174), + mainNameNew, + (255, 255, 255), + genshin_font_origin(28), + anchor='lm', + ) + artifacts_text.text( + (266, 174), + mainValueStr, + (255, 255, 255), + genshin_font_origin(28), + anchor='rm', + ) + artifacts_text.text( + (246, 132), + '+{}'.format(str(mainLevel)), + (255, 255, 255), + genshin_font_origin(23), + anchor='mm', + ) + + artifactsScore = 0 + for index, i in enumerate(aritifact['reliquarySubstats']): + subName: str = i['statName'] + subValue: float = i['statValue'] + if subName in ['攻击力', '血量', '防御力', '元素精通']: + subValueStr = str(subValue) + else: + subValueStr = str(subValue) + '%' + value_temp = await get_artifacts_value( + subName, + subValue, + char.baseAtk, + char.baseHp, + char.baseDef, + char.char_name, + ) + artifactsScore += value_temp + subNameStr = subName.replace('百分比', '').replace('元素', '') + # 副词条文字颜色 + if value_temp == 0: + artifacts_color = (160, 160, 160) + else: + artifacts_color = (255, 255, 255) + + # 副词条底色 + if value_temp >= 3.4: + artifacts_bg = (205, 135, 76) + if value_temp >= 4.5: + artifacts_bg = (158, 39, 39) + artifacts_text.rounded_rectangle( + (22, 209 + index * 35, 274, 238 + index * 35), + fill=artifacts_bg, + radius=8, + ) + + artifacts_text.text( + (22, 225 + index * 35), + '·{}'.format(subNameStr), + artifacts_color, + genshin_font_origin(25), + anchor='lm', + ) + artifacts_text.text( + (266, 225 + index * 35), + '{}'.format(subValueStr), + artifacts_color, + genshin_font_origin(25), + anchor='rm', + ) + if artifactsScore >= 8.4: + artifactsScore_color = (158, 39, 39) + elif artifactsScore >= 6.5: + artifactsScore_color = (205, 135, 76) + elif artifactsScore >= 5.2: + artifactsScore_color = (143, 123, 174) + else: + artifactsScore_color = (94, 96, 95) + char.artifacts_all_score += artifactsScore + artifacts_text.rounded_rectangle( + (21, 45, 104, 75), fill=artifactsScore_color, radius=8 + ) + artifacts_text.text( + (26, 60), + '{:.2f}'.format(artifactsScore) + '条', + (255, 255, 255), + genshin_font_origin(23), + anchor='lm', + ) + img.paste(artifacts_img, ARTIFACTS_POS[artifactsPos], artifacts_img) diff --git a/GenshinUID/genshinuid_enka/effect/artifact_effect.json b/GenshinUID/genshinuid_enka/effect/artifact_effect.json new file mode 100644 index 00000000..1596fc5a --- /dev/null +++ b/GenshinUID/genshinuid_enka/effect/artifact_effect.json @@ -0,0 +1,618 @@ +{ + "乐园遗落之花": { + "normal_effect": { + "2": "elementalMastery+80", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "a+40" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "沙上楼阁史话": { + "normal_effect": { + "2": "AnemoDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "ABC:dmgBonus+40" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "深林的记忆": { + "normal_effect": { + "2": "DendroDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "DendroResist+-30" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "饰金之梦": { + "normal_effect": { + "2": "elementalMastery+80", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "elementalMastery+150" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "勇士": { + "normal_effect": { + "2": "addAtk+18", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "dmgBonus+30" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "辰砂往生录": { + "normal_effect": { + "2": "addAtk+18", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "addAtk+48" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "来歆余响": { + "normal_effect": { + "2": "addAtk+18", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "A:addDmg+70%atk" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "华馆梦醒形骸记": { + "normal_effect": { + "2": "addDef+30", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "dmgBonus+24;addDef+24" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "海染砗磲": { + "normal_effect": { + "2": "healBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "绝缘之旗印": { + "normal_effect": { + "2": "energyRecharge+20", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "Q:dmgBonus+75%25%energyrecharge" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "追忆之注连": { + "normal_effect": { + "2": "addAtk+18", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "ABC:dmgBonus+50" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "千岩牢固": { + "normal_effect": { + "2": "addHp+20", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "addAtk+20;shieldBonus+30" + }, + "group_effect": { + "2": "", + "4": "addAtk+20;shieldBonus+30" + } + }, + "苍白之火": { + "normal_effect": { + "2": "physicalDmgBonus+25", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "addAtk+18;physicalDmgBonus+25" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "平息鸣雷的尊者": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "dmgBonus+35" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "炽烈的炎之魔女": { + "normal_effect": { + "2": "PyroDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "a+15;dmgBonus+22.5" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "流浪大地的乐团": { + "normal_effect": { + "2": "elementalMastery+80", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "B:dmgBonus+35" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "染血的骑士道": { + "normal_effect": { + "2": "physicalDmgBonus+25", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "B:dmgBonus+50" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "被怜爱的少女": { + "normal_effect": { + "2": "healBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "healBonus+20" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "角斗士的终幕礼": { + "normal_effect": { + "2": "addAtk+18", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "A:dmgBonus+35" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "渡过烈火的贤人": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "dmgBonus+35" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "悠古的磐岩": { + "normal_effect": { + "2": "GeoDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "dmgBonus+35" + } + }, + "如雷的盛怒": { + "normal_effect": { + "2": "ElectroDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "沉沦之心": { + "normal_effect": { + "2": "HydroDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "AB:dmgBonus+30" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "逆飞的流星": { + "normal_effect": { + "2": "shieldBonus+35", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "AB:dmgBonus+40" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "昔日宗室之仪": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "Q:dmgBonus+20", + "4": "addAtk+20" + }, + "group_effect": { + "2": "", + "4": "addAtk+20" + } + }, + "翠绿之影": { + "normal_effect": { + "2": "AnemoDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "g+60;Resist+-40" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "冰风迷途的勇士": { + "normal_effect": { + "2": "CryoDmgBonus+15", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "critRate+40" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "勇士之心": { + "normal_effect": { + "2": "addAtk+18", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "dmgBonus+30" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "教官": { + "normal_effect": { + "2": "elementalMastery+80", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "elementalMastery+120" + }, + "group_effect": { + "2": "", + "4": "elementalMastery+120" + } + }, + "流放者": { + "normal_effect": { + "2": "energyRecharge+20", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "战狂": { + "normal_effect": { + "2": "critRate+12", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "critRate+24" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "武人": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "AB:dmgBonus+15", + "4": "AB:dmgBonus+25" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "学士": { + "normal_effect": { + "2": "energyRecharge+20", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "赌徒": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "E:dmgBonus+20", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "奇迹": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "行者之心": { + "normal_effect": { + "2": "addAtk+18", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "B:critRate+30" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "守护之心": { + "normal_effect": { + "2": "addDef+30", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "幸运儿": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "冒险家": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "游医": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "祭冰之人": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "祭雷之人": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "祭火之人": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + }, + "祭水之人": { + "normal_effect": { + "2": "", + "4": "" + }, + "fight_effect": { + "2": "", + "4": "" + }, + "group_effect": { + "2": "", + "4": "" + } + } +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/effect/char_action.json b/GenshinUID/genshinuid_enka/effect/char_action.json new file mode 100644 index 00000000..959065c0 --- /dev/null +++ b/GenshinUID/genshinuid_enka/effect/char_action.json @@ -0,0 +1 @@ +{"神里绫华": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["45.7%", "49.4%", "53.2%", "58.5%", "62.2%", "66.5%", "72.3%", "78.2%", "84.0%", "90.4%", "96.8%", "103.1%", "109.5%", "115.9%", "122.3%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 3, "value": ["55.1%", "59.6%", "64.1%", "70.5%", "75.0%", "80.1%", "87.2%", "94.2%", "101.3%", "109.0%", "116.7%", "124.4%", "132.0%", "139.7%", "147.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["239%", "257%", "275%", "299%", "317%", "335%", "359%", "383%", "407%", "431%", "454%", "478%", "508%", "538%", "568%"]}, "Q切割伤害": {"name": "Q切割伤害", "type": "攻击力", "plus": 1, "value": ["112%", "121%", "129%", "140%", "149%", "157%", "168%", "180%", "191%", "202%", "213%", "225%", "239%", "253%", "267%"]}, "Q绽放伤害": {"name": "Q绽放伤害", "type": "攻击力", "plus": 1, "value": ["168%", "181%", "194%", "211%", "223%", "236%", "253%", "270%", "286%", "303%", "320%", "337%", "358%", "379%", "400%"]}}, "琴": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["48.3%", "52.3%", "56.2%", "61.8%", "65.8%", "70.2%", "76.4%", "82.6%", "88.8%", "95.5%", "103.3%", "112.4%", "121.4%", "130.5%", "140.4%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["162%", "175%", "188%", "207%", "220%", "236%", "256%", "277%", "298%", "320%", "346%", "377%", "407%", "438%", "471%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["292%", "314%", "336%", "365%", "387%", "409%", "438%", "467%", "496%", "526%", "555%", "584%", "620%", "657%", "693%"]}, "Q爆发伤害": {"name": "Q爆发伤害", "type": "攻击力", "plus": 1, "value": ["425%", "457%", "489%", "531%", "563%", "595%", "637%", "680%", "722%", "765%", "807%", "850%", "903%", "956%", "1009%"]}, "Q出入领域伤害": {"name": "Q出入领域伤害", "type": "攻击力", "plus": 1, "value": ["78.4%", "84.3%", "90.2%", "98.0%", "103.9%", "109.8%", "117.6%", "125.4%", "133.3%", "141.1%", "149.0%", "156.8%", "166.6%", "176.4%", "186.2%"]}, "Q领域发动治疗量": {"name": "Q领域发动治疗量", "type": "攻击", "plus": 1, "value": ["251%+1540.32", "270%+1694.38", "289%+1861.27", "314%+2041.00", "333%+2233.57", "352%+2438.97", "377%+2657.22", "402%+2888.30", "427%+3132.22", "452%+3388.97", "477%+3658.57", "502%+3941.00", "534%+4236.27", "565%+4544.38", "597%+4865.32"]}, "Q持续治疗": {"name": "Q持续治疗", "type": "攻击", "plus": 1, "value": ["25.12%+154.03", "27.00%+169.44", "28.89%+186.13", "31.40%+204.10", "33.28%+223.36", "35.17%+243.90", "37.68%+265.72", "40.19%+288.83", "42.70%+313.22", "45.22%+338.90", "47.73%+365.86", "50.24%+394.10", "53.38%+423.63", "56.52%+454.44", "59.66%+486.53"]}}, "旅行者": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.5%", "48.1%", "51.7%", "56.9%", "60.5%", "64.6%", "70.3%", "76.0%", "81.7%", "87.9%", "94.1%", "100.3%", "106.5%", "112.7%", "118.9%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.9%+72.2%", "60.4%+78.1%", "65.0%+84.0%", "71.5%+92.4%", "76.1%+98.3%", "81.2%+105.0%", "88.4%+114.2%", "95.6%+123.5%", "102.7%+132.7%", "110.5%+142.8%", "118.3%+152.9%", "126.1%+163.0%", "133.9%+173.0%", "141.7%+183.1%", "149.5%+193.2%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["248%", "267%", "285%", "310%", "329%", "347%", "372%", "397%", "422%", "446%", "471%", "496%", "527%", "558%", "589%"]}, "Q地震波单次伤害": {"name": "Q地震波单次伤害", "type": "攻击力", "plus": 1, "value": ["148%", "159%", "170%", "185%", "196%", "207%", "222%", "237%", "252%", "266%", "281%", "296%", "314%", "333%", "352%"]}}, "丽莎": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["39.6%", "42.6%", "45.5%", "49.5%", "52.5%", "55.4%", "59.4%", "63.4%", "67.3%", "71.3%", "75.4%", "80.8%", "86.2%", "91.6%", "96.9%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["177%", "190%", "204%", "221%", "235%", "248%", "266%", "283%", "301%", "319%", "337%", "361%", "385%", "410%", "434%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["80.0%", "86.0%", "92.0%", "100.0%", "106.0%", "112.0%", "120.0%", "128.0%", "136.0%", "144.0%", "152.0%", "160.0%", "170.0%", "180.0%", "190.0%"]}, "E无引雷长按伤害": {"name": "E无引雷长按伤害", "type": "攻击力", "plus": 1, "value": ["320%", "344%", "368%", "400%", "424%", "448%", "480%", "512%", "544%", "576%", "608%", "640%", "680%", "720%", "760%"]}, "E一层引雷长按伤害": {"name": "E一层引雷长按伤害", "type": "攻击力", "plus": 1, "value": ["368%", "396%", "423%", "460%", "488%", "515%", "552%", "589%", "626%", "662%", "699%", "736%", "782%", "828%", "874%"]}, "E二层引雷长按伤害": {"name": "E二层引雷长按伤害", "type": "攻击力", "plus": 1, "value": ["424%", "456%", "488%", "530%", "562%", "594%", "636%", "678%", "721%", "763%", "806%", "848%", "901%", "954%", "1007%"]}, "E三层引雷长按伤害": {"name": "E三层引雷长按伤害", "type": "攻击力", "plus": 1, "value": ["487%", "524%", "560%", "609%", "646%", "682%", "731%", "780%", "828%", "877%", "926%", "974%", "1035%", "1096%", "1157%"]}, "Q放电伤害": {"name": "Q放电伤害", "type": "攻击力", "plus": 1, "value": ["36.6%", "39.3%", "42.0%", "45.7%", "48.4%", "51.2%", "54.8%", "58.5%", "62.2%", "65.8%", "69.5%", "73.1%", "77.7%", "82.3%", "86.8%"]}}, "芭芭拉": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["37.8%", "40.7%", "43.5%", "47.3%", "50.1%", "53.0%", "56.8%", "60.5%", "64.3%", "68.1%", "72.0%", "77.2%", "82.3%", "87.5%", "92.6%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["166%", "179%", "191%", "208%", "220%", "233%", "249%", "266%", "283%", "299%", "317%", "339%", "362%", "384%", "407%"]}, "A重击伤害(蒸发)": {"name": "A重击伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["166%", "179%", "191%", "208%", "220%", "233%", "249%", "266%", "283%", "299%", "317%", "339%", "362%", "384%", "407%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E命中治疗量": {"name": "E命中治疗量", "type": "生命值", "plus": 1, "value": ["0.75%+72.22", "0.81%+79.45", "0.86%+87.27", "0.94%+95.70", "0.99%+104.73", "1.05%+114.36", "1.13%+124.59", "1.20%+135.43", "1.27%+146.86", "1.35%+158.90", "1.43%+171.54", "1.50%+184.79", "1.59%+198.63", "1.69%+213.08", "1.78%+228.13"]}, "E持续治疗量": {"name": "E持续治疗量", "type": "生命值", "plus": 1, "value": ["4.00%+385.19", "4.30%+423.71", "4.60%+465.45", "5.00%+510.39", "5.30%+558.55", "5.60%+609.91", "6.00%+664.49", "6.40%+722.27", "6.80%+783.27", "7.20%+847.48", "7.60%+914.89", "8.00%+985.52", "8.50%+1059.36", "9.00%+1136.41", "9.50%+1216.67"]}, "E水珠伤害": {"name": "E水珠伤害", "type": "攻击力", "plus": 1, "value": ["58.4%", "62.8%", "67.2%", "73.0%", "77.4%", "81.8%", "87.6%", "93.4%", "99.3%", "105.1%", "111.0%", "116.8%", "124.1%", "131.4%", "138.7%"]}, "Q治疗量": {"name": "Q治疗量", "type": "生命值", "plus": 1, "value": ["17.6%+1694.28", "18.9%+1863.73", "20.2%+2047.31", "22.0%+2245.00", "23.3%+2456.81", "24.6%+2682.75", "26.4%+2922.81", "28.2%+3176.98", "29.9%+3445.28", "31.7%+3727.70", "33.4%+4024.24", "35.2%+4334.90", "37.4%+4659.69", "39.6%+4998.59", "41.8%+5351.62"]}}, "凯亚": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["53.8%", "58.1%", "62.5%", "68.8%", "73.1%", "78.1%", "85.0%", "91.9%", "98.8%", "106.2%", "114.8%", "125.0%", "135.1%", "145.2%", "156.2%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.0%+73.1%", "59.5%+79.0%", "64.0%+85.0%", "70.4%+93.5%", "74.9%+99.4%", "80.0%+106.2%", "87.0%+115.6%", "94.1%+125.0%", "101.1%+134.3%", "108.8%+144.5%", "117.6%+156.2%", "127.9%+169.9%", "138.3%+183.7%", "148.6%+197.4%", "159.9%+212.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["191%", "206%", "220%", "239%", "253%", "268%", "287%", "306%", "325%", "344%", "363%", "382%", "406%", "430%", "454%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["77.6%", "83.4%", "89.2%", "97.0%", "102.8%", "108.6%", "116.4%", "124.2%", "131.9%", "139.7%", "147.4%", "155.2%", "164.9%", "174.6%", "184.3%"]}}, "迪卢克": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["89.7%", "97.0%", "104.3%", "114.7%", "122.0%", "130.4%", "141.8%", "153.3%", "164.8%", "177.3%", "191.7%", "208.5%", "225.4%", "242.2%", "260.6%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["68.8%", "74.4%", "80.0%", "88.0%", "93.6%", "100.0%", "108.8%", "117.6%", "126.4%", "136.0%", "147.0%", "159.9%", "172.9%", "185.8%", "199.9%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["125%", "135%", "145%", "160%", "170%", "181%", "197%", "213%", "229%", "246%", "266%", "290%", "313%", "337%", "362%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["224%", "242%", "260%", "286%", "304%", "325%", "354%", "382%", "411%", "442%", "473%", "504%", "535%", "567%", "598%"]}, "E一段伤害": {"name": "E一段伤害", "type": "攻击力", "plus": 1, "value": ["94.4%", "101.5%", "108.6%", "118.0%", "125.1%", "132.2%", "141.6%", "151.0%", "160.5%", "169.9%", "179.4%", "188.8%", "200.6%", "212.4%", "224.2%"]}, "Q斩击伤害": {"name": "Q斩击伤害", "type": "攻击力", "plus": 1, "value": ["204%", "219%", "235%", "255%", "270%", "286%", "306%", "326%", "347%", "367%", "388%", "408%", "434%", "459%", "484%"]}, "Q斩击伤害(蒸发)": {"name": "Q斩击伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["204%", "219%", "235%", "255%", "270%", "286%", "306%", "326%", "347%", "367%", "388%", "408%", "434%", "459%", "484%"]}, "Q持续伤害": {"name": "Q持续伤害", "type": "攻击力", "plus": 1, "value": ["60.0%", "64.5%", "69.0%", "75.0%", "79.5%", "84.0%", "90.0%", "96.0%", "102.0%", "108.0%", "114.0%", "120.0%", "127.5%", "135.0%", "142.5%"]}, "Q爆裂伤害": {"name": "Q爆裂伤害", "type": "攻击力", "plus": 1, "value": ["204%", "219%", "235%", "255%", "270%", "286%", "306%", "326%", "347%", "367%", "388%", "408%", "434%", "459%", "484%"]}}, "雷泽": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["95.9%", "102.5%", "109.0%", "117.7%", "124.3%", "131.9%", "141.7%", "151.5%", "161.3%", "171.1%", "180.9%", "190.8%", "200.6%", "210.4%", "220.2%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["62.5%", "67.6%", "72.7%", "80.0%", "85.1%", "90.9%", "98.9%", "106.9%", "114.9%", "123.6%", "132.4%", "141.1%", "149.8%", "158.5%", "167.3%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["113%", "122%", "132%", "145%", "154%", "164%", "179%", "193%", "208%", "224%", "239%", "255%", "271%", "287%", "302%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["205%", "222%", "238%", "262%", "279%", "298%", "324%", "350%", "376%", "405%", "434%", "462%", "491%", "519%", "548%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["199%", "214%", "229%", "249%", "264%", "279%", "299%", "319%", "339%", "359%", "378%", "398%", "423%", "448%", "473%"]}, "E长按伤害": {"name": "E长按伤害", "type": "攻击力", "plus": 1, "value": ["295%", "317%", "339%", "369%", "391%", "413%", "443%", "472%", "502%", "531%", "561%", "590%", "627%", "664%", "701%"]}, "Q爆发伤害": {"name": "Q爆发伤害", "type": "攻击力", "plus": 1, "value": ["160%", "172%", "184%", "200%", "212%", "224%", "240%", "256%", "272%", "288%", "304%", "320%", "340%", "360%", "380%"]}, "Q狼魂伤害": {"name": "Q狼魂伤害", "type": "普通攻击", "plus": 1, "value": ["24.0%", "25.8%", "27.6%", "30.0%", "31.8%", "33.6%", "36.0%", "38.4%", "40.8%", "43.2%", "45.6%", "48.0%", "51.0%", "54.0%", "57.0%"]}}, "安柏": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["36.1%", "39.1%", "42.0%", "46.2%", "49.1%", "52.5%", "57.1%", "61.7%", "66.4%", "71.4%", "76.4%", "81.5%", "86.5%", "91.6%", "96.6%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A满蓄力瞄准射击(融化)": {"name": "A满蓄力瞄准射击(融化)", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A满蓄力瞄准射击(蒸发)": {"name": "A满蓄力瞄准射击(蒸发)", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E爆炸伤害": {"name": "E爆炸伤害", "type": "攻击力", "plus": 1, "value": ["123%", "132%", "142%", "154%", "163%", "172%", "185%", "197%", "209%", "222%", "234%", "246%", "262%", "277%", "293%"]}, "Q箭雨单次伤害": {"name": "Q箭雨单次伤害", "type": "攻击力", "plus": 1, "value": ["28.1%", "30.2%", "32.3%", "35.1%", "37.2%", "39.3%", "42.1%", "44.9%", "47.7%", "50.5%", "53.4%", "56.2%", "59.7%", "63.2%", "66.7%"]}, "Q箭雨总伤害": {"name": "Q箭雨总伤害", "type": "攻击力", "plus": 1, "value": ["505%", "543%", "581%", "632%", "670%", "708%", "758%", "809%", "859%", "910%", "960%", "1011%", "1074%", "1137%", "1200%"]}}, "温迪": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["20.4%+20.4%", "22.0%+22.0%", "23.7%+23.7%", "26.1%+26.1%", "27.7%+27.7%", "29.6%+29.6%", "32.2%+32.2%", "34.8%+34.8%", "37.4%+37.4%", "40.3%+40.3%", "43.5%+43.5%", "47.4%+47.4%", "51.2%+51.2%", "55.0%+55.0%", "59.2%+59.2%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "253%", "270%", "287%", "304%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["276%", "297%", "317%", "345%", "366%", "386%", "414%", "442%", "469%", "497%", "524%", "552%", "586%", "621%", "655%"]}, "E长按伤害": {"name": "E长按伤害", "type": "攻击力", "plus": 1, "value": ["380%", "409%", "437%", "475%", "503%", "532%", "570%", "608%", "646%", "684%", "722%", "760%", "807%", "855%", "902%"]}, "Q持续伤害": {"name": "Q持续伤害", "type": "攻击力", "plus": 1, "value": ["37.6%", "40.4%", "43.2%", "47.0%", "49.8%", "52.6%", "56.4%", "60.2%", "63.9%", "67.7%", "71.4%", "75.2%", "79.9%", "84.6%", "89.3%"]}, "Q附加元素伤害": {"name": "Q附加元素伤害", "type": "攻击力", "plus": 1, "value": ["18.8%", "20.2%", "21.6%", "23.5%", "24.9%", "26.3%", "28.2%", "30.1%", "32.0%", "33.8%", "35.7%", "37.6%", "40.0%", "42.3%", "44.7%"]}}, "香菱": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["42.1%", "45.5%", "48.9%", "53.8%", "57.2%", "61.1%", "66.5%", "71.9%", "77.3%", "83.1%", "89.9%", "97.8%", "105.7%", "113.6%", "122.2%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["122%", "132%", "141%", "156%", "166%", "177%", "192%", "208%", "224%", "241%", "260%", "283%", "306%", "329%", "354%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E喷火伤害": {"name": "E喷火伤害", "type": "攻击力", "plus": 1, "value": ["111%", "120%", "128%", "139%", "147%", "156%", "167%", "178%", "189%", "200%", "211%", "223%", "236%", "250%", "264%"]}, "E喷火伤害(蒸发)": {"name": "E喷火伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["111%", "120%", "128%", "139%", "147%", "156%", "167%", "178%", "189%", "200%", "211%", "223%", "236%", "250%", "264%"]}, "Q一段挥舞伤害": {"name": "Q一段挥舞伤害", "type": "攻击力", "plus": 1, "value": ["72.0%", "77.4%", "82.8%", "90.0%", "95.4%", "100.8%", "108.0%", "115.2%", "122.4%", "129.6%", "136.8%", "144.0%", "153.0%", "162.0%", "171.0%"]}, "Q旋火轮伤害": {"name": "Q旋火轮伤害", "type": "攻击力", "plus": 1, "value": ["112%", "120%", "129%", "140%", "148%", "157%", "168%", "179%", "190%", "202%", "213%", "224%", "238%", "252%", "266%"]}, "Q旋火轮伤害(蒸发)": {"name": "Q旋火轮伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["112%", "120%", "129%", "140%", "148%", "157%", "168%", "179%", "190%", "202%", "213%", "224%", "238%", "252%", "266%"]}}, "北斗": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["71.1%", "76.9%", "82.7%", "91.0%", "96.8%", "103.4%", "112.5%", "121.6%", "130.7%", "140.6%", "152.0%", "165.3%", "178.7%", "192.1%", "206.7%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["56.2%", "60.8%", "65.4%", "71.9%", "76.5%", "81.7%", "88.9%", "96.1%", "103.3%", "111.2%", "120.2%", "130.7%", "141.3%", "151.9%", "163.4%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["102%", "110%", "118%", "130%", "139%", "148%", "161%", "174%", "187%", "201%", "218%", "237%", "256%", "275%", "296%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "394%", "420%", "446%", "472%", "498%"]}, "E护盾吸收量": {"name": "E护盾吸收量", "type": "生命值", "plus": 1, "value": ["14.4%+1386.37", "15.5%+1525.02", "16.6%+1675.23", "18.0%+1837.00", "19.1%+2010.32", "20.2%+2195.19", "21.6%+2391.62", "23.0%+2599.61", "24.5%+2819.15", "25.9%+3050.24", "27.4%+3292.89", "28.8%+3547.09", "30.6%+3812.85", "32.4%+4090.16", "34.2%+4379.03"]}, "E基础伤害": {"name": "E基础伤害", "type": "攻击力", "plus": 1, "value": ["122%", "131%", "140%", "152%", "161%", "170%", "182%", "195%", "207%", "219%", "231%", "243%", "258%", "274%", "289%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["122%", "131%", "140%", "152%", "161%", "170%", "182%", "195%", "207%", "219%", "231%", "243%", "258%", "274%", "289%"]}, "Q闪雷伤害": {"name": "Q闪雷伤害", "type": "攻击力", "plus": 1, "value": ["96.0%", "103.2%", "110.4%", "120.0%", "127.2%", "134.4%", "144.0%", "153.6%", "163.2%", "172.8%", "182.4%", "192.0%", "204.0%", "216.0%", "228.0%"]}, "Q闪雷伤害(超激化)": {"name": "Q闪雷伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["96.0%", "103.2%", "110.4%", "120.0%", "127.2%", "134.4%", "144.0%", "153.6%", "163.2%", "172.8%", "182.4%", "192.0%", "204.0%", "216.0%", "228.0%"]}, "Q伤害减免": {"name": "Q伤害减免", "type": "攻击力", "plus": 1, "value": ["20%", "21%", "22%", "24%", "25%", "26%", "28%", "30%", "32%", "34%", "35%", "36%", "37%", "38%", "39%"]}}, "行秋": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["46.6%", "50.4%", "54.2%", "59.6%", "63.4%", "67.8%", "73.7%", "79.7%", "85.6%", "92.1%", "99.6%", "108.4%", "117.1%", "125.9%", "135.4%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["47.3%+56.2%", "51.2%+60.7%", "55.0%+65.3%", "60.5%+71.8%", "64.3%+76.4%", "68.8%+81.6%", "74.8%+88.8%", "80.8%+96.0%", "86.9%+103.2%", "93.5%+111.0%", "101.1%+120.0%", "110.0%+130.5%", "118.8%+141.1%", "127.7%+151.7%", "137.4%+163.2%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["168%+191%", "181%+206%", "193%+220%", "210%+239%", "223%+253%", "235%+268%", "252%+287%", "269%+306%", "286%+325%", "302%+344%", "319%+363%", "336%+382%", "357%+406%", "378%+430%", "399%+454%"]}, "E伤害(蒸发)": {"name": "E伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["168%+191%", "181%+206%", "193%+220%", "210%+239%", "223%+253%", "235%+268%", "252%+287%", "269%+306%", "286%+325%", "302%+344%", "319%+363%", "336%+382%", "357%+406%", "378%+430%", "399%+454%"]}, "Q剑雨伤害": {"name": "Q剑雨伤害", "type": "攻击力", "plus": 1, "value": ["54.3%", "58.3%", "62.4%", "67.8%", "71.9%", "76.0%", "81.4%", "86.8%", "92.3%", "97.7%", "103.1%", "108.5%", "115.3%", "122.1%", "128.9%"]}}, "魈": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["27.5%+27.5%", "29.4%+29.4%", "31.3%+31.3%", "33.8%+33.8%", "35.7%+35.7%", "37.9%+37.9%", "40.7%+40.7%", "43.5%+43.5%", "46.3%+46.3%", "49.1%+49.1%", "52.0%+52.0%", "54.8%+54.8%", "57.6%+57.6%", "60.4%+60.4%", "63.2%+63.2%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["121%", "129%", "138%", "149%", "157%", "166%", "179%", "191%", "204%", "216%", "228%", "241%", "253%", "266%", "278%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["204%", "221%", "238%", "261%", "278%", "297%", "323%", "349%", "375%", "404%", "433%", "461%", "490%", "518%", "547%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["253%", "272%", "291%", "316%", "335%", "354%", "379%", "404%", "430%", "455%", "480%", "506%", "537%", "569%", "600%"]}}, "凝光": {"A普通攻击伤害": {"name": "A普通攻击伤害", "type": "攻击力", "plus": 1, "value": ["28.0%", "30.1%", "32.2%", "35.0%", "37.1%", "39.2%", "42.0%", "44.8%", "47.6%", "50.4%", "53.3%", "57.1%", "60.9%", "64.7%", "68.5%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["174%", "187%", "200%", "218%", "231%", "244%", "261%", "279%", "296%", "313%", "331%", "355%", "379%", "402%", "426%"]}, "A星璇伤害": {"name": "A星璇伤害", "type": "攻击力", "plus": 1, "value": ["49.6%", "53.3%", "57.0%", "62.0%", "65.7%", "69.4%", "74.4%", "79.4%", "84.3%", "89.3%", "94.4%", "101.2%", "107.9%", "114.7%", "121.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["230%", "248%", "265%", "288%", "305%", "323%", "346%", "369%", "392%", "415%", "438%", "461%", "490%", "518%", "547%"]}, "Q宝石伤害": {"name": "Q宝石伤害", "type": "攻击力", "plus": 1, "value": ["87.0%", "93.5%", "100.0%", "108.7%", "115.2%", "121.7%", "130.4%", "139.1%", "147.8%", "156.5%", "165.2%", "173.9%", "184.8%", "195.7%", "206.5%"]}}, "可莉": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["72.2%", "77.6%", "83.0%", "90.2%", "95.6%", "101.0%", "108.2%", "115.5%", "122.7%", "129.9%", "137.4%", "147.2%", "157.0%", "166.8%", "176.6%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["157%", "169%", "181%", "197%", "209%", "220%", "236%", "252%", "268%", "283%", "300%", "321%", "342%", "364%", "385%"]}, "A重击伤害(蒸发)": {"name": "A重击伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["157%", "169%", "181%", "197%", "209%", "220%", "236%", "252%", "268%", "283%", "300%", "321%", "342%", "364%", "385%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E蹦蹦炸弹伤害": {"name": "E蹦蹦炸弹伤害", "type": "攻击力", "plus": 1, "value": ["95.2%", "102.3%", "109.5%", "119.0%", "126.1%", "133.3%", "142.8%", "152.3%", "161.8%", "171.4%", "180.9%", "190.4%", "202.3%", "214.2%", "226.1%"]}, "E诡雷伤害": {"name": "E诡雷伤害", "type": "攻击力", "plus": 1, "value": ["32.8%", "35.3%", "37.7%", "41.0%", "43.5%", "45.9%", "49.2%", "52.5%", "55.8%", "59.0%", "62.3%", "65.6%", "69.7%", "73.8%", "77.9%"]}, "Q轰轰火花伤害": {"name": "Q轰轰火花伤害", "type": "攻击力", "plus": 1, "value": ["42.6%", "45.8%", "49.0%", "53.3%", "56.5%", "59.7%", "64.0%", "68.2%", "72.5%", "76.8%", "81.0%", "85.3%", "90.6%", "95.9%", "101.3%"]}}, "钟离": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["30.8%", "33.3%", "35.8%", "39.4%", "41.9%", "44.7%", "48.7%", "52.6%", "56.5%", "60.8%", "65.7%", "71.5%", "77.3%", "83.1%", "89.4%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["111%", "120%", "129%", "142%", "151%", "161%", "176%", "190%", "204%", "219%", "237%", "258%", "279%", "300%", "323%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E岩脊伤害/共鸣伤害": {"name": "E岩脊伤害/共鸣伤害", "type": "攻击力", "plus": 1, "value": ["16.0%+32.0%", "17.2%+34.4%", "18.4%+36.8%", "20.0%+40.0%", "21.2%+42.4%", "22.4%+44.8%", "24.0%+48.0%", "25.6%+51.2%", "27.2%+54.4%", "28.8%+57.6%", "30.4%+60.8%", "32.0%+64.0%", "34.0%+68.0%", "36.0%+72.0%", "38.0%+76.0%"]}, "E长按伤害": {"name": "E长按伤害", "type": "攻击力", "plus": 1, "value": ["80%", "86%", "92%", "100%", "106%", "112%", "120%", "128%", "136%", "144%", "152%", "160%", "170%", "180%", "190%"]}, "E护盾基础吸收量": {"name": "E护盾基础吸收量", "type": "攻击力", "plus": 1, "value": ["1232.41", "1355.67", "1489.20", "1633.00", "1787.07", "1951.42", "2126.03", "2310.92", "2506.08", "2711.51", "2927.21", "3153.18", "3389.43", "3635.95", "3892.73"]}, "E护盾附加吸收量": {"name": "E护盾附加吸收量", "type": "生命值", "plus": 1, "value": ["12.8%", "13.8%", "14.7%", "16.0%", "17.0%", "17.9%", "19.2%", "20.5%", "21.8%", "23.0%", "24.3%", "25.6%", "27.2%", "28.8%", "30.4%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["401%", "444%", "488%", "542%", "591%", "640%", "705%", "770%", "835%", "900%", "965%", "1030%", "1084%", "1138%", "1192%"]}}, "菲谢尔": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.1%", "47.7%", "51.3%", "56.4%", "60.0%", "64.1%", "69.8%", "75.4%", "81.1%", "87.2%", "93.4%", "99.5%", "105.7%", "111.8%", "118.0%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E奥兹攻击伤害": {"name": "E奥兹攻击伤害", "type": "攻击力", "plus": 1, "value": ["88.8%", "95.5%", "102.1%", "111.0%", "117.7%", "124.3%", "133.2%", "142.1%", "151.0%", "159.8%", "168.7%", "177.6%", "188.7%", "199.8%", "210.9%"]}, "E奥兹攻击伤害(超激化)": {"name": "E奥兹攻击伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["88.8%", "95.5%", "102.1%", "111.0%", "117.7%", "124.3%", "133.2%", "142.1%", "151.0%", "159.8%", "168.7%", "177.6%", "188.7%", "199.8%", "210.9%"]}, "E召唤伤害": {"name": "E召唤伤害", "type": "攻击力", "plus": 1, "value": ["115%", "124%", "133%", "144%", "153%", "162%", "173%", "185%", "196%", "208%", "219%", "231%", "245%", "260%", "274%"]}, "Q落雷伤害": {"name": "Q落雷伤害", "type": "攻击力", "plus": 1, "value": ["208%", "224%", "239%", "260%", "276%", "291%", "312%", "333%", "354%", "374%", "395%", "416%", "442%", "468%", "494%"]}}, "班尼特": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.5%", "48.2%", "51.8%", "57.0%", "60.6%", "64.7%", "70.4%", "76.1%", "81.8%", "88.1%", "94.3%", "100.5%", "106.7%", "112.9%", "119.1%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.9%+60.7%", "60.4%+65.7%", "65.0%+70.6%", "71.5%+77.7%", "76.1%+82.6%", "81.2%+88.2%", "88.4%+96.0%", "95.6%+103.8%", "102.7%+111.5%", "110.5%+120.0%", "118.3%+128.5%", "126.1%+137.0%", "133.9%+145.4%", "141.7%+153.9%", "149.5%+162.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["138%", "148%", "158%", "172%", "182%", "193%", "206%", "220%", "234%", "248%", "261%", "275%", "292%", "310%", "327%"]}, "E一段蓄力伤害": {"name": "E一段蓄力伤害", "type": "攻击力", "plus": 1, "value": ["84.0%+92.0%", "90.3%+98.9%", "96.6%+105.8%", "105.0%+115.0%", "111.3%+121.9%", "117.6%+128.8%", "126.0%+138.0%", "134.4%+147.2%", "142.8%+156.4%", "151.2%+165.6%", "159.6%+174.8%", "168.0%+184.0%", "178.5%+195.5%", "189.0%+207.0%", "199.5%+218.5%"]}, "E爆炸伤害": {"name": "E爆炸伤害", "type": "攻击力", "plus": 1, "value": ["132%", "142%", "152%", "165%", "175%", "185%", "198%", "211%", "224%", "238%", "251%", "264%", "281%", "297%", "313%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["233%", "250%", "268%", "291%", "308%", "326%", "349%", "372%", "396%", "419%", "442%", "466%", "495%", "524%", "553%"]}, "Q伤害(蒸发)": {"name": "Q伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["233%", "250%", "268%", "291%", "308%", "326%", "349%", "372%", "396%", "419%", "442%", "466%", "495%", "524%", "553%"]}, "Q持续治疗": {"name": "Q持续治疗", "type": "生命值", "plus": 1, "value": ["6.00%+577.34", "6.45%+635.08", "6.90%+697.63", "7.50%+765.00", "7.95%+837.18", "8.40%+914.17", "9.00%+995.97", "9.60%+1082.58", "10.20%+1174.01", "10.80%+1270.24", "11.40%+1371.29", "12.00%+1477.15", "12.75%+1587.82", "13.50%+1703.31", "14.25%+1823.60"]}}, "达达利亚": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["41.3%", "44.6%", "48.0%", "52.8%", "56.2%", "60.0%", "65.3%", "70.6%", "75.8%", "81.6%", "87.4%", "93.1%", "98.9%", "104.6%", "110.4%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A满蓄力瞄准射击(蒸发)": {"name": "A满蓄力瞄准射击(蒸发)", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A断流·闪 伤害": {"name": "A断流·闪 伤害", "type": "攻击力", "plus": 3, "value": ["12.4%", "13.3%", "14.3%", "15.5%", "16.4%", "17.4%", "18.6%", "19.8%", "21.1%", "22.3%", "23.6%", "24.8%", "26.4%", "27.9%", "29.4%"]}, "A断流·破 伤害": {"name": "A断流·破 伤害", "type": "攻击力", "plus": 1, "value": ["62.0%", "66.6%", "71.3%", "77.5%", "82.2%", "86.8%", "93.0%", "99.2%", "105.4%", "111.6%", "117.8%", "124.0%", "131.7%", "139.5%", "147.2%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E状态激发伤害": {"name": "E状态激发伤害", "type": "攻击力", "plus": 1, "value": ["72%", "77%", "83%", "90%", "95%", "101%", "108%", "115%", "122%", "130%", "137%", "144%", "153%", "162%", "171%"]}, "E一段伤害": {"name": "E一段伤害", "type": "攻击力", "plus": 1, "value": ["38.9%", "42.0%", "45.2%", "49.7%", "52.9%", "56.5%", "61.5%", "66.4%", "71.4%", "76.8%", "82.3%", "87.7%", "93.1%", "98.5%", "104.0%"]}, "E重击伤害": {"name": "E重击伤害", "type": "攻击力", "plus": 1, "value": ["60.2%+72.0%", "65.1%+77.8%", "70.0%+83.7%", "77.0%+92.1%", "81.9%+97.9%", "87.5%+104.6%", "95.2%+113.8%", "102.9%+123.0%", "110.6%+132.2%", "119.0%+142.3%", "127.4%+152.3%", "135.8%+162.4%", "144.2%+172.4%", "152.6%+182.5%", "161.0%+192.5%"]}, "E断流·斩 伤害": {"name": "E断流·斩 伤害", "type": "攻击力", "plus": 1, "value": ["60%", "65%", "70%", "77%", "82%", "88%", "95%", "103%", "111%", "119%", "127%", "136%", "144%", "153%", "161%"]}, "Q伤害·近战": {"name": "Q伤害·近战", "type": "攻击力", "plus": 1, "value": ["464%", "499%", "534%", "580%", "615%", "650%", "696%", "742%", "789%", "835%", "882%", "928%", "986%", "1044%", "1102%"]}, "Q伤害·近战(蒸发)": {"name": "Q伤害·近战(蒸发)", "type": "攻击力", "plus": 1, "value": ["464%", "499%", "534%", "580%", "615%", "650%", "696%", "742%", "789%", "835%", "882%", "928%", "986%", "1044%", "1102%"]}, "Q伤害·远程": {"name": "Q伤害·远程", "type": "攻击力", "plus": 1, "value": ["378%", "407%", "435%", "473%", "501%", "530%", "568%", "605%", "643%", "681%", "719%", "757%", "804%", "851%", "899%"]}, "Q伤害·远程(蒸发)": {"name": "Q伤害·远程(蒸发)", "type": "攻击力", "plus": 1, "value": ["378%", "407%", "435%", "473%", "501%", "530%", "568%", "605%", "643%", "681%", "719%", "757%", "804%", "851%", "899%"]}, "Q断流·爆 伤害": {"name": "Q断流·爆 伤害", "type": "攻击力", "plus": 1, "value": ["120%", "129%", "138%", "150%", "159%", "168%", "180%", "192%", "204%", "216%", "228%", "240%", "255%", "270%", "285%"]}}, "诺艾尔": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["79.1%", "85.6%", "92.0%", "101.2%", "107.6%", "115.0%", "125.1%", "135.2%", "145.4%", "156.4%", "167.4%", "178.5%", "189.5%", "200.6%", "211.6%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["50.7%", "54.9%", "59.0%", "64.9%", "69.0%", "73.8%", "80.2%", "86.7%", "93.2%", "100.3%", "107.4%", "114.5%", "121.5%", "128.6%", "135.7%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["90.5%", "97.8%", "105.2%", "115.7%", "123.1%", "131.5%", "143.1%", "154.6%", "166.2%", "178.8%", "191.5%", "204.1%", "216.7%", "229.3%", "242.0%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "394%", "420%", "446%", "472%", "498%"]}, "E伤害": {"name": "E伤害", "type": "防御", "plus": 1, "value": ["120%", "129%", "138%", "150%", "159%", "168%", "180%", "192%", "204%", "216%", "228%", "240%", "255%", "270%", "285%"]}, "E治疗量": {"name": "E治疗量", "type": "防御", "plus": 1, "value": ["21.3%+102.72", "22.9%+112.99", "24.5%+124.12", "26.6%+136.11", "28.2%+148.95", "29.8%+162.65", "31.9%+177.20", "34.0%+192.61", "36.2%+208.87", "38.3%+226.00", "40.4%+243.97", "42.6%+262.81", "45.2%+282.50", "47.9%+303.05", "50.5%+324.45"]}, "E治疗触发几率": {"name": "E治疗触发几率", "type": "攻击力", "plus": 1, "value": ["50%", "51%", "52%", "53%", "54%", "55%", "56%", "57%", "58%", "59%", "59%", "60%", "60%", "60%", "60%"]}, "Q爆发伤害": {"name": "Q爆发伤害", "type": "攻击力", "plus": 1, "value": ["67.2%", "72.2%", "77.3%", "84.0%", "89.0%", "94.1%", "100.8%", "107.5%", "114.2%", "121.0%", "127.7%", "134.4%", "142.8%", "151.2%", "159.6%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["92.8%", "99.8%", "106.7%", "116.0%", "123.0%", "129.9%", "139.2%", "148.5%", "157.8%", "167.0%", "176.3%", "185.6%", "197.2%", "208.8%", "220.4%"]}}, "七七": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["37.8%", "40.8%", "43.9%", "48.3%", "51.4%", "54.9%", "59.7%", "64.5%", "69.4%", "74.6%", "79.9%", "85.2%", "90.4%", "95.7%", "101.0%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["64.3%+64.3%", "69.6%+69.6%", "74.8%+74.8%", "82.3%+82.3%", "87.5%+87.5%", "93.5%+93.5%", "101.7%+101.7%", "110.0%+110.0%", "118.2%+118.2%", "127.2%+127.2%", "136.1%+136.1%", "145.1%+145.1%", "154.1%+154.1%", "163.1%+163.1%", "172.0%+172.0%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["96%", "103%", "110%", "120%", "127%", "134%", "144%", "154%", "163%", "173%", "182%", "192%", "204%", "216%", "228%"]}, "E命中治疗量": {"name": "E命中治疗量", "type": "攻击", "plus": 1, "value": ["10.56%+67.41", "11.35%+74.15", "12.14%+81.45", "13.20%+89.32", "13.99%+97.75", "14.78%+106.73", "15.84%+116.29", "16.90%+126.40", "17.95%+137.07", "19.01%+148.31", "20.06%+160.11", "21.12%+172.47", "22.44%+185.39", "23.76%+198.87", "25.08%+212.92"]}, "E持续治疗量": {"name": "E持续治疗量", "type": "攻击", "plus": 1, "value": ["69.60%+450.55", "74.82%+495.61", "80.04%+544.43", "87.00%+597.00", "92.22%+653.33", "97.44%+713.41", "104.40%+777.25", "111.36%+844.84", "118.32%+916.18", "125.28%+991.29", "132.24%+1070.14", "139.20%+1152.76", "147.90%+1239.12", "156.60%+1329.25", "165.30%+1423.12"]}, "E寒病鬼差伤害": {"name": "E寒病鬼差伤害", "type": "攻击力", "plus": 1, "value": ["36.0%", "38.7%", "41.4%", "45.0%", "47.7%", "50.4%", "54.0%", "57.6%", "61.2%", "64.8%", "68.4%", "72.0%", "76.5%", "81.0%", "85.5%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["285%", "306%", "328%", "356%", "377%", "399%", "427%", "456%", "484%", "513%", "541%", "570%", "605%", "641%", "676%"]}, "Q伤害(融化)": {"name": "Q伤害(融化)", "type": "攻击力", "plus": 1, "value": ["285%", "306%", "328%", "356%", "377%", "399%", "427%", "456%", "484%", "513%", "541%", "570%", "605%", "641%", "676%"]}, "Q治疗量": {"name": "Q治疗量", "type": "攻击", "plus": 1, "value": ["90.0%+577.34", "96.7%+635.08", "103.5%+697.63", "112.5%+765.00", "119.2%+837.18", "126.0%+914.17", "135.0%+995.97", "144.0%+1082.58", "153.0%+1174.01", "162.0%+1270.24", "171.0%+1371.29", "180.0%+1477.15", "191.3%+1587.82", "202.5%+1703.31", "213.8%+1823.60"]}}, "重云": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["70.0%", "75.7%", "81.4%", "89.5%", "95.2%", "101.8%", "110.7%", "119.7%", "128.6%", "138.4%", "148.1%", "157.9%", "167.7%", "177.5%", "187.2%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["56.3%", "60.9%", "65.4%", "72.0%", "76.6%", "81.8%", "89.0%", "96.2%", "103.4%", "111.3%", "119.1%", "127.0%", "134.8%", "142.7%", "150.5%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["102%", "110%", "118%", "130%", "138%", "148%", "161%", "174%", "187%", "201%", "215%", "230%", "244%", "258%", "272%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "394%", "420%", "446%", "472%", "498%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["172%", "185%", "198%", "215%", "228%", "241%", "258%", "275%", "292%", "310%", "327%", "344%", "366%", "387%", "409%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "164%", "178%", "189%", "199%", "214%", "228%", "242%", "256%", "271%", "285%", "303%", "320%", "338%"]}, "Q伤害(融化)": {"name": "Q伤害(融化)", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "164%", "178%", "189%", "199%", "214%", "228%", "242%", "256%", "271%", "285%", "303%", "320%", "338%"]}}, "甘雨": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["31.7%", "34.3%", "36.9%", "40.6%", "43.2%", "46.1%", "50.2%", "54.2%", "58.3%", "62.7%", "67.8%", "73.8%", "79.7%", "85.7%", "92.2%"]}, "A霜华矢命中伤害": {"name": "A霜华矢命中伤害", "type": "攻击力", "plus": 1, "value": ["128%", "138%", "147%", "160%", "170%", "179%", "192%", "205%", "218%", "230%", "243%", "256%", "272%", "288%", "304%"]}, "A霜华矢命中伤害(融化)": {"name": "A霜华矢命中伤害(融化)", "type": "攻击力", "plus": 1, "value": ["128%", "138%", "147%", "160%", "170%", "179%", "192%", "205%", "218%", "230%", "243%", "256%", "272%", "288%", "304%"]}, "A霜华矢·霜华绽发伤害": {"name": "A霜华矢·霜华绽发伤害", "type": "攻击力", "plus": 1, "value": ["218%", "234%", "250%", "272%", "288%", "305%", "326%", "348%", "370%", "392%", "413%", "435%", "462%", "490%", "517%"]}, "A霜华矢·霜华绽发伤害(融化)": {"name": "A霜华矢·霜华绽发伤害(融化)", "type": "攻击力", "plus": 1, "value": ["218%", "234%", "250%", "272%", "288%", "305%", "326%", "348%", "370%", "392%", "413%", "435%", "462%", "490%", "517%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["132%", "142%", "152%", "165%", "175%", "185%", "198%", "211%", "224%", "238%", "251%", "264%", "281%", "297%", "313%"]}, "Q冰棱伤害": {"name": "Q冰棱伤害", "type": "攻击力", "plus": 1, "value": ["70%", "76%", "81%", "88%", "93%", "98%", "105%", "112%", "119%", "126%", "134%", "141%", "149%", "158%", "167%"]}}, "阿贝多": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["36.7%", "39.7%", "42.7%", "47.0%", "50.0%", "53.4%", "58.1%", "62.8%", "67.5%", "72.6%", "78.5%", "85.4%", "92.3%", "99.2%", "106.8%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["47.3%+60.2%", "51.2%+65.1%", "55.0%+70.0%", "60.5%+77.0%", "64.3%+81.9%", "68.8%+87.5%", "74.8%+95.2%", "80.8%+102.9%", "86.9%+110.6%", "93.5%+119.0%", "101.1%+128.6%", "110.0%+139.9%", "118.8%+151.3%", "127.7%+162.6%", "137.4%+174.9%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["130%", "140%", "150%", "163%", "173%", "183%", "196%", "209%", "222%", "235%", "248%", "261%", "277%", "293%", "310%"]}, "E刹那之花伤害": {"name": "E刹那之花伤害", "type": "防御", "plus": 1, "value": ["134%", "144%", "154%", "167%", "177%", "187%", "200%", "214%", "227%", "240%", "254%", "267%", "284%", "301%", "317%"]}, "Q爆发伤害": {"name": "Q爆发伤害", "type": "攻击力", "plus": 1, "value": ["367%", "395%", "422%", "459%", "487%", "514%", "551%", "588%", "624%", "661%", "698%", "734%", "780%", "826%", "872%"]}, "Q生灭之花伤害": {"name": "Q生灭之花伤害", "type": "攻击力", "plus": 1, "value": ["72.0%", "77.4%", "82.8%", "90.0%", "95.4%", "100.8%", "108.0%", "115.2%", "122.4%", "129.6%", "136.8%", "144.0%", "153.0%", "162.0%", "171.0%"]}}, "迪奥娜": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["36.1%", "39.1%", "42.0%", "46.2%", "49.1%", "52.5%", "57.1%", "61.7%", "66.4%", "71.4%", "77.2%", "84.0%", "90.8%", "97.5%", "105.0%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "253%", "270%", "287%", "304%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E猫爪伤害": {"name": "E猫爪伤害", "type": "攻击力", "plus": 1, "value": ["41.9%", "45.1%", "48.2%", "52.4%", "55.5%", "58.7%", "62.9%", "67.1%", "71.3%", "75.5%", "79.6%", "83.8%", "89.1%", "94.3%", "99.6%"]}, "E护盾基础吸收量": {"name": "E护盾基础吸收量", "type": "生命值", "plus": 1, "value": ["7.2%+692.81", "7.7%+762.10", "8.3%+837.16", "9.0%+918.00", "9.5%+1004.61", "10.1%+1097.00", "10.8%+1195.16", "11.5%+1299.10", "12.2%+1408.81", "13.0%+1524.29", "13.7%+1645.55", "14.4%+1772.58", "15.3%+1905.39", "16.2%+2043.97", "17.1%+2188.32"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["80%", "86%", "92%", "100%", "106%", "112%", "120%", "128%", "136%", "144%", "152%", "160%", "170%", "180%", "190%"]}, "Q领域持续伤害": {"name": "Q领域持续伤害", "type": "攻击力", "plus": 1, "value": ["52.6%", "56.6%", "60.5%", "65.8%", "69.7%", "73.7%", "79.0%", "84.2%", "89.5%", "94.8%", "100.0%", "105.3%", "111.9%", "118.4%", "125.0%"]}, "Q持续治疗量": {"name": "Q持续治疗量", "type": "生命值", "plus": 1, "value": ["5.34%+513.19", "5.74%+564.52", "6.14%+620.12", "6.67%+680.00", "7.07%+744.16", "7.47%+812.59", "8.00%+885.30", "8.54%+962.29", "9.07%+1043.56", "9.60%+1129.10", "10.14%+1218.92", "10.67%+1313.02", "11.34%+1411.40", "12.01%+1514.05", "12.67%+1620.98"]}}, "莫娜": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["37.6%", "40.4%", "43.2%", "47.0%", "49.8%", "52.6%", "56.4%", "60.2%", "63.9%", "67.7%", "71.4%", "75.2%", "79.9%", "84.6%", "89.3%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["150%", "161%", "172%", "187%", "198%", "210%", "225%", "240%", "255%", "269%", "285%", "305%", "326%", "346%", "367%"]}, "A重击伤害(蒸发)": {"name": "A重击伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["150%", "161%", "172%", "187%", "198%", "210%", "225%", "240%", "255%", "269%", "285%", "305%", "326%", "346%", "367%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E持续伤害": {"name": "E持续伤害", "type": "攻击力", "plus": 1, "value": ["32.0%", "34.4%", "36.8%", "40.0%", "42.4%", "44.8%", "48.0%", "51.2%", "54.4%", "57.6%", "60.8%", "64.0%", "68.0%", "72.0%", "76.0%"]}, "E爆裂伤害": {"name": "E爆裂伤害", "type": "攻击力", "plus": 1, "value": ["133%", "143%", "153%", "166%", "176%", "186%", "199%", "212%", "226%", "239%", "252%", "266%", "282%", "299%", "315%"]}, "Q泡影破裂伤害": {"name": "Q泡影破裂伤害", "type": "攻击力", "plus": 1, "value": ["442%", "476%", "509%", "553%", "586%", "619%", "664%", "708%", "752%", "796%", "841%", "885%", "940%", "995%", "1051%"]}, "Q泡影破裂伤害(蒸发)": {"name": "Q泡影破裂伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["442%", "476%", "509%", "553%", "586%", "619%", "664%", "708%", "752%", "796%", "841%", "885%", "940%", "995%", "1051%"]}, "Q伤害加成": {"name": "Q伤害加成", "type": "攻击力", "plus": 1, "value": ["42%", "44%", "46%", "48%", "50%", "52%", "54%", "56%", "58%", "60%", "60%", "60%", "60%", "60%", "60%"]}}, "刻晴": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["41.0%", "44.4%", "47.7%", "52.5%", "55.8%", "59.6%", "64.9%", "70.1%", "75.4%", "81.1%", "86.8%", "92.5%", "98.3%", "104.0%", "109.7%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["76.8%+86.0%", "83.0%+93.0%", "89.3%+100.0%", "98.2%+110.0%", "104.5%+117.0%", "111.6%+125.0%", "121.4%+136.0%", "131.3%+147.0%", "141.1%+158.0%", "151.8%+170.0%", "162.5%+182.0%", "173.2%+194.0%", "184.0%+206.0%", "194.7%+218.0%", "205.4%+230.0%"]}, "A重击伤害(超激化)": {"name": "A重击伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["76.8%+86.0%", "83.0%+93.0%", "89.3%+100.0%", "98.2%+110.0%", "104.5%+117.0%", "111.6%+125.0%", "121.4%+136.0%", "131.3%+147.0%", "141.1%+158.0%", "151.8%+170.0%", "162.5%+182.0%", "173.2%+194.0%", "184.0%+206.0%", "194.7%+218.0%", "205.4%+230.0%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E雷楔伤害": {"name": "E雷楔伤害", "type": "攻击力", "plus": 1, "value": ["50.4%", "54.2%", "58.0%", "63.0%", "66.8%", "70.6%", "75.6%", "80.6%", "85.7%", "90.7%", "95.8%", "100.8%", "107.1%", "113.4%", "119.7%"]}, "E雷楔伤害(超激化)": {"name": "E雷楔伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["50.4%", "54.2%", "58.0%", "63.0%", "66.8%", "70.6%", "75.6%", "80.6%", "85.7%", "90.7%", "95.8%", "100.8%", "107.1%", "113.4%", "119.7%"]}, "E斩击伤害": {"name": "E斩击伤害", "type": "攻击力", "plus": 1, "value": ["168%", "181%", "193%", "210%", "223%", "235%", "252%", "269%", "286%", "302%", "319%", "336%", "357%", "378%", "399%"]}, "E斩击伤害(超激化)": {"name": "E斩击伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["168%", "181%", "193%", "210%", "223%", "235%", "252%", "269%", "286%", "302%", "319%", "336%", "357%", "378%", "399%"]}, "E雷暴连斩伤害": {"name": "E雷暴连斩伤害", "type": "攻击力", "plus": 2, "value": ["84.0%", "90.3%", "96.6%", "105.0%", "111.3%", "117.6%", "126.0%", "134.4%", "142.8%", "151.2%", "159.6%", "168.0%", "178.5%", "189.0%", "199.5%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["88.0%", "94.6%", "101.2%", "110.0%", "116.6%", "123.2%", "132.0%", "140.8%", "149.6%", "158.4%", "167.2%", "176.0%", "187.0%", "198.0%", "209.0%"]}, "Q伤害(超激化)": {"name": "Q伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["88.0%", "94.6%", "101.2%", "110.0%", "116.6%", "123.2%", "132.0%", "140.8%", "149.6%", "158.4%", "167.2%", "176.0%", "187.0%", "198.0%", "209.0%"]}, "Q连斩伤害": {"name": "Q连斩伤害", "type": "攻击力", "plus": 8, "value": ["24.0%", "25.8%", "27.6%", "30.0%", "31.8%", "33.6%", "36.0%", "38.4%", "40.8%", "43.2%", "45.6%", "48.0%", "51.0%", "54.0%", "57.0%"]}, "Q连斩伤害(超激化*2)": {"name": "Q连斩伤害(超激化*2)", "type": "攻击力", "plus": 8, "value": ["24.0%", "25.8%", "27.6%", "30.0%", "31.8%", "33.6%", "36.0%", "38.4%", "40.8%", "43.2%", "45.6%", "48.0%", "51.0%", "54.0%", "57.0%"]}, "Q最后一击伤害": {"name": "Q最后一击伤害", "type": "攻击力", "plus": 1, "value": ["189%", "203%", "217%", "236%", "250%", "264%", "283%", "302%", "321%", "340%", "359%", "378%", "401%", "425%", "448%"]}, "Q最后一击伤害(超激化)": {"name": "Q最后一击伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["189%", "203%", "217%", "236%", "250%", "264%", "283%", "302%", "321%", "340%", "359%", "378%", "401%", "425%", "448%"]}}, "砂糖": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["33.5%", "36.0%", "38.5%", "41.8%", "44.3%", "46.8%", "50.2%", "53.5%", "56.9%", "60.2%", "63.6%", "66.9%", "71.1%", "75.3%", "79.5%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["120%", "129%", "138%", "150%", "159%", "168%", "180%", "192%", "204%", "216%", "228%", "240%", "255%", "270%", "285%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["211%", "227%", "243%", "264%", "280%", "296%", "317%", "338%", "359%", "380%", "401%", "422%", "449%", "475%", "502%"]}, "Q持续伤害": {"name": "Q持续伤害", "type": "攻击力", "plus": 1, "value": ["148%", "159%", "170%", "185%", "196%", "207%", "222%", "237%", "252%", "266%", "281%", "296%", "314%", "333%", "352%"]}, "Q附加元素伤害": {"name": "Q附加元素伤害", "type": "攻击力", "plus": 1, "value": ["44.0%", "47.3%", "50.6%", "55.0%", "58.3%", "61.6%", "66.0%", "70.4%", "74.8%", "79.2%", "83.6%", "88.0%", "93.5%", "99.0%", "104.5%"]}}, "辛焱": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["76.5%", "82.8%", "89.0%", "97.9%", "104.1%", "111.2%", "121.0%", "130.8%", "140.6%", "151.3%", "162.0%", "172.7%", "183.3%", "194.0%", "204.7%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["62.5%", "67.6%", "72.7%", "80.0%", "85.1%", "90.9%", "98.9%", "106.9%", "114.9%", "123.6%", "132.4%", "141.1%", "149.8%", "158.5%", "167.3%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["113%", "122%", "132%", "145%", "154%", "164%", "179%", "193%", "208%", "224%", "239%", "255%", "271%", "287%", "302%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "394%", "420%", "446%", "472%", "498%"]}, "E挥舞伤害": {"name": "E挥舞伤害", "type": "攻击力", "plus": 1, "value": ["170%", "182%", "195%", "212%", "225%", "237%", "254%", "271%", "288%", "305%", "322%", "339%", "360%", "382%", "403%"]}, "E一级护盾吸收量": {"name": "E一级护盾吸收量", "type": "防御", "plus": 1, "value": ["104.0%+500.55", "111.8%+550.61", "119.6%+604.85", "130.1%+663.26", "137.9%+725.83", "145.7%+792.58", "156.1%+863.50", "166.5%+938.60", "176.9%+1017.86", "187.3%+1101.30", "197.7%+1188.91", "208.1%+1280.69", "221.1%+1376.64", "234.1%+1476.77", "247.1%+1581.06"]}, "E二级护盾吸收量": {"name": "E二级护盾吸收量", "type": "防御", "plus": 1, "value": ["122.4%+588.89", "131.6%+647.78", "140.8%+711.59", "153.0%+780.30", "162.2%+853.92", "171.4%+932.45", "183.6%+1015.89", "195.8%+1104.23", "208.1%+1197.49", "220.3%+1295.65", "232.6%+1398.72", "244.8%+1506.69", "260.1%+1619.58", "275.4%+1737.37", "290.7%+1860.07"]}, "E三级护盾吸收量": {"name": "E三级护盾吸收量", "type": "防御", "plus": 1, "value": ["144.0%+692.81", "154.8%+762.10", "165.6%+837.16", "180.0%+918.00", "190.8%+1004.61", "201.6%+1097.00", "216.0%+1195.16", "230.4%+1299.10", "244.8%+1408.81", "259.2%+1524.29", "273.6%+1645.55", "288.0%+1772.58", "306.0%+1905.39", "324.0%+2043.97", "342.0%+2188.32"]}, "E持续伤害": {"name": "E持续伤害", "type": "攻击力", "plus": 1, "value": ["33.6%", "36.1%", "38.6%", "42.0%", "44.5%", "47.0%", "50.4%", "53.8%", "57.1%", "60.5%", "63.8%", "67.2%", "71.4%", "75.6%", "79.8%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["341%", "366%", "392%", "426%", "452%", "477%", "511%", "545%", "579%", "613%", "648%", "682%", "724%", "767%", "809%"]}, "Q火元素持续伤害": {"name": "Q火元素持续伤害", "type": "攻击力", "plus": 1, "value": ["40%", "43%", "46%", "50%", "53%", "56%", "60%", "64%", "68%", "72%", "76%", "80%", "85%", "90%", "95%"]}}, "罗莎莉亚": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["52.5%", "56.7%", "61.0%", "67.1%", "71.4%", "76.2%", "83.0%", "89.7%", "96.4%", "103.7%", "111.0%", "118.3%", "125.7%", "133.0%", "140.3%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["137%", "148%", "159%", "175%", "186%", "199%", "216%", "234%", "251%", "270%", "289%", "308%", "328%", "347%", "366%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["58%+136%", "63%+146%", "67%+156%", "73%+170%", "77%+180%", "82%+190%", "88%+204%", "93%+218%", "99%+231%", "105%+245%", "111%+258%", "117%+272%", "124%+289%", "131%+306%", "139%+323%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["104%+152%", "112%+163%", "120%+175%", "130%+190%", "138%+201%", "146%+213%", "156%+228%", "166%+243%", "177%+258%", "187%+274%", "198%+289%", "208%+304%", "221%+323%", "234%+342%", "247%+361%"]}, "Q冰枪持续伤害": {"name": "Q冰枪持续伤害", "type": "攻击力", "plus": 1, "value": ["132%", "142%", "152%", "165%", "175%", "185%", "198%", "211%", "224%", "238%", "251%", "264%", "281%", "297%", "313%"]}}, "胡桃": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["46.9%", "50.1%", "53.3%", "57.5%", "60.7%", "64.5%", "69.3%", "74.1%", "78.9%", "83.6%", "88.4%", "93.2%", "98.0%", "102.8%", "107.6%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["136.0%", "145.2%", "154.5%", "166.9%", "176.1%", "186.9%", "200.9%", "214.8%", "228.7%", "242.6%", "256.5%", "270.4%", "284.3%", "298.2%", "312.1%"]}, "A重击伤害(蒸发)": {"name": "A重击伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["136.0%", "145.2%", "154.5%", "166.9%", "176.1%", "186.9%", "200.9%", "214.8%", "228.7%", "242.6%", "256.5%", "270.4%", "284.3%", "298.2%", "312.1%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["163%", "175%", "186%", "201%", "212%", "225%", "241%", "258%", "275%", "292%", "308%", "325%", "342%", "358%", "375%"]}, "E血梅香伤害": {"name": "E血梅香伤害", "type": "攻击力", "plus": 1, "value": ["64%", "69%", "74%", "80%", "85%", "90%", "96%", "102%", "109%", "115%", "122%", "128%", "136%", "144%", "152%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["303%", "321%", "340%", "363%", "381%", "400%", "423%", "447%", "470%", "494%", "518%", "541%", "565%", "588%", "612%"]}, "Q低血量时伤害": {"name": "Q低血量时伤害", "type": "攻击力", "plus": 1, "value": ["379%", "402%", "424%", "454%", "477%", "499%", "529%", "558%", "588%", "617%", "647%", "676%", "706%", "735%", "765%"]}, "Q低血量时伤害(蒸发)": {"name": "Q低血量时伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["379%", "402%", "424%", "454%", "477%", "499%", "529%", "558%", "588%", "617%", "647%", "676%", "706%", "735%", "765%"]}, "Q治疗量": {"name": "Q治疗量", "type": "生命值", "plus": 1, "value": ["6.26%", "6.64%", "7.01%", "7.50%", "7.87%", "8.25%", "8.74%", "9.22%", "9.71%", "10.20%", "10.69%", "11.17%", "11.66%", "12.15%", "12.64%"]}, "Q低血量时治疗量": {"name": "Q低血量时治疗量", "type": "生命值", "plus": 1, "value": ["8.35%", "8.85%", "9.35%", "10.00%", "10.50%", "11.00%", "11.65%", "12.30%", "12.95%", "13.60%", "14.25%", "14.90%", "15.55%", "16.20%", "16.85%"]}}, "枫原万叶": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["45.0%", "48.6%", "52.3%", "57.5%", "61.2%", "65.4%", "71.1%", "76.9%", "82.6%", "88.9%", "96.1%", "104.6%", "113.0%", "121.5%", "130.7%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["43.0%+74.6%", "46.5%+80.7%", "50.0%+86.8%", "55.0%+95.5%", "58.5%+101.6%", "62.5%+108.5%", "68.0%+118.0%", "73.5%+127.6%", "79.0%+137.1%", "85.0%+147.6%", "91.9%+159.5%", "100.0%+173.5%", "108.0%+187.6%", "116.1%+201.6%", "125.0%+216.9%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["204%", "221%", "238%", "261%", "278%", "297%", "323%", "349%", "375%", "404%", "433%", "461%", "490%", "518%", "547%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["192%", "206%", "221%", "240%", "254%", "269%", "288%", "307%", "326%", "346%", "365%", "384%", "408%", "432%", "456%"]}, "E长按伤害": {"name": "E长按伤害", "type": "攻击力", "plus": 1, "value": ["261%", "280%", "300%", "326%", "346%", "365%", "391%", "417%", "443%", "469%", "496%", "522%", "554%", "587%", "619%"]}, "Q斩击伤害": {"name": "Q斩击伤害", "type": "攻击力", "plus": 1, "value": ["262%", "282%", "302%", "328%", "348%", "367%", "394%", "420%", "446%", "472%", "499%", "525%", "558%", "590%", "623%"]}, "Q持续伤害": {"name": "Q持续伤害", "type": "攻击力", "plus": 1, "value": ["120%", "129%", "138%", "150%", "159%", "168%", "180%", "192%", "204%", "216%", "228%", "240%", "255%", "270%", "285%"]}, "Q附加元素伤害": {"name": "Q附加元素伤害", "type": "攻击力", "plus": 1, "value": ["36%", "39%", "41%", "45%", "48%", "50%", "54%", "58%", "61%", "65%", "68%", "72%", "76%", "81%", "86%"]}}, "烟绯": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["58.3%", "62.7%", "67.1%", "72.9%", "77.3%", "81.7%", "87.5%", "93.3%", "99.2%", "105.0%", "110.8%", "116.7%", "124.0%", "131.3%", "138.6%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["168%", "178%", "188%", "201%", "211%", "221%", "234%", "247%", "260%", "273%", "286%", "299%", "312%", "325%", "338%"]}, "A重击伤害(蒸发)": {"name": "A重击伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["168%", "178%", "188%", "201%", "211%", "221%", "234%", "247%", "260%", "273%", "286%", "299%", "312%", "325%", "338%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["170%", "182%", "195%", "212%", "225%", "237%", "254%", "271%", "288%", "305%", "322%", "339%", "360%", "382%", "403%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["182%", "196%", "210%", "228%", "242%", "255%", "274%", "292%", "310%", "328%", "347%", "365%", "388%", "410%", "433%"]}}, "宵宫": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 2, "value": ["35.6%", "38.1%", "40.5%", "43.7%", "46.2%", "49.0%", "52.6%", "56.3%", "59.9%", "63.6%", "67.2%", "70.9%", "74.5%", "78.2%", "81.8%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A焰硝矢伤害": {"name": "A焰硝矢伤害", "type": "攻击力", "plus": 1, "value": ["16%", "18%", "19%", "20%", "22%", "23%", "25%", "26%", "28%", "30%", "31%", "33%", "35%", "37%", "39%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["127%", "137%", "146%", "159%", "169%", "178%", "191%", "204%", "216%", "229%", "242%", "254%", "270%", "286%", "302%"]}, "Q琉金火光爆炸伤害": {"name": "Q琉金火光爆炸伤害", "type": "攻击力", "plus": 1, "value": ["122%", "131%", "140%", "152%", "162%", "171%", "183%", "195%", "207%", "220%", "232%", "244%", "259%", "274%", "290%"]}}, "托马": {"A元素反应(烈绽放)": {"name": "A元素反应(烈绽放)", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.4%", "48.0%", "51.6%", "56.8%", "60.4%", "64.5%", "70.2%", "75.9%", "81.6%", "87.8%", "93.9%", "100.1%", "106.3%", "112.5%", "118.7%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["113%", "122%", "131%", "144%", "153%", "164%", "178%", "193%", "207%", "223%", "239%", "254%", "270%", "286%", "302%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["146%", "157%", "168%", "183%", "194%", "205%", "220%", "234%", "249%", "264%", "278%", "293%", "311%", "329%", "348%"]}, "E护盾吸收量": {"name": "E护盾吸收量", "type": "生命值", "plus": 1, "value": ["7.2%+693.33", "7.7%+762.68", "8.3%+837.80", "9.0%+918.70", "9.5%+1005.38", "10.1%+1097.84", "10.8%+1196.07", "11.5%+1300.09", "12.2%+1409.88", "13.0%+1525.45", "13.7%+1646.80", "14.4%+1773.93", "15.3%+1906.84", "16.2%+2045.53", "17.1%+2189.99"]}, "E护盾吸收量上限": {"name": "E护盾吸收量上限", "type": "生命值", "plus": 1, "value": ["19.6%+1887.42", "21.1%+2076.19", "22.5%+2280.69", "24.5%+2500.92", "26.0%+2736.88", "27.4%+2988.57", "29.4%+3255.99", "31.4%+3539.14", "33.3%+3838.02", "35.3%+4152.64", "37.2%+4482.98", "39.2%+4829.06", "41.7%+5190.86", "44.1%+5568.40", "46.5%+5961.67"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["88%", "95%", "101%", "110%", "117%", "123%", "132%", "141%", "150%", "158%", "167%", "176%", "187%", "198%", "209%"]}, "Q炽火崩破伤害": {"name": "Q炽火崩破伤害", "type": "攻击力", "plus": 1, "value": ["58%", "62%", "67%", "73%", "77%", "81%", "87%", "93%", "99%", "104%", "110%", "116%", "123%", "130%", "138%"]}, "Q护盾吸收量": {"name": "Q护盾吸收量", "type": "生命值", "plus": 1, "value": ["1.1%+110.03", "1.2%+121.04", "1.3%+132.96", "1.4%+145.80", "1.5%+159.56", "1.6%+174.23", "1.7%+189.82", "1.8%+206.33", "1.9%+223.75", "2.1%+242.09", "2.2%+261.35", "2.3%+281.53", "2.4%+302.62", "2.6%+324.63", "2.7%+347.56"]}}, "优菈": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["89.7%", "97.0%", "104.3%", "114.8%", "122.1%", "130.4%", "141.9%", "153.4%", "164.9%", "177.4%", "191.7%", "208.6%", "225.5%", "242.3%", "260.7%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["68.8%", "74.4%", "80.0%", "88.0%", "93.6%", "100.0%", "108.8%", "117.6%", "126.4%", "136.0%", "147.0%", "159.9%", "172.9%", "185.8%", "199.9%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["124%", "135%", "145%", "159%", "169%", "181%", "197%", "213%", "229%", "246%", "266%", "289%", "313%", "336%", "361%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "398%", "433%", "468%", "503%", "541%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["146%", "157%", "168%", "183%", "194%", "205%", "220%", "234%", "249%", "264%", "278%", "293%", "311%", "329%", "348%"]}, "E长按伤害": {"name": "E长按伤害", "type": "攻击力", "plus": 1, "value": ["246%", "264%", "282%", "307%", "325%", "344%", "368%", "393%", "418%", "442%", "467%", "491%", "522%", "553%", "583%"]}, "E冰涡之剑伤害": {"name": "E冰涡之剑伤害", "type": "攻击力", "plus": 1, "value": ["96%", "103%", "110%", "120%", "127%", "134%", "144%", "154%", "163%", "173%", "182%", "192%", "204%", "216%", "228%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["246%", "264%", "282%", "307%", "325%", "344%", "368%", "393%", "418%", "442%", "467%", "491%", "522%", "553%", "583%"]}, "Q光降之剑基础伤害": {"name": "Q光降之剑基础伤害", "type": "攻击力", "plus": 1, "value": ["367.0%", "396.9%", "426.8%", "469.5%", "499.4%", "533.5%", "580.4%", "627.4%", "674.3%", "725.6%", "784.2%", "853.3%", "922.3%", "991.3%", "1066.6%"]}, "Q光降之剑基础伤害(13层)": {"name": "Q光降之剑基础伤害(13层)", "type": "攻击力", "plus": 1, "value": ["367.0%", "396.9%", "426.8%", "469.5%", "499.4%", "533.5%", "580.4%", "627.4%", "674.3%", "725.6%", "784.2%", "853.3%", "922.3%", "991.3%", "1066.6%"]}, "Q光降之剑基础伤害(24层)": {"name": "Q光降之剑基础伤害(24层)", "type": "攻击力", "plus": 1, "value": ["367.0%", "396.9%", "426.8%", "469.5%", "499.4%", "533.5%", "580.4%", "627.4%", "674.3%", "725.6%", "784.2%", "853.3%", "922.3%", "991.3%", "1066.6%"]}, "Q每层能量伤害": {"name": "Q每层能量伤害", "type": "攻击力", "plus": 1, "value": ["75.0%", "81.1%", "87.2%", "95.9%", "102.0%", "109.0%", "118.6%", "128.2%", "137.8%", "148.2%", "160.2%", "174.3%", "188.4%", "202.5%", "217.9%"]}}, "雷电将军": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["39.6%", "42.9%", "46.1%", "50.7%", "53.9%", "57.6%", "62.7%", "67.8%", "72.8%", "78.4%", "84.7%", "92.2%", "99.6%", "107.1%", "115.2%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["99.6%", "107.7%", "115.8%", "127.4%", "135.5%", "144.7%", "157.5%", "170.2%", "183.0%", "196.9%", "212.8%", "231.5%", "250.2%", "269.0%", "289.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["117.2%", "126.0%", "134.8%", "146.5%", "155.3%", "164.1%", "175.8%", "187.5%", "199.2%", "211.0%", "222.7%", "234.4%", "249.0%", "263.7%", "278.3%"]}, "E协同攻击伤害": {"name": "E协同攻击伤害", "type": "攻击力", "plus": 1, "value": ["42.0%", "45.1%", "48.3%", "52.5%", "55.7%", "58.8%", "63.0%", "67.2%", "71.4%", "75.6%", "79.8%", "84.0%", "89.2%", "94.5%", "99.8%"]}, "E协同攻击伤害(超激化)": {"name": "E协同攻击伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["42.0%", "45.1%", "48.3%", "52.5%", "55.7%", "58.8%", "63.0%", "67.2%", "71.4%", "75.6%", "79.8%", "84.0%", "89.2%", "94.5%", "99.8%"]}, "Q梦想一刀基础伤害": {"name": "Q梦想一刀基础伤害", "type": "攻击力", "plus": 1, "value": ["401%", "431%", "461%", "501%", "531%", "561%", "601%", "641%", "681%", "721%", "762%", "802%", "852%", "902%", "952%"]}, "Q梦想一刀基础伤害(满愿力)": {"name": "Q梦想一刀基础伤害(满愿力)", "type": "攻击力", "plus": 1, "value": ["401%", "431%", "461%", "501%", "531%", "561%", "601%", "641%", "681%", "721%", "762%", "802%", "852%", "902%", "952%"]}, "Q一段伤害": {"name": "Q一段伤害", "type": "攻击力", "plus": 1, "value": ["44.7%", "47.8%", "50.8%", "54.9%", "58.0%", "61.5%", "66.1%", "70.7%", "75.2%", "79.8%", "84.4%", "89.0%", "93.5%", "98.1%", "102.7%"]}, "Q一段伤害(满愿力)": {"name": "Q一段伤害(满愿力)", "type": "攻击力", "plus": 1, "value": ["44.7%", "47.8%", "50.8%", "54.9%", "58.0%", "61.5%", "66.1%", "70.7%", "75.2%", "79.8%", "84.4%", "89.0%", "93.5%", "98.1%", "102.7%"]}, "Q重击伤害": {"name": "Q重击伤害", "type": "攻击力", "plus": 1, "value": ["61.6%+74.4%", "65.8%+79.4%", "70.0%+84.5%", "75.6%+91.3%", "79.8%+96.3%", "84.7%+102.2%", "91.0%+109.9%", "97.3%+117.5%", "103.6%+125.1%", "109.9%+132.7%", "116.2%+140.3%", "122.5%+147.9%", "128.8%+155.5%", "135.1%+163.1%", "141.4%+170.7%"]}, "Q重击伤害(满愿力)": {"name": "Q重击伤害(满愿力)", "type": "攻击力", "plus": 1, "value": ["61.6%+74.4%", "65.8%+79.4%", "70.0%+84.5%", "75.6%+91.3%", "79.8%+96.3%", "84.7%+102.2%", "91.0%+109.9%", "97.3%+117.5%", "103.6%+125.1%", "109.9%+132.7%", "116.2%+140.3%", "122.5%+147.9%", "128.8%+155.5%", "135.1%+163.1%", "141.4%+170.7%"]}, "Q高空下落伤害": {"name": "Q高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}}, "早柚": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["72.2%", "78.1%", "84.0%", "92.4%", "98.3%", "105.0%", "114.2%", "123.5%", "132.7%", "142.8%", "154.3%", "167.9%", "181.5%", "195.1%", "209.9%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["62.5%", "67.6%", "72.7%", "80.0%", "85.1%", "90.9%", "98.9%", "106.9%", "114.9%", "123.6%", "133.6%", "145.4%", "157.2%", "168.9%", "181.7%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["113%", "122%", "132%", "145%", "154%", "164%", "179%", "193%", "208%", "224%", "242%", "263%", "284%", "305%", "329%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "394%", "420%", "446%", "472%", "498%"]}, "E风风轮伤害": {"name": "E风风轮伤害", "type": "攻击力", "plus": 1, "value": ["36.0%", "38.7%", "41.4%", "45.0%", "47.7%", "50.4%", "54.0%", "57.6%", "61.2%", "64.8%", "68.4%", "72.0%", "76.5%", "81.0%", "85.5%"]}, "E风风轮舞踢点按伤害": {"name": "E风风轮舞踢点按伤害", "type": "攻击力", "plus": 1, "value": ["158.4%", "170.3%", "182.2%", "198.0%", "209.9%", "221.8%", "237.6%", "253.4%", "269.3%", "285.1%", "301.0%", "316.8%", "336.6%", "356.4%", "376.2%"]}, "E风风轮舞踢长按伤害": {"name": "E风风轮舞踢长按伤害", "type": "攻击力", "plus": 1, "value": ["217.6%", "233.9%", "250.2%", "272.0%", "288.3%", "304.6%", "326.4%", "348.2%", "369.9%", "391.7%", "413.4%", "435.2%", "462.4%", "489.6%", "516.8%"]}, "E风风轮附带元素伤害": {"name": "E风风轮附带元素伤害", "type": "攻击力", "plus": 1, "value": ["16.8%", "18.1%", "19.3%", "21.0%", "22.3%", "23.5%", "25.2%", "26.9%", "28.6%", "30.2%", "31.9%", "33.6%", "35.7%", "37.8%", "39.9%"]}, "E风风轮舞踢长按附带元素伤害": {"name": "E风风轮舞踢长按附带元素伤害", "type": "攻击力", "plus": 1, "value": ["76.2%", "81.9%", "87.6%", "95.2%", "100.9%", "106.6%", "114.2%", "121.9%", "129.5%", "137.1%", "144.7%", "152.3%", "161.8%", "171.4%", "180.9%"]}, "Q发动伤害": {"name": "Q发动伤害", "type": "攻击力", "plus": 1, "value": ["117%", "126%", "134%", "146%", "155%", "164%", "175%", "187%", "199%", "210%", "222%", "234%", "248%", "263%", "277%"]}, "Q发动治疗量": {"name": "Q发动治疗量", "type": "攻击", "plus": 1, "value": ["92.2%+577.34", "99.1%+635.08", "106.0%+697.63", "115.2%+765.00", "122.1%+837.18", "129.0%+914.17", "138.2%+995.97", "147.5%+1082.58", "156.7%+1174.01", "165.9%+1270.24", "175.1%+1371.29", "184.3%+1477.15", "195.8%+1587.82", "207.4%+1703.31", "218.9%+1823.60"]}, "Q不倒貉貉伤害": {"name": "Q不倒貉貉伤害", "type": "攻击力", "plus": 1, "value": ["52%", "56%", "60%", "65%", "69%", "73%", "78%", "83%", "88%", "94%", "99%", "104%", "111%", "117%", "124%"]}, "Q不倒貉貉治疗量": {"name": "Q不倒貉貉治疗量", "type": "攻击", "plus": 1, "value": ["79.9%+500.36", "85.9%+550.40", "91.9%+604.62", "99.8%+663.00", "105.8%+725.55", "111.8%+792.28", "119.8%+863.17", "127.8%+938.24", "135.8%+1017.47", "143.8%+1100.88", "151.8%+1188.45", "159.7%+1280.20", "169.7%+1376.11", "179.7%+1476.20", "189.7%+1580.45"]}}, "珊瑚宫心海": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["68.4%", "73.5%", "78.6%", "85.5%", "90.6%", "95.7%", "102.6%", "109.4%", "116.2%", "123.1%", "129.9%", "136.8%", "145.3%", "153.8%", "162.4%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["148%", "159%", "171%", "185%", "197%", "208%", "222%", "237%", "252%", "267%", "282%", "297%", "315%", "334%", "352%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E治疗量": {"name": "E治疗量", "type": "生命值", "plus": 1, "value": ["4.4%+423.71", "4.7%+466.08", "5.1%+511.99", "5.5%+561.43", "5.8%+614.40", "6.2%+670.90", "6.6%+730.94", "7.0%+794.50", "7.5%+861.60", "7.9%+932.22", "8.4%+1006.38", "8.8%+1084.07", "9.4%+1165.30", "9.9%+1250.05", "10.5%+1338.33"]}, "E波纹伤害": {"name": "E波纹伤害", "type": "攻击力", "plus": 1, "value": ["109.2%", "117.4%", "125.6%", "136.5%", "144.7%", "152.9%", "163.8%", "174.7%", "185.6%", "196.5%", "207.5%", "218.4%", "232.0%", "245.7%", "259.3%"]}, "Q伤害": {"name": "Q伤害", "type": "生命值", "plus": 1, "value": ["10.4%", "11.2%", "12.0%", "13.0%", "13.8%", "14.6%", "15.6%", "16.7%", "17.7%", "18.7%", "19.8%", "20.8%", "22.1%", "23.4%", "24.7%"]}, "Q命中治疗量": {"name": "Q命中治疗量", "type": "生命值", "plus": 1, "value": ["0.81%+77.04", "0.87%+84.74", "0.93%+93.09", "1.01%+102.08", "1.07%+111.71", "1.13%+121.98", "1.21%+132.90", "1.29%+144.45", "1.37%+156.65", "1.45%+169.50", "1.54%+182.98", "1.62%+197.10", "1.72%+211.87", "1.82%+227.28", "1.92%+243.33"]}}, "五郎": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["37.8%", "40.8%", "43.9%", "48.3%", "51.4%", "54.9%", "59.7%", "64.5%", "69.4%", "74.6%", "79.9%", "85.2%", "90.4%", "95.7%", "101.0%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["107.2%", "115.2%", "123.3%", "134.0%", "142.0%", "150.1%", "160.8%", "171.5%", "182.2%", "193.0%", "203.7%", "214.4%", "227.8%", "241.2%", "254.6%"]}, "E岩元素伤害加成": {"name": "E岩元素伤害加成", "type": "攻击力", "plus": 1, "value": ["15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%", "15%"]}, "Q伤害": {"name": "Q伤害", "type": "防御", "plus": 1, "value": ["98%", "106%", "113%", "123%", "130%", "138%", "147%", "157%", "167%", "177%", "187%", "196%", "209%", "221%", "233%"]}, "Q岩晶崩破伤害": {"name": "Q岩晶崩破伤害", "type": "防御", "plus": 1, "value": ["61%", "66%", "70%", "77%", "81%", "86%", "92%", "98%", "104%", "110%", "116%", "123%", "130%", "138%", "146%"]}}, "九条裟罗": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["36.9%", "39.9%", "42.9%", "47.2%", "50.2%", "53.6%", "58.3%", "63.1%", "67.8%", "72.9%", "78.1%", "83.2%", "88.4%", "93.5%", "98.7%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E天狗咒雷·伏 伤害": {"name": "E天狗咒雷·伏 伤害", "type": "攻击力", "plus": 1, "value": ["125.8%", "135.2%", "144.6%", "157.2%", "166.6%", "176.1%", "188.6%", "201.2%", "213.8%", "226.4%", "238.9%", "251.5%", "267.2%", "283.0%", "298.7%"]}, "Q天狗咒雷·金刚坏 伤害": {"name": "Q天狗咒雷·金刚坏 伤害", "type": "攻击力", "plus": 1, "value": ["409.6%", "440.3%", "471.0%", "512.0%", "542.7%", "573.4%", "614.4%", "655.4%", "696.3%", "737.3%", "778.2%", "819.2%", "870.4%", "921.6%", "972.8%"]}, "Q天狗咒雷·雷砾 伤害": {"name": "Q天狗咒雷·雷砾 伤害", "type": "攻击力", "plus": 1, "value": ["34.1%", "36.7%", "39.2%", "42.6%", "45.2%", "47.8%", "51.2%", "54.6%", "58.0%", "61.4%", "64.8%", "68.2%", "72.5%", "76.8%", "81.0%"]}}, "荒泷一斗": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["79.2%", "85.7%", "92.1%", "101.3%", "107.8%", "115.2%", "125.3%", "135.4%", "145.6%", "156.6%", "169.3%", "184.2%", "199.1%", "214.0%", "230.2%"]}, "A荒泷逆袈裟连斩伤害": {"name": "A荒泷逆袈裟连斩伤害", "type": "攻击力", "plus": 1, "value": ["91.2%", "98.6%", "106.0%", "116.6%", "124.0%", "132.5%", "144.2%", "155.8%", "167.5%", "180.2%", "194.8%", "211.9%", "229.1%", "246.2%", "264.9%"]}, "A荒泷逆袈裟终结伤害": {"name": "A荒泷逆袈裟终结伤害", "type": "攻击力", "plus": 1, "value": ["190.9%", "206.5%", "222.0%", "244.2%", "259.7%", "277.5%", "301.9%", "326.3%", "350.8%", "377.4%", "407.9%", "443.8%", "479.7%", "515.6%", "554.8%"]}, "A左一文字斩伤害": {"name": "A左一文字斩伤害", "type": "攻击力", "plus": 1, "value": ["90.5%", "97.8%", "105.2%", "115.7%", "123.1%", "131.5%", "143.1%", "154.6%", "166.2%", "178.8%", "193.3%", "210.3%", "227.3%", "244.3%", "262.9%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["204%", "221%", "238%", "261%", "278%", "297%", "323%", "349%", "375%", "404%", "433%", "461%", "490%", "518%", "547%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["307%", "330%", "353%", "384%", "407%", "430%", "461%", "492%", "522%", "553%", "584%", "614%", "653%", "691%", "730%"]}}, "八重神子": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["39.7%", "42.6%", "45.6%", "49.6%", "52.5%", "55.5%", "59.5%", "63.5%", "67.4%", "71.4%", "75.4%", "79.3%", "84.3%", "89.2%", "94.2%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["142.9%", "153.6%", "164.3%", "178.6%", "189.3%", "200.1%", "214.3%", "228.6%", "242.9%", "257.2%", "271.5%", "285.8%", "303.7%", "321.5%", "339.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E杀生樱伤害·壹阶": {"name": "E杀生樱伤害·壹阶", "type": "攻击力", "plus": 1, "value": ["60.7%", "65.2%", "69.8%", "75.8%", "80.4%", "84.9%", "91.0%", "97.1%", "103.1%", "109.2%", "115.3%", "121.3%", "128.9%", "136.5%", "144.1%"]}, "E杀生樱伤害·贰阶": {"name": "E杀生樱伤害·贰阶", "type": "攻击力", "plus": 1, "value": ["75.8%", "81.5%", "87.2%", "94.8%", "100.5%", "106.2%", "113.8%", "121.3%", "128.9%", "136.5%", "144.1%", "151.7%", "161.2%", "170.6%", "180.1%"]}, "E杀生樱伤害·叁阶": {"name": "E杀生樱伤害·叁阶", "type": "攻击力", "plus": 1, "value": ["94.8%", "101.9%", "109.0%", "118.5%", "125.6%", "132.7%", "142.2%", "151.7%", "161.2%", "170.6%", "180.1%", "189.6%", "201.4%", "213.3%", "225.1%"]}, "E杀生樱伤害·叁阶(超激化)": {"name": "E杀生樱伤害·叁阶(超激化)", "type": "攻击力", "plus": 1, "value": ["94.8%", "101.9%", "109.0%", "118.5%", "125.6%", "132.7%", "142.2%", "151.7%", "161.2%", "170.6%", "180.1%", "189.6%", "201.4%", "213.3%", "225.1%"]}, "E杀生樱伤害·肆阶": {"name": "E杀生樱伤害·肆阶", "type": "攻击力", "plus": 1, "value": ["118.5%", "127.4%", "136.3%", "148.1%", "157.0%", "165.9%", "177.8%", "189.6%", "201.4%", "213.3%", "225.1%", "237.0%", "251.8%", "266.6%", "281.4%"]}, "E杀生樱伤害·肆阶(超激化)": {"name": "E杀生樱伤害·肆阶(超激化)", "type": "攻击力", "plus": 1, "value": ["118.5%", "127.4%", "136.3%", "148.1%", "157.0%", "165.9%", "177.8%", "189.6%", "201.4%", "213.3%", "225.1%", "237.0%", "251.8%", "266.6%", "281.4%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["260%", "280%", "299%", "325%", "344%", "364%", "390%", "416%", "442%", "468%", "494%", "520%", "553%", "585%", "618%"]}, "Q伤害(超激化)": {"name": "Q伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["260%", "280%", "299%", "325%", "344%", "364%", "390%", "416%", "442%", "468%", "494%", "520%", "553%", "585%", "618%"]}, "Q天狐霆雷伤害": {"name": "Q天狐霆雷伤害", "type": "攻击力", "plus": 1, "value": ["334%", "359%", "384%", "417%", "442%", "467%", "501%", "534%", "567%", "601%", "634%", "668%", "709%", "751%", "793%"]}, "Q天狐霆雷伤害(超激化)": {"name": "Q天狐霆雷伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["334%", "359%", "384%", "417%", "442%", "467%", "501%", "534%", "567%", "601%", "634%", "668%", "709%", "751%", "793%"]}}, "鹿野院平藏": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["37.5%", "40.3%", "43.1%", "46.8%", "49.7%", "52.5%", "56.2%", "60.0%", "63.7%", "67.5%", "71.2%", "74.9%", "79.6%", "84.3%", "89.0%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["73.0%", "78.5%", "84.0%", "91.3%", "96.7%", "102.2%", "109.5%", "116.8%", "124.1%", "131.4%", "138.7%", "146.0%", "155.1%", "164.3%", "173.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["227.5%", "244.6%", "261.6%", "284.4%", "301.5%", "318.5%", "341.3%", "364.0%", "386.8%", "409.5%", "432.3%", "455.0%", "483.5%", "511.9%", "540.4%"]}, "Q不动流·真空弹伤害": {"name": "Q不动流·真空弹伤害", "type": "攻击力", "plus": 1, "value": ["314.7%", "338.3%", "361.9%", "393.4%", "417.0%", "440.6%", "472.0%", "503.5%", "535.0%", "566.4%", "597.9%", "629.4%", "668.7%", "708.0%", "747.4%"]}, "Q聚风真眼伤害": {"name": "Q聚风真眼伤害", "type": "攻击力", "plus": 1, "value": ["21.5%", "23.1%", "24.7%", "26.8%", "28.4%", "30.0%", "32.2%", "34.3%", "36.5%", "38.6%", "40.8%", "42.9%", "45.6%", "48.3%", "51.0%"]}}, "夜兰": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["40.7%", "44.0%", "47.3%", "52.0%", "55.3%", "59.1%", "64.3%", "69.5%", "74.7%", "80.4%", "86.1%", "91.8%", "97.4%", "103.1%", "108.8%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A破局矢伤害": {"name": "A破局矢伤害", "type": "生命值", "plus": 1, "value": ["11.58%", "12.44%", "13.31%", "14.47%", "15.34%", "16.21%", "17.36%", "18.52%", "19.68%", "20.84%", "21.99%", "23.15%", "24.60%", "26.05%", "27.49%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "生命值", "plus": 1, "value": ["22.6%", "24.3%", "26.0%", "28.3%", "30.0%", "31.7%", "33.9%", "36.2%", "38.4%", "40.7%", "43.0%", "45.2%", "48.1%", "50.9%", "53.7%"]}, "E伤害(蒸发)": {"name": "E伤害(蒸发)", "type": "生命值", "plus": 1, "value": ["22.6%", "24.3%", "26.0%", "28.3%", "30.0%", "31.7%", "33.9%", "36.2%", "38.4%", "40.7%", "43.0%", "45.2%", "48.1%", "50.9%", "53.7%"]}, "Q伤害": {"name": "Q伤害", "type": "生命值", "plus": 1, "value": ["7.31%", "7.86%", "8.40%", "9.13%", "9.68%", "10.23%", "10.96%", "11.69%", "12.42%", "13.15%", "13.89%", "14.62%", "15.53%", "16.44%", "17.36%"]}, "Q玄掷玲珑伤害": {"name": "Q玄掷玲珑伤害", "type": "生命值", "plus": 3, "value": ["4.87%", "5.24%", "5.60%", "6.09%", "6.46%", "6.82%", "7.31%", "7.80%", "8.28%", "8.77%", "9.26%", "9.74%", "10.35%", "10.96%", "11.57%"]}}, "埃洛伊": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["21.1%+23.8%", "22.6%+25.4%", "24.0%+27.0%", "25.9%+29.2%", "27.4%+30.8%", "29.0%+32.7%", "31.2%+35.1%", "33.4%+37.5%", "35.5%+40.0%", "37.7%+42.4%", "39.8%+44.8%", "42.0%+47.2%", "44.2%+49.7%", "46.3%+52.1%", "48.5%+54.5%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E冰尘弹伤害": {"name": "E冰尘弹伤害", "type": "攻击力", "plus": 1, "value": ["178%", "191%", "204%", "222%", "235%", "249%", "266%", "284%", "302%", "320%", "337%", "355%", "377%", "400%", "422%"]}, "E冷冻炸弹伤害": {"name": "E冷冻炸弹伤害", "type": "攻击力", "plus": 1, "value": ["40.0%", "43.0%", "46.0%", "50.0%", "53.0%", "56.0%", "60.0%", "64.0%", "68.0%", "72.0%", "76.0%", "80.0%", "85.0%", "90.0%", "95.0%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["359%", "386%", "413%", "449%", "476%", "503%", "539%", "575%", "611%", "647%", "682%", "718%", "763%", "808%", "853%"]}}, "申鹤": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["43.3%", "46.8%", "50.3%", "55.3%", "58.9%", "62.9%", "68.4%", "73.9%", "79.5%", "85.5%", "91.5%", "97.6%", "103.6%", "109.7%", "115.7%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["110.7%", "119.7%", "128.7%", "141.6%", "150.6%", "160.9%", "175.0%", "189.2%", "203.3%", "218.8%", "234.2%", "249.7%", "265.1%", "280.5%", "296.0%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["139%", "150%", "160%", "174%", "184%", "195%", "209%", "223%", "237%", "251%", "264%", "278%", "296%", "313%", "331%"]}, "E长按伤害": {"name": "E长按伤害", "type": "攻击力", "plus": 1, "value": ["188.8%", "203.0%", "217.1%", "236.0%", "250.2%", "264.3%", "283.2%", "302.1%", "321.0%", "339.8%", "358.7%", "377.6%", "401.2%", "424.8%", "448.4%"]}, "E伤害值提升": {"name": "E伤害值提升", "type": "攻击", "plus": 1, "value": ["45.7%", "49.1%", "52.5%", "57.1%", "60.5%", "63.9%", "68.5%", "73.0%", "77.6%", "82.2%", "86.7%", "91.3%", "97.0%", "102.7%", "108.4%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["101%", "108%", "116%", "126%", "134%", "141%", "151%", "161%", "171%", "181%", "192%", "202%", "214%", "227%", "239%"]}, "Q持续伤害": {"name": "Q持续伤害", "type": "攻击力", "plus": 1, "value": ["33.1%", "35.6%", "38.1%", "41.4%", "43.9%", "46.4%", "49.7%", "53.0%", "56.3%", "59.6%", "62.9%", "66.2%", "70.4%", "74.5%", "78.7%"]}}, "云堇": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["40.5%", "43.8%", "47.1%", "51.8%", "55.1%", "58.9%", "64.1%", "69.2%", "74.4%", "80.1%", "85.7%", "91.4%", "97.0%", "102.7%", "108.3%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["121.7%", "131.6%", "141.5%", "155.6%", "165.6%", "176.9%", "192.4%", "208.0%", "223.6%", "240.5%", "260.0%", "282.9%", "305.8%", "328.6%", "353.6%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E点按伤害": {"name": "E点按伤害", "type": "防御", "plus": 1, "value": ["149.1%", "160.3%", "171.5%", "186.4%", "197.6%", "208.8%", "223.7%", "238.6%", "253.5%", "268.4%", "283.3%", "298.2%", "316.9%", "335.5%", "354.2%"]}, "E一段蓄力伤害": {"name": "E一段蓄力伤害", "type": "防御", "plus": 1, "value": ["261.0%", "280.5%", "300.1%", "326.2%", "345.8%", "365.3%", "391.4%", "417.5%", "443.6%", "469.7%", "495.8%", "521.9%", "554.5%", "587.2%", "619.8%"]}, "E护盾吸收量": {"name": "E护盾吸收量", "type": "生命值", "plus": 1, "value": ["12%+1155.43", "13%+1270.99", "14%+1396.18", "15%+1531.00", "16%+1675.45", "17%+1829.53", "18%+1993.24", "19%+2166.58", "20%+2349.54", "22%+2542.14", "23%+2744.37", "24%+2956.23", "25%+3177.72", "27%+3408.84", "28%+3649.59"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["244%", "262%", "281%", "305%", "323%", "342%", "366%", "390%", "415%", "439%", "464%", "488%", "518%", "549%", "580%"]}, "Q伤害值提升": {"name": "Q伤害值提升", "type": "防御", "plus": 1, "value": ["32%", "35%", "37%", "40%", "43%", "45%", "48%", "51%", "55%", "58%", "61%", "64%", "68%", "72%", "76%"]}}, "久岐忍": {"A元素反应(超绽放)": {"name": "A元素反应(超绽放)", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["48.8%", "52.7%", "56.7%", "62.4%", "66.3%", "70.9%", "77.1%", "83.3%", "89.6%", "96.4%", "103.2%", "110.0%", "116.8%", "123.6%", "130.4%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.6%+66.8%", "60.2%+72.2%", "64.7%+77.6%", "71.2%+85.4%", "75.7%+90.8%", "80.9%+97.0%", "88.0%+105.6%", "95.1%+114.1%", "102.2%+122.7%", "110.0%+132.0%", "117.7%+141.3%", "125.5%+150.6%", "133.3%+159.9%", "141.0%+169.2%", "148.8%+178.6%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["76%", "81%", "87%", "95%", "100%", "106%", "114%", "121%", "129%", "136%", "144%", "151%", "161%", "170%", "180%"]}, "E越祓草轮治疗量": {"name": "E越祓草轮治疗量", "type": "生命值", "plus": 1, "value": ["3.0%+288.89", "3.2%+317.78", "3.4%+349.08", "3.8%+382.79", "4.0%+418.91", "4.2%+457.43", "4.5%+498.37", "4.8%+541.71", "5.1%+587.45", "5.4%+635.61", "5.7%+686.17", "6.0%+739.14", "6.4%+794.52", "6.8%+852.31", "7.1%+912.50"]}, "E越祓草轮伤害": {"name": "E越祓草轮伤害", "type": "攻击力", "plus": 1, "value": ["25.2%", "27.1%", "29.0%", "31.5%", "33.4%", "35.3%", "37.9%", "40.4%", "42.9%", "45.4%", "48.0%", "50.5%", "53.6%", "56.8%", "59.9%"]}, "Q单次伤害": {"name": "Q单次伤害", "type": "生命值", "plus": 1, "value": ["3.6%", "3.9%", "4.1%", "4.5%", "4.8%", "5.0%", "5.4%", "5.8%", "6.1%", "6.5%", "6.8%", "7.2%", "7.7%", "8.1%", "8.6%"]}, "Q单次伤害(超激化)": {"name": "Q单次伤害(超激化)", "type": "生命值", "plus": 1, "value": ["3.6%", "3.9%", "4.1%", "4.5%", "4.8%", "5.0%", "5.4%", "5.8%", "6.1%", "6.5%", "6.8%", "7.2%", "7.7%", "8.1%", "8.6%"]}, "Q总伤害": {"name": "Q总伤害", "type": "生命值", "plus": 1, "value": ["43.3%", "46.5%", "49.7%", "54.1%", "57.3%", "60.6%", "64.9%", "69.2%", "73.5%", "77.9%", "82.2%", "86.5%", "91.9%", "97.3%", "102.7%"]}}, "神里绫人": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["45.0%", "48.6%", "52.3%", "57.5%", "61.2%", "65.4%", "71.1%", "76.9%", "82.6%", "88.9%", "95.2%", "101.4%", "107.7%", "114.0%", "120.2%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["129.5%", "140.1%", "150.6%", "165.7%", "176.2%", "188.3%", "204.8%", "221.4%", "238.0%", "256.0%", "274.1%", "292.2%", "310.3%", "328.3%", "346.4%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E一段瞬水剑伤害": {"name": "E一段瞬水剑伤害", "type": "攻击力", "plus": 1, "value": ["52.9%", "57.2%", "61.5%", "67.7%", "72.0%", "76.9%", "83.6%", "90.4%", "97.2%", "104.6%", "111.9%", "119.3%", "126.7%", "134.1%", "141.4%"]}, "E浪闪伤害值提高": {"name": "E浪闪伤害值提高", "type": "生命值", "plus": 1, "value": ["0.56%", "0.61%", "0.65%", "0.72%", "0.76%", "0.82%", "0.89%", "0.96%", "1.03%", "1.11%", "1.19%", "1.27%", "1.34%", "1.42%", "1.50%"]}, "E水影伤害": {"name": "E水影伤害", "type": "攻击力", "plus": 1, "value": ["101.5%", "109.7%", "118.0%", "129.8%", "138.1%", "147.5%", "160.5%", "173.5%", "186.4%", "200.6%", "214.8%", "228.9%", "243.1%", "257.2%", "271.4%"]}, "Q水花剑伤害": {"name": "Q水花剑伤害", "type": "攻击力", "plus": 1, "value": ["66.5%", "71.4%", "76.4%", "83.1%", "88.1%", "93.0%", "99.7%", "106.3%", "113.0%", "119.6%", "126.3%", "132.9%", "141.2%", "149.5%", "157.8%"]}}, "柯莱": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["43.6%", "47.2%", "50.7%", "55.8%", "59.3%", "63.4%", "69.0%", "74.5%", "80.1%", "86.2%", "92.3%", "98.4%", "104.4%", "110.5%", "116.6%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["151.2%", "162.5%", "173.9%", "189.0%", "200.3%", "211.7%", "226.8%", "241.9%", "257.0%", "272.2%", "287.3%", "302.4%", "321.3%", "340.2%", "359.1%"]}, "E伤害(蔓激化)": {"name": "E伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["151.2%", "162.5%", "173.9%", "189.0%", "200.3%", "211.7%", "226.8%", "241.9%", "257.0%", "272.2%", "287.3%", "302.4%", "321.3%", "340.2%", "359.1%"]}, "Q爆发伤害": {"name": "Q爆发伤害", "type": "攻击力", "plus": 1, "value": ["201.8%", "217.0%", "232.1%", "252.3%", "267.4%", "282.6%", "302.7%", "322.9%", "343.1%", "363.3%", "383.5%", "403.6%", "428.9%", "454.1%", "479.3%"]}, "Q跃动伤害": {"name": "Q跃动伤害", "type": "攻击力", "plus": 1, "value": ["43.2%", "46.5%", "49.7%", "54.1%", "57.3%", "60.5%", "64.9%", "69.2%", "73.5%", "77.8%", "82.2%", "86.5%", "91.9%", "97.3%", "102.7%"]}, "Q跃动伤害(蔓激化)": {"name": "Q跃动伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["43.2%", "46.5%", "49.7%", "54.1%", "57.3%", "60.5%", "64.9%", "69.2%", "73.5%", "77.8%", "82.2%", "86.5%", "91.9%", "97.3%", "102.7%"]}}, "多莉": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["90.2%", "97.6%", "104.9%", "115.4%", "122.7%", "131.1%", "142.7%", "154.2%", "165.7%", "178.3%", "190.9%", "203.5%", "216.1%", "228.7%", "241.3%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["62.5%", "67.6%", "72.7%", "80.0%", "85.1%", "90.9%", "98.9%", "106.9%", "114.9%", "123.6%", "133.6%", "145.4%", "157.2%", "168.9%", "181.7%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["113%", "122%", "132%", "145%", "154%", "164%", "179%", "193%", "208%", "224%", "242%", "263%", "284%", "305%", "329%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "394%", "420%", "446%", "472%", "498%"]}, "E断除烦恼炮伤害": {"name": "E断除烦恼炮伤害", "type": "攻击力", "plus": 1, "value": ["147.3%", "158.3%", "169.4%", "184.1%", "195.1%", "206.2%", "220.9%", "235.6%", "250.4%", "265.1%", "279.8%", "294.6%", "313.0%", "331.4%", "349.8%"]}, "E售后服务弹伤害": {"name": "E售后服务弹伤害", "type": "攻击力", "plus": 1, "value": ["31.6%", "33.9%", "36.3%", "39.4%", "41.8%", "44.2%", "47.3%", "50.5%", "53.7%", "56.8%", "60.0%", "63.1%", "67.1%", "71.0%", "75.0%"]}, "Q连接伤害": {"name": "Q连接伤害", "type": "攻击力", "plus": 1, "value": ["16%", "17%", "18%", "20%", "21%", "22%", "24%", "25%", "27%", "29%", "30%", "32%", "34%", "36%", "38%"]}, "Q持续治疗量": {"name": "Q持续治疗量", "type": "生命值", "plus": 1, "value": ["6.7%+641.98", "7.2%+706.19", "7.7%+775.74", "8.3%+850.65", "8.8%+930.91", "9.3%+1016.52", "10.0%+1107.48", "10.7%+1203.79", "11.3%+1305.45", "12.0%+1412.46", "12.7%+1524.82", "13.3%+1642.54", "14.2%+1765.60", "15.0%+1894.01", "15.8%+2027.78"]}}, "提纳里": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.6%", "48.3%", "51.9%", "57.1%", "60.7%", "64.9%", "70.6%", "76.3%", "82.0%", "88.2%", "94.5%", "100.7%", "106.9%", "113.1%", "119.4%"]}, "A花筥箭伤害": {"name": "A花筥箭伤害", "type": "攻击力", "plus": 1, "value": ["87.2%", "93.7%", "100.3%", "109.0%", "115.5%", "122.1%", "130.8%", "139.5%", "148.2%", "157.0%", "165.7%", "174.4%", "185.3%", "196.2%", "207.1%"]}, "A藏蕴花矢伤害": {"name": "A藏蕴花矢伤害", "type": "攻击力", "plus": 1, "value": ["38.6%", "41.5%", "44.4%", "48.2%", "51.1%", "54.0%", "57.9%", "61.8%", "65.6%", "69.5%", "73.3%", "77.2%", "82.0%", "86.8%", "91.7%"]}, "A藏蕴花矢伤害(蔓激化)": {"name": "A藏蕴花矢伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["38.6%", "41.5%", "44.4%", "48.2%", "51.1%", "54.0%", "57.9%", "61.8%", "65.6%", "69.5%", "73.3%", "77.2%", "82.0%", "86.8%", "91.7%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["149.6%", "160.8%", "172.0%", "187.0%", "198.2%", "209.4%", "224.4%", "239.4%", "254.3%", "269.3%", "284.2%", "299.2%", "317.9%", "336.6%", "355.3%"]}, "E伤害(蔓激化)": {"name": "E伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["149.6%", "160.8%", "172.0%", "187.0%", "198.2%", "209.4%", "224.4%", "239.4%", "254.3%", "269.3%", "284.2%", "299.2%", "317.9%", "336.6%", "355.3%"]}, "Q缠藤箭伤害": {"name": "Q缠藤箭伤害", "type": "攻击力", "plus": 1, "value": ["55.6%", "59.8%", "64.0%", "69.5%", "73.7%", "77.9%", "83.4%", "89.0%", "94.6%", "100.1%", "105.7%", "111.2%", "118.2%", "125.1%", "132.1%"]}, "Q缠藤箭伤害(蔓激化)": {"name": "Q缠藤箭伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["55.6%", "59.8%", "64.0%", "69.5%", "73.7%", "77.9%", "83.4%", "89.0%", "94.6%", "100.1%", "105.7%", "111.2%", "118.2%", "125.1%", "132.1%"]}, "Q次级缠藤箭伤害": {"name": "Q次级缠藤箭伤害", "type": "攻击力", "plus": 1, "value": ["68.0%", "73.1%", "78.2%", "85.0%", "90.1%", "95.2%", "102.0%", "108.8%", "115.6%", "122.4%", "129.2%", "136.0%", "144.5%", "153.0%", "161.5%"]}, "Q次级缠藤箭伤害(蔓激化)": {"name": "Q次级缠藤箭伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["68.0%", "73.1%", "78.2%", "85.0%", "90.1%", "95.2%", "102.0%", "108.8%", "115.6%", "122.4%", "129.2%", "136.0%", "144.5%", "153.0%", "161.5%"]}}, "妮露": {"A丰穰之核(绽放)": {"name": "A丰穰之核(绽放)", "type": "绽放", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["50.3%", "54.4%", "58.5%", "64.3%", "68.4%", "73.1%", "79.6%", "86.0%", "92.4%", "99.4%", "106.5%", "113.5%", "120.5%", "127.5%", "134.5%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["50.2%+54.4%", "54.3%+58.9%", "58.4%+63.3%", "64.2%+69.6%", "68.3%+74.1%", "73.0%+79.1%", "79.4%+86.1%", "85.8%+93.1%", "92.3%+100.0%", "99.3%+107.6%", "106.3%+115.2%", "113.3%+122.8%", "120.3%+130.4%", "127.3%+138.0%", "134.3%+145.6%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "生命值", "plus": 1, "value": ["3.34%", "3.59%", "3.84%", "4.17%", "4.42%", "4.67%", "5.01%", "5.34%", "5.68%", "6.01%", "6.34%", "6.68%", "7.10%", "7.51%", "7.93%"]}, "E剑舞步/旋舞步一段伤害": {"name": "E剑舞步/旋舞步一段伤害", "type": "生命值", "plus": 1, "value": ["4.55%+3.26%", "4.89%+3.51%", "5.24%+3.75%", "5.69%+4.08%", "6.03%+4.32%", "6.37%+4.57%", "6.83%+4.89%", "7.28%+5.22%", "7.74%+5.55%", "8.19%+5.87%", "8.65%+6.20%", "9.10%+6.52%", "9.67%+6.93%", "10.24%+7.34%", "10.81%+7.75%"]}, "E水月/水轮伤害": {"name": "E水月/水轮伤害", "type": "生命值", "plus": 1, "value": ["7.17%+5.06%", "7.71%+5.44%", "8.24%+5.82%", "8.96%+6.33%", "9.50%+6.71%", "10.04%+7.09%", "10.75%+7.59%", "11.47%+8.10%", "12.19%+8.60%", "12.90%+9.11%", "13.62%+9.62%", "14.34%+10.12%", "15.23%+10.76%", "16.13%+11.39%", "17.03%+12.02%"]}, "Q伤害": {"name": "Q伤害", "type": "生命值", "plus": 1, "value": ["18.4%", "19.8%", "21.2%", "23.0%", "24.4%", "25.8%", "27.6%", "29.5%", "31.3%", "33.2%", "35.0%", "36.9%", "39.2%", "41.5%", "43.8%"]}, "Q永世流沔伤害": {"name": "Q永世流沔伤害", "type": "生命值", "plus": 1, "value": ["22.5%", "24.2%", "25.9%", "28.2%", "29.8%", "31.5%", "33.8%", "36.0%", "38.3%", "40.6%", "42.8%", "45.1%", "47.9%", "50.7%", "53.5%"]}}, "赛诺": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["49.3%", "53.3%", "57.3%", "63.0%", "67.0%", "71.6%", "77.9%", "84.2%", "90.5%", "97.4%", "104.2%", "111.1%", "118.0%", "124.9%", "131.7%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["122.4%", "132.3%", "142.3%", "156.5%", "166.5%", "177.9%", "193.5%", "209.2%", "224.8%", "241.9%", "259.0%", "276.1%", "293.1%", "310.2%", "327.3%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["130.4%", "140.2%", "150.0%", "163.0%", "172.8%", "182.6%", "195.6%", "208.6%", "221.7%", "234.7%", "247.8%", "260.8%", "277.1%", "293.4%", "309.7%"]}, "E冥祭伤害": {"name": "E冥祭伤害", "type": "攻击力", "plus": 1, "value": ["156.8%", "168.6%", "180.3%", "196.0%", "207.8%", "219.5%", "235.2%", "250.9%", "266.6%", "282.2%", "297.9%", "313.6%", "333.2%", "352.8%", "372.4%"]}, "E冥祭伤害(超激化)": {"name": "E冥祭伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["156.8%", "168.6%", "180.3%", "196.0%", "207.8%", "219.5%", "235.2%", "250.9%", "266.6%", "282.2%", "297.9%", "313.6%", "333.2%", "352.8%", "372.4%"]}, "Q一段伤害": {"name": "Q一段伤害", "type": "攻击力", "plus": 1, "value": ["78.3%", "84.7%", "91.0%", "100.1%", "106.5%", "113.8%", "123.8%", "133.8%", "143.8%", "154.7%", "165.7%", "176.6%", "187.5%", "198.4%", "209.4%"]}, "Q一段伤害(超激化)": {"name": "Q一段伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["78.3%", "84.7%", "91.0%", "100.1%", "106.5%", "113.8%", "123.8%", "133.8%", "143.8%", "154.7%", "165.7%", "176.6%", "187.5%", "198.4%", "209.4%"]}, "Q重击伤害": {"name": "Q重击伤害", "type": "攻击力", "plus": 1, "value": ["101.0%", "109.3%", "117.5%", "129.3%", "137.5%", "146.9%", "159.8%", "172.7%", "185.7%", "199.7%", "213.8%", "228.0%", "242.1%", "256.2%", "270.3%"]}, "Q重击伤害(超激化)": {"name": "Q重击伤害(超激化)", "type": "攻击力", "plus": 1, "value": ["101.0%", "109.3%", "117.5%", "129.3%", "137.5%", "146.9%", "159.8%", "172.7%", "185.7%", "199.7%", "213.8%", "228.0%", "242.1%", "256.2%", "270.3%"]}, "Q高空下落伤害": {"name": "Q高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}}, "坎蒂丝": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["60.8%", "65.8%", "70.7%", "77.8%", "82.7%", "88.4%", "96.2%", "103.9%", "111.7%", "120.2%", "128.7%", "137.2%", "145.6%", "154.1%", "162.6%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["124.2%", "134.3%", "144.4%", "158.8%", "168.9%", "180.5%", "196.4%", "212.3%", "228.2%", "245.5%", "262.8%", "280.1%", "297.5%", "314.8%", "332.1%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E护盾吸收量": {"name": "E护盾吸收量", "type": "生命值", "plus": 1, "value": ["12.0%+1155.56", "12.9%+1271.14", "13.8%+1396.34", "15.0%+1531.17", "15.9%+1675.64", "16.8%+1829.73", "18.0%+1993.46", "19.2%+2166.82", "20.4%+2349.81", "21.6%+2542.43", "22.8%+2744.68", "24.0%+2956.57", "25.5%+3178.08", "27.0%+3409.22", "28.5%+3650.00"]}, "E基础伤害": {"name": "E基础伤害", "type": "生命值", "plus": 1, "value": ["12.0%", "12.9%", "13.8%", "15.0%", "15.9%", "16.8%", "18.0%", "19.2%", "20.4%", "21.6%", "22.8%", "24.0%", "25.5%", "27.0%", "28.5%"]}, "E蓄力完成伤害": {"name": "E蓄力完成伤害", "type": "生命值", "plus": 1, "value": ["19.0%", "20.5%", "21.9%", "23.8%", "25.2%", "26.7%", "28.6%", "30.5%", "32.4%", "34.3%", "36.2%", "38.1%", "40.5%", "42.8%", "45.2%"]}, "Q伤害": {"name": "Q伤害", "type": "生命值", "plus": 1, "value": ["6.6%", "7.1%", "7.6%", "8.3%", "8.8%", "9.3%", "9.9%", "10.6%", "11.2%", "11.9%", "12.6%", "13.2%", "14.0%", "14.9%", "15.7%"]}, "Q伤害加成": {"name": "Q伤害加成", "type": "攻击力", "plus": 1, "value": ["20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%", "20.0%"]}, "Q水波冲击伤害": {"name": "Q水波冲击伤害", "type": "生命值", "plus": 1, "value": ["6.6%", "7.1%", "7.6%", "8.3%", "8.8%", "9.3%", "9.9%", "10.6%", "11.2%", "11.9%", "12.6%", "13.2%", "14.0%", "14.9%", "15.7%"]}}, "纳西妲": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["40.3%", "43.3%", "46.4%", "50.4%", "53.4%", "56.4%", "60.5%", "64.5%", "68.5%", "72.5%", "76.6%", "80.6%", "85.6%", "90.7%", "95.7%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["132.0%", "141.9%", "151.8%", "165.0%", "174.9%", "184.8%", "198.0%", "211.2%", "224.4%", "237.6%", "250.8%", "264.0%", "280.5%", "297.0%", "313.5%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E点按伤害": {"name": "E点按伤害", "type": "攻击力", "plus": 1, "value": ["98.4%", "105.8%", "113.2%", "123.0%", "130.4%", "137.8%", "147.6%", "157.4%", "167.3%", "177.1%", "187.0%", "196.8%", "209.1%", "221.4%", "233.7%"]}, "E长按伤害": {"name": "E长按伤害", "type": "攻击力", "plus": 1, "value": ["130.4%", "140.2%", "150.0%", "163.0%", "172.8%", "182.6%", "195.6%", "208.6%", "221.7%", "234.7%", "247.8%", "260.8%", "277.1%", "293.4%", "309.7%"]}, "E长按伤害(蔓激化)": {"name": "E长按伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["130.4%", "140.2%", "150.0%", "163.0%", "172.8%", "182.6%", "195.6%", "208.6%", "221.7%", "234.7%", "247.8%", "260.8%", "277.1%", "293.4%", "309.7%"]}, "E灭净三业伤害": {"name": "E灭净三业伤害", "type": "攻击", "plus": 1, "value": ["103.2%+206.4%", "110.9%+221.9%", "118.7%+237.4%", "129.0%+258.0%", "136.7%+273.5%", "144.5%+289.0%", "154.8%+309.6%", "165.1%+330.2%", "175.4%+350.9%", "185.8%+371.5%", "196.1%+392.2%", "206.4%+412.8%", "219.3%+438.6%", "232.2%+464.4%", "245.1%+490.2%"]}, "E灭净三业伤害(蔓激化)": {"name": "E灭净三业伤害(蔓激化)", "type": "攻击", "plus": 1, "value": ["103.2%+206.4%", "110.9%+221.9%", "118.7%+237.4%", "129.0%+258.0%", "136.7%+273.5%", "144.5%+289.0%", "154.8%+309.6%", "165.1%+330.2%", "175.4%+350.9%", "185.8%+371.5%", "196.1%+392.2%", "206.4%+412.8%", "219.3%+438.6%", "232.2%+464.4%", "245.1%+490.2%"]}, "E灭净三业伤害(蔓激化·前台)": {"name": "E灭净三业伤害(蔓激化·前台)", "type": "攻击", "plus": 1, "value": ["103.2%+206.4%", "110.9%+221.9%", "118.7%+237.4%", "129.0%+258.0%", "136.7%+273.5%", "144.5%+289.0%", "154.8%+309.6%", "165.1%+330.2%", "175.4%+350.9%", "185.8%+371.5%", "196.1%+392.2%", "206.4%+412.8%", "219.3%+438.6%", "232.2%+464.4%", "245.1%+490.2%"]}}, "莱依拉": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["51.2%", "55.4%", "59.6%", "65.5%", "69.7%", "74.4%", "81.0%", "87.5%", "94.1%", "101.2%", "108.4%", "115.5%", "122.7%", "129.8%", "137.0%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["47.7%+52.5%", "51.6%+56.8%", "55.5%+61.1%", "61.0%+67.2%", "64.9%+71.5%", "69.4%+76.4%", "75.5%+83.1%", "81.6%+89.8%", "87.7%+96.5%", "94.3%+103.9%", "101.0%+111.2%", "107.7%+118.5%", "114.3%+125.9%", "121.0%+133.2%", "127.6%+140.5%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["12.8%", "13.8%", "14.7%", "16.0%", "17.0%", "17.9%", "19.2%", "20.5%", "21.8%", "23.0%", "24.3%", "25.6%", "27.2%", "28.8%", "30.4%"]}, "E飞星伤害": {"name": "E飞星伤害", "type": "攻击力", "plus": 1, "value": ["14.7%", "15.8%", "16.9%", "18.4%", "19.5%", "20.6%", "22.1%", "23.6%", "25.0%", "26.5%", "28.0%", "29.4%", "31.3%", "33.1%", "35.0%"]}, "E护盾基础吸收量": {"name": "E护盾基础吸收量", "type": "生命值", "plus": 1, "value": ["10.8%+1040.01", "11.6%+1144.02", "12.4%+1256.71", "13.5%+1378.06", "14.3%+1508.08", "15.1%+1646.76", "16.2%+1794.12", "17.3%+1950.14", "18.4%+2114.83", "19.4%+2288.19", "20.5%+2470.22", "21.6%+2660.91", "22.9%+2860.27", "24.3%+3068.30", "25.7%+3285.00"]}, "Q星光弹伤害": {"name": "Q星光弹伤害", "type": "生命值", "plus": 1, "value": ["4.6%", "5.0%", "5.3%", "5.8%", "6.2%", "6.5%", "7.0%", "7.4%", "7.9%", "8.4%", "8.8%", "9.3%", "9.9%", "10.5%", "11.0%"]}}, "流浪者": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["68.7%", "74.3%", "79.9%", "87.9%", "93.5%", "99.9%", "108.7%", "117.5%", "126.2%", "135.8%", "145.4%", "155.0%", "164.6%", "174.2%", "183.8%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["132.1%", "142.0%", "151.9%", "165.1%", "175.0%", "184.9%", "198.1%", "211.3%", "224.5%", "237.7%", "251.0%", "264.2%", "280.7%", "297.2%", "313.7%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["95.2%", "102.3%", "109.5%", "119.0%", "126.1%", "133.3%", "142.8%", "152.3%", "161.8%", "171.4%", "180.9%", "190.4%", "202.3%", "214.2%", "226.1%"]}, "E空居·不生断伤害": {"name": "E空居·不生断伤害", "type": "普通攻击", "plus": 1, "value": ["133.0%", "135.0%", "136.9%", "139.5%", "141.5%", "143.4%", "146.0%", "148.6%", "151.2%", "153.7%", "156.3%", "158.9%", "161.4%", "164.0%", "166.6%"]}, "E空居·刀风界伤害": {"name": "E空居·刀风界伤害", "type": "重击", "plus": 1, "value": ["126.4%", "128.0%", "129.5%", "131.6%", "133.2%", "134.8%", "136.8%", "138.9%", "140.9%", "143.0%", "145.0%", "147.1%", "149.1%", "151.2%", "153.2%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 5, "value": ["147.2%", "158.2%", "169.3%", "184.0%", "195.0%", "206.1%", "220.8%", "235.5%", "250.2%", "265.0%", "279.7%", "294.4%", "312.8%", "331.2%", "349.6%"]}}, "珐露珊": {"A扩散伤害": {"name": "A扩散伤害", "type": "扩散", "plus": 0, "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, "A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.7%", "48.4%", "52.0%", "57.2%", "60.9%", "65.0%", "70.7%", "76.5%", "82.2%", "88.4%", "94.7%", "100.9%", "107.1%", "113.4%", "119.6%"]}, "A满蓄力瞄准射击": {"name": "A满蓄力瞄准射击", "type": "攻击力", "plus": 1, "value": ["124%", "133%", "143%", "155%", "164%", "174%", "186%", "198%", "211%", "223%", "236%", "248%", "263%", "279%", "294%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["142%", "153%", "165%", "182%", "193%", "206%", "224%", "243%", "261%", "281%", "300%", "320%", "340%", "360%", "380%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["148.8%", "160.0%", "171.1%", "186.0%", "197.2%", "208.3%", "223.2%", "238.1%", "253.0%", "267.8%", "282.7%", "297.6%", "316.2%", "334.8%", "353.4%"]}, "E风压坍陷风涡伤害": {"name": "E风压坍陷风涡伤害", "type": "攻击力", "plus": 1, "value": ["108.0%", "116.1%", "124.2%", "135.0%", "143.1%", "151.2%", "162.0%", "172.8%", "183.6%", "194.4%", "205.2%", "216.0%", "229.5%", "243.0%", "256.5%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["377.6%", "405.9%", "434.2%", "472.0%", "500.3%", "528.6%", "566.4%", "604.2%", "641.9%", "679.7%", "717.4%", "755.2%", "802.4%", "849.6%", "896.8%"]}, "Q风元素伤害加成": {"name": "Q风元素伤害加成", "type": "攻击力", "plus": 1, "value": ["18.0%", "19.3%", "20.7%", "22.5%", "23.8%", "25.2%", "27.0%", "28.8%", "30.6%", "32.4%", "34.2%", "36.0%", "38.2%", "40.5%", "42.8%"]}}, "瑶瑶": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["51.0%", "55.2%", "59.3%", "65.2%", "69.4%", "74.1%", "80.7%", "87.2%", "93.7%", "100.8%", "107.9%", "115.0%", "122.2%", "129.3%", "136.4%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["112.7%", "121.8%", "131.0%", "144.1%", "153.3%", "163.8%", "178.2%", "192.6%", "207.0%", "222.7%", "238.4%", "254.1%", "269.9%", "285.6%", "301.3%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E白玉萝卜伤害": {"name": "E白玉萝卜伤害", "type": "攻击力", "plus": 1, "value": ["29.9%", "32.2%", "34.4%", "37.4%", "39.6%", "41.9%", "44.9%", "47.9%", "50.9%", "53.9%", "56.8%", "59.8%", "63.6%", "67.3%", "71.1%"]}, "E白玉萝卜治疗量": {"name": "E白玉萝卜治疗量", "type": "生命值", "plus": 1, "value": ["1.71%+165.08", "1.84%+181.59", "1.97%+199.48", "2.14%+218.74", "2.27%+239.38", "2.40%+261.39", "2.57%+284.78", "2.74%+309.54", "2.91%+335.69", "3.09%+363.20", "3.26%+392.10", "3.43%+422.37", "3.64%+454.01", "3.86%+487.03", "4.07%+521.43"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["114.6%", "123.2%", "131.7%", "143.2%", "151.8%", "160.4%", "171.8%", "183.3%", "194.8%", "206.2%", "217.7%", "229.1%", "243.4%", "257.8%", "272.1%"]}, "Q桂子仙机白玉萝卜伤害": {"name": "Q桂子仙机白玉萝卜伤害", "type": "攻击力", "plus": 1, "value": ["72.2%", "77.6%", "83.0%", "90.2%", "95.6%", "101.0%", "108.2%", "115.5%", "122.7%", "129.9%", "137.1%", "144.3%", "153.3%", "162.4%", "171.4%"]}, "Q桂子仙机白玉萝卜治疗量": {"name": "Q桂子仙机白玉萝卜治疗量", "type": "生命值", "plus": 1, "value": ["2.02%+194.21", "2.17%+213.64", "2.32%+234.68", "2.52%+257.34", "2.67%+281.62", "2.82%+307.52", "3.03%+335.04", "3.23%+364.17", "3.43%+394.93", "3.63%+427.30", "3.83%+461.29", "4.03%+496.90", "4.29%+534.13", "4.54%+572.98", "4.79%+613.45"]}}, "艾尔海森": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["49.5%", "53.6%", "57.6%", "63.3%", "67.4%", "72.0%", "78.3%", "84.7%", "91.0%", "97.9%", "104.8%", "111.7%", "118.6%", "125.5%", "132.5%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.3%+55.3%", "59.8%+59.8%", "64.2%+64.2%", "70.7%+70.7%", "75.2%+75.2%", "80.3%+80.3%", "87.4%+87.4%", "94.4%+94.4%", "101.5%+101.5%", "109.2%+109.2%", "116.9%+116.9%", "124.6%+124.6%", "132.4%+132.4%", "140.1%+140.1%", "147.8%+147.8%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E突进攻击伤害": {"name": "E突进攻击伤害", "type": "攻击", "plus": 1, "value": ["193.6%+154.9%", "208.1%+166.5%", "222.6%+178.1%", "242.0%+193.6%", "256.5%+205.2%", "271.0%+216.8%", "290.4%+232.3%", "309.8%+247.8%", "329.1%+263.3%", "348.5%+278.8%", "367.8%+294.3%", "387.2%+309.8%", "411.4%+329.1%", "435.6%+348.5%", "459.8%+367.8%"]}, "E突进攻击伤害(蔓激化)": {"name": "E突进攻击伤害(蔓激化)", "type": "攻击", "plus": 1, "value": ["193.6%+154.9%", "208.1%+166.5%", "222.6%+178.1%", "242.0%+193.6%", "256.5%+205.2%", "271.0%+216.8%", "290.4%+232.3%", "309.8%+247.8%", "329.1%+263.3%", "348.5%+278.8%", "367.8%+294.3%", "387.2%+309.8%", "411.4%+329.1%", "435.6%+348.5%", "459.8%+367.8%"]}, "E1枚光幕攻击伤害": {"name": "E1枚光幕攻击伤害", "type": "攻击", "plus": 1, "value": ["67.2%+134.4%", "72.2%+144.5%", "77.3%+154.6%", "84.0%+168.0%", "89.0%+178.1%", "94.1%+188.2%", "100.8%+201.6%", "107.5%+215.0%", "114.2%+228.5%", "121.0%+241.9%", "127.7%+255.4%", "134.4%+268.8%", "142.8%+285.6%", "151.2%+302.4%", "159.6%+319.2%"]}, "E1枚光幕攻击伤害(蔓激化)": {"name": "E1枚光幕攻击伤害(蔓激化)", "type": "攻击", "plus": 1, "value": ["67.2%+134.4%", "72.2%+144.5%", "77.3%+154.6%", "84.0%+168.0%", "89.0%+178.1%", "94.1%+188.2%", "100.8%+201.6%", "107.5%+215.0%", "114.2%+228.5%", "121.0%+241.9%", "127.7%+255.4%", "134.4%+268.8%", "142.8%+285.6%", "151.2%+302.4%", "159.6%+319.2%"]}, "E2枚光幕攻击伤害": {"name": "E2枚光幕攻击伤害", "type": "攻击", "plus": 2, "value": ["67.2%+134.4%", "72.2%+144.5%", "77.3%+154.6%", "84.0%+168.0%", "89.0%+178.1%", "94.1%+188.2%", "100.8%+201.6%", "107.5%+215.0%", "114.2%+228.5%", "121.0%+241.9%", "127.7%+255.4%", "134.4%+268.8%", "142.8%+285.6%", "151.2%+302.4%", "159.6%+319.2%"]}, "E3枚光幕攻击伤害": {"name": "E3枚光幕攻击伤害", "type": "攻击", "plus": 3, "value": ["67.2%+134.4%", "72.2%+144.5%", "77.3%+154.6%", "84.0%+168.0%", "89.0%+178.1%", "94.1%+188.2%", "100.8%+201.6%", "107.5%+215.0%", "114.2%+228.5%", "121.0%+241.9%", "127.7%+255.4%", "134.4%+268.8%", "142.8%+285.6%", "151.2%+302.4%", "159.6%+319.2%"]}, "Q单次伤害": {"name": "Q单次伤害", "type": "攻击", "plus": 1, "value": ["121.6%+97.3%", "130.7%+104.6%", "139.8%+111.9%", "152.0%+121.6%", "161.1%+128.9%", "170.2%+136.2%", "182.4%+145.9%", "194.6%+155.6%", "206.7%+165.4%", "218.9%+175.1%", "231.0%+184.8%", "243.2%+194.6%", "258.4%+206.7%", "273.6%+218.9%", "288.8%+231.0%"]}, "Q单次伤害(蔓激化)": {"name": "Q单次伤害(蔓激化)", "type": "攻击", "plus": 1, "value": ["121.6%+97.3%", "130.7%+104.6%", "139.8%+111.9%", "152.0%+121.6%", "161.1%+128.9%", "170.2%+136.2%", "182.4%+145.9%", "194.6%+155.6%", "206.7%+165.4%", "218.9%+175.1%", "231.0%+184.8%", "243.2%+194.6%", "258.4%+206.7%", "273.6%+218.9%", "288.8%+231.0%"]}}, "迪希雅": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["62.1%", "67.2%", "72.2%", "79.5%", "84.5%", "90.3%", "98.2%", "106.2%", "114.1%", "122.8%", "131.5%", "140.1%", "148.8%", "157.5%", "166.1%"]}, "A重击循环伤害": {"name": "A重击循环伤害", "type": "攻击力", "plus": 1, "value": ["56.3%", "60.9%", "65.5%", "72.0%", "76.6%", "81.9%", "89.1%", "96.3%", "103.5%", "111.3%", "119.2%", "127.1%", "134.9%", "142.8%", "150.7%"]}, "A重击终结伤害": {"name": "A重击终结伤害", "type": "攻击力", "plus": 1, "value": ["102%", "110%", "118%", "130%", "139%", "148%", "161%", "174%", "187%", "201%", "215%", "230%", "244%", "258%", "272%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["186%", "201%", "217%", "238%", "253%", "271%", "295%", "318%", "342%", "368%", "394%", "420%", "446%", "472%", "498%"]}, "E净焰昂藏伤害": {"name": "E净焰昂藏伤害", "type": "攻击力", "plus": 1, "value": ["112.9%", "121.3%", "129.8%", "141.1%", "149.6%", "158.0%", "169.3%", "180.6%", "191.9%", "203.2%", "214.5%", "225.8%", "239.9%", "254.0%", "268.1%"]}, "E净焰昂藏伤害(蒸发)": {"name": "E净焰昂藏伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["112.9%", "121.3%", "129.8%", "141.1%", "149.6%", "158.0%", "169.3%", "180.6%", "191.9%", "203.2%", "214.5%", "225.8%", "239.9%", "254.0%", "268.1%"]}, "E剑域炽焰伤害": {"name": "E剑域炽焰伤害", "type": "攻击力", "plus": 1, "value": ["132.8%", "142.8%", "152.7%", "166.0%", "176.0%", "185.9%", "199.2%", "212.5%", "225.8%", "239.0%", "252.3%", "265.6%", "282.2%", "298.8%", "315.4%"]}, "E剑域炽焰伤害(蒸发)": {"name": "E剑域炽焰伤害(蒸发)", "type": "攻击力", "plus": 1, "value": ["132.8%", "142.8%", "152.7%", "166.0%", "176.0%", "185.9%", "199.2%", "212.5%", "225.8%", "239.0%", "252.3%", "265.6%", "282.2%", "298.8%", "315.4%"]}, "E领域伤害": {"name": "E领域伤害", "type": "攻击", "plus": 1, "value": ["60.2%+1.03%", "64.7%+1.11%", "69.2%+1.19%", "75.2%+1.29%", "79.8%+1.37%", "84.3%+1.44%", "90.3%+1.55%", "96.3%+1.65%", "102.3%+1.75%", "108.4%+1.86%", "114.4%+1.96%", "120.4%+2.06%", "127.9%+2.19%", "135.5%+2.32%", "143.0%+2.45%"]}, "E领域伤害(蒸发)": {"name": "E领域伤害(蒸发)", "type": "攻击", "plus": 1, "value": ["60.2%+1.03%", "64.7%+1.11%", "69.2%+1.19%", "75.2%+1.29%", "79.8%+1.37%", "84.3%+1.44%", "90.3%+1.55%", "96.3%+1.65%", "102.3%+1.75%", "108.4%+1.86%", "114.4%+1.96%", "120.4%+2.06%", "127.9%+2.19%", "135.5%+2.32%", "143.0%+2.45%"]}, "Q炽鬃拳伤害": {"name": "Q炽鬃拳伤害", "type": "攻击", "plus": 1, "value": ["98.7%+1.69%", "106.1%+1.82%", "113.5%+1.95%", "123.4%+2.11%", "130.8%+2.24%", "138.2%+2.37%", "148.0%+2.54%", "157.9%+2.71%", "167.8%+2.88%", "177.7%+3.05%", "187.5%+3.21%", "197.4%+3.38%", "209.7%+3.60%", "222.1%+3.81%", "234.4%+4.02%"]}, "Q炽鬃拳伤害(蒸发)": {"name": "Q炽鬃拳伤害(蒸发)", "type": "攻击", "plus": 1, "value": ["98.7%+1.69%", "106.1%+1.82%", "113.5%+1.95%", "123.4%+2.11%", "130.8%+2.24%", "138.2%+2.37%", "148.0%+2.54%", "157.9%+2.71%", "167.8%+2.88%", "177.7%+3.05%", "187.5%+3.21%", "197.4%+3.38%", "209.7%+3.60%", "222.1%+3.81%", "234.4%+4.02%"]}, "Q焚落踢伤害": {"name": "Q焚落踢伤害", "type": "攻击", "plus": 1, "value": ["139.3%+2.39%", "149.7%+2.57%", "160.2%+2.75%", "174.1%+2.99%", "184.6%+3.16%", "195.0%+3.34%", "209.0%+3.58%", "222.9%+3.82%", "236.8%+4.06%", "250.7%+4.30%", "264.7%+4.54%", "278.6%+4.78%", "296.0%+5.07%", "313.4%+5.37%", "330.8%+5.67%"]}, "Q焚落踢伤害(蒸发)": {"name": "Q焚落踢伤害(蒸发)", "type": "攻击", "plus": 1, "value": ["139.3%+2.39%", "149.7%+2.57%", "160.2%+2.75%", "174.1%+2.99%", "184.6%+3.16%", "195.0%+3.34%", "209.0%+3.58%", "222.9%+3.82%", "236.8%+4.06%", "250.7%+4.30%", "264.7%+4.54%", "278.6%+4.78%", "296.0%+5.07%", "313.4%+5.37%", "330.8%+5.67%"]}}, "米卡": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["43.3%", "46.8%", "50.3%", "55.3%", "58.9%", "62.9%", "68.4%", "74.0%", "79.5%", "85.5%", "91.6%", "97.6%", "103.6%", "109.7%", "115.7%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["112.7%", "121.9%", "131.1%", "144.2%", "153.4%", "163.9%", "178.3%", "192.7%", "207.1%", "222.9%", "238.6%", "254.3%", "270.1%", "285.8%", "301.5%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E霜流矢伤害": {"name": "E霜流矢伤害", "type": "攻击力", "plus": 1, "value": ["67.20%", "72.24%", "77.28%", "84.00%", "89.04%", "94.08%", "100.80%", "107.52%", "114.24%", "120.96%", "127.68%", "134.40%", "142.80%", "151.20%", "159.60%"]}, "E冰星信标伤害": {"name": "E冰星信标伤害", "type": "攻击力", "plus": 1, "value": ["84.00%", "90.30%", "96.60%", "105.00%", "111.30%", "117.60%", "126.00%", "134.40%", "142.80%", "151.20%", "159.60%", "168.00%", "178.50%", "189.00%", "199.50%"]}, "E冰星破片伤害": {"name": "E冰星破片伤害", "type": "攻击力", "plus": 1, "value": ["25.20%", "27.09%", "28.98%", "31.50%", "33.39%", "35.28%", "37.80%", "40.32%", "42.84%", "45.36%", "47.88%", "50.40%", "53.55%", "56.70%", "59.85%"]}, "Q施放回复量": {"name": "Q施放回复量", "type": "生命值", "plus": 1, "value": ["12.2%+1172.04", "13.1%+1289.26", "14.0%+1416.24", "15.2%+1553.00", "16.1%+1699.52", "17.0%+1855.82", "18.3%+2021.88", "19.5%+2197.71", "20.7%+2383.31", "21.9%+2578.67", "23.1%+2783.81", "24.3%+2998.71", "25.9%+3223.38", "27.4%+3457.82", "28.9%+3702.03"]}, "Q鹰翎回复量": {"name": "Q鹰翎回复量", "type": "生命值", "plus": 1, "value": ["2.4%+233.95", "2.6%+257.35", "2.8%+282.70", "3.0%+310.00", "3.2%+339.25", "3.4%+370.45", "3.6%+403.59", "3.9%+438.69", "4.1%+475.74", "4.4%+514.74", "4.6%+555.69", "4.9%+598.58", "5.2%+643.43", "5.5%+690.23", "5.8%+738.98"]}, "Q鹰翎回复间隔": {"name": "Q鹰翎回复间隔", "type": "攻击力", "plus": 1, "value": ["2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5", "2.5"]}}, "旅行者(风)": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.5%", "48.1%", "51.7%", "56.9%", "60.5%", "64.6%", "70.3%", "76.0%", "81.7%", "87.9%", "94.1%", "100.3%", "106.5%", "112.7%", "118.9%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.9%+72.2%", "60.4%+78.1%", "65.0%+84.0%", "71.5%+92.4%", "76.1%+98.3%", "81.2%+105.0%", "88.4%+114.2%", "95.6%+123.5%", "102.7%+132.7%", "110.5%+142.8%", "118.3%+152.9%", "126.1%+163.0%", "133.9%+173.0%", "141.7%+183.1%", "149.5%+193.2%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E初始切割伤害": {"name": "E初始切割伤害", "type": "攻击力", "plus": 1, "value": ["12.0%", "12.9%", "13.8%", "15.0%", "15.9%", "16.8%", "18.0%", "19.2%", "20.4%", "21.6%", "22.8%", "24.0%", "25.5%", "27.0%", "28.5%"]}, "E最大切割伤害": {"name": "E最大切割伤害", "type": "攻击力", "plus": 1, "value": ["16.8%", "18.1%", "19.3%", "21.0%", "22.3%", "23.5%", "25.2%", "26.9%", "28.6%", "30.2%", "31.9%", "33.6%", "35.7%", "37.8%", "39.9%"]}, "E初始爆风伤害": {"name": "E初始爆风伤害", "type": "攻击力", "plus": 1, "value": ["176%", "189%", "202%", "220%", "233%", "246%", "264%", "282%", "299%", "317%", "334%", "352%", "374%", "396%", "418%"]}, "E最大爆风伤害": {"name": "E最大爆风伤害", "type": "攻击力", "plus": 1, "value": ["192%", "206%", "221%", "240%", "254%", "269%", "288%", "307%", "326%", "346%", "365%", "384%", "408%", "432%", "456%"]}, "Q龙卷风伤害": {"name": "Q龙卷风伤害", "type": "攻击力", "plus": 1, "value": ["80.8%", "86.9%", "92.9%", "101.0%", "107.1%", "113.1%", "121.2%", "129.3%", "137.4%", "145.4%", "153.5%", "161.6%", "171.7%", "181.8%", "191.9%"]}, "Q附加元素伤害": {"name": "Q附加元素伤害", "type": "攻击力", "plus": 1, "value": ["24.8%", "26.7%", "28.5%", "31.0%", "32.9%", "34.7%", "37.2%", "39.7%", "42.2%", "44.6%", "47.1%", "49.6%", "52.7%", "55.8%", "58.9%"]}}, "旅行者(雷)": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.5%", "48.1%", "51.7%", "56.9%", "60.5%", "64.6%", "70.3%", "76.0%", "81.7%", "87.9%", "94.1%", "100.3%", "106.5%", "112.7%", "118.9%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.9%+72.2%", "60.4%+78.1%", "65.0%+84.0%", "71.5%+92.4%", "76.1%+98.3%", "81.2%+105.0%", "88.4%+114.2%", "95.6%+123.5%", "102.7%+132.7%", "110.5%+142.8%", "118.3%+152.9%", "126.1%+163.0%", "133.9%+173.0%", "141.7%+183.1%", "149.5%+193.2%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["79%", "85%", "90%", "98%", "104%", "110%", "118%", "126%", "134%", "142%", "149%", "157%", "167%", "177%", "187%"]}, "Q伤害": {"name": "Q伤害", "type": "攻击力", "plus": 1, "value": ["114.4%", "123.0%", "131.6%", "143.0%", "151.6%", "160.2%", "171.6%", "183.0%", "194.5%", "205.9%", "217.4%", "228.8%", "243.1%", "257.4%", "271.7%"]}, "Q威光落雷伤害": {"name": "Q威光落雷伤害", "type": "攻击力", "plus": 1, "value": ["32.8%", "35.3%", "37.7%", "41.0%", "43.5%", "45.9%", "49.2%", "52.5%", "55.8%", "59.0%", "62.3%", "65.6%", "69.7%", "73.8%", "77.9%"]}}, "旅行者(岩)": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.5%", "48.1%", "51.7%", "56.9%", "60.5%", "64.6%", "70.3%", "76.0%", "81.7%", "87.9%", "94.1%", "100.3%", "106.5%", "112.7%", "118.9%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.9%+72.2%", "60.4%+78.1%", "65.0%+84.0%", "71.5%+92.4%", "76.1%+98.3%", "81.2%+105.0%", "88.4%+114.2%", "95.6%+123.5%", "102.7%+132.7%", "110.5%+142.8%", "118.3%+152.9%", "126.1%+163.0%", "133.9%+173.0%", "141.7%+183.1%", "149.5%+193.2%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["248%", "267%", "285%", "310%", "329%", "347%", "372%", "397%", "422%", "446%", "471%", "496%", "527%", "558%", "589%"]}, "Q地震波单次伤害": {"name": "Q地震波单次伤害", "type": "攻击力", "plus": 1, "value": ["148%", "159%", "170%", "185%", "196%", "207%", "222%", "237%", "252%", "266%", "281%", "296%", "314%", "333%", "352%"]}}, "旅行者(草)": {"A一段伤害": {"name": "A一段伤害", "type": "攻击力", "plus": 1, "value": ["44.5%", "48.1%", "51.7%", "56.9%", "60.5%", "64.6%", "70.3%", "76.0%", "81.7%", "87.9%", "94.1%", "100.3%", "106.5%", "112.7%", "118.9%"]}, "A重击伤害": {"name": "A重击伤害", "type": "攻击力", "plus": 1, "value": ["55.9%+72.2%", "60.4%+78.1%", "65.0%+84.0%", "71.5%+92.4%", "76.1%+98.3%", "81.2%+105.0%", "88.4%+114.2%", "95.6%+123.5%", "102.7%+132.7%", "110.5%+142.8%", "118.3%+152.9%", "126.1%+163.0%", "133.9%+173.0%", "141.7%+183.1%", "149.5%+193.2%"]}, "A高空下落伤害": {"name": "A高空下落伤害", "type": "攻击力", "plus": 1, "value": ["160%", "173%", "186%", "204%", "217%", "232%", "253%", "273%", "293%", "316%", "338%", "360%", "382%", "405%", "427%"]}, "E伤害": {"name": "E伤害", "type": "攻击力", "plus": 1, "value": ["230%", "248%", "265%", "288%", "305%", "323%", "346%", "369%", "392%", "415%", "438%", "461%", "490%", "518%", "547%"]}, "Q草灯莲攻击伤害": {"name": "Q草灯莲攻击伤害", "type": "攻击力", "plus": 1, "value": ["80.2%", "86.2%", "92.2%", "100.2%", "106.2%", "112.2%", "120.2%", "128.3%", "136.3%", "144.3%", "152.3%", "160.3%", "170.3%", "180.4%", "190.4%"]}, "Q草灯莲攻击伤害(蔓激化)": {"name": "Q草灯莲攻击伤害(蔓激化)", "type": "攻击力", "plus": 1, "value": ["80.2%", "86.2%", "92.2%", "100.2%", "106.2%", "112.2%", "120.2%", "128.3%", "136.3%", "144.3%", "152.3%", "160.3%", "170.3%", "180.4%", "190.4%"]}, "Q激烈爆发伤害": {"name": "Q激烈爆发伤害", "type": "攻击力", "plus": 1, "value": ["400.8%", "430.9%", "460.9%", "501.0%", "531.1%", "561.1%", "601.2%", "641.3%", "681.4%", "721.4%", "761.5%", "801.6%", "851.7%", "901.8%", "951.9%"]}}} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/effect/char_effect.json b/GenshinUID/genshinuid_enka/effect/char_effect.json new file mode 100644 index 00000000..72b6218f --- /dev/null +++ b/GenshinUID/genshinuid_enka/effect/char_effect.json @@ -0,0 +1,2984 @@ +{ + "神里绫华": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "AB:dmgBonus+30", + "70": "dmgBonus+18" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "d+30", + "5": "", + "6": "B:dmgBonus+298" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "琴": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "E:dmgBonus+40", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "旅行者": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "丽莎": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "d+15" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "芭芭拉": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "HydroDmgBonus+15", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "HydroDmgBonus+15", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "凯亚": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "AB:critRate+15", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "迪卢克": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "ABCE:dmgBonus+20" + }, + "fight_talent": { + "1": "dmgBonus+15", + "2": "addAtk+30", + "3": "", + "4": "E:dmgBonus+40", + "5": "", + "6": "A:dmgBonus+30" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "雷泽": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "dmgBonus+10", + "2": "", + "3": "", + "4": "d+15", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "安柏": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "Q:critRate+10", + "70": "addAtk+15" + }, + "fight_talent": { + "1": "", + "2": "E:dmgBonus+200", + "3": "", + "4": "", + "5": "", + "6": "addAtk+15" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "温迪": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "AnemoResist+-12;PhysicalResist+-12", + "3": "", + "4": "dmgBonus+25", + "5": "", + "6": "Resist+-20" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "香菱": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "addAtk+10" + }, + "fight_talent": { + "1": "PyroResist+-15", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "EQ:dmgBonus+15" + }, + "group_skill": { + "50": "", + "70": "addAtk+10" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "北斗": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "AB:dmgBonus+15" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "ElectroResist+-15" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "行秋": { + "normal": { + "normal_skill": { + "50": "", + "70": "dmgBonus+20" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "HydroResist+-15", + "3": "", + "4": "E:dmgBonus+50", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "魈": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "dmgBonus+15", + "70": "E:dmgBonus+15" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "addDef+100", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "凝光": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "dmgBonus+12" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "GeoDmgBonus+12" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "可莉": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "B:dmgBonus+50", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "d+23", + "3": "", + "4": "", + "5": "", + "6": "dmgBonus+10" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "PyroDmgBonus+10" + } + } + }, + "钟离": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "ABC:addDmg+1.39%hp;E:addDmg+1.9%hp;Q:addDmg+33%hp" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "菲谢尔": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "A:addDmg+22%atk", + "2": "召唤伤害:addDmg+200%atk", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "班尼特": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "energyRecharge+30", + "3": "", + "4": "", + "5": "", + "6": "dmgBonus+15" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "PyroDmgBonus+15" + } + } + }, + "达达利亚": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "诺艾尔": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "B:dmgBonus+15", + "3": "", + "4": "", + "5": "", + "6": "exAtk+50%def" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "七七": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "AB:dmgBonus+15", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "重云": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "CryoResist+-10" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "Q:dmgBonus+15" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "甘雨": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "B:critRate+20", + "70": "BE:dmgBonus+20" + }, + "fight_talent": { + "1": "CryoResist+-15", + "2": "", + "3": "", + "4": "dmgBonus+15", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "CryoDmgBonus+20" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "dmgBonus+15", + "5": "", + "6": "" + } + } + }, + "阿贝多": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "E:dmgBonus+12", + "70": "elementalMastery+125" + }, + "fight_talent": { + "1": "", + "2": "Q:addDmg+120%def", + "3": "", + "4": "C:dmgBonus+30", + "5": "", + "6": "dmgBonus+17" + }, + "group_skill": { + "50": "", + "70": "elementalMastery+125" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "C:dmgBonus+30", + "5": "", + "6": "dmgBonus+17" + } + } + }, + "迪奥娜": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "E:dmgBonus+15;shieldBonus+15", + "3": "", + "4": "", + "5": "", + "6": "elementalMastery+200" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "elementalMastery+200" + } + } + }, + "莫娜": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "dmgBonus+20%energyrecharge" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "B:dmgBonus+180" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "刻晴": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "Q:critRate+15;energyRecharge+15" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "addAtk+25", + "5": "", + "6": "dmgBonus+18" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "砂糖": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "elementalMastery+50", + "70": "elementalMastery+20%elementalMastery" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "dmgBonus+20" + } + } + }, + "辛焱": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "physicalDmgBonus+15" + }, + "fight_talent": { + "1": "", + "2": "Q:critRate+100", + "3": "", + "4": "PhysicalResist+-15", + "5": "", + "6": "B:exAtk+50%def" + }, + "group_skill": { + "50": "", + "70": "physicalDmgBonus+15" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "罗莎莉亚": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "E:critRate+12", + "70": "" + }, + "fight_talent": { + "1": "A:dmgBonus+10", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "PhysicalResist+-20" + }, + "group_skill": { + "50": "", + "70": "critRate+15%critRate" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "胡桃": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "dmgBonus+33" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "critRate+12" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "枫原万叶": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "dmgBonus+0.04%elementalMastery" + }, + "fight_talent": { + "1": "", + "2": "elementalMastery+200", + "3": "", + "4": "", + "5": "", + "6": "ABC:dmgBonus+0.2%elementalMastery" + }, + "group_skill": { + "50": "", + "70": "dmgBonus+0.04%elementalMastery" + }, + "group_talent": { + "1": "", + "2": "elementalMastery+200", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "烟绯": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "B:dmgBonus+15", + "70": "B:addDmg+80%atk" + }, + "fight_talent": { + "1": "", + "2": "B:critRate+20", + "3": "", + "4": "", + "5": "", + "6": "B:dmgBonus+10" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "宵宫": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "dmgBonus+20", + "70": "" + }, + "fight_talent": { + "1": "addAtk+20", + "2": "dmgBonus+25", + "3": "", + "4": "", + "5": "", + "6": "A:dmgBonus+30" + }, + "group_skill": { + "50": "", + "70": "addAtk+15" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "托马": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "E:addDmg+2.2%hp" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "ABC:dmgBonus+15" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "ABC:dmgBonus+15" + } + } + }, + "优菈": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "dmgBonus+30", + "2": "", + "3": "", + "4": "Q:dmgBonus+25", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "雷电将军": { + "normal": { + "normal_skill": { + "50": "", + "70": "dmgBonus+40%energyRecharge" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "Q:ignoreDef+60", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "addAtk+30", + "5": "", + "6": "" + } + } + }, + "早柚": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "Q:addDmg+0.2%elementalMastery" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "珊瑚宫心海": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "dmgBonus+40" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "五郎": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "addDef+25", + "70": "E:addDmg+156%def;Q:addDmg+15.6%def" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "addDef+25", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "critDmg+40" + } + } + }, + "九条裟罗": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "critDmg+60" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "critDmg+60" + } + } + }, + "荒泷一斗": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "荒泷逆袈裟连斩伤害:addDmg+35%def;荒泷逆袈裟终结伤害:addDmg+35%def" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "addAtk+20;addDef+20", + "5": "", + "6": "B:critDmg+70" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "addAtk+20;addDef+20", + "5": "", + "6": "" + } + } + }, + "八重神子": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "E:dmgBonus+0.15%elementalMastery" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "dmgBonus+20", + "5": "", + "6": "E:ignoreDef+60" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "ElectroDmgBonus+20", + "5": "", + "6": "" + } + } + }, + "夜兰": { + "normal": { + "normal_skill": { + "50": "hp+52", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "dmgBonus+15" + }, + "fight_talent": { + "1": "", + "2": "Q:addDmg+14%hp", + "3": "", + "4": "hp+20", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "dmgBonus+15" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "hp+20", + "5": "", + "6": "" + } + } + }, + "埃洛伊": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "addAtk+16", + "70": "BEQ:dmgBonus+35" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "申鹤": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "dmgBonus+15", + "70": "Q:dmgBonus+15" + }, + "fight_talent": { + "1": "", + "2": "EQ:critDmg+15", + "3": "", + "4": "E:dmgBonus+105", + "5": "", + "6": "" + }, + "group_skill": { + "50": "dmgBonus+15", + "70": "ABC:dmgBonus+15" + }, + "group_talent": { + "1": "", + "2": "critDmg+15", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "云堇": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "A:dmgBonus+15", + "3": "", + "4": "addDef+20", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "A:dmgBonus+15", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "久岐忍": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "E:addDmg+25%elementalMastery;E:addHeal+75%elementalMastery" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "ABC:addDmg+9.7%hp", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "神里绫人": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "E:dmgBonus+40", + "2": "addHp+50", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "阿葵丽雅": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "瑶瑶": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "鹿野院平藏": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "E:critDmg+32" + }, + "group_skill": { + "50": "", + "70": "elementalMastery+80" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "柯莱": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "energyRecharge+20", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "elementalMastery+60", + "5": "", + "6": "" + } + } + }, + "提纳里": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "elementalMastery+50", + "70": "B:dmgBonus+60%0.06%elementalMastery" + }, + "fight_talent": { + "1": "B:critRate+15", + "2": "dmgBonus+20", + "3": "", + "4": "elementalMastery+60", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "多莉": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "赛诺": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "Q:addDmg+150%elementalMastery" + }, + "fight_talent": { + "1": "", + "2": "dmgBonus+50", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "妮露": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "critRate+30%0.0006%hp;critDmg+60%0.0012%hp" + } + }, + "fight": { + "fight_skill": { + "50": "elementalMastery+100", + "70": "" + }, + "fight_talent": { + "1": "水月:dmgBonus+65", + "2": "HydroResist+-35;DendroResist+-35", + "3": "", + "4": "Q:dmgBonus+50", + "5": "", + "6": "" + }, + "group_skill": { + "50": "elementalMastery+100", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "坎蒂丝": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "A:dmgBonus+0.05%hp" + }, + "fight_talent": { + "1": "", + "2": "addHp+20", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "A:dmgBonus+0.05%hp" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "纳西妲": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "灭净三业:dmgBonus+80%10%elementalMastery;业障除:dmgBonus+80%10%elementalMastery" + }, + "fight_talent": { + "1": "", + "2": "d+30", + "3": "", + "4": "elementalMastery+160", + "5": "", + "6": "" + }, + "group_skill": { + "50": "elementalMastery+25%elementalMastery", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "莱依拉": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "飞星伤害:addDmg+1.5%hp" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "AB:addDmg+5%hp", + "5": "", + "6": "飞星伤害:dmgBonus+40;星光弹伤害:dmgBonus+40" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "流浪者": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "Q:dmgBonus+200", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "珐露珊": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "addDmg+45.9%baseAtk" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "critDmg+40" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "旅行者(风)": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "energyRecharge+16", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "Resist+-20" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "旅行者(岩)": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "critRate+10", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "旅行者(雷)": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "ElectroResist+-15", + "3": "", + "4": "", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "旅行者(草)": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "elementalMastery+60", + "70": "Q:dmgBonus+0.12%elementalMastery;光幕攻击伤害:dmgBonus+0.12%elementalMastery" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "dmgBonus+12" + }, + "group_skill": { + "50": "elementalMastery+60", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "dmgBonus+12" + } + } + }, + "艾尔海森": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "E:dmgBonus+100%0.15%elementalMastery;Q:dmgBonus+100%0.1%elementalMastery" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "critDmg+70;critRate+10" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "elementalMastery+90", + "5": "", + "6": "" + } + } + }, + "瑶瑶": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "DendroDmgBonus+15", + "2": "", + "3": "", + "4": "elementalMastery+120%0.3%hp", + "5": "", + "6": "" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "DendroDmgBonus+15", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "迪希雅": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "addHp+15;E:addDmg+5.2%hp;Q:addDmg+8.4%hp", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "Q:critRate+10;Q:critDmg+60" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + }, + "米卡": { + "normal": { + "normal_skill": { + "50": "", + "70": "" + }, + "normal_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + }, + "fight": { + "fight_skill": { + "50": "", + "70": "" + }, + "fight_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "A:critDmg+60" + }, + "group_skill": { + "50": "", + "70": "" + }, + "group_talent": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "" + } + } + } +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/effect/dmg_map.json b/GenshinUID/genshinuid_enka/effect/dmg_map.json new file mode 100644 index 00000000..6f82a24d --- /dev/null +++ b/GenshinUID/genshinuid_enka/effect/dmg_map.json @@ -0,0 +1 @@ +{"胡桃": [{"skill": "A重击伤害(蒸发)", "value": 53386.94877412422, "seq": "护摩之杖|追忆之注连|生火暴", "critRate": 0.7000000000000001, "critDmg": 2.056, "atk": 4039.8860032000002, "other": {"生命": 35355.232, "元素精通": 80.0}}, {"skill": "A重击伤害(蒸发)", "value": 57740.61478722524, "seq": "护摩之杖|追忆之注连|精火暴", "critRate": 0.7000000000000001, "critDmg": 2.056, "atk": 3477.5008, "other": {"生命": 28108.0, "元素精通": 267.0}}, {"skill": "A重击伤害(蒸发)", "value": 46743.00694572758, "seq": "匣里灭辰|追忆之注连|生火暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 3005.5919872, "other": {"生命": 32244.832, "元素精通": 301.0}}, {"skill": "A重击伤害(蒸发)", "value": 43824.0067038785, "seq": "决斗之枪|追忆之注连|精火暴", "critRate": 0.7999999999999999, "critDmg": 1.93, "atk": 2752.85696, "other": {"生命": 24997.600000000002, "元素精通": 267.0}}, {"skill": "A重击伤害(蒸发)", "value": 51430.721148416014, "seq": "护摩之杖|炽烈的炎之魔女|生火暴", "critRate": 0.7000000000000001, "critDmg": 2.056, "atk": 3911.3660032000007, "other": {}}, {"skill": "A重击伤害(蒸发)", "value": 54026.46460369234, "seq": "护摩之杖|炽烈的炎之魔女|精火暴", "critRate": 0.7000000000000001, "critDmg": 2.056, "atk": 3348.9808000000003, "other": {}}, {"skill": "A重击伤害(蒸发)", "value": 44569.63379842758, "seq": "匣里灭辰|炽烈的炎之魔女|生火暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 2904.7919872, "other": {}}, {"skill": "A重击伤害(蒸发)", "value": 43179.15870616433, "seq": "匣里灭辰|炽烈的炎之魔女|精火暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 2472.85696, "other": {}}], "托马": [{"skill": "E护盾吸收量上限", "value": 13854.622032, "seq": "西风长枪|绝缘之旗印千岩牢固|充生暴", "critRate": 0.7, "critDmg": "any", "atk": 1492.18, "other": {"生命": 23024.546, "充能效率": 2.224}}, {"skill": "E护盾吸收量上限", "value": 18046.115352, "seq": "黑缨枪|绝缘之旗印千岩牢固|充生生", "critRate": "any", "critDmg": "any", "atk": 1167.24, "other": {"生命": 33717.130999999994, "充能效率": 1.918}}], "宵宫": [{"skill": "A一段伤害", "value": 7089.366766962436, "seq": "飞雷之弦振|追忆之注连|攻火暴", "critRate": 0.8, "critDmg": 1.8559999999999999, "atk": 2308.926, "other": {}}, {"skill": "A一段伤害", "value": 6856.8701182019595, "seq": "弓藏|追忆之注连|攻火暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 2276.047, "other": {}}], "烟绯": [{"skill": "A重击伤害(蒸发)", "value": 35355.2635135044, "seq": "四风原典|流浪大地的乐团|攻火暴", "critRate": 0.768, "critDmg": 1.536, "atk": 1808.568, "other": {"元素精通": 160.0}}, {"skill": "A重击伤害(蒸发)", "value": 39960.35636679036, "seq": "流浪乐章|流浪大地的乐团|攻火暴", "critRate": 0.7402500000000001, "critDmg": 1.4805000000000001, "atk": 1635.5, "other": {"元素精通": 640.0}}], "可莉": [{"skill": "A重击伤害(蒸发)", "value": 36017.470103856205, "seq": "四风原典|炽烈的炎之魔女|攻火暴", "critRate": 0.768, "critDmg": 1.536, "atk": 1933.954, "other": {"元素精通": 80.0}}, {"skill": "A重击伤害(蒸发)", "value": 41469.15074467482, "seq": "流浪乐章|炽烈的炎之魔女|攻火暴", "critRate": 0.7402500000000001, "critDmg": 1.4805000000000001, "atk": 1760.886, "other": {"元素精通": 560.0}}], "迪卢克": [{"skill": "Q斩击伤害(蒸发)", "value": 37712.22099890101, "seq": "狼的末路|炽烈的炎之魔女|精火暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 2193.228, "other": {"元素精通": 267.0}}, {"skill": "Q斩击伤害(蒸发)", "value": 33706.608095392454, "seq": "螭骨剑|炽烈的炎之魔女|攻火暴", "critRate": 0.8365, "critDmg": 1.673, "atk": 1803.27, "other": {"元素精通": 80.0}}], "辛焱": [{"skill": "Q伤害", "value": 47697.99647331423, "seq": "无工之剑|苍白之火染血的骑士道|攻物暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 2798.014, "other": {"防御": 1038.7}}, {"skill": "Q伤害", "value": 32809.409010970165, "seq": "白影剑|苍白之火染血的骑士道|攻物暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1924.6340000000002, "other": {"防御": 1739.423}}, {"skill": "E三级护盾吸收量", "value": 9617.518079999998, "seq": "祭礼大剑|千岩牢固|防防防", "critRate": "any", "critDmg": "any", "atk": 1727.36, "other": {"防御": 2723.7909999999997}}, {"skill": "E三级护盾吸收量", "value": 10807.19712, "seq": "白影剑|千岩牢固|防防防", "critRate": "any", "critDmg": "any", "atk": 1904.9, "other": {"防御": 3136.8740000000003}}], "安柏": [{"skill": "Q箭雨总伤害", "value": 38608.26212256513, "seq": "终末嗟叹之诗|昔日宗室之仪|攻火暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 2310.3860000000004, "other": {"元素精通": 240.0}}, {"skill": "A满蓄力瞄准射击", "value": 26619.34915305543, "seq": "阿莫斯之弓|流浪大地的乐团|攻火暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 2390.1620000000003, "other": {"元素精通": 160.0}}], "香菱": [{"skill": "Q旋火轮伤害(蒸发)", "value": 29492.70529685512, "seq": "薙草之稻光|绝缘之旗印|充火暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1936.61616, "other": {"元素精通": 156.0, "充能效率": 2.434}}, {"skill": "Q旋火轮伤害(蒸发)", "value": 32166.85138111173, "seq": "薙草之稻光|绝缘之旗印|精火暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1815.7978400000002, "other": {"元素精通": 343.0, "充能效率": 1.916}}, {"skill": "Q旋火轮伤害(蒸发)", "value": 28530.600854572553, "seq": "天空之脊|绝缘之旗印|充火暴", "critRate": 0.6425000000000001, "critDmg": 1.2850000000000001, "atk": 1704.45, "other": {"元素精通": 156.0, "充能效率": 2.251}}, {"skill": "Q旋火轮伤害(蒸发)", "value": 32314.717098039797, "seq": "天空之脊|绝缘之旗印|精火暴", "critRate": 0.6425000000000001, "critDmg": 1.2850000000000001, "atk": 1704.45, "other": {"元素精通": 343.0, "充能效率": 1.733}}, {"skill": "Q旋火轮伤害(蒸发)", "value": 30876.375181652355, "seq": "渔获|绝缘之旗印|充火暴", "critRate": 0.5425000000000001, "critDmg": 1.3250000000000002, "atk": 1450.25, "other": {"元素精通": 156.0, "充能效率": 2.342}}, {"skill": "Q旋火轮伤害(蒸发)", "value": 35316.25359413867, "seq": "渔获|绝缘之旗印|精火暴", "critRate": 0.5425000000000001, "critDmg": 1.3250000000000002, "atk": 1450.25, "other": {"元素精通": 343.0, "充能效率": 1.824}}], "班尼特": [{"skill": "Q伤害(蒸发)", "value": 39661.290350547235, "seq": "风鹰剑|昔日宗室之仪|充火暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1608.5, "other": {"元素精通": 80.0, "充能效率": 1.985}}, {"skill": "Q伤害(蒸发)", "value": 35344.89962409378, "seq": "天空之刃|昔日宗室之仪|充火暴", "critRate": 0.6225, "critDmg": 1.245, "atk": 1349.7, "other": {"元素精通": 80.0, "充能效率": 2.536}}, {"skill": "Q持续治疗", "value": 6774.81824579, "seq": "风鹰剑|昔日宗室之仪|充生治", "critRate": "any", "critDmg": "any", "atk": 1522, "other": {"生命值": 26673.102, "充能效率": 1.985}}, {"skill": "Q持续治疗", "value": 6774.81824579, "seq": "天空之刃|昔日宗室之仪|充生治", "critRate": "any", "critDmg": "any", "atk": 1269.8, "other": {"生命值": 26673.102, "充能效率": 2.536}}], "妮露": [{"skill": "A丰穰之核(绽放)", "value": 22607.88534819233, "seq": "圣显之钥|千岩牢固流浪大地的乐团|生生生", "critRate": "any", "critDmg": "any", "atk": 66739.63, "other": {"元素精通": 120.0, "充能效率": 1.7}}, {"skill": "A丰穰之核(绽放)", "value": 25175.510885092877, "seq": "圣显之钥|千岩牢固流浪大地的乐团|生生生", "critRate": "any", "critDmg": "any", "atk": 66739.63, "other": {"元素精通": 360.0, "充能效率": 1.2}}, {"skill": "A丰穰之核(绽放)", "value": 18610.079804023466, "seq": "磐岩结绿|千岩牢固流浪大地的乐团|生生生", "critRate": "any", "critDmg": "any", "atk": 56687.16, "other": {"元素精通": 360.0, "充能效率": 1.2}}, {"skill": "A丰穰之核(绽放)", "value": 19899.749186272347, "seq": "西福斯的月光|千岩牢固流浪大地的乐团|生生生", "critRate": "any", "critDmg": "any", "atk": 53650.16, "other": {"元素精通": 525.0, "充能效率": 1.5779999999999998}}], "坎蒂丝": [{"skill": "Q水波冲击伤害", "value": 3436.018099200001, "seq": "西风长枪|昔日宗室之仪|生生暴", "critRate": 0.5, "critDmg": 0.6, "atk": 1088, "other": {"生命值": 31663.000000000004, "充能效率": 1.9060000000000001}}, {"skill": "Q水波冲击伤害", "value": 3681.520632, "seq": "喜多院十文字|昔日宗室之仪|生生生", "critRate": "any", "critDmg": "any", "atk": 1088, "other": {"生命值": 36187.0, "充能效率": 1.7}}, {"skill": "Q水波冲击伤害", "value": 3740.1587190000005, "seq": "黑缨枪|昔日宗室之仪|充生生", "critRate": "any", "critDmg": "any", "atk": 877, "other": {"生命值": 36763.375, "充能效率": 2.068}}], "夜兰": [{"skill": "Q玄掷玲珑伤害", "value": 7417.139425152661, "seq": "若水|绝缘之旗印|充水暴", "critRate": 0.8, "critDmg": 2.076, "atk": 1254.1999999999998, "other": {"生命值3": 28478.0, "充能效率": 1.918}}, {"skill": "Q玄掷玲珑伤害", "value": 8617.394180864447, "seq": "若水|绝缘之旗印|生水暴", "critRate": 0.8, "critDmg": 2.076, "atk": 1254.1999999999998, "other": {"生命值3": 35211.7, "充能效率": 1.4}}, {"skill": "Q玄掷玲珑伤害", "value": 6080.524882270644, "seq": "终末嗟叹之诗|绝缘之旗印|生水暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 1333.4, "other": {"生命值3": 32899.7, "充能效率": 1.951}}, {"skill": "Q玄掷玲珑伤害", "value": 6128.764491061532, "seq": "西风猎弓|绝缘之旗印|生水暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 1148.6, "other": {"生命值3": 32899.7, "充能效率": 2.013}}], "神里绫人": [{"skill": "E一段瞬水剑伤害", "value": 10452.566919848408, "seq": "波乱月白经津|来歆余响|攻水暴", "critRate": 0.8, "critDmg": 1.8559999999999999, "atk": 2076.022, "other": {"生命值": 21238.0}}, {"skill": "E一段瞬水剑伤害", "value": 7190.3867934877135, "seq": "磐岩结绿|沉沦之心|攻水暴", "critRate": 0.8, "critDmg": 2.076, "atk": 2083.978, "other": {"生命值": 23981.0}}, {"skill": "E一段瞬水剑伤害", "value": 8675.170414631431, "seq": "黑剑|来歆余响|攻水暴", "critRate": 0.8, "critDmg": 1.746, "atk": 1885.3139999999999, "other": {"生命值": 21238.0}}], "珊瑚宫心海": [{"skill": "A一段伤害", "value": 8241.43136370588, "seq": "不灭月华|海染砗磲|生水治", "critRate": 0, "critDmg": 0, "atk": 1321.4, "other": {"生命值": 40639.802}}, {"skill": "A一段伤害", "value": 7173.440106852961, "seq": "试作金珀|海染砗磲|生水治", "critRate": 0, "critDmg": 0, "atk": 1203.8, "other": {"生命值": 39521.709}}, {"skill": "E治疗量", "value": 7119.967471257602, "seq": "讨龙英杰谭|千岩牢固|生生治", "critRate": 0, "critDmg": 0, "atk": 1073, "other": {"生命值": 47671.664000000004}}, {"skill": "E治疗量", "value": 7218.8039611680015, "seq": "试作金珀|千岩牢固|生生治", "critRate": 0, "critDmg": 0, "atk": 1203.8, "other": {"生命值": 48493.395000000004}}], "达达利亚": [{"skill": "Q伤害·近战(蒸发)", "value": 120257.11002258841, "seq": "冬极百星|沉沦之心流浪大地的乐团|攻水暴", "critRate": 0.768, "critDmg": 1.536, "atk": 1916.294, "other": {"元素精通": 160.0}}, {"skill": "Q伤害·近战(蒸发)", "value": 107637.6488319348, "seq": "冬极百星|沉沦之心角斗士的终幕礼|攻水暴", "critRate": 0.768, "critDmg": 1.536, "atk": 2079.9139999999998, "other": {"元素精通": 80.0}}, {"skill": "Q伤害·近战(蒸发)", "value": 91833.48932062383, "seq": "天空之翼|沉沦之心角斗士的终幕礼|攻水暴", "critRate": 0.7630000000000001, "critDmg": 1.5260000000000002, "atk": 2208.35, "other": {"元素精通": 80.0}}, {"skill": "Q伤害·近战(蒸发)", "value": 77162.43334804256, "seq": "苍翠猎弓|沉沦之心角斗士的终幕礼|攻水暴", "critRate": 0.7405, "critDmg": 1.481, "atk": 1889.206, "other": {"元素精通": 80.0}}], "行秋": [{"skill": "Q剑雨伤害", "value": 4274.701095015893, "seq": "祭礼剑|沉沦之心昔日宗室之仪|攻水暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1626.9360000000001, "other": {"生命值": 17046.4, "充能效率": 1.813}}, {"skill": "Q剑雨伤害", "value": 5755.17539043798, "seq": "磐岩结绿|绝缘之旗印|充水暴", "critRate": 0.8, "critDmg": 1.6920000000000002, "atk": 1685.8496, "other": {"生命值": 19090.8, "充能效率": 1.918}}], "莫娜": [{"skill": "Q泡影破裂伤害(蒸发)", "value": 135118.75827766486, "seq": "流浪乐章|绝缘之旗印|攻水暴", "critRate": 0.7402500000000001, "critDmg": 1.4805000000000001, "atk": 1718.502, "other": {"充能效率": 1.82, "元素精通": 80.0}}, {"skill": "Q泡影破裂伤害", "value": 25655.05922055149, "seq": "讨龙英杰谭|昔日宗室之仪|充水暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1205.4, "other": {"充能效率": 2.138}}, {"skill": "Q泡影破裂伤害", "value": 28670.92274432132, "seq": "试作金珀|昔日宗室之仪|充水暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1347.1000000000001, "other": {"充能效率": 2.138}}], "芭芭拉": [{"skill": "Q治疗量", "value": 30923.394195456003, "seq": "不灭月华|被怜爱的少女|生生治", "critRate": "any", "critDmg": "any", "atk": 1231.4, "other": {"生命值": 36274.566000000006}}, {"skill": "Q治疗量", "value": 28365.718929408005, "seq": "讨龙英杰谭|被怜爱的少女|生生治", "critRate": "any", "critDmg": "any", "atk": 983, "other": {"生命值": 34865.238}}, {"skill": "Q治疗量", "value": 28724.64908992, "seq": "试作金珀|被怜爱的少女|生生治", "critRate": "any", "critDmg": "any", "atk": 1113.8, "other": {"生命值": 35462.245}}], "流浪者": [{"skill": "E空居·不生断伤害", "value": 12642.485025967248, "seq": "图莱杜拉的回忆|沙上楼阁史话|攻风暴", "critRate": 0.7999499999999999, "critDmg": 1.6351, "atk": 2080.532, "other": {}}, {"skill": "E空居·不生断伤害", "value": 12105.523744051497, "seq": "四风原典|沙上楼阁史话|攻风暴", "critRate": 0.8, "critDmg": 1.8560000000000003, "atk": 1963.976, "other": {}}, {"skill": "E空居·不生断伤害", "value": 13448.964297218055, "seq": "流浪乐章|沙上楼阁史话|攻风暴", "critRate": 0.79995, "critDmg": 1.7451, "atk": 1692.012, "other": {}}], "珐露珊": [{"skill": "Q伤害", "value": 32921.30685915236, "seq": "终末嗟叹之诗|千岩牢固|充风暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1549.16, "other": {"充能效率": 2.269}}, {"skill": "Q伤害", "value": 27881.403211552002, "seq": "西风猎弓|千岩牢固|充风暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1312, "other": {"充能效率": 2.3310000000000004}}], "鹿野院平藏": [{"skill": "E伤害", "value": 59600.76567524704, "seq": "天空之卷|翠绿之影|攻风暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 2196.203, "other": {}}, {"skill": "E伤害", "value": 69017.30654599123, "seq": "流浪乐章|翠绿之影|攻风暴", "critRate": 0.7402500000000001, "critDmg": 1.4805000000000001, "atk": 1609.01, "other": {}}, {"skill": "E伤害", "value": 55302.14585175603, "seq": "匣里日月|翠绿之影|攻风暴", "critRate": 0.7405, "critDmg": 1.481, "atk": 1609.01, "other": {}}], "早柚": [{"skill": "Q不倒貉貉治疗量", "value": 6963.193857580801, "seq": "狼的末路|翠绿之影|精攻治", "critRate": "any", "critDmg": "any", "atk": 2408.6240000000003, "other": {"元素精通": 443.0}}, {"skill": "Q不倒貉貉治疗量", "value": 5086.871447425601, "seq": "西风大剑|翠绿之影|精攻治", "critRate": "any", "critDmg": "any", "atk": 1543.6680000000001, "other": {"元素精通": 443.0}}], "枫原万叶": [{"skill": "A扩散伤害", "value": 7029.7518706697465, "seq": "苍古自由之誓|翠绿之影|精精精", "critRate": "any", "critDmg": "any", "atk": 1397, "other": {"元素精通": 1031.0, "充能效率": 1.22}}, {"skill": "A扩散伤害", "value": 6924.401306231256, "seq": "西斯福的月光|翠绿之影|精精精", "critRate": "any", "critDmg": "any", "atk": 1279.4, "other": {"元素精通": 1001.0, "充能效率": 1.9407199999999998}}, {"skill": "A扩散伤害", "value": 6305.132411847671, "seq": "祭礼剑|翠绿之影|精精精", "critRate": "any", "critDmg": "any", "atk": 1212.1999999999998, "other": {"元素精通": 836.0, "充能效率": 1.833}}], "魈": [{"skill": "A高空下落伤害", "value": 33082.59570181664, "seq": "和璞鸢|辰砂往生录|攻风暴", "critRate": 0.8, "critDmg": 1.6360000000000001, "atk": 2301.758, "other": {}}, {"skill": "A高空下落伤害", "value": 31779.765441943833, "seq": "护摩之杖|辰砂往生录|攻风暴", "critRate": 0.8, "critDmg": 1.8559999999999999, "atk": 2354.2052000000003, "other": {"生命": 22610.399999999998}}, {"skill": "A高空下落伤害", "value": 28530.9012742665, "seq": "决斗之枪|辰砂往生录|攻风暴", "critRate": 0.8, "critDmg": 1.9300000000000002, "atk": 2066.358, "other": {}}], "温迪": [{"skill": "A扩散伤害", "value": 6481.058632419298, "seq": "终末嗟叹之诗|翠绿之影|精精精", "critRate": "any", "critDmg": "any", "atk": 1356.2, "other": {"元素精通": 781.0, "充能效率": 2.071}}, {"skill": "A扩散伤害", "value": 5829.106475560455, "seq": "西风猎弓|翠绿之影|精精精", "critRate": "any", "critDmg": "any", "atk": 1171.4, "other": {"元素精通": 721.0, "充能效率": 2.133}}, {"skill": "A扩散伤害", "value": 5733.418184512781, "seq": "绝弦|翠绿之影|充精精", "critRate": "any", "critDmg": "any", "atk": 1238.6, "other": {"元素精通": 699.0, "充能效率": 2.038}}], "琴": [{"skill": "Q领域发动治疗量", "value": 21354.744807232004, "seq": "天目影打刀|翠绿之影|攻攻治", "critRate": "any", "critDmg": "any", "atk": 2239.619, "other": {"充能效率": 1.659}}, {"skill": "Q领域发动治疗量", "value": 18626.809539328002, "seq": "西风剑|翠绿之影|攻攻治", "critRate": "any", "critDmg": "any", "atk": 1857.776, "other": {"充能效率": 1.813}}, {"skill": "Q领域发动治疗量", "value": 20399.853514624003, "seq": "风鹰剑|翠绿之影|充攻治", "critRate": "any", "critDmg": "any", "atk": 2105.958, "other": {"充能效率": 1.718}}], "砂糖": [{"skill": "A扩散伤害", "value": 5973.982431941923, "seq": "祭礼残章|翠绿之影|充精精", "critRate": "any", "critDmg": "any", "atk": 1059.8, "other": {"元素精通": 755.0}}, {"skill": "A扩散伤害", "value": 4962.795138121547, "seq": "试作金珀|翠绿之影|充精精", "critRate": "any", "critDmg": "any", "atk": 1127, "other": {"元素精通": 534.0}}, {"skill": "A扩散伤害", "value": 4962.795138121547, "seq": "讨龙英杰谭|翠绿之影|充精精", "critRate": "any", "critDmg": "any", "atk": 996.1999999999999, "other": {"元素精通": 534.0}}], "旅行者(风)": [{"skill": "A扩散伤害", "value": 5829.106475560455, "seq": "西风剑|翠绿之影|精精精", "critRate": "any", "critDmg": "any", "atk": 1270.04, "other": {"元素精通": 721.0}}], "赛诺": [{"skill": "E渡荒之雷(超激化)", "value": 24368.11593714102, "seq": "赤沙之杖|饰金之梦|精雷暴", "critRate": 0.8, "critDmg": 2.076, "atk": 1351.44, "other": {"元素精通": 347.0, "充能效率": 1.2}}, {"skill": "E渡荒之雷(超激化)", "value": 21246.514556260678, "seq": "和璞鸢|饰金之梦|攻雷暴", "critRate": 0.8, "critDmg": 1.6360000000000001, "atk": 1765.272, "other": {"元素精通": 160.0, "充能效率": 1.2}}, {"skill": "E渡荒之雷(超激化)", "value": 19596.963331743613, "seq": "决斗之枪|饰金之梦|精雷暴", "critRate": 0.7999999999999999, "critDmg": 1.93, "atk": 1083, "other": {"元素精通": 347.0, "充能效率": 1.2}}, {"skill": "E渡荒之雷(超激化)", "value": 22850.98977525427, "seq": "赤沙之杖|如雷的盛怒|精雷暴", "critRate": 0.8, "critDmg": 2.076, "atk": 1309.84, "other": {"元素精通": 267.0, "充能效率": 1.2}}, {"skill": "E渡荒之雷(超激化)", "value": 22870.817850891133, "seq": "和璞鸢|如雷的盛怒|精雷暴", "critRate": 0.8, "critDmg": 1.6360000000000001, "atk": 1303, "other": {"元素精通": 267.0, "充能效率": 1.2}}, {"skill": "E渡荒之雷(超激化)", "value": 19629.908466322642, "seq": "决斗之枪|如雷的盛怒|精雷暴", "critRate": 0.7999999999999999, "critDmg": 1.93, "atk": 1083, "other": {"元素精通": 267.0, "充能效率": 1.2}}], "多莉": [{"skill": "Q持续治疗量", "value": 10351.5365617248, "seq": "祭礼大剑|海染砗磲|生生治", "critRate": "any", "critDmg": "any", "atk": 1099, "other": {"充能效率": 1.506, "生命值": 39144.484000000004}}, {"skill": "Q持续治疗量", "value": 10351.5365617248, "seq": "西风大剑|海染砗磲|生生治", "critRate": "any", "critDmg": "any", "atk": 988, "other": {"充能效率": 1.813, "生命值": 39144.484000000004}}, {"skill": "Q持续治疗量", "value": 10219.361463469599, "seq": "钟剑|海染砗磲|充生治", "critRate": "any", "critDmg": "any", "atk": 1044, "other": {"充能效率": 1.718, "生命值": 38487.443}}], "久岐忍": [{"skill": "E越祓草轮治疗量", "value": 4586.9674448, "seq": "西福斯的月光|饰金之梦|精精治", "critRate": "any", "critDmg": "any", "atk": 1141.3, "other": {"元素精通": 779.0, "生命值": 27391.760000000002}}, {"skill": "E越祓草轮治疗量", "value": 25640.78336594912, "seq": "西福斯的月光|饰金之梦|精精精", "critRate": "any", "critDmg": "any", "atk": 1141.3, "other": {"元素精通": 966.0, "生命值": 22476.16}}, {"skill": "E越祓草轮治疗量", "value": 27391.50509777478, "seq": "西福斯的月光|乐园遗落之花|精精精", "critRate": "any", "critDmg": "any", "atk": 1141.3, "other": {"元素精通": 966.0, "生命值": 22476.16}}], "八重神子": [{"skill": "E杀生樱伤害·叁阶", "value": 10476.866128124067, "seq": "神乐之真意|如雷的盛怒角斗士的终幕礼|攻雷暴", "critRate": 0.8, "critDmg": 1.8559999999999999, "atk": 2155.808, "other": {"元素精通": 80.0}}, {"skill": "E杀生樱伤害·叁阶", "value": 10849.941270406101, "seq": "神乐之真意|饰金之梦|攻雷暴", "critRate": 0.8, "critDmg": 1.8559999999999999, "atk": 1985.1680000000001, "other": {"元素精通": 160.0}}, {"skill": "E杀生樱伤害·叁阶", "value": 8371.28598982942, "seq": "天空之卷|如雷的盛怒角斗士的终幕礼|攻雷暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 2619.878, "other": {"元素精通": 80.0}}, {"skill": "E杀生樱伤害·叁阶", "value": 10923.457701043038, "seq": "流浪乐章|如雷的盛怒角斗士的终幕礼|攻雷暴", "critRate": 0.79995, "critDmg": 1.7451, "atk": 1965.1, "other": {"元素精通": 80.0}}], "雷电将军": [{"skill": "Q梦想一刀基础伤害(满愿力)", "value": 75155.80587351158, "seq": "薙草之稻光|绝缘之旗印|充雷暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 2012.8694000000003, "other": {"充能效率": 2.7890000000000006}}, {"skill": "Q梦想一刀基础伤害(满愿力)", "value": 63503.368345612056, "seq": "渔获|绝缘之旗印|充攻暴", "critRate": 0.5425000000000001, "critDmg": 1.3250000000000002, "atk": 1806.802, "other": {"充能效率": 2.697}}], "九条裟罗": [{"skill": "Q天狗咒雷·金刚坏 伤害", "value": 51562.3486832146, "seq": "天空之翼|绝缘之旗印|充雷暴", "critRate": 0.8, "critDmg": 1.4520000000000002, "atk": 1649.26, "other": {"充能效率": 1.918}}, {"skill": "Q天狗咒雷·金刚坏 伤害", "value": 40839.34435865396, "seq": "祭礼弓|绝缘之旗印|充雷暴", "critRate": 0.7, "critDmg": 1.01, "atk": 1481.4, "other": {"充能效率": 2.2239999999999998}}], "刻晴": [{"skill": "A重击伤害", "value": 8842.333233938401, "seq": "雾切之回光|如雷的盛怒|攻雷暴", "critRate": 0.73375, "critDmg": 1.7675, "atk": 2071.702, "other": {"元素精通": 80.0}}, {"skill": "A重击伤害", "value": 8308.362750218495, "seq": "磐岩结绿|如雷的盛怒|攻雷暴", "critRate": 0.75, "critDmg": 2.176, "atk": 2116.0804, "other": {"元素精通": 80.0}}, {"skill": "A重击伤害", "value": 8185.824657817559, "seq": "匣里龙吟|如雷的盛怒|攻雷暴", "critRate": 0.6234999999999999, "critDmg": 1.547, "atk": 2126.107, "other": {"元素精通": 80.0}}], "雷泽": [{"skill": "A一段伤害", "value": 10291.831170291554, "seq": "螭骨剑|角斗士的终幕礼|攻物暴", "critRate": 0.7405, "critDmg": 1.481, "atk": 1758.824, "other": {}}, {"skill": "A一段伤害", "value": 10859.125216509341, "seq": "狼的末路|角斗士的终幕礼|攻物暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 2535.5640000000003, "other": {}}], "菲谢尔": [{"skill": "E奥兹攻击伤害", "value": 7689.052239443568, "seq": "绝弦|如雷的盛怒角斗士的终幕礼|攻雷暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1959.244, "other": {"元素精通": 245.0}}, {"skill": "E奥兹攻击伤害", "value": 8033.879835215827, "seq": "天空之翼|如雷的盛怒角斗士的终幕礼|攻雷暴", "critRate": 0.7630000000000001, "critDmg": 1.5260000000000002, "atk": 2317.748, "other": {"元素精通": 80.0}}], "丽莎": [{"skill": "E三层引雷长按伤害", "value": 48112.07452593096, "seq": "四风原典|绝缘之旗印角斗士的终幕礼|攻雷暴", "critRate": 0.768, "critDmg": 1.536, "atk": 1945.6399999999999, "other": {"元素精通": 176.0}}, {"skill": "Q放电伤害", "value": 3923.108737878488, "seq": "流浪乐章|昔日宗室之仪|攻雷暴", "critRate": 0.7402500000000001, "critDmg": 1.4805000000000001, "atk": 1621.372, "other": {"元素精通": 176.0}}], "北斗": [{"skill": "Q闪雷伤害", "value": 8423.083621785672, "seq": "狼的末路|绝缘之旗印|充雷暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1973.668, "other": {"充能效率": 1.918}}, {"skill": "Q闪雷伤害", "value": 7493.013866421251, "seq": "螭骨剑|绝缘之旗印|充攻暴", "critRate": 0.7405, "critDmg": 1.481, "atk": 1609.01, "other": {"充能效率": 1.918}}], "旅行者(雷)": [{"skill": "", "seq": "西风剑|绝缘之旗印|充雷暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1270.04, "other": {"充能效率": 2.5309999999999997}}], "艾尔海森": [{"skill": "E1枚光幕攻击伤害(蔓激化)", "value": 20017.58775831216, "seq": "裁叶萃光|饰金之梦|精草暴", "critRate": 0.8, "critDmg": 1.7720000000000002, "atk": 1166, "other": {"元素精通": 347.0, "实际精通": 447.0}}, {"skill": "E1枚光幕攻击伤害(蔓激化)", "value": 18814.584467661098, "seq": "磐岩结绿|饰金之梦|精草暴", "critRate": 0.8, "critDmg": 1.6920000000000002, "atk": 1415.5711999999999, "other": {"元素精通": 347.0, "实际精通": 447.0}}, {"skill": "E1枚光幕攻击伤害(蔓激化)", "value": 16500.29899797668, "seq": "黑剑|饰金之梦|精草暴", "critRate": 0.7403000000000001, "critDmg": 1.4806000000000001, "atk": 1134, "other": {"元素精通": 347.0, "实际精通": 447.0}}], "瑶瑶": [{"skill": "E白玉萝卜治疗量", "value": 2411.5809959052003, "seq": "西风长枪|千岩牢固|生生治", "critRate": 0.3, "critDmg": "any", "atk": 1088, "other": {"生命值": 39459.558}}, {"skill": "E白玉萝卜治疗量", "value": 2766.019897399921, "seq": "黑缨枪|千岩牢固|生生治", "critRate": "any", "critDmg": "any", "atk": 877, "other": {"生命值": 47068.906800000004}}], "纳西妲": [{"skill": "E灭净三业伤害(蔓激化)", "value": 26997.953369458883, "seq": "千夜浮梦|深林的记忆|精精精", "critRate": 0.281, "critDmg": 0.962, "atk": 1152, "other": {"元素精通": 941.0, "充能效率": 1.3}}, {"skill": "E灭净三业伤害(蔓激化)", "value": 26238.601950948134, "seq": "千夜浮梦|深林的记忆|精精暴", "critRate": 0.46950000000000003, "critDmg": 1.273, "atk": 1152, "other": {"元素精通": 774.0, "充能效率": 1.3}}, {"skill": "E灭净三业伤害(蔓激化)", "value": 22205.488547515655, "seq": "流浪的晚星|深林的记忆|精精精", "critRate": 0.281, "critDmg": 0.962, "atk": 1523.68, "other": {"元素精通": 841.0, "充能效率": 1.3}}, {"skill": "E灭净三业伤害(蔓激化)", "value": 21895.53737372846, "seq": "祭礼残章|深林的记忆|精精精", "critRate": 0.281, "critDmg": 0.962, "atk": 1064, "other": {"元素精通": 897.0, "充能效率": 1.3}}], "提纳里": [{"skill": "A藏蕴花矢伤害(蔓激化)", "value": 16317.196606132664, "seq": "猎人之径|流浪大地的乐团|精草暴", "critRate": 0.8, "critDmg": 1.6920000000000002, "atk": 1121, "other": {"元素精通": 347.0}}, {"skill": "A藏蕴花矢伤害(蔓激化)", "value": 15633.236346764515, "seq": "猎人之径|饰金之梦|精草暴", "critRate": 0.8, "critDmg": 1.6920000000000002, "atk": 1234.4, "other": {"元素精通": 347.0}}, {"skill": "A藏蕴花矢伤害(蔓激化)", "value": 13117.832066414805, "seq": "天空之翼|流浪大地的乐团|精草暴", "critRate": 0.7630000000000001, "critDmg": 1.5260000000000002, "atk": 1253, "other": {"元素精通": 347.0}}, {"skill": "A藏蕴花矢伤害(蔓激化)", "value": 12586.175333064644, "seq": "苍翠猎弓|流浪大地的乐团|精草暴", "critRate": 0.7405, "critDmg": 1.481, "atk": 1089, "other": {"元素精通": 347.0}}], "柯莱": [{"skill": "Q跃动伤害(蔓激化)", "value": 10055.655243596919, "seq": "终末嗟叹之诗|深林的记忆|攻草暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1851.048, "other": {"元素精通": 120.0, "充能效率": 1.701}}, {"skill": "Q跃动伤害(蔓激化)", "value": 8481.913519492135, "seq": "终末嗟叹之诗|昔日宗室之仪|攻草暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1851.048, "other": {"元素精通": 120.0, "充能效率": 1.701}}, {"skill": "Q跃动伤害(蔓激化)", "value": 7028.7015824810405, "seq": "西风猎弓|深林的记忆|攻草暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1557.524, "other": {"元素精通": 60.0, "充能效率": 1.763}}, {"skill": "Q跃动伤害(蔓激化)", "value": 6374.115069425711, "seq": "西风猎弓|昔日宗室之仪|攻草暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1557.524, "other": {"元素精通": 60.0, "充能效率": 1.763}}], "旅行者(草)": [{"skill": "Q草灯莲攻击伤害(蔓激化)", "value": 12980.945965680772, "seq": "天空之刃|深林的记忆|精草暴", "critRate": 0.6225, "critDmg": 1.245, "atk": 1327.8, "other": {"元素精通": 267.0, "充能效率": 1.751}}, {"skill": "Q草灯莲攻击伤害(蔓激化)", "value": 12050.539643975299, "seq": "西风剑|深林的记忆|精草暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1136.8400000000001, "other": {"元素精通": 267.0, "充能效率": 1.813}}, {"skill": "Q草灯莲攻击伤害(蔓激化)", "value": 12554.450797909794, "seq": "原木刀|深林的记忆|精草暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1274.48, "other": {"元素精通": 267.0, "充能效率": 1.506}}], "莱依拉": [{"skill": "E护盾基础吸收量", "value": 21162.027414528002, "seq": "西风剑|千岩牢固|生生生", "critRate": "any", "critDmg": "any", "atk": 1082.65, "other": {"生命值": 40695.89600000001}}], "申鹤": [{"skill": "atk", "value": 0, "seq": "息灾|角斗士的终幕礼追忆之注连|攻攻攻", "critRate": "any", "critDmg": "any", "atk": 4084.495, "other": {"充能效率": 1.8}}, {"skill": "atk", "value": 0, "seq": "天空之脊|角斗士的终幕礼追忆之注连|攻攻攻", "critRate": "any", "critDmg": "any", "atk": 3681.1879999999996, "other": {"充能效率": 2.168}}, {"skill": "atk", "value": 0, "seq": "西风长枪|角斗士的终幕礼追忆之注连|攻攻攻", "critRate": "any", "critDmg": "any", "atk": 3305.5739999999996, "other": {"充能效率": 2.106}}], "神里绫华": [{"skill": "Q切割伤害", "value": 14866.32860493826, "seq": "雾切之回光|冰风迷途的勇士|攻冰暴", "critRate": 0.3499499999999999, "critDmg": 2.5351, "atk": 2105.2560000000003, "other": {}}, {"skill": "Q切割伤害", "value": 10894.45711665022, "seq": "天目影打刀|冰风迷途的勇士|攻冰暴", "critRate": 0.35, "critDmg": 2.094, "atk": 2155.3320000000003, "other": {}}], "优菈": [{"skill": "Q光降之剑基础伤害(13层)", "value": 231380.92743819082, "seq": "松籁响起之时|苍白之火|攻物暴", "critRate": 0.6234999999999999, "critDmg": 1.547, "atk": 2396.8579999999997, "other": {}}, {"skill": "Q光降之剑基础伤害(13层)", "value": 211402.62753167227, "seq": "狼的末路|苍白之火|攻物暴", "critRate": 0.6234999999999999, "critDmg": 1.547, "atk": 2649.8999999999996, "other": {}}, {"skill": "Q光降之剑基础伤害(13层)", "value": 196544.113868971, "seq": "螭骨剑|苍白之火|攻物暴", "critRate": 0.75, "critDmg": 1.846, "atk": 1815.632, "other": {}}], "甘雨": [{"skill": "A霜华矢·霜华绽发伤害", "value": 30309.703124595053, "seq": "阿莫斯之弓|冰风迷途的勇士|攻冰暴", "critRate": 0.25, "critDmg": 2.294, "atk": 2444.066, "other": {}}, {"skill": "A霜华矢·霜华绽发伤害", "value": 24540.769257763008, "seq": "破魔之弓|冰风迷途的勇士|攻冰暴", "critRate": 0.25, "critDmg": 2.294, "atk": 2139.1130000000003, "other": {}}, {"skill": "A霜华矢·霜华绽发伤害", "value": 21612.271206342022, "seq": "天空之翼|冰风迷途的勇士|攻冰暴", "critRate": 0.39999999999999986, "critDmg": 2.6254999999999997, "atk": 2092.8940000000002, "other": {}}, {"skill": "A霜华矢·霜华绽发伤害(融化)", "value": 47695.72904806796, "seq": "阿莫斯之弓|流浪大地的乐团|攻冰暴", "critRate": 0.5235000000000001, "critDmg": 1.747, "atk": 2444.066, "other": {"元素精通": 80.0}}, {"skill": "A霜华矢·霜华绽发伤害(融化)", "value": 49152.83020229909, "seq": "阿莫斯之弓|流浪大地的乐团|精冰暴", "critRate": 0.5235000000000001, "critDmg": 1.747, "atk": 2004.628, "other": {"元素精通": 267.0}}, {"skill": "A霜华矢·霜华绽发伤害(融化)", "value": 38885.379490859355, "seq": "破魔之弓|流浪大地的乐团|攻冰暴", "critRate": 0.5235000000000001, "critDmg": 1.747, "atk": 2139.1130000000003, "other": {"元素精通": 80.0}}, {"skill": "A霜华矢·霜华绽发伤害(融化)", "value": 36247.17756584372, "seq": "天空之翼|流浪大地的乐团|攻冰暴", "critRate": 0.65, "critDmg": 2.136, "atk": 2092.8940000000002, "other": {"元素精通": 80.0}}], "凯亚": [{"skill": "Q伤害", "value": 5360.368283996418, "seq": "西风剑|绝缘之旗印|攻冰暴", "critRate": 0.5275, "critDmg": 1.355, "atk": 1506.582, "other": {"充能效率": 2.28}}, {"skill": "Q伤害", "value": 6506.02651204331, "seq": "磐岩结绿|绝缘之旗印|充冰暴", "critRate": 0.748, "critDmg": 1.796, "atk": 1558.3448, "other": {"充能效率": 2.185}}], "重云": [{"skill": "Q伤害", "value": 14887.115105702473, "seq": "狼的末路|冰风迷途的勇士昔日宗室之仪|攻冰暴", "critRate": 0.5275, "critDmg": 1.355, "atk": 2556.362, "other": {}}, {"skill": "Q伤害", "value": 14142.721913956359, "seq": "螭骨剑|冰风迷途的勇士昔日宗室之仪|攻冰暴", "critRate": 0.6655000000000001, "critDmg": 1.6310000000000002, "atk": 1781.3980000000001, "other": {}}], "七七": [{"skill": "Q治疗量", "value": 7231.945572800001, "seq": "祭礼剑|海染砗磲|攻攻治", "critRate": "any", "critDmg": "any", "atk": 1964.9120000000003, "other": {}}, {"skill": "Q治疗量", "value": 9040.413528800002, "seq": "风鹰剑|海染砗磲|攻攻治", "critRate": "any", "critDmg": "any", "atk": 2648.1520000000005, "other": {}}, {"skill": "Q治疗量", "value": 8434.0431485, "seq": "笛剑|海染砗磲|攻攻治", "critRate": "any", "critDmg": "any", "atk": 2419.065, "other": {}}], "迪奥娜": [{"skill": "E护盾基础吸收量", "value": 13304.967018, "seq": "祭礼弓|被怜爱的少女千岩牢固|生生生", "critRate": "any", "critDmg": "any", "atk": 1243.4, "other": {"生命值": 33317.740000000005}}], "罗莎莉亚": [{"skill": "Q冰枪持续伤害", "value": 7661.352466706398, "seq": "西风长枪|昔日宗室之仪|攻冰暴", "critRate": 0.7, "critDmg": 1.0099999999999998, "atk": 1925.8300000000002, "other": {}}], "埃洛伊": [{"skill": "Q伤害", "value": 21388.34091490468, "seq": "西风猎弓|冰风迷途的勇士角斗士的终幕礼|攻冰暴", "critRate": 0.5275, "critDmg": 1.355, "atk": 1649.848, "other": {}}], "荒泷一斗": [{"skill": "A荒泷逆袈裟连斩伤害", "value": 21056.901954893372, "seq": "赤角石溃杵|华馆梦醒形骸记|防岩暴", "critRate": 0.8, "critDmg": 2.076, "atk": 1233.8, "other": {"防御": 2431.065, "充能效率": 1.22}}, {"skill": "A荒泷逆袈裟连斩伤害", "value": 18779.50143476701, "seq": "螭骨剑|华馆梦醒形骸记|防岩暴", "critRate": 0.8, "critDmg": 1.746, "atk": 1195.4, "other": {"防御": 2162.545, "充能效率": 1.22}}, {"skill": "A荒泷逆袈裟连斩伤害", "value": 17428.45252338404, "seq": "白影剑|华馆梦醒形骸记|防岩暴", "critRate": 0.6985, "critDmg": 1.397, "atk": 1195.4, "other": {"防御": 2658.348, "充能效率": 1.22}}], "五郎": [{"skill": "def", "value": 0, "seq": "西风猎弓|流放者|充岩暴", "critRate": 0.6025, "critDmg": "any", "atk": 1075.4, "other": {"防御": 1083.456, "充能效率": 2.5309999999999997}}], "阿贝多": [{"skill": "E刹那之花伤害", "value": 17696.894878418516, "seq": "辰砂之纺锤|华馆梦醒形骸记|防岩暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1157, "other": {"防御": 2579.8199999999997}}, {"skill": "E刹那之花伤害", "value": 13672.706241036269, "seq": "黎明神剑|华馆梦醒形骸记|防岩暴", "critRate": 0.79995, "critDmg": 1.8991, "atk": 1093.4, "other": {"防御": 1975.3799999999999}}, {"skill": "E刹那之花伤害", "value": 14034.047095327793, "seq": "辰砂之纺锤|悠古的磐岩|防岩暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1157, "other": {"防御": 2317.02}}, {"skill": "E刹那之花伤害", "value": 12928.423637187472, "seq": "辰砂之纺锤|千岩牢固|防岩暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1157, "other": {"防御": 2317.02}}], "钟离": [{"skill": "E总护盾量", "value": 29880.512902500002, "seq": "黑缨枪|千岩牢固|生生生", "critRate": "any", "critDmg": "any", "atk": 1037, "other": {"生命值": 55727.565}}, {"skill": "Q伤害", "value": 46442.27412694044, "seq": "护摩之杖|千岩牢固|生生生", "critRate": 0.6125, "critDmg": 1.225, "atk": 1738.3628800000001, "other": {"生命值": 49570.36000000001}}, {"skill": "Q伤害", "value": 71732.50539821698, "seq": "护摩之杖|悠古的磐岩昔日宗室之仪|生岩暴", "critRate": 0.768, "critDmg": 1.536, "atk": 1611.1629599999999, "other": {"生命值": 33670.369999999995}}], "诺艾尔": [{"skill": "A一段伤害", "value": 16872.5082416256, "seq": "赤角石溃杵|华馆梦醒形骸记|防岩暴", "critRate": 0.7, "critDmg": 1.8920000000000001, "atk": 1190.6, "other": {"防御": 2166.0889999999995}}, {"skill": "A一段伤害", "value": 14864.19681788028, "seq": "螭骨剑|华馆梦醒形骸记|防岩暴", "critRate": 0.7405, "critDmg": 1.481, "atk": 1152.1999999999998, "other": {"防御": 2041.4449999999997}}, {"skill": "A一段伤害", "value": 13592.823118030803, "seq": "白影剑|华馆梦醒形骸记|防岩暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 1152.1999999999998, "other": {"防御": 2454.528}}], "凝光": [{"skill": "Q宝石伤害", "value": 6828.907102769468, "seq": "四风原典|悠古的磐岩角斗士的终幕礼|攻岩暴", "critRate": 0.768, "critDmg": 1.536, "atk": 1906.72, "other": {}}, {"skill": "Q宝石伤害", "value": 7257.585184561472, "seq": "尘世之锁|悠古的磐岩角斗士的终幕礼|攻岩暴", "critRate": 0.6025, "critDmg": 1.205, "atk": 2313.44, "other": {}}, {"skill": "Q宝石伤害", "value": 8767.764011526478, "seq": "流浪乐章|悠古的磐岩角斗士的终幕礼|攻岩暴", "critRate": 0.7, "critDmg": 1.5611000000000002, "atk": 1716.012, "other": {}}], "旅行者(岩)": [{"skill": "Q地震波单次伤害", "value": 15555.424394098514, "seq": "雾切之回光|悠古的磐岩角斗士的终幕礼|攻岩暴", "critRate": 0.71275, "critDmg": 1.4255, "atk": 2247.7960000000003, "other": {}}, {"skill": "Q地震波单次伤害", "value": 13540.504306776194, "seq": "磐岩结绿|悠古的磐岩角斗士的终幕礼|攻岩暴", "critRate": 0.8, "critDmg": 1.6920000000000002, "atk": 2199.304, "other": {}}, {"skill": "Q地震波单次伤害", "value": 10720.137847395887, "seq": "黑剑|悠古的磐岩角斗士的终幕礼|攻岩暴", "critRate": 0.7405, "critDmg": 1.481, "atk": 1889.292, "other": {}}], "云堇": [{"skill": "def", "value": 0, "seq": "西风长枪|华馆梦醒形骸记|防防暴", "critRate": 0.6, "critDmg": "any", "atk": 1218.1999999999998, "other": {"充能效率": 2.173, "防御": 2083.092}}, {"skill": "def", "value": 0, "seq": "喜多院十文字|华馆梦醒形骸记|防防防", "critRate": "any", "critDmg": "any", "atk": 1218.1999999999998, "other": {"充能效率": 1.967, "防御": 2511.0139999999997}}]} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/effect/skill_add.json b/GenshinUID/genshinuid_enka/effect/skill_add.json new file mode 100644 index 00000000..02271ebe --- /dev/null +++ b/GenshinUID/genshinuid_enka/effect/skill_add.json @@ -0,0 +1,258 @@ +{ + "旅行者": [ + "E", + "Q" + ], + "胡桃": [ + "E", + "Q" + ], + "托马": [ + "E", + "Q" + ], + "宵宫": [ + "E", + "Q" + ], + "烟绯": [ + "E", + "Q" + ], + "可莉": [ + "E", + "Q" + ], + "迪卢克": [ + "E", + "Q" + ], + "辛焱": [ + "E", + "Q" + ], + "安柏": [ + "Q", + "E" + ], + "香菱": [ + "Q", + "E" + ], + "班尼特": [ + "E", + "Q" + ], + "珊瑚宫心海": [ + "Q", + "E" + ], + "达达利亚": [ + "E", + "Q" + ], + "行秋": [ + "Q", + "E" + ], + "莫娜": [ + "Q", + "E" + ], + "芭芭拉": [ + "Q", + "E" + ], + "申鹤": [ + "E", + "Q" + ], + "神里绫华": [ + "Q", + "E" + ], + "优菈": [ + "Q", + "E" + ], + "甘雨": [ + "Q", + "E" + ], + "凯亚": [ + "E", + "Q" + ], + "重云": [ + "Q", + "E" + ], + "七七": [ + "Q", + "E" + ], + "迪奥娜": [ + "Q", + "E" + ], + "罗莎莉亚": [ + "E", + "Q" + ], + "埃洛伊": [ + null, + null + ], + "八重神子": [ + "E", + "Q" + ], + "雷电将军": [ + "Q", + "E" + ], + "九条裟罗": [ + "Q", + "E" + ], + "刻晴": [ + "Q", + "E" + ], + "雷泽": [ + "Q", + "E" + ], + "菲谢尔": [ + "E", + "Q" + ], + "丽莎": [ + "Q", + "E" + ], + "北斗": [ + "E", + "Q" + ], + "雷主": [ + "E", + "Q" + ], + "早柚": [ + "Q", + "E" + ], + "枫原万叶": [ + "E", + "Q" + ], + "魈": [ + "E", + "Q" + ], + "温迪": [ + "Q", + "E" + ], + "琴": [ + "Q", + "E" + ], + "砂糖": [ + "E", + "Q" + ], + "风主": [ + "E", + "Q" + ], + "荒泷一斗": [ + "E", + "Q" + ], + "五郎": [ + "E", + "Q" + ], + "阿贝多": [ + "E", + "Q" + ], + "钟离": [ + "E", + "Q" + ], + "诺艾尔": [ + "E", + "Q" + ], + "凝光": [ + "Q", + "E" + ], + "岩主": [ + "E", + "Q" + ], + "云堇": [ + "Q", + "E" + ], + "神里绫人": [ + "E", + "Q" + ], + "夜兰": [ + "Q", + "E" + ], + "久岐忍": [ + "E", + "Q" + ], + "鹿野院平藏": [ + "E", + "Q" + ], + "柯莱": [ + "E", + "Q" + ], + "提纳里": [ + "Q", + "E" + ], + "多莉": [ + "E", + "Q" + ], + "妮露": [ + "Q", + "E" + ], + "赛诺": [ + "Q", + "E" + ], + "坎蒂丝": [ + "Q", + "E" + ], + "莱依拉": [ + "E", + "Q" + ], + "纳西妲": [ + "E", + "Q" + ], + "流浪者": [ + "E", + "Q" + ], + "珐露珊": [ + "E", + "Q" + ] +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/effect/value_attr.json b/GenshinUID/genshinuid_enka/effect/value_attr.json new file mode 100644 index 00000000..b084f49d --- /dev/null +++ b/GenshinUID/genshinuid_enka/effect/value_attr.json @@ -0,0 +1,350 @@ +{ + "神里绫人": [ + "血量", + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "八重神子": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通", + "" + ], + "申鹤": [ + "攻击力", + "元素充能效率" + ], + "云堇": [ + "防御力", + "元素充能效率" + ], + "荒泷一斗": [ + "防御力", + "暴击率", + "暴击伤害" + ], + "五郎": [ + "防御力", + "元素充能效率" + ], + "班尼特": [ + "血量", + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "枫原万叶": [ + "元素精通", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "雷电将军": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "行秋": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "钟离": [ + "血量", + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "神里绫华": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "香菱": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率", + "元素精通" + ], + "胡桃": [ + "血量", + "暴击率", + "暴击伤害", + "元素精通" + ], + "甘雨": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "温迪": [ + "元素精通", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "珊瑚宫心海": [ + "血量", + "元素充能效率" + ], + "莫娜": [ + "元素精通", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "阿贝多": [ + "防御力", + "暴击率", + "暴击伤害" + ], + "迪奥娜": [ + "血量", + "元素充能效率" + ], + "优菈": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "达达利亚": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "魈": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "宵宫": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "九条裟罗": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "琴": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "菲谢尔": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "罗莎莉亚": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "可莉": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "凝光": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "北斗": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "刻晴": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "托马": [ + "血量", + "元素充能效率" + ], + "迪卢克": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "芭芭拉": [ + "血量", + "元素充能效率" + ], + "诺艾尔": [ + "防御力", + "暴击率", + "暴击伤害" + ], + "旅行者": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "重云": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "七七": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "凯亚": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "烟绯": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "早柚": [ + "元素精通", + "元素充能效率" + ], + "安柏": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "丽莎": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "埃洛伊": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "辛焱": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "砂糖": [ + "元素精通", + "元素充能效率" + ], + "雷泽": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "夜兰": [ + "血量", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "久岐忍": [ + "血量", + "元素充能效率", + "元素精通" + ], + "鹿野院平藏": [ + "攻击力", + "暴击率", + "暴击伤害" + ], + "柯莱": [ + "元素充能效率", + "元素精通", + "暴击率", + "暴击伤害" + ], + "提纳里": [ + "攻击力", + "元素精通", + "暴击率", + "暴击伤害" + ], + "多莉": [ + "元素充能效率", + "血量" + ], + "妮露": [ + "血量", + "暴击率", + "暴击伤害", + "元素精通" + ], + "坎蒂丝": [ + "血量", + "元素充能效率", + "暴击率", + "暴击伤害" + ], + "赛诺": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素精通" + ], + "莱依拉": [ + "血量", + "元素充能效率" + ], + "纳西妲": [ + "元素精通", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "流浪者": [ + "暴击率", + "暴击伤害", + "攻击力" + ], + "珐露珊": [ + "攻击力", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "艾尔海森": [ + "元素精通", + "暴击率", + "暴击伤害", + "元素充能效率" + ], + "瑶瑶": [ + "元素充能效率", + "血量", + "攻击力" + ], + "迪希雅": [ + "血量", + "攻击力", + "暴击率", + "暴击伤害" + ], + "米卡": [ + "元素充能效率", + "血量" + ] +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/effect/weapon_effect.json b/GenshinUID/genshinuid_enka/effect/weapon_effect.json new file mode 100644 index 00000000..aff45588 --- /dev/null +++ b/GenshinUID/genshinuid_enka/effect/weapon_effect.json @@ -0,0 +1,4745 @@ +{ + "恶王丸": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "Q:dmgBonus+40", + "2": "Q:dmgBonus+50", + "3": "Q:dmgBonus+60", + "4": "Q:dmgBonus+70", + "5": "Q:dmgBonus+80" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "暗巷猎手": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "天目影打刀": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "阿莫斯之弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AB:dmgBonus+52", + "2": "AB:dmgBonus+65", + "3": "AB:dmgBonus+78", + "4": "AB:dmgBonus+91", + "5": "AB:dmgBonus+104" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "学徒笔记": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "若水": { + "normal": { + "normal_effect": { + "1": "addHp+16", + "2": "addHp+20", + "3": "addHp+24", + "4": "addHp+28", + "5": "addHp+32" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+20", + "2": "dmgBonus+25", + "3": "dmgBonus+30", + "4": "dmgBonus+35", + "5": "dmgBonus+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "风鹰剑": { + "normal": { + "normal_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "新手长枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黑岩绯玉": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+36", + "2": "addAtk+45", + "3": "addAtk+54", + "4": "addAtk+63", + "5": "addAtk+72" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黑岩长剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+36", + "2": "addAtk+45", + "3": "addAtk+54", + "4": "addAtk+63", + "5": "addAtk+72" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黑岩刺枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+36", + "2": "addAtk+45", + "3": "addAtk+54", + "4": "addAtk+63", + "5": "addAtk+72" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黑岩斩刀": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+36", + "2": "addAtk+45", + "3": "addAtk+54", + "4": "addAtk+63", + "5": "addAtk+72" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黑岩战弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+36", + "2": "addAtk+45", + "3": "addAtk+54", + "4": "addAtk+63", + "5": "addAtk+72" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黑缨枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "沐浴龙血的剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "limit": ["Pyro", "Electro"] + } + } + }, + "息灾": { + "normal": { + "normal_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+19.2", + "2": "addAtk+24", + "3": "addAtk+28.8", + "4": "addAtk+33.6", + "5": "addAtk+38.4" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "up": "bg:2" + } + } + }, + "辰砂之纺锤": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "E:addDmg+40%def", + "2": "E:addDmg+50%def", + "3": "E:addDmg+60%def", + "4": "E:addDmg+70%def", + "5": "E:addDmg+80%def" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "钢轮弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+16", + "2": "addAtk+20", + "3": "addAtk+24", + "4": "addAtk+28", + "5": "addAtk+32" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "冷刃": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "limit": ["Hydro", "Cryo"] + } + } + }, + "流月针": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AB:addDmg+20%atk", + "2": "AB:addDmg+25%atk", + "3": "AB:addDmg+30%atk", + "4": "AB:addDmg+35%atk", + "5": "AB:addDmg+40%atk" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "暗铁剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 12, + "extra": { + "trigger": ["Electro"] + } + } + }, + "决斗之枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+24", + "2": "addAtk+30", + "3": "addAtk+36", + "4": "addAtk+42", + "5": "addAtk+48" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "以理服人": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AB:extraDmg+60atk", + "2": "AB:extraDmg+75atk", + "3": "AB:extraDmg+90atk", + "4": "AB:extraDmg+105atk", + "5": "AB:extraDmg+120atk" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 15, + "extra": { + "trigger": ["E"] + } + } + }, + "嘟嘟可故事集": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "B:dmgBonus+16;addAtk+8", + "2": "B:dmgBonus+20;addAtk+10", + "3": "B:dmgBonus+24;addAtk+12", + "4": "B:dmgBonus+28;addAtk+14", + "5": "B:dmgBonus+32;addAtk+16" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 6, + "extra": { + "trigger": ["A", "B"] + } + } + }, + "匣里灭辰": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+20", + "2": "dmgBonus+24", + "3": "dmgBonus+28", + "4": "dmgBonus+32", + "5": "dmgBonus+36" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "limit": ["Hydro", "Pyro"] + } + } + }, + "龙脊长枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "无锋剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "终末嗟叹之诗": { + "normal": { + "normal_effect": { + "1": "elementalMastery+60", + "2": "elementalMastery+75", + "3": "elementalMastery+90", + "4": "elementalMastery+105", + "5": "elementalMastery+120" + } + }, + "fight": { + "fight_effect": { + "1": "elementalMastery+100;addAtk+20", + "2": "elementalMastery+125;addAtk+25", + "3": "elementalMastery+150;addAtk+30", + "4": "elementalMastery+175;addAtk+35", + "5": "elementalMastery+200;addAtk+40" + }, + "group_effect": { + "1": "elementalMastery+100;addAtk+20", + "2": "elementalMastery+125;addAtk+25", + "3": "elementalMastery+150;addAtk+30", + "4": "elementalMastery+175;addAtk+35", + "5": "elementalMastery+200;addAtk+40" + }, + "time": 12, + "extra": { + + } + } + }, + "翡玉法球": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 12, + "extra": { + "trigger": ["Hydro"] + } + } + }, + "薙草之稻光": { + "normal": { + "normal_effect": { + "1": "addAtk+28%energyRecharge", + "2": "addAtk+35%energyRecharge", + "3": "addAtk+42%energyRecharge", + "4": "addAtk+49%energyRecharge", + "5": "addAtk+56%energyRecharge" + } + }, + "fight": { + "fight_effect": { + "1": "energyRecharge+30;addAtk+8.4", + "2": "energyRecharge+35;addAtk+12.25", + "3": "energyRecharge+40;addAtk+16.8", + "4": "energyRecharge+45;addAtk+22.05", + "5": "energyRecharge+50;addAtk+28" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 12, + "extra": { + "trigger": ["Q"] + } + } + }, + "不灭月华": { + "normal": { + "normal_effect": { + "1": "healBonus+10", + "2": "healBonus+12.5", + "3": "healBonus+15", + "4": "healBonus+17.5", + "5": "healBonus+20" + } + }, + "fight": { + "fight_effect": { + "1": "A:addDmg+1%hp", + "2": "A:addDmg+1.5%hp", + "3": "A:addDmg+2%hp", + "4": "A:addDmg+2.5%hp", + "5": "A:addDmg+3%hp" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "昭心": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AB:extraDmg+240%atk", + "2": "AB:extraDmg+270%atk", + "3": "AB:extraDmg+300%atk", + "4": "AB:extraDmg+330%atk", + "5": "AB:extraDmg+360%atk" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "落霞": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+10", + "2": "dmgBonus+12.5", + "3": "dmgBonus+15", + "4": "dmgBonus+17.5", + "5": "dmgBonus+20" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "西风秘典": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "西风大剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "西风长枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "西风剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "西风猎弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "铁影阔剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "B:dmgBonus+30", + "2": "B:dmgBonus+35", + "3": "B:dmgBonus+40", + "4": "B:dmgBonus+45", + "5": "B:dmgBonus+50" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "腐殖之剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "E:dmgBonus+16;E:critRate+6", + "2": "E:dmgBonus+20;E:critRate+7.5", + "3": "E:dmgBonus+24;E:critRate+9", + "4": "E:dmgBonus+28;E:critRate+10.5", + "5": "E:dmgBonus+32;E:critRate+12" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "吃虎鱼刀": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "extraDmg+240%atk", + "2": "extraDmg+280%atk", + "3": "extraDmg+320%atk", + "4": "extraDmg+360%atk", + "5": "extraDmg+400%atk" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "苍古自由之誓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+10;ABC:dmgBonus+16;addAtk+20", + "2": "dmgBonus+12.5;ABC:dmgBonus+20;addAtk+25", + "3": "dmgBonus+15;ABC:dmgBonus+24;addAtk+30", + "4": "dmgBonus+17.5;ABC:dmgBonus+28;addAtk+35", + "5": "dmgBonus+20;ABC:dmgBonus+32;addAtk+40" + }, + "group_effect": { + "1": "ABC:dmgBonus+16;addAtk+20", + "2": "ABC:dmgBonus+20;addAtk+25", + "3": "ABC:dmgBonus+24;addAtk+30", + "4": "ABC:dmgBonus+28;addAtk+35", + "5": "ABC:dmgBonus+32;addAtk+40" + }, + "time": 12, + "extra": { + + } + } + }, + "忍冬之果": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "白辰之环": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+10", + "2": "dmgBonus+12.5", + "3": "dmgBonus+15", + "4": "dmgBonus+17.5", + "5": "dmgBonus+20" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 6, + "extra": { + "trigger": ["Electro"] + } + } + }, + "钺矛": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "A:extraDmg+160%atk", + "2": "A:extraDmg+200%atk", + "3": "A:extraDmg+240%atk", + "4": "A:extraDmg+280%atk", + "5": "A:extraDmg+320%atk" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "破魔之弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "A:dmgBonus+32;B:dmgBonus+24", + "2": "A:dmgBonus+40;B:dmgBonus+30", + "3": "A:dmgBonus+48;B:dmgBonus+36", + "4": "A:dmgBonus+56;B:dmgBonus+42", + "5": "A:dmgBonus+64;B:dmgBonus+48" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "波乱月白经津": { + "normal": { + "normal_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + } + }, + "fight": { + "fight_effect": { + "1": "A:dmgBonus+40", + "2": "A:dmgBonus+50", + "3": "A:dmgBonus+60", + "4": "A:dmgBonus+70", + "5": "A:dmgBonus+80" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黎明神剑": { + "normal": { + "normal_effect": { + "1": "critRate+14", + "2": "critRate+17.5", + "3": "critRate+21", + "4": "critRate+24.5", + "5": "critRate+28" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "猎弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "铁尖枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "铁蜂刺": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "神乐之真意": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "E:dmgBonus+36;dmgBonus+12", + "2": "E:dmgBonus+45;dmgBonus+15", + "3": "E:dmgBonus+54;dmgBonus+18", + "4": "E:dmgBonus+63;dmgBonus+21", + "5": "E:dmgBonus+72;dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "桂木斩长正": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "E:dmgBonus+6", + "2": "E:dmgBonus+7.5", + "3": "E:dmgBonus+9", + "4": "E:dmgBonus+10.5", + "5": "E:dmgBonus+12" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "喜多院十文字": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "E:dmgBonus+6", + "2": "E:dmgBonus+7.5", + "3": "E:dmgBonus+9", + "4": "E:dmgBonus+10.5", + "5": "E:dmgBonus+12" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "匣里龙吟": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+20", + "2": "dmgBonus+24", + "3": "dmgBonus+28", + "4": "dmgBonus+32", + "5": "dmgBonus+36" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "limit": ["Pyro", "Electro"] + } + } + }, + "千岩古剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+21;critRate+9", + "2": "addAtk+24;critRate+12", + "3": "addAtk+27;critRate+15", + "4": "addAtk+30;critRate+18", + "5": "addAtk+33;critRate+21" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "千岩长枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+21;critRate+9", + "2": "addAtk+24;critRate+12", + "3": "addAtk+27;critRate+15", + "4": "addAtk+30;critRate+18", + "5": "addAtk+33;critRate+21" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "四风原典": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+32", + "2": "dmgBonus+40", + "3": "dmgBonus+48", + "4": "dmgBonus+56", + "5": "dmgBonus+64" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "trigger": ["fg"] + } + } + }, + "衔珠海皇": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "Q:dmgBonus+12;Q:extraDmg+100%atk", + "2": "Q:dmgBonus+15;Q:extraDmg+125%atk", + "3": "Q:dmgBonus+18;Q:extraDmg+150%atk", + "4": "Q:dmgBonus+21;Q:extraDmg+175%atk", + "5": "Q:dmgBonus+24;Q:extraDmg+200%atk" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "魔导绪论": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "limit": ["Hydro", "Electro"] + } + } + }, + "万国诸海图谱": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+16", + "2": "dmgBonus+20", + "3": "dmgBonus+24", + "4": "dmgBonus+28", + "5": "dmgBonus+32" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "尘世之锁": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "shieldBonus+20;addAtk+20", + "2": "shieldBonus+25;addAtk+25", + "3": "shieldBonus+30;addAtk+30", + "4": "shieldBonus+35;addAtk+35", + "5": "shieldBonus+40;addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "信使": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "雾切之回光": { + "normal": { + "normal_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+28", + "2": "dmgBonus+35", + "3": "dmgBonus+42", + "4": "dmgBonus+49", + "5": "dmgBonus+56" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "幽夜华尔兹": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AE:dmgBonus+20", + "2": "AE:dmgBonus+25", + "3": "AE:dmgBonus+30", + "4": "AE:dmgBonus+35", + "5": "AE:dmgBonus+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "曚云之月": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "Q:dmgBonus+40", + "2": "Q:dmgBonus+50", + "3": "Q:dmgBonus+60", + "4": "Q:dmgBonus+70", + "5": "Q:dmgBonus+80" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "证誓之明瞳": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "energyRecharge+24", + "2": "energyRecharge+30", + "3": "energyRecharge+36", + "4": "energyRecharge+42", + "5": "energyRecharge+48" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "佣兵重剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "异世界行记": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "口袋魔导书": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "冬极白星": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "EQ:dmgBonus+12;addAtk+48", + "2": "EQ:dmgBonus+15;addAtk+60", + "3": "EQ:dmgBonus+18;addAtk+72", + "4": "EQ:dmgBonus+21;addAtk+84", + "5": "EQ:dmgBonus+24;addAtk+96" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "掠食者": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "磐岩结绿": { + "normal": { + "normal_effect": { + "1": "addHp+20;exAtk+1.2%hp", + "2": "addHp+25;exAtk+1.5%hp", + "3": "addHp+30;exAtk+1.8%hp", + "4": "addHp+35;exAtk+2.1%hp", + "5": "addHp+40;exAtk+2.4%hp" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "和璞鸢": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+22.4;dmgBonus+12", + "2": "addAtk+27.3;dmgBonus+15", + "3": "addAtk+32.2;dmgBonus+18", + "4": "addAtk+37.1;dmgBonus+21", + "5": "addAtk+42;dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "试作金珀": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "试作古华": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "试作澹月": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+36", + "2": "addAtk+45", + "3": "addAtk+54", + "4": "addAtk+63", + "5": "addAtk+72" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "试作斩岩": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+16;addDef+16", + "2": "addAtk+20;addDef+20", + "3": "addAtk+24;addDef+24", + "4": "addAtk+28;addDef+28", + "5": "addAtk+32;addDef+32" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "试作星镰": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AB:dmgBonus+16", + "2": "AB:dmgBonus+20", + "3": "AB:dmgBonus+24", + "4": "AB:dmgBonus+28", + "5": "AB:dmgBonus+32" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "雨裁": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+20", + "2": "dmgBonus+24", + "3": "dmgBonus+28", + "4": "dmgBonus+32", + "5": "dmgBonus+36" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "limit": ["Hydro", "Electro"] + } + } + }, + "鸦羽弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + "limit": ["Hydro", "Pyro"] + } + } + }, + "反曲弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "赤角石溃杵": { + "normal": { + "normal_effect": { + "1": "addDef+28", + "2": "addDef+35", + "3": "addDef+42", + "4": "addDef+49", + "5": "addDef+56" + } + }, + "fight": { + "fight_effect": { + "1": "AB:addDmg+40%def", + "2": "AB:addDmg+50%def", + "3": "AB:addDmg+60%def", + "4": "AB:addDmg+70%def", + "5": "AB:addDmg+80%def" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "宗室长弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "critRate+14", + "2": "critRate+16", + "3": "critRate+18", + "4": "critRate+22", + "5": "critRate+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "宗室大剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "critRate+14", + "2": "critRate+16", + "3": "critRate+18", + "4": "critRate+22", + "5": "critRate+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "宗室秘法录": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "critRate+14", + "2": "critRate+16", + "3": "critRate+18", + "4": "critRate+22", + "5": "critRate+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "宗室长剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "critRate+14", + "2": "critRate+16", + "3": "critRate+18", + "4": "critRate+22", + "5": "critRate+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "宗室猎枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "critRate+14", + "2": "critRate+16", + "3": "critRate+18", + "4": "critRate+22", + "5": "critRate+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "弓藏": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "A:dmgBonus+40", + "2": "A:dmgBonus+50", + "3": "A:dmgBonus+60", + "4": "A:dmgBonus+70", + "5": "A:dmgBonus+80" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "祭礼弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "祭礼残章": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "祭礼大剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "祭礼剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "历练的猎弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "螭骨剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+30", + "2": "dmgBonus+35", + "3": "dmgBonus+40", + "4": "dmgBonus+45", + "5": "dmgBonus+50" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "神射手之誓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "B:dmgBonus+24", + "2": "B:dmgBonus+30", + "3": "B:dmgBonus+36", + "4": "B:dmgBonus+42", + "5": "B:dmgBonus+48" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "银剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "飞天大御剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+24", + "2": "addAtk+28", + "3": "addAtk+32", + "4": "addAtk+36", + "5": "addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "飞天御剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+12", + "2": "addAtk+15", + "3": "addAtk+18", + "4": "addAtk+21", + "5": "addAtk+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "天空之卷": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "天空之刃": { + "normal": { + "normal_effect": { + "1": "critRate+4", + "2": "critRate+5", + "3": "critRate+6", + "4": "critRate+7", + "5": "critRate+8" + } + }, + "fight": { + "fight_effect": { + "1": "AB:extraDmg+20%atk", + "2": "AB:extraDmg+25%atk", + "3": "AB:extraDmg+30%atk", + "4": "AB:extraDmg+35%atk", + "5": "AB:extraDmg+40%atk" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 12, + "extra": { + + } + } + }, + "天空之翼": { + "normal": { + "normal_effect": { + "1": "critDmg+20", + "2": "critDmg+25", + "3": "critDmg+30", + "4": "critDmg+35", + "5": "critDmg+40" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "天空之傲": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+8", + "2": "dmgBonus+10", + "3": "dmgBonus+12", + "4": "dmgBonus+14", + "5": "dmgBonus+16" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "天空之脊": { + "normal": { + "normal_effect": { + "1": "critRate+8", + "2": "critRate+10", + "3": "critRate+12", + "4": "critRate+14", + "5": "critRate+16" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "弹弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AB:dmgBonus+36", + "2": "AB:dmgBonus+42", + "3": "AB:dmgBonus+48", + "4": "AB:dmgBonus+54", + "5": "AB:dmgBonus+60" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "雪葬的星银": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "匣里日月": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AEQ:dmgBonus+20", + "2": "AEQ:dmgBonus+25", + "3": "AEQ:dmgBonus+30", + "4": "AEQ:dmgBonus+35", + "5": "AEQ:dmgBonus+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "松籁响起之时": { + "normal": { + "normal_effect": { + "1": "addAtk+16", + "2": "addAtk+20", + "3": "addAtk+24", + "4": "addAtk+28", + "5": "addAtk+32" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + }, + "group_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + }, + "time": 0, + "extra": { + + } + } + }, + "护摩之杖": { + "normal": { + "normal_effect": { + "1": "addHp+20;exAtk+0.8%hp", + "2": "addHp+25;exAtk+1%hp", + "3": "addHp+30;exAtk+1.2%hp", + "4": "addHp+35;exAtk+1.4%hp", + "5": "addHp+40;exAtk+1.6%hp" + } + }, + "fight": { + "fight_effect": { + "1": "exAtk+1%hp", + "2": "exAtk+1.2%hp", + "3": "exAtk+1.4%hp", + "4": "exAtk+1.6%hp", + "5": "exAtk+1.8%hp" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "斫峰之刃": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "shieldBonus+20;addAtk+20", + "2": "shieldBonus+25;addAtk+25", + "3": "shieldBonus+30;addAtk+30", + "4": "shieldBonus+35;addAtk+35", + "5": "shieldBonus+40;addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "降临之剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "暗巷闪光": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "钟剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "黑剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "AB:dmgBonus+20", + "2": "AB:dmgBonus+25", + "3": "AB:dmgBonus+30", + "4": "AB:dmgBonus+35", + "5": "AB:dmgBonus+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "「渔获」": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "Q:dmgBonus+16;Q:critRate+6", + "2": "Q:dmgBonus+20;Q:critRate+7.5", + "3": "Q:dmgBonus+24;Q:critRate+9", + "4": "Q:dmgBonus+28;Q:critRate+10.5", + "5": "Q:dmgBonus+32;Q:critRate+12" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "笛剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "绝弦": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "EQ:dmgBonus+24", + "2": "EQ:dmgBonus+30", + "3": "EQ:dmgBonus+36", + "4": "EQ:dmgBonus+42", + "5": "EQ:dmgBonus+48" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "无工之剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "shieldBonus+20;addAtk+20", + "2": "shieldBonus+25;addAtk+25", + "3": "shieldBonus+30;addAtk+30", + "4": "shieldBonus+35;addAtk+35", + "5": "shieldBonus+40;addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "苍翠猎弓": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "流浪乐章": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+48", + "2": "dmgBonus+60", + "3": "dmgBonus+72", + "4": "dmgBonus+84", + "5": "dmgBonus+96" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "讨龙英杰谭": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "atk+24", + "2": "atk+30", + "3": "atk+36", + "4": "atk+42", + "5": "atk+48" + }, + "time": 10, + "extra": { + + } + } + }, + "飞雷之弦振": { + "normal": { + "normal_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + } + }, + "fight": { + "fight_effect": { + "1": "A:dmgBonus+40", + "2": "A:dmgBonus+50", + "3": "A:dmgBonus+60", + "4": "A:dmgBonus+70", + "5": "A:dmgBonus+80" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "旅行剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "甲级宝珏": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+12", + "2": "addAtk+14", + "3": "addAtk+16", + "4": "addAtk+18", + "5": "addAtk+20" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "贯虹之槊": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "shieldBonus+20;addAtk+20", + "2": "shieldBonus+25;addAtk+25", + "3": "shieldBonus+30;addAtk+30", + "4": "shieldBonus+35;addAtk+35", + "5": "shieldBonus+40;addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "训练大剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "断浪长鳍": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "Q:dmgBonus+40", + "2": "Q:dmgBonus+50", + "3": "Q:dmgBonus+60", + "4": "Q:dmgBonus+70", + "5": "Q:dmgBonus+80" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "白影剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+24;addDef+24", + "2": "addAtk+30;addDef+30", + "3": "addAtk+36;addDef+36", + "4": "addAtk+42;addDef+42", + "5": "addAtk+46;addDef+46" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "白铁大剑": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "白缨枪": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "A:dmgBonus+24", + "2": "A:dmgBonus+30", + "3": "A:dmgBonus+36", + "4": "A:dmgBonus+42", + "5": "A:dmgBonus+48" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "风花之颂": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+16", + "2": "addAtk+20", + "3": "addAtk+24", + "4": "addAtk+28", + "5": "addAtk+32" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 6, + "extra": { + + } + } + }, + "暗巷的酒与诗": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "狼的末路": { + "normal": { + "normal_effect": { + "1": "addAtk+20", + "2": "addAtk+25", + "3": "addAtk+30", + "4": "addAtk+35", + "5": "addAtk+40" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+40", + "2": "addAtk+50", + "3": "addAtk+60", + "4": "addAtk+70", + "5": "addAtk+80" + }, + "group_effect": { + "1": "addAtk+40", + "2": "addAtk+50", + "3": "addAtk+60", + "4": "addAtk+70", + "5": "addAtk+80" + }, + "time": 12, + "extra": { + + } + } + }, + "笼钓瓶一心": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+15", + "2": "addAtk+15", + "3": "addAtk+15", + "4": "addAtk+15", + "5": "addAtk+15" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "猎人之径": { + "normal": { + "normal_effect": { + "1": "dmgBonus+12", + "2": "dmgBonus+15", + "3": "dmgBonus+18", + "4": "dmgBonus+21", + "5": "dmgBonus+24" + } + }, + "fight": { + "fight_effect": { + "1": "B:addDmg+160%elementalMastery", + "2": "B:addDmg+200%elementalMastery", + "3": "B:addDmg+240%elementalMastery", + "4": "B:addDmg+280%elementalMastery", + "5": "B:addDmg+320%elementalMastery" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "竭泽": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "王下近侍": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "elementalMastery+60", + "2": "elementalMastery+80", + "3": "elementalMastery+100", + "4": "elementalMastery+120", + "5": "elementalMastery+140" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "森林王器": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "elementalMastery+60", + "2": "elementalMastery+75", + "3": "elementalMastery+90", + "4": "elementalMastery+105", + "5": "elementalMastery+120" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 12, + "extra": { + + } + } + }, + "原木刀": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "elementalMastery+60", + "2": "elementalMastery+75", + "3": "elementalMastery+90", + "4": "elementalMastery+105", + "5": "elementalMastery+120" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 12, + "extra": { + + } + } + }, + "盈满之实": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "elementalMastery+120;addAtk+-25", + "2": "elementalMastery+135;addAtk+-25", + "3": "elementalMastery+150;addAtk+-25", + "4": "elementalMastery+165;addAtk+-25", + "5": "elementalMastery+180;addAtk+-25" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "贯月矢": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+16", + "2": "addAtk+20", + "3": "addAtk+24", + "4": "addAtk+28", + "5": "addAtk+32" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "赤沙之杖": { + "normal": { + "normal_effect": { + "1": "exAtk+52%elementalMastery", + "2": "exAtk+65%elementalMastery", + "3": "exAtk+78%elementalMastery", + "4": "exAtk+91%elementalMastery", + "5": "exAtk+104%elementalMastery" + } + }, + "fight": { + "fight_effect": { + "1": "exAtk+84%elementalMastery", + "2": "exAtk+105%elementalMastery", + "3": "exAtk+126%elementalMastery", + "4": "exAtk+147%elementalMastery", + "5": "exAtk+168%elementalMastery" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "圣显之钥": { + "normal": { + "normal_effect": { + "1": "addHp+20", + "2": "addHp+25", + "3": "addHp+30", + "4": "addHp+35", + "5": "addHp+40" + } + }, + "fight": { + "fight_effect": { + "1": "elementalMastery+0.56%hp", + "2": "elementalMastery+0.70%hp", + "3": "elementalMastery+0.84%hp", + "4": "elementalMastery+0.98%hp", + "5": "elementalMastery+1.12%hp" + }, + "group_effect": { + "1": "elementalMastery+0.2%hp", + "2": "elementalMastery+0.25%hp", + "3": "elementalMastery+0.30%hp", + "4": "elementalMastery+0.35%hp", + "5": "elementalMastery+0.4%hp" + }, + "time": 0, + "extra": { + + } + } + }, + "玛海菈的水色": { + "normal": { + "normal_effect": { + "1": "exAtk+24%elementalMastery", + "2": "exAtk+30%elementalMastery", + "3": "exAtk+36%elementalMastery", + "4": "exAtk+42%elementalMastery", + "5": "exAtk+48%elementalMastery" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "exAtk+7.2%elementalMastery", + "2": "exAtk+9%elementalMastery", + "3": "exAtk+10.8%elementalMastery", + "4": "exAtk+12.6%elementalMastery", + "5": "exAtk+14.4%elementalMastery" + }, + "time": 0, + "extra": { + + } + } + }, + "西福斯的月光": { + "normal": { + "normal_effect": { + "1": "energyRecharge+0.036%elementalMastery", + "2": "energyRecharge+0.045%elementalMastery", + "3": "energyRecharge+0.054%elementalMastery", + "4": "energyRecharge+0.063%elementalMastery", + "5": "energyRecharge+0.072%elementalMastery" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "energyRecharge+0.0108%elementalMastery", + "2": "energyRecharge+0.0135%elementalMastery", + "3": "energyRecharge+0.0162%elementalMastery", + "4": "energyRecharge+0.0189%elementalMastery", + "5": "energyRecharge+0.0216%elementalMastery" + }, + "time": 0, + "extra": { + + } + } + }, + "流浪的晚星": { + "normal": { + "normal_effect": { + "1": "exAtk+24%elementalMastery", + "2": "exAtk+30%elementalMastery", + "3": "exAtk+36%elementalMastery", + "4": "exAtk+42%elementalMastery", + "5": "exAtk+48%elementalMastery" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "exAtk+7.2%elementalMastery", + "2": "exAtk+9%elementalMastery", + "3": "exAtk+10.8%elementalMastery", + "4": "exAtk+12.6%elementalMastery", + "5": "exAtk+14.4%elementalMastery" + }, + "time": 0, + "extra": { + + } + } + }, + "风信之锋": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+12;elementalMastery+48", + "2": "addAtk+15;elementalMastery+60", + "3": "addAtk+18;elementalMastery+72", + "4": "addAtk+21;elementalMastery+84", + "5": "addAtk+24;elementalMastery+96" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "千夜浮梦": { + "normal": { + "normal_effect": { + "1": "dmgBonus+30", + "2": "dmgBonus+42", + "3": "dmgBonus+54", + "4": "dmgBonus+66", + "5": "dmgBonus+78" + } + }, + "fight": { + "fight_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "图莱杜拉的回忆": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "A:dmgBonus+48", + "2": "A:dmgBonus+60", + "3": "A:dmgBonus+72", + "4": "A:dmgBonus+84", + "5": "A:dmgBonus+96" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "东花坊时雨": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "dmgBonus+16", + "2": "dmgBonus+20", + "3": "dmgBonus+24", + "4": "dmgBonus+28", + "5": "dmgBonus+32" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "裁叶萃光": { + "normal": { + "normal_effect": { + "1": "critRate+4", + "2": "critRate+5", + "3": "critRate+6", + "4": "critRate+7", + "5": "critRate+8" + } + }, + "fight": { + "fight_effect": { + "1": "AE:addDmg+200%elementalMastery", + "2": "AE:addDmg+230%elementalMastery", + "3": "AE:addDmg+260%elementalMastery", + "4": "AE:addDmg+290%elementalMastery", + "5": "AE:addDmg+320%elementalMastery" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 0, + "extra": { + + } + } + }, + "饰铁之花": { + "normal": { + "normal_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+12;elementalMastery+48", + "2": "addAtk+15;elementalMastery+60", + "3": "addAtk+18;elementalMastery+72", + "4": "addAtk+21;elementalMastery+84", + "5": "addAtk+24;elementalMastery+96" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 8, + "extra": { + + } + } + }, + "苇海信标": { + "normal": { + "normal_effect": { + "1": "addHp+32", + "2": "addHp+40", + "3": "addHp+48", + "4": "addHp+56", + "5": "addHp+64" + } + }, + "fight": { + "fight_effect": { + "1": "addAtk+40", + "2": "addAtk+50", + "3": "addAtk+60", + "4": "addAtk+70", + "5": "addAtk+80" + }, + "group_effect": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "time": 8, + "extra": { + + } + } + } +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_enka/etc/MAP_PATH.py b/GenshinUID/genshinuid_enka/etc/MAP_PATH.py new file mode 100644 index 00000000..711dbdba --- /dev/null +++ b/GenshinUID/genshinuid_enka/etc/MAP_PATH.py @@ -0,0 +1,48 @@ +import json +from pathlib import Path +from typing import Dict, List, TypedDict + +EFFECT_PATH = Path(__file__).parents[1] / 'effect' + + +class ActionMAP(TypedDict): + name: str + type: str + plus: float + value: List[str] + + +with open(EFFECT_PATH / 'weapon_effect.json', "r", encoding='UTF-8') as f: + weapon_effect_map: Dict[ + str, Dict[str, Dict[str, Dict[str, str]]] + ] = json.load(f) + +with open(EFFECT_PATH / 'char_effect.json', "r", encoding='UTF-8') as f: + char_effect_map: Dict[ + str, Dict[str, Dict[str, Dict[str, str]]] + ] = json.load(f) + +with open(EFFECT_PATH / 'artifact_effect.json', "r", encoding='UTF-8') as f: + artifact_effect_map: Dict[str, Dict[str, Dict[str, str]]] = json.load(f) + +with open(EFFECT_PATH / 'value_attr.json', 'r', encoding='UTF-8') as f: + ATTR_MAP: Dict[str, List[str]] = json.load(f) + +with open(EFFECT_PATH / 'char_action.json', 'r', encoding='UTF-8') as f: + char_action: Dict[str, Dict[str, ActionMAP]] = json.load(f) + +with open(EFFECT_PATH / 'dmg_map.json', 'r', encoding='UTF-8') as f: + dmgMap = json.load(f) + +with open(EFFECT_PATH / 'skill_add.json', 'r', encoding='UTF-8') as f: + avatarName2SkillAdd: Dict[str, List[str]] = json.load(f) + +COLOR_MAP = { + 'Anemo': (0, 145, 137), + 'Cryo': (4, 126, 152), + 'Dendro': (28, 145, 0), + 'Electro': (133, 12, 159), + 'Geo': (147, 112, 3), + 'Hydro': (51, 73, 162), + 'Pyro': (136, 28, 33), +} diff --git a/GenshinUID/genshinuid_enka/etc/base_info.py b/GenshinUID/genshinuid_enka/etc/base_info.py new file mode 100644 index 00000000..c24d2003 --- /dev/null +++ b/GenshinUID/genshinuid_enka/etc/base_info.py @@ -0,0 +1,83 @@ +PERCENT_ATTR = ['dmgBonus', 'addAtk', 'addDef', 'addHp'] + +baseWeaponInfo = { + 'itemId': 0, + 'nameTextMapHash': '0', + 'weaponIcon': 'UI_EquipIcon_Bow_Changed', + 'weaponType': '', + 'weaponName': '', + 'weaponStar': 0, + 'promoteLevel': 0, + 'weaponLevel': 0, + 'weaponAffix': 1, + 'weaponStats': [ + { + 'appendPropId': '', + 'statName': '基础攻击力', + 'statValue': 0, + }, + { + 'appendPropId': '', + 'statName': '', + 'statValue': 0, + }, + ], + 'weaponEffect': '', +} + +baseFightProp = { + 'hp': 0.0, + 'baseHp': 0.0, + 'addHp': 0.0, + 'exHp': 0.0, + 'atk': 0.0, + 'baseAtk': 0.0, + 'addAtk': 0.0, + 'exAtk': 0.0, + 'def': 0.0, + 'baseDef': 0.0, + 'addDef': 0.0, + 'exDef': 0.0, + 'elementalMastery': 0.0, + 'critRate': 0.05, + 'critDmg': 0.5, + 'energyRecharge': 1.0, + 'healBonus': 0.0, + 'healedBonus': 0.0, + 'physicalDmgSub': 0.0, + 'physicalDmgBonus': 0.0, + 'dmgBonus': 0.0, +} + +ATTR_MAP = { + '元素精通': 'elementalMastery', + '物理伤害加成': 'physicalDmgBonus', + '元素伤害加成': 'dmgBonus', + '充能效率': 'energyRecharge', + '暴击伤害': 'critDmg', + '暴击率': 'critRate', + '攻击力': 'addAtk', + '防御力': 'addDef', + '生命值': 'addHp', + '百分比血量': 'addHp', +} + +ELEMENT_MAP = { + '风': 'Anemo', + '冰': 'Cryo', + '草': 'Dendro', + '雷': 'Electro', + '岩': 'Geo', + '水': 'Hydro', + '火': 'Pyro', +} + +ICON_ELEMENT = { + '风': 'Wind', + '冰': 'Ice', + '草': 'Grass', + '水': 'Water', + '雷': 'Electric', + '岩': 'Rock', + '火': 'Fire', +} diff --git a/GenshinUID/genshinuid_enka/etc/etc.py b/GenshinUID/genshinuid_enka/etc/etc.py new file mode 100644 index 00000000..23cabe56 --- /dev/null +++ b/GenshinUID/genshinuid_enka/etc/etc.py @@ -0,0 +1,201 @@ +from pathlib import Path + +from PIL import Image + +from .MAP_PATH import ATTR_MAP, dmgMap + +R_PATH = Path(__file__).parents[1] +TEXT_PATH = R_PATH / 'texture2D' + +SCORE_MAP = { + '暴击率': 2, + '暴击伤害': 1, + '元素精通': 0.25, + '元素充能效率': 0.65, + '百分比血量': 0.86, + '百分比攻击力': 1, + '百分比防御力': 0.7, + '血量': 0.014, + '攻击力': 0.12, + '防御力': 0.18, +} + +VALUE_MAP = { + '攻击力': 4.975, + '血量': 4.975, + '防御力': 6.2, + '元素精通': 19.75, + '元素充能效率': 5.5, + '暴击率': 3.3, + '暴击伤害': 6.6, +} + + +def get_star_png(star: int) -> Image.Image: + png = Image.open(TEXT_PATH / 's-{}.png'.format(str(star))) + return png + + +def strLenth(r: str, size: int, limit: int = 540) -> str: + result = '' + temp = 0 + for i in r: + if temp >= limit: + result += '\n' + i + temp = 0 + else: + result += i + + if i.isdigit(): + temp += round(size / 10 * 6) + elif i == '/': + temp += round(size / 10 * 2.2) + elif i == '.': + temp += round(size / 10 * 3) + elif i == '%': + temp += round(size / 10 * 9.4) + else: + temp += size + return result + + +async def get_artifacts_score(subName: str, subValue: int) -> int: + score = subValue * SCORE_MAP[subName] + return score + + +async def get_artifacts_value( + subName: str, + subValue: float, + baseAtk: int, + baseHp: int, + baseDef: int, + charName: str, +) -> float: + if charName not in ATTR_MAP: + ATTR_MAP[charName] = ['攻击力', '暴击率', '暴击伤害'] + if subName in ATTR_MAP[charName] and subName in ['血量', '防御力', '攻击力']: + if subName == '血量': + base = (subValue / baseHp) * 100 + elif subName == '防御力': + base = (subValue / baseDef) * 100 + elif subName == '攻击力': + base = (subValue / baseAtk) * 100 + else: + base = 1.0 + value = float('{:.2f}'.format(base / VALUE_MAP[subName])) + elif subName in ['百分比血量', '百分比防御力', '百分比攻击力']: + subName = subName.replace('百分比', '') + if subName in ATTR_MAP[charName]: + value = float('{:.2f}'.format(subValue / VALUE_MAP[subName])) + else: + return 0 + else: + if subName in ATTR_MAP[charName]: + value = float('{:.2f}'.format(subValue / VALUE_MAP[subName])) + else: + value = 0 + + if charName == '胡桃' and subName == '攻击力': + value = value * 0.4 + return value + + +async def get_all_artifacts_value( + raw_data: dict, baseHp: int, baseAtk: int, baseDef: int, char_name: str +) -> float: + artifactsValue = 0 + raw_data = raw_data['equipList'] + for aritifact in raw_data: + for i in aritifact['reliquarySubstats']: + subName = i['statName'] + subValue = i['statValue'] + value_temp = await get_artifacts_value( + subName, subValue, baseAtk, baseHp, baseDef, char_name + ) + artifactsValue += value_temp + return artifactsValue + + +async def get_first_main(mainName: str) -> str: + if '伤害加成' in mainName: + equipMain = mainName[0] + elif '元素' in mainName: + equipMain = mainName[2] + elif '百分比' in mainName: + if '血量' in mainName: + equipMain = '生' + else: + equipMain = mainName[3] + else: + equipMain = mainName[0] + return equipMain + + +async def get_char_std(raw_data: dict, char_name: str) -> dmgMap: + weaponName = raw_data['weaponInfo']['weaponName'] + + equipMain = '' + for aritifact in raw_data['equipList']: + mainName = aritifact['reliquaryMainstat']['statName'] + artifactsPos = aritifact['aritifactPieceName'] + if artifactsPos == '时之沙': + equipMain += await get_first_main(mainName) + elif artifactsPos == '空之杯': + equipMain += await get_first_main(mainName) + elif artifactsPos == '理之冠': + equipMain += await get_first_main(mainName) + + if 'equipSets' in raw_data: + equipSets = raw_data['equipSets'] + else: + artifact_set_list = [] + for i in raw_data['equipList']: + artifact_set_list.append(i['aritifactSetsName']) + equipSetList = set(artifact_set_list) + equipSets = {'type': '', 'set': ''} + for equip in equipSetList: + if artifact_set_list.count(equip) >= 4: + equipSets['type'] = '4' + equipSets['set'] = equip + break + elif artifact_set_list.count(equip) == 1: + pass + elif artifact_set_list.count(equip) >= 2: + equipSets['type'] += '2' + equipSets['set'] += equip + + if equipSets['type'] in ['2', '']: + seq = '' + else: + seq = '{}|{}|{}'.format( + weaponName.replace('「', '').replace('」', ''), + equipSets['set'], + equipMain, + ) + + std_prop = dmgMap[char_name] + seq_temp_a = '' + seq_temp_w = '' + for std_seq in std_prop: + # 如果序列完全相同, 则直接使用这个序列 + if std_seq['seq'] == seq: + std = std_seq + break + # 如果不完全相同, 但是杯子的主词条相同, 也可以使用这个 + if len(seq) >= 2 and len(std_seq['seq']) >= 2: + if std_seq['seq'][:2] == seq[:2] and seq_temp_w == '': + seq_temp_w = std_seq + if std_seq['seq'][-2] == seq[-2] and seq_temp_a == '': + seq_temp_a = std_seq + else: + # 如果存在备选那就用备选 + if seq_temp_w: + std = seq_temp_w + elif seq_temp_a: + std = seq_temp_a + # 不存在则使用第一个 + else: + std = dmgMap[char_name][0] + + return std diff --git a/GenshinUID/genshinuid_enka/etc/get_buff_list.py b/GenshinUID/genshinuid_enka/etc/get_buff_list.py new file mode 100644 index 00000000..b946c6ca --- /dev/null +++ b/GenshinUID/genshinuid_enka/etc/get_buff_list.py @@ -0,0 +1,109 @@ +from typing import List, Literal + +from ..etc.base_info import ELEMENT_MAP +from .MAP_PATH import char_effect_map, weapon_effect_map, artifact_effect_map + + +async def get_buff_list( + raw_data: dict, + type: Literal['group', 'normal', 'fight'], + with_talent: bool = True, +) -> List[str]: + + all_effect: List[str] = [] + + # 获取初始数据 + char_name = raw_data['avatarName'] + # 处理旅行者 + if char_name == '旅行者': + for element in ELEMENT_MAP: + if raw_data['avatarElement'] == ELEMENT_MAP[element]: + char_name += f'({element})' + break + char_level = int(raw_data['avatarLevel']) + weaponName = raw_data['weaponInfo']['weaponName'] + weaponAffix = raw_data['weaponInfo']['weaponAffix'] + + main = type + if type == 'group': + main = 'fight' + + # 计算武器效果 + WEM = weapon_effect_map[weaponName] + weapon_effet = WEM[main][f'{type}_effect'][str(weaponAffix)] + all_effect.append(weapon_effet) + + # 计算圣遗物套装 + if 'equipSets' in raw_data: + equipSets = raw_data['equipSets'] + else: + artifact_set_list = [] + for i in raw_data['equipList']: + artifact_set_list.append(i['aritifactSetsName']) + equipSetList = set(artifact_set_list) + equipSets = {'type': '', 'set': ''} + for equip in equipSetList: + if artifact_set_list.count(equip) >= 4: + equipSets['type'] = '4' + equipSets['set'] = equip + break + elif artifact_set_list.count(equip) == 1: + pass + elif artifact_set_list.count(equip) >= 2: + equipSets['type'] += '2' + equipSets['set'] += '|' + equip + + if equipSets['set'].startswith('|'): + equipSets['set'] = equipSets['set'][1:] + + # 计算圣遗物buff + if equipSets['type'] == '4': + all_effect.append( + artifact_effect_map[equipSets['set']][f'{type}_effect']['2'] + ) + all_effect.append( + artifact_effect_map[equipSets['set']][f'{type}_effect']['4'] + ) + elif equipSets['type'] == '2': + all_effect.append( + artifact_effect_map[equipSets['set']][f'{type}_effect']['2'] + ) + elif equipSets['type'] == '22': + if equipSets['set'][-2] == '之': + e = equipSets['set'][-3:] + else: + e = equipSets['set'][-2:] + + if equipSets['set'][2] == '之': + t = equipSets['set'][:3] + else: + t = equipSets['set'][:2] + + for i in artifact_effect_map: + if i.startswith(t): + all_effect.extend( + artifact_effect_map[i][f'{type}_effect']['2'].split(';') + ) + elif i.endswith(e): + all_effect.extend( + artifact_effect_map[i][f'{type}_effect']['2'].split(';') + ) + + # 计算技能buff + if char_name in char_effect_map: + if with_talent: + for talent in char_effect_map[char_name][main][f'{type}_talent']: + if len(raw_data['talentList']) >= int(talent): + all_effect.append( + char_effect_map[char_name][main][f'{type}_talent'][ + talent + ] + ) + # 计算角色buff + for skill in char_effect_map[char_name][main][f'{type}_skill']: + if char_level >= int(skill): + all_effect.append( + char_effect_map[char_name][main][f'{type}_skill'][skill] + ) + + return all_effect diff --git a/GenshinUID/genshinuid_enka/etc/status_change.py b/GenshinUID/genshinuid_enka/etc/status_change.py new file mode 100644 index 00000000..7e73e28e --- /dev/null +++ b/GenshinUID/genshinuid_enka/etc/status_change.py @@ -0,0 +1,433 @@ +STATUS_CHAR_LIST = { + '魈': [ + { + 'name': 'Q普通攻击/重击/下落攻击伤害提升', + 'type': '攻击力', + 'plus': 1, + 'value': [ + '58.5%', + '61.9%', + '65.5%', + '70.0%', + '73.5%', + '77.0%', + '81.6%', + '86.1%', + '90.6%', + '95.2%', + '99.8%', + '104.3%', + '108.9%', + '113.4%', + '117.9%', + ], + 'effect': 'ABC:dmgBonus+{}', + } + ], + '诺艾尔': [ + { + 'name': 'Q攻击力提高', + 'type': '防御', + 'plus': 1, + 'value': [ + '40%', + '43%', + '46%', + '50%', + '53%', + '56%', + '60%', + '64%', + '68%', + '72%', + '76%', + '80%', + '85%', + '90%', + '95%', + ], + 'effect': 'exAtk+{}def', + } + ], + '胡桃': [ + { + 'name': 'E攻击力提高', + 'type': '生命值', + 'plus': 1, + 'value': [ + '3.84%', + '4.07%', + '4.30%', + '4.60%', + '4.83%', + '5.06%', + '5.36%', + '5.66%', + '5.96%', + '6.26%', + '6.55%', + '6.85%', + '7.15%', + '7.45%', + '7.75%', + ], + 'effect': 'exAtk+{}hp', + } + ], + '烟绯': [ + { + 'name': 'Q重击伤害提升', + 'type': '攻击力', + 'plus': 1, + 'value': [ + '33%', + '35%', + '37%', + '40%', + '42%', + '44%', + '47%', + '49%', + '52%', + '54%', + '57%', + '60%', + '62%', + '65%', + '67%', + ], + 'effect': 'B:dmgBonus+{}', + } + ], + '珊瑚宫心海': [ + { + 'name': 'Q普通攻击伤害提高', + 'type': '生命值', + 'plus': 1, + 'value': [ + '4.8%', + '5.2%', + '5.6%', + '6.0%', + '6.4%', + '6.8%', + '7.3%', + '7.7%', + '8.2%', + '8.7%', + '9.2%', + '9.7%', + '10.3%', + '10.9%', + '11.5%', + ], + 'effect': 'A:addDmg+{}hp', + }, + { + 'name': 'Q重击伤害提高', + 'type': '生命值', + 'plus': 1, + 'value': [ + '6.8%', + '7.3%', + '7.8%', + '8.5%', + '9.0%', + '9.5%', + '10.2%', + '10.8%', + '11.5%', + '12.2%', + '12.9%', + '13.6%', + '14.4%', + '15.2%', + '16.1%', + ], + 'effect': 'B:addDmg+{}hp', + }, + { + 'name': 'Q化海月伤害提高', + 'type': '生命值', + 'plus': 1, + 'value': [ + '7.1%', + '7.6%', + '8.2%', + '8.9%', + '9.4%', + '9.9%', + '10.6%', + '11.4%', + '12.1%', + '12.8%', + '13.5%', + '14.2%', + '15.1%', + '16.0%', + '16.9%', + ], + 'effect': 'E:addDmg+{}hp', + }, + ], + '荒泷一斗': [ + { + 'name': 'Q攻击力提高', + 'type': '防御', + 'plus': 1, + 'value': [ + '57.6%', + '61.9%', + '66.2%', + '72.0%', + '76.3%', + '80.6%', + '86.4%', + '92.2%', + '97.9%', + '103.7%', + '109.4%', + '115.2%', + '122.4%', + '129.6%', + '136.8%', + ], + 'effect': 'exAtk+{}def', + } + ], + '宵宫': [ + { + 'name': 'A普通攻击伤害提升', + 'type': '攻击力', + 'plus': 1, + 'value': [ + 1.3790899515151978, + 1.4017900228500366, + 1.424489974975586, + 1.4539999961853027, + 1.476699948310852, + 1.499400019645691, + 1.5289100408554077, + 1.558419942855835, + 1.5879299640655518, + 1.6174399852752686, + 1.6469500064849854, + 1.6764600276947021, + 1.705970048904419, + 1.7354799509048462, + 1.764989972114563, + ], + 'effect': 'A:baseArea+{}', + } + ], + '流浪者': [ + { + 'name': 'A普通攻击伤害提升', + 'type': '攻击力', + 'plus': 1, + 'value': [ + 1.3298250436782837, + 1.3495750427246094, + 1.369325041770935, + 1.3949999809265137, + 1.4147499799728394, + 1.434499979019165, + 1.4601750373840332, + 1.4858499765396118, + 1.51152503490448, + 1.5371999740600586, + 1.5628750324249268, + 1.5885499715805054, + 1.6142250299453735, + 1.6398999691009521, + 1.6655750274658203, + ], + 'effect': 'A:baseArea+{}', + }, + { + 'name': 'A普通攻击伤害提升', + 'type': '攻击力', + 'plus': 1, + 'value': [ + 1.2638599872589111, + 1.2796599864959717, + 1.2954599857330322, + 1.315999984741211, + 1.3317999839782715, + 1.347599983215332, + 1.3681399822235107, + 1.3886799812316895, + 1.4092199802398682, + 1.4297599792480469, + 1.4502999782562256, + 1.4708399772644043, + 1.491379976272583, + 1.5119199752807617, + 1.5324599742889404, + ], + 'effect': 'B:baseArea+{}', + }, + ], + '神里绫人': [ + { + 'name': 'Q普通攻击伤害提升', + 'type': '攻击力', + 'plus': 1, + 'value': [ + '11.0%', + '12.0%', + '13.0%', + '14.0%', + '15.0%', + '16.0%', + '17.0%', + '18.0%', + '19.0%', + '20.0%', + '20.0%', + '20.0%', + '20.0%', + '20.0%', + '20.0%', + ], + 'effect': 'A:dmgBonus+{}', + }, + { + 'name': 'E浪闪', + 'type': '生命值', + 'plus': 4, + 'value': [ + 0.005611000116914511, + 0.006066999863833189, + 0.006523999851197004, + 0.0071760001592338085, + 0.007633000146597624, + 0.008155000396072865, + 0.00887299980968237, + 0.009589999914169312, + 0.01030800025910139, + 0.011091000400483608, + 0.011873999610543251, + 0.012656999751925468, + 0.013438999652862549, + 0.014221999794244766, + 0.015004999935626984, + ], + 'effect': '瞬水剑:addDmg+{}hp', + }, + ], +} + +EXTRA_CHAR_LIST = { + '雷电将军': { + "Q愿力加成": { + "type": "攻击", + "plus": 1, + "value": [ + "3.89+0.73", + "4.18+0.78", + "4.47+0.84", + "4.86+0.91", + "5.15+0.96", + "5.44+1.02", + "5.83+1.09", + "6.22+1.16", + "6.61+1.23", + "7.00+1.31", + "7.39+1.38", + "7.78+1.45", + "8.26+1.54", + "8.75+1.63", + "9.23+1.72", + ], + }, + 'Q伤害提升': { + "type": "攻击", + "plus": 1, + 'value': [ + 0.002199999988079071, + 0.002300000051036477, + 0.002400000113993883, + 0.0024999999441206455, + 0.0026000000070780516, + 0.0027000000700354576, + 0.00279999990016222, + 0.002899999963119626, + 0.003000000026077032, + 0.003000000026077032, + 0.003000000026077032, + 0.003000000026077032, + 0.003000000026077032, + 0.003000000026077032, + 0.003000000026077032, + ], + }, + }, + '优菈': { + "Q每层能量伤害": { + "type": "攻击", + "plus": 1, + 'value': [ + 0.7499200105667114, + 0.8109599947929382, + 0.871999979019165, + 0.9592000246047974, + 1.0202399492263794, + 1.090000033378601, + 1.185920000076294, + 1.2818399667739868, + 1.3777600526809692, + 1.4823999404907227, + 1.6023000478744507, + 1.7433019876480103, + 1.8843050003051758, + 2.0253069400787354, + 2.1791279315948486, + ], + } + }, + '纳西妲': { + "E灭净三业伤害提升0": { + "type": "攻击", + "plus": 1, + 'value': [ + 0.14880000054836273, + 0.15996000170707703, + 0.17112000286579132, + 0.1860000044107437, + 0.197160005569458, + 0.2083200067281723, + 0.2231999933719635, + 0.2380799949169159, + 0.2529599964618683, + 0.2678399980068207, + 0.28271999955177307, + 0.29760000109672546, + 0.31619998812675476, + 0.33480000495910645, + 0.35339999198913574, + ], + }, + "E灭净三业伤害提升1": { + "type": "攻击", + "plus": 1, + 'value': [ + 0.2231999933719635, + 0.23994000256061554, + 0.2566800117492676, + 0.27900001406669617, + 0.295740008354187, + 0.31248000264167786, + 0.33480000495910645, + 0.35712000727653503, + 0.3794400095939636, + 0.4017600119113922, + 0.4240800142288208, + 0.446399986743927, + 0.47429999709129333, + 0.5022000074386597, + 0.5300999879837036, + ], + }, + }, +} diff --git a/GenshinUID/genshinuid_enka/get_enka_img.py b/GenshinUID/genshinuid_enka/get_enka_img.py new file mode 100644 index 00000000..87248d0b --- /dev/null +++ b/GenshinUID/genshinuid_enka/get_enka_img.py @@ -0,0 +1,272 @@ +import re +import json +from typing import Dict, List, Tuple, Union, Optional + +from gsuid_core.logger import logger + +from .to_card import draw_enka_card +from ..utils.error_reply import CHAR_HINT +from .draw_char_card import draw_char_img +from .draw_group_dmg import draw_group_dmg_img +from .mono.Character import Character, get_char +from ..utils.map.GS_MAP_PATH import avatarName2Element +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH +from ..utils.map.name_covert import ( + name_to_avatar_id, + alias_to_char_name, + avatarId_to_enName, +) + +CHAR_TO_INT = { + '零': 0, + '一': 1, + '二': 2, + '三': 3, + '四': 4, + '五': 5, + '六': 6, + '满': 6, +} + +WEAPON_TO_INT = { + '一': 1, + '二': 2, + '三': 3, + '四': 4, + '五': 5, + '满': 5, +} + + +async def draw_enka_img( + raw_mes: str, uid: str, url: Optional[str] +) -> Union[str, Tuple[Union[bytes, str], Optional[bytes]]]: + # 获取角色名 + msg = ' '.join(re.findall('[\u4e00-\u9fa5]+', raw_mes)) + # msg = raw_mes.strip() + + # 判断是否开启成长曲线或最佳, 并且去除 + is_curve = False + is_group = False + if '成长曲线' in msg or '曲线' in msg: + is_curve = True + msg = msg.replace('成长曲线', '').replace('曲线', '') + if '队伍' in msg or '队伍伤害' in msg: + is_group = True + msg = msg.replace('队伍', '').replace('伤害', '').strip() + + if '展柜角色' in msg: + sc = await get_showcase(uid) + if isinstance(sc, str): + return sc + return sc, None + + msg_list = msg.split(' ') + char_list = [] + for msg in msg_list: + _args = await get_char_args(msg, uid) + if isinstance(_args, str): + return _args + else: + if isinstance(_args[0], str): + return _args[0] + if is_group: + char = await get_char(*_args) + char_list.append(char) + else: + break + else: + im = await draw_group_dmg_img(uid, char_list) + if isinstance(im, str): + return im + return im, None + + char = await get_char(*_args) + + if isinstance(char, str): + logger.info('[查询角色] 绘图失败, 替换的武器不正确!') + return char + + im = await draw_char_img(char, url, is_curve) + logger.info('[查询角色] 绘图完成,等待发送...') + return im + + +async def get_char_data(uid: str, char_name: str) -> Union[Dict, str]: + player_path = PLAYER_PATH / str(uid) + if '旅行者' in char_name: + char_name = '旅行者' + else: + char_name = await alias_to_char_name(char_name) + char_path = player_path / f'{char_name}.json' + if char_path.exists(): + with open(char_path, 'r', encoding='utf8') as fp: + char_data = json.load(fp) + else: + return CHAR_HINT.format(char_name) + return char_data + + +async def get_showcase(uid: str) -> Union[bytes, str]: + player_path = PLAYER_PATH / str(uid) + char_file_list = player_path.glob('*') + char_list = [] + for i in char_file_list: + file_name = i.name + if '\u4e00' <= file_name[0] <= '\u9fff': + char_list.append(file_name.split('.')[0]) + if char_list == []: + return '您还没有已缓存的角色噢~\n请先使用[强制刷新]命令缓存~' + img = await draw_enka_card(uid=uid, char_list=char_list) + return img + + +async def change_equip( + uid: str, char_data: Dict, part: str, s: str, i: int +) -> Dict: + char_name = part.replace(part[-1], '') + fake_data = await get_char_data(uid, char_name) + if isinstance(fake_data, str): + return {} + for equip in fake_data['equipList']: + if equip['aritifactPieceName'] == s: + char_data['equipList'][i] = equip + break + return char_data + + +async def get_char_args( + msg: str, uid: str +) -> Union[Tuple[Dict, Optional[str], Optional[int], Optional[int]], str]: + # 可能进来的值 + # 六命公子带天空之卷换可莉圣遗物换刻晴羽换可莉花 + # 六命公子带天空之卷换刻晴羽 + # 公子换刻晴羽 + fake_name = '' + talent_num = None + char_data = {} + weapon, weapon_affix = None, None + + msg = msg.replace('带', '换').replace('拿', '换') + + # 公子带天空之卷换可莉圣遗物 + msg_list = msg.split('换') + for index, part in enumerate(msg_list): + # 判断主体 + if index == 0: + fake_name, talent_num = await get_fake_char_str(part) + # 判断是否开启fake_char + if '圣遗物' in msg: + char_data = await get_fake_char_data(char_data, fake_name, uid) + else: + char_data = await get_char_data(uid, fake_name) + if isinstance(char_data, str): + return char_data + continue + + if '圣遗物' in part: + fake_data = await get_char_data(uid, part.replace('圣遗物', '')) + if isinstance(fake_data, str): + return fake_data + char_data = await get_fake_char_data(fake_data, fake_name, uid) + if isinstance(char_data, str): + return char_data + else: + for i, s in enumerate(['生之花', '死之羽', '时之沙', '空之杯', '理之冠']): + if '赤沙' in part: + continue + if part[-1] == s[-1]: + if isinstance(char_data, str): + return char_data + char_data = await change_equip(uid, char_data, part, s, i) + if not char_data: + return '要替换的部件不存在噢~' + break + else: + weapon, weapon_affix = await get_fake_weapon_str(part) + + return char_data, weapon, weapon_affix, talent_num + + +async def get_single_percent(char_data: Dict, uid: str, num: int, best: List): + char = Character(char_data) + await char.init_prop() + percent = float(char.percent.replace('%', '')) + logger.info(f'[查找最佳圣遗物] UID:{uid}第{num}次迭代...毕业度为{percent}!') + best.append({'percent': percent, 'char_data': char.card_prop}) + + +async def get_artifacts_repo(uid: str) -> Dict[str, List[Dict]]: + artifacts_repo = { + 'flower': [], + 'plume': [], + 'sands': [], + 'goblet': [], + 'circlet': [], + } + logger.info(f'[建立圣遗物仓库] UID:{uid}开始...') + # 开始查找全部角色 + uid_fold = PLAYER_PATH / str(uid) + char_file_list = uid_fold.glob('*') + for i in char_file_list: + if '\u4e00' <= i.name[0] <= '\u9fff': + with open(uid_fold / f'{i.name}', 'r', encoding='UTF-8') as f: + raw_data = json.load(f) + for equip in raw_data['equipList']: + if equip not in artifacts_repo[equip['aritifactSetPiece']]: + artifacts_repo[equip['aritifactSetPiece']].append(equip) + logger.info( + f'[建立圣遗物仓库] UID:{uid}完成!共计\ + {len(artifacts_repo["flower"])},\ + {len(artifacts_repo["plume"])},\ + {len(artifacts_repo["sands"])},\ + {len(artifacts_repo["goblet"])},\ + {len(artifacts_repo["circlet"])}个圣遗物!' + ) + return artifacts_repo + + +async def get_fake_char_data( + char_data: Dict, fake_name: str, uid: str +) -> Union[Dict, str]: + fake_name = await alias_to_char_name(fake_name) + original_data = await get_char_data(uid, fake_name) + if isinstance(original_data, Dict): + char_data['weaponInfo'] = original_data['weaponInfo'] + char_data['avatarName'] = fake_name + char_data['avatarId'] = await name_to_avatar_id(fake_name) + en_name = await avatarId_to_enName(char_data['avatarId']) + char_data['avatarEnName'] = en_name + if fake_name in avatarName2Element: + char_data['avatarElement'] = avatarName2Element[fake_name] + else: + return '要查询的角色不存在...' + char_data['avatarLevel'] = '90' + char_data['avatarSkill'] = [ + {'skillLevel': 10, 'skillIcon': 'Skill_A_02'}, + {'skillLevel': 10, 'skillIcon': f'Skill_S_{en_name}_01'}, + {'skillLevel': 10, 'skillIcon': f'Skill_E_{en_name}_01'}, + ] + return char_data + + +async def get_fake_char_str(char_name: str) -> Tuple[str, Optional[int]]: + ''' + 获取一个角色信息 + + ''' + talent_num = None + if '命' in char_name and char_name[0] in CHAR_TO_INT: + talent_num = CHAR_TO_INT[char_name[0]] + char_name = char_name[2:] + return char_name, talent_num + + +async def get_fake_weapon_str(msg: str) -> Tuple[str, Optional[int]]: + weapon_affix = None + if '精' in msg and msg[1] in WEAPON_TO_INT: + weapon_affix = WEAPON_TO_INT[msg[1]] + weapon = msg[2:] + else: + weapon = msg + return weapon, weapon_affix diff --git a/GenshinUID/genshinuid_enka/mono/Character.py b/GenshinUID/genshinuid_enka/mono/Character.py new file mode 100644 index 00000000..08f8e21e --- /dev/null +++ b/GenshinUID/genshinuid_enka/mono/Character.py @@ -0,0 +1,903 @@ +from copy import deepcopy +from typing import Dict, List, Tuple, Optional + +from nonebot.log import logger + +from .Power import sp_prop +from ..etc.get_buff_list import get_buff_list +from ...genshinuid_config.gs_config import gsconfig +from ...gsuid_utils.api.minigg.models import MiniGGError +from ..etc.status_change import EXTRA_CHAR_LIST, STATUS_CHAR_LIST +from ..etc.MAP_PATH import ActionMAP, char_action, avatarName2SkillAdd +from ...utils.map.GS_MAP_PATH import avatarName2Weapon, avatarName2Element +from ...utils.map.name_covert import name_to_avatar_id, avatar_id_to_char_star +from ...utils.ambr_to_minigg import ( + convert_ambr_to_minigg, + convert_ambr_to_weapon, +) +from ..etc.base_info import ( + ATTR_MAP, + ELEMENT_MAP, + ICON_ELEMENT, + PERCENT_ATTR, + baseFightProp, + baseWeaponInfo, +) +from ...gsuid_utils.api.minigg.request import ( + get_weapon_info, + get_weapon_stats, + get_character_info, + get_character_stats, +) + + +class Character: + def __init__(self, card_prop: Dict): + # 面板数据 + self.card_prop: Dict = card_prop + # 无命座效果 + self.without_talent_card = card_prop + # 战斗数据 + self.fight_prop: Dict[str, float] = {} + # 战斗数据 + self.without_talent_fight: Dict[str, float] = {} + # 实时数据 + self.real_prop: Dict[str, float] = {} + + # 角色等级,名称,元素,武器类型 + self.char_level: int = int(card_prop['avatarLevel']) + self.char_id: str = '10000029' + self.char_name: str = card_prop['avatarName'] + self.char_element = self.card_prop['avatarElement'] + self.char_fetter = self.card_prop['avatarFetter'] + self.char_talent: int = len(self.card_prop['talentList']) + self.weapon_type = self.card_prop['weaponInfo']['weaponType'] + self.char_bytes: Optional[bytes] = None + self.rarity: str = '4' + + self.power_name: str = '' + self.attack_type: str = '' + + # 角色的圣遗物总分 + self.artifacts_all_score: float = 0 + self.percent: str = '0.0' + self.dmg_data: Dict = {} + self.seq_str: str = '无匹配' + + # 特殊 + self.sp_list: List = [] + self.sp: sp_prop = sp_prop() + self.extra_effect: Dict = {} + + self.time: float = 0 + self.buff: List = [] + self.enemy_debuff: List = [] + self.power_list: Dict[str, ActionMAP] = {} + + # 处理旅行者 + self.s_char_name = self.char_name + if self.char_name == '旅行者': + for element in ELEMENT_MAP: + if self.char_element == ELEMENT_MAP[element]: + self.s_char_name += f'({element})' + break + + async def new( + self, + weapon: Optional[str] = None, + weapon_affix: Optional[int] = None, + talent_num: Optional[int] = None, + ): + ''' + <初始化角色 - 1> + + <新生成角色的基础属性> + 如果要替换武器也在这边进行处理 + + 参数: + weapon: `Optional[str]` + 武器名称(fake) + weapon_affix: `Optional[int]` + 武器精炼次数(fake) + talent_num: `Optional[int]` + 命座数量(fake) + ''' + if not gsconfig.get_config('OldPanle').data: + self.card_prop = await self.get_card_prop( + weapon, weapon_affix, talent_num + ) + if self.card_prop == {}: + return '要替换的武器不正确或发生了未知错误~' + self.baseHp = self.card_prop['avatarFightProp']['baseHp'] + self.baseAtk = self.card_prop['avatarFightProp']['baseAtk'] + self.baseDef = self.card_prop['avatarFightProp']['baseDef'] + self.rarity = await avatar_id_to_char_star( + str(self.card_prop['avatarId']) + ) + self.char_id = await name_to_avatar_id(self.char_name) + + async def get_card_prop( + self, + weapon: Optional[str] = None, + weapon_affix: Optional[int] = None, + talent_num: Optional[int] = None, + ) -> dict: + # 创造一个假武器 + if weapon: + weapon_info = deepcopy(baseWeaponInfo) + weapon_raw_data = await get_weapon_info(weapon) + if isinstance(weapon_raw_data, MiniGGError) or isinstance( + weapon_raw_data, List + ): + weapon_raw_data = await convert_ambr_to_weapon(weapon) + if not weapon_raw_data: + return {} + else: + weapon_level_data = weapon_raw_data + weapon_info['weaponLevel'] = 90 + weapon_info['promoteLevel'] = 6 + else: + weapon_info['weaponStar'] = int(weapon_raw_data['rarity']) + if weapon_info['weaponStar'] >= 3: + weapon_level_data = await get_weapon_stats(weapon, 90) + weapon_info['weaponLevel'] = 90 + weapon_info['promoteLevel'] = 6 + else: + weapon_level_data = await get_weapon_stats(weapon, 70) + weapon_info['weaponLevel'] = 70 + weapon_info['promoteLevel'] = 4 + if isinstance(weapon_level_data, MiniGGError) or isinstance( + weapon_level_data, List + ): + return {} + weapon_info['weaponName'] = weapon_raw_data['name'] + if weapon_affix is None: + if weapon_info['weaponStar'] >= 5: + weapon_info['weaponAffix'] = 1 + else: + weapon_info['weaponAffix'] = 5 + else: + weapon_info['weaponAffix'] = weapon_affix + weapon_info['weaponStats'][0]['statValue'] = round( + weapon_level_data['attack'] + ) + if weapon_raw_data['substat'] != '': + weapon_info['weaponStats'][1]['statName'] = weapon_raw_data[ + 'substat' + ] + if weapon_raw_data['substat'] == '元素精通': + fake_value = round(weapon_level_data['specialized']) + else: + fake_value = float( + '{:.2f}'.format(weapon_level_data['specialized'] * 100) + ) + weapon_info['weaponStats'][1]['statValue'] = fake_value + if 'effect' in weapon_raw_data: + weapon_info['weaponEffect'] = weapon_raw_data['effect'].format( + *weapon_raw_data[ + 'r{}'.format(str(weapon_info['weaponAffix'])) + ] + ) + else: + weapon_info['weaponEffect'] = '无特效。' + weapon_info['weaponType'] = weapon_raw_data['weapontype'] + self.card_prop['weaponInfo'] = weapon_info + + # 修改假命座: + + if self.s_char_name.startswith('旅行者'): + icon_name = f'Player{ICON_ELEMENT[self.s_char_name[-2]]}' + else: + icon_name = self.card_prop['avatarEnName'] + + if talent_num is None: + talent_num = len(self.card_prop['talentList']) + + if talent_num or talent_num == 0: + talent_list = [] + for i in range(1, talent_num + 1): + talent_list.append( + { + 'talentId': 300 + i, + 'talentName': f'FakeTalent{i}', + 'talentIcon': f'UI_Talent_S_{icon_name}_0{i}', + } + ) + self.card_prop['talentList'] = talent_list + + fight_prop = await self.get_base_prop(self.char_name, self.char_level) + self.card_prop['avatarFightProp'] = fight_prop + + self.without_talent_card = self.card_prop + # 计算圣遗物效果 + all_effects = await get_artifacts_value(self.card_prop) + part_effects = deepcopy(all_effects) + + all_effects.extend(await get_buff_list(self.card_prop, 'normal')) + part_effects.extend( + await get_buff_list(self.card_prop, 'normal', False) + ) + + fight_prop_part = await self.get_effect_prop( + deepcopy(fight_prop), part_effects, self.char_name + ) + fight_prop_all = await self.get_effect_prop( + deepcopy(fight_prop), all_effects, self.char_name + ) + + self.card_prop['avatarFightProp'] = fight_prop_all + self.without_talent_card['avatarFightProp'] = fight_prop_part + return self.card_prop + + async def get_base_prop(self, char_name: str, char_level: int) -> Dict: + # 武器基本属 + weapon_atk = self.card_prop['weaponInfo']['weaponStats'][0][ + 'statValue' + ] + if len(self.card_prop['weaponInfo']['weaponStats']) > 1: + weapon_sub = self.card_prop['weaponInfo']['weaponStats'][1][ + 'statName' + ] + weapon_sub_val = self.card_prop['weaponInfo']['weaponStats'][1][ + 'statValue' + ] + else: + weapon_sub = '' + weapon_sub_val = 0 + + fight_prop = deepcopy(baseFightProp) + if '珊瑚宫心海' == char_name: + fight_prop['critRate'] -= 1.0 + fight_prop['healBonus'] += 0.25 + + char_name_covert = char_name + if char_name == '旅行者': + char_name_covert = '荧' + + char_raw = await get_character_info(name=char_name_covert) + self.char_id = await name_to_avatar_id(char_name_covert) + if not self.char_id and char_name != '旅行者': + return {} + if isinstance(char_raw, MiniGGError) or isinstance(char_raw, List): + char_raw = char_data = await convert_ambr_to_minigg(self.char_id) + else: + char_data = await get_character_stats(char_name_covert, char_level) + + if ( + isinstance(char_data, List) + or isinstance(char_data, MiniGGError) + or char_data is None + ): + return {} + + fight_prop['baseHp'] = char_data['hp'] + fight_prop['baseAtk'] = char_data['attack'] + weapon_atk + fight_prop['baseDef'] = char_data['defense'] + fight_prop['exHp'] = 0 + fight_prop['exAtk'] = 0 + fight_prop['exDef'] = 0 + + # 计算突破加成 + if isinstance(char_raw, dict): + for attr in ATTR_MAP: + if attr in char_raw['substat']: + sp = char_data['specialized'] + if attr == '暴击伤害': + sp -= 0.5 + elif attr == '暴击率': + sp -= 0.05 + fight_prop[ATTR_MAP[attr]] += sp + if attr in weapon_sub: + if attr == '元素精通': + weapon_sub_val *= 100 + fight_prop[ATTR_MAP[attr]] += weapon_sub_val / 100 + else: + return {} + + return fight_prop + + async def init_prop(self): + ''' + <初始化角色 - 2> + + 生成角色的战斗属性和毕业度 + ''' + await self.get_fight_prop() + + async def get_effect_prop( + self, + prop: dict, + effect_list: List[str], + char_name: str, + ) -> dict: + logger.debug(effect_list) + if 'A_d' not in prop: + for attr in [ + 'shieldBonus', + 'addDmg', + 'addHeal', + 'ignoreDef', + 'd', + 'g', + 'a', + ]: + prop[attr] = 0 + prop['k'] = 1 + prop['sp'] = [] + prop['baseArea'] = 1 + if prop['baseHp'] + prop['addHp'] == prop['hp']: + prop['exHp'] = prop['addHp'] + prop['exAtk'] = prop['addAtk'] + prop['exDef'] = prop['addDef'] + prop['addHp'] = 0 + prop['addAtk'] = 0 + prop['addDef'] = 0 + + # 给每个技能 分别添加上属性 + for prop_attr in deepcopy(prop): + for prop_limit in ['A', 'B', 'C', 'E', 'Q']: + prop[f'{prop_limit}_{prop_attr}'] = prop[prop_attr] + + weapon_type = avatarName2Weapon[char_name] + + # 计算角色伤害加成应该使用什么 + for prop_limit in ['A', 'B', 'C', 'E', 'Q']: + if weapon_type == '法器' or char_name in [ + '荒泷一斗', + '刻晴', + '诺艾尔', + '胡桃', + '宵宫', + '魈', + '神里绫华', + ]: + prop['{}_dmgBonus'.format(prop_limit)] = prop['dmgBonus'] + elif weapon_type == '弓': + if prop_limit in ['A', 'C']: + prop['{}_dmgBonus'.format(prop_limit)] = prop[ + 'physicalDmgBonus' + ] + elif prop_limit in ['B', 'E', 'Q']: + prop['{}_dmgBonus'.format(prop_limit)] = prop[ + 'dmgBonus' + ] + else: + if prop_limit in ['A', 'B', 'C']: + prop['{}_dmgBonus'.format(prop_limit)] = prop[ + 'physicalDmgBonus' + ] + elif prop_limit in ['E', 'Q']: + prop['{}_dmgBonus'.format(prop_limit)] = prop[ + 'dmgBonus' + ] + + # 防止复数效果 + with_trans_effect: List[str] = [] + without_trans_effect: List[str] = [] + for effect in effect_list: + if ';' in effect: + effect = effect.split(';') + else: + effect = [effect] + + for _effect in effect: + if _effect == '': + continue + else: + if '%' in _effect: + with_trans_effect.append(_effect) + else: + without_trans_effect.append(_effect) + + new_effect_list: List[str] = without_trans_effect + with_trans_effect + + # 建立一份基于基础属性的effect_list, 确保hp,atk,def有正确的值 + base_effect_list: List[List] = [] + # 正式开始计算 + for effect in new_effect_list: + if 'Resist' in effect: + self.enemy_debuff.append(effect) + continue + else: + self.buff.append(effect) + # 分割效果 + # 例如:Q:dmgBonus+96%27%em + # 分割后: + # effect_limit = Q + effect_limit = '' + if ':' in effect: + effect_limit = effect.split(':')[0] + effect = effect.split(':')[1] + + effect_attr, effect_value = effect.split('+') + effect_max = 9999999 + effect_base: str = '' + + # 判断effect_value中有几个百分号 + p_count = effect_value.count('%') + # 如果有%,则认为是基于值的提升 + base_check = True + if p_count >= 2: + effect_max, effect_value, effect_base = effect_value.split('%') + elif p_count == 1: + effect_value, effect_base = effect_value.split('%') + else: + base_check = False + + # effect_attr, effect_value, effect_base, effect_max + # dmgBonus, 27, em, 96 + + # 暂时不处理extraDmg + if effect_attr == 'extraDmg': + continue + + effect_max = float(effect_max) / 100 + # 如果要增加的属性不是em元素精通,那么都要除于100 + if effect_attr not in [ + 'exHp', + 'exAtk', + 'exDef', + 'elementalMastery', + ]: + # 正常除100 + effect_value = float(effect_value) / 100 + # 元素精通则为正常值 + else: + if effect_base in ['hp', 'elementalMastery', 'def']: + effect_value = float(effect_value) / 100 + else: + effect_value = float(effect_value) + + # 如果属性是血量,攻击,防御值,并且是按照%增加的,那么增加值应为百分比乘上基础值 + if base_check: + if effect_base in ['hp', 'atk', 'def']: + base_effect_list.append( + [effect_limit, effect_attr, effect_value, effect_base] + ) + continue + + if effect_base == 'energyRecharge': + if effect_attr in PERCENT_ATTR: + effect_base_value = prop[effect_base] - 1 + else: + effect_base_value = (prop[effect_base] - 1) / 100 + + elif effect_base == 'energyrecharge': + effect_base = 'energyRecharge' + if effect_attr in PERCENT_ATTR: + effect_base_value = prop[effect_base] + else: + effect_base_value = prop[effect_base] / 100 + + elif effect_base == 'elementalMastery': + # 针对草神的 + if char_name == '纳西妲' and effect_attr == 'dmgBonus': + effect_base_value = (prop[effect_base] - 200) / 100 + else: + effect_base_value = prop[effect_base] + else: + effect_base_value = prop[effect_base] + effect_value = effect_value * effect_base_value + + # 判断是否超过上限,超过则使用上限值 + if effect_value >= effect_max: + effect_value = effect_max + + if char_name == '旅行者': + char_element = 'Hydro' + else: + char_element = avatarName2Element[char_name] + + # 判断是否是自己属性的叠加 + if 'DmgBonus' in effect_attr: + if effect_attr.replace('DmgBonus', '') == char_element: + effect_attr = 'dmgBonus' + elif effect_attr == 'physicalDmgBonus': + effect_attr = 'physicalDmgBonus' + else: + continue + + # 如果效果有限制条件 + prop = await self.get_buff_value( + prop, + effect_limit, + effect_attr, + effect_value, + effect_base, + False, + ) + + prop = await self.get_base_value(prop) + + # 重新计算加成值 + # base_effect_list = [ + # [limit_list, effect_attr, effect_value,effect_base] + # ] + for effect in base_effect_list: + prop = await self.get_buff_value(prop, *effect) + + prop = await self.get_base_value(prop) + logger.debug(prop) + return prop + + async def get_base_value(self, prop: Dict) -> Dict: + prop['hp'] = (prop['addHp'] + 1) * prop['baseHp'] + prop['exHp'] + prop['atk'] = (prop['addAtk'] + 1) * prop['baseAtk'] + prop['exAtk'] + prop['def'] = (prop['addDef'] + 1) * prop['baseDef'] + prop['exDef'] + for prop_limit in ['A', 'B', 'C', 'E', 'Q']: + for attr in ['hp', 'atk', 'def']: + attr_up = attr[0].upper() + attr[1:] + prop[f'{prop_limit}_{attr}'] = ( + prop[f'{prop_limit}_add{attr_up}'] + 1 + ) * prop[f'base{attr_up}'] + prop[f'ex{attr_up}'] + return prop + + async def get_buff_value( + self, + prop: Dict, + effect_limit: Optional[str], + effect_attr: str, + effect_value: float, + effect_base: Optional[str] = None, + is_calc_base: Optional[bool] = True, + ) -> Dict: + if effect_base and is_calc_base: + effect_value = prop[effect_base] * effect_value + if effect_limit: + # 如果限制条件为中文,则为特殊label才生效 + if '\u4e00' <= effect_limit[-1] <= '\u9fff': + prop['sp'].append( + { + 'effect_name': effect_limit, + 'effect_attr': effect_attr, + 'effect_value': effect_value, + } + ) + # 如果限制条件为英文,例如Q,则为Q才生效 + else: + # 形如ABC:dmgBonus+75,则遍历ABC,增加值 + for limit in effect_limit: + prop['{}_{}'.format(limit, effect_attr)] += effect_value + else: + if effect_attr in ['a', 'addDmg']: + pass + else: + for attr in ['A', 'B', 'C', 'E', 'Q']: + prop[f'{attr}_{effect_attr}'] += effect_value + prop[f'{effect_attr}'] += effect_value + + logger.debug(f'{effect_attr} + {effect_value} 基于[{effect_base}]') + + return prop + + async def get_fight_prop(self) -> Dict: + ''' + 生成角色的倍率表 + + 返回: + self.fight_prop + ''' + # 拿到倍率表 + if self.s_char_name not in char_action: + self.power_list = {} + else: + self.power_list = char_action[self.s_char_name] + # 额外增加钟离倍率 + if self.char_name == '钟离': + self.power_list['E总护盾量'] = { + 'name': 'E总护盾量', + 'type': '生命值', + 'plus': 1.5, + 'value': [ + f'{self.power_list["E护盾附加吸收量"]["value"][index]}+{i}' + for index, i in enumerate( + self.power_list['E护盾基础吸收量']['value'] + ) + ], + } + elif self.char_name == '赛诺': + for power_name in ['E渡荒之雷', 'E渡荒之雷(超激化)']: + self.power_list[power_name] = { + 'name': power_name, + 'type': '攻击力', + 'plus': 1, + 'value': ['100%'] * 15, + } + elif self.char_name == '纳西妲': + for power_name in [ + 'E业障除(前台)', + 'E业障除(蔓激化·前台)', + ]: + self.power_list[power_name] = { + 'name': power_name, + 'type': '攻击力', + 'plus': 1, + 'value': ['200%+400%'] * 15, + } + elif self.char_name == '甘雨': + for power_name in [ + 'A霜华矢两段伤害', + 'A霜华矢两段伤害(融化)', + ]: + self.power_list[power_name] = { + 'name': power_name, + 'type': '攻击力', + 'plus': 1, + 'value': [ + f'''{int(i[:-1]) + + int(self.power_list["A霜华矢·霜华绽发伤害"]["value"][index][:-1]) + }%''' + for index, i in enumerate( + self.power_list['A霜华矢命中伤害']['value'] + ) + ], + } + + # 获取值 + skillList = self.card_prop['avatarSkill'] + prop = deepcopy(self.card_prop['avatarFightProp']) + prop['A_skill_level'] = skillList[0]['skillLevel'] + prop['E_skill_level'] = skillList[1]['skillLevel'] + prop['Q_skill_level'] = skillList[-1]['skillLevel'] + + if self.char_name in avatarName2SkillAdd: + skill_add = avatarName2SkillAdd[self.char_name] + else: + skill_add = ['E', 'Q'] + for skillAdd_index in range(0, 2): + if len(self.card_prop['talentList']) >= 3 + skillAdd_index * 2: + if skill_add[skillAdd_index] == 'E': + prop['E_skill_level'] += 3 + elif skill_add[skillAdd_index] == 'Q': + prop['Q_skill_level'] += 3 + + prop = await self.get_effect_prop(prop, [], self.char_name) + all_effect = await get_buff_list(self.card_prop, 'fight') + part_effect = await get_buff_list(self.card_prop, 'fight', False) + + ex_effect = [] + # 开启效果 + if self.char_name in STATUS_CHAR_LIST: + for skill_effect in STATUS_CHAR_LIST[self.char_name]: + skill_level = ( + prop[f'{skill_effect["name"][0]}_skill_level'] - 1 + ) + skill_value = skill_effect['value'][skill_level] + plus = skill_effect['plus'] + if isinstance(skill_value, float): + skill_value = '{:.4f}%'.format(skill_value * 100 * plus) + skill: str = skill_effect['effect'].format(skill_value) + if skill.endswith('%'): + skill = skill[:-1] + ex_effect.append(skill) + + # 特殊效果,目前有雷神满愿力 + if self.char_name in EXTRA_CHAR_LIST: + if self.char_name == '雷电将军': + skill1 = EXTRA_CHAR_LIST[self.char_name]['Q愿力加成']['value'] + skill2 = EXTRA_CHAR_LIST[self.char_name]['Q伤害提升']['value'] + attack_type = 'Q' + skill_level = prop[f'{attack_type}_skill_level'] - 1 + + value_1 = float(skill1[skill_level].split('+')[0]) + value_1 *= 0.6 + value_2 = float(skill1[skill_level].split('+')[1]) + value_2 *= 0.6 + value_3 = skill2[skill_level] * 90 + ex_effect.append((f'Q梦想一刀基础伤害:dmgBonus+{value_3}')) + self.extra_effect = { + 'Q梦想一刀基础伤害(满愿力)': value_1, + 'Q一段伤害(满愿力)': value_2, + 'Q重击伤害(满愿力)': value_2, + 'Q高空下落伤害(满愿力)': value_2, + } + if self.card_prop['weaponInfo']['weaponName'] == '薙草之稻光': + weaponAffix = self.card_prop['weaponInfo']['weaponAffix'] + _ex = 10 + weaponAffix * 2 + ex_effect.append(f'Q:dmgBonus+{_ex}') + elif self.char_name == '优菈': + skill_effect = EXTRA_CHAR_LIST[self.char_name]['Q每层能量伤害'][ + 'value' + ] + attack_type = 'Q' + skill_level = prop[f'{attack_type}_skill_level'] - 1 + value = float(skill_effect[skill_level]) + self.extra_effect = { + 'Q光降之剑基础伤害(13层)': value * 13, + 'Q光降之剑基础伤害(24层)': value * 24, + } + elif self.char_name == '纳西妲': + self.char_talent = len(self.card_prop['talentList']) + if self.char_talent >= 1: + char_talent = 1 + else: + char_talent = 0 + skill_effect = EXTRA_CHAR_LIST[self.char_name][ + f'E灭净三业伤害提升{char_talent}' + ]['value'] + attack_type = 'E' + skill_level = prop[f'{attack_type}_skill_level'] - 1 + value = float(skill_effect[skill_level]) + ex_effect.append((f'前台:dmgBonus+{value*100}')) + + # 在计算buff前, 引入特殊效果 + if self.char_name == '雷电将军': + ex_effect.append('Q:dmgBonus+27') + elif self.char_name == '钟离': + ex_effect.append('AnemoResist+-20;PhysicalResist+-20') + ex_effect.append('CryoResist+-20;DendroResist+-20') + ex_effect.append('ElectroResist+-20;HydroResist+-20') + ex_effect.append('PyroResist+-20;GeoResist+-20') + elif self.char_name == '妮露': + ex_effect.append('addHp+25') + ex_effect.append('elementalMastery+80') + + all_effect.extend(ex_effect) + part_effect.extend(ex_effect) + + # 计算全部的buff,添加入属性 + self.fight_prop = await self.get_effect_prop( + deepcopy(prop), all_effect, self.char_name + ) + + if self.rarity != '5' and self.char_name != '香菱': + self.without_talent_fight = self.fight_prop + else: + if self.char_name == '香菱': + part_effect.append('exAtk+1202') + self.without_talent_fight = await self.get_effect_prop( + deepcopy(prop), part_effect, self.char_name + ) + return self.fight_prop + + async def get_sp_fight_prop(self, power_name: str) -> sp_prop: + ''' + 获得角色的特殊状态战斗加成 + + 返回: + self.sp: `sp_prop` + ''' + self.sp = sp_prop() + for sp_single in self.fight_prop['sp']: # type:ignore + if sp_single['effect_name'] in power_name: + if sp_single['effect_attr'] == 'dmgBonus': + self.sp.dmgBonus += sp_single['effect_value'] + elif sp_single['effect_attr'] == 'addDmg': + self.sp.addDmg += sp_single['effect_value'] + elif sp_single['effect_attr'] == 'atk': + self.sp.attack += sp_single['effect_value'] + else: + self.sp.attack += sp_single['effect_value'] + return self.sp + + async def get_attack_type(self, power_name: str) -> str: + ''' + 获得角色的当前攻击类型 + + 参数: + power_name: `str` + 返回: + self.attack_type: `Literal['A','B','C','E','Q']` + ''' + # 攻击类型ABCEQ应为label首位 + self.attack_type = power_name[0] + # 如果是雷电将军, 则就按首位,因为Q的几段伤害均视为元素爆发 + if self.char_name == '雷电将军': + pass + else: + # 重击或瞄准射击在label内,则视为B重击伤害,例如公子E内的重击伤害,不视为E伤害,而是B伤害 + if '重击' in power_name or '瞄准射击' in power_name: + self.attack_type = 'B' + # 特殊重击类型,例如甘雨和夜兰 + elif ( + '破局矢' in power_name + or '霜华矢' in power_name + or '藏蕴花矢' in power_name + or '花筥箭' in power_name + or '刀风界' in power_name + ): + self.attack_type = 'B' + # 下落伤害类型,例如魈 + elif '高空下落' in power_name: + self.attack_type = 'C' + # 一段伤害, 二段伤害等等 应视为A伤害 + elif '段' in power_name and '伤害' in power_name: + self.attack_type = 'A' + elif '不生断' in power_name: + self.attack_type = 'A' + return self.attack_type + + async def update(self, time): + self.time += time + # TODO 遍历buff列表, 超过时间的移除 + + +async def p2v(power: str, power_plus: int) -> Tuple[float, float]: + """ + 将power转换为value + """ + # 如果存在123%+123%形式的 + if '+' in power: + power_percent = ( + float(power.split('+')[0].replace('%', '')) / 100 + ) * power_plus + power_value = power.split('+')[1] + if '%' in power_value: + power_percent += ( + float(power_value.replace('%', '')) / 100 * power_plus + ) + power_value = 0 + else: + power_value = float(power_value) + elif '%' in power: + power_percent = float(power.replace('%', '')) / 100 * power_plus + power_value = 0 + else: + power_percent = 0 + power_value = float(power) + + return power_percent, power_value + + +async def get_artifacts_value(raw_data: Dict) -> List[str]: + # 计算圣遗物效果 + all_effects = [] + for equip in raw_data['equipList']: + statNmae = equip['reliquaryMainstat']['statName'] + statValue = equip['reliquaryMainstat']['statValue'] + all_effects.append(await text_to_effect(statNmae, statValue)) + for sub in equip['reliquarySubstats']: + sub_name = sub['statName'] + sub_value = sub['statValue'] + all_effects.append(await text_to_effect(sub_name, sub_value)) + return all_effects + + +async def text_to_effect(name: str, value: float) -> str: + str = '' + if name == '血量': + str = f'exHp+{value}' + elif name == '百分比血量': + str = f'addHp+{value}' + elif name == '攻击力': + str = f'exAtk+{value}' + elif name == '百分比攻击力': + str = f'addAtk+{value}' + elif name == '防御力': + str = f'exDef+{value}' + elif name == '百分比防御力': + str = f'addDef+{value}' + elif name == '暴击率': + str = f'critRate+{value}' + elif name == '暴击伤害': + str = f'critDmg+{value}' + elif name == '元素精通': + str = f'elementalMastery+{value}' + elif name == '元素充能效率': + str = f'energyRecharge+{value}' + elif name == '物理伤害加成': + str = f'physicalDmgBonus+{value}' + elif '元素伤害加成' in name: + str = f'{ELEMENT_MAP[name[0]]}DmgBonus+{value}' + elif '治疗加成' in name: + str = f'healBonus+{value}' + return str + + +async def get_char( + raw_data: dict, + weapon: Optional[str] = None, + weapon_affix: Optional[int] = None, + talent_num: Optional[int] = None, +): + char = Character(card_prop=raw_data) + err = await char.new( + weapon=weapon, + weapon_affix=weapon_affix, + talent_num=talent_num, + ) + if isinstance(err, str): + return err + + await char.init_prop() + return char diff --git a/GenshinUID/genshinuid_enka/mono/Element.py b/GenshinUID/genshinuid_enka/mono/Element.py new file mode 100644 index 00000000..74427878 --- /dev/null +++ b/GenshinUID/genshinuid_enka/mono/Element.py @@ -0,0 +1,179 @@ +from typing import Dict +from enum import IntEnum + + +class Element(IntEnum): + Physical = 0 + Anemo = 1 + Cryo = 2 + Dendro = 3 + Electro = 4 + Geo = 5 + Hydro = 6 + Pyro = 7 + + +# 消耗后面元素量,抵消前面1单位元素量 +reactable_elements_dict: Dict[Element, Dict[Element, Dict[str, str]]] = { + # 风反应,被所有元素克制 + Element.Anemo: { + Element.Cryo: { + 'value': '2', + 'reaction': '扩散', + 'dmg': '0', + }, + Element.Dendro: { + 'value': '2', + 'reaction': '扩散', + 'dmg': '0', + }, + Element.Electro: { + 'value': '2', + 'reaction': '扩散', + 'dmg': '0', + }, + Element.Hydro: { + 'value': '2', + 'reaction': '扩散', + 'dmg': '0', + }, + Element.Pyro: { + 'value': '2', + 'reaction': '扩散', + 'dmg': '0', + }, + }, + # 冰反应,被火克制,与雷水反应 + Element.Cryo: { + Element.Pyro: { + 'value': '2', + 'reaction': '融化', + 'dmg': '2', + }, + Element.Electro: { + 'value': '2', + 'reaction': '超导', + 'dmg': '0', + }, + Element.Hydro: { + 'value': '1', + 'reaction': '冻结', + 'dmg': '0', + }, + }, + # 草反应, 火,水,雷 + Element.Dendro: { + Element.Hydro: { + 'value': '1', + 'reaction': '燃烧', + 'dmg': '0', + }, + Element.Pyro: { + 'value': '2', + 'reaction': '绽放', + 'dmg': '0', + }, + Element.Electro: { + 'value': '2', + 'reaction': '激化', + 'dmg': '0', + }, + }, + # 雷反应, 水,火,冰,草 + Element.Electro: { + Element.Hydro: { + 'value': '1', + 'reaction': '感电', + 'dmg': '0', + }, + Element.Pyro: { + 'value': '1', + 'reaction': '超载', + 'dmg': '0', + }, + Element.Cryo: { + 'value': '1', + 'reaction': '超导', + 'dmg': '0', + }, + Element.Dendro: { + 'value': '1', + 'reaction': '激化', + 'dmg': '0', + }, + }, + # 岩反应,被所有元素克制 + Element.Geo: { + Element.Cryo: { + 'value': '2', + 'reaction': '结晶', + 'dmg': '0', + }, + Element.Dendro: { + 'value': '2', + 'reaction': '结晶', + 'dmg': '0', + }, + Element.Electro: { + 'value': '2', + 'reaction': '结晶', + 'dmg': '0', + }, + Element.Hydro: { + 'value': '2', + 'reaction': '结晶', + 'dmg': '0', + }, + Element.Pyro: { + 'value': '2', + 'reaction': '结晶', + 'dmg': '0', + }, + }, + # 水反应,草,火,冰,雷 + Element.Hydro: { + Element.Dendro: { + 'value': '1', + 'reaction': '绽放', + 'dmg': '0', + }, + Element.Pyro: { + 'value': '0.5', + 'reaction': '蒸发', + 'dmg': '1.5', + }, + Element.Cryo: { + 'value': '1', + 'reaction': '冻结', + 'dmg': '0', + }, + Element.Electro: { + 'value': '1', + 'reaction': '感电', + 'dmg': '0', + }, + }, + # 火反应, 雷,水,冰,草 + Element.Pyro: { + Element.Dendro: { + 'value': '1', + 'reaction': '燃烧', + 'dmg': '0', + }, + Element.Hydro: { + 'value': '2', + 'reaction': '蒸发', + 'dmg': '2', + }, + Element.Cryo: { + 'value': '0.5', + 'reaction': '融化', + 'dmg': '1.5', + }, + Element.Electro: { + 'value': '1', + 'reaction': '超载', + 'dmg': '0', + }, + }, +} diff --git a/GenshinUID/genshinuid_enka/mono/Enemy.py b/GenshinUID/genshinuid_enka/mono/Enemy.py new file mode 100644 index 00000000..813630e8 --- /dev/null +++ b/GenshinUID/genshinuid_enka/mono/Enemy.py @@ -0,0 +1,160 @@ +from typing import Dict, List, Optional + +from .Character import Character +from .Element import Element, reactable_elements_dict + + +class Enemy: + def __init__(self, char_level: int, enemy_level: int): + self.char_level = char_level + self.level: int = enemy_level + self.hp: int = 10000000 + + self.time: float = 0 + + self.defense_resist: float = 0 + self.ignore_defense: float = 0 + self.element: Dict[Element, float] = {} + + self.PhysicalResist: float = 0.1 + self.AnemoResist: float = 0.1 + self.CryoResist: float = 0.1 + self.DendroResist: float = 0.1 + self.ElectroResist: float = 0.1 + self.GeoResist: float = 0.1 + self.HydroResist: float = 0.1 + self.PyroResist: float = 0.1 + + self.total_dmg: float = 0 + self.debuff: List = [] + + async def update(self, time): + self.time += time + # TODO 遍历debuff列表, 超过时间的移除 + + async def update_resist(self, effect: str): + name, val = effect.split('+') + val = float(val) / 100 + if name != 'Resist': + r = getattr(self, name) + setattr(self, name, r + val) + else: + for element in self.element: + r = getattr(self, f'{element.name}Resist') + setattr(self, name, r + val) + + async def get_dmg_reaction( + self, + dmg_type: Optional[Element] = None, + char: Optional[Character] = None, + ) -> float: + if char: + for react in ['蒸发', '融化']: + if react in char.power_name: + em = char.real_prop[f'{char.attack_type}_elementalMastery'] + k = 0 + if react == '蒸发': + if char.char_element == 'Pyro': + k = 1.5 + else: + k = 2 + elif react == '融化': + if char.char_element == 'Pyro': + k = 2 + else: + k = 1.5 + reaction_add_dmg = k * ( + 1 + (2.78 * em) / (em + 1400) + char.real_prop['a'] + ) + break + else: + reaction_add_dmg = 1 + return reaction_add_dmg + else: + if dmg_type: + reaction: float = 1 + # 如果是物理伤害,则不反应 + if dmg_type == Element.Physical: + return 1 + + # 如果怪物头上没元素,给定此次伤害类型元素量1 + if self.element == {}: + self.element[dmg_type] = 1 + # 如果怪物头上元素相同,则刷新元素量 + elif dmg_type in self.element: + self.element[dmg_type] = 1 + else: + # 遍历怪物头上的元素 + new_element_list = self.element + for element in self.element: + # 如果本次伤害类型,在这个元素的可反应列表里 + if dmg_type in reactable_elements_dict[element]: + # 元素列表里的这个元素 就要减去反应量 + new_element_list[element] -= float( + reactable_elements_dict[element][dmg_type][ + 'value' + ] + ) + # 如果是增幅反应,给出相对应的倍率 + reaction_name = reactable_elements_dict[element][ + dmg_type + ]['reaction'] + if reaction_name in [ + '蒸发', + '融化', + ]: + reaction *= float( + reactable_elements_dict[element][dmg_type][ + 'dmg' + ] + ) + else: + self.debuff.append(reaction_name) + + # 结算怪物的元素 + result_element: Dict[Element, float] = {} + for element in new_element_list: + if new_element_list[element] > 0: + result_element[element] = new_element_list[element] + self.element = result_element + + return reaction + return 1 + + async def get_resist(self, dmg_type: Element): + # 计算抗性 + r = getattr(self, f'{dmg_type.name}Resist') + if r > 0.75: + r = 1 / (1 + 4 * r) + elif r > 0: + r = 1 - r + else: + r = 1 - r / 2 + + return r + + async def get_dmg_proof( + self, + dmg_type: Element, + extra_d: float = 0, + extra_ignoreD: float = 0, + ) -> float: + proof: float = 0 + + # 计算抗性 + r = await self.get_resist(dmg_type) + + # 计算防御 + d_up = self.char_level + 100 + d_down = ( + self.char_level + + 100 + + (1 - self.defense_resist - extra_d) + * (1 - self.ignore_defense - extra_ignoreD) + * (self.level + 100) + ) + d = d_up / d_down + proof = r * d + + # 返回减伤百分比 + return proof diff --git a/GenshinUID/genshinuid_enka/mono/Fight.py b/GenshinUID/genshinuid_enka/mono/Fight.py new file mode 100644 index 00000000..e6830c54 --- /dev/null +++ b/GenshinUID/genshinuid_enka/mono/Fight.py @@ -0,0 +1,514 @@ +from copy import deepcopy +from typing import Dict, List, Tuple, Optional + +from nonebot.log import logger + +from .Enemy import Enemy +from .Power import Power +from .Element import Element +from .Character import Character +from ..dmg_calc.base_value import base_value_list + + +class Fight: + def __init__( + self, + Character_list: Dict[str, Character], + Enemy: Enemy, + SEQ: List = [], + ): + self.time = 0 + self.total_crit_dmg: float = 0 + self.total_normal_dmg: float = 0 + self.total_avg_dmg: float = 0 + + self.SEQ: List = SEQ + self.seq_history: Dict = {} + self.char_list: Dict[str, Character] = Character_list + self.enemy = Enemy + + self.dmg_data: Dict[str, Dict[str, float]] = {} + + # 进行队伍伤害计算 + async def update_dmg(self) -> Dict: + result = {} + for seq in self.SEQ: + # 获取本次攻击的信息 + char_name = seq['char'] + char = self.char_list[char_name] + char.power_name = seq['action'] + self.time += 0.4 + + # 更新角色和怪物 + for _char in self.char_list: + await self.char_list[_char].update(self.time) + await self.enemy.update(self.time) + + # 获取本次攻击的类型 + await char.get_sp_fight_prop(char.power_name) + await char.get_attack_type(char.power_name) + # 获取本次攻击的元素 + dmg_type = await self.get_dmg_type(char, seq) + # 更新角色的属性 + await self.get_new_fight_prop(char) + + # 更新self.seq_history + self.seq_history = seq + + # 聚变反应 + for i in ['扩散', '绽放)', '感电', '超载']: + if i in char.power_name: + dmg = await self.get_transform_dmg(char) + break + else: + # 进行攻击 + dmg = await self.get_dmg(char, dmg_type) + normal_dmg, avg_dmg, crit_dmg = dmg[0], dmg[1], dmg[2] + + result[self.time] = { + 'char': char_name, + 'action': seq['action'], + 'normal_dmg': normal_dmg, + 'avg_dmg': avg_dmg, + 'crit_dmg': crit_dmg, + 'enemy_element': self.enemy.element, + } + logger.debug(result) + return result + + # 进行单人伤害计算 + async def get_dmg_dict( + self, char_name: str, without_talent: bool = False + ) -> Dict: + result = {} + char = self.char_list[char_name] + # 获取本次攻击的类型 + if without_talent: + if char.rarity == '4' and char_name != '香菱': + return self.dmg_data + char.fight_prop = char.without_talent_fight + + for power_name in char.power_list: + # 更新powername + char.power_name = power_name + await char.get_sp_fight_prop(char.power_name) + await char.get_attack_type(char.power_name) + # 更新角色的属性 + await self.get_new_fight_prop(char) + # 聚变反应 + for i in ['扩散', '绽放)', '感电', '超载']: + if i in power_name: + dmg = await self.get_transform_dmg(char) + break + else: + dmg = [] + + # 正常伤害 + if not dmg: + if '治疗' in power_name or '回复' in power_name: + dmg = await self.get_heal(char) + elif '护盾' in power_name: + dmg = await self.get_shield(char) + else: + # 获取本次攻击的元素 + dmg_type = await self.get_dmg_type(char) + dmg = await self.get_dmg(char, dmg_type, True) + + # 得到结果 + result[power_name] = { + 'normal': dmg[0], + 'avg': dmg[1], + 'crit': dmg[2], + } + self.dmg_data = result + logger.debug(result) + return result + + # 伤害类型 + async def get_dmg_type( + self, char: Character, seq: Optional[Dict] = None + ) -> Element: + # TODO 获取本次攻击的元素 + dmg_type: Element = Element.Physical + char_element_dmg_type = getattr(Element, char.char_element) + + # 对重复的计数 + if seq: + if seq['action'] == self.seq_history: + return dmg_type + + # 计算角色伤害加成应该使用什么 + if char.weapon_type == '法器' or char.char_name in [ + '荒泷一斗', + '刻晴', + '诺艾尔', + '胡桃', + '宵宫', + '魈', + '神里绫华', + ]: + dmg_type = char_element_dmg_type + elif char.weapon_type == '弓': + if char.attack_type in ['B', 'E', 'Q']: + dmg_type = char_element_dmg_type + else: + if char.attack_type in ['E', 'Q']: + dmg_type = char_element_dmg_type + + if char.power_name in [ + 'Q光降之剑基础伤害', + 'Q光降之剑基础伤害(13层)', + 'Q每层能量伤害', + 'Q光降之剑基础伤害(24层)', + ]: + dmg_type = Element.Physical + + if '段' in char.power_name and 'A' not in char.power_name: + dmg_type = char_element_dmg_type + + if char.char_name == '辛焱' and char.power_name == 'Q伤害': + dmg_type = Element.Physical + + return dmg_type + + # 计算倍率 + async def get_power(self, char: Character) -> Power: + # 按照ABCEQ等级查找倍率 + power_name = char.power_name + real_prop = char.real_prop + power_list = char.power_list + power_level = int(real_prop[f'{power_name[0]}_skill_level']) + + # 拿到倍率 + power = power_list[power_name]['value'][power_level - 1] + # 计算是否多次伤害 + power_plus = power_list[power_name]['plus'] + + if char.char_name == '宵宫' and power_name == 'A一段伤害': + power_plus = 1 + + # 拿到百分比和固定值,百分比为float,形如2.2 也就是202% + power_percent, power_value = await p2v(power, power_plus) + + # 额外加成,目前有雷神和优菈 + if char.extra_effect and power_name in char.extra_effect: + power_percent += char.extra_effect[power_name] + + return Power( + name=power_name, + level=power_level, + percent=power_percent, + value=power_value, + plus=power_plus, + raw=power, + ) + + # 额外加成和抗性计算 + async def get_new_fight_prop(self, char: Character) -> Dict: + # 抗性传达 + if char.enemy_debuff: + for effect in char.enemy_debuff: + await self.enemy.update_resist(effect) + char.enemy_debuff = [] + + # 特殊buff计算 + effect_list = [] + if '前台' in char.power_list[char.power_name]['name']: + if char.char_name == '纳西妲': + em = char.fight_prop[f'{char.attack_type}_elementalMastery'] + effect = f'''elementalMastery+ + {0.25 * em if 0.25 * em <= 250 else 250} + '''.strip() + effect_list.append(effect) + + if '丰穰之核' in char.power_name and char.fight_prop['hp'] >= 30000: + ex_add = ((char.fight_prop['hp'] - 30000) / 1000) * 9 + if ex_add >= 400: + ex_add = 400 + effect = f'a+{ex_add}' + effect_list.append(effect) + + if effect_list: + char.real_prop = await char.get_effect_prop( + deepcopy(char.fight_prop), effect_list, char.char_name + ) + return char.real_prop + else: + char.real_prop = char.fight_prop + + return char.real_prop + + # 治疗值加成 + async def get_add_heal(self, char: Character) -> float: + add_heal: float = char.real_prop[f'{char.attack_type}_addHeal'] + return add_heal + + # 增幅反应 + async def get_amplify_dmg(self, char: Character) -> float: + # 计算元素反应 增幅 + em_cal = char.real_prop[f'{char.attack_type}_elementalMastery'] + for reaction in ['蒸发', '融化']: + if reaction in char.power_list[char.power_name]['name']: + if reaction == '蒸发': + if char.char_element == 'Pyro': + k = 1.5 + else: + k = 2 + else: + if char.char_element == 'Pyro': + k = 2 + else: + k = 1.5 + reaction_add_dmg = k * ( + 1 + (2.78 * em_cal) / (em_cal + 1400) + char.real_prop['a'] + ) + break + else: + reaction_add_dmg = 1 + return reaction_add_dmg + + # 激化反应 + async def get_quicken_dmg(self, char: Character) -> float: + quicken_dmg = 0 + char_level = char.char_level + power_name = char.power_list[char.power_name]['name'] + em_cal = char.real_prop[f'{char.attack_type}_elementalMastery'] + for reaction in ['超激化', '蔓激化']: + if reaction in power_name: + if reaction == '超激化': + k = 2.3 + else: + k = 2.5 + power_times = 1 + if '*' in power_name: + power_times = float( + (power_name.split('*')[-1].replace(')', '')) + ) + quicken_dmg = ( + k + * base_value_list[char_level - 1] + * (1 + (5 * em_cal) / (em_cal + 1200)) + ) * power_times + break + return quicken_dmg + + # 有效数值 + async def get_effect_prop(self, char: Character): + # 根据type计算有效属性 + _type = char.power_list[char.power_name]['type'] + if '攻击' in _type: + effect_prop = char.real_prop[f'{char.attack_type}_atk'] + elif '生命值' in _type: + effect_prop = char.real_prop[f'{char.attack_type}_hp'] + elif '防御' in _type: + effect_prop = char.real_prop[f'{char.attack_type}_def'] + else: + effect_prop = char.real_prop[f'{char.attack_type}_atk'] + + return effect_prop + + # 伤害值加成 + async def get_add_dmg(self, char: Character) -> float: + # 计算直接增加的伤害 + add_dmg: float = char.real_prop[f'{char.attack_type}_addDmg'] + return add_dmg + + # 防御值加成 + async def get_extra_d(self, char: Character) -> float: + # 计算直接增加的伤害 + extra_d: float = char.real_prop[f'{char.attack_type}_d'] + return extra_d + + # 防御值加成 + async def get_base_area_plus(self, char: Character) -> float: + # 计算直接增加的伤害 + base_area_plus: float = char.real_prop[f'{char.attack_type}_baseArea'] + return base_area_plus + + # 防御值加成 + async def get_extra_ignoreD(self, char: Character) -> float: + # 计算直接增加的伤害 + extra_ignoreD: float = char.real_prop[f'{char.attack_type}_ignoreDef'] + return extra_ignoreD + + async def get_sp_base(self, power: Power, char: Character) -> float: + power_sp = power.raw.replace('%', '').split('+') + power_sp = [float(x) / 100 for x in power_sp] + real_prop = char.real_prop + atk = real_prop['E_atk'] + char.sp.attack + em = real_prop[f'{char.attack_type}_elementalMastery'] + base = (power_sp[0] * atk + power_sp[1] * em) * power.plus + return base + + # 基础乘区 + async def get_base_area(self, char: Character) -> float: + # 获得该次伤害的倍率信息 + power = await self.get_power(char) + # 获得激化乘区的信息 + reaction_power = await self.get_quicken_dmg(char) + # 获得该次伤害的有效属性 + effect_prop = await self.get_effect_prop(char) + # 获得伤害提高值的信息 + add_dmg = await self.get_add_dmg(char) + + base_area_plus = await self.get_base_area_plus(char) + + # 对草神进行特殊计算 + if '灭净三业' in power.name or '业障除' in power.name: + base = await self.get_sp_base(power, char) + elif char.char_name == '艾尔海森' and power.name.startswith('E'): + base = await self.get_sp_base(power, char) + else: + base = effect_prop * power.percent + power.value + + if char.char_name == '珊瑚宫心海': + hp = char.real_prop['hp'] + hb = char.real_prop['healBonus'] + add_dmg += 0.15 * hp * hb + + # 基本乘区 = 有效数值(例如攻击力) * 倍率 + 固定值 + 激化区 + 额外加成值 + 特殊加成值 + base_area = base + reaction_power + add_dmg + char.sp.addDmg + if base_area_plus != 1: + base_area_plus -= 1 + base_area = base_area_plus * base_area + return base_area + + # 聚变反应 + async def get_transform_dmg( + self, char: Character + ) -> Tuple[float, float, float]: + em = char.real_prop[f'{char.attack_type}_elementalMastery'] + is_crit = False + if '绽放)' in char.power_name: + # 获取激变反应基数 + if '烈绽放' in char.power_name: + dmg_type = Element.Pyro + base_time = 6 + elif '超绽放' in char.power_name: + dmg_type = Element.Dendro + base_time = 6 + else: + dmg_type = Element.Dendro + base_time = 4 + base_area = ( + base_value_list[char.char_level - 1] + * base_time + * (1 + (16.0 * em) / (em + 2000) + char.real_prop['a']) + ) + is_crit = True + elif '扩散伤害' in char.power_name: + dmg_type = Element.Anemo + base_area = ( + base_value_list[char.char_level - 1] + * 1.2 + * (1 + (16.0 * em) / (em + 2000) + char.real_prop['a']) + * (1 + char.real_prop['g'] / 100) + ) + else: + dmg_type = Element.Physical + base_area = 0 + + # 获得这次攻击的减伤乘区(抗性区+防御区) + logger.debug(self.enemy.__dict__) + proof = await self.enemy.get_resist(dmg_type) + + normal_dmg = base_area * proof + if is_crit: + crit_dmg = normal_dmg * 2 + avg_dmg = normal_dmg * 1.2 + else: + crit_dmg = avg_dmg = 0 + return normal_dmg, avg_dmg, crit_dmg + + async def get_heal(self, char: Character) -> Tuple[float, float, float]: + # 获得治疗增加值 + add_heal = await self.get_add_heal(char) + # 获得治疗倍率 + power = await self.get_power(char) + # 获得该次治疗的有效属性 + effect_prop = await self.get_effect_prop(char) + heal_bonus = 1 + char.real_prop['healBonus'] + base_area = effect_prop * power.percent + power.value + add_heal + normal_value = base_area * heal_bonus + return normal_value, normal_value, 0 + + async def get_shield(self, char: Character) -> Tuple[float, float, float]: + # 获得护盾倍率 + power = await self.get_power(char) + # 获得该次护盾的有效属性 + effect_prop = await self.get_effect_prop(char) + shield_bonus = 1 + char.real_prop['shieldBonus'] + base_area = effect_prop * power.percent + power.value + normal_value = base_area * shield_bonus + return normal_value, 0, 0 + + async def get_dmg( + self, + char: Character, + dmg_type: Element, + is_single: bool = False, + ) -> Tuple[float, float, float]: + # 获得基础乘区(攻击区+倍率区+激化区) + base_area = await self.get_base_area(char) + # 获得这次攻击的减伤乘区(抗性区+防御区) + d = await self.get_extra_d(char) + i_d = await self.get_extra_ignoreD(char) + # logger.debug(self.enemy.__dict__) + proof = await self.enemy.get_dmg_proof(dmg_type, d, i_d) + # 获得这次攻击的增幅乘区 + _char = char if is_single else None + reactio = await self.enemy.get_dmg_reaction(dmg_type, _char) + + if dmg_type == Element.Physical: + _dmgBonus = char.real_prop[f'{char.attack_type}_physicalDmgBonus'] + else: + _dmgBonus = char.real_prop[f'{char.attack_type}_dmgBonus'] + critrate = char.real_prop[f'{char.attack_type}_critRate'] + critdmg = char.real_prop[f'{char.attack_type}_critDmg'] + dmgBonus = _dmgBonus + char.sp.dmgBonus + + # 基础乘区 = 攻击*倍率+激化 + # 普通伤害 = 基础 * 增伤区 * 增幅区 * 抗性区 + normal_dmg = base_area * (1 + dmgBonus) * reactio * proof + # 暴击伤害 = 普通伤害 * 暴击区 + crit_dmg = normal_dmg * (1 + critdmg) + # 平均伤害 + avg_dmg = ( + normal_dmg + if critrate < 0 + else crit_dmg + if critrate > 1 + else crit_dmg * critrate + (1 - critrate) * normal_dmg + ) + + self.total_normal_dmg += normal_dmg + self.total_avg_dmg += avg_dmg + self.total_crit_dmg += crit_dmg + + return normal_dmg, avg_dmg, crit_dmg + + +async def p2v(power: str, power_plus: float) -> Tuple[float, float]: + """ + 将power转换为value + """ + if '+' in power: + power_percent = ( + float(power.split('+')[0].replace('%', '')) / 100 + ) * power_plus + power_value = power.split('+')[1] + if '%' in power_value: + power_percent += ( + float(power_value.replace('%', '')) / 100 * power_plus + ) + power_value = 0 + else: + power_value = float(power_value) + elif '%' in power: + power_percent = float(power.replace('%', '')) / 100 * power_plus + power_value = 0 + else: + power_percent = 0 + power_value = float(power) + + return power_percent, power_value diff --git a/GenshinUID/genshinuid_enka/mono/Power.py b/GenshinUID/genshinuid_enka/mono/Power.py new file mode 100644 index 00000000..08d26574 --- /dev/null +++ b/GenshinUID/genshinuid_enka/mono/Power.py @@ -0,0 +1,16 @@ +from pydantic import BaseModel + + +class Power(BaseModel): + name: str + level: int + raw: str + percent: float + value: float + plus: float + + +class sp_prop(BaseModel): + dmgBonus: float = 0 + addDmg: float = 0 + attack: float = 0 diff --git a/GenshinUID/genshinuid_enka/mono/SEQ.py b/GenshinUID/genshinuid_enka/mono/SEQ.py new file mode 100644 index 00000000..d54aa67f --- /dev/null +++ b/GenshinUID/genshinuid_enka/mono/SEQ.py @@ -0,0 +1,28 @@ +WAN_DA = [ + {'char': '达达利亚', 'action': 'E状态激发伤害', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'E一段伤害', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'E重击伤害', 'type': '伤害'}, + {'char': '班尼特', 'action': 'Q伤害', 'type': '伤害'}, + {'char': '枫原万叶', 'action': 'Q斩击伤害', 'type': '伤害'}, + {'char': '枫原万叶', 'action': 'A扩散伤害', 'type': '持续'}, + {'char': '枫原万叶', 'action': 'E长按伤害', 'type': '伤害'}, + {'char': '枫原万叶', 'action': 'Q持续伤害', 'type': '持续'}, + {'char': '枫原万叶', 'action': 'A高空下落伤害', 'type': '伤害'}, + {'char': '香菱', 'action': 'Q旋火轮伤害', 'type': '持续'}, + {'char': '香菱', 'action': 'E喷火伤害', 'type': '持续'}, + {'char': '达达利亚', 'action': 'E状态激发伤害', 'type': '伤害'}, + {'char': '枫原万叶', 'action': 'Q持续伤害', 'type': '持续'}, + {'char': '达达利亚', 'action': 'E一段伤害', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'Q伤害·近战', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'E一段伤害', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'E重击伤害', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'E一段伤害', 'type': '伤害'}, + {'char': '枫原万叶', 'action': 'Q持续伤害', 'type': '持续'}, + {'char': '达达利亚', 'action': 'E重击伤害', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'E一段伤害', 'type': '伤害'}, + {'char': '达达利亚', 'action': 'E重击伤害', 'type': '伤害'}, +] + +ALL_SEQ = {'万达国际': WAN_DA} + +SEQ_ARG = {'万达国际': ['香菱', '达达利亚', '班尼特', '枫原万叶']} diff --git a/GenshinUID/genshinuid_enka/texture2D/204.png b/GenshinUID/genshinuid_enka/texture2D/204.png new file mode 100644 index 00000000..6ea825ad Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/204.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/500.png b/GenshinUID/genshinuid_enka/texture2D/500.png new file mode 100644 index 00000000..9dddc25e Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/500.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/adv.png b/GenshinUID/genshinuid_enka/texture2D/adv.png new file mode 100644 index 00000000..f3a32390 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/adv.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_card_4.png b/GenshinUID/genshinuid_enka/texture2D/char_card_4.png new file mode 100644 index 00000000..fa3a5e89 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_card_4.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_card_5.png b/GenshinUID/genshinuid_enka/texture2D/char_card_5.png new file mode 100644 index 00000000..f72bb2d6 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_card_5.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_info_1.png b/GenshinUID/genshinuid_enka/texture2D/char_info_1.png new file mode 100644 index 00000000..246e75bc Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_info_1.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_info_2.png b/GenshinUID/genshinuid_enka/texture2D/char_info_2.png new file mode 100644 index 00000000..a7c33c39 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_info_2.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_info_artifacts.png b/GenshinUID/genshinuid_enka/texture2D/char_info_artifacts.png new file mode 100644 index 00000000..d231f38c Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_info_artifacts.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_info_mask.png b/GenshinUID/genshinuid_enka/texture2D/char_info_mask.png new file mode 100644 index 00000000..0a1e40c7 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_info_mask.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_mask.png b/GenshinUID/genshinuid_enka/texture2D/char_mask.png new file mode 100644 index 00000000..280f2a16 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_mask.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_rank.png b/GenshinUID/genshinuid_enka/texture2D/char_rank.png new file mode 100644 index 00000000..eee578fd Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_rank.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/char_rank_title.png b/GenshinUID/genshinuid_enka/texture2D/char_rank_title.png new file mode 100644 index 00000000..768561fb Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/char_rank_title.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/dmgBar_1.png b/GenshinUID/genshinuid_enka/texture2D/dmgBar_1.png new file mode 100644 index 00000000..89c929f8 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/dmgBar_1.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/dmgBar_2.png b/GenshinUID/genshinuid_enka/texture2D/dmgBar_2.png new file mode 100644 index 00000000..09fc435c Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/dmgBar_2.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/equip_mask.png b/GenshinUID/genshinuid_enka/texture2D/equip_mask.png new file mode 100644 index 00000000..467392cb Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/equip_mask.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/footbar.png b/GenshinUID/genshinuid_enka/texture2D/footbar.png new file mode 100644 index 00000000..c97e10a4 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/footbar.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/holo.png b/GenshinUID/genshinuid_enka/texture2D/holo.png new file mode 100644 index 00000000..09f834cc Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/holo.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/icon_lock.png b/GenshinUID/genshinuid_enka/texture2D/icon_lock.png new file mode 100644 index 00000000..cf1c4277 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/icon_lock.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/overlay.png b/GenshinUID/genshinuid_enka/texture2D/overlay.png new file mode 100644 index 00000000..e11af300 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/overlay.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/percent_mask.png b/GenshinUID/genshinuid_enka/texture2D/percent_mask.png new file mode 100644 index 00000000..8e51477b Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/percent_mask.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/s-1.png b/GenshinUID/genshinuid_enka/texture2D/s-1.png new file mode 100644 index 00000000..bff5edac Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/s-1.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/s-2.png b/GenshinUID/genshinuid_enka/texture2D/s-2.png new file mode 100644 index 00000000..ea4b049d Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/s-2.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/s-3.png b/GenshinUID/genshinuid_enka/texture2D/s-3.png new file mode 100644 index 00000000..d390794a Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/s-3.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/s-4.png b/GenshinUID/genshinuid_enka/texture2D/s-4.png new file mode 100644 index 00000000..08f0d6b8 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/s-4.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/s-5.png b/GenshinUID/genshinuid_enka/texture2D/s-5.png new file mode 100644 index 00000000..b4ee48a1 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/s-5.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/shin-w.jpg b/GenshinUID/genshinuid_enka/texture2D/shin-w.jpg new file mode 100644 index 00000000..b0971705 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/shin-w.jpg differ diff --git a/GenshinUID/genshinuid_enka/texture2D/skillHolo.png b/GenshinUID/genshinuid_enka/texture2D/skillHolo.png new file mode 100644 index 00000000..e371f635 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/skillHolo.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/skill_mask.png b/GenshinUID/genshinuid_enka/texture2D/skill_mask.png new file mode 100644 index 00000000..f979e678 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/skill_mask.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/star.png b/GenshinUID/genshinuid_enka/texture2D/star.png new file mode 100644 index 00000000..c52dfdac Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/star.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/tag.png b/GenshinUID/genshinuid_enka/texture2D/tag.png new file mode 100644 index 00000000..bcf7e255 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/tag.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/team_dmg/action_title.png b/GenshinUID/genshinuid_enka/texture2D/team_dmg/action_title.png new file mode 100644 index 00000000..40bd479f Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/team_dmg/action_title.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/team_dmg/char_bg.png b/GenshinUID/genshinuid_enka/texture2D/team_dmg/char_bg.png new file mode 100644 index 00000000..b3398470 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/team_dmg/char_bg.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/team_dmg/dmg_bar.png b/GenshinUID/genshinuid_enka/texture2D/team_dmg/dmg_bar.png new file mode 100644 index 00000000..4068da3f Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/team_dmg/dmg_bar.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/team_dmg/team_title.png b/GenshinUID/genshinuid_enka/texture2D/team_dmg/team_title.png new file mode 100644 index 00000000..f6737d36 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/team_dmg/team_title.png differ diff --git a/GenshinUID/genshinuid_enka/texture2D/value_mask.png b/GenshinUID/genshinuid_enka/texture2D/value_mask.png new file mode 100644 index 00000000..3a7e1460 Binary files /dev/null and b/GenshinUID/genshinuid_enka/texture2D/value_mask.png differ diff --git a/GenshinUID/genshinuid_enka/to_card.py b/GenshinUID/genshinuid_enka/to_card.py new file mode 100644 index 00000000..d1611790 --- /dev/null +++ b/GenshinUID/genshinuid_enka/to_card.py @@ -0,0 +1,144 @@ +import asyncio +from pathlib import Path +from typing import List, Union, Optional + +from PIL import Image, ImageDraw + +from .to_data import enka_to_dict +from ..utils.image.convert import convert_img +from ..gsuid_utils.api.enka.models import EnkaData +from ..utils.resource.RESOURCE_PATH import CHAR_PATH +from ..utils.fonts.genshin_fonts import genshin_font_origin +from ..utils.map.name_covert import name_to_avatar_id, avatar_id_to_char_star + +half_color = (255, 255, 255, 120) +first_color = (29, 29, 29) +second_color = (67, 61, 56) +white_color = (247, 247, 247) +gs_font_18 = genshin_font_origin(18) +gs_font_28 = genshin_font_origin(28) +gs_font_58 = genshin_font_origin(58) + +MAP_PATH = Path(__file__).parent / 'map' +TEXT_PATH = Path(__file__).parent / 'texture2d' +char_mask = Image.open(TEXT_PATH / 'char_mask.png') +tag = Image.open(TEXT_PATH / 'tag.png') +footbar = Image.open(TEXT_PATH / 'footbar.png') +pic_500 = Image.open(TEXT_PATH / '500.png') +pic_204 = Image.open(TEXT_PATH / '204.png') + + +async def enka_to_card( + uid: str, enka_data: Optional[EnkaData] = None +) -> Union[str, bytes]: + char_data_list = await enka_to_dict(uid, enka_data) + if isinstance(char_data_list, str): + if '服务器正在维护或者关闭中' in char_data_list: + return await convert_img(pic_500) + elif '未打开角色展柜' in char_data_list: + return await convert_img(pic_204) + else: + return await convert_img(pic_500) + else: + if char_data_list == []: + return await convert_img(pic_500) + + img = await draw_enka_card(uid=uid, char_data_list=char_data_list) + return img + + +async def draw_enka_card( + uid: str, + char_data_list: Optional[List] = None, + char_list: Optional[List] = None, +): + if char_list: + char_data_list = [] + for char in char_list: + char_data_list.append( + {'avatarName': char, 'avatarId': await name_to_avatar_id(char)} + ) + line1 = f'展柜内有 {len(char_data_list)} 个角色!' + else: + if char_data_list is None: + return await convert_img( + Image.new('RGBA', (0, 1), (255, 255, 255)) + ) + else: + line1 = '刷新成功!' + + line2 = f'UID {uid}请使用 查询{char_data_list[0]["avatarName"]} 命令进行查询!' + char_num = len(char_data_list) + if char_num <= 8: + based_w, based_h = 1000, 240 + ((char_num + 3) // 4) * 220 + else: + based_w, based_h = 1200, 660 + (char_num - 5) // 5 * 110 + if (char_num - 5) % 5 >= 4: + based_h += 110 + + img = Image.open(TEXT_PATH / 'shin-w.jpg').resize((based_w, based_h)) + img.paste(tag, (0, 0), tag) + img.paste(footbar, ((based_w - 800) // 2, based_h - 36), footbar) + img_draw = ImageDraw.Draw(img, 'RGBA') + + img_draw.text( + (97, 98), + line1, + white_color, + gs_font_58, + 'lm', + ) + img_draw.text( + (99, 140), + line2, + white_color, + gs_font_18, + 'lm', + ) + tasks = [] + for index, char_data in enumerate(char_data_list): + tasks.append(draw_enka_char(index, img, char_data)) + await asyncio.gather(*tasks) + img = await convert_img(img) + return img + + +async def draw_enka_char(index: int, img: Image.Image, char_data: dict): + char_id = char_data['avatarId'] + char_star = await avatar_id_to_char_star(str(char_id)) + char_card = Image.open(TEXT_PATH / f'char_card_{char_star}.png') + char_img = ( + Image.open(str(CHAR_PATH / f'{char_id}.png')) + .convert('RGBA') + .resize((204, 204)) + ) + char_temp = Image.new('RGBA', (220, 220)) + char_temp.paste(char_img, (8, 8), char_img) + char_card.paste(char_temp, (0, 0), char_mask) + if index <= 7: + if img.size[0] <= 1100: + x = 60 + (index % 4) * 220 + else: + x = 160 + (index % 4) * 220 + img.paste( + char_card, + (x, 187 + (index // 4) * 220), + char_card, + ) + elif index <= 12: + img.paste( + char_card, + (50 + (index % 8) * 220, 296), + char_card, + ) + else: + _i = index - 13 + x, y = 50 + (_i % 9) * 220, 512 + (_i // 9) * 220 + if _i % 9 >= 5: + y += 110 + x = 160 + ((_i - 5) % 9) * 220 + img.paste( + char_card, + (x, y), + char_card, + ) diff --git a/GenshinUID/genshinuid_enka/to_data.py b/GenshinUID/genshinuid_enka/to_data.py new file mode 100644 index 00000000..8a2532b9 --- /dev/null +++ b/GenshinUID/genshinuid_enka/to_data.py @@ -0,0 +1,352 @@ +import json +import time +from typing import List, Union, Literal, Optional + +from ..utils.error_reply import UID_HINT +from ..gsuid_utils.api.enka.models import EnkaData +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH +from ..gsuid_utils.api.minigg.models import MiniGGError +from ..gsuid_utils.api.enka.request import get_enka_info +from ..gsuid_utils.api.minigg.request import get_weapon_info +from ..utils.map.GS_MAP_PATH import ( + icon2Name, + propId2Name, + skillId2Name, + artifact2attr, + avatarId2Name, + talentId2Name, + weaponHash2Name, + weaponHash2Type, + artifactId2Piece, + avatarName2Element, +) + +PROP_ATTR_MAP = { + 'Anemo': '44', + 'Cryo': '46', + 'Dendro': '43', + 'Electro': '41', + 'Geo': '45', + 'Hydro': '42', + 'Pyro': '40', +} + +ENKA_API: List[Literal['enka', 'microgg']] = ['enka', 'microgg'] + + +async def switch_api(): + global ENKA_API + if ENKA_API[0] == 'enka': + ENKA_API = ['microgg', 'enka'] + else: + ENKA_API = ['enka', 'microgg'] + return f'切换成功!当前api为{ENKA_API[0]}!' + + +async def enka_to_dict( + uid: str, enka_data: Optional[EnkaData] = None +) -> Union[List[dict], str]: + """ + :说明: + 访问enkaAPI并转换为genshinUID的数据Json。 + :参数: + * ``uid: str``: 玩家uid。 + * ``enka_data: Optional[dict] = None``: 来自enka的dict, 可留空。 + :返回: + * ``刷新完成提示语: str``: 包含刷新成功的角色列表。 + """ + if '未找到绑定的UID' in uid: + return UID_HINT + if enka_data: + pass + else: + enka_data = await get_enka_info(uid, ENKA_API[0]) + if isinstance(enka_data, str): + return [] + if isinstance(enka_data, dict): + if 'playerInfo' not in enka_data: + im = ( + '服务器正在维护或者关闭中...\n' + f'检查{ENKA_API[0]}是否可以访问\n' + '如可以访问,尝试[切换api]或上报Bug!' + ) + return im + elif enka_data is None: + return [] + + now = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + playerInfo = enka_data['playerInfo'] + path = PLAYER_PATH / str(uid) + path.mkdir(parents=True, exist_ok=True) + with open( + path / '{}.json'.format(str(uid)), 'w', encoding='UTF-8' + ) as file: + json.dump(playerInfo, file, ensure_ascii=False) + with open(path / 'rawData.json', 'w', encoding='UTF-8') as file: + json.dump(enka_data, file, ensure_ascii=False) + + if 'avatarInfoList' not in enka_data: + return f'UID{uid}刷新失败!未打开角色展柜!' + + char_dict_list = [] + for char in enka_data['avatarInfoList']: + # 处理基本信息 + char_data = {} + avatarId = char['avatarId'] + char_data['playerUid'] = str(uid) + char_data['playerName'] = enka_data['playerInfo']['nickname'] + char_data['avatarId'] = avatarId + avatarName = avatarId2Name[str(char['avatarId'])] + char_data['avatarName'] = avatarId2Name[str(char['avatarId'])] + char_data['avatarFetter'] = char['fetterInfo']['expLevel'] + char_data['avatarLevel'] = char['propMap']['4001']['val'] + + try: + char_data['avatarElement'] = avatarName2Element[ + char_data['avatarName'] + ] + except KeyError: + check = skillId2Name['Name'][ + str(list(char['skillLevelMap'].keys())[2]) + ] + if '风' in check: + char_data['avatarElement'] = 'Anemo' + elif '雷' in check: + char_data['avatarElement'] = 'Electro' + elif '岩' in check: + char_data['avatarElement'] = 'Geo' + elif '草' in check: + char_data['avatarElement'] = 'Dendro' + elif '冰' in check: + char_data['avatarElement'] = 'Cryo' + elif '水' in check: + char_data['avatarElement'] = 'Hydro' + else: + char_data['avatarElement'] = 'Pyro' + + char_data['dataTime'] = now + + char_data['avatarSkill'] = [] + # 处理天赋 + for skill in char['skillLevelMap']: + skill_temp = {} + skill_temp['skillId'] = skill + skill_temp['skillName'] = skillId2Name['Name'][ + skill_temp['skillId'] + ] + skill_temp['skillLevel'] = char['skillLevelMap'][skill] + skill_temp['skillIcon'] = skillId2Name['Icon'][ + skill_temp['skillId'] + ] + char_data['avatarSkill'].append(skill_temp) + + if char_data['avatarName'] in ['神里绫华', '安柏']: + char_data['avatarSkill'][0], char_data['avatarSkill'][-1] = ( + char_data['avatarSkill'][-1], + char_data['avatarSkill'][0], + ) + char_data['avatarSkill'][2], char_data['avatarSkill'][-1] = ( + char_data['avatarSkill'][-1], + char_data['avatarSkill'][2], + ) + char_data['avatarEnName'] = char_data['avatarSkill'][1][ + 'skillIcon' + ].split('_')[-2] + elif char_data['avatarName'] in ['旅行者']: + char_data['avatarSkill'][0], char_data['avatarSkill'][-1] = ( + char_data['avatarSkill'][-1], + char_data['avatarSkill'][0], + ) + char_data['avatarSkill'][1], char_data['avatarSkill'][-1] = ( + char_data['avatarSkill'][-1], + char_data['avatarSkill'][1], + ) + char_data['avatarEnName'] = str(avatarId) + else: + char_data['avatarEnName'] = char_data['avatarSkill'][-1][ + 'skillIcon' + ].split('_')[-2] + + # 处理命座 + talent_temp = [] + if 'talentIdList' in char: + for index, talent in enumerate(char['talentIdList']): + talentTemp = {} + talentTemp['talentId'] = char['talentIdList'][index] + talentTemp['talentName'] = talentId2Name['Name'][str(talent)] + talentTemp['talentIcon'] = talentId2Name['Icon'][str(talent)] + talent_temp.append(talentTemp) + char_data['talentList'] = talent_temp + + # 处理属性 + fight_prop = {} + # 血量 + fight_prop['hp'] = char["fightPropMap"]["2000"] + fight_prop['baseHp'] = char["fightPropMap"]["1"] + fight_prop['addHp'] = ( + char["fightPropMap"]["2000"] - char["fightPropMap"]["1"] + ) + # 攻击力 + fight_prop['atk'] = char["fightPropMap"]["2001"] + fight_prop['baseAtk'] = char["fightPropMap"]["4"] + fight_prop['addAtk'] = ( + char["fightPropMap"]["2001"] - char["fightPropMap"]["4"] + ) + # 防御力 + fight_prop['def'] = char["fightPropMap"]["2002"] + fight_prop['baseDef'] = char["fightPropMap"]["7"] + fight_prop['addDef'] = ( + char["fightPropMap"]["2002"] - char["fightPropMap"]["7"] + ) + # 元素精通 + fight_prop['elementalMastery'] = char["fightPropMap"]["28"] + # 暴击率 + fight_prop['critRate'] = char["fightPropMap"]["20"] + # 暴击伤害 + fight_prop['critDmg'] = char["fightPropMap"]["22"] + # 充能效率 + fight_prop['energyRecharge'] = char["fightPropMap"]["23"] + # 治疗&受治疗 + fight_prop['healBonus'] = char["fightPropMap"]["26"] + fight_prop['healedBonus'] = char["fightPropMap"]["27"] + # 物理伤害加成 & 抗性 + fight_prop['physicalDmgSub'] = char["fightPropMap"]["29"] + fight_prop['physicalDmgBonus'] = char["fightPropMap"]["30"] + # 伤害加成 + fight_prop['dmgBonus'] = char["fightPropMap"][ + PROP_ATTR_MAP[char_data['avatarElement']] + ] + + char_data['avatarFightProp'] = fight_prop + + # 处理武器 + weapon_info = {} + weapon_data = char['equipList'][-1] + weapon_info['itemId'] = weapon_data['itemId'] + weapon_info['nameTextMapHash'] = weapon_data['flat']['nameTextMapHash'] + weapon_info['weaponIcon'] = weapon_data['flat']['icon'] + weapon_info['weaponType'] = weaponHash2Type[ + weapon_info['nameTextMapHash'] + ] + weapon_info['weaponName'] = weaponHash2Name[ + weapon_info['nameTextMapHash'] + ] + weapon_info['weaponStar'] = weapon_data['flat']['rankLevel'] + # 防止未精炼 + if 'promoteLevel' in weapon_data['weapon']: + weapon_info['promoteLevel'] = weapon_data['weapon']['promoteLevel'] + else: + weapon_info['promoteLevel'] = 0 + weapon_info['weaponLevel'] = weapon_data['weapon']['level'] + if 'affixMap' in weapon_data['weapon']: + weapon_info['weaponAffix'] = ( + list(weapon_data['weapon']['affixMap'].values())[0] + 1 + ) + else: + weapon_info['weaponAffix'] = 1 + weapon_info['weaponStats'] = [] + for k in weapon_data['flat']['weaponStats']: + weapon_prop_temp = {} + weapon_prop_temp['appendPropId'] = k['appendPropId'] + weapon_prop_temp['statName'] = propId2Name[k['appendPropId']] + weapon_prop_temp['statValue'] = k['statValue'] + weapon_info['weaponStats'].append(weapon_prop_temp) + # 武器特效,须请求API + effect_raw = await get_weapon_info(weapon_info['weaponName']) + if not isinstance(effect_raw, List) and not isinstance( + effect_raw, MiniGGError + ): + effect = effect_raw['effect'].format( + *effect_raw[ + 'r{}'.format(str(weapon_info['weaponAffix'])) + ] # type:ignore + ) + else: + effect = '无特效。' + weapon_info['weaponEffect'] = effect + char_data['weaponInfo'] = weapon_info + + # 处理圣遗物 + artifacts_info = [] + artifacts_data = char['equipList'][:-1] + artifact_set_list = [] + for artifact in artifacts_data: + artifact_temp = {} + artifact_temp['itemId'] = artifact['itemId'] + artifact_temp['nameTextMapHash'] = artifact['flat'][ + 'nameTextMapHash' + ] + artifact_temp['icon'] = artifact['flat']['icon'] + artifact_temp['aritifactName'] = icon2Name[ + artifact['flat']['icon'] + ] + artifact_temp['aritifactSetsName'] = artifact2attr[ + artifact_temp['aritifactName'] + ] + artifact_set_list.append(artifact_temp['aritifactSetsName']) + artifact_temp['aritifactSetPiece'] = artifactId2Piece[ + artifact_temp['icon'].split('_')[-1] + ][0] + artifact_temp['aritifactPieceName'] = artifactId2Piece[ + artifact_temp['icon'].split('_')[-1] + ][1] + + artifact_temp['aritifactStar'] = artifact['flat']['rankLevel'] + artifact_temp['aritifactLevel'] = ( + artifact['reliquary']['level'] - 1 + ) + + artifact_temp['reliquaryMainstat'] = artifact['flat'][ + 'reliquaryMainstat' + ] + artifact_temp['reliquaryMainstat']['statName'] = propId2Name[ + artifact_temp['reliquaryMainstat']['mainPropId'] + ] + + if 'reliquarySubstats' in artifact['flat']: + artifact_temp['reliquarySubstats'] = artifact['flat'][ + 'reliquarySubstats' + ] + else: + artifact_temp['reliquarySubstats'] = [] + for sub in artifact_temp['reliquarySubstats']: + sub['statName'] = propId2Name[sub['appendPropId']] + artifacts_info.append(artifact_temp) + + equipSetList = set(artifact_set_list) + char_data['equipSets'] = {'type': '', 'set': ''} + char_data['equipList'] = artifacts_info + for equip in equipSetList: + if artifact_set_list.count(equip) >= 4: + char_data['equipSets']['type'] = '4' + char_data['equipSets']['set'] = equip + break + elif artifact_set_list.count(equip) == 1: + pass + elif artifact_set_list.count(equip) >= 2: + char_data['equipSets']['type'] += '2' + char_data['equipSets']['set'] += '|' + equip + + if char_data['equipSets']['set'].startswith('|'): + char_data['equipSets']['set'] = char_data['equipSets']['set'][1:] + + char_dict_list.append(char_data) + with open( + path / '{}.json'.format(avatarName), 'w', encoding='UTF-8' + ) as file: + json.dump(char_data, file, ensure_ascii=False) + return char_dict_list + + +async def enka_to_data( + uid: str, enka_data: Optional[EnkaData] = None +) -> Union[dict, str]: + raw_data = await enka_to_dict(uid, enka_data) + if isinstance(raw_data, str): + return raw_data + char_name_list = [] + char_name_list_str = '' + for char_data in raw_data: + char_name_list.append(char_data['avatarName']) + char_name_list_str = ','.join(char_name_list) + return f'UID{uid}刷新完成!\n本次缓存:{char_name_list_str}' diff --git a/GenshinUID/genshinuid_etcimg/__init__.py b/GenshinUID/genshinuid_etcimg/__init__.py new file mode 100644 index 00000000..41d90819 --- /dev/null +++ b/GenshinUID/genshinuid_etcimg/__init__.py @@ -0,0 +1,38 @@ +from pathlib import Path + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..version import Genshin_version +from ..utils.image.convert import convert_img + +PRIMOGEMS_DATA_PATH = Path(__file__).parent / 'primogems_data' +IMG_PATH = Path(__file__).parent / 'img_data' + + +@SV('版本规划').on_command(('版本规划', '原石预估')) +async def send_primogems_data(bot: Bot, ev: Event): + await bot.logger.info('开始执行[图片][版本规划]') + if ev.text: + path = PRIMOGEMS_DATA_PATH / f'{ev.text}.png' + if path.exists(): + img = f'{ev.text}.png' + else: + return + else: + img = f'{Genshin_version[:3]}.png' + primogems_img = PRIMOGEMS_DATA_PATH / img + await bot.logger.info('[图片][版本规划]访问图片: {}'.format(img)) + primogems_img = await convert_img(primogems_img) + await bot.send(primogems_img) + + +@SV('杂图').on_fullmatch(('伤害乘区', '血量表', '抗性表', '血量排行')) +async def send_img_data(bot: Bot, ev: Event): + await bot.logger.info('开始执行[图片][杂图]') + img = IMG_PATH / f'{ev.command}.jpg' + if img.exists(): + await bot.send(await convert_img(img)) + else: + return diff --git a/GenshinUID/genshinuid_etcimg/img_data/伤害乘区.jpg b/GenshinUID/genshinuid_etcimg/img_data/伤害乘区.jpg new file mode 100644 index 00000000..253fff70 Binary files /dev/null and b/GenshinUID/genshinuid_etcimg/img_data/伤害乘区.jpg differ diff --git a/GenshinUID/genshinuid_etcimg/img_data/抗性表.jpg b/GenshinUID/genshinuid_etcimg/img_data/抗性表.jpg new file mode 100644 index 00000000..1ee51688 Binary files /dev/null and b/GenshinUID/genshinuid_etcimg/img_data/抗性表.jpg differ diff --git a/GenshinUID/genshinuid_etcimg/img_data/血量排行.jpg b/GenshinUID/genshinuid_etcimg/img_data/血量排行.jpg new file mode 100644 index 00000000..fcdf709f Binary files /dev/null and b/GenshinUID/genshinuid_etcimg/img_data/血量排行.jpg differ diff --git a/GenshinUID/genshinuid_etcimg/img_data/血量表.jpg b/GenshinUID/genshinuid_etcimg/img_data/血量表.jpg new file mode 100644 index 00000000..75b69744 Binary files /dev/null and b/GenshinUID/genshinuid_etcimg/img_data/血量表.jpg differ diff --git a/GenshinUID/genshinuid_etcimg/primogems_data/3.2.png b/GenshinUID/genshinuid_etcimg/primogems_data/3.2.png new file mode 100644 index 00000000..c581a8c5 Binary files /dev/null and b/GenshinUID/genshinuid_etcimg/primogems_data/3.2.png differ diff --git a/GenshinUID/genshinuid_etcimg/primogems_data/3.3.png b/GenshinUID/genshinuid_etcimg/primogems_data/3.3.png new file mode 100644 index 00000000..88cf2df0 Binary files /dev/null and b/GenshinUID/genshinuid_etcimg/primogems_data/3.3.png differ diff --git a/GenshinUID/genshinuid_etcimg/primogems_data/3.4.png b/GenshinUID/genshinuid_etcimg/primogems_data/3.4.png new file mode 100644 index 00000000..65348487 Binary files /dev/null and b/GenshinUID/genshinuid_etcimg/primogems_data/3.4.png differ diff --git a/GenshinUID/genshinuid_eventlist/__init__.py b/GenshinUID/genshinuid_eventlist/__init__.py new file mode 100644 index 00000000..ce91906b --- /dev/null +++ b/GenshinUID/genshinuid_eventlist/__init__.py @@ -0,0 +1,23 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.aps import scheduler + +from ..utils.image.convert import convert_img +from .draw_event_img import get_event_img, get_all_event_img + + +@scheduler.scheduled_job('cron', hour='2') +async def draw_event(): + await get_all_event_img() + + +@SV('活动列表').on_fullmatch('活动列表') +async def send_events(bot: Bot): + img = await get_event_img('EVENT') + await bot.send(await convert_img(img)) + + +@SV('活动列表').on_fullmatch('卡池列表') +async def send_gachas(bot: Bot): + img = await get_event_img('GACHA') + await bot.send(await convert_img(img)) diff --git a/GenshinUID/genshinuid_eventlist/draw_event_img.py b/GenshinUID/genshinuid_eventlist/draw_event_img.py new file mode 100644 index 00000000..a5bb353e --- /dev/null +++ b/GenshinUID/genshinuid_eventlist/draw_event_img.py @@ -0,0 +1,275 @@ +from io import BytesIO +from re import findall +from pathlib import Path +from typing import List, Literal + +from httpx import get +from PIL import Image, ImageDraw + +from ..version import Genshin_version +from ..utils.image.convert import convert_img +from ..utils.image.image_tools import get_color_bg +from ..utils.fonts.genshin_fonts import genshin_font_origin +from ..gsuid_utils.api.ambr.request import get_ambr_event_info + +TEXT_PATH = Path(__file__).parent / 'texture2d' +EVENT_IMG_PATH = Path(__file__).parent / 'event.jpg' +GACHA_IMG_PATH = Path(__file__).parent / 'gacha.jpg' + +PATTERN = r'<[a-zA-Z]+.*?>([\s\S]*?)' + +text_color = (60, 59, 64) + + +async def get_month_and_time(time_data: str) -> List: + """ + :说明: + 接收时间字符串`2022/02/09 18:59:59` + 转换为`['02/09', '18:59PM']` + :参数: + * time_data (str): 时间字符串。 + :返回: + * [month, time] (list): ['02/09', '18:59PM']。 + """ + if '永久开放' in time_data: + month = time_data[:5] + time = '永久开放' + if '更新后' in time_data or '版本' in time_data: + month = time_data[:5] + time = '更新后' + else: + time_data = time_data.split(' ') # type: ignore + time_data[0] = time_data[0].replace('-', '/') # type: ignore + month = time_data[0].split('/', 1)[1] + time = ':'.join(time_data[1].split(':')[:-1]) + if int(time.split(':')[0]) <= 12: + time = time + 'AM' + else: + time = time + 'PM' + return [month, time] + + +class DrawEventList: + def __init__(self): + self.gacha_event: List = [] + self.normal_event: List = [] + self.other_event: List = [] + + async def get_event_data(self): + event_list = await get_ambr_event_info() + assert event_list is not None + for event in event_list: + # 跳过一部分活动 + flag = False + name_full = event_list[event]['nameFull']['CHS'] + for ban_word in ['首充', '深境螺旋', '传说任务', '纪行', '更新修复']: + if ban_word in name_full: + flag = True + break + + if flag: + continue + + event_data = {} + + # 确定结束时间 + start_time = f'{Genshin_version[:-2]}更新后' + end_time = event_list[event]['endAt'] # 2022-11-01 14:59:59 + + event_data['banner'] = event_list[event]['banner']['CHS'] + desc = event_list[event]['description']['CHS'] + desc_content = findall( + r'(

)?

()?' + r'(\d.\d[^<]+|\d{4}\d{2}\d{2} \d{2}:\d{2}:\d{2})' + r'(

|)', + desc, + ) + if desc_content: + start_time = desc_content[0][2] + + event_data['full_name'] = event_list[event]['nameFull']['CHS'] + event_data['start_time'] = await get_month_and_time(start_time) + event_data['end_time'] = await get_month_and_time(end_time) + if '祈愿' in name_full or '扭蛋' in name_full: + self.gacha_event.append(event_data) + else: + self.normal_event.append(event_data) + + async def get_and_save_event_img(self): + base_h = 100 + len(self.normal_event) * 380 + base_img = await get_color_bg(950, base_h) + + font_l = genshin_font_origin(62) + # font_m = genshin_font_origin(34) + font_s = genshin_font_origin(26) + + # now_time = datetime.now().strftime('%Y/%m/%d') + event_cover = Image.open(TEXT_PATH / 'normal_event_cover.png') + + for index, value in enumerate(self.normal_event): + event_img = Image.open(TEXT_PATH / 'normal_event_bg.png') + banner_img = Image.open(BytesIO(get(value['banner']).content)) + banner_img = banner_img.resize( + (576, 208), Image.Resampling.LANCZOS + ) + event_img.paste(banner_img, (315, 118)) + event_img_draw = ImageDraw.Draw(event_img) + + # 写标题 + event_img_draw.text( + (475, 47), value['full_name'], text_color, font_s, 'mm' + ) + # 纠错 + if isinstance(value['start_time'], str): + value['start_time'] = await get_month_and_time( + value['start_time'] + ) + if isinstance(value['end_time'], str): + value['end_time'] = await get_month_and_time(value['end_time']) + + # 画三角 + event_img_draw.polygon( + [(98, 211), (98, 237), (121, 224)], fill=(243, 110, 110) + ) + + # 写字 + event_img_draw.text( + (74, 149), + value['start_time'][0], + text_color, + font_l, + anchor='lm', + ) + event_img_draw.text( + (74, 191), + value['start_time'][1], + text_color, + font_s, + anchor='lm', + ) + event_img_draw.text( + (115, 275), + value['end_time'][0], + text_color, + font_l, + anchor='lm', + ) + event_img_draw.text( + (115, 318), + value['end_time'][1], + text_color, + font_s, + anchor='lm', + ) + event_img.paste(event_cover, (0, 0), event_cover) + base_img.paste(event_img, (0, 50 + 380 * index), event_img) + + base_img = base_img.convert('RGB') + base_img.save(EVENT_IMG_PATH, format='JPEG', subsampling=0, quality=90) + base_img = await convert_img(base_img) + if isinstance(base_img, bytes): + return base_img + else: + return bytes(base_img, 'utf8') + + async def get_and_save_gacha_img(self): + base_h = 100 + len(self.gacha_event) * 480 + base_img = await get_color_bg(950, base_h) + + font_l = genshin_font_origin(62) + # font_m = genshin_font_origin(34) + font_s = genshin_font_origin(26) + + # now_time = datetime.now().strftime('%Y/%m/%d') + gacha_cover = Image.open(TEXT_PATH / 'gacha_event_cover.png') + + for index, value in enumerate(self.gacha_event): + gacha_img = Image.open(TEXT_PATH / 'gacha_event_bg.png') + banner_img = Image.open(BytesIO(get(value['banner']).content)) + banner_img = banner_img.resize( + (576, 284), Image.Resampling.LANCZOS + ) + gacha_img.paste(banner_img, (315, 130)) + gacha_img_draw = ImageDraw.Draw(gacha_img) + + # 写标题 + gacha_img_draw.text( + (475, 47), value['full_name'], text_color, font_s, 'mm' + ) + # 纠错 + if isinstance(value['start_time'], str): + value['start_time'] = await get_month_and_time( + value['start_time'] + ) + if isinstance(value['end_time'], str): + value['end_time'] = await get_month_and_time(value['end_time']) + + # 画三角 + gacha_img_draw.polygon( + [(98, 261), (98, 287), (121, 274)], fill=(243, 110, 110) + ) + + # 写字 + gacha_img_draw.text( + (74, 199), + value['start_time'][0], + text_color, + font_l, + anchor='lm', + ) + gacha_img_draw.text( + (74, 241), + value['start_time'][1], + text_color, + font_s, + anchor='lm', + ) + gacha_img_draw.text( + (115, 325), + value['end_time'][0], + text_color, + font_l, + anchor='lm', + ) + gacha_img_draw.text( + (115, 368), + value['end_time'][1], + text_color, + font_s, + anchor='lm', + ) + gacha_img.paste(gacha_cover, (0, 0), gacha_cover) + base_img.paste(gacha_img, (0, 50 + 480 * index), gacha_img) + + base_img = base_img.convert('RGB') + base_img.save(GACHA_IMG_PATH, format='JPEG', subsampling=0, quality=90) + base_img = await convert_img(base_img) + if isinstance(base_img, bytes): + return base_img + else: + return bytes(base_img, 'utf8') + + +async def get_all_event_img(): + event_list = DrawEventList() + await event_list.get_event_data() + await event_list.get_and_save_event_img() + await event_list.get_and_save_gacha_img() + + +async def get_event_img(event_type: Literal['EVENT', 'GACHA']) -> bytes: + if event_type == 'EVENT': + if EVENT_IMG_PATH.exists(): + with open(EVENT_IMG_PATH, 'rb') as f: + return f.read() + else: + if GACHA_IMG_PATH.exists(): + with open(GACHA_IMG_PATH, 'rb') as f: + return f.read() + + event_list = DrawEventList() + await event_list.get_event_data() + if event_type == 'EVENT': + return await event_list.get_and_save_event_img() + else: + return await event_list.get_and_save_gacha_img() diff --git a/GenshinUID/genshinuid_eventlist/texture2d/gacha_event_bg.png b/GenshinUID/genshinuid_eventlist/texture2d/gacha_event_bg.png new file mode 100644 index 00000000..a57c7cc5 Binary files /dev/null and b/GenshinUID/genshinuid_eventlist/texture2d/gacha_event_bg.png differ diff --git a/GenshinUID/genshinuid_eventlist/texture2d/gacha_event_cover.png b/GenshinUID/genshinuid_eventlist/texture2d/gacha_event_cover.png new file mode 100644 index 00000000..d842875d Binary files /dev/null and b/GenshinUID/genshinuid_eventlist/texture2d/gacha_event_cover.png differ diff --git a/GenshinUID/genshinuid_eventlist/texture2d/normal_event_bg.png b/GenshinUID/genshinuid_eventlist/texture2d/normal_event_bg.png new file mode 100644 index 00000000..e94c19bc Binary files /dev/null and b/GenshinUID/genshinuid_eventlist/texture2d/normal_event_bg.png differ diff --git a/GenshinUID/genshinuid_eventlist/texture2d/normal_event_cover.png b/GenshinUID/genshinuid_eventlist/texture2d/normal_event_cover.png new file mode 100644 index 00000000..5aec58cf Binary files /dev/null and b/GenshinUID/genshinuid_eventlist/texture2d/normal_event_cover.png differ diff --git a/GenshinUID/genshinuid_gachalog/__init__.py b/GenshinUID/genshinuid_gachalog/__init__.py new file mode 100644 index 00000000..5961935f --- /dev/null +++ b/GenshinUID/genshinuid_gachalog/__init__.py @@ -0,0 +1,32 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..utils.convert import get_uid +from ..utils.error_reply import UID_HINT +from .get_gachalogs import save_gachalogs +from .draw_gachalogs import draw_gachalogs_img + + +@SV('抽卡记录').on_fullmatch(('抽卡记录')) +async def send_gacha_log_card_info(bot: Bot, ev: Event): + await bot.logger.info('开始执行[抽卡记录]') + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + im = await draw_gachalogs_img(uid, ev.user_id) + await bot.send(im) + + +@SV('抽卡记录').on_fullmatch(('刷新抽卡记录', '强制刷新抽卡记录')) +async def send_daily_info(bot: Bot, ev: Event): + await bot.logger.info('开始执行[刷新抽卡记录]') + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + is_force = False + if ev.command.startswith('强制'): + await bot.logger.info('[WARNING]本次为强制刷新') + is_force = True + im = await save_gachalogs(uid, None, is_force) + await bot.send(im) diff --git a/GenshinUID/genshinuid_gachalog/draw_gachalogs.py b/GenshinUID/genshinuid_gachalog/draw_gachalogs.py new file mode 100644 index 00000000..3f1477e6 --- /dev/null +++ b/GenshinUID/genshinuid_gachalog/draw_gachalogs.py @@ -0,0 +1,422 @@ +import json +import random +import asyncio +import datetime +from pathlib import Path +from typing import List, Tuple, Union + +from nonebot.log import logger +from PIL import Image, ImageDraw + +from ..utils.image.convert import convert_img +from ..utils.map.name_covert import name_to_avatar_id +from ..utils.resource.RESOURCE_PATH import CHAR_PATH, PLAYER_PATH, WEAPON_PATH +from ..utils.image.image_tools import ( + get_color_bg, + get_qq_avatar, + draw_pic_with_ring, +) +from ..utils.fonts.genshin_fonts import ( + gs_font_24, + gs_font_28, + gs_font_36, + gs_font_40, + gs_font_62, +) + +TEXT_PATH = Path(__file__).parent / 'texture2d' + +up_tag = Image.open(TEXT_PATH / 'up.png') + +first_color = (29, 29, 29) +brown_color = (41, 25, 0) +red_color = (255, 66, 66) +green_color = (74, 189, 119) + +CHANGE_MAP = {'常驻祈愿': 'normal', '角色祈愿': 'char', '武器祈愿': 'weapon'} +HOMO_TAG = ['非到极致', '运气不好', '平稳保底', '小欧一把', '欧狗在此'] +NORMAL_LIST = [ + '莫娜', + '迪卢克', + '七七', + '琴', + '阿莫斯之弓', + '天空之翼', + '四风原典', + '天空之卷', + '和璞鸢', + '天空之脊', + '狼的末路', + '天空之傲', + '风鹰剑', + '天空之刃', +] + + +async def _draw_card( + img: Image.Image, + xy_point: Tuple[int, int], + type: str, + name: str, + gacha_num: int, + is_up: bool, +): + card_img = Image.open(TEXT_PATH / 'item_bg.png') + card_img_draw = ImageDraw.Draw(card_img) + point = (1, 0) + text_point = (55, 124) + if type == '角色': + _id = await name_to_avatar_id(name) + item_pic = ( + Image.open(CHAR_PATH / f'{_id}.png') + .convert('RGBA') + .resize((108, 108)) + ) + else: + item_pic = ( + Image.open(WEAPON_PATH / f'{name}.png') + .convert('RGBA') + .resize((108, 108)) + ) + card_img.paste(item_pic, point, item_pic) + if gacha_num >= 81: + text_color = red_color + elif gacha_num <= 55: + text_color = green_color + else: + text_color = brown_color + card_img_draw.text( + text_point, f'{gacha_num}抽', text_color, gs_font_24, 'mm' + ) + if is_up: + card_img.paste(up_tag, (47, -2), up_tag) + img.paste(card_img, xy_point, card_img) + + +async def random_emo_pic(level: int) -> Image.Image: + emo_fold = TEXT_PATH / str(level) + return Image.open(random.choice(list(emo_fold.iterdir()))) + + +async def get_level_from_list(ast: int, lst: List) -> int: + if ast == 0: + return 3 + + for num_index, num in enumerate(lst): + if ast <= num: + level = 5 - num_index + break + else: + level = 1 + return level + + +async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: + path = PLAYER_PATH / str(uid) / 'gacha_logs.json' + if not path.exists(): + return '你还没有祈愿数据噢~\n请添加Stoken后使用命令`刷新抽卡记录`更新祈愿数据~' + with open(path, 'r', encoding='UTF-8') as f: + gacha_data = json.load(f) + + # 数据初始化 + total_data = {} + for i in ['常驻祈愿', '角色祈愿', '武器祈愿']: + total_data[i] = { + 'total': 0, # 五星总数 + 'avg': 0, # 抽卡平均数 + 'avg_up': 0, # up平均数 + 'remain': 0, # 已xx抽未出金 + 'r_num': [], # 不包含首位的抽卡数量 + 'e_num': [], # 包含首位的up抽卡数量 + 'up_list': [], # 抽到的UP列表(不包含首位) + 'normal_list': [], # 抽到的五星列表(不包含首位) + 'list': [], # 抽到的五星列表 + 'time_range': '', # 抽卡时间 + 'all_time': 0, # 抽卡总计秒数 + 'type': '一般型', # 抽卡类型: 随缘型, 氪金型, 规划型, 仓鼠型, 佛系型 + 'short_gacha_data': {'time': 0, 'num': 0}, + 'long_gacha_data': {'time': 0, 'num': 0}, + } + # 拿到数据列表 + data_list = gacha_data['data'][i] + # 初始化开关 + is_not_first = False + # 开始初始化抽卡数 + num = 1 + # 从后面开始循环 + temp_time = datetime.datetime(2020, 9, 15, 18, 0, 0) + for index, data in enumerate(data_list[::-1]): + # 计算抽卡时间跨度 + if index == 0: + total_data[i]['time_range'] = data['time'] + if index == len(data_list) - 1: + total_data[i]['all_time'] = ( + datetime.datetime.strptime( + data['time'], '%Y-%m-%d %H:%M:%S' + ) + - datetime.datetime.strptime( + total_data[i]['time_range'], '%Y-%m-%d %H:%M:%S' + ) + ).total_seconds() + total_data[i]['time_range'] += '~' + data['time'] + + # 计算时间间隔 + if index != 0: + now_time = datetime.datetime.strptime( + data['time'], '%Y-%m-%d %H:%M:%S' + ) + dis = (now_time - temp_time).total_seconds() + temp_time = now_time + if dis <= 5000: + total_data[i]['short_gacha_data']['num'] += 1 + total_data[i]['short_gacha_data']['time'] += dis + elif dis >= 86400: + total_data[i]['long_gacha_data']['num'] += 1 + total_data[i]['long_gacha_data']['time'] += dis + else: + temp_time = datetime.datetime.strptime( + data['time'], '%Y-%m-%d %H:%M:%S' + ) + + # 如果这是个五星 + if data['rank_type'] == '5': + # 抽到这个五星花了多少抽 + data['gacha_num'] = num + + # 判断是否是UP + if data['name'] in NORMAL_LIST: + data['is_up'] = False + # 判断刻晴时间 + elif data['name'] == '刻晴': + s_time = datetime.datetime(2021, 2, 17, 18, 0, 0) + e_time = datetime.datetime(2021, 3, 2, 15, 59, 59) + gacha_time = datetime.datetime.strptime( + data['time'], '%Y-%m-%d %H:%M:%S' + ) + if gacha_time < s_time or gacha_time > e_time: + data['is_up'] = False + else: + data['is_up'] = True + # 判断提哪里时间 + elif data['name'] == '提纳里': + s_time = datetime.datetime(2022, 8, 24, 11, 0, 0) + e_time = datetime.datetime(2022, 9, 9, 17, 59, 59) + gacha_time = datetime.datetime.strptime( + data['time'], '%Y-%m-%d %H:%M:%S' + ) + if gacha_time < s_time or gacha_time > e_time: + data['is_up'] = False + else: + data['is_up'] = True + else: + data['is_up'] = True + + # 往里加东西 + if is_not_first: + total_data[i]['r_num'].append(num) + total_data[i]['normal_list'].append(data) + if data['is_up']: + total_data[i]['up_list'].append(data) + + # 把这个数据扔到抽到的五星列表内 + total_data[i]['list'].append(data) + + # 判断经过了第一个 + if total_data[i]['list']: + is_not_first = True + + num = 1 + # 五星总数增加1 + total_data[i]['total'] += 1 + else: + num += 1 + + # 计算已多少抽 + total_data[i]['remain'] = num - 1 + + # 计算平均抽卡数 + if len(total_data[i]['normal_list']) == 0: + total_data[i]['avg'] = 0 + else: + total_data[i]['avg'] = float( + '{:.2f}'.format( + sum(total_data[i]['r_num']) / len(total_data[i]['r_num']) + ) + ) + # 计算平均up数量 + if len(total_data[i]['up_list']) == 0: + total_data[i]['avg_up'] = 0 + else: + total_data[i]['avg_up'] = float( + '{:.2f}'.format( + sum(total_data[i]['r_num']) / len(total_data[i]['up_list']) + ) + ) + + # 计算抽卡类型 + # 如果抽卡总数小于40 + if gacha_data[f'{CHANGE_MAP[i]}_gacha_num'] <= 40: + total_data[i]['type'] = '佛系型' + # 如果长时抽卡总数占据了总抽卡数的70% + elif ( + total_data[i]['long_gacha_data']['num'] + / gacha_data[f'{CHANGE_MAP[i]}_gacha_num'] + >= 0.7 + ): + total_data[i]['type'] = '随缘型' + # 如果短时抽卡总数占据了总抽卡数的70% + elif ( + total_data[i]['short_gacha_data']['num'] + / gacha_data[f'{CHANGE_MAP[i]}_gacha_num'] + >= 0.7 + ): + total_data[i]['type'] = '规划型' + # 如果抽卡数量远远大于标称抽卡数量 + elif ( + total_data[i]['all_time'] / 30000 + <= gacha_data[f'{CHANGE_MAP[i]}_gacha_num'] + ): + # 如果长时抽卡数量大于短时抽卡数量 + if ( + total_data[i]['long_gacha_data']['num'] + >= total_data[i]['short_gacha_data']['num'] + ): + total_data[i]['type'] = '规划型' + else: + total_data[i]['type'] = '氪金型' + # 如果抽卡数量远远小于标称抽卡数量 + elif ( + total_data[i]['all_time'] / 32000 + >= gacha_data[f'{CHANGE_MAP[i]}_gacha_num'] * 2 + ): + total_data[i]['type'] = '仓鼠型' + + # 常量偏移数据 + single_y = 150 + + # 计算图片尺寸 + normal_y = (1 + ((total_data['常驻祈愿']['total'] - 1) // 6)) * single_y + char_y = (1 + ((total_data['角色祈愿']['total'] - 1) // 6)) * single_y + weapon_y = (1 + ((total_data['武器祈愿']['total'] - 1) // 6)) * single_y + + # 获取背景图片各项参数 + _id = str(user_id) + if _id.startswith('http'): + char_pic = await get_qq_avatar(avatar_url=_id) + else: + char_pic = await get_qq_avatar(qid=user_id) + char_pic = await draw_pic_with_ring(char_pic, 320) + + avatar_title = Image.open(TEXT_PATH / 'avatar_title.png') + img = await get_color_bg(950, 530 + 900 + normal_y + char_y + weapon_y) + img.paste(avatar_title, (0, 0), avatar_title) + img.paste(char_pic, (318, 83), char_pic) + img_draw = ImageDraw.Draw(img) + img_draw.text((475, 454), f'UID {uid}', first_color, gs_font_36, 'mm') + + # 处理title + # {'total': 0, 'avg': 0, 'remain': 0, 'list': []} + type_list = ['常驻祈愿', '角色祈愿', '武器祈愿'] + y_extend = 0 + level = 3 + for index, i in enumerate(type_list): + title = Image.open(TEXT_PATH / 'gahca_title.png') + if i == '常驻祈愿': + level = await get_level_from_list( + total_data[i]['avg'], [54, 61, 67, 73, 80] + ) + else: + if i == '武器祈愿': + level = await get_level_from_list( + total_data[i]['avg_up'], [62, 75, 88, 99, 111] + ) + else: + level = await get_level_from_list( + total_data[i]['avg_up'], [74, 87, 99, 105, 120] + ) + + emo_pic = await random_emo_pic(level) + emo_pic = emo_pic.resize((154, 154)) + title.paste(emo_pic, (703, 28), emo_pic) + title_draw = ImageDraw.Draw(title) + # 欧非描述 + title_draw.text( + (778, 207), HOMO_TAG[level - 1], first_color, gs_font_36, 'mm' + ) + # 卡池 + title_draw.text((69, 72), i, first_color, gs_font_62, 'lm') + # 抽卡时间 + if total_data[i]['time_range']: + time_range = total_data[i]['time_range'] + else: + time_range = '暂未抽过卡!' + title_draw.text((68, 122), time_range, brown_color, gs_font_28, 'lm') + # 平均抽卡数量 + title_draw.text( + (123, 176), + str(total_data[i]['avg']), + first_color, + gs_font_40, + 'mm', + ) + # 平均up + title_draw.text( + (272, 176), + str(total_data[i]['avg_up']), + first_color, + gs_font_40, + 'mm', + ) + # 抽卡总数 + title_draw.text( + (424, 176), + str(gacha_data[f'{CHANGE_MAP[i]}_gacha_num']), + first_color, + gs_font_40, + 'mm', + ) + # 抽卡类型 + title_draw.text( + (585, 176), + str(total_data[i]['type']), + first_color, + gs_font_40, + 'mm', + ) + # 已抽数 + title_draw.text( + (383, 85), + str(total_data[i]['remain']), + red_color, + gs_font_28, + 'mm', + ) + y_extend += ( + (1 + ((total_data[type_list[index - 1]]['total'] - 1) // 6)) * 150 + if index != 0 + else 0 + ) + y = 540 + index * 300 + y_extend + img.paste(title, (0, y), title) + tasks = [] + for item_index, item in enumerate(total_data[i]['list']): + item_x = (item_index % 6) * 138 + 60 + item_y = (item_index // 6) * 150 + y + 275 + xy_point = (item_x, item_y) + tasks.append( + _draw_card( + img, + xy_point, + item['item_type'], + item['name'], + item['gacha_num'], + item['is_up'], + ) + ) + await asyncio.gather(*tasks) + tasks.clear() + + # 发送图片 + res = await convert_img(img) + logger.info('[查询抽卡]绘图已完成,等待发送!') + return res diff --git a/GenshinUID/genshinuid_gachalog/export_and_import.py b/GenshinUID/genshinuid_gachalog/export_and_import.py new file mode 100644 index 00000000..b6267db7 --- /dev/null +++ b/GenshinUID/genshinuid_gachalog/export_and_import.py @@ -0,0 +1,86 @@ +import json +from datetime import datetime + +from httpx import get + +from .get_gachalogs import save_gachalogs +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH + +INT_TO_TYPE = { + '100': '新手祈愿', + '200': '常驻祈愿', + '301': '角色祈愿', + '400': '角色祈愿', + '302': '武器祈愿', +} + + +async def import_gachalogs(history_url: str, uid: str) -> str: + history_data: dict = json.loads(get(history_url).text) + data_uid = history_data['info']['uid'] + if data_uid != uid: + return f'该抽卡记录UID{data_uid}与你绑定UID{uid}不符合!' + raw_data = history_data['list'] + result = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []} + for item in raw_data: + item['uid'] = uid + item['item_id'] = '' + item['count'] = '1' + item['lang'] = 'zh-cn' + item['id'] = str(item['id']) + del item['uigf_gacha_type'] + result[INT_TO_TYPE[item['gacha_type']]].append(item) + im = await save_gachalogs(uid, result) + return im + + +async def export_gachalogs(uid: str) -> dict: + path = PLAYER_PATH / uid + if not path.exists(): + path.mkdir(parents=True, exist_ok=True) + + # 获取当前时间 + now = datetime.now() + current_time = now.strftime('%Y-%m-%d %H:%M:%S') + + # 抽卡记录json路径 + gachalogs_path = path / 'gacha_logs.json' + if gachalogs_path.exists(): + with open(gachalogs_path, "r", encoding='UTF-8') as f: + raw_data = json.load(f) + result = { + 'info': { + 'uid': uid, + 'lang': 'zh-cn', + 'export_time': current_time, + 'export_app': 'GenshinUID', + 'export_app_version': '3.1', + 'uigf_version': '2.1', + }, + 'list': [], + } + for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']: + for item in raw_data['data'][i]: + if item['gacha_type'] == '400': + item['uigf_gacha_type'] = '301' + else: + item['uigf_gacha_type'] = item['gacha_type'] + result['list'].append(item) + # 保存文件 + with open(path / f'UIGF_{uid}.json', 'w', encoding='UTF-8') as file: + json.dump(result, file, ensure_ascii=False) + im = { + 'retcode': 'ok', + 'data': '导出成功!', + 'name': f'UIGF_{uid}.json', + 'url': str((path / f'UIGF_{uid}.json').absolute()), + } + else: + im = { + 'retcode': 'error', + 'data': '你还没有抽卡记录可以导出!', + 'name': '', + 'url': '', + } + + return im diff --git a/GenshinUID/genshinuid_gachalog/get_gachalogs.py b/GenshinUID/genshinuid_gachalog/get_gachalogs.py new file mode 100644 index 00000000..8cdff3ac --- /dev/null +++ b/GenshinUID/genshinuid_gachalog/get_gachalogs.py @@ -0,0 +1,138 @@ +import json +import asyncio +from datetime import datetime +from typing import Dict, Optional + +from ..utils.mys_api import mys_api +from ..utils.error_reply import SK_HINT +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH + +gacha_type_meta_data = { + '新手祈愿': ['100'], + '常驻祈愿': ['200'], + '角色祈愿': ['301', '400'], + '武器祈愿': ['302'], +} + + +async def get_new_gachalog(uid: str, full_data: Dict, is_force: bool): + temp = [] + for gacha_name in gacha_type_meta_data: + for gacha_type in gacha_type_meta_data[gacha_name]: + end_id = '0' + for page in range(1, 999): + data = await mys_api.get_gacha_log_by_authkey( + uid, gacha_type, page, end_id + ) + await asyncio.sleep(0.9) + if isinstance(data, int): + return {} + data = data['list'] + if data == []: + break + end_id = data[-1]['id'] + if data[-1] in full_data[gacha_name] and not is_force: + for item in data: + if item not in full_data[gacha_name]: + temp.append(item) + full_data[gacha_name][0:0] = temp + temp = [] + break + if len(full_data[gacha_name]) >= 1: + if int(data[-1]['id']) <= int( + full_data[gacha_name][0]['id'] + ): + full_data[gacha_name].extend(data) + else: + full_data[gacha_name][0:0] = data + else: + full_data[gacha_name].extend(data) + await asyncio.sleep(0.5) + return full_data + + +async def save_gachalogs( + uid: str, raw_data: Optional[dict] = None, is_force: bool = False +) -> str: + path = PLAYER_PATH / str(uid) + if not path.exists(): + path.mkdir(parents=True, exist_ok=True) + + # 获取当前时间 + now = datetime.now() + current_time = now.strftime('%Y-%m-%d %H-%M-%S') + + # 初始化最后保存的数据 + result = {} + + # 抽卡记录json路径 + gachalogs_path = path / 'gacha_logs.json' + + # 如果有老的,准备合并, 先打开文件 + gachalogs_history = {} + old_normal_gacha_num, old_char_gacha_num, old_weapon_gacha_num = 0, 0, 0 + if gachalogs_path.exists(): + with open(gachalogs_path, "r", encoding='UTF-8') as f: + gachalogs_history: Dict = json.load(f) + gachalogs_history = gachalogs_history['data'] + old_normal_gacha_num = len(gachalogs_history['常驻祈愿']) + old_char_gacha_num = len(gachalogs_history['角色祈愿']) + old_weapon_gacha_num = len(gachalogs_history['武器祈愿']) + + # 获取新抽卡记录 + if raw_data is None: + raw_data = await get_new_gachalog(uid, gachalogs_history, is_force) + else: + new_data = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []} + if gachalogs_history: + for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']: + for item in raw_data[i]: + if ( + item not in gachalogs_history[i] + and item not in new_data[i] + ): + new_data[i].append(item) + raw_data = new_data + for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']: + raw_data[i].extend(gachalogs_history[i]) + + if raw_data == {} or not raw_data: + return SK_HINT + + temp_data = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []} + for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']: + for item in raw_data[i]: + if item not in temp_data[i]: + temp_data[i].append(item) + raw_data = temp_data + + result['uid'] = uid + result['data_time'] = current_time + result['normal_gacha_num'] = len(raw_data['常驻祈愿']) + result['char_gacha_num'] = len(raw_data['角色祈愿']) + result['weapon_gacha_num'] = len(raw_data['武器祈愿']) + for i in ['常驻祈愿', '角色祈愿', '武器祈愿']: + if len(raw_data[i]) > 1: + raw_data[i].sort(key=lambda x: (-int(x['id']))) + result['data'] = raw_data + + # 计算数据 + normal_add = result['normal_gacha_num'] - old_normal_gacha_num + char_add = result['char_gacha_num'] - old_char_gacha_num + weapon_add = result['weapon_gacha_num'] - old_weapon_gacha_num + all_add = normal_add + char_add + weapon_add + + # 保存文件 + with open(gachalogs_path, 'w', encoding='UTF-8') as file: + json.dump(result, file, ensure_ascii=False) + + # 回复文字 + if all_add == 0: + im = f'UID{uid}没有新增祈愿数据!' + else: + im = ( + f'UID{uid}数据更新成功!' + f'本次更新{all_add}个数据\n' + f'常驻祈愿{normal_add}个\n角色祈愿{char_add}个\n武器祈愿{weapon_add}个!' + ) + return im diff --git a/GenshinUID/genshinuid_gachalog/texture2d/1/100.png b/GenshinUID/genshinuid_gachalog/texture2d/1/100.png new file mode 100644 index 00000000..24eba964 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/1/100.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/1/133.png b/GenshinUID/genshinuid_gachalog/texture2d/1/133.png new file mode 100644 index 00000000..8685fc3e Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/1/133.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/1/166.png b/GenshinUID/genshinuid_gachalog/texture2d/1/166.png new file mode 100644 index 00000000..1086b218 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/1/166.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/1/200.png b/GenshinUID/genshinuid_gachalog/texture2d/1/200.png new file mode 100644 index 00000000..2e40ac61 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/1/200.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/1/48.png b/GenshinUID/genshinuid_gachalog/texture2d/1/48.png new file mode 100644 index 00000000..7458b337 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/1/48.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/1/55.png b/GenshinUID/genshinuid_gachalog/texture2d/1/55.png new file mode 100644 index 00000000..435827e1 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/1/55.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/2/10.png b/GenshinUID/genshinuid_gachalog/texture2d/2/10.png new file mode 100644 index 00000000..926e9b64 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/2/10.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/2/25.png b/GenshinUID/genshinuid_gachalog/texture2d/2/25.png new file mode 100644 index 00000000..bd704168 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/2/25.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/2/37.png b/GenshinUID/genshinuid_gachalog/texture2d/2/37.png new file mode 100644 index 00000000..999269e2 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/2/37.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/2/39.png b/GenshinUID/genshinuid_gachalog/texture2d/2/39.png new file mode 100644 index 00000000..ab1ec015 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/2/39.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/2/60.png b/GenshinUID/genshinuid_gachalog/texture2d/2/60.png new file mode 100644 index 00000000..01a8bdf8 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/2/60.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/2/63.png b/GenshinUID/genshinuid_gachalog/texture2d/2/63.png new file mode 100644 index 00000000..32f346a9 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/2/63.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/3/130.png b/GenshinUID/genshinuid_gachalog/texture2d/3/130.png new file mode 100644 index 00000000..41218c15 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/3/130.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/3/144.png b/GenshinUID/genshinuid_gachalog/texture2d/3/144.png new file mode 100644 index 00000000..1e750dd6 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/3/144.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/3/147.png b/GenshinUID/genshinuid_gachalog/texture2d/3/147.png new file mode 100644 index 00000000..265cf5f2 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/3/147.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/3/33.png b/GenshinUID/genshinuid_gachalog/texture2d/3/33.png new file mode 100644 index 00000000..d4f99a81 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/3/33.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/3/63.png b/GenshinUID/genshinuid_gachalog/texture2d/3/63.png new file mode 100644 index 00000000..32f346a9 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/3/63.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/3/9.png b/GenshinUID/genshinuid_gachalog/texture2d/3/9.png new file mode 100644 index 00000000..f84e0bad Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/3/9.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/4/117.png b/GenshinUID/genshinuid_gachalog/texture2d/4/117.png new file mode 100644 index 00000000..cc1d664a Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/4/117.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/4/17.png b/GenshinUID/genshinuid_gachalog/texture2d/4/17.png new file mode 100644 index 00000000..470912c1 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/4/17.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/4/196.png b/GenshinUID/genshinuid_gachalog/texture2d/4/196.png new file mode 100644 index 00000000..c2d11f21 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/4/196.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/4/205.png b/GenshinUID/genshinuid_gachalog/texture2d/4/205.png new file mode 100644 index 00000000..ef12d1cd Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/4/205.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/4/23.png b/GenshinUID/genshinuid_gachalog/texture2d/4/23.png new file mode 100644 index 00000000..bc35b023 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/4/23.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/4/97.png b/GenshinUID/genshinuid_gachalog/texture2d/4/97.png new file mode 100644 index 00000000..6704a146 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/4/97.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/5/175.png b/GenshinUID/genshinuid_gachalog/texture2d/5/175.png new file mode 100644 index 00000000..a51b6237 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/5/175.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/5/199.png b/GenshinUID/genshinuid_gachalog/texture2d/5/199.png new file mode 100644 index 00000000..71996f52 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/5/199.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/5/204.png b/GenshinUID/genshinuid_gachalog/texture2d/5/204.png new file mode 100644 index 00000000..3bf974d7 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/5/204.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/5/22.png b/GenshinUID/genshinuid_gachalog/texture2d/5/22.png new file mode 100644 index 00000000..87915d3b Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/5/22.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/5/70.png b/GenshinUID/genshinuid_gachalog/texture2d/5/70.png new file mode 100644 index 00000000..48e0da8b Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/5/70.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/5/99.png b/GenshinUID/genshinuid_gachalog/texture2d/5/99.png new file mode 100644 index 00000000..2d77aed3 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/5/99.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/avatar_title.png b/GenshinUID/genshinuid_gachalog/texture2d/avatar_title.png new file mode 100644 index 00000000..9e11a396 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/avatar_title.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/gahca_title.png b/GenshinUID/genshinuid_gachalog/texture2d/gahca_title.png new file mode 100644 index 00000000..2683ea1d Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/gahca_title.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/item_bg.png b/GenshinUID/genshinuid_gachalog/texture2d/item_bg.png new file mode 100644 index 00000000..83390bbd Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/item_bg.png differ diff --git a/GenshinUID/genshinuid_gachalog/texture2d/up.png b/GenshinUID/genshinuid_gachalog/texture2d/up.png new file mode 100644 index 00000000..5b240b06 Binary files /dev/null and b/GenshinUID/genshinuid_gachalog/texture2d/up.png differ diff --git a/GenshinUID/genshinuid_gcg/__init__.py b/GenshinUID/genshinuid_gcg/__init__.py new file mode 100644 index 00000000..1290056d --- /dev/null +++ b/GenshinUID/genshinuid_gcg/__init__.py @@ -0,0 +1,18 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..utils.convert import get_uid +from .draw_gcginfo import draw_gcg_info +from ..utils.error_reply import UID_HINT + + +@SV('查询七圣').on_command(('七圣召唤', '七圣', 'qszh')) +async def send_gcg_pic(bot: Bot, ev: Event): + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[七圣召唤]uid: {}'.format(uid)) + + im = await draw_gcg_info(uid) + await bot.send(im) diff --git a/GenshinUID/genshinuid_gcg/draw_gcginfo.py b/GenshinUID/genshinuid_gcg/draw_gcginfo.py new file mode 100644 index 00000000..8f71df74 --- /dev/null +++ b/GenshinUID/genshinuid_gcg/draw_gcginfo.py @@ -0,0 +1,99 @@ +from pathlib import Path +from typing import Union + +from nonebot.log import logger +from PIL import Image, ImageDraw + +from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error +from ..utils.image.convert import convert_img +from ..utils.resource.download_url import download +from ..utils.resource.RESOURCE_PATH import CARD_PATH +from ..utils.fonts.genshin_fonts import ( + gs_font_18, + gs_font_26, + gs_font_32, + gs_font_50, +) + +TEXT_PATH = Path(__file__).parent / 'texture2d' + +rank1 = Image.open(TEXT_PATH / '1.png').resize((400, 54)) +rank2 = Image.open(TEXT_PATH / '2.png').resize((400, 54)) +rank3 = Image.open(TEXT_PATH / '3.png').resize((400, 54)) +rank4 = Image.open(TEXT_PATH / '4.png').resize((400, 54)) + +frist_color = (45, 45, 45) +second_color = (53, 53, 53) + + +async def draw_gcg_info(uid: str) -> Union[bytes, str]: + # 获得数据 + raw_data = await mys_api.get_gcg_info(uid) + if isinstance(raw_data, int): + return get_error(raw_data) + + if raw_data['covers'] == []: + return f'UID{uid}还没有开启七圣召唤玩法 或 未去米游社激活数据!' + + # 解析数据 + nickname: str = raw_data['nickname'] + level: int = raw_data['level'] + avatar_card_num_gained: int = raw_data['avatar_card_num_gained'] + avatar_card_num_total: int = raw_data['avatar_card_num_total'] + action_card_num_gained: int = raw_data['action_card_num_gained'] + action_card_num_total: int = raw_data['action_card_num_total'] + + avatar_rate = avatar_card_num_gained / avatar_card_num_total + action_rate = action_card_num_gained / action_card_num_total + + avatar = f'{avatar_card_num_gained} / {avatar_card_num_total}' + action = f'{action_card_num_gained} / {action_card_num_total}' + + # 制作图片 + img = Image.open(TEXT_PATH / 'BG.png') + avatar_bar = await get_bar(avatar_rate) + action_bar = await get_bar(action_rate) + img.paste(avatar_bar, (440, 36), avatar_bar) + img.paste(action_bar, (440, 101), action_bar) + + img_draw = ImageDraw.Draw(img) + # 右上区域 + img_draw.text((469, 63), '已解锁角色牌', frist_color, gs_font_26, 'lm') + img_draw.text((469, 128), '已收集行动牌', frist_color, gs_font_26, 'lm') + + img_draw.text((805, 63), avatar, frist_color, gs_font_26, 'rm') + img_draw.text((805, 128), action, frist_color, gs_font_26, 'rm') + + # 左上区域 + img_draw.text((165, 87), nickname, frist_color, gs_font_32, 'lm') + img_draw.text((165, 120), f'UID{uid}', frist_color, gs_font_18, 'lm') + img_draw.text((102, 97), str(level), 'white', gs_font_50, 'mm') + + for i, card in enumerate(raw_data['covers']): + file_name = f'{card["id"]}.png' + path = CARD_PATH / file_name + if path.exists(): + card_img = Image.open(path).resize((160, 275)) + else: + await download(card['image'], 9, file_name) + card_img = Image.open(path).resize((160, 275)) + + img.paste(card_img, (65 + i * 204, 198), card_img) + + img = await convert_img(img) + logger.info('[七圣召唤]绘图已结束,等待发送...') + return img + + +async def get_bar(rate: float) -> Image.Image: + if rate <= 0.25: + bar = rank1 + elif rate <= 0.58: + bar = rank2 + elif rate <= 0.8: + bar = rank3 + else: + bar = rank4 + + return bar diff --git a/GenshinUID/genshinuid_gcg/texture2d/1.png b/GenshinUID/genshinuid_gcg/texture2d/1.png new file mode 100644 index 00000000..f53dcc48 Binary files /dev/null and b/GenshinUID/genshinuid_gcg/texture2d/1.png differ diff --git a/GenshinUID/genshinuid_gcg/texture2d/2.png b/GenshinUID/genshinuid_gcg/texture2d/2.png new file mode 100644 index 00000000..9d3fbc73 Binary files /dev/null and b/GenshinUID/genshinuid_gcg/texture2d/2.png differ diff --git a/GenshinUID/genshinuid_gcg/texture2d/3.png b/GenshinUID/genshinuid_gcg/texture2d/3.png new file mode 100644 index 00000000..740e2748 Binary files /dev/null and b/GenshinUID/genshinuid_gcg/texture2d/3.png differ diff --git a/GenshinUID/genshinuid_gcg/texture2d/4.png b/GenshinUID/genshinuid_gcg/texture2d/4.png new file mode 100644 index 00000000..a8f6d1a6 Binary files /dev/null and b/GenshinUID/genshinuid_gcg/texture2d/4.png differ diff --git a/GenshinUID/genshinuid_gcg/texture2d/BG.png b/GenshinUID/genshinuid_gcg/texture2d/BG.png new file mode 100644 index 00000000..5787a060 Binary files /dev/null and b/GenshinUID/genshinuid_gcg/texture2d/BG.png differ diff --git a/GenshinUID/genshinuid_guide/__init__.py b/GenshinUID/genshinuid_guide/__init__.py new file mode 100644 index 00000000..c7c7acbf --- /dev/null +++ b/GenshinUID/genshinuid_guide/__init__.py @@ -0,0 +1,62 @@ +import asyncio +import threading +from typing import List + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.segment import MessageSegment + +from .get_guide import get_gs_guide +from ..version import Genshin_version +from ..utils.image.convert import convert_img +from ..utils.resource.RESOURCE_PATH import REF_PATH +from .get_abyss_data import get_review, generate_data +from ..utils.map.name_covert import alias_to_char_name + + +@SV('查询角色攻略').on_suffix(('攻略', '推荐')) +async def send_guide_pic(bot: Bot, ev: Event): + im = await get_gs_guide(ev.text) + + if im: + await bot.logger.info('获得{}攻略成功!'.format(ev.text)) + await bot.send(im) + else: + await bot.logger.warning('未找到{}攻略图片'.format(ev.text)) + + +@SV('查询角色攻略').on_prefix(('参考面板')) +async def send_bluekun_pic(bot: Bot, ev: Event): + if ev.text in ['冰', '水', '火', '草', '雷', '风', '岩']: + name = ev.text + else: + name = await alias_to_char_name(ev.text) + img = REF_PATH / '{}.jpg'.format(name) + if img.exists(): + img = await convert_img(img) + await bot.logger.info('获得{}参考面板图片成功!'.format(name)) + await bot.send(img) + else: + await bot.logger.warning('未找到{}参考面板图片'.format(name)) + + +@SV('查询深渊阵容').on_command(('版本深渊')) +async def send_abyss_review(bot: Bot, ev: Event): + if not ev.text: + version = Genshin_version[:-2] + else: + version = ev.text + + im = await get_review(version) + + if isinstance(im, List): + mes = [MessageSegment.text(msg) for msg in im] + await bot.send(MessageSegment.node(mes)) + elif isinstance(im, str): + await bot.send(im) + + +threading.Thread( + target=lambda: asyncio.run(generate_data()), daemon=True +).start() diff --git a/GenshinUID/genshinuid_guide/abyss_history.py b/GenshinUID/genshinuid_guide/abyss_history.py new file mode 100644 index 00000000..bbb6dfe3 --- /dev/null +++ b/GenshinUID/genshinuid_guide/abyss_history.py @@ -0,0 +1,23 @@ +history_data = { + '3.4': {'9': '1044', '10': '1045', '11': '1054', '12': '1055'}, + '3.3': {'9': '1044', '10': '1045', '11': '1052', '12': '1053'}, + '3.2': {'9': '1044', '10': '1045', '11': '1050', '12': '1051'}, + '3.1': {'9': '1044', '10': '1045', '11': '1048', '12': '1049'}, + '3.0': {'9': '1044', '10': '1045', '11': '1046', '12': '1047'}, + '2.8': {'9': '1024', '10': '1025', '11': '1042', '12': '1043'}, + '2.7': {'9': '1024', '10': '1025', '11': '1040', '12': '1041'}, + '2.6': {'9': '1024', '10': '1025', '11': '1038', '12': '1039'}, + '2.5': {'9': '1024', '10': '1025', '11': '1036', '12': '1037'}, + '2.4': {'9': '1024', '10': '1025', '11': '1034', '12': '1035'}, + '2.3': {'9': '1024', '10': '1025', '11': '1032', '12': '1033'}, + '2.2': {'9': '1024', '10': '1025', '11': '1030', '12': '1031'}, + '2.1': {'9': '1024', '10': '1025', '11': '1028', '12': '1029'}, + '2.0': {'9': '1024', '10': '1025', '11': '1026', '12': '1027'}, + '1.6': {'9': '1020', '10': '1021', '11': '1022', '12': '1023'}, + '1.5': {'9': '1013', '10': '1014', '11': '1018', '12': '1019'}, + '1.4': {'9': '1013', '10': '1014', '11': '1015', '12': '1017'}, + '1.3': {'9': '1013', '10': '1014', '11': '1015', '12': '1016'}, + '1.2': {'9': '1009', '10': '1010', '11': '1011', '12': '1012'}, + '1.1': {'9': '1009', '10': '1010', '11': '1011', '12': '1012'}, + '1.0': {'9': '1009', '10': '1010', '11': '1011', '12': '1012'}, +} diff --git a/GenshinUID/genshinuid_guide/get_abyss_data.py b/GenshinUID/genshinuid_guide/get_abyss_data.py new file mode 100644 index 00000000..60640518 --- /dev/null +++ b/GenshinUID/genshinuid_guide/get_abyss_data.py @@ -0,0 +1,53 @@ +import json +from pathlib import Path +from typing import Dict, List, Union + +from nonebot.log import logger + +from .abyss_history import history_data +from ..gsuid_utils.api.hhw.request import ( + get_abyss_review, + get_abyss_review_raw, +) + +REVIEW_PATH = Path(__file__).parent / "review.json" + + +async def generate_data(): + raw_data = await get_abyss_review_raw() + result = {} + for version in history_data: + for floor in history_data[version]: + _id = history_data[version][floor] + data = await get_abyss_review(raw_data, _id, floor) + if version not in result: + result[version] = {} + result[version][floor] = data + + with open(REVIEW_PATH, 'w', encoding='UTF-8') as file: + json.dump(result, file, ensure_ascii=False) + + logger.info('[深渊预览] 数据已刷新!') + + +async def get_review(version: Union[str, float]) -> Union[List, str]: + if not REVIEW_PATH.exists(): + return '请等待数据加载完成...' + + with open(REVIEW_PATH, "r", encoding='UTF-8') as f: + review: Dict[str, Dict[str, Dict[str, List[str]]]] = json.load(f) + + if isinstance(version, float): + version = str(version) + + im_list = [] + if version in review: + im_list.append(f'{version}版本深渊阵容') + for floor in review[version]: + for half in review[version][floor]: + im_list.append( + '\n'.join([half] + review[version][floor][half]) + ) + return im_list + else: + return '暂无该版本的深渊阵容...' diff --git a/GenshinUID/genshinuid_guide/get_card.py b/GenshinUID/genshinuid_guide/get_card.py new file mode 100644 index 00000000..2045f7ee --- /dev/null +++ b/GenshinUID/genshinuid_guide/get_card.py @@ -0,0 +1,28 @@ +from pathlib import Path +from typing import Optional + +from ..utils.map.name_covert import alias_to_char_name + +CARD_PATH = Path(__file__).parent / 'card' + +# CARD_DATA = {i.name[:-4]: i for i in CARD_PATH.rglob('*.jpg')} +CARD_DATA = {} + + +async def get_gs_card(msg: str) -> Optional[bytes]: + if not msg: + return None + msg = await alias_to_char_name(msg) + if msg in CARD_DATA: + img = CARD_DATA[msg] + else: + for filename in CARD_DATA: + similarity = len(set(msg) & set(filename)) + if similarity >= 2: + img = CARD_DATA[filename] + break + else: + return None + + with open(img, 'rb') as f: + return f.read() diff --git a/GenshinUID/genshinuid_guide/get_guide.py b/GenshinUID/genshinuid_guide/get_guide.py new file mode 100644 index 00000000..e436f4d4 --- /dev/null +++ b/GenshinUID/genshinuid_guide/get_guide.py @@ -0,0 +1,18 @@ +from typing import Optional + +from ..utils.resource.RESOURCE_PATH import GUIDE_PATH +from ..utils.map.name_covert import alias_to_char_name + + +async def get_gs_guide(msg: str) -> Optional[bytes]: + if not msg: + return None + name = await alias_to_char_name(msg) + if name.startswith('旅行者'): + name = f'{name[:3]}-{name[-1]}' + img = GUIDE_PATH / f'{name}.png' + if img.exists(): + with open(img, 'rb') as f: + return f.read() + else: + return None diff --git a/GenshinUID/genshinuid_guide/review.json b/GenshinUID/genshinuid_guide/review.json new file mode 100644 index 00000000..7f12a2c3 --- /dev/null +++ b/GenshinUID/genshinuid_guide/review.json @@ -0,0 +1 @@ +{"3.4": {"9": {"9-1上": ["有翼冰本真蕈", "大型水史莱姆", "伸缩火蕈兽", "伸缩岩蕈兽", "旋转雷蕈兽", "旋转冰蕈兽", "浮游水蕈兽", "浮游草蕈兽", "水史莱姆"], "9-1下": ["镀金旅团·沙中净水", "镀金旅团·刀舞者", "镀金旅团·破阵者", "镀金旅团·鸦喙戟手", "镀金旅团·机弩兵", "镀金旅团·阵前斧手"], "9-2上": ["木盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘暴徒", "雷斧丘丘暴徒", "岩丘丘萨满", "冰丘丘萨满", "木盾丘丘人", "冲锋丘丘人", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人", "爆弹丘丘人", "冰弹丘丘人", "雷弹丘丘人"], "9-2下": ["水深渊法师", "草丘丘萨满", "大型水史莱姆", "大型火史莱姆"], "9-3上": ["陆行水本真蕈", "有翼草本真蕈", "旋转雷蕈兽", "浮游草蕈兽"], "9-3下": ["镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "镀金旅团·破阵者"]}, "10": {"10-1上": ["有翼冰本真蕈", "大型雷史莱姆", "变异雷史莱姆", "旋转冰蕈兽", "旋转雷蕈兽", "浮游草蕈兽", "雷史莱姆"], "10-1下": ["深海龙蜥·原种"], "10-2上": ["海乱鬼·雷腾", "海乱鬼·炎威", "镀金旅团·机弩兵"], "10-2下": ["雷深渊法师", "丘丘雷兜王"], "10-3上": ["镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "愚人众先遣队·火铳游击兵", "愚人众先遣队·水铳重卫士"], "10-3下": ["愚人众·藏镜仕女", "愚人众·雷萤术士"]}, "11": {"11-1上": ["镀金旅团·魔岩役使", "镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "镀金旅团·机弩兵", "镀金旅团·鸦喙戟手", "镀金旅团·破阵者", "镀金旅团·刀舞者", "盗宝团·粉碎者", "盗宝团·水之药剂师"], "11-1下": ["丘丘雷兜王", "火斧丘丘暴徒", "雷斧丘丘暴徒"], "11-2上": ["陆行岩本真蕈", "陆行水本真蕈", "有翼草本真蕈", "有翼冰本真蕈", "深海龙蜥幼体·啮冰", "深海龙蜥幼体·吞雷"], "11-2下": ["深渊使徒·激流", "圣骸飞蛇"], "11-3上": ["海乱鬼·雷腾", "海乱鬼·炎威", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番", "大型火史莱姆", "大型水史莱姆", "大型雷史莱姆", "变异雷史莱姆"], "11-3下": ["掣电树"]}, "12": {"12-1上": ["遗迹龙兽·地巡", "遗迹重机", "遗迹守卫"], "12-1下": ["镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "火深渊法师", "冰深渊法师", "雷深渊法师", "冰霜骗骗花", "炽热骗骗花", "电气骗骗花"], "12-2上": ["圣骸赤鹫", "圣骸毒蝎", "海乱鬼·雷腾", "野伏·阵刀番"], "12-2下": ["魔偶剑鬼·孤风", "魔偶剑鬼·凶面", "魔偶剑鬼·霜驰"], "12-3上": ["半永恒统辖矩阵"], "12-3下": ["镀金旅团·灵风猎手", "镀金旅团·炽沙叙事人", "镀金旅团·叶轮舞者", "镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷"]}}, "3.3": {"9": {"9-1上": ["有翼冰本真蕈", "大型水史莱姆", "伸缩火蕈兽", "伸缩岩蕈兽", "旋转雷蕈兽", "旋转冰蕈兽", "浮游水蕈兽", "浮游草蕈兽", "水史莱姆"], "9-1下": ["镀金旅团·沙中净水", "镀金旅团·刀舞者", "镀金旅团·破阵者", "镀金旅团·鸦喙戟手", "镀金旅团·机弩兵", "镀金旅团·阵前斧手"], "9-2上": ["木盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘暴徒", "雷斧丘丘暴徒", "岩丘丘萨满", "冰丘丘萨满", "木盾丘丘人", "冲锋丘丘人", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人", "爆弹丘丘人", "冰弹丘丘人", "雷弹丘丘人"], "9-2下": ["水深渊法师", "草丘丘萨满", "大型水史莱姆", "大型火史莱姆"], "9-3上": ["陆行水本真蕈", "有翼草本真蕈", "旋转雷蕈兽", "浮游草蕈兽"], "9-3下": ["镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "镀金旅团·破阵者"]}, "10": {"10-1上": ["有翼冰本真蕈", "大型雷史莱姆", "变异雷史莱姆", "旋转冰蕈兽", "旋转雷蕈兽", "浮游草蕈兽", "雷史莱姆"], "10-1下": ["深海龙蜥·原种"], "10-2上": ["海乱鬼·雷腾", "海乱鬼·炎威", "镀金旅团·机弩兵"], "10-2下": ["雷深渊法师", "丘丘雷兜王"], "10-3上": ["镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "愚人众先遣队·火铳游击兵", "愚人众先遣队·水铳重卫士"], "10-3下": ["愚人众·藏镜仕女", "愚人众·雷萤术士"]}, "11": {"11-1上": ["水飘浮灵", "冰飘浮灵", "火飘浮灵", "大型冰史莱姆", "大型水史莱姆", "大型火史莱姆", "冰史莱姆", "水史莱姆", "火史莱姆"], "11-1下": ["元能构装体·力场发生器", "元能构装体·重塑仪", "元能构装体·勘探机"], "11-2上": ["深渊咏者·渊火", "火深渊法师", "冰深渊法师", "水深渊法师"], "11-2下": ["遗迹龙兽·地巡", "遗迹歼击者"], "11-3上": ["愚人众·藏镜仕女", "愚人众先遣队·火铳游击兵", "愚人众先遣队·冰铳重卫士", "有翼草本真蕈", "有翼冰本真蕈", "陆行水本真蕈", "陆行岩本真蕈"], "11-3下": ["遗迹龙兽·空巡"]}, "12": {"12-1上": ["恒常机关阵列"], "12-1下": ["镀金旅团·魔岩役使", "愚人众先遣队·岩使游击兵", "镀金旅团·沙中净水", "镀金旅团·炽阳凝冰"], "12-2上": ["镀金旅团·灵风猎手", "元能构装体·力场发生器", "元能构装体·重塑仪", "元能构装体·勘探机"], "12-2下": ["黄金王兽"], "12-3上": ["翠翎恐蕈"], "12-3下": ["嗜岩·兽境猎犬", "嗜岩·兽境幼兽"]}}, "3.2": {"9": {"9-1上": ["有翼冰本真蕈", "大型水史莱姆", "伸缩火蕈兽", "伸缩岩蕈兽", "旋转雷蕈兽", "旋转冰蕈兽", "浮游水蕈兽", "浮游草蕈兽", "水史莱姆"], "9-1下": ["镀金旅团·沙中净水", "镀金旅团·刀舞者", "镀金旅团·破阵者", "镀金旅团·鸦喙戟手", "镀金旅团·机弩兵", "镀金旅团·阵前斧手"], "9-2上": ["木盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘暴徒", "雷斧丘丘暴徒", "岩丘丘萨满", "冰丘丘萨满", "木盾丘丘人", "冲锋丘丘人", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人", "爆弹丘丘人", "冰弹丘丘人", "雷弹丘丘人"], "9-2下": ["水深渊法师", "草丘丘萨满", "大型水史莱姆", "大型火史莱姆"], "9-3上": ["陆行水本真蕈", "有翼草本真蕈", "旋转雷蕈兽", "浮游草蕈兽"], "9-3下": ["镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "镀金旅团·破阵者"]}, "10": {"10-1上": ["有翼冰本真蕈", "大型雷史莱姆", "变异雷史莱姆", "旋转冰蕈兽", "旋转雷蕈兽", "浮游草蕈兽", "雷史莱姆"], "10-1下": ["深海龙蜥·原种"], "10-2上": ["海乱鬼·雷腾", "海乱鬼·炎威", "镀金旅团·机弩兵"], "10-2下": ["雷深渊法师", "丘丘雷兜王"], "10-3上": ["镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "愚人众先遣队·火铳游击兵", "愚人众先遣队·水铳重卫士"], "10-3下": ["愚人众·藏镜仕女", "愚人众·雷萤术士"]}, "11": {"11-1上": ["水飘浮灵", "岩飘浮灵", "风飘浮灵", "冰飘浮灵"], "11-1下": ["愚人众·火之债务处理人", "镀金旅团·白日鸣雷", "镀金旅团·阵前斧手", "镀金旅团·机弩兵", "镀金旅团·鸦喙戟手", "镀金旅团·破阵者", "镀金旅团·刀舞者"], "11-2上": ["遗迹龙兽·空巡"], "11-2下": ["愚人众·藏镜仕女", "盗宝团·火之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番"], "11-3上": ["岩龙蜥"], "11-3下": ["无相之草"]}, "12": {"12-1上": ["嗜雷·兽境猎犬", "嗜雷·兽境幼兽"], "12-1下": ["雷音权现"], "12-2上": ["黑蛇骑士·斩风之剑", "黯色空壳·旗令", "黯色空壳·破阵", "黯色空壳·近卫"], "12-2下": ["丘丘霜铠王", "丘丘雷兜王"], "12-3上": ["兆载永劫龙兽"], "12-3下": ["镀金旅团·灵风猎手", "愚人众先遣队·风拳前锋军", "镀金旅团·魔岩役使", "愚人众先遣队·岩使游击兵"]}}, "3.1": {"9": {"9-1上": ["有翼冰本真蕈", "大型水史莱姆", "伸缩火蕈兽", "伸缩岩蕈兽", "旋转雷蕈兽", "旋转冰蕈兽", "浮游水蕈兽", "浮游草蕈兽", "水史莱姆"], "9-1下": ["镀金旅团·沙中净水", "镀金旅团·刀舞者", "镀金旅团·破阵者", "镀金旅团·鸦喙戟手", "镀金旅团·机弩兵", "镀金旅团·阵前斧手"], "9-2上": ["木盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘暴徒", "雷斧丘丘暴徒", "岩丘丘萨满", "冰丘丘萨满", "木盾丘丘人", "冲锋丘丘人", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人", "爆弹丘丘人", "冰弹丘丘人", "雷弹丘丘人"], "9-2下": ["水深渊法师", "草丘丘萨满", "大型水史莱姆", "大型火史莱姆"], "9-3上": ["陆行水本真蕈", "有翼草本真蕈", "旋转雷蕈兽", "浮游草蕈兽"], "9-3下": ["镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "镀金旅团·破阵者"]}, "10": {"10-1上": ["有翼冰本真蕈", "大型雷史莱姆", "变异雷史莱姆", "旋转冰蕈兽", "旋转雷蕈兽", "浮游草蕈兽", "雷史莱姆"], "10-1下": ["深海龙蜥·原种"], "10-2上": ["海乱鬼·雷腾", "海乱鬼·炎威", "镀金旅团·机弩兵"], "10-2下": ["雷深渊法师", "丘丘雷兜王"], "10-3上": ["镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "愚人众先遣队·火铳游击兵", "愚人众先遣队·水铳重卫士"], "10-3下": ["愚人众·藏镜仕女", "愚人众·雷萤术士"]}, "11": {"11-1上": ["陆行岩本真蕈", "陆行水本真蕈", "有翼冰本真蕈", "浮游草蕈兽", "浮游风蕈兽", "伸缩雷蕈兽", "旋转火蕈兽", "旋转冰蕈兽", "伸缩风蕈兽"], "11-1下": ["镀金旅团·魔岩役使", "元能构装体·勘探机", "元能构装体·力场发生器"], "11-2上": ["愚人众先遣队·火铳游击兵", "镀金旅团·沙中净水", "镀金旅团·机弩兵"], "11-2下": ["愚人众·藏镜仕女", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军", "镀金旅团·白日鸣雷", "镀金旅团·机弩兵"], "11-3上": ["镀金旅团·沙中净水", "海乱鬼·雷腾", "海乱鬼·炎威", "镀金旅团·机弩兵", "野伏·火付番", "野伏·机巧番"], "11-3下": ["翠翎恐蕈"]}, "12": {"12-1上": ["镀金旅团·沙中净水", "海乱鬼·雷腾", "海乱鬼·炎威", "镀金旅团·阵前斧手", "镀金旅团·鸦喙戟手", "镀金旅团·破阵者", "镀金旅团·刀舞者"], "12-1下": ["镀金旅团·魔岩役使", "镀金旅团·灵风猎手", "元能构装体·力场发生器", "元能构装体·重塑仪", "元能构装体·勘探机"], "12-2上": ["遗迹龙兽·地巡", "遗迹歼击者", "遗迹侦察者"], "12-2下": ["魔偶剑鬼"], "12-3上": ["深海龙蜥幼体·原种"], "12-3下": ["半永恒统辖矩阵"]}}, "3.0": {"9": {"9-1上": ["有翼冰本真蕈", "大型水史莱姆", "伸缩火蕈兽", "伸缩岩蕈兽", "旋转雷蕈兽", "旋转冰蕈兽", "浮游水蕈兽", "浮游草蕈兽", "水史莱姆"], "9-1下": ["镀金旅团·沙中净水", "镀金旅团·刀舞者", "镀金旅团·破阵者", "镀金旅团·鸦喙戟手", "镀金旅团·机弩兵", "镀金旅团·阵前斧手"], "9-2上": ["木盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘暴徒", "雷斧丘丘暴徒", "岩丘丘萨满", "冰丘丘萨满", "木盾丘丘人", "冲锋丘丘人", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人", "爆弹丘丘人", "冰弹丘丘人", "雷弹丘丘人"], "9-2下": ["水深渊法师", "草丘丘萨满", "大型水史莱姆", "大型火史莱姆"], "9-3上": ["陆行水本真蕈", "有翼草本真蕈", "旋转雷蕈兽", "浮游草蕈兽"], "9-3下": ["镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "镀金旅团·破阵者"]}, "10": {"10-1上": ["有翼冰本真蕈", "大型雷史莱姆", "变异雷史莱姆", "旋转冰蕈兽", "旋转雷蕈兽", "浮游草蕈兽", "雷史莱姆"], "10-1下": ["深海龙蜥·原种"], "10-2上": ["海乱鬼·雷腾", "海乱鬼·炎威", "镀金旅团·机弩兵"], "10-2下": ["雷深渊法师", "丘丘雷兜王"], "10-3上": ["镀金旅团·沙中净水", "镀金旅团·炽阳凝冰", "镀金旅团·白日鸣雷", "愚人众先遣队·火铳游击兵", "愚人众先遣队·水铳重卫士"], "10-3下": ["愚人众·藏镜仕女", "愚人众·雷萤术士"]}, "11": {"11-1上": ["镀金旅团·白日鸣雷", "镀金旅团·阵前斧手", "镀金旅团·机弩兵", "镀金旅团·鸦喙戟手", "镀金旅团·破阵者", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "11-1下": ["丘丘雷兜王", "木盾丘丘暴徒", "火斧丘丘暴徒", "雷斧丘丘暴徒"], "11-2上": ["幻形雀·水", "幻形蛙·水", "幻形豕兽·水", "幻形鹤·水", "幻形蟹·水", "幻形游禽·水", "幻形花鼠·水", "幻形飞鸢·水"], "11-2下": ["岩龙蜥"], "11-3上": ["愚人众·火之债务处理人", "愚人众先遣队·火铳游击兵", "镀金旅团·沙中净水", "镀金旅团·白日鸣雷", "镀金旅团·机弩兵"], "11-3下": ["掣电树"]}, "12": {"12-1上": ["遗迹龙兽·空巡", "遗迹龙兽·地巡"], "12-1下": ["愚人众先遣队·雷锤前锋军", "愚人众先遣队·火铳游击兵", "镀金旅团·炽阳凝冰", "镀金旅团·沙中净水", "镀金旅团·机弩兵"], "12-2上": ["愚人众·藏镜仕女", "愚人众·雷萤术士", "镀金旅团·机弩兵"], "12-2下": ["古岩龙蜥"], "12-3上": ["有翼草本真蕈", "有翼冰本真蕈", "陆行水本真蕈", "深海龙蜥·原种", "深海龙蜥幼体·啮冰", "深海龙蜥幼体·吞雷"], "12-3下": ["翠翎恐蕈"]}}, "2.8": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["冰盾丘丘暴徒", "冰飘浮灵", "水飘浮灵", "大型冰史莱姆", "冰史莱姆"], "11-1下": ["盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "11-2上": ["深海龙蜥幼体·啮冰", "深海龙蜥幼体·吞雷", "冰飘浮灵", "雷飘浮灵", "水飘浮灵"], "11-2下": ["愚人众·火之债务处理人", "愚人众·冰萤术士", "愚人众·雷萤术士", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·火铳游击兵"], "11-3上": ["雷音权现"], "11-3下": ["冰深渊法师", "水深渊法师", "雷深渊法师"]}, "12": {"12-1上": ["丘丘霜铠王", "冰盾丘丘暴徒", "冰丘丘萨满", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人", "冰盾丘丘人"], "12-1下": ["海乱鬼·雷腾", "海乱鬼·炎威", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番"], "12-2上": ["无相之冰"], "12-2下": ["遗迹重机", "遗迹巡弋者", "遗迹歼击者", "遗迹侦察者"], "12-3上": ["愚人众·藏镜仕女", "愚人众先遣队·冰铳重卫士"], "12-3下": ["遗迹巨蛇"]}}, "2.7": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["丘丘岩盔王", "岩盾丘丘暴徒", "岩盾丘丘人"], "11-1下": ["海乱鬼·雷腾", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番", "盗宝团·粉碎者", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师"], "11-2上": ["冰深渊法师", "丘丘霜铠王", "冰盾丘丘暴徒"], "11-2下": ["愚人众·藏镜仕女", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·水铳重卫士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·风拳前锋军"], "11-3上": ["嗜岩·兽境猎犬", "嗜岩·兽境幼兽"], "11-3下": ["丘丘雷兜王", "深海龙蜥幼体·啮冰", "深海龙蜥幼体·吞雷"]}, "12": {"12-1上": ["岩龙蜥", "冰霜骗骗花", "电气骗骗花"], "12-1下": ["遗迹重机", "遗迹守卫"], "12-2上": ["丘丘霜铠王", "冰盾丘丘暴徒", "大型冰史莱姆"], "12-2下": ["魔偶剑鬼"], "12-3上": ["深海龙蜥幼体·原种"], "12-3下": ["恒常机关阵列"]}}, "2.6": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["火斧丘丘暴徒", "雷斧丘丘暴徒", "水丘丘萨满", "风丘丘萨满", "打手丘丘人", "冲锋丘丘人", "爆弹丘丘人", "冰弹丘丘人", "火箭丘丘人", "雷箭丘丘人"], "11-1下": ["盗宝团·海上男儿", "盗宝团·掘墓者", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·神射手", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "11-2上": ["愚人众先遣队·火铳游击兵", "愚人众先遣队·冰铳重卫士", "火深渊法师", "大型火史莱姆", "大型雷史莱姆", "变异雷史莱姆"], "11-2下": ["愚人众先遣队·雷锤前锋军", "愚人众先遣队·水铳重卫士", "水深渊法师", "大型水史莱姆", "大型雷史莱姆", "变异雷史莱姆"], "11-3上": ["愚人众·火之债务处理人", "嗜雷·兽境幼兽"], "11-3下": ["愚人众·藏镜仕女", "愚人众·雷萤术士", "嗜岩·兽境幼兽"]}, "12": {"12-1上": ["海乱鬼·雷腾", "海乱鬼·炎威", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "12-1下": ["遗迹守卫"], "12-2上": ["冰霜骗骗花", "炽热骗骗花"], "12-2下": ["深渊咏者·渊火", "深渊咏者·紫电", "深渊使徒·激流"], "12-3上": ["深渊咏者·渊火"], "12-3下": ["深渊使徒·激流"]}}, "2.5": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["深渊使徒·激流", "冰深渊法师"], "11-1下": ["岩龙蜥", "炽热骗骗花", "电气骗骗花"], "11-2上": ["水深渊法师", "水飘浮灵", "冰飘浮灵", "大型冰史莱姆", "大型水史莱姆"], "11-2下": ["火深渊法师", "草丘丘萨满", "火飘浮灵", "雷飘浮灵", "大型雷史莱姆", "变异雷史莱姆", "大型火史莱姆"], "11-3上": ["嗜雷·兽境猎犬", "嗜雷·兽境幼兽"], "11-3下": ["深渊咏者·渊火", "深渊咏者·紫电"]}, "12": {"12-1上": ["嗜雷·兽境猎犬", "嗜雷·兽境幼兽"], "12-1下": ["深海龙蜥·原种", "深海龙蜥幼体·原种", "深海龙蜥幼体·啮冰"], "12-2上": ["遗迹重机"], "12-2下": ["黄金王兽"], "12-3上": ["遗迹歼击者", "遗迹侦察者"], "12-3下": ["深海龙蜥·啮冰", "深海龙蜥·吞雷"]}}, "2.4": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["遗迹巡弋者", "遗迹歼击者"], "11-1下": ["雷深渊法师", "丘丘雷兜王", "雷弹丘丘人", "爆弹丘丘人", "火箭丘丘人"], "11-2上": ["大型火史莱姆", "大型雷史莱姆", "火飘浮灵", "雷飘浮灵"], "11-2下": ["幻形豕兽·水", "幻形鹤·水", "幻形蟹·水", "幻形雀·水", "幻形游禽·水", "幻形花鼠·水", "幻形蛙·水", "幻形飞鸢·水"], "11-3上": ["愚人众·藏镜仕女", "海乱鬼·雷腾", "海乱鬼·炎威"], "11-3下": ["雷音权现"]}, "12": {"12-1上": ["恒常机关阵列"], "12-1下": ["深渊咏者·渊火", "草丘丘萨满", "火深渊法师", "嗜岩·兽境幼兽"], "12-2上": ["古岩龙蜥"], "12-2下": ["深渊使徒·激流"], "12-3上": ["遗迹守卫", "遗迹重机"], "12-3下": ["魔偶剑鬼"]}}, "2.3": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["岩盾丘丘暴徒", "雷丘丘萨满", "水丘丘萨满", "冲锋丘丘人", "岩盾丘丘人", "打手丘丘人", "雷弹丘丘人", "爆弹丘丘人", "冰箭丘丘人", "火箭丘丘人"], "11-1下": ["野伏·阵刀番", "野伏·火付番", "野伏·机巧番", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·粉碎者", "盗宝团·神射手", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "11-2上": ["丘丘霜铠王", "大型火史莱姆", "大型冰史莱姆", "大型水史莱姆"], "11-2下": ["海乱鬼·雷腾", "海乱鬼·炎威", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番"], "11-3上": ["幻形蛙·水", "幻形雀·水", "幻形豕兽·水", "幻形花鼠·水", "幻形蟹·水", "幻形鹤·水", "水飘浮灵", "风飘浮灵"], "11-3下": ["遗迹巡弋者", "遗迹防卫者", "遗迹侦察者"]}, "12": {"12-1上": ["嗜雷·兽境猎犬", "嗜雷·兽境幼兽"], "12-1下": ["嗜岩·兽境猎犬", "嗜岩·兽境幼兽"], "12-2上": ["岩龙蜥"], "12-2下": ["魔偶剑鬼·孤风", "魔偶剑鬼·霜驰", "魔偶剑鬼·凶面"], "12-3上": ["嗜雷·兽境猎犬", "遗迹巡弋者", "遗迹防卫者"], "12-3下": ["嗜岩·兽境猎犬", "嗜岩·兽境幼兽", "遗迹守卫"]}}, "2.2": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["雷深渊法师", "水深渊法师", "电气骗骗花", "大型水史莱姆"], "11-1下": ["火深渊法师", "雷斧丘丘暴徒", "炽热骗骗花", "大型火史莱姆"], "11-2上": ["愚人众·雷萤术士", "愚人众·冰萤术士", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·风拳前锋军"], "11-2下": ["海乱鬼·雷腾", "海乱鬼·炎威", "野伏·火付番", "野伏·机巧番"], "11-3上": ["无相之水"], "11-3下": ["无相之火"]}, "12": {"12-1上": ["愚人众·火之债务处理人", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番"], "12-1下": ["岩龙蜥", "幻形豕兽·水", "幻形花鼠·水"], "12-2上": ["魔偶剑鬼"], "12-2下": ["愚人众·藏镜仕女", "愚人众·冰萤术士", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "12-3上": ["遗迹守卫", "遗迹猎者", "遗迹巡弋者", "遗迹歼击者"], "12-3下": ["遗迹守卫", "遗迹重机", "遗迹巡弋者", "遗迹防卫者"]}}, "2.1": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["火斧丘丘暴徒", "雷弹丘丘人", "冲锋丘丘人"], "11-1下": ["火深渊法师", "草丘丘萨满", "火箭丘丘人", "爆弹丘丘人"], "11-2上": ["愚人众先遣队·火铳游击兵", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·斥候"], "11-2下": ["海乱鬼·炎威", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "11-3上": ["愚人众·火之债务处理人", "愚人众·冰萤术士", "愚人众·雷萤术士"], "11-3下": ["岩龙蜥", "大型火史莱姆"]}, "12": {"12-1上": ["野伏·火付番", "野伏·机巧番", "盗宝团·掘墓者", "盗宝团·杂工", "盗宝团·海上男儿", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "12-1下": ["丘丘岩盔王", "狂风之核", "风飘浮灵", "岩飘浮灵"], "12-2上": ["魔偶剑鬼"], "12-2下": ["愚人众·藏镜仕女", "愚人众·冰萤术士"], "12-3上": ["遗迹守卫"], "12-3下": ["恒常机关阵列"]}}, "2.0": {"9": {"9-1上": ["木盾丘丘暴徒", "风丘丘萨满", "水丘丘萨满", "雷箭丘丘人", "冰箭丘丘人", "大型水史莱姆"], "9-1下": ["水深渊法师", "雷丘丘萨满", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "9-2上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-2下": ["盗宝团·杂工", "盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师", "盗宝团·神射手"], "9-3上": ["丘丘霜铠王", "丘丘岩盔王"], "9-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "10": {"10-1上": ["雷深渊法师", "草丘丘萨满", "风丘丘萨满", "水丘丘萨满", "火斧丘丘暴徒", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "10-1下": ["丘丘岩盔王", "火箭丘丘人", "冰箭丘丘人"], "10-2上": ["愚人众·火之债务处理人", "愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "10-2下": ["愚人众·雷萤术士", "愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵"], "10-3上": ["深渊咏者·紫电", "风丘丘萨满", "水丘丘萨满"], "10-3下": ["深渊使徒·激流", "雷丘丘萨满"]}, "11": {"11-1上": ["雷斧丘丘暴徒", "火斧丘丘暴徒", "电气骗骗花", "大型雷史莱姆", "变异雷史莱姆", "大型水史莱姆"], "11-1下": ["丘丘雷兜王", "雷深渊法师"], "11-2上": ["丘丘霜铠王", "冰深渊法师", "水深渊法师"], "11-2下": ["深渊咏者·紫电", "雷深渊法师", "火深渊法师"], "11-3上": ["无相之冰"], "11-3下": ["无相之火"]}, "12": {"12-1上": ["海乱鬼·雷腾", "海乱鬼·炎威", "野伏·阵刀番", "野伏·火付番", "野伏·机巧番"], "12-1下": ["愚人众·藏镜仕女", "愚人众·火之债务处理人", "愚人众·雷萤术士"], "12-2上": ["水深渊法师", "丘丘雷兜王", "雷斧丘丘暴徒", "火斧丘丘暴徒"], "12-2下": ["魔偶剑鬼"], "12-3上": ["遗迹猎者", "遗迹巡弋者", "遗迹防卫者", "遗迹侦察者"], "12-3下": ["遗迹守卫", "遗迹歼击者", "遗迹侦察者"]}}, "1.6": {"9": {"9-1上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰霜骗骗花"], "9-1下": ["冰深渊法师", "冰盾丘丘暴徒", "冰丘丘萨满", "冰箭丘丘人", "雷箭丘丘人"], "9-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人", "冰霜骗骗花"], "9-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-3上": ["丘丘霜铠王", "冰丘丘萨满", "冰箭丘丘人", "雷箭丘丘人"], "9-3下": ["冰深渊法师", "水深渊法师", "冰盾丘丘暴徒"]}, "10": {"10-1上": ["水深渊法师", "冰霜骗骗花", "冰弹丘丘人", "大型冰史莱姆", "大型水史莱姆"], "10-1下": ["深渊使徒·激流", "冰深渊法师"], "10-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人", "风丘丘萨满", "水丘丘萨满"], "10-2下": ["深渊咏者·紫电", "冰深渊法师"], "10-3上": ["无相之冰"], "10-3下": ["丘丘霜铠王", "水深渊法师"]}, "11": {"11-1上": ["火斧丘丘暴徒", "木盾丘丘暴徒", "冲锋丘丘人", "木盾丘丘人", "火箭丘丘人", "冰箭丘丘人", "雷箭丘丘人"], "11-1下": ["丘丘岩盔王", "岩盾丘丘人", "冰弹丘丘人", "爆弹丘丘人"], "11-2上": ["愚人众先遣队·火铳游击兵", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军"], "11-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·水铳重卫士", "愚人众先遣队·岩使游击兵"], "11-3上": ["遗迹猎者", "遗迹守卫"], "11-3下": ["深渊咏者·紫电", "深渊使徒·激流"]}, "12": {"12-1上": ["岩龙蜥"], "12-1下": ["岩龙蜥"], "12-2上": ["愚人众·冰萤术士", "盗宝团·海上男儿", "盗宝团·掘墓者", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "12-2下": ["丘丘岩盔王", "幼岩龙蜥"], "12-3上": ["深渊咏者·紫电", "火深渊法师", "水深渊法师"], "12-3下": ["深渊使徒·激流", "火深渊法师", "冰深渊法师"]}}, "1.5": {"9": {"9-1上": ["冰盾丘丘暴徒", "冰盾丘丘人", "大型冰史莱姆"], "9-1下": ["冰深渊法师", "冰盾丘丘暴徒", "冰丘丘萨满", "冰箭丘丘人"], "9-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人", "大型冰史莱姆"], "9-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军"], "9-3上": ["丘丘霜铠王", "冰箭丘丘人"], "9-3下": ["冰深渊法师", "冰盾丘丘暴徒"]}, "10": {"10-1上": ["冰深渊法师", "冰弹丘丘人", "大型冰史莱姆"], "10-1下": ["愚人众·雷萤术士", "冰深渊法师", "水丘丘萨满"], "10-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人"], "10-2下": ["愚人众·冰萤术士", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "10-3上": ["愚人众·冰萤术士", "愚人众·火之债务处理人"], "10-3下": ["丘丘霜铠王"]}, "11": {"11-1上": ["盗宝团·粉碎者", "盗宝团·拳术家", "盗宝团·神射手"], "11-1下": ["盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·杂工", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "11-2上": ["愚人众先遣队·雷锤前锋军", "愚人众先遣队·水铳重卫士", "愚人众先遣队·风拳前锋军"], "11-2下": ["愚人众先遣队·雷锤前锋军", "愚人众先遣队·水铳重卫士", "愚人众先遣队·岩使游击兵"], "11-3上": ["愚人众·雷萤术士", "愚人众·冰萤术士"], "11-3下": ["深渊使徒·激流"]}, "12": {"12-1上": ["岩龙蜥", "炽热骗骗花"], "12-1下": ["岩龙蜥", "冰霜骗骗花"], "12-2上": ["盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师", "盗宝团·雷之药剂师", "雷萤", "水萤", "冰萤"], "12-2下": ["火深渊法师", "水深渊法师", "幻形豕兽·水", "幻形鹤·水", "幻形蟹·水", "幻形游禽·水", "幻形花鼠·水"], "12-3上": ["深渊咏者·紫电"], "12-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士", "愚人众·冰萤术士"]}}, "1.4": {"9": {"9-1上": ["冰盾丘丘暴徒", "冰盾丘丘人", "大型冰史莱姆"], "9-1下": ["冰深渊法师", "冰盾丘丘暴徒", "冰丘丘萨满", "冰箭丘丘人"], "9-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人", "大型冰史莱姆"], "9-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军"], "9-3上": ["丘丘霜铠王", "冰箭丘丘人"], "9-3下": ["冰深渊法师", "冰盾丘丘暴徒"]}, "10": {"10-1上": ["冰深渊法师", "冰弹丘丘人", "大型冰史莱姆"], "10-1下": ["愚人众·雷萤术士", "冰深渊法师", "水丘丘萨满"], "10-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人"], "10-2下": ["愚人众·冰萤术士", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "10-3上": ["愚人众·冰萤术士", "愚人众·火之债务处理人"], "10-3下": ["丘丘霜铠王"]}, "11": {"11-1上": ["水深渊法师", "大型雷史莱姆", "变异雷史莱姆", "大型水史莱姆"], "11-1下": ["岩盾丘丘暴徒", "火斧丘丘暴徒"], "11-2上": ["木盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘人", "冲锋丘丘人", "雷箭丘丘人", "火箭丘丘人"], "11-2下": ["愚人众·雷萤术士", "愚人众·火之债务处理人", "盗宝团·掘墓者", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师"], "11-3上": ["愚人众先遣队·风拳前锋军", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·水铳重卫士"], "11-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "12": {"12-1上": ["岩龙蜥"], "12-1下": ["岩龙蜥"], "12-2上": ["愚人众·雷萤术士", "愚人众·冰萤术士"], "12-2下": ["愚人众·火之债务处理人", "盗宝团·掘墓者"], "12-3上": ["遗迹守卫"], "12-3下": ["遗迹重机"]}}, "1.3": {"9": {"9-1上": ["冰盾丘丘暴徒", "冰盾丘丘人", "大型冰史莱姆"], "9-1下": ["冰深渊法师", "冰盾丘丘暴徒", "冰丘丘萨满", "冰箭丘丘人"], "9-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人", "大型冰史莱姆"], "9-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军"], "9-3上": ["丘丘霜铠王", "冰箭丘丘人"], "9-3下": ["冰深渊法师", "冰盾丘丘暴徒"]}, "10": {"10-1上": ["冰深渊法师", "冰弹丘丘人", "大型冰史莱姆"], "10-1下": ["愚人众·雷萤术士", "冰深渊法师", "水丘丘萨满"], "10-2上": ["冰盾丘丘暴徒", "冰盾丘丘人", "冰弹丘丘人"], "10-2下": ["愚人众·冰萤术士", "盗宝团·雷之药剂师", "盗宝团·冰之药剂师"], "10-3上": ["愚人众·冰萤术士", "愚人众·火之债务处理人"], "10-3下": ["丘丘霜铠王"]}, "11": {"11-1上": ["水深渊法师", "大型雷史莱姆", "变异雷史莱姆", "大型水史莱姆"], "11-1下": ["岩盾丘丘暴徒", "火斧丘丘暴徒"], "11-2上": ["木盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘人", "冲锋丘丘人", "雷箭丘丘人", "火箭丘丘人"], "11-2下": ["愚人众·雷萤术士", "愚人众·火之债务处理人", "盗宝团·掘墓者", "盗宝团·拳术家", "盗宝团·粉碎者", "盗宝团·火之药剂师", "盗宝团·水之药剂师"], "11-3上": ["愚人众先遣队·风拳前锋军", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·水铳重卫士"], "11-3下": ["愚人众·火之债务处理人", "愚人众·雷萤术士"]}, "12": {"12-1上": ["岩盾丘丘暴徒", "火斧丘丘暴徒", "岩盾丘丘人"], "12-1下": ["遗迹守卫", "狂风之核"], "12-2上": ["盗宝团·掘墓者", "盗宝团·海上男儿", "盗宝团·杂工", "盗宝团·拳术家", "盗宝团·粉碎者"], "12-2下": ["愚人众·火之债务处理人"], "12-3上": ["愚人众·雷萤术士", "岩盾丘丘暴徒", "盗宝团·火之药剂师", "盗宝团·冰之药剂师"], "12-3下": ["愚人众·火之债务处理人", "岩盾丘丘暴徒"]}}, "1.2": {"9": {"9-1上": ["大型火史莱姆", "大型雷史莱姆", "变异雷史莱姆"], "9-1下": ["大型雷史莱姆", "变异雷史莱姆", "大型火史莱姆"], "9-2上": ["愚人众·雷萤术士", "盗宝团·海上男儿", "盗宝团·雷之药剂师", "盗宝团·火之药剂师", "盗宝团·冰之药剂师", "盗宝团·斥候"], "9-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-3上": ["幼岩龙蜥", "丘丘岩盔王"], "9-3下": ["遗迹守卫"]}, "10": {"10-1上": ["火斧丘丘暴徒", "大型火史莱姆", "冲锋丘丘人"], "10-1下": ["火深渊法师", "火斧丘丘暴徒"], "10-2上": ["火斧丘丘暴徒", "炽热骗骗花", "爆弹丘丘人", "打手丘丘人"], "10-2下": ["火深渊法师", "火斧丘丘暴徒", "火箭丘丘人"], "10-3上": ["愚人众先遣队·风拳前锋军", "愚人众先遣队·火铳游击兵"], "10-3下": ["火深渊法师", "草丘丘萨满", "火箭丘丘人", "炽热骗骗花"]}, "11": {"11-1上": ["大型冰史莱姆", "大型雷史莱姆", "变异雷史莱姆", "冰箭丘丘人", "木盾丘丘人"], "11-1下": ["愚人众·雷萤术士", "冰深渊法师", "水丘丘萨满", "冰箭丘丘人", "雷箭丘丘人"], "11-2上": ["火斧丘丘暴徒", "岩盾丘丘暴徒", "爆弹丘丘人", "岩盾丘丘人"], "11-2下": ["火斧丘丘暴徒", "岩盾丘丘暴徒", "大型雷史莱姆", "变异雷史莱姆", "雷箭丘丘人", "冰箭丘丘人"], "11-3上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "11-3下": ["愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军", "愚人众先遣队·岩使游击兵"]}, "12": {"12-1上": ["木盾丘丘暴徒", "大型冰史莱姆", "冰霜骗骗花"], "12-1下": ["冰深渊法师", "大型冰史莱姆", "冰箭丘丘人"], "12-2上": ["冰霜骗骗花", "火箭丘丘人", "冰箭丘丘人"], "12-2下": ["冰深渊法师", "木盾丘丘暴徒", "大型冰史莱姆", "冰箭丘丘人", "雷箭丘丘人", "火箭丘丘人"], "12-3上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军"], "12-3下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军", "愚人众先遣队·岩使游击兵"]}}, "1.1": {"9": {"9-1上": ["大型火史莱姆", "大型雷史莱姆", "变异雷史莱姆"], "9-1下": ["大型雷史莱姆", "变异雷史莱姆", "大型火史莱姆"], "9-2上": ["愚人众·雷萤术士", "盗宝团·海上男儿", "盗宝团·雷之药剂师", "盗宝团·火之药剂师", "盗宝团·冰之药剂师", "盗宝团·斥候"], "9-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-3上": ["幼岩龙蜥", "丘丘岩盔王"], "9-3下": ["遗迹守卫"]}, "10": {"10-1上": ["火斧丘丘暴徒", "大型火史莱姆", "冲锋丘丘人"], "10-1下": ["火深渊法师", "火斧丘丘暴徒"], "10-2上": ["火斧丘丘暴徒", "炽热骗骗花", "爆弹丘丘人", "打手丘丘人"], "10-2下": ["火深渊法师", "火斧丘丘暴徒", "火箭丘丘人"], "10-3上": ["愚人众先遣队·风拳前锋军", "愚人众先遣队·火铳游击兵"], "10-3下": ["火深渊法师", "草丘丘萨满", "火箭丘丘人", "炽热骗骗花"]}, "11": {"11-1上": ["大型冰史莱姆", "大型雷史莱姆", "变异雷史莱姆", "冰箭丘丘人", "木盾丘丘人"], "11-1下": ["愚人众·雷萤术士", "冰深渊法师", "水丘丘萨满", "冰箭丘丘人", "雷箭丘丘人"], "11-2上": ["火斧丘丘暴徒", "岩盾丘丘暴徒", "爆弹丘丘人", "岩盾丘丘人"], "11-2下": ["火斧丘丘暴徒", "岩盾丘丘暴徒", "大型雷史莱姆", "变异雷史莱姆", "雷箭丘丘人", "冰箭丘丘人"], "11-3上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "11-3下": ["愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军", "愚人众先遣队·岩使游击兵"]}, "12": {"12-1上": ["木盾丘丘暴徒", "大型冰史莱姆", "冰霜骗骗花"], "12-1下": ["冰深渊法师", "大型冰史莱姆", "冰箭丘丘人"], "12-2上": ["冰霜骗骗花", "火箭丘丘人", "冰箭丘丘人"], "12-2下": ["冰深渊法师", "木盾丘丘暴徒", "大型冰史莱姆", "冰箭丘丘人", "雷箭丘丘人", "火箭丘丘人"], "12-3上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军"], "12-3下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军", "愚人众先遣队·岩使游击兵"]}}, "1.0": {"9": {"9-1上": ["大型火史莱姆", "大型雷史莱姆", "变异雷史莱姆"], "9-1下": ["大型雷史莱姆", "变异雷史莱姆", "大型火史莱姆"], "9-2上": ["愚人众·雷萤术士", "盗宝团·海上男儿", "盗宝团·雷之药剂师", "盗宝团·火之药剂师", "盗宝团·冰之药剂师", "盗宝团·斥候"], "9-2下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "9-3上": ["幼岩龙蜥", "丘丘岩盔王"], "9-3下": ["遗迹守卫"]}, "10": {"10-1上": ["火斧丘丘暴徒", "大型火史莱姆", "冲锋丘丘人"], "10-1下": ["火深渊法师", "火斧丘丘暴徒"], "10-2上": ["火斧丘丘暴徒", "炽热骗骗花", "爆弹丘丘人", "打手丘丘人"], "10-2下": ["火深渊法师", "火斧丘丘暴徒", "火箭丘丘人"], "10-3上": ["愚人众先遣队·风拳前锋军", "愚人众先遣队·火铳游击兵"], "10-3下": ["火深渊法师", "草丘丘萨满", "火箭丘丘人", "炽热骗骗花"]}, "11": {"11-1上": ["大型冰史莱姆", "大型雷史莱姆", "变异雷史莱姆", "冰箭丘丘人", "木盾丘丘人"], "11-1下": ["愚人众·雷萤术士", "冰深渊法师", "水丘丘萨满", "冰箭丘丘人", "雷箭丘丘人"], "11-2上": ["火斧丘丘暴徒", "岩盾丘丘暴徒", "爆弹丘丘人", "岩盾丘丘人"], "11-2下": ["火斧丘丘暴徒", "岩盾丘丘暴徒", "大型雷史莱姆", "变异雷史莱姆", "雷箭丘丘人", "冰箭丘丘人"], "11-3上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·岩使游击兵", "愚人众先遣队·风拳前锋军"], "11-3下": ["愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军", "愚人众先遣队·岩使游击兵"]}, "12": {"12-1上": ["木盾丘丘暴徒", "大型冰史莱姆", "冰霜骗骗花"], "12-1下": ["冰深渊法师", "大型冰史莱姆", "冰箭丘丘人"], "12-2上": ["冰霜骗骗花", "火箭丘丘人", "冰箭丘丘人"], "12-2下": ["冰深渊法师", "木盾丘丘暴徒", "大型冰史莱姆", "冰箭丘丘人", "雷箭丘丘人", "火箭丘丘人"], "12-3上": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军"], "12-3下": ["愚人众先遣队·冰铳重卫士", "愚人众先遣队·雷锤前锋军", "愚人众先遣队·风拳前锋军", "愚人众先遣队·岩使游击兵"]}}} \ No newline at end of file diff --git a/GenshinUID/genshinuid_help/__init__.py b/GenshinUID/genshinuid_help/__init__.py new file mode 100644 index 00000000..54bb0a32 --- /dev/null +++ b/GenshinUID/genshinuid_help/__init__.py @@ -0,0 +1,23 @@ +import asyncio +import threading +from pathlib import Path + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot + +from .draw_help_card import draw_help_img +from ..utils.image.convert import convert_img + +HELP_IMG = Path(__file__).parent / 'help.png' + + +@SV('原神帮助').on_fullmatch('gs帮助') +async def send_guide_pic(bot: Bot): + img = await convert_img(HELP_IMG) + await bot.logger.info('获得gs帮助图片成功!') + await bot.send(img) + + +threading.Thread( + target=lambda: asyncio.run(draw_help_img()), daemon=True +).start() diff --git a/GenshinUID/genshinuid_help/draw_help_card.py b/GenshinUID/genshinuid_help/draw_help_card.py new file mode 100644 index 00000000..1900ce84 --- /dev/null +++ b/GenshinUID/genshinuid_help/draw_help_card.py @@ -0,0 +1,85 @@ +import json +from pathlib import Path + +from PIL import Image, ImageDraw + +from ..utils.image.image_tools import CustomizeImage +from ..utils.resource.RESOURCE_PATH import TEXT2D_PATH +from ..utils.fonts.genshin_fonts import ( + gs_font_18, + gs_font_24, + gs_font_28, + gs_font_40, +) + +TEXT_PATH = Path(__file__).parent / 'texture2d' +help_title = Image.open(TEXT_PATH / 'help_title.png') + +first_color = (20, 20, 20) +second_color = (57, 57, 57) + +with open(Path(__file__).parent / 'help.json', "r", encoding='UTF-8') as f: + help_data = json.load(f) + +all_help_num = 0 +module_row = 0 +help_row = 0 + +for module in help_data: + all_help_num += len(help_data[module]['data']) + module_row += 1 + help_row += (len(help_data[module]['data']) + 2) // 3 + + +async def draw_help_img(): + # 获取背景图片各项参数 + based_w = 850 + based_h = 30 + 720 + 110 * help_row + module_row * 100 + + CI_img = CustomizeImage('', based_w, based_h) + img = CI_img.bg_img + color = CI_img.bg_color + color_mask = Image.new('RGBA', (based_w, based_h), color) + help_mask = Image.open(TEXT2D_PATH / 'mask.png').resize((based_w, based_h)) + img.paste(color_mask, (0, 0), help_mask) + + module_temp = 0 + alpha_img = Image.new('RGBA', (based_w, based_h)) + alpha_img.paste(help_title, (0, 0)) + for module in help_data: + module_title = Image.open(TEXT_PATH / 'module_title.png') + module_title_draw = ImageDraw.Draw(module_title) + module_desc = help_data[module]['desc'] + module_title_draw.text((76, 53), module, first_color, gs_font_40, 'lm') + module_title_draw.text( + (767, 59), module_desc, second_color, gs_font_24, 'rm' + ) + alpha_img.paste(module_title, (0, 720 + module_temp)) + for index, data in enumerate(help_data[module]['data']): + func = Image.open(TEXT_PATH / 'func.png') + func_draw = ImageDraw.Draw(func) + func_draw.text( + (125, 30), data['name'], first_color, gs_font_28, 'mm' + ) + func_draw.text( + (125, 65), data['desc'], second_color, gs_font_18, 'mm' + ) + func_draw.text( + (125, 85), data['eg'], second_color, gs_font_18, 'mm' + ) + alpha_img.paste( + func, + ( + 51 + (index % 3) * 254, + 820 + module_temp + (index // 3) * 110, + ), + ) + module_temp += 100 + 110 * ((len(help_data[module]['data']) + 2) // 3) + img = Image.alpha_composite(img, alpha_img) + + img.save( + Path(__file__).parent / 'help.png', + format='PNG', + quality=80, + subsampling=0, + ) diff --git a/GenshinUID/genshinuid_help/help.json b/GenshinUID/genshinuid_help/help.json new file mode 100644 index 00000000..52d84dc3 --- /dev/null +++ b/GenshinUID/genshinuid_help/help.json @@ -0,0 +1,605 @@ +{ + "私人服务": { + "desc": "需要加 [gs开启/设置] 前缀", + "data": [ + { + "name": "推送", + "desc": "所有推送总开关", + "eg": "gs开启推送", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "自动签到", + "desc": "每晚0:30进行米游社签到", + "eg": "gs开启自动签到", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "自动米游币", + "desc": "每晚1:16进行米游币获取", + "eg": "gs开启自动米游币", + "need_ck": false, + "need_sk": true, + "need_admin": false + }, + { + "name": "[推送项]", + "desc": "体力/派遣/宝钱/质变仪推送", + "eg": "gs开启体力、gs开启派遣", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "[推送项]阈值", + "desc": "设置推送的阈值", + "eg": "gs设置体力阈值140", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "刷新抽卡记录", + "desc": "更新抽卡记录,需要SK", + "eg": "刷新抽卡记录", + "need_ck": false, + "need_sk": true, + "need_admin": false + }, + { + "name": "抽卡记录", + "desc": "查询你的抽卡记录", + "eg": "抽卡记录", + "need_ck": false, + "need_sk": true, + "need_admin": false + }, + { + "name": "导出抽卡记录", + "desc": "仅限群聊,导出UIGF", + "eg": "导出抽卡记录", + "need_ck": false, + "need_sk": true, + "need_admin": false + }, + { + "name": "导入抽卡记录", + "desc": "导入符合UIGF格式的文件", + "eg": "私聊直接发Json文件", + "need_ck": false, + "need_sk": true, + "need_admin": false + }, + { + "name": "扫码登陆", + "desc": "私聊扫码登陆,米游社扫码即可", + "eg": "扫码登陆", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "清除原神公告红点", + "desc": "清除自己的原神公告红点", + "eg": "清除原神公告红点", + "need_ck": true, + "need_sk": false, + "need_admin": false + } + ] + }, + "查询服务": { + "desc": "可加 [查询]前缀", + "data": [ + { + "name": "查询", + "desc": "角色信息一览,后可跟UID", + "eg": "查询100740568", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "[上期]深渊/sy", + "desc": "深渊信息一览,后可跟UID", + "eg": "深渊100740568", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "收集/sj", + "desc": "收集百分比,后可跟UID", + "eg": "收集100740568", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "探索/ts", + "desc": "探索百分比,后可跟UID", + "eg": "探索100740568", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "每日/mr", + "desc": "自己的游戏日常和树脂", + "eg": "便签", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "签到", + "desc": "进行一次米游社签到", + "eg": "签到", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "当前状态", + "desc": "游戏树脂和派遣状态", + "eg": "当前状态", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "每月统计", + "desc": "每月的原石获取情况", + "eg": "每月统计", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "原石札记/zj", + "desc": "原石获取状态图片版", + "eg": "当前信息", + "need_ck": true, + "need_sk": false, + "need_admin": false + }, + { + "name": "七圣召唤/召唤", + "desc": "查询自己的七圣召唤进度", + "eg": "召唤100740568", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "原神注册时间", + "desc": "获取自己的原神注册时间", + "eg": "原神注册时间", + "need_ck": true, + "need_sk": false, + "need_admin": false + } + ] + }, + "面板服务": { + "desc": "数据源由Enka提供", + "data": [ + { + "name": "强制刷新", + "desc": "刷新自己游戏内面板数据", + "eg": "强制刷新100740568", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查询xx", + "desc": "查询角色面板", + "eg": "查询100740568心海", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查询x命xx", + "desc": "为自己的面板增加虚构数据", + "eg": "查询六命公子", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查询xx换xx", + "desc": "查询角色面板更换武器", + "eg": "查询六命心海换护摩", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查询xx带xx换xx", + "desc": "查询不存在的角色", + "eg": "查询莱依拉带月光换公子", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查询xx成长曲线", + "desc": "输出当前角色成长表", + "eg": "查询刻晴曲线", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查询展柜角色", + "desc": "查询所有已缓存角色列表", + "eg": "查询展柜角色", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查询队伍 xx", + "desc": "查询队伍伤害", + "eg": "查询队伍 万叶 公子 ...", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "毕业度统计", + "desc": "查询所有已缓存角色的毕业度", + "eg": "毕业度统计", + "need_ck": false, + "need_sk": false, + "need_admin": false + } + ] + }, + "游戏建议": { + "desc": "获取一些没用的建议", + "data": [ + { + "name": "xx用什么", + "desc": "角色该如何养成", + "eg": "公子怎么养", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "xx给谁用", + "desc": "武器/圣遗物能给谁用", + "eg": "护摩谁能用", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "xx攻略/推荐", + "desc": "西风驿站攻略图", + "eg": "可莉推荐", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "参考面板xx", + "desc": "角色的小毕业面板", + "eg": "参考面板公子", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "活动列表", + "desc": "游戏当前的活动列表", + "eg": "活动列表", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "卡池列表", + "desc": "游戏当前的卡池列表", + "eg": "卡池列表", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "任务xx", + "desc": "某个任务的攻略", + "eg": "任务须弥", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "抽表情", + "desc": "随机抽一个表情", + "eg": "抽表情", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "御神签", + "desc": "随机抽一签,当天内签文固定", + "eg": "御神签", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "原神公告", + "desc": "获取原神公告", + "eg": "原神公告#3898", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "订阅原神公告", + "desc": "在本群订阅原神公告", + "eg": "订阅原神公告", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "取消订阅原神公告", + "desc": "在本群取消订阅原神公告", + "eg": "取消订阅原神公告", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "版本深渊", + "desc": "获取当前版本深渊阵容", + "eg": "版本深渊3.4", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查成就", + "desc": "查询这个成就的攻略", + "eg": "查成就捉猫记", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "查委托", + "desc": "查询当天的委托有没有成就", + "eg": "查委托这本小说", + "need_ck": false, + "need_sk": false, + "need_admin": false + } + ] + }, + "WIKI": { + "desc": "获取游戏信息", + "data": [ + { + "name": "武器", + "desc": "武器信息,可后跟数字", + "eg": "武器天空、武器天空90", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "角色", + "desc": "角色信息,可后跟数字", + "eg": "角色七七90、角色真珠", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "命座、天赋", + "desc": "角色命座和技能", + "eg": "命座6可莉、天赋4北斗", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "圣遗物", + "desc": "查询圣遗物", + "eg": "圣遗物冰封", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "食物、原魔", + "desc": "查询食物和怪物信息", + "eg": "食物鸡、原魔公子", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "语音", + "desc": "查询角色语音", + "eg": "语音可莉357", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "原牌", + "desc": "查询原牌", + "eg": "原牌神里、原牌运筹帷幄", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "切换地图", + "desc": "切换地图至其他区域", + "eg": "切换地图", + "need_ck": false, + "need_sk": false, + "need_admin": true + }, + { + "name": "xx在哪", + "desc": "查找地图资源点", + "eg": "甜甜花在哪", + "need_ck": false, + "need_sk": false, + "need_admin": false + } + ] + }, + "数据模块": { + "desc": "有关插件的一些数据", + "data": [ + { + "name": "校验全部Cookies", + "desc": "校验全部ck的状态", + "eg": "校验全部Cookies", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "校验全部Stoken", + "desc": "校验全部sk的状态", + "eg": "校验全部Stoken", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "清除无效用户", + "desc": "清理失效的用户", + "eg": "清除无效用户", + "need_ck": false, + "need_sk": false, + "need_admin": true + }, + { + "name": "gs配置", + "desc": "查看全局的插件配置", + "eg": "gs配置", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "全部重签", + "desc": "重新进行全部签到", + "eg": "全部重签", + "need_ck": true, + "need_sk": false, + "need_admin": true + }, + { + "name": "全部重获取", + "desc": "重新进行全部米游币获取", + "eg": "全部重获取", + "need_ck": true, + "need_sk": true, + "need_admin": true + }, + { + "name": "gs更新", + "desc": "可尝试gs强制更新", + "eg": "gs强行强制更新", + "need_ck": false, + "need_sk": false, + "need_admin": true + }, + { + "name": "gs重启", + "desc": "重启你的Bot", + "eg": "gs重启", + "need_ck": false, + "need_sk": false, + "need_admin": true + }, + { + "name": "刷新ck", + "desc": "通过sk重新获取ck", + "eg": "刷新ck", + "need_ck": true, + "need_sk": true, + "need_admin": false + }, + { + "name": "刷新全部ck", + "desc": "刷新绑定的全部ck", + "eg": "刷新全部ck", + "need_ck": true, + "need_sk": true, + "need_admin": true + } + ] + }, + "杂图": { + "desc": "可能会用得上", + "data": [ + { + "name": "原石预估", + "desc": "当前版本奖励,后可跟版本", + "eg": "版本规划3.0", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "血量排行", + "desc": "常见怪物的血量排行", + "eg": "血量排行", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "血量表", + "desc": "所有怪物的血量", + "eg": "血量表", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "抗性表", + "desc": "所有怪物的抗性", + "eg": "抗性表", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "伤害乘区", + "desc": "伤害到底有几个乘区", + "eg": "伤害乘区", + "need_ck": false, + "need_sk": false, + "need_admin": false + }, + { + "name": "深渊概览", + "desc": "从虚空数据库获取当期深渊完成率", + "eg": "深渊概览", + "need_ck": false, + "need_sk": false, + "need_admin": false + } + ] + } +} \ No newline at end of file diff --git a/GenshinUID/genshinuid_help/texture2d/func.png b/GenshinUID/genshinuid_help/texture2d/func.png new file mode 100644 index 00000000..4c237534 Binary files /dev/null and b/GenshinUID/genshinuid_help/texture2d/func.png differ diff --git a/GenshinUID/genshinuid_help/texture2d/help_title.png b/GenshinUID/genshinuid_help/texture2d/help_title.png new file mode 100644 index 00000000..8a302c3c Binary files /dev/null and b/GenshinUID/genshinuid_help/texture2d/help_title.png differ diff --git a/GenshinUID/genshinuid_help/texture2d/module_title.png b/GenshinUID/genshinuid_help/texture2d/module_title.png new file mode 100644 index 00000000..03241d12 Binary files /dev/null and b/GenshinUID/genshinuid_help/texture2d/module_title.png differ diff --git a/GenshinUID/genshinuid_map/__init__.py b/GenshinUID/genshinuid_map/__init__.py new file mode 100644 index 00000000..15f06d66 --- /dev/null +++ b/GenshinUID/genshinuid_map/__init__.py @@ -0,0 +1,50 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..utils.image.convert import convert_img +from .draw_genshinmap_card import MAP_DATA, draw_genshin_map + +MAP_ID_LIST = [ + '2', # 提瓦特 + '9', # 层岩巨渊 + '7', # 渊下宫 + # MapID.golden_apple_archipelago, # 金苹果群岛 +] +MAP_CHN_NAME = { + '2': '提瓦特', + '9': '层岩巨渊', + '7': '渊下宫', + # MapID.golden_apple_archipelago: '金苹果群岛', +} + + +@SV('查询地图设置', pm=2).on_fullmatch(('切换地图')) +async def send_change_map_msg(bot: Bot): + await bot.logger.info('[切换地图]正在执行...') + MAP_ID_LIST.append(MAP_ID_LIST[0]) + MAP_ID_LIST.pop(0) + current = MAP_ID_LIST[0] + chn = MAP_CHN_NAME.get(current) + await bot.logger.info(f'[切换地图]当前地图为{chn}') + await bot.send(f'切换到{chn}地图') + + +@SV('查询地图').on_prefix(('哪里有', '哪儿有', '哪有')) +async def send_find_map_msg(bot: Bot, ev: Event): + map_id = MAP_ID_LIST[0] + map_name = MAP_CHN_NAME[map_id] + await bot.logger.info(f'[查找资源点]正在执行...当前地图为{map_name}') + + if not MAP_DATA.exists(): + MAP_DATA.mkdir() + + resource_temp_path = MAP_DATA / f'{map_name}_{ev.text}.jpg' + if resource_temp_path.exists(): + await bot.logger.info(f'本地已有{map_name}_{ev.text}的资源点,直接发送...') + resource_temp = await convert_img(resource_temp_path) + await bot.send(resource_temp) + else: + await bot.logger.info('本地未缓存,正在渲染...') + im = await draw_genshin_map(ev.text, map_id, map_name) + await bot.send(im) diff --git a/GenshinUID/genshinuid_map/draw_genshinmap_card.py b/GenshinUID/genshinuid_map/draw_genshinmap_card.py new file mode 100644 index 00000000..67c87c3c --- /dev/null +++ b/GenshinUID/genshinuid_map/draw_genshinmap_card.py @@ -0,0 +1,21 @@ +from pathlib import Path +from typing import Union + +from ..gsuid_utils.api.minigg.request import get_map_data +from ..gsuid_utils.api.minigg.exception import MiniggNotFoundError + +MAP_DATA = Path(__file__).parent / 'map_data' + + +async def draw_genshin_map( + resource_name: str, + map_id: str, + map_name: str, +) -> Union[bytes, str]: + try: + raw_data = await get_map_data(resource_name, map_id) + except MiniggNotFoundError: + return f'{resource_name} {map_id} 未找到...' + with open(MAP_DATA / f'{map_name}_{resource_name}.jpg', 'wb') as f: + f.write(raw_data) # 保存到文件夹中 + return raw_data diff --git a/GenshinUID/genshinuid_mys/__init__.py b/GenshinUID/genshinuid_mys/__init__.py new file mode 100644 index 00000000..61e1b0ff --- /dev/null +++ b/GenshinUID/genshinuid_mys/__init__.py @@ -0,0 +1,36 @@ +import asyncio + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.segment import MessageSegment + +from .get_lots_data import get_lots_msg +from .get_meme_card import get_meme_img +from .get_mys_data import get_region_task, get_task_detail + + +@SV('查询游戏攻略').on_prefix(('原神任务', '任务详情', 'qszh')) +async def send_task_adv(bot: Bot, ev: Event): + if ev.text in ['须弥', '层岩', '海岛']: + im = await get_region_task(ev.text) + for i in im: + mes = [MessageSegment.text(_msg) for _msg in i] + await bot.send(MessageSegment.node(mes)) + await asyncio.sleep(1) + return + else: + im = await get_task_detail(ev.text) + await bot.send(im) + + +@SV('娱乐功能').on_fullmatch(('抽表情')) +async def send_meme_card(bot: Bot): + await bot.logger.info('开始执行[抽表情]') + await bot.send(await get_meme_img()) + + +@SV('娱乐功能').on_fullmatch(('御神签')) +async def send_lots_data(bot: Bot, ev: Event): + await bot.logger.info('开始执行[御神签]') + await bot.send(await get_lots_msg(ev.user_id)) diff --git a/GenshinUID/genshinuid_mys/get_lots_data.py b/GenshinUID/genshinuid_mys/get_lots_data.py new file mode 100644 index 00000000..75375cf6 --- /dev/null +++ b/GenshinUID/genshinuid_mys/get_lots_data.py @@ -0,0 +1,186 @@ +import random +import datetime +from typing import Union + + +async def get_lots_msg(qid: Union[str, int]) -> str: + seed = str(datetime.date.today()) + str(qid) + random.seed(seed) + return lots_data[random.randint(0, 15)] + + +lots_data = [ + ( + '——大吉——\n' + '宝剑出匣来,无往不利。出匣之光,亦能照亮他人。\n' + '今日能一箭射中空中的猎物,能一击命中守卫要害。\n' + '若没有目标,不妨四处转转,说不定会有意外之喜。\n' + '同时,也不要忘记和倒霉的同伴分享一下好运气哦。\n\n' + '今天的幸运物是:难得一见的「马尾」。\n' + '马尾随大片荻草生长,但却更为挺拔。\n' + '与傲然挺立于此世的你一定很是相配。' + ), + ( + '——大吉——\n' + '失而复得的一天。\n' + '原本以为石沉大海的事情有了好的回应,\n' + '原本分道扬镳的朋友或许可以再度和好,\n' + '不经意间想起了原本已经忘记了的事情。\n' + '世界上没有什么是永远无法挽回的,\n' + '今天就是能够挽回失去事物的日子。\n\n' + '今天的幸运物是:活蹦乱跳的「鬼兜虫」。\n' + '鬼兜虫是爱好和平、不愿意争斗的小生物。\n' + '这份追求平和的心一定能为你带来幸福吧。' + ), + ( + '——大吉——\n' + '会起风的日子,无论干什么都会很顺利的一天。\n' + '周围的人心情也非常愉快,绝对不会发生冲突,\n' + '还可以吃到一直想吃,但没机会吃的美味佳肴。\n' + '无论是工作,还是旅行,都一定会十分顺利吧。\n' + '那么,应当在这样的好时辰里,一鼓作气前进...\n\n' + '今天的幸运物是:茁壮成长的「鸣草」。\n' + '许多人或许不知道,鸣草是能预报雷暴的植物。\n' + '向往着雷神大人的青睐,只在稻妻列岛上生长。\n' + '摘下鸣草时酥酥麻麻的触感,据说和幸福的滋味很像。' + ), + ( + '——大吉——\n' + '浮云散尽月当空,逢此签者皆为上吉。\n' + '明镜在心清如许,所求之事心想则成。\n' + '合适顺心而为的一天,不管是想做的事情,\n' + '还是想见的人,现在是行动起来的好时机。\n\n' + '今天的幸运物是:不断发热的「烈焰花花蕊」。\n' + '烈焰花的炙热来自于火辣辣的花心。\n' + '万事顺利是因为心中自有一条明路。' + ), + ( + '——中吉——\n' + '十年磨一剑,今朝示霜刃。\n' + '恶运已销,身临否极泰来之时。\n' + '苦练多年未能一显身手的才能,\n' + '现今有了大展身手的极好机会。\n' + '若是遇到阻碍之事,亦不必迷惘,\n' + '大胆地拔剑,痛快地战斗一番吧。\n\n' + '今天的幸运物是:生长多年的「海灵芝」。\n' + '弱小的海灵芝虫经历多年的风风雨雨,才能结成海灵芝。\n' + '为目标而努力前行的人们,最终也必将拥有胜利的果实。' + ), + ( + '——中吉——\n' + '天上有云飘过的日子,天气令人十分舒畅。\n' + '工作非常顺利,连午睡时也会想到好点子。\n' + '突然发现,与老朋友还有其他的共同话题...\n' + '——每一天每一天都要积极开朗地度过——\n\n' + '今天的幸运物是:色泽艳丽的「堇瓜」。\n' + '人们常说表里如一是美德,\n' + '但堇瓜明艳的外貌下隐藏着的是谦卑而甘甜的内在。' + ), + ( + '——吉——\n' + '一如既往的一天。身体和心灵都适应了的日常。\n' + '出现了能替代弄丢的东西的物品,令人很舒心。\n' + '和常常遇见的人关系会变好,可能会成为朋友。\n' + '——无论是多寻常的日子,都能成为宝贵的回忆——\n\n' + '今天的幸运物是:闪闪发亮的「晶核」。\n' + '晶蝶是凝聚天地间的元素,而长成的细小生物。\n' + '而元素是这个世界许以天地当中的人们的祝福。' + ), + ( + '——吉——\n' + '明明没有什么特别的事情,却感到心情轻快的日子。\n' + '在没注意过的角落可以找到本以为丢失已久的东西。\n' + '食物比平时更加鲜美,路上的风景也令人眼前一高。\n' + '——这个世界上充满了新奇的美好事物——\n\n' + '今天的幸运物是:散发暖意的「鸟蛋」。\n' + '鸟蛋孕育着无限的可能性,是未来之种。\n' + '反过来,这个世界对鸟蛋中的生命而言,\n' + '也充满了令其兴奋的未知事物吧。\n' + '要温柔 对待鸟蛋喔。' + ), + ( + '——吉——\n' + '枯木逢春,正当万物复苏之时。\n' + '陷入困境时,能得到解决办法。\n' + '举棋不定时,会有贵人来相助。\n' + '可以整顿一番心情,清理一番家装,\n' + '说不定能发现意外之财。\n\n' + '今天的幸运物是:节节高升的「竹笋」。\n' + '竹笋拥有着无限的潜力,\n' + '没有人知道一颗竹笋,到底能长成多高的竹子。\n' + '看着竹笋,会让人不由自主期待起未来吧。' + ), + ( + '——末吉——\n' + '气压稍微有点低,是会令人想到遥远的过去的日子。\n' + '早已过往的年轻岁月,与再没联系过的故友的回忆,\n' + '会让人感到丝平淡的怀念,又稍微有一点点感伤。\n' + '——偶尔怀念过去也很好。放松心情面对未来吧——\n\n' + '今天的幸运物是:清新怡人的「薄荷」。\n' + '只要有草木生长的空间,就一定有薄荷。\n' + '这么看来,薄荷是世界上最强韧的生灵。\n' + '据说连蒙德的雪山上也长着薄荷呢 。' + ), + ( + '——末吉——\n' + '空中的云层偏低,并且仍有堆积之势,\n' + '不知何时雷雨会骤然从头顶倾盆而下。\n' + '但是等雷雨过后,还会有彩虹在等着。\n' + '宜循于旧,守于静,若妄为则难成之。\n\n' + '今天的幸运物是:树上掉落的「松果」。\n' + '并不是所有的松果都能长成高大的松树,\n' + '成长需要适宜的环境,更需要一点运气。\n' + '所以不用给自己过多压力,耐心等待彩虹吧。' + ), + ( + '——末吉——\n' + '云遮月半边,雾起更迷离。\n' + '抬头即是浮云遮月,低头则是浓雾漫漫。\n' + '虽然一时前路迷惘,但也会有一切明了的时刻。\n' + '现下不如趁此机会磨炼自我,等待拨云见皎月。\n\n' + '今天的幸运物是:暗中发亮的「发光髓」。\n' + '发光髓努力地发出微弱的光芒。\n' + '虽然比不过其他光源,但看清前路也够用了。' + ), + ( + '——末吉——\n' + '平稳安详的一天。没有什么令人难过的事情会发生。\n' + '适合和久未联系的朋友聊聊过去的事情,一同欢笑。\n' + '吃东西的时候会尝到很久以前体验过的过去的味道。\n' + '——要珍惜身边的人与事——\n\n' + '今天的幸运物是:酥酥麻麻的「电气水晶」。\n' + '电气水晶蕴含着无限的能量。\n' + '如果能够好好导引这股能量,说不定就能成就什么事业。' + ), + ( + '——凶——\n' + '隐约感觉会下雨的一天。可能会遇到不顺心的事情。\n' + '应该的褒奖迟迟没有到来,服务生也可能会上错菜。\n' + '明明没什么大不了的事,却总感觉有些心烦的日子。\n' + '——难免有这样的日子——\n\n' + '今天的幸运物是:随波摇曳的「海草」。\n' + '海草是相当温柔而坚强的植物,\n' + '即使在苦涩的海水中,也不愿改变自己。\n' + '即使在逆境中,也不要放弃温柔的心灵。' + ), + ( + '——凶——\n' + '珍惜的东西可能会遗失,需要小心。\n' + '如果身体有不适,一定要注意休息。\n' + '在做出决定之前,一定要再三思考。\n\n' + '今天的幸运物是:冰凉冰凉的「冰雾花」。\n' + '冰雾花散发着「生人 勿进」的寒气。\n' + '但有时冰冷的气质,也能让人的心情与头脑冷静下来。\n' + '据此采取正确的判断,明智地行动。' + ), + ( + '——大凶——\n' + '内心空落落的一天。可能会陷入深深的无力感之中。\n' + '很多事情都无法理清头绪,过于钻牛角尖则易生病。\n' + '虽然一切皆陷于低潮谷底中,但也不必因此而气馁。\n' + '若能撑过一时困境,他日必另有一番作为。\n\n' + '今天的幸运物是:弯弯曲曲的「蜥蜴尾巴」。\n' + '蜥蜴遇到潜在的危险时,大多数会断尾求生。\n' + '若是遇到无法整理的情绪,那么该断则断吧。' + ), +] diff --git a/GenshinUID/genshinuid_mys/get_meme_card.py b/GenshinUID/genshinuid_mys/get_meme_card.py new file mode 100644 index 00000000..b6f7c1d1 --- /dev/null +++ b/GenshinUID/genshinuid_mys/get_meme_card.py @@ -0,0 +1,75 @@ +# flake8: noqa +import random + +import httpx + +title = 'https://webstatic.mihoyo.com/upload/event' +meme_dict = { + 'card_other_Fischl1': f'{title}/2020/08/31/4bb5924e073f073f400389da2062407f_4225300656656631729.png', + 'card_other_Fischl2': f'{title}/2020/08/31/9a477826d4587eaafa7161507e53cec1_3070825784718745991.png', + 'card_other_albedo1': f'{title}/2021/01/05/929f01ef0b7db16e6e3289e6f09bc664_3314543116725683931.png', + 'card_other_albedo2': f'{title}/2021/01/05/f486f444ebe67ebdb70307433aa08fd3_8750695094071258948.png', + 'card_other_ambor1': f'{title}/2020/08/31/997dca7a05c35b09881b19c08e265477_1299947423447392337.png', + 'card_other_ambor2': f'{title}/2020/08/31/0ad6dd1e9903507a659df257959a763f_2854888966169652134.png', + 'card_other_ambor3': f'{title}/2020/08/31/fd905e0fb575f67da73137b453a596fd_2915100968963816162.png', + 'card_other_bannite1': f'{title}/2020/08/31/9cefb9bd9811f166bf14b8367dc785df_3763750909505644121.png', + 'card_other_bannite2': f'{title}/2020/08/31/8d4d7f176808b85529d5e53f9ef59eb3_873542905371029363.png', + 'card_other_barbara1': f'{title}/2020/08/31/160b860e2968c0a930373bf74dbe34a6_6782336143409269316.png', + 'card_other_barbara2': f'{title}/2020/08/31/837fc37bd0831b74c0281c945d5323da_4271787076408799417.png', + 'card_other_barbara3': f'{title}/2020/08/31/ca72b6a24f48ef04796e3c63a7c25163_5778250222995475858.png', + 'card_other_beidou1': f'{title}/2020/08/31/15e08973b2d2896bb403f1f5f7499382_1462646223869539529.png', + 'card_other_beidou2': f'{title}/2020/08/31/b11c93805674e62fc43a9adceaa8e893_8926566513833977124.png', + 'card_other_chongyun1': f'{title}/2020/08/31/b9920d1400bf55a2307b9b2e216a4a8e_2000240380863580838.png', + 'card_other_chongyun2': f'{title}/2020/08/31/1f80b78033c55c31553d2fba2201c857_8778762270527512136.png', + 'card_other_chongyun3': f'{title}/2020/08/31/645cf32a7a133b57605bb341a84d65a2_7809384165096554836.png', + 'card_other_diaona1': f'{title}/2020/11/16/f975f0e6311346306e5151f04fbbbc0a_6762294099269212599.png', + 'card_other_diaona2': f'{title}/2020/11/16/0530db8dbacbebf662c3b4cad1f407c8_7326500760952263133.png', + 'card_other_diluc1': f'{title}/2020/08/31/4d25ea66387705c7360ea6d5cc90bb01_4560335127797724868.png', + 'card_other_diluc2': f'{title}/2020/08/31/378f274d1f40a840c14da114f97c689d_6631287774563316092.png', + 'card_other_ganyu1': f'{title}/2021/01/12/745fc70073f22a37bb0238a06a53cfdb_1162143275141578017.png', + 'card_other_ganyu2': f'{title}/2021/01/12/57f6fcf67cd8859c3a6ff32597d9c99a_3170022474475150543.png', + 'card_other_gongzi1': f'{title}/2020/11/16/40e0bc9a555fcbbbdfb74a95d2e387ef_8519449231927106780.png', + 'card_other_gongzi2': f'{title}/2020/11/16/04b40cd1a848577f9cde336a3039c750_3996605459102489069.png', + 'card_other_kaeya1': f'{title}/2020/08/31/e05c2fe7d9ab737a25285c060aab1aa0_2111907448530751567.png', + 'card_other_kaeya2': f'{title}/2020/08/31/9c1e67747a78b5e22ae3834814c57a8f_6116180424455008670.png', + 'card_other_keqing1': f'{title}/2020/08/31/1f62425cec6ffc21ecf4c8f0da499ac7_4928089850342437737.png', + 'card_other_keqing2': f'{title}/2020/08/31/3a6f0d284e2ab862c82ee3a07d6ffbc7_7794570330643971174.png', + 'card_other_klee1': f'{title}/2020/08/31/b120c4ac7c695d3aaf55441eb43600d1_4487729736509862376.png', + 'card_other_klee2': f'{title}/2020/08/31/08aa6011f26df790dbf2681678f1d7e9_2796140925707265189.png', + 'card_other_klee3': f'{title}/2020/08/31/c00aa8fa9d2cbf9edcccd50b457ae5a6_5422323085963273352.png', + 'card_other_leize1': f'{title}/2020/08/31/34bde2a566136897ab22932a9001d572_4843575850627066457.png', + 'card_other_leize2': f'{title}/2020/08/31/bd6894fa5c5daa833b4eede40cf01385_2519521084432177379.png', + 'card_other_lisa1': f'{title}/2020/08/31/c23a633e2eb72a10fb51198550d59a8a_542776791456547653.png', + 'card_other_lisa2': f'{title}/2020/08/31/a46cccf622c2d4dbff6c5353b936eee4_1652272197678612672.png', + 'card_other_mona1': f'{title}/2020/08/31/20ae5d9e7ea88ee27dd02208714e622e_2311908118844083107.png', + 'card_other_mona2': f'{title}/2020/08/31/da669761dcbd5c029bda0a62bccb301e_8046604345851128002.png', + 'card_other_ningguang1': f'{title}/2020/08/31/c11a5c5c90d54c98f10c6f257e8eac01_6529728627802398273.png', + 'card_other_ningguang2': f'{title}/2020/08/31/4165b7cb43e3369a279ccef46c295769_3879970605580805258.png', + 'card_other_nuoaier1': f'{title}/2020/08/31/3df9ee03bc4629e6e2af3c7225674543_2742734744870268629.png', + 'card_other_nuoaier2': f'{title}/2020/08/31/051cb060351937831252e395f65834c8_6289474038603880117.png', + 'card_other_qin1': f'{title}/2020/08/31/95c9ef420173047f635e963db2dae3f6_5948753857591750018.png', + 'card_other_qin2': f'{title}/2020/08/31/b45dd906708dbd5ceff7960bd48baab7_605993513095277023.png', + 'card_other_qiqi1': f'{title}/2020/08/31/b373e3bcb24285b96fd106747c9be482_2380875567755087743.png', + 'card_other_qiqi2': f'{title}/2020/08/31/e17547277f4dfb7bc96f764536b19406_3629575916992344590.png', + 'card_other_qiqi3': f'{title}/2020/08/31/58b24db38da079a9230e37d741b940c3_7709490267389090600.png', + 'card_other_shatang1': f'{title}/2020/08/31/315f96761caa9b22993180d529e6c935_169150677634938584.png', + 'card_other_shatang2': f'{title}/2020/08/31/e4a7ff004ee5d04678add5bb7c3c5fd9_506219715714537000.png', + 'card_other_venti1': f'{title}/2020/08/31/80905774b30aaa4b26a5b75926dcf7b3_222995534350028202.png', + 'card_other_venti2': f'{title}/2020/08/31/c75eb06e4d0b7856652c9893af2da63e_5411923475027982287.png', + 'card_other_xiangling1': f'{title}/2020/08/31/d19849df8be15bff53cdc0a0146f534a_1468443590902001424.png', + 'card_other_xiangling2': f'{title}/2020/08/31/a105a4aca30bdf8348519140736c306d_5118343542859881269.png', + 'card_other_xingqiu1': f'{title}/2020/09/27/ad7183031224452a2894b9516fd571ad_3529083730481381114.png', + 'card_other_xingqiu2': f'{title}/2020/09/27/1761487a5da1ea037be6ae80d24e1423_9220243684814419617.png', + 'card_zero_paimeng1': f'{title}/2020/08/31/a27f1224a0b149c684ecb3a1d3f7a4ec_2661825294156591596.png', + 'card_zero_paimeng2': f'{title}/2020/08/31/cb137a55d6527cd2cde1d0b47e13592f_4335931514300413032.png', + 'card_zero_paimeng3': f'{title}/2020/08/31/1231b4066fb103409b43466c61fa4e5c_7013106042012366406.png', + 'card_zero_qiu1': f'{title}/2020/08/31/dd329cd9e5980421bef3354e334d73a0_2484329576384567186.png', + 'card_zero_qiu2': f'{title}/2020/08/31/b3eb2286d9945c3caf695c3992bc93e2_4449302548761785968.png', + 'card_zero_qiu3': f'{title}/2020/08/31/7a15e33790ef2d513a5e6e7760cbc7be_8171554806202001370.png', +} + + +async def get_meme_img() -> bytes: + url = random.choice(list(meme_dict.values())) + data = httpx.get(url).content + return data diff --git a/GenshinUID/genshinuid_mys/get_mys_data.py b/GenshinUID/genshinuid_mys/get_mys_data.py new file mode 100644 index 00000000..2e70696d --- /dev/null +++ b/GenshinUID/genshinuid_mys/get_mys_data.py @@ -0,0 +1,85 @@ +import json +from typing import List +from pathlib import Path + +TASK_PATH = Path(__file__).parent / 'task.json' + +with open(TASK_PATH, "r", encoding='UTF-8') as f: + task_data = json.load(f) + +task_im = '''「任务」 {}{} +「攻略」 {}''' + +extra_im = ''' +「类型」 {} +「地区」 {} +「时长预估」 {} +「版本」 {}''' + + +async def _get_tag(result_task: dict) -> str: + if result_task['ext'] != '{}': + detail = json.loads(r'%s' % result_task['ext']) + detail = detail['c_231'] + tag = detail['filter']['text'].replace('","', '|')[2:-2] + tag_list = tag.split('|') + tag_data = {} + for i in tag_list: + tag_data[i.split('/')[0]] = i.split('/')[1] + + type = tag_data['任务类型'] + region = tag_data['所属区域'] + time = tag_data['任务耗时'] + version = tag_data['版本'] + extra = extra_im.format(type, region, time, version) + else: + extra = '' + title = result_task['title'] + url = result_task['bbs_url'] + title = title.replace('羊皮卷', '') + im = task_im.format(title, extra, url) + + return im + + +async def get_task_detail(task_name: str) -> str: + all_task = task_data['data']['list'][0]['children'] + task_list = [] + + for item in all_task: + task_list.extend(item['list']) + + for task in task_list: + if task_name in task['title']: + result_task = task + break + else: + return '没有找到该任务...' + + im = await _get_tag(result_task) + + return im + + +async def get_region_task(region: str) -> List[List[str]]: + all_task = task_data['data']['list'][0]['children'] + + task_list = [] + for item in all_task: + if region in item['name']: + task_list.extend(item['list']) + break + else: + return [] + + all_list = [] + mes_list = [] + for index, task in enumerate(task_list): + tag = await _get_tag(task) + mes_list.append(tag) + if index != 0 and index % 44 == 0: + all_list.append(mes_list) + mes_list = [] + all_list.append(mes_list) + + return all_list diff --git a/GenshinUID/genshinuid_mys/task.json b/GenshinUID/genshinuid_mys/task.json new file mode 100644 index 00000000..deb57cae --- /dev/null +++ b/GenshinUID/genshinuid_mys/task.json @@ -0,0 +1 @@ +{"retcode":0,"message":"OK","data":{"list":[{"id":45,"name":"任务手册","parent_id":37,"depth":2,"ch_ext":"[{\"type\":\"text\",\"attribute_name\":\"每行展示词条个数\",\"attribute_key\":\"col_per_row\",\"value\":\"1\"},{\"type\":\"text\",\"attribute_name\":\"展示样式\",\"attribute_key\":\"display_type\",\"value\":\"collection\"},{\"type\":\"text\",\"attribute_name\":\"频道icon\",\"attribute_key\":\"icon_url\",\"value\":\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/75379475/3e25a8e5e9e7f7b09e685c40ab3f70e8_1164774549560676666.png\"},{\"type\":\"text\",\"attribute_name\":\"跳转链接\",\"attribute_key\":\"jump_url\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc\",\"attribute_key\":\"icon_url_pc\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc-hover\",\"attribute_key\":\"icon_url_pc_hover\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"筛选器\",\"attribute_key\":\"filter\",\"value\":\"[]\"},{\"type\":\"text\",\"attribute_name\":\"首页更多\",\"attribute_key\":\"home_more\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"在目录中展示\",\"attribute_key\":\"show_in_catalog\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"最新词条\",\"attribute_key\":\"is_latest\",\"value\":\"0\"},{\"type\":\"text\",\"attribute_name\":\"更多入口icon\",\"attribute_key\":\"king_kong_icon\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道描述\",\"attribute_key\":\"description\",\"value\":\"雪山攻略已更新\"},{\"type\":\"text\",\"attribute_name\":\"频道图片\",\"attribute_key\":\"img\",\"value\":\"https://uploadstatic.mihoyo.com/ys-obc/2020/10/18/75379477/5d6c9cc4c5bf9c2b14d3af5ea0df1dc8_6534098018014147011.png\"}]","children":[{"id":231,"name":"任务大全","parent_id":45,"depth":3,"ch_ext":"[{\"type\":\"text\",\"attribute_name\":\"每行个数\",\"attribute_key\":\"col_per_row\",\"value\":\"2\"},{\"type\":\"text\",\"attribute_name\":\"展示样式\",\"attribute_key\":\"display_type\",\"value\":\"taskFilter\"},{\"type\":\"text\",\"attribute_name\":\"频道icon\",\"attribute_key\":\"icon_url\",\"value\":\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/16314655/eed5d182c713c7fe4c7ce02590424409_3952777547060978175.png\"},{\"type\":\"text\",\"attribute_name\":\"跳转链接\",\"attribute_key\":\"jump_url\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc\",\"attribute_key\":\"icon_url_pc\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc-hover\",\"attribute_key\":\"icon_url_pc_hover\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"筛选器\",\"attribute_key\":\"filter\",\"value\":\"[{\\\"label\\\":\\\"任务类型\\\",\\\"children\\\":[{\\\"label\\\":\\\"魔神任务\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"世界任务\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"传说任务\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"其他\\\",\\\"children\\\":[]}]},{\\\"label\\\":\\\"所属区域\\\",\\\"children\\\":[{\\\"label\\\":\\\"蒙德\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"璃月\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"稻妻\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"须弥\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"其他\\\",\\\"children\\\":[]}]},{\\\"label\\\":\\\"任务奖励\\\",\\\"children\\\":[{\\\"label\\\":\\\"原石\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"摩拉\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"经验书\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"小道具\\\",\\\"children\\\":[]}]},{\\\"label\\\":\\\"任务耗时\\\",\\\"children\\\":[{\\\"label\\\":\\\"长流程\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"短流程\\\",\\\"children\\\":[]}]},{\\\"label\\\":\\\"版本\\\",\\\"children\\\":[{\\\"label\\\":\\\"1.0\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"1.1\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"1.2\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"1.3\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"1.4\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"1.5\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"1.6\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.0\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.1\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.2\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.3\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.4\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.5\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.6\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.7\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"2.8\\\",\\\"children\\\":[]},{\\\"label\\\":\\\"3.0\\\",\\\"children\\\":[]}]}]\"},{\"type\":\"text\",\"attribute_name\":\"首页更多\",\"attribute_key\":\"home_more\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"在目录中展示\",\"attribute_key\":\"show_in_catalog\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"最新词条\",\"attribute_key\":\"is_latest\",\"value\":\"0\"},{\"type\":\"text\",\"attribute_name\":\"更多入口icon\",\"attribute_key\":\"king_kong_icon\",\"value\":\"\"}]","children":[],"list":[{"content_id":2189,"title":"最后的宝藏","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_6336054298422935650.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8997401237227358173.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/16/232866066/6058a9cda347decae60db9c4d345d4eb_5260600747926828086.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27381527","article_user_name":"Dramaturge","article_time":"1660603732","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"最后的宝藏"},{"content_id":2188,"title":"凶猛动物在哪里","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6896380468654831788.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1297699461776464867.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/8cd38553664732f29ee5bacc9a7baf41_6669277956419965812.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27984789","article_user_name":"Dramaturge","article_time":"1661473749","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"凶猛动物在哪里"},{"content_id":2187,"title":"勇气戴于心上","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8194896462743542567.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2561843745400712757.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/b56dbea1f8f05941db4020e74a8dca9e_1415533372434792074.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27985036","article_user_name":"猫冬","article_time":"1661474072","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"勇气戴于心上"},{"content_id":2186,"title":"静态风景·后篇","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2836147513472315096.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9103756581087362988.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/4fdcf5b3051e0df768a11c8ae592991a_3073948150550658238.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27985316","article_user_name":"猫冬","article_time":"1661474509","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"静态风景·后篇"},{"content_id":2185,"title":"静态风景","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6876009251616964269.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_773441285183487681.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/4fdcf5b3051e0df768a11c8ae592991a_3073948150550658238.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27985316","article_user_name":"猫冬","article_time":"1661474509","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"静态风景"},{"content_id":2184,"title":"石锁机关秘话","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8450892092184006925.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_944901787911909039.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/51dcad740bdf98b4cba25f4c4614585d_1385128218782090439.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27987198","article_user_name":"猫冬","article_time":"1661477067","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"石锁机关秘话"},{"content_id":2183,"title":"揭示兽径的曲调","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8815908055799384888.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4319182456171938685.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/6014189fc075d3a462ddb815aeb91b79_1674619304987474490.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28035385","article_user_name":"FTFuture","article_time":"1661541079","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"揭示兽径的曲调"},{"content_id":2182,"title":"新芽迸发的曲调","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2625436603906985636.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3696380346220986365.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/34f64d0da1d24d56352a5d436a57b744_5274808509522822828.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28034627","article_user_name":"FTFuture","article_time":"1661538173","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"新芽迸发的曲调"},{"content_id":2181,"title":"通往黯道的曲调","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2121418007132829565.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4922028749378678087.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/b8726240a2b221b90c8c1e0c006e690f_3596767994698589456.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28033210","article_user_name":"FTFuture","article_time":"1661534442","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"通往黯道的曲调"},{"content_id":2180,"title":"兽有失蹄","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_7074004279443824092.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2963441312392590380.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/feb0cd21f8fe1c31b0b80b4f97e34675_8651490379371147852.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28041173","article_user_name":"FTFuture","article_time":"1661562230","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"兽有失蹄"},{"content_id":2179,"title":"趁梦想气息逗留","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6901631443039286580.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1971527676767072854.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/c8db14500c04a4de67d553a5fe80ce62_7581181511570361553.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28044182","article_user_name":"FTFuture","article_time":"1661566888","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"趁梦想气息逗留"},{"content_id":2178,"title":"智中之宝·新计划","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1363530333373981315.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7168198754792083396.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/28/4896641/6715657adab8d6ec577da0f4fefc866c_8895717428669179399.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28111431","article_user_name":"FTFuture","article_time":"1661676906","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"智中之宝·新计划"},{"content_id":2177,"title":"回忆终章","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6586654049307533492.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2239993992952543344.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"回忆终章"},{"content_id":2176,"title":"兰纳迦的回忆","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6140986953698036021.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7571888457080150566.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"兰纳迦的回忆"},{"content_id":2175,"title":"兰迦鲁的涂鸦","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1504769124654212096.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3834592621276750803.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"兰迦鲁的涂鸦"},{"content_id":2174,"title":"兰纳真的老友","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_4709525942510959216.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_492268168440378479.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"兰纳真的老友"},{"content_id":2173,"title":"直到「桓那」痊愈","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_5937986080553022133.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4160779603201013436.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/dbfe679aaf9ce323c84c753b65eaa5a5_6568719843398160196.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28144183","article_user_name":"Dramaturge","article_time":"1661733972","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"直到「桓那」痊愈"},{"content_id":2172,"title":"愚人者人愚之","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2004493427828713331.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_433756104049598898.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/4896641/e748dc06d66b0956711332a86799ceeb_5124801985741034622.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28177038","article_user_name":"FTFuture","article_time":"1661775481","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"愚人者人愚之"},{"content_id":2171,"title":"代价","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_214819351608391735.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6077774127711856614.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/680a016eef5641fe716e3fbb16e7963f_2719878020671264632.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28039883","article_user_name":"FTFuture","article_time":"1661559924","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"代价"},{"content_id":2128,"title":"失梦的苗圃","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_3317717166177454705.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6753638149780139936.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/8f0d344a7dc40d44629683039f8cd876_5307527649532857098.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27958072","article_user_name":"猫冬","article_time":"1661429434","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"失梦的苗圃"},{"content_id":2127,"title":"最终,森林会记住一切","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_7925555625519373913.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2085189661920724822.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/2718f42b6e85a20805f477a761ec1157_8569919818260092316.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27959018","article_user_name":"猫冬","article_time":"1661430574","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"最终,森林会记住一切"},{"content_id":2126,"title":"正法炬书","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1689409855256863338.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6923718180415545233.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/6de162d5ab3aee0a6a9b426a1fc6a866_4007012364048682657.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27959566","article_user_name":"猫冬","article_time":"1661431198","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"正法炬书"},{"content_id":2125,"title":"愿为一炊之梦","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6318013461213137071.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5559288044984593996.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/2e22a9d8e5cccbe9d6db5357bdecfbfb_8587794117813420061.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27961264","article_user_name":"猫冬","article_time":"1661433128","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"愿为一炊之梦"},{"content_id":2124,"title":"新蓓萌生","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8790557952753057663.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2129702648662016238.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/29dd4bc6cd202b5f66ba9c899e7968bf_8573965571868981533.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27897177","article_user_name":"猫冬","article_time":"1661348359","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"新蓓萌生"},{"content_id":2123,"title":"吉祥具书","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_5543754515835864638.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_523562964340647717.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/271194bfd9d016dae53247d182d67df0_2353390460500254146.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27895851","article_user_name":"猫冬","article_time":"1661347411","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"吉祥具书"},{"content_id":2122,"title":"水天供书","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_3184385665349189779.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9124913837172865328.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/58054f92155f0b10251a6866337acb17_6540688010847579351.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27948126","article_user_name":"Slothw","article_time":"1661417671","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"水天供书"},{"content_id":2121,"title":"梦中的苗圃","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_7836224974905062767.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1522514970762790553.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/a05f1198d43b353845199fa9a1ecb2ff_602651168112755263.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27891900","article_user_name":"猫冬","article_time":"1661343893","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"梦中的苗圃"},{"content_id":2120,"title":"林中奇遇","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1003988700627651088.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7341723604240082635.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/549b1e58cf08302d07accf44ac131558_372965616930859556.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27890599","article_user_name":"猫冬","article_time":"1661342749","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"林中奇遇"},{"content_id":2060,"title":"陌野不识故人","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_7772986626557647459.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/a76af11210fa399a660b2b3c92935b43_4142828051285079742.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/13/74019947/2493677cea8676622a2b7f3821b4d8f3_458987288809130050.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25510155","article_user_name":"猫冬","article_time":"1657699082","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"陌野不识故人"},{"content_id":2059,"title":"妖狸的赠礼","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/6ca84128f3c051b4c181c2d2357d6548_8268268941914562417.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9218814128184060706.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/21/232866066/4dc51398fc51453b410b1bb559a1b17b_595031931138515006.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25997258","article_user_name":"Dramaturge","article_time":"1658362238","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"妖狸的赠礼"},{"content_id":2058,"title":"极夜幻想剧·王女执剑记!","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"任务类型/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/9a467e4df89f786c71dbcdc2b74e7b60_3239756429787623094.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3416285704718339727.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/18/74019947/2968c4d11dc2975b4f99609b9c390172_8071063023184365057.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25826795","article_user_name":"猫冬","article_time":"1658111219","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"极夜幻想剧·王女执剑记!"},{"content_id":2057,"title":"浪花不再归海","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.5\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/6ca84128f3c051b4c181c2d2357d6548_6111499561800750791.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/a76af11210fa399a660b2b3c92935b43_6514398131468841094.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/05/18/4896641/4f94a960e8275871f56e16b1134f519b_5281633889814609727.png","bbs_url":"https://bbs.mihoyo.com/ys/article/6235729","article_user_name":"FTFuture","article_time":"1621341278","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"浪花不再归海"},{"content_id":2056,"title":"翠石砌玉壶","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.5\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/67bba95f420cf06d291edb5a63b86a5a_1217804064916116076.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3864142894171385166.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/13/74019947/e438f15653230d6c64826c73b81d4deb_421722047606896237.png","bbs_url":"https://bbs.mihoyo.com/ys/article/24049373","article_user_name":"猫冬","article_time":"1655110357","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"翠石砌玉壶"},{"content_id":2055,"title":"渴望旅行的妖狸","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_4860389088362908406.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/28/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2432562458999248308.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/16/74019947/b07ee1e997e6de5f9f50d7810bb563c8_4143720779343259010.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25732823","article_user_name":"猫冬","article_time":"1657972203","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"渴望旅行的妖狸"},{"content_id":2051,"title":"正因其徒劳","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/2.8\\\",\\\"任务耗时/长流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_7780303261622322255.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6652327358358541425.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/a831114d80e6582068bab00f19bb767c_2256646260569956917.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25916077","article_user_name":"猫冬","article_time":"1658229361","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"正因其徒劳"},{"content_id":2050,"title":"被错置的海螺","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/2.8\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_7501671441228976566.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1283944495827197487.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/ae2a5561a67e6a933ff71911bae2be56_7515901277912766648.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25913567","article_user_name":"猫冬","article_time":"1658226198","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"被错置的海螺"},{"content_id":2049,"title":"被抛出的徽记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_3760184969666303188.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4086614389241536644.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/45d23ed5535179358f2db7acd3f67d1d_8297823968339103587.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25912577","article_user_name":"猫冬","article_time":"1658224975","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"被抛出的徽记"},{"content_id":2048,"title":"被丢失的合照","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_1299297672548550989.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6609236783984434341.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/8642a0e003303729b70ef96c24f86579_4559897197163066566.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25911910","article_user_name":"猫冬","article_time":"1658224140","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"被丢失的合照"},{"content_id":2047,"title":"四礁觅宝记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/25/6276411/9a467e4df89f786c71dbcdc2b74e7b60_6405841825108820889.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_4029839878280702424.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/d67b3214e0f4c9d6f263838131b5a982_6448656731502144503.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25918395","article_user_name":"猫冬","article_time":"1658232188","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"四礁觅宝记"},{"content_id":2046,"title":"寻物航行","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_2681198054229352335.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2006688078062460103.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/6f325536344bc7265d0425c9bdef7d3c_1494279792781904305.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25916760","article_user_name":"猫冬","article_time":"1658230233","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"寻物航行"},{"content_id":2005,"title":"映影书写札记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"版本/2.8\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/13/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2879436985357147155.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/13/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6747731111452498378.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/13/74019947/30a55bff3ff0e57204dad3f3a5367531_676209823905276327.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25486917","article_user_name":"猫冬","article_time":"1657688040","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"映影书写札记"},{"content_id":2004,"title":"鹿野院平藏 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/2.8\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/13/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2796510025722665558.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/13/6276411/a76af11210fa399a660b2b3c92935b43_4162764820540527238.png\"]}}}","icon":"https://uploadstatic.mihoyo.com/ys-obc/2022/07/13/6276411/58ec16ba19371238952ee2c328938298_93010993743454947.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25493196","article_user_name":"橙柒柒","article_time":"1657690263","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"鹿野院平藏邀约事件"},{"content_id":1953,"title":"久歧忍 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/21/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_8034861791453206220.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/21/6276411/a76af11210fa399a660b2b3c92935b43_2165998223463217596.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/21/82367888/380be623f99b19f3799deb6f2814bb05_3397563807258576791.png","bbs_url":"https://bbs.mihoyo.com/ys/article/24452369","article_user_name":"橙柒柒","article_time":"1655811254","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"久歧忍邀约事件"},{"content_id":1942,"title":"暗夜英雄的不在场证明","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/11/6276411/6ca84128f3c051b4c181c2d2357d6548_5557470954196569402.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/11/6276411/a76af11210fa399a660b2b3c92935b43_7266500048156049225.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/10/74019947/97826d9dc33dd38d835fcca263e71007_3548015588281288541.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23900728","article_user_name":"猫冬","article_time":"1654851290","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"暗夜英雄的不在场证明"},{"content_id":1941,"title":"拾枝者·戴因斯雷布","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/魔神任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/14/16314655/6ca84128f3c051b4c181c2d2357d6548_634686705127026937.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/14/16314655/588c58cb2bf7d27ff62a1a4be3bb084b_242514224644271840.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/10/74019947/eaa8b76efcb9239ef9eb604704a5da05_9166185606647011953.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23894979","article_user_name":"猫冬","article_time":"1654842237","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"拾枝者·戴因斯雷布"},{"content_id":1938,"title":"台上台下","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.7\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/67bba95f420cf06d291edb5a63b86a5a_474304883291235598.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8607769840127960875.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/31/74019947/87b66a6ab89452ac3ba495818030dd0c_8904485415515933522.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23377233","article_user_name":"猫冬","article_time":"1653980157","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"台上台下"},{"content_id":1937,"title":"加尔恰的赞歌","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.7\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/67bba95f420cf06d291edb5a63b86a5a_7843716229925511888.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5203352933914335460.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/31/74019947/132aa1ba2baa43bef20303a3ba8626dd_1886473812289285899.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23378548","article_user_name":"猫冬","article_time":"1653981364","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"加尔恰的赞歌"},{"content_id":1936,"title":"扇底春秋","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.7\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/67bba95f420cf06d291edb5a63b86a5a_5031719552336485639.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_83944588503103329.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/02/74019947/a41ad627711dae76e74ac309da954721_157733338651539999.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23504204","article_user_name":"猫冬","article_time":"1654138561","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"扇底春秋"},{"content_id":1935,"title":"棋生断处","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.7\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/67bba95f420cf06d291edb5a63b86a5a_1989955147237773426.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/06/09/6276411/a76af11210fa399a660b2b3c92935b43_6997424737750676218.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/02/74019947/4bc4c93eab803dc088b3db113dfb645e_6220946137099171357.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23551644","article_user_name":"猫冬","article_time":"1654193697","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"棋生断处"},{"content_id":1910,"title":"卢皮卡的意义","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/30/6276411/6ca84128f3c051b4c181c2d2357d6548_1528895320241094403.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/30/6276411/a76af11210fa399a660b2b3c92935b43_7533479055703892627.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/27/74019947/147589d27492f18a210adb6d08828f82_3994922304295190820.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23171672","article_user_name":"猫冬","article_time":"1653652747","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"卢皮卡的意义"},{"content_id":1909,"title":"风、勇气与翅膀","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/30/6276411/6ca84128f3c051b4c181c2d2357d6548_6319651216952941420.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/30/6276411/a76af11210fa399a660b2b3c92935b43_7305296475267348800.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/27/74019947/f2a82e342637bfc4f68c82aca37d4a51_586906584908941998.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23168004","article_user_name":"猫冬","article_time":"1653646871","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"风、勇气与翅膀"},{"content_id":1902,"title":"海盗秘宝","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/19/6276411/6ca84128f3c051b4c181c2d2357d6548_7774659715844378117.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/19/6276411/a76af11210fa399a660b2b3c92935b43_6553252970932585473.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/17/74019947/464b8d0375359d65bc8e60f94838b1cb_8187557145545397469.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22595122","article_user_name":"猫冬","article_time":"1652784780","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"海盗秘宝"},{"content_id":1900,"title":"每天都是新的冒险","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ca84128f3c051b4c181c2d2357d6548_4941526891063414583.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8571919167383626947.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/13/74019947/5ac0d5cf7437c566f5f77367d4bc26bc_2339282446843313637.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22320493","article_user_name":"猫冬","article_time":"1652440970","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"每天都是新的冒险"},{"content_id":1899,"title":"巨龙与自由之歌","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.0\\\",\\\"任务类型/魔神任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ca84128f3c051b4c181c2d2357d6548_531929239853172181.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/588c58cb2bf7d27ff62a1a4be3bb084b_3843547205830421203.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/12/74019947/345fbe45d1a400042e0ea1d915aed470_3254492627465597355.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22252508","article_user_name":"猫冬","article_time":"1652347857","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"巨龙与自由之歌"},{"content_id":1898,"title":"蒙德城的骑士","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ca84128f3c051b4c181c2d2357d6548_5817822313039942176.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3059640524231655080.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/13/74019947/083bb34f54e6b96d64b37d6629315125_2544918646516292733.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22331425","article_user_name":"猫冬","article_time":"1652454045","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"蒙德城的骑士"},{"content_id":1897,"title":"采矿之道","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ca84128f3c051b4c181c2d2357d6548_5427324977537283209.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1907585282191621793.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/14/74019947/7354adacd6c7004e2c0be23832d30505_557264409741338950.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22390183","article_user_name":"猫冬","article_time":"1652532702","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"采矿之道"},{"content_id":1896,"title":"收集风之印的少女","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ca84128f3c051b4c181c2d2357d6548_5619161475082218255.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4273401169298203290.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/11/74019947/9473884d5cdb0045ef5d7100e2df8f87_9039749716360438968.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22204184","article_user_name":"猫冬","article_time":"1652276990","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"收集风之印的少女"},{"content_id":1895,"title":"欢迎来到冒险家协会","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ca84128f3c051b4c181c2d2357d6548_2087622792481639510.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1773321972672582740.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/13/74019947/5ac0d5cf7437c566f5f77367d4bc26bc_2339282446843313637.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22320493","article_user_name":"猫冬","article_time":"1652440970","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"欢迎来到冒险家协会"},{"content_id":1894,"title":"繁忙的冒险家协会","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ca84128f3c051b4c181c2d2357d6548_2893643786627442560.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/16/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1676923690010523160.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/13/74019947/5ac0d5cf7437c566f5f77367d4bc26bc_2339282446843313637.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22320493","article_user_name":"猫冬","article_time":"1652440970","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"繁忙的冒险家协会"},{"content_id":1863,"title":"凝光 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/67bba95f420cf06d291edb5a63b86a5a_6974120060208386543.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_2023766442358485456.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/01/05/82367888/458e886030cc0eb724fdbf695d56bfab_6263738397353651495.png","bbs_url":"https://bbs.mihoyo.com/ys/article/14173044","article_user_name":"橙柒柒","article_time":"1641365787","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"凝光 邀约事件(一)"},{"content_id":1862,"title":"云堇 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/67bba95f420cf06d291edb5a63b86a5a_1221765900255039332.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_6517523119314876312.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/01/05/82367888/f08c63de5eb1f1eaf06040748b23fbbd_7569905650344798903.png","bbs_url":"https://bbs.mihoyo.com/ys/article/14160451","article_user_name":"橙柒柒","article_time":"1641358046","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"云堇 邀约事件(一)"},{"content_id":1861,"title":"班尼特 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_280313318317473735.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_4527294276089992965.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/03/18/82367888/fc6b952e2e286dd349b6a21fbcc8df51_8192525976918436117.png","bbs_url":"https://bbs.mihoyo.com/ys/article/5023317","article_user_name":"橙柒柒","article_time":"1616038529","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"班尼特 邀约事件(一)"},{"content_id":1860,"title":"重云 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/67bba95f420cf06d291edb5a63b86a5a_3808420617171960919.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_7007656085792866737.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/03/17/82367888/a9c0f994e12ac9b117a4cdff47c3ff43_7918499513727753838.png","bbs_url":"https://bbs.mihoyo.com/ys/article/5012121","article_user_name":"橙柒柒","article_time":"1615987202","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"重云 邀约事件(一)"},{"content_id":1859,"title":"芭芭拉 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_7730020472711279327.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_7186102749525118028.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/03/17/82367888/d8a8d08198ac3a81f1d1b71fa0d03007_7917787979546557952.png","bbs_url":"https://bbs.mihoyo.com/ys/article/4996360","article_user_name":"橙柒柒","article_time":"1615956121","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"芭芭拉 邀约事件(一)"},{"content_id":1858,"title":"诺艾尔 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_2594584343147924217.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_4465477392474687720.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/03/17/82367888/8c603cdcebb46ea8ac0a085311eaca1a_7432846257085712443.png","bbs_url":"https://bbs.mihoyo.com/ys/article/5003545","article_user_name":"橙柒柒","article_time":"1615967826","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"诺艾尔 邀约事件(一)"},{"content_id":1857,"title":"诺艾尔 邀约事件(二)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.5\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_5405552197429042169.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_1688673587152102842.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/04/28/82367888/d90a394af121c6954fd8a47b559bc5c6_4867189166646906316.png","bbs_url":"https://bbs.mihoyo.com/ys/article/5782692","article_user_name":"橙柒柒","article_time":"1619599240","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"诺艾尔 邀约事件(二)"},{"content_id":1856,"title":"迪奥娜 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"版本/1.5\\\",\\\"任务奖励/经验书\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_7360997150667603263.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_1572017014500221409.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/04/28/82367888/d350ec10320eb9cd58f80fc050789537_5978792343140836735.png","bbs_url":"https://bbs.mihoyo.com/ys/article/5784945","article_user_name":"橙柒柒","article_time":"1619603285","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"迪奥娜 邀约事件(一)"},{"content_id":1855,"title":"托马 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_6198741198722184814.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_3616017817092116157.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/10/13/82367888/f2005e0698eeb872dac7f2bab222369e_1473467123692402920.png","bbs_url":"https://bbs.mihoyo.com/ys/article/10855461","article_user_name":"橙柒柒","article_time":"1634110257","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"托马 邀约事件(一)"},{"content_id":1854,"title":"早柚 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3149872634882033234.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_8176569195545939251.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/10/13/82367888/9f605b3c3d28219451bf0437d562b0de_5981922913879700324.png","bbs_url":"https://bbs.mihoyo.com/ys/article/10851272","article_user_name":"橙柒柒","article_time":"1634104611","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"早柚 邀约事件(一)"},{"content_id":1853,"title":"北斗 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/67bba95f420cf06d291edb5a63b86a5a_2985461162390565713.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_337650951842534965.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/11/24/82367888/ee67519a326dce698bcba236642497bc_6402329460993443799.png","bbs_url":"https://bbs.mihoyo.com/ys/article/12312308","article_user_name":"橙柒柒","article_time":"1637737337","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"北斗 邀约事件(一)"},{"content_id":1852,"title":"五郎 邀约事件(一)","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_6757481059417714927.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/a76af11210fa399a660b2b3c92935b43_8572748533260817856.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/11/24/82367888/4270ee5e1d2cd0e4b5850eae8e5be4c2_1300415455224384974.png","bbs_url":"https://bbs.mihoyo.com/ys/article/12306281","article_user_name":"橙柒柒","article_time":"1637728833","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"五郎 邀约事件(一)"},{"content_id":1851,"title":"为了没有眼泪的明天","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/魔神任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_1731230712593465191.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/588c58cb2bf7d27ff62a1a4be3bb084b_2394551656019074018.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/10/74019947/bdf8dfdca611fdc6ffe2f0167725dd02_5610998866037341269.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22141322","article_user_name":"猫冬","article_time":"1652189038","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"【魔神任务】为了没有眼泪的明天"},{"content_id":1850,"title":"天遒宝迹","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/67bba95f420cf06d291edb5a63b86a5a_5888957064734106655.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8201518030598651005.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/02/03/4896641/0540239847c8c93c74706456aae71454_4275868569305635227.png","bbs_url":"https://bbs.mihoyo.com/ys/article/4045161","article_user_name":"FTFuture","article_time":"1612324690","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"1.3版本新增世界任务——「天遒宝迹」"},{"content_id":1849,"title":"循仙踪兮天遒","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/67bba95f420cf06d291edb5a63b86a5a_7796655257105216024.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_973957200169889667.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/02/07/254624368/7d5ea286fcacce12fca8dce1e571f4e5_6438587129899848290.jpg","bbs_url":"https://bbs.mihoyo.com/ys/article/17235065","article_user_name":"牛马随心所欲","article_time":"1644222021","avatar_url":"https://img-static.mihoyo.com/avatar/avatar1.png","summary":"璃月隐藏任务:循仙踪兮天遒"},{"content_id":1848,"title":"自外而来","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_7676146549451634521.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_183373825571230431.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/06/11/4896641/2e8151ae83f83440e909aa78ae412eef_2078337468295793865.png","bbs_url":"https://bbs.mihoyo.com/ys/article/6734452","article_user_name":"FTFuture","article_time":"1623384825","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"群岛世界任务——「自外而来」"},{"content_id":1847,"title":"雾与风的旅行","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_7947486623837102670.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8709685610248451646.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/06/11/4896641/54f22785f440a5bb3843685313dca8dd_4736487188305439591.png","bbs_url":"https://bbs.mihoyo.com/ys/article/6734561","article_user_name":"FTFuture","article_time":"1623385060","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"群岛世界任务系列的第二篇:「雾与风的旅行」"},{"content_id":1846,"title":"听海人","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_8886815812927188353.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1419410495173035521.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/06/11/4896641/b1295bf9e4fa5645e48e3cf0a5581eb2_2107811688743777324.png","bbs_url":"https://bbs.mihoyo.com/ys/article/6735048","article_user_name":"FTFuture","article_time":"1623386183","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"群岛世界任务系列的第六篇,世界任务「听海人」"},{"content_id":1845,"title":"狂风,听谁号令","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_5228827683588419951.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7638661618115361212.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/06/11/4896641/ad16333f12a542e55b25b7e2293849bf_7043222932879957059.png","bbs_url":"https://bbs.mihoyo.com/ys/article/6734711","article_user_name":"FTFuture","article_time":"1623385464","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"世界任务「狂风,听谁号令」"},{"content_id":1844,"title":"归乡路漫漫","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_722716852513858229.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4880859858252666108.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/06/11/4896641/4c8b43199f22968173b287b396c9b497_8179065170910637388.png","bbs_url":"https://bbs.mihoyo.com/ys/article/6734874","article_user_name":"FTFuture","article_time":"1623385804","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"群岛世界任务系列的第四篇「归乡路漫漫」"},{"content_id":1843,"title":"岛与海的彼端","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_7678734390165825341.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1620252052881587626.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2021/06/11/4896641/4a19a3e6e664f06c4f5359b4cf56a410_5215939564441771524.png","bbs_url":"https://bbs.mihoyo.com/ys/article/6734991","article_user_name":"FTFuture","article_time":"1623386025","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"1.6版本的群岛世界任务系列的第五篇,世界任务「岛与海的彼端」"},{"content_id":1842,"title":"随风而来的好味道","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_7277227492232562875.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_418254303591499693.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/02/21/297416354/953fb87c4b6d4e64d3d2a78e9b2a6068_472042462030540478.jpg","bbs_url":"https://bbs.mihoyo.com/ys/article/22317732","article_user_name":"猫冬","article_time":"1652437814","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"支线任务--随风而来的好味道"},{"content_id":1841,"title":"七神的赐福","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_3397962975771646644.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8948785423883719693.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22322044","article_user_name":"猫冬","article_time":"1652443064","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"七神的赐福"},{"content_id":1840,"title":"烹饪的诀窍","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_8427071108465305747.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7334483788879541102.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22199064","article_user_name":"猫冬","article_time":"1652271328","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"烹饪的诀窍"},{"content_id":1839,"title":"磨刀不误砍柴工","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_3020076777114425121.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_807300408725040810.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22201557","article_user_name":"猫冬","article_time":"1652274108","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"磨刀不误砍柴工"},{"content_id":1838,"title":"冒险要朝着远方","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_2912168087839674741.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7514996294974715007.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/03/74019947/01227071c1fd226c4e71f083fad9da74_9094086767247735297.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23555738","article_user_name":"猫冬","article_time":"1654209247","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"冒险要朝着远方"},{"content_id":1837,"title":"时不再来","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_2209518422909596321.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8459476922772307157.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/18/74019947/080f890b289a51eb9db8dd8c512d4f88_3087666961064499727.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22658562","article_user_name":"猫冬","article_time":"1652870903","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"时不再来"},{"content_id":1836,"title":"古代文明的智慧","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_7571849495373301137.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4589767290865797850.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22324079","article_user_name":"猫冬","article_time":"1652445936","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"古代文明的智慧"},{"content_id":1835,"title":"孤身犯险","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ca84128f3c051b4c181c2d2357d6548_1185053621690125158.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7792925542686182765.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/18/74019947/5a10ca30075763aea5a548f8adb3a04c_383129266074826270.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22663177","article_user_name":"猫冬","article_time":"1652876561","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"孤身犯险"},{"content_id":1834,"title":"风起鹤归","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/魔神任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_729242925672625624.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/588c58cb2bf7d27ff62a1a4be3bb084b_5199773028776752881.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14161476","article_user_name":"韩牧九","article_time":"1641358522","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"风起鹤归"},{"content_id":1833,"title":"须臾百梦","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.5\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3020209990235179768.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_3774267051321043694.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/17758139","article_user_name":"南有山","article_time":"1645014241","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/ac024f9aeb9c69fba82e02d861b9ca15.png","summary":"须臾百梦"},{"content_id":1832,"title":"梧桐一叶落","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_4655492432569653288.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_2841898077325814000.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19979681","article_user_name":"妍妍w","article_time":"1648982234","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/e910bdba0b8c2123c405a710f5d75387.png","summary":"梧桐一叶落"},{"content_id":1831,"title":"鸣神御祓祈愿祭","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.5\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_8691093581871990333.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_2765994931711129638.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/17760983","article_user_name":"阿怪ii","article_time":"1645016835","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/48fb4e10ae38e5f27d6657193fc5dcf4.png","summary":"鸣神御祓祈愿祭"},{"content_id":1830,"title":"赤金魂","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_1371598196466221943.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_812315433061001767.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/13090670","article_user_name":"韩牧九","article_time":"1639579316","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"赤金魂"},{"content_id":1829,"title":"云之海,人之海","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_7093570485148860605.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_3579340232139883787.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3967165","article_user_name":"墨小菊ぃ","article_time":"1611923882","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/22da75a41a928f397684a01826c26f33.png","summary":"云之海,人之海"},{"content_id":1828,"title":"奈何蝶飞去","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_6197201651732091131.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_6534014392862801433.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/4762026","article_user_name":"奥托世界第一可爱","article_time":"1614751425","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/92f9a25c45ed7de6056def887710e2be.png","summary":"奈何蝶飞去"},{"content_id":1827,"title":"槐柯胡蝶,傩佑之梦","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_6961534351531125588.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_8994566185218313003.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/4246665","article_user_name":"子旖","article_time":"1612940948","avatar_url":"https://img-static.mihoyo.com/avatar/avatar30015.png","summary":"槐柯胡蝶,傩佑之梦"},{"content_id":1826,"title":"匪石","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.5\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_8939415519798490996.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_4303531771151594968.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/5781243","article_user_name":"O丶Ha丶Yo","article_time":"1619596711","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6ccdb0f1f61743895ac049702f74a507.png","summary":"匪石"},{"content_id":1825,"title":"蒙德食遇之旅","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_559170994922704400.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_2989265623384747509.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/21993252","article_user_name":"封印的五花肉","article_time":"1651991354","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6ccdb0f1f61743895ac049702f74a507.png","summary":"蒙德食遇之旅"},{"content_id":1824,"title":"旅行者观察报告","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/传说任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_3385263068827239629.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_6320344997786747201.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3291028","article_user_name":"猫小火火","article_time":"1608738075","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6726c4c896d767d616f77d37b8072ff5.png","summary":"旅行者观察报告"},{"content_id":1823,"title":"险恶的教喻","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_356516173349270225.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6325069584874807931.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7804452","article_user_name":"Dramaturge","article_time":"1627106527","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"险恶的教喻"},{"content_id":1822,"title":"诸国游记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3003665526605459382.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4779353616139771368.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7768866","article_user_name":"Dramaturge","article_time":"1627029450","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"诸国游记"},{"content_id":1821,"title":"刀剑成梦","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_4696583568400947032.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4655582812129446149.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7762099","article_user_name":"Dramaturge","article_time":"1627018535","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"刀剑成梦"},{"content_id":1820,"title":"孤岛诊疗谭","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_7815877724667561617.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_401152779767256952.png\"]}}}","icon":"","bbs_url":"","article_user_name":"","article_time":"0","avatar_url":"","summary":"孤岛诊疗谭"},{"content_id":1819,"title":"「八重堂」的邀约","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_6987692083084225933.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7218672960440642929.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7753074","article_user_name":"Dramaturge","article_time":"1627003564","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"「八重堂」的邀约"},{"content_id":1818,"title":"海的那头是故乡","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_6028161931850004855.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2264704452844697190.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7731657","article_user_name":"Dramaturge","article_time":"1626953943","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"海的那头是故乡"},{"content_id":1817,"title":"离岛之路","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3312951584331428311.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7757166004281499522.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7728979","article_user_name":"Dramaturge","article_time":"1626950138","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"离岛之路"},{"content_id":1816,"title":"武者的宿命","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2568572986927056647.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5188382161024218396.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7723394","article_user_name":"Dramaturge","article_time":"1626941212","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"武者的宿命"},{"content_id":1815,"title":"执望三千里","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_7967637796879361491.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1763761166284701818.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7721614","article_user_name":"Dramaturge","article_time":"1626938155","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"执望三千里"},{"content_id":1814,"title":"医樱","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_4291665819433297271.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4413970371925872682.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7712806","article_user_name":"Dramaturge","article_time":"1626924627","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"医樱"},{"content_id":1813,"title":"农民的宝藏","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_7377306453515535154.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8611539596154071905.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7709362","article_user_name":"Dramaturge","article_time":"1626919806","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"农民的宝藏"},{"content_id":1812,"title":"远吕羽氏遗事","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3132018894989085762.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_771848345970388907.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7683376","article_user_name":"Dramaturge","article_time":"1626870358","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"远吕羽氏遗事"},{"content_id":1811,"title":"踏鞴物语","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_7879422188203004894.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2401577520338106465.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7674312","article_user_name":"Dramaturge","article_time":"1626860680","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"踏鞴物语"},{"content_id":1810,"title":"神樱大祓","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2134468269517322287.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8458771974488786304.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7659694","article_user_name":"Dramaturge","article_time":"1626846382","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"神樱大祓"},{"content_id":1809,"title":"全能美食队","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3560670042860620032.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8097120058968603992.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7651530","article_user_name":"Dramaturge","article_time":"1626840743","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"全能美食队包含:全能美食队!、全能美食队·神社的树、全能美食队·海滩横行者、全能美食队·深潜者、全能美食队·寻食之旅、每日委托:全能美食队·突破性思维、全能美食队·吃饱的重要性 以上任务"},{"content_id":1808,"title":"洗刷耻辱的一战","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_1320804586579329443.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2565747355959159534.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/8058534","article_user_name":"祈1","article_time":"1627789625","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fd15de4619235be293682c536bce6bd4.png","summary":"洗刷耻辱的一战"},{"content_id":1807,"title":"「手鞠游戏」","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_1952147355610299035.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1236664343456593865.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7938524","article_user_name":"Dramaturge","article_time":"1627445992","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"「手鞠游戏」"},{"content_id":1806,"title":"故事构思法","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3378799974736792973.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4538115039588559961.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18927750","article_user_name":"leopan","article_time":"1647130193","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/d3183774d0d6f7a41d670e7dbc4654e3.png","summary":"故事构思法"},{"content_id":1805,"title":"龙蛇藏归辑录","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务类型/世界任务\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/9080cd350b3601912c6e7d6cf5ce4cad_3318268422052076278.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2845021469077032724.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14175679","article_user_name":"猫冬","article_time":"1641367852","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"龙蛇藏归辑录包括:三色档案、安提戈努斯、伊达的挑战状。"},{"content_id":1804,"title":"千里之信","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2185523852419971192.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5126062130020719872.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18224596","article_user_name":"子秦月夜","article_time":"1645892482","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"千里之信"},{"content_id":1803,"title":"凯瑟琳,在稻妻","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_281241560301659967.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5214914313682423832.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18221364","article_user_name":"子秦月夜","article_time":"1645888439","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"凯瑟琳,在稻妻"},{"content_id":1802,"title":"南天门之谜","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_4661422431939195512.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2233489597484604773.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18134892","article_user_name":"子秦月夜","article_time":"1645704118","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"南天门之谜"},{"content_id":1801,"title":"永无止境的研究","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_5925853474669409431.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9039335288607791814.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18134791","article_user_name":"子秦月夜","article_time":"1645703913","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"永无止境的研究"},{"content_id":1800,"title":"畅畅和她的小伙伴","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_3155608326982011779.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_889592670263339245.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18134254","article_user_name":"子秦月夜","article_time":"1645702943","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"畅畅和她的小伙伴"},{"content_id":1799,"title":"冒险家协会的诸多事宜","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_5999109513780062632.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7640430174912451458.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18134129","article_user_name":"子秦月夜","article_time":"1645702717","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"冒险家协会的诸多事宜"},{"content_id":1798,"title":"承仙所托","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_3561805848193760301.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_557818141877006585.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18106490","article_user_name":"子秦月夜","article_time":"1645633644","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"承仙所托"},{"content_id":1797,"title":"捕风的异乡人","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/魔神任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_3008890471132619828.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/588c58cb2bf7d27ff62a1a4be3bb084b_2375831772571807661.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/21118137","article_user_name":"猫冬","article_time":"1651041437","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"捕风的异乡人"},{"content_id":1796,"title":"古云有「螭」","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_6829009621138598508.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4118329173678523119.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/23/74019947/a429ea9607679cd9e24f803400f69869_3456989866094800678.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22969109","article_user_name":"猫冬","article_time":"1653302664","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"古云有「螭」"},{"content_id":1795,"title":"怀宝应自珍","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_1666320571057713380.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7260506672916073285.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/1800598","article_user_name":"橙柒柒","article_time":"1600596104","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/a57113d5e6173a05f7980c978c5a2bd6.png","summary":"怀宝应自珍"},{"content_id":1794,"title":"灵矩有宝予何人","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_1460681250837133665.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2587809935460036812.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18137117","article_user_name":"子秦月夜","article_time":"1645708128","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"灵矩有宝予何人"},{"content_id":1793,"title":"靖世九柱","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_1907155362834064111.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3478336009507296325.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/23/74019947/e44db15688f95a7bcc35677f7e586e92_906032875446051760.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22982292","article_user_name":"猫冬","article_time":"1653318637","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"靖世九柱"},{"content_id":1792,"title":"探索剑冢封印","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_8338639409755485548.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2713062249454394221.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22388944","article_user_name":"猫冬","article_time":"1652531389","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"探索剑冢封印"},{"content_id":1791,"title":"书抵万金","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_6613153257003503413.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1672050219257555847.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18135143","article_user_name":"子秦月夜","article_time":"1645704566","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"书抵万金"},{"content_id":1790,"title":"必要手续","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_639649006435544375.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_645612207995184258.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18135232","article_user_name":"子秦月夜","article_time":"1645704778","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"必要手续"},{"content_id":1789,"title":"独木难支","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_3076038196451394295.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6028325981066126703.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18137209","article_user_name":"子秦月夜","article_time":"1645708330","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"独木难支"},{"content_id":1788,"title":"浮世浮生千岩间","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"任务类型/魔神任务\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_463860584247629426.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/588c58cb2bf7d27ff62a1a4be3bb084b_3494392319538190471.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/03/74019947/03ab3fe296fcb5264fdefa38afc8c13e_1451078376405344928.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23560601","article_user_name":"猫冬","article_time":"1654217894","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"浮世浮生千岩间"},{"content_id":1787,"title":"四方八方之网","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.3\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_1064038401962043264.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2324755506549962881.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/13261280","article_user_name":"mr.xiaoba","article_time":"1640001093","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/15ed0f56b48f97eefb749fd54c88f823.png","summary":"四方八方之网"},{"content_id":1786,"title":"肥料...推销员?","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_8455205113908812662.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6080405213182483974.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9857259","article_user_name":"千面xixi","article_time":"1632415632","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/318cd0420037d017cba3bfabd92d6d8e.png","summary":"肥料...推销员?"},{"content_id":1785,"title":"辞行久远之躯","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.1\\\",\\\"任务类型/魔神任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_2710324930688907335.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/588c58cb2bf7d27ff62a1a4be3bb084b_2977190133627894396.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/03/74019947/e0d7121d002c2e4e43185afd0c9c70bc_7981218133847509441.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23567086","article_user_name":"猫冬","article_time":"1654225275","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"辞行久远之躯"},{"content_id":1784,"title":"门户清理","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_8419879500463525370.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_209692488250791391.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/11034946","article_user_name":"Dramaturge","article_time":"1634459385","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"门户清理"},{"content_id":1783,"title":"健忘大王历险记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_4418858994740193497.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7843686761295372220.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/10928788","article_user_name":"猫冬","article_time":"1634246701","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"健忘大王历险记"},{"content_id":1782,"title":"迫近的客星","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.1\\\",\\\"任务类型/魔神任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_8250818542178515662.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/588c58cb2bf7d27ff62a1a4be3bb084b_1911660385664203165.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/07/74019947/1c907240a38bada556c22e03d5376cd5_9094975808716464652.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23744282","article_user_name":"猫冬","article_time":"1654570457","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"迫近的客星"},{"content_id":1781,"title":"风神与蒙德","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_3940848282947163240.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_895675482137406054.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19634639","article_user_name":"子秦月夜","article_time":"1648475010","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"风神与蒙德"},{"content_id":1780,"title":"此诗送此城","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_4419290192769820196.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4056252095384145125.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/2689933","article_user_name":"夜魇的克苏鲁","article_time":"1605483674","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/e910bdba0b8c2123c405a710f5d75387.png","summary":"此诗送此城"},{"content_id":1779,"title":"雾海纪行","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.2\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_1486652281030097424.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8714801874178025269.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/10843544","article_user_name":"猫冬","article_time":"1634097430","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"雾海纪行,要求特别多的作家,倾听木簧笛的八音曲,雾海与树之祭,日轮与菅名山"},{"content_id":1778,"title":"鸣神寻踪","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_6781731691985723633.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4720342583443262367.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9673463","article_user_name":"Dramaturge","article_time":"1632009216","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"鸣神寻踪"},{"content_id":1777,"title":"月浴之渊","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3428295248843421876.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4839115036443096053.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9140604","article_user_name":"Dramaturge","article_time":"1630500100","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"月浴之渊"},{"content_id":1776,"title":"寝子是只猫","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.1\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_4913543977945704192.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_797898234218714173.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9125698","article_user_name":"三土呀","article_time":"1630486339","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"寝子是只猫"},{"content_id":1775,"title":"海渊仙草灵验记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_4772317909530678635.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7071434806352442970.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9119783","article_user_name":"Dramaturge","article_time":"1630481068","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"海渊仙草灵验记"},{"content_id":1774,"title":"此菜不应人间有","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"版本/1.6\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_4511018735918636084.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8405530807475990910.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/6685626","article_user_name":"xxxAA啊","article_time":"1623221271","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/bc0bd4bbc6da6ab930f64652868a033f.png","summary":"此菜不应人间有"},{"content_id":1773,"title":"恨繁囿兮作土","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_4813739094020715713.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2988579901708053433.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18137340","article_user_name":"子秦月夜","article_time":"1645708586","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"恨繁囿兮作土"},{"content_id":1772,"title":"完美留影","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.3\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_4603590724979159436.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5789838209219442080.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18136680","article_user_name":"子秦月夜","article_time":"1645707413","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"完美留影"},{"content_id":1771,"title":"孤独的海兽","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_5577277373128027689.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_860621406626914153.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9114337","article_user_name":"Dramaturge","article_time":"1630476696","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"孤独的海兽"},{"content_id":1770,"title":"低温调查","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_2218814225530700907.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4309228324510145677.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18021077","article_user_name":"子秦月夜","article_time":"1645452744","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"低温调查"},{"content_id":1769,"title":"低温预警","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_7536099532615541017.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3007040792570457385.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18021077","article_user_name":"子秦月夜","article_time":"1645452744","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"低温预警"},{"content_id":1768,"title":"山中之物","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_6919593839914078995.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7703005254556536986.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18022146","article_user_name":"","article_time":"0","avatar_url":"","summary":"山中之物"},{"content_id":1767,"title":"群玉阁…再现?","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_8684179722750525421.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2807293869482529002.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3711823","article_user_name":"FTFuture","article_time":"1610470778","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"群玉阁…再现?"},{"content_id":1766,"title":"海上拾玉","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_7075008148168184183.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5454991323779664081.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3710644","article_user_name":"FTFuture","article_time":"1610467636","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"海上拾玉"},{"content_id":1765,"title":"覆雪之国","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_2474646301912329536.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4320894355894135893.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3339349","article_user_name":"弥悦","article_time":"1608871344","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"覆雪之国"},{"content_id":1764,"title":"腐殖之牙","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_6305118044159659707.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4211301724382820029.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3339349","article_user_name":"弥悦","article_time":"1608871344","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"腐殖之牙"},{"content_id":1763,"title":"雪山谜踪","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_3443265856527208895.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3347446261814752561.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3302415","article_user_name":"悦弥","article_time":"1608783415","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"雪山谜踪"},{"content_id":1762,"title":"啊,新鲜的肉!","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_3424836226646827274.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1662689065278254656.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3302415","article_user_name":"弥悦","article_time":"1608783415","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"啊,新鲜的肉!"},{"content_id":1761,"title":"雪山大勘测","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_4038845740108937027.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4549155982112467512.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3282768","article_user_name":"三土呀","article_time":"1608723038","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"雪山大勘测"},{"content_id":1760,"title":"雪山再勘测","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_2875807273447707240.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2014350971538135677.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/3282768","article_user_name":"三土呀","article_time":"1608723038","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"雪山再勘测"},{"content_id":1759,"title":"暂行之策","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_567825350119151278.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2099457700405275875.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/1773201","article_user_name":"mr.xiaoba","article_time":"1600330084","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/15ed0f56b48f97eefb749fd54c88f823.png","summary":"暂行之策"},{"content_id":1758,"title":"黑岩之困","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_8951981266114536828.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7871738905392952074.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/1773201","article_user_name":"mr.xiaoba","article_time":"1600330084","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/15ed0f56b48f97eefb749fd54c88f823.png","summary":"黑岩之困"},{"content_id":1757,"title":"善后工作","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_2425267006727752782.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3619560697911674647.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22335023","article_user_name":"猫冬","article_time":"1652457580","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"善后工作"},{"content_id":1756,"title":"酒庄大扫除","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_2395028668475277398.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_582346863323348719.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22333985","article_user_name":"猫冬","article_time":"1652456533","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"酒庄大扫除"},{"content_id":1755,"title":"风后宝矿","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_7190560401642318829.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_717891612274764186.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22390183","article_user_name":"猫冬","article_time":"1652532702","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"风后宝矿"},{"content_id":1754,"title":"捕盗","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_6907587426381172756.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3380406758673033114.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/18/74019947/669bf9f0385983f08a794c4c632be0d1_2700344460052387621.png","bbs_url":"https://bbs.mihoyo.com/ys/article/22659639","article_user_name":"猫冬","article_time":"1652872355","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"捕盗"},{"content_id":1753,"title":"许伯利翁哀歌","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/2.4\\\",\\\"任务耗时/短流程\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/9080cd350b3601912c6e7d6cf5ce4cad_4903292867292728283.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5857315113379661097.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14187464","article_user_name":"猫冬","article_time":"1641378194","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"许伯利翁哀歌"},{"content_id":1752,"title":"白夜国晨昏记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.4\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/9080cd350b3601912c6e7d6cf5ce4cad_7183154970832116629.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5805608114094438980.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14161840","article_user_name":"猫冬","article_time":"1641358707","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"白夜国晨昏记"},{"content_id":1751,"title":"龙蛇洞宫试炼记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/9080cd350b3601912c6e7d6cf5ce4cad_1847598095060220624.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8570566913106053715.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14165556","article_user_name":"猫冬","article_time":"1641360670","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"龙蛇洞宫试炼记"},{"content_id":1750,"title":"厄瑞玻斯的秘密","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务耗时/长流程\\\",\\\"任务奖励/小道具\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/原石\\\",\\\"版本/2.4\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/9080cd350b3601912c6e7d6cf5ce4cad_8190145994339564854.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_5350568108691565926.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/01/05/74019947/2bf7c5aa1cd9ed537893af2f34b54b60_4226347022378124701.png","bbs_url":"https://bbs.mihoyo.com/ys/article/14182142","article_user_name":"猫冬","article_time":"1641373468","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"厄瑞玻斯的秘密包含:三隅道大演武"},{"content_id":1749,"title":"食莲者","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/9080cd350b3601912c6e7d6cf5ce4cad_2194281486538900666.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4457359378039874452.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14194307","article_user_name":"猫冬","article_time":"1641384053","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"食莲者"},{"content_id":1748,"title":"法厄同们全跳舞","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/9080cd350b3601912c6e7d6cf5ce4cad_5581139286716942658.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_465606526322820482.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14227598","article_user_name":"猫冬","article_time":"1641430129","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"法厄同们全跳舞"},{"content_id":1747,"title":"特别的御神签","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.4\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2699205438326445387.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_855563293842865764.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14232900","article_user_name":"猫冬","article_time":"1641437631","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"特别的御神签"},{"content_id":1746,"title":"身后事","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/璃月\\\",\\\"任务类型/世界任务\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_3391296217330000639.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1997009002265719225.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14285998","article_user_name":"猫冬","article_time":"1641522335","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"身后事包括:身后事·铜雀之迹、身后事·诸事平安、身后事·归于山中以上任务"},{"content_id":1745,"title":"文谷疑云","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.5\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_9179105774335805157.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1716665529828453575.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/17813126","article_user_name":"猫冬","article_time":"1645090693","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"文谷疑云"},{"content_id":1744,"title":"海洲逐雾","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.5\\\",\\\"任务类型/传说任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_8053625750570662997.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/a76af11210fa399a660b2b3c92935b43_679905080812453780.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/17815107","article_user_name":"猫冬","article_time":"1645092979","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"海洲逐雾"},{"content_id":1743,"title":"风暴后遗症","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_2028111121827263460.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4519036729751658810.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/29/74019947/6fcd65f0b752a8dc5da5ae5afddca9ea_2300697988411716026.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23280240","article_user_name":"猫冬","article_time":"1653834926","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"风暴后遗症"},{"content_id":1742,"title":"骑士团手册问答","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_7972144706453313665.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3838266596597680766.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22333419","article_user_name":"猫冬","article_time":"1652455905","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"骑士团手册问答"},{"content_id":1741,"title":"轻飘飘的花与芙萝拉","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_4035547785627014488.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4488382668973549572.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22338997","article_user_name":"猫冬","article_time":"1652460065","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"轻飘飘的花与芙萝拉"},{"content_id":1740,"title":"风起风息","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ca84128f3c051b4c181c2d2357d6548_5736335735773700705.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_598641729192696217.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22334403","article_user_name":"猫冬","article_time":"1652456965","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"风起风息"},{"content_id":1739,"title":"大生意","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_7751462779494821376.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5574369046861118659.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18137546","article_user_name":"子秦月夜","article_time":"1645708883","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"大生意"},{"content_id":1738,"title":"千年千岩","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/d3b4fdfa5ea4d518b0ada52633dba414_113337717103763298.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9026048867197945842.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19725004","article_user_name":"猫冬","article_time":"1648625770","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"千年千岩"},{"content_id":1737,"title":"潜身敌营无人知","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"版本/2.6\\\",\\\"任务耗时/长流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/d3b4fdfa5ea4d518b0ada52633dba414_5715433292417219415.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7314764492200369075.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19724578","article_user_name":"猫冬","article_time":"1648625279","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"潜身敌营无人知"},{"content_id":1736,"title":"灵石何故堕此间","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/d3b4fdfa5ea4d518b0ada52633dba414_7330533872996045672.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8011138792717301346.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19719317","article_user_name":"猫冬","article_time":"1648620433","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"灵石何故堕此间"},{"content_id":1735,"title":"孤木孑立,无林可依","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/67bba95f420cf06d291edb5a63b86a5a_2778557407532694609.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6643612205672639847.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18137011","article_user_name":"子秦月夜","article_time":"1645707896","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"孤木孑立,无林可依"},{"content_id":1734,"title":"勇气的余辉","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/2.6\\\",\\\"任务耗时/长流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_55376498892196375.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_201588248356446006.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19778642","article_user_name":"猫冬","article_time":"1648701059","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"勇气的余辉"},{"content_id":1733,"title":"方入巨渊初探勘","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"版本/2.6\\\",\\\"任务耗时/长流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_9102531138202962129.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7136328128645390911.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19717576","article_user_name":"猫冬","article_time":"1648618910","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"方入巨渊初探勘"},{"content_id":1732,"title":"九霄之石悬残片","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"版本/2.6\\\",\\\"任务耗时/长流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_2512122862052508769.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5189685185024708674.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19718251","article_user_name":"猫冬","article_time":"1648619481","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"九霄之石悬残片"},{"content_id":1731,"title":"黑翳渐浓隐凶险","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_3852672861501712669.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4949318743591771211.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19718817","article_user_name":"猫冬","article_time":"1648619970","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"黑翳渐浓隐凶险"},{"content_id":1730,"title":"冒险家…该干嘛?","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/67bba95f420cf06d291edb5a63b86a5a_6754973223208940091.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3968920380687446712.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18136079","article_user_name":"子秦月夜","article_time":"1645706310","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"冒险家…该干嘛?"},{"content_id":1729,"title":"失踪的矿工","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_7158670062478006180.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1009654289065065895.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19751803","article_user_name":"猫冬","article_time":"1648652814","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"失踪的矿工"},{"content_id":1728,"title":"水生环境调查","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_7747083983686844465.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1249981444064102651.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19736324","article_user_name":"猫冬","article_time":"1648637883","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"水生环境调查"},{"content_id":1727,"title":"层岩菌类调查","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_3992967637115680895.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7388505404812375030.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19735560","article_user_name":"猫冬","article_time":"1648637041","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"层岩菌类调查"},{"content_id":1726,"title":"古代生物调查","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_2515909861620723852.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2975594457629330859.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19734791","article_user_name":"猫冬","article_time":"1648636213","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"古代生物调查"},{"content_id":1725,"title":"他乡迷失客","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_5511644743884302709.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3999913925521526035.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19732091","article_user_name":"猫冬","article_time":"1648633301","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"他乡迷失客"},{"content_id":1724,"title":"物归原主又原主","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/67bba95f420cf06d291edb5a63b86a5a_6000683204250294443.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7455855323838355621.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19726028","article_user_name":"猫冬","article_time":"1648626766","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"物归原主又原主"},{"content_id":1723,"title":"黯淡蘑菇的求救","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_2747559270865233425.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8879124107343210430.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19733395","article_user_name":"猫冬","article_time":"1648634690","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"黯淡蘑菇的求救"},{"content_id":1722,"title":"巨渊的馈赠","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_1739893911413940379.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8416212101218788924.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19730833","article_user_name":"猫冬","article_time":"1648631972","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"巨渊的馈赠"},{"content_id":1721,"title":"连队消失在深岩","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_6010670473845239.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7033947029445654498.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19731525","article_user_name":"猫冬","article_time":"1648632733","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"连队消失在深岩"},{"content_id":1720,"title":"藏石者言","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/璃月\\\",\\\"任务类型/世界任务\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.6\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_127575657687548480.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5540763477822829383.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19730477","article_user_name":"猫冬","article_time":"1648631600","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"藏石者言"},{"content_id":1719,"title":"止水之潘","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.4\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_9186995509718194528.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6785400680289634449.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14157875","article_user_name":"猫冬","article_time":"1641356817","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"止水之潘"},{"content_id":1718,"title":"岩巅大侠往事","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/璃月\\\",\\\"任务耗时/短流程\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/2.6\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/67bba95f420cf06d291edb5a63b86a5a_3066327174170943160.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8550891652545659370.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19725286","article_user_name":"猫冬","article_time":"1648626039","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"岩巅大侠往事"},{"content_id":1717,"title":"巧瞒七星解磐键","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"版本/2.6\\\",\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/长流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/d3b4fdfa5ea4d518b0ada52633dba414_4751451742538932832.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3924915131557641921.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/19716926","article_user_name":"猫冬","article_time":"1648618413","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"巧瞒七星解磐键"},{"content_id":1716,"title":"暂留此影","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.2\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/67bba95f420cf06d291edb5a63b86a5a_1400253177976079786.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4902041852686885118.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18136801","article_user_name":"子秦月夜","article_time":"1645707621","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"暂留此影"},{"content_id":1715,"title":"旧味难寻","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_4994838077000889508.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_4986354608351969003.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18135975","article_user_name":"子秦月夜","article_time":"1645706111","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"旧味难寻"},{"content_id":1714,"title":"林中小书","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\",\\\"任务类型/世界任务\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_2999314882560891227.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1750412708675790077.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18135835","article_user_name":"子秦月夜","article_time":"1645705871","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"林中小书"},{"content_id":1713,"title":"游戏一场","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_4323677689190609250.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_6773667685205279792.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18135650","article_user_name":"子秦月夜","article_time":"1645705493","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"游戏一场"},{"content_id":1712,"title":"工作迫近","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_4987547298490400207.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_4490115586020920921.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18135342","article_user_name":"子秦月夜","article_time":"1645704972","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"工作迫近"},{"content_id":1711,"title":"璃月港平静的一天","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/1.0\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_7335309365701961860.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_9011443874790929649.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18134378","article_user_name":"子秦月夜","article_time":"1645703172","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"璃月港平静的一天"},{"content_id":1710,"title":"海上盛珠钿","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/1.0\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_4983283866355038276.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_115117260001571580.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18107188","article_user_name":"子秦月夜","article_time":"1645634797","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"海上盛珠钿"},{"content_id":1709,"title":"孤舰履孤云","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_1713347165320581354.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_4740490797942876174.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18106990","article_user_name":"子秦月夜","article_time":"1645634447","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"孤舰履孤云"},{"content_id":1708,"title":"渌华景画","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_7471037767326702542.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_6990891585355987615.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18106707","article_user_name":"子秦月夜","article_time":"1645633970","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"渌华景画"},{"content_id":1707,"title":"夜叉之愿","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_933159568797000001.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_1867355418239514355.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/18105828","article_user_name":"子秦月夜","article_time":"1645632800","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/9b3ba0955f25001047823e3ad904c87d.png","summary":"夜叉之愿"},{"content_id":1706,"title":"宝藏归离","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/璃月\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/67bba95f420cf06d291edb5a63b86a5a_1191727924202389437.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_7119288882711911681.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/06/07/74019947/096937dd33728194f4f25191dd032e65_4162429834780962953.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23751302","article_user_name":"猫冬","article_time":"1654581071","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"宝藏归离"},{"content_id":1705,"title":"时与风","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"版本/1.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ca84128f3c051b4c181c2d2357d6548_3841836228334081793.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_6070833744174116745.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/22399872","article_user_name":"猫冬","article_time":"1652542702","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"时与风"},{"content_id":1704,"title":"等量交换","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/蒙德\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"版本/1.0\\\",\\\"任务耗时/短流程\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ca84128f3c051b4c181c2d2357d6548_1663801210886052001.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/09/75379475/6ffa1cfc6fec6d7282fee1bc37443ceb_524182878498794900.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/05/29/74019947/d36c86bb58b06ea485d0e7c3d5f4009f_2560914732264078812.png","bbs_url":"https://bbs.mihoyo.com/ys/article/23276665","article_user_name":"猫冬","article_time":"1653830242","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"等量交换"},{"content_id":1703,"title":"月浴之渊","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_8753276370252586315.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7828461073157928563.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/14117844","article_user_name":"大天狗的夫人","article_time":"1641304477","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/1e823a457ffd5776afade9608721982c.png","summary":"月浴之渊"},{"content_id":1702,"title":"清籁逐雷记","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_6235383313135331862.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_705718381680112517.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9093146","article_user_name":"Dramaturge","article_time":"1630466303","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"清籁逐雷记"},{"content_id":1701,"title":"清籁旧忆","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_5366785262727763207.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5987483578183387894.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9099212","article_user_name":"Dramaturge","article_time":"1630468735","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"清籁旧忆"},{"content_id":1700,"title":"清籁旧宝","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.1\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_7268565127640720348.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7763536543121997446.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/9102715","article_user_name":"Dramaturge","article_time":"1630470323","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"清籁旧宝"},{"content_id":1699,"title":"神明啊,我做得对吗?","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2858810748982975571.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3675812815827743894.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/8830086","article_user_name":"再无四月的友人A.","article_time":"1629781191","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/04280a7a327e785e3948ec65ac4b3580.png","summary":"神明啊,我做得对吗?"},{"content_id":1698,"title":"在他乡","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_7185940780909838222.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8961342540118363443.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7938216","article_user_name":"Dramaturge","article_time":"1627445494","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"在他乡"},{"content_id":1697,"title":"广海的守望","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_2549720806107526237.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1290281822688169348.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7920139","article_user_name":"Dramaturge","article_time":"1627389690","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"广海的守望"},{"content_id":1696,"title":"《第七个武士》","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_3794653141205727946.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9171620016744898317.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7903297","article_user_name":"Dramaturge","article_time":"1627353013","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"《第七个武士》"},{"content_id":1695,"title":"栽种之法","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_5922845084411524087.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3154648185168702931.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7814049","article_user_name":"FTFuture","article_time":"1627124255","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"栽种之法"},{"content_id":1694,"title":"异国的披萨","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/稻妻\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/82e73e1fe8140e0d5ae7835df3dc3e18_4782198663814167325.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/10/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_140954018813581813.png\"]}}}","icon":"","bbs_url":"https://bbs.mihoyo.com/ys/article/7812481","article_user_name":"FTFuture","article_time":"1627121299","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"异国的披萨"}],"layout":"","entry_limit":0,"hidden":false},{"id":251,"name":"须弥专题","parent_id":45,"depth":3,"ch_ext":"[{\"type\":\"text\",\"attribute_name\":\"每行个数\",\"attribute_key\":\"col_per_row\",\"value\":\"2\"},{\"type\":\"text\",\"attribute_name\":\"展示样式\",\"attribute_key\":\"display_type\",\"value\":\"summaryVerti\"},{\"type\":\"text\",\"attribute_name\":\"频道icon\",\"attribute_key\":\"icon_url\",\"value\":\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/16314655/80e10875b12852129bd3af1d35b64dd9_7119753518051319261.png\"},{\"type\":\"text\",\"attribute_name\":\"跳转链接\",\"attribute_key\":\"jump_url\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc\",\"attribute_key\":\"icon_url_pc\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc-hover\",\"attribute_key\":\"icon_url_pc_hover\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"筛选器\",\"attribute_key\":\"filter\",\"value\":\"[]\"},{\"type\":\"text\",\"attribute_name\":\"首页更多\",\"attribute_key\":\"home_more\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"在目录中展示\",\"attribute_key\":\"show_in_catalog\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"最新词条\",\"attribute_key\":\"is_latest\",\"value\":\"0\"},{\"type\":\"text\",\"attribute_name\":\"更多入口icon\",\"attribute_key\":\"king_kong_icon\",\"value\":\"\"}]","children":[],"list":[{"content_id":2217,"title":"须弥隐藏成就「请安全玩耍」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/09/01/4896641/283be4fd3aff299dda04d1d304bd8d12_1653997692028520179.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28328240","article_user_name":"FTFuture","article_time":"1662040382","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——须弥隐藏成就「请安全玩耍」获取方式。"},{"content_id":2216,"title":"须弥隐藏成就「漫长的重逢」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/09/01/4896641/11d414368e26c22f5f1fbfb96bbeafa6_6952277351695922215.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28319483","article_user_name":"FTFuture","article_time":"1662027854","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——须弥隐藏成就「漫长的重逢」获取方式介绍。"},{"content_id":2215,"title":"须弥世界任务「求学路漫漫」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/09/02/4896641/34b608e9e5a6299dd819ad784a5db260_3391391884552035171.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28349998","article_user_name":"FTFuture","article_time":"1662087878","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「求学路漫漫」攻略详情。"},{"content_id":2211,"title":"须弥隐藏成就「蔷薇绽放的若干条件」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/28/4896641/796170306b3bc1e5a6a292216fe8ba18_4094202848874359261.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28107076","article_user_name":"FTFuture","article_time":"1661670703","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——须弥隐藏成就「蔷薇绽放的若干条件」获取方式。"},{"content_id":2210,"title":"成就「我明白了!我明白了!」及后续任务「智中之宝·新计划」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/28/4896641/6715657adab8d6ec577da0f4fefc866c_8895717428669179399.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28111431","article_user_name":"FTFuture","article_time":"1661676906","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——成就「我明白了!我明白了!」获取方式及后续任务「智中之宝·新计划」攻略详情。"},{"content_id":2209,"title":"7个深渊法师成就「宵暗与晓光之歌」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/4896641/cc074c36786eb075184c492e70a58626_8798559180957832963.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28167941","article_user_name":"FTFuture","article_time":"1661764063","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——7个深渊法师成就「宵暗与晓光之歌」获取攻略。"},{"content_id":2208,"title":"1摩拉挖掘精致箱隐藏成就「啊,美好的日子!」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/4896641/eaa65526ba15b12d8ada458df68db02f_2388560423778631722.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28171294","article_user_name":"FTFuture","article_time":"1661768412","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——1摩拉挖掘精致箱地点及隐藏成就「啊,美好的日子!」获取方式。"},{"content_id":2207,"title":"须弥隐藏任务「愚人者人愚之」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/4896641/e748dc06d66b0956711332a86799ceeb_5124801985741034622.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28177038","article_user_name":"FTFuture","article_time":"1661775481","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——须弥隐藏任务「愚人者人愚之」攻略详情"},{"content_id":2206,"title":"须弥每日委托「御用在他乡」隐藏成就「为了工作」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/30/4896641/163fef2e41eb59b6bc0b70e9f17b4409_782460518238615900.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28215394","article_user_name":"FTFuture","article_time":"1661841545","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——隐藏成就「为了工作」获取方式。"},{"content_id":2205,"title":"法留纳神机隐藏成就「呼风唤雨」、「…都汇进了激流」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/30/4896641/d91ac8478cadbaeab9ca3fd487d4b5df_6815499945282779059.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28224266","article_user_name":"FTFuture","article_time":"1661855349","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——隐藏成就「呼风唤雨」、「…都汇进了激流」获取方式。"},{"content_id":2204,"title":"须弥世界任务「与珍稀之鸟的短暂邂逅」流程攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/30/4896641/aefe3586687bfd4a67b4643a58abb27f_820838674596360274.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28236210","article_user_name":"FTFuture","article_time":"1661871566","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——须弥世界任务「与珍稀之鸟的短暂邂逅」攻略流程。"},{"content_id":2203,"title":"须弥世界任务「勇气戴于心上」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/09/01/4896641/ce2381f0e90f05f2d684acbef23cf087_7494729158057249033.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28301833","article_user_name":"FTFuture","article_time":"1662000665","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——须弥世界任务「勇气戴于心上」攻略流程。"},{"content_id":2202,"title":"隐藏成就「以『安弗塔斯』之名」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/09/01/4896641/5c8cd1692b06b99cacefa323a8fbfbf5_3081464746876289431.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28308801","article_user_name":"FTFuture","article_time":"1662010334","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——隐藏成就「以『安弗塔斯』之名」获取方式。"},{"content_id":2201,"title":"须弥隐藏世界任务「石锁机关秘话」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/09/01/4896641/ea11b6e2f1096d6d94199c81a95069fc_872291910138555935.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28311463","article_user_name":"FTFuture","article_time":"1662014954","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——须弥隐藏世界任务「石锁机关秘话」攻略流程。"},{"content_id":2200,"title":"【森林书VI神秘的剪贴簿】静态风景(附地图,对比图,挖掘图)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/09/01/232866066/e4b5e1117e383f985c32cf2b372a1e45_2022513495464632669.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28296506","article_user_name":"Dramaturge","article_time":"1661992306","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神探索攻略——【森林书VI神秘的剪贴簿】宝箱收集攻略。"},{"content_id":2194,"title":"须弥隐藏世界任务【石锁机关秘话】","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/31/158741257/b4a05df2f2642fd31baa699daaf2cf38_4442067890764248058.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28259175","article_user_name":"Slothw","article_time":"1661919584","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——须弥隐藏世界任务【石锁机关秘话】"},{"content_id":2193,"title":"【须弥世界任务】静态风景及其后篇","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/30/158741257/3b482cc3f69518fc5e1468c5c215c69b_2976669138065718456.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28212805","article_user_name":"Slothw","article_time":"1661837409","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——静态风景及其后篇攻略详情。"},{"content_id":2192,"title":"【须弥隐藏世界任务】-兽有失蹄","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/30/158741257/a1368855ae2ab2b16e03641e86a8cad9_4317762457442804035.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28210433","article_user_name":"Slothw","article_time":"1661833895","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——须弥隐藏任务【兽有失蹄】攻略合集。"},{"content_id":2191,"title":"【须弥世界任务】林中奇遇后续任务","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/158741257/d66437611c3d5159d90161d144bc4593_6653477656921417394.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28150979","article_user_name":"Slothw","article_time":"1661742262","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——林中奇遇后续任务攻略。"},{"content_id":2190,"title":"【须弥世界任务】水天供书后续任务-两个成就","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/158741257/b5f238da8ee137910896c1f8a7a8577f_5050723728490417782.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28148732","article_user_name":"Slothw","article_time":"1661739652","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——水天供书后续任务攻略,及两个成就获取"},{"content_id":2188,"title":"凶猛动物在哪里","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6896380468654831788.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1297699461776464867.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/8cd38553664732f29ee5bacc9a7baf41_6669277956419965812.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27984789","article_user_name":"Dramaturge","article_time":"1661473749","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"凶猛动物在哪里"},{"content_id":2187,"title":"勇气戴于心上","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8194896462743542567.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2561843745400712757.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/b56dbea1f8f05941db4020e74a8dca9e_1415533372434792074.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27985036","article_user_name":"猫冬","article_time":"1661474072","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"勇气戴于心上"},{"content_id":2186,"title":"静态风景·后篇","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2836147513472315096.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9103756581087362988.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/4fdcf5b3051e0df768a11c8ae592991a_3073948150550658238.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27985316","article_user_name":"猫冬","article_time":"1661474509","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"静态风景·后篇"},{"content_id":2185,"title":"静态风景","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6876009251616964269.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_773441285183487681.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/4fdcf5b3051e0df768a11c8ae592991a_3073948150550658238.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27985316","article_user_name":"猫冬","article_time":"1661474509","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"静态风景"},{"content_id":2184,"title":"石锁机关秘话","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8450892092184006925.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_944901787911909039.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/74019947/51dcad740bdf98b4cba25f4c4614585d_1385128218782090439.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27987198","article_user_name":"猫冬","article_time":"1661477067","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"石锁机关秘话"},{"content_id":2183,"title":"揭示兽径的曲调","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8815908055799384888.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4319182456171938685.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/6014189fc075d3a462ddb815aeb91b79_1674619304987474490.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28035385","article_user_name":"FTFuture","article_time":"1661541079","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"揭示兽径的曲调"},{"content_id":2182,"title":"新芽迸发的曲调","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2625436603906985636.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3696380346220986365.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/34f64d0da1d24d56352a5d436a57b744_5274808509522822828.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28034627","article_user_name":"FTFuture","article_time":"1661538173","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"新芽迸发的曲调"},{"content_id":2181,"title":"通往黯道的曲调","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2121418007132829565.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4922028749378678087.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/b8726240a2b221b90c8c1e0c006e690f_3596767994698589456.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28033210","article_user_name":"FTFuture","article_time":"1661534442","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"通往黯道的曲调"},{"content_id":2180,"title":"兽有失蹄","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_7074004279443824092.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2963441312392590380.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/feb0cd21f8fe1c31b0b80b4f97e34675_8651490379371147852.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28041173","article_user_name":"FTFuture","article_time":"1661562230","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"兽有失蹄"},{"content_id":2179,"title":"趁梦想气息逗留","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6901631443039286580.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1971527676767072854.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/c8db14500c04a4de67d553a5fe80ce62_7581181511570361553.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28044182","article_user_name":"FTFuture","article_time":"1661566888","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"趁梦想气息逗留"},{"content_id":2178,"title":"智中之宝·新计划","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1363530333373981315.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7168198754792083396.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/28/4896641/6715657adab8d6ec577da0f4fefc866c_8895717428669179399.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28111431","article_user_name":"FTFuture","article_time":"1661676906","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"智中之宝·新计划"},{"content_id":2177,"title":"回忆终章","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6586654049307533492.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2239993992952543344.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"回忆终章"},{"content_id":2176,"title":"兰纳迦的回忆","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6140986953698036021.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7571888457080150566.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"兰纳迦的回忆"},{"content_id":2175,"title":"兰迦鲁的涂鸦","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1504769124654212096.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_3834592621276750803.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"兰迦鲁的涂鸦"},{"content_id":2174,"title":"兰纳真的老友","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_4709525942510959216.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_492268168440378479.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"兰纳真的老友"},{"content_id":2173,"title":"直到「桓那」痊愈","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_5937986080553022133.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_4160779603201013436.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/dbfe679aaf9ce323c84c753b65eaa5a5_6568719843398160196.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28144183","article_user_name":"Dramaturge","article_time":"1661733972","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"直到「桓那」痊愈"},{"content_id":2172,"title":"愚人者人愚之","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_2004493427828713331.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_433756104049598898.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/4896641/e748dc06d66b0956711332a86799ceeb_5124801985741034622.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28177038","article_user_name":"FTFuture","article_time":"1661775481","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"愚人者人愚之"},{"content_id":2171,"title":"代价","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_214819351608391735.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6077774127711856614.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/680a016eef5641fe716e3fbb16e7963f_2719878020671264632.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28039883","article_user_name":"FTFuture","article_time":"1661559924","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"代价"},{"content_id":2166,"title":"【森林书I:林中奇遇后续】解决潜伏在维摩庄的恶人","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/232866066/c59520d529aeff4c1c1199998d9fd0c9_549565538812454696.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28066469","article_user_name":"Dramaturge","article_time":"1661599966","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——【森林书I:林中奇遇后续】解决潜伏在维摩庄的恶人,攻略流程。"},{"content_id":2165,"title":"【森林书III:水天供书后续】收集12个桓斯弥利底,予人以花","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/676666067b9ebe0df8f466aaf649c585_480972372705576963.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143884","article_user_name":"Dramaturge","article_time":"1661733584","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——【水天供书】后续任务攻略。"},{"content_id":2164,"title":"【森林书V:吉祥具书后续】直到「桓那」痊愈","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/dbfe679aaf9ce323c84c753b65eaa5a5_6568719843398160196.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28144183","article_user_name":"Dramaturge","article_time":"1661733972","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——【吉祥具书】后续任务攻略。"},{"content_id":2163,"title":"【森林书IV:正法炬书后续】回忆终章,众花园中的一颗核桃树","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/232866066/9b725417ad1d971dd20c89a63312e766_3734740166499574099.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28143779","article_user_name":"Dramaturge","article_time":"1661733419","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——【正法炬书】后续任务攻略。"},{"content_id":2162,"title":"须弥隐藏任务「代价」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/680a016eef5641fe716e3fbb16e7963f_2719878020671264632.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28039883","article_user_name":"FTFuture","article_time":"1661559924","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——须弥隐藏任务「代价」攻略流程。"},{"content_id":2161,"title":"须弥隐藏任务「兽有失蹄」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/feb0cd21f8fe1c31b0b80b4f97e34675_8651490379371147852.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28041173","article_user_name":"FTFuture","article_time":"1661562230","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——须弥隐藏任务「兽有失蹄」攻略流程。"},{"content_id":2160,"title":"【须弥任务攻略】「趁梦想气息逗留」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/c8db14500c04a4de67d553a5fe80ce62_7581181511570361553.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28044182","article_user_name":"FTFuture","article_time":"1661566888","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「趁梦想气息逗留」攻略流程。"},{"content_id":2159,"title":"【须弥任务攻略】隐藏任务「凶猛动物在哪里」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/27/4896641/8cd38553664732f29ee5bacc9a7baf41_6669277956419965812.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28047675","article_user_name":"FTFuture","article_time":"1661571793","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「凶猛动物在哪里」任务攻略流程。"},{"content_id":2158,"title":"羊皮卷解谜隐藏成就「无名之城的呼唤」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/4896641/5d09d0082035d778806c45ad1ac31018_1502966088656231355.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28163350","article_user_name":"FTFuture","article_time":"1661757789","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索攻略——羊皮卷解谜隐藏成就「无名之城的呼唤」获取方式。"},{"content_id":2151,"title":"水天供书后续任务-两个成就","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/29/158741257/b5f238da8ee137910896c1f8a7a8577f_5050723728490417782.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28148732","article_user_name":"Slothw","article_time":"1661739652","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【水天供书】后续任务攻略。"},{"content_id":2150,"title":"吉祥具书后续任务-直到「桓那」痊愈(包含一个华丽的宝箱)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/158741257/98fd8dc3dc5e5fb348f234766be8b154_6741773588313948059.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28008197","article_user_name":"Slothw","article_time":"1661504960","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【吉祥具书】后续任务攻略。"},{"content_id":2149,"title":"【回忆终章】-正法炬书后续任务","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/158741257/5667a244da375ede85ab1f5a1326eec1_8992965887830032137.png","bbs_url":"https://bbs.mihoyo.com/ys/article/28011102","article_user_name":"Slothw","article_time":"1661508745","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【正法炬书】后续任务攻略"},{"content_id":2146,"title":"森林书系列任务-无忧节","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/98cc877a7a53481a00f2c7e23c78b40f_4422778043779908837.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27968482","article_user_name":"Slothw","article_time":"1661440548","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书系列任务-无忧节"},{"content_id":2145,"title":"森林书任务第三章-失梦的苗圃","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/158741257/9ad046ae07d28b443b57d28e10d4582f_3303013731467974932.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27991085","article_user_name":"Slothw","article_time":"1661482083","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书任务第三章-失梦的苗圃"},{"content_id":2144,"title":"森林书第四章-最终,森林会忘记一切","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/158741257/8e0a24b783b8b248503ec6bb8cfcbfe4_1692564635947229583.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27991893","article_user_name":"Slothw","article_time":"1661483096","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书第四章-最终,森林会忘记一切"},{"content_id":2142,"title":"森林书第二章梦中的苗圃(2)通往黯道的曲调","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/232866066/628c82d209ea61ed4f82f6c6e952bd13_520152757806228882.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27867968","article_user_name":"Dramaturge","article_time":"1661324539","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第二章梦中的苗圃(2)通往黯道的曲调"},{"content_id":2141,"title":"森林书第二章梦中的苗圃(3)新芽迸发的曲调","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/232866066/b8a3b9babb1bad46fe63af881f76dbc2_6214412551211221806.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27871056","article_user_name":"Dramaturge","article_time":"1661327079","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第二章梦中的苗圃(3)新芽迸发的曲调"},{"content_id":2140,"title":"森林书第二章梦中的苗圃(4)揭示兽径的曲调","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/232866066/513e757dcaec02f932af1d05f3b2d3f7_569633808817792593.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27874600","article_user_name":"Dramaturge","article_time":"1661329848","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第二章梦中的苗圃(4)揭示兽径的曲调"},{"content_id":2139,"title":"吉祥具书全攻略,附解谜步骤","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/232866066/9a046125a1e1f1054c71bfb2cbe26828_5242399377343801434.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27889330","article_user_name":"Dramaturge","article_time":"1661341625","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——【吉祥具书】全攻略接卸"},{"content_id":2137,"title":"正法炬书任务攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/232866066/810bcc195694ea9fdcd48607ea6e8920_3699328435218485879.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27921816","article_user_name":"Dramaturge","article_time":"1661386650","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——正法炬书任务攻略"},{"content_id":2136,"title":"森林书第二章(5):森林的孩子们,完成条件","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/232866066/cc015dd2df3016ab2ef86d7520476498_3179118657460495597.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27922041","article_user_name":"Dramaturge","article_time":"1661387028","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第二章(5):森林的孩子们,完成条件"},{"content_id":2135,"title":"森林书第二章(6)无忧节完结篇,兰那罗全介绍","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/232866066/1beb01aa2d8aed475c4ab2004480df99_6375449655680284452.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27922130","article_user_name":"Dramaturge","article_time":"1661387196","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第二章(6)无忧节完结篇,兰那罗全介绍"},{"content_id":2133,"title":"森林书第三章:失梦的苗圃","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/232866066/38a72eb71f34c15138aa255943e63951_4701794972954080423.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27984057","article_user_name":"Dramaturge","article_time":"1661472608","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第三章:失梦的苗圃"},{"content_id":2132,"title":"森林书第四章:最终,森林会记住一切","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/232866066/75226ff15c718f4e7b41e28230c9ec15_797846611502173917.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27984776","article_user_name":"Dramaturge","article_time":"1661473720","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第四章:最终,森林会记住一切"},{"content_id":2131,"title":"无提示隐藏世界任务:凶猛动物在哪里","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/26/232866066/2c744b8837cd353fd9268779a0777895_278519760658389389.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27984789","article_user_name":"Dramaturge","article_time":"1661473749","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——隐藏世界任务:凶猛动物在哪里"},{"content_id":2128,"title":"失梦的苗圃","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_3317717166177454705.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6753638149780139936.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/8f0d344a7dc40d44629683039f8cd876_5307527649532857098.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27958072","article_user_name":"猫冬","article_time":"1661429434","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"失梦的苗圃"},{"content_id":2127,"title":"最终,森林会记住一切","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_7925555625519373913.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2085189661920724822.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/2718f42b6e85a20805f477a761ec1157_8569919818260092316.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27959018","article_user_name":"猫冬","article_time":"1661430574","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"最终,森林会记住一切"},{"content_id":2126,"title":"正法炬书","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1689409855256863338.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_6923718180415545233.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/6de162d5ab3aee0a6a9b426a1fc6a866_4007012364048682657.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27959566","article_user_name":"猫冬","article_time":"1661431198","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"正法炬书"},{"content_id":2125,"title":"愿为一炊之梦","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_6318013461213137071.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/26/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_5559288044984593996.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/74019947/2e22a9d8e5cccbe9d6db5357bdecfbfb_8587794117813420061.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27961264","article_user_name":"猫冬","article_time":"1661433128","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"愿为一炊之梦"},{"content_id":2119,"title":"如何完成森林的孩子们任务","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/68ba2fbd23492da2a50f8b1ae7dc2b49_4226643220449739167.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27950992","article_user_name":"Slothw","article_time":"1661421086","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书-森林的孩子们"},{"content_id":2118,"title":"「缄默的求知者」剧情副本宝箱收集","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/75720734/6bccb293cf12fc12270086ac0f09347f_9044005735840518997.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27897370","article_user_name":"冬卫","article_time":"1661348555","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神任务攻略——须弥魔神任务攻略"},{"content_id":2117,"title":"一篇须弥开机指南~让你对须弥多了解一点!","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/5861124/1d0c373655d7eb48c217901cd8b54937_7766011589080175375.jpg","bbs_url":"https://bbs.mihoyo.com/ys/article/27901297","article_user_name":"悦弥","article_time":"1661351624","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"原神新手攻略——须弥探索攻略。"},{"content_id":2115,"title":"须弥每日任务与须弥声望的开启方式","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/2895b37f9973d3baf9f51292bbbcc00c_9108432094949969714.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27923696","article_user_name":"Slothw","article_time":"1661389209","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神新手攻略——须弥每日任务与须弥声望的开启方式"},{"content_id":2114,"title":"森林书系列任务-水天供书","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/58054f92155f0b10251a6866337acb17_6540688010847579351.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27948126","article_user_name":"Slothw","article_time":"1661417671","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书系列任务-水天供书"},{"content_id":2113,"title":"森林书系列任务——正法炬书","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/dbc10baa7a51714488df8cba8e6f8b37_8140690487170182234.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27940950","article_user_name":"Slothw","article_time":"1661408439","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书系列任务——正法炬书"},{"content_id":2112,"title":"森林书系列任务-吉祥具书","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/3b6723b2db4bf81a3d09ae36bd590222_4636838153133548575.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27933347","article_user_name":"Slothw","article_time":"1661399760","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书系列任务-吉祥具书"},{"content_id":2110,"title":"森林书系列任务-新芽迸发的曲调","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/158741257/e88208f91489122c6ebbc621fcef1d20_2973367425103219819.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27880832","article_user_name":"Slothw","article_time":"1661334942","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书系列任务-新芽迸发的曲调"},{"content_id":2106,"title":"森林书系列任务-林中奇遇全攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/158741257/9f485ffe3c532e7d885458ed6797b1a4_4107603067320102922.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27862883","article_user_name":"Slothw","article_time":"1661320803","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书系列任务-林中奇遇全攻略。"},{"content_id":2105,"title":"森林书系列任务-愿为一炊之梦","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/158741257/f6bfa52f7004e11edc534cfd5e90c77c_72262480221621754.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27871315","article_user_name":"Slothw","article_time":"1661327301","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——森林书系列任务-愿为一炊之梦。"},{"content_id":2097,"title":"森林书第一章:林中奇遇","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/232866066/1e5021ec5c033b698d282f226b21b162_4930990055457970045.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27849926","article_user_name":"Dramaturge","article_time":"1661313335","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——森林书第一章:林中奇遇"},{"content_id":2096,"title":"森林书第二章:梦中的苗圃","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/232866066/4c8b4858adca3a0e6b1406fc2508ed6a_1058074502298747039.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27856649","article_user_name":"Dramaturge","article_time":"1661316919","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——森林书第二章:梦中的苗圃"},{"content_id":2124,"title":"新蓓萌生","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务耗时/短流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_8790557952753057663.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_2129702648662016238.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/29dd4bc6cd202b5f66ba9c899e7968bf_8573965571868981533.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27897177","article_user_name":"猫冬","article_time":"1661348359","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"新蓓萌生"},{"content_id":2123,"title":"吉祥具书","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_5543754515835864638.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_523562964340647717.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/271194bfd9d016dae53247d182d67df0_2353390460500254146.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27895851","article_user_name":"猫冬","article_time":"1661347411","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"吉祥具书"},{"content_id":2122,"title":"水天供书","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_3184385665349189779.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_9124913837172865328.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/25/158741257/58054f92155f0b10251a6866337acb17_6540688010847579351.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27948126","article_user_name":"Slothw","article_time":"1661417671","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"水天供书"},{"content_id":2121,"title":"梦中的苗圃","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_7836224974905062767.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_1522514970762790553.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/a05f1198d43b353845199fa9a1ecb2ff_602651168112755263.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27891900","article_user_name":"猫冬","article_time":"1661343893","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"梦中的苗圃"},{"content_id":2120,"title":"林中奇遇","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/须弥\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/长流程\\\",\\\"版本/3.0\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/29/6276411/8a0e71f7fb4ffa836ffc74ab336665ed_1003988700627651088.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/25/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_7341723604240082635.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/24/74019947/549b1e58cf08302d07accf44ac131558_372965616930859556.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27890599","article_user_name":"猫冬","article_time":"1661342749","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"林中奇遇"}],"layout":"","entry_limit":0,"hidden":false},{"id":226,"name":"层岩专题","parent_id":45,"depth":3,"ch_ext":"[{\"type\":\"text\",\"attribute_name\":\"每行个数\",\"attribute_key\":\"col_per_row\",\"value\":\"1\"},{\"type\":\"text\",\"attribute_name\":\"展示样式\",\"attribute_key\":\"display_type\",\"value\":\"summaryVerti\"},{\"type\":\"text\",\"attribute_name\":\"频道icon\",\"attribute_key\":\"icon_url\",\"value\":\"https://uploadstatic.mihoyo.com/ys-obc/2022/05/11/75379475/a48ef0d16181e3e6fe0c01e04f890a29_5414760769208868156.png\"},{\"type\":\"text\",\"attribute_name\":\"跳转链接\",\"attribute_key\":\"jump_url\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc\",\"attribute_key\":\"icon_url_pc\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc-hover\",\"attribute_key\":\"icon_url_pc_hover\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"筛选器\",\"attribute_key\":\"filter\",\"value\":\"[]\"},{\"type\":\"text\",\"attribute_name\":\"首页更多\",\"attribute_key\":\"home_more\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"在目录中展示\",\"attribute_key\":\"show_in_catalog\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"最新词条\",\"attribute_key\":\"is_latest\",\"value\":\"0\"},{\"type\":\"text\",\"attribute_name\":\"更多入口icon\",\"attribute_key\":\"king_kong_icon\",\"value\":\"\"}]","children":[],"list":[{"content_id":1588,"title":"层岩巨渊·地下矿区仙灵","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/03/163033432/aa45b8ecf299ef2e776ab1880b8c39fb_3800548239084626461.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19967225","article_user_name":"Lion_X","article_time":"1648965594","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/ec4e226f47a169749d96433dd63f391e.png","summary":"原神探索解密攻略——层岩巨渊·地下矿区仙灵全解锁攻略"},{"content_id":1578,"title":"「挑战者·第五辑」成就全攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/05/4896641/bb1dae403b4caaf0d737e11504271e28_1332167909672190408.png","bbs_url":"https://bbs.mihoyo.com/ys/article/20054181","article_user_name":"FTFuture","article_time":"1649095177","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——「挑战者·第五辑」全成就获取攻略"},{"content_id":1577,"title":"2.6隐藏成就「狡兔之窟」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/04/4896641/b33efddec24b780b16a74bedb787c56f_3562699497858080140.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19998479","article_user_name":"FTFuture","article_time":"1649004303","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——「狡兔之窟」成就获取攻略"},{"content_id":1576,"title":"2.6隐藏成就「层岩巨渊矿产志」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/03/4896641/d6ffd2655ccf28f55d0be8485aac510f_5358563563394451327.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19995383","article_user_name":"FTFuture","article_time":"1649001379","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——「层岩巨渊矿产志」成就获取攻略"},{"content_id":1575,"title":"2.6隐藏成就「舍我其谁!」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/03/4896641/70afb252649e6eafa2405e5d2c9372dd_935028532528002971.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19992291","article_user_name":"FTFuture","article_time":"1648997826","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神解密攻略——「舍我其谁!」成就获取攻略"},{"content_id":1574,"title":"2.6隐藏成就「生命之谷的居民」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/03/4896641/b5f28e8c90ea8ae6ccff7c01898ae9a0_380579067739186056.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19988967","article_user_name":"FTFuture","article_time":"1648994049","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——「生命之谷的居民」成就获取攻略"},{"content_id":1573,"title":"2.6隐藏成就「塔列辛之书」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/03/4896641/f74df428aa5434a4a39ed82f3173540b_9155467935171013379.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19985264","article_user_name":"FTFuture","article_time":"1648989863","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——「塔列辛之书」"},{"content_id":1572,"title":"2.6隐藏成就「9文字之传言」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/02/4896641/bd816677974588334463ffe22f9e4df8_4241059347687611280.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19926496","article_user_name":"FTFuture","article_time":"1648899619","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——「9文字之传言」成就获取攻略"},{"content_id":1571,"title":"2.6隐藏成就「CREDE TENEBRAE」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/02/4896641/4bfc2ce6b5e6e99be928b1c806764306_255047531283114348.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19919167","article_user_name":"FTFuture","article_time":"1648890659","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——「CREDE TENEBRAE」成就获取攻略"},{"content_id":1570,"title":"2.6版本世界任务「勇气的余晖」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/01/4896641/0383823957b08b23c0a2c09375402d64_3691906381217773025.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19862297","article_user_name":"FTFuture","article_time":"1648809875","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「勇气的余晖」攻略流程"},{"content_id":1569,"title":"「深渊文字」——9文字之传言","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/01/168369411/4e5c7f9513a6727deb213053a7cebe19_2018074332557667743.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19858790","article_user_name":"三土呀","article_time":"1648806098","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神探索解密攻略——「深渊文字」攻略流程"},{"content_id":1568,"title":"「渊青宝珠」——九个黯色空壳","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/01/168369411/dad8887e9a49d4d7aec2eaf79de06942_2909293986732729637.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19858775","article_user_name":"三土呀","article_time":"1648806082","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神探索解密攻略——「渊青宝珠」攻略流程"},{"content_id":1567,"title":"「勇气的余晖」——冒险之意义在哪","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/02/168369411/aa12fe87d3436389b6a9f5844e4a0b67_8365426478182073863.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19915503","article_user_name":"三土呀","article_time":"1648886413","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「勇气的余晖」攻略流程"},{"content_id":1566,"title":"「塔列辛之书」——讲层岩巨渊故事","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/02/168369411/17111acd39757afdb43bccc6aa963d20_8033517779143150044.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19886921","article_user_name":"三土呀","article_time":"1648839629","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神探索解密攻略——「塔列辛之书」攻略流程"},{"content_id":1565,"title":"「愚人众行动日志」——舍我其谁","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/02/168369411/d50f840c6af2fa6281afd889237f6b39_3081338622519706634.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19886918","article_user_name":"三土呀","article_time":"1648839618","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神探索解密攻略——「愚人众行动日志」攻略流程"},{"content_id":1564,"title":"「层岩巨渊矿产志」——三本矿产志","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/02/168369411/18df3f5e80c9d90791d0453124faf0fb_8804488077482825083.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19886916","article_user_name":"三土呀","article_time":"1648839606","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神探索解密攻略——「层岩巨渊矿产志」攻略流程"},{"content_id":1563,"title":"「干枯的种子」——生命之谷的居民","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/04/02/168369411/4a8f7d7e61920bbb36327eb1350984be_8389672764521094520.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19886907","article_user_name":"三土呀","article_time":"1648839572","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神探索解密攻略——「干枯的种子」攻略流程"},{"content_id":1557,"title":"「古代生物调查」——五张化石照片","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/60690993b3f8e8c2a44c2840dfad401e_4182389432896548254.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19815705","article_user_name":"三土呀","article_time":"1648743155","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「古代生物调查」任务流程攻略"},{"content_id":1556,"title":"「水生环境调查」——奇怪的物件","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/537f9ca85e8fe619fc0726dc5d2c001d_4775244063691519187.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19808081","article_user_name":"三土呀","article_time":"1648735991","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「水生环境调查」任务攻略流程"},{"content_id":1555,"title":"「千年千岩」——六个供奉之物","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/168369411/14be47af43a559a7ce0b529a43ce6596_7840779975084808843.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19719708","article_user_name":"三土呀","article_time":"1648620767","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「千年千岩」任务流程攻略"},{"content_id":1554,"title":"「潜身敌营无人知」——藏宝图宝藏","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/168369411/609c0fc90ee5df63c755d4857143556c_7672147296599594670.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19720398","article_user_name":"三土呀","article_time":"1648621391","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「潜身敌营无人知」任务流程攻略"},{"content_id":1553,"title":"「藏石者言」——九个老石","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/168369411/2076aec281c2dd8fe3cc47fbeba45cd6_840025082571421123.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19724117","article_user_name":"三土呀","article_time":"1648624784","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「藏石者言」任务流程攻略"},{"content_id":1552,"title":"「岩巅大侠往事」——挖宝游戏","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/168369411/f559d51212bfcb7b200c026c1da55e9f_2420193605254527610.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19725406","article_user_name":"三土呀","article_time":"1648626140","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「岩巅大侠往事」任务流程攻略"},{"content_id":1551,"title":"「物归原主又归原主」——抓盗宝鼬","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/168369411/c9cc746ec4ba6479f606542a6f4ba4e0_623819991235273250.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19727348","article_user_name":"三土呀","article_time":"1648628120","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「物归原主又归原主」任务流程攻略"},{"content_id":1550,"title":"「层岩巨渊深游记」璃月大解谜任务","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/e9cda3c76cf5b180cc7349b8591d26ef_5347134615744917621.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19775297","article_user_name":"三土呀","article_time":"1648696853","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「层岩巨渊深游记」任务流程攻略"},{"content_id":1549,"title":"「暗淡蘑菇的求救」——说话的蘑菇","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/159c1a117fe62072075aee9d48443ad0_6797638540862377484.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19781685","article_user_name":"三土呀","article_time":"1648704710","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「暗淡蘑菇的求救」任务流程攻略"},{"content_id":1548,"title":"「他乡迷失客」——落单的雷莹术士","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/c3decd601980cf8d8aa6dd487098896e_9032554968133912704.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19783851","article_user_name":"三土呀","article_time":"1648707599","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「他乡迷失客」任务流程攻略"},{"content_id":1547,"title":"「连队消失在深岩」—失联的愚人众","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/5dd701bb006622aa76d9921557d4218c_4848376277391829327.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19789457","article_user_name":"三土呀","article_time":"1648715101","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「连队消失在深岩」任务流程攻略"},{"content_id":1546,"title":"「失踪的矿工」——饿了!毒蘑菇!","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/f64a7ad65d8f49b30eb770c77f1d0820_8113128558765255426.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19791183","article_user_name":"三土呀","article_time":"1648717362","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「失踪的矿工」任务流程攻略"},{"content_id":1545,"title":"「巨渊的馈赠」——女儿?幽灵?","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/9d4562bf2d1940aee6ec5bea65ebf59b_6688000232626773782.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19792436","article_user_name":"三土呀","article_time":"1648719120","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「巨渊的馈赠」任务流程攻略"},{"content_id":1544,"title":"「层岩菌类调查」——发光的蘑菇","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/168369411/4f978212dbc0faad3a38fbc6b7506ced_459550048833292748.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19793538","article_user_name":"三土呀","article_time":"1648720643","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/7537c48f03523f00c8dcb0e3297aaa1a.png","summary":"原神任务攻略——「层岩菌类调查」任务流程攻略"},{"content_id":1543,"title":"隐藏成就:《层岩巨渊矿产志》","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/74019947/7508d6ab68aa6870542620e7b7d7f4a5_6386029134336897488.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19799466","article_user_name":"猫冬","article_time":"1648726965","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——《层岩巨渊矿产志》隐藏成就获取攻略"},{"content_id":1542,"title":"隐藏成就:《塔列辛之书》解锁方法","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/74019947/6a861ac438312044b3e3859c649109fe_7018880339894680474.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19798421","article_user_name":"猫冬","article_time":"1648725976","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——《塔列辛之书》解密攻略"},{"content_id":1541,"title":"【世界任务整合】2.6层岩巨原世界任务整合篇","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/73705865/3b9d733f3a147411bbe518cce93f3a35_2770147059429382663.jpg","bbs_url":"https://bbs.mihoyo.com/ys/article/19797650","article_user_name":"mr.xiaoba","article_time":"1648725183","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/15ed0f56b48f97eefb749fd54c88f823.png","summary":"原神任务攻略——层岩巨渊世界任务合计。"},{"content_id":1539,"title":"2.6版本世界任务「千年千岩」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/f39f9cda45d18e3e33a5f8b03b26ef9a_8943368484958800973.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19771827","article_user_name":"FTFuture","article_time":"1648692474","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「千年千岩」流程攻略"},{"content_id":1538,"title":"2.6版本世界任务「潜身敌营无人知」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/abeae215b59933577f36dbbe03c7972b_8482338880805250077.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19766821","article_user_name":"FTFuture","article_time":"1648685277","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「潜身敌营无人知」流程攻略"},{"content_id":1537,"title":"2.6版本世界任务「岩巅大侠往事」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/2047d05233b97aa4ecd46e246895e7e9_4294691802547331297.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19765417","article_user_name":"FTFuture","article_time":"1648682591","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「岩巅大侠往事」流程攻略"},{"content_id":1536,"title":"2.6版本世界任务「巨渊的馈赠」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/c2eab1ddd8ec471d8185b17e37976e23_5790168822109506908.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19764067","article_user_name":"FTFuture","article_time":"1648678573","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「巨渊的馈赠」流程攻略"},{"content_id":1535,"title":"2.6版本世界任务「物归原主又归原主」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/0cd3ffa1b853a068cf26689fad3c56b2_8774382149998365114.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19763685","article_user_name":"FTFuture","article_time":"1648675627","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「物归原主又归原主」流程攻略"},{"content_id":1534,"title":"2.6版本世界任务「连队消失在深岩」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/b9ff41e77e8ec234eec567cd993b2613_3474256479601371621.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19763601","article_user_name":"FTFuture","article_time":"1648674752","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「连队消失在深岩」流程攻略"},{"content_id":1533,"title":"2.6版本世界任务「藏石者言」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/606446a0dfa711ce317481dcaff95593_1088380070600430164.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19763599","article_user_name":"FTFuture","article_time":"1648674732","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「藏石者言」攻略流程"},{"content_id":1532,"title":"2.6版本海迪夫隐藏任务其三「古代生物调查」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/ec35ab3596ebdb3c69db574235ff7175_6783001480275099027.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19763111","article_user_name":"FTFuture","article_time":"1648669934","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「古代生物调查」攻略流程"},{"content_id":1531,"title":"2.6版本海迪夫隐藏任务其二「层岩菌类调查」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/4ef0629c37e1c880c828625a9128bbb6_27066293749297182.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19762245","article_user_name":"FTFuture","article_time":"1648665424","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「层岩菌类调查」攻略流程"},{"content_id":1530,"title":"2.6版本海迪夫隐藏任务其一「水生环境调查」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/aaadf79dc42e78f438b3a95e1a35348a_4789669561143022137.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19761965","article_user_name":"FTFuture","article_time":"1648664553","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「水生环境调查」攻略流程"},{"content_id":1529,"title":"2.6版本隐藏任务「他乡迷失客」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/475ca6b4ff2389573796906d9ce0301a_2337704050682865043.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19761215","article_user_name":"FTFuture","article_time":"1648662531","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「他乡迷失客」攻略流程"},{"content_id":1528,"title":"2.6版本隐藏任务「黯淡蘑菇的求救」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/da425bd525af2bc0b4de7a593f20032b_2088146149572996938.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19760763","article_user_name":"FTFuture","article_time":"1648661642","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「黯淡蘑菇的求救」攻略流程"},{"content_id":1527,"title":"2.6版本隐藏任务「失踪的矿工」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/4896641/17755c17f9ecfe2d2720cc62bdb312b3_3197053926058543210.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19757350","article_user_name":"FTFuture","article_time":"1648657473","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「失踪的矿工」攻略流程"},{"content_id":1526,"title":"「层岩巨渊深游记」其六「灵石何故堕此间」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/4896641/a33777478a24bde94372b976de2e902f_7467438480689679418.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19737972","article_user_name":"FTFuture","article_time":"1648639489","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「灵石何故堕此间」流程攻略"},{"content_id":1525,"title":"「层岩巨渊深游记」其五「黑翳渐浓隐凶险」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/4896641/d63f9432269335584fe34b9d1598e9e6_1390111861741700192.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19734793","article_user_name":"FTFuture","article_time":"1648636213","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「黑翳渐浓隐凶险」攻略流程"},{"content_id":1524,"title":"「层岩巨渊深游记」其四「九霄之石悬残片」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/4896641/a1156f8aff8c1ca90ac12cdbdac8fc00_388884199844339797.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19730675","article_user_name":"FTFuture","article_time":"1648631804","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「九霄之石悬残片」攻略流程"},{"content_id":1523,"title":"「层岩巨渊深游记」其三「方入巨渊初勘探」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/4896641/dcb526571e427fb2e1b8daa70e55f1a3_7400188906813194476.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19728230","article_user_name":"FTFuture","article_time":"1648629090","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「方入巨渊初勘探」攻略流程"},{"content_id":1522,"title":"渊青宝珠与隐藏成就:CREDE THENEBRAE","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/1a7f04d3b5fd3dfe8ae14b6a2e2fbb46_7523817432389527907.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19749468","article_user_name":"猫冬","article_time":"1648650847","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——隐藏成就【CREDE THENEBRAE】获取攻略"},{"content_id":1521,"title":"深渊文字以及隐藏成就:9文字之传言","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/76f2b6b0a9ac8a606a91cd01287b5f31_5934020727650681813.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19745326","article_user_name":"猫冬","article_time":"1648647010","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——隐藏成就【9文字之传言】获取攻略"},{"content_id":1520,"title":"干枯的种子以及隐藏成就:生命之谷的居民","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/f3357448fc4193216cf4de017ab10f48_5262027155453206953.jpeg","bbs_url":"https://bbs.mihoyo.com/ys/article/19740821","article_user_name":"猫冬","article_time":"1648642516","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——隐藏成就【生命之谷的居民】获取攻略"},{"content_id":1519,"title":"密道以及隐藏成就:「只需一些柴火、一些醋」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/f3357448fc4193216cf4de017ab10f48_7768909087924549317.jpeg","bbs_url":"https://bbs.mihoyo.com/ys/article/19740746","article_user_name":"猫冬","article_time":"1648642425","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——隐藏成就【只需一些柴火、一些醋】获取攻略"},{"content_id":1518,"title":"藏宝图碎片以及隐藏成就:狡兔之窟","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/3900260c7f75a10968c9630696508b39_933932468092338223.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19737650","article_user_name":"猫冬","article_time":"1648639150","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——隐藏成就【狡兔之窟】获取攻略"},{"content_id":1517,"title":"层岩巨渊隐藏任务:水生环境调查","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/e3c98930490ea0fd1b413d3731016ed9_4556939907165259059.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19736324","article_user_name":"猫冬","article_time":"1648637883","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【水生环境调查】流程攻略"},{"content_id":1516,"title":"层岩巨渊隐藏任务:层岩菌类调查","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/7468d2ee11906640b1e6be3457f1b1e1_1100822081342252227.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19735560","article_user_name":"猫冬","article_time":"1648637041","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【层岩菌类调查】流程攻略"},{"content_id":1515,"title":"层岩巨渊隐藏任务:古代生物调查","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/b3e3366388a2fb4dc1927361cb14d70b_5699690970282742142.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19734791","article_user_name":"猫冬","article_time":"1648636213","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【古代生物调查】流程攻略"},{"content_id":1514,"title":"层岩巨渊隐藏任务:勇气的余辉","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/31/74019947/a24385750c55b598340a4abf8e2c9b67_4377537738165015524.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19778642","article_user_name":"猫冬","article_time":"1648701059","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【勇气的余辉】流程攻略"},{"content_id":1512,"title":"璃月世界任务6:失踪的矿工","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/d3aa34496c2eec3caa8cb0279ae7ad41_7596510255202274431.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19751803","article_user_name":"猫冬","article_time":"1648652814","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【失踪的矿工】攻略流程"},{"content_id":1511,"title":"层岩巨渊隐藏任务:黯淡蘑菇的求救","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/a0e87cda53be1c83eac44d19c29fb6cf_5400001708843172647.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19733395","article_user_name":"猫冬","article_time":"1648634690","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——隐藏任务【黯淡蘑菇的求救】攻略流程"},{"content_id":1510,"title":"层岩巨渊隐藏任务:他乡迷失客","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/9149d49d9d51491cf4d5e075b17232b9_4085342585571314882.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19732091","article_user_name":"猫冬","article_time":"1648633301","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——隐藏任务【他乡迷失客】攻略流程"},{"content_id":1509,"title":"层岩巨渊隐藏任务:连队消失在深岩","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/4b25d31ae143b72da3db7ae958260135_7860721777075747535.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19731525","article_user_name":"猫冬","article_time":"1648632733","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——隐藏任务【连队消失在深岩】攻略流程"},{"content_id":1508,"title":"层岩巨渊隐藏任务:巨渊的馈赠","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/90df84b6818602d9b36204304ee4433b_2225770835734690883.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19730833","article_user_name":"猫冬","article_time":"1648631972","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——隐藏任务【巨渊的馈赠】攻略流程"},{"content_id":1507,"title":"璃月世界任务5:藏石者言(老石)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/a61e585c0fe188998345e5655d916887_2617545276453113441.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19730477","article_user_name":"猫冬","article_time":"1648631600","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【藏石者言】任务攻略流程"},{"content_id":1505,"title":"璃月世界任务4:物归原主又原主","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/7ace209159e89f262d7761d4d3570183_459642987871544326.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19726028","article_user_name":"猫冬","article_time":"1648626766","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【物归原主又原主】任务攻略流程"},{"content_id":1504,"title":"璃月世界任务3:岩巅大侠往事","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/3284964ab9590823737ea7829eaa7b50_6831482348311697726.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19725286","article_user_name":"猫冬","article_time":"1648626039","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【岩巅大侠往事】任务攻略流程"},{"content_id":1503,"title":"璃月世界任务2:千年千岩(供物)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/5a919dffe72f1e8cbe96e23295a31f1a_3056833650124975742.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19725004","article_user_name":"猫冬","article_time":"1648625770","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【千年千岩】任务攻略流程"},{"content_id":1502,"title":"璃月世界任务1:潜身敌营无人知","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/2959cfc08a685141ca8c791db904c296_7876576541848742714.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19724578","article_user_name":"猫冬","article_time":"1648625279","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【潜身敌营无人知】任务攻略流程"},{"content_id":1501,"title":"【璃月·层岩巨渊攻略】主线世界任务5:灵石何故堕此间","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/7d9797a42ca84902b3c65809370a7b1d_3316917329869190065.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19719317","article_user_name":"猫冬","article_time":"1648620433","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【灵石何故堕此间】任务攻略流程"},{"content_id":1500,"title":"【璃月·层岩巨渊攻略】主线世界任务4:黑翳渐哝隐凶险","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/751a37505a3e75a9ad0399c6072d4026_3085875423691419717.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19718817","article_user_name":"猫冬","article_time":"1648619970","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【黑翳渐哝隐凶险】任务攻略流程"},{"content_id":1499,"title":"【璃月·层岩巨渊攻略】主线世界任务3:九霄之石悬残片","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/72b04119ad286854cf6141e7dbe60d21_6307961926693006432.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19718251","article_user_name":"猫冬","article_time":"1648619481","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【九霄之石悬残片】任务攻略流程"},{"content_id":1498,"title":"【璃月·层岩巨渊攻略】主线世界任务2:方入巨渊初探勘","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/769e4b8275b1b2537456d3ac570d5ed3_3430563944331629052.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19717576","article_user_name":"猫冬","article_time":"1648618910","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【方入巨渊初探勘】任务攻略流程"},{"content_id":1497,"title":"【璃月·层岩巨渊攻略】主线世界任务1:巧瞒七星解磐键","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/74019947/c64794e4a9594ec78393e6974ea645de_8781091133149436465.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19716926","article_user_name":"猫冬","article_time":"1648618413","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神任务攻略——【巧瞒七星解磐键】任务攻略流程"},{"content_id":1496,"title":"层岩巨渊圣遗物副本开启方法","ext":"{}","icon":"https://uploadstatic.mihoyo.com/ys-obc/2022/03/30/6276411/86882bb53da7eb2324380d72c7afbeed_5097350910030587981.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19708125","article_user_name":"猫冬","article_time":"1648612316","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6e5de7180fcd774da7ca493d8809d6e2.png","summary":"原神探索解密攻略——祝圣秘境:机巢解锁攻略视频。"},{"content_id":1495,"title":"【层岩谜云】6处供物点位/任务·千年千岩","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/79695828/d3de411eb58b6eb8c7d72c949c8c032c_4668600702804377689.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19719879","article_user_name":"Asgater","article_time":"1648620912","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/36e323070844ffa2f1905855ea0b2cef.png","summary":"原神任务攻略——【千年千岩】6个供物点位展示"},{"content_id":1494,"title":"【层岩谜云】藏石者岩/老石点位标记","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/79695828/cc88d7ee21ee869abc37a8fea9ea5f93_4572664002196943829.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19725373","article_user_name":"Asgater","article_time":"1648626105","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/36e323070844ffa2f1905855ea0b2cef.png","summary":"原神任务攻略——【藏石者岩】老石收集攻略"},{"content_id":1492,"title":"「层岩巨渊深游记」其二「巧瞒七星解磐键」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/4896641/565e7525fe3e9055dad762b84557198d_9122942402399904332.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19725081","article_user_name":"FTFuture","article_time":"1648625853","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「巧瞒七星解磐键」任务攻略流程"},{"content_id":1491,"title":"「层岩巨渊深游记」其一「层岩巨渊寻访记」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/4896641/e91f0fdccacc3cf4d9962d53416b289c_4491513775819567202.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19724940","article_user_name":"FTFuture","article_time":"1648625685","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「层岩巨渊寻访记」任务攻略流程"},{"content_id":1489,"title":"2.6版本「岩中幽谷」解锁攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/4896641/0a689e9ea2e23614f24107eaa1db993d_265181979334484695.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19708186","article_user_name":"FTFuture","article_time":"1648612366","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神探索解密攻略——秘境「岩中幽谷」解锁攻略"},{"content_id":1488,"title":"层岩巨渊深游记之方入巨渊初勘探","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/158741257/0d78af0e6dfbe54f4a1a8da2e4024059_2797416063373973192.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19717814","article_user_name":"Slothw","article_time":"1648619105","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【方入巨渊初勘探】任务攻略流程"},{"content_id":1487,"title":"层岩 世界任务:物归原主又归原主","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/75720734/39e7feb68259fc90d965b70ab7c4f162_2004664237656557050.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19720271","article_user_name":"韩牧九","article_time":"1648621268","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神任务攻略——【物归原主又归原主】任务攻略流程"},{"content_id":1486,"title":"层岩巨渊 世界任务:千年千岩","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/75720734/f41f01b4e8f5779289da797cfa8199c0_3748444087341266521.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19719337","article_user_name":"韩牧九","article_time":"1648620451","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神任务攻略——【千年千岩】任务攻略流程。"},{"content_id":1485,"title":"层岩巨渊 世界任务:岩巅大侠往事","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/75720734/3cb1132869751839ddbc079b473f1bec_5307678985142065396.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19716685","article_user_name":"韩牧九","article_time":"1648618222","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神任务攻略——【岩巅大侠往事】任务攻略流程"},{"content_id":1484,"title":"层岩巨渊 世界任务:藏石者言","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/75720734/67c9850655da06b7258da15694347c51_5756817717810631238.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19714321","article_user_name":"韩牧九","article_time":"1648616570","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神任务攻略——【藏石者言】任务攻略流程"},{"content_id":1483,"title":"层岩巨渊世界任务:潜身敌营无人知","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/75720734/3e1c6552a71479275b690a7d124a30a0_417000157452151360.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19711206","article_user_name":"韩牧九","article_time":"1648614564","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神任务攻略——【潜身敌营无人知】任务攻略流程。"},{"content_id":1482,"title":"世界任务:层岩巨渊探游记•地面篇","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/75720734/011793683b6297e9f22fb77c910d4e94_833198855708078173.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19707700","article_user_name":"韩牧九","article_time":"1648611988","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神任务攻略——【层岩巨渊探游记•地面篇】任务攻略流程"},{"content_id":1481,"title":"「祝圣秘境:机巢」解锁方式及成就","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/75720734/8dd5a2573e7482e248f2350fe33fd104_8173297660227166334.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19709437","article_user_name":"韩牧九","article_time":"1648613272","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/b38028644b8e38ce070835ec428b8028.png","summary":"原神探索解密攻略——「祝圣秘境:机巢」解锁方式与成就攻略。"},{"content_id":1480,"title":"层岩隐藏任务-潜身敌营无人知","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/158741257/037e5fd1561c0fa177e8596c792e3064_1885576325018668585.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19707874","article_user_name":"Slothw","article_time":"1648612134","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【潜身敌营无人知】任务攻略流程。"},{"content_id":1479,"title":"层岩巨渊世界任务-物归原主又归原","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/158741257/ac744a957ff851d6f009b9c27f6e0587_2462585095504912877.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19714829","article_user_name":"Slothw","article_time":"1648616908","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【物归原主又归原】任务攻略流程。"},{"content_id":1478,"title":"层岩巨渊世界任务-千年千岩","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/158741257/80117320b3bea72c7d09a76d233accd6_390164172347844868.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19712498","article_user_name":"Slothw","article_time":"1648615412","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【千年千岩】任务攻略流程。"},{"content_id":1477,"title":"层岩隐藏任务-岩巅大侠往事","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/158741257/a20dcb750aafad7f16015402735e2e7d_7891357697157759817.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19709878","article_user_name":"Slothw","article_time":"1648613635","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【岩巅大侠往事】任务攻略流程。"},{"content_id":1476,"title":"层岩巨渊深游记之巧瞒七星解磐键","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/03/30/158741257/cfd13fa69169300c4e57c3f46693165d_7637013805783814544.png","bbs_url":"https://bbs.mihoyo.com/ys/article/19705508","article_user_name":"Slothw","article_time":"1648610452","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/798ca4a21e5cb4313b9d3b0ceec7b7d6.png","summary":"原神任务攻略——【巧瞒七星解磐键】攻略详情"}],"layout":"","entry_limit":0,"hidden":false},{"id":242,"name":"海岛专题","parent_id":45,"depth":3,"ch_ext":"[{\"type\":\"text\",\"attribute_name\":\"每行个数\",\"attribute_key\":\"col_per_row\",\"value\":\"1\"},{\"type\":\"text\",\"attribute_name\":\"展示样式\",\"attribute_key\":\"display_type\",\"value\":\"summaryVerti\"},{\"type\":\"text\",\"attribute_name\":\"频道icon\",\"attribute_key\":\"icon_url\",\"value\":\"https://uploadstatic.mihoyo.com/ys-obc/2022/07/14/75379475/129e57d099fa60c6d9f50237b6ba01a7_7510561457536354992.png\"},{\"type\":\"text\",\"attribute_name\":\"跳转链接\",\"attribute_key\":\"jump_url\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc\",\"attribute_key\":\"icon_url_pc\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"频道icon-pc-hover\",\"attribute_key\":\"icon_url_pc_hover\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"筛选器\",\"attribute_key\":\"filter\",\"value\":\"[]\"},{\"type\":\"text\",\"attribute_name\":\"首页更多\",\"attribute_key\":\"home_more\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"在目录中展示\",\"attribute_key\":\"show_in_catalog\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"最新词条\",\"attribute_key\":\"is_latest\",\"value\":\"\"},{\"type\":\"text\",\"attribute_name\":\"更多入口icon\",\"attribute_key\":\"king_kong_icon\",\"value\":\"\"}]","children":[],"list":[{"content_id":2189,"title":"最后的宝藏","ext":"{\"c_231\":{\"filter\":{\"text\":\"[\\\"任务类型/世界任务\\\",\\\"所属区域/其他\\\",\\\"任务奖励/原石\\\",\\\"任务奖励/摩拉\\\",\\\"任务奖励/经验书\\\",\\\"任务奖励/小道具\\\",\\\"任务耗时/短流程\\\",\\\"版本/2.8\\\"]\"},\"regionIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/ff50ecc5c6cd0133e599295814d2f570_6336054298422935650.png\"]},\"taskIcon\":{\"list\":[\"https://uploadstatic.mihoyo.com/ys-obc/2022/08/30/6276411/6ffa1cfc6fec6d7282fee1bc37443ceb_8997401237227358173.png\"]}}}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/16/232866066/6058a9cda347decae60db9c4d345d4eb_5260600747926828086.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27381527","article_user_name":"Dramaturge","article_time":"1660603732","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"最后的宝藏"},{"content_id":2089,"title":"海岛冲刺提醒——检查一下你的绝版物品都收集全了吗?","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/22/232866066/d09c56f6e1d9ee20e5c0c1b6bb290cc4_1792942683608396790.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27719248","article_user_name":"Dramaturge","article_time":"1661126578","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神探索攻略——金苹果群岛,绝版物品收集。"},{"content_id":2087,"title":"【远海诗夏游纪】如诗如歌,夏之梦","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/2ba996fdbe0b0c3d1e1a61130dcae6a6_4355808914325897050.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25910900","article_user_name":"猫冬","article_time":"1658222980","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神任务攻略流程——【如诗如歌,夏之梦】攻略解密流程(寻找佩尔西科夫的笔记,寻找装置缺失的晶核)"},{"content_id":2086,"title":"【远海诗夏游纪】如诗如歌,夏之梦攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/20/232866066/5d7f3c432a9f182ef1c8d725078b95aa_4740929216228791836.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25946749","article_user_name":"Dramaturge","article_time":"1658281586","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——【如诗如歌,夏之梦攻略】攻略流程(寻找佩尔西科夫的笔记,寻找装置缺失的晶核)"},{"content_id":2085,"title":"最后的宝藏","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/16/232866066/6058a9cda347decae60db9c4d345d4eb_5260600747926828086.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27381527","article_user_name":"Dramaturge","article_time":"1660603732","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神任务攻略——【最后的宝藏】任务攻略流程。"},{"content_id":2084,"title":"限时世界任务「最后的宝藏」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/08/16/4896641/014907959f919d7b788ed108f11eae04_94728035530379223.png","bbs_url":"https://bbs.mihoyo.com/ys/article/27380323","article_user_name":"FTFuture","article_time":"1660598944","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「最后的宝藏」攻略解析。"},{"content_id":2044,"title":"【限时世界任务】四礁觅宝记","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/d67b3214e0f4c9d6f263838131b5a982_6448656731502144503.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25918395","article_user_name":"猫冬","article_time":"1658232188","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神任务攻略——金苹果群岛限时世界任务【四礁觅宝记】"},{"content_id":2043,"title":"【限时世界任务】寻物航行","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/6f325536344bc7265d0425c9bdef7d3c_1494279792781904305.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25916760","article_user_name":"猫冬","article_time":"1658230233","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神任务攻略——金苹果群岛限时世界任务【寻物航行】"},{"content_id":2042,"title":"【限时世界任务】正因其徒劳","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/a831114d80e6582068bab00f19bb767c_2256646260569956917.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25916077","article_user_name":"猫冬","article_time":"1658229361","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神任务攻略——金苹果群岛限时世界任务【正因其徒劳】"},{"content_id":2041,"title":"【限时世界任务】被错置的海螺","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/ae2a5561a67e6a933ff71911bae2be56_7515901277912766648.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25913567","article_user_name":"猫冬","article_time":"1658226198","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神任务攻略——金苹果群岛限时世界任务【被错置的海螺】。"},{"content_id":2040,"title":"【限时世界任务】被抛出的徽记","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/45d23ed5535179358f2db7acd3f67d1d_8297823968339103587.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25912577","article_user_name":"猫冬","article_time":"1658224975","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神任务攻略——金苹果群岛限时世界任务【被抛出的徽记】。"},{"content_id":2039,"title":"【限时世界任务】被丢失的合照","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/74019947/8642a0e003303729b70ef96c24f86579_4559897197163066566.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25911910","article_user_name":"猫冬","article_time":"1658224140","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神任务攻略——金苹果群岛限时世界任务【被丢失的合照】"},{"content_id":2038,"title":"【远海诗夏游纪】世界任务:寻物航行","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/232866066/012b0c8d0c19bac12734c04a0b3a3a69_6308195530484662866.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25881890","article_user_name":"Dramaturge","article_time":"1658185435","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——金苹果群岛,限时世界任务《寻物航行》攻略流程。"},{"content_id":2037,"title":"【远海诗夏游纪】亘古的苍星房间解谜#1(海螺)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/232866066/0366c5ebc4a47d5ab143bf9b32e1a554_3123781347932375539.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25885590","article_user_name":"Dramaturge","article_time":"1658191825","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——亘古的苍星房间解谜·其一"},{"content_id":2036,"title":"【远海诗夏游纪】亘古的苍星房间解谜#2","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/232866066/b6d152ead868080df7ed8c2e7ff13398_2968046659552944948.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25885668","article_user_name":"Dramaturge","article_time":"1658191914","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——亘古的苍星房间解谜·其二"},{"content_id":2035,"title":"【远海诗夏游纪】关于危危岛玩法、解密的岛屿攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/5861124/7f48aa3255c72869e48d2e0ba9cba56d_6135724859892866606.jpg","bbs_url":"https://bbs.mihoyo.com/ys/article/25881162","article_user_name":"悦弥","article_time":"1658183601","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"原神活动攻略——【远海诗夏游纪】危危岛探索攻略。"},{"content_id":2034,"title":"【远海诗夏游纪】危危岛世界任务-正因其徒劳","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/5861124/7f48aa3255c72869e48d2e0ba9cba56d_6799057966422967542.jpg","bbs_url":"https://bbs.mihoyo.com/ys/article/25882335","article_user_name":"悦弥","article_time":"1658186470","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"原神活动攻略——危危岛世界任务《正因其徒劳》攻略流程。"},{"content_id":2033,"title":"【远海诗夏游纪】星核点位全收集(含三华丽、方碑)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/19/5861124/7f48aa3255c72869e48d2e0ba9cba56d_263408212539156871.jpg","bbs_url":"https://bbs.mihoyo.com/ys/article/25886133","article_user_name":"悦弥","article_time":"1658192534","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/6fe85ccbdea0f27b716aef7b2e477ea5.png","summary":"原神活动攻略——【远海诗夏游纪】危危岛星核全收集攻略"},{"content_id":2032,"title":"【远海诗夏游纪】春庭景如旧,秘境宝箱攻略(一)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/16/232866066/0b921d06871e9cc7bab511c1e94d1357_666880127872027966.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25740986","article_user_name":"Dramaturge","article_time":"1657980598","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】春庭景如旧,秘境宝箱收集攻略一"},{"content_id":2031,"title":"【远海诗夏游纪】春庭景如旧,秘境宝箱攻略(二)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/17/232866066/e5c8a3d73b731ae2b70a51419c4f2773_6226954703808440185.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25749800","article_user_name":"Dramaturge","article_time":"1657988421","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】春庭景如旧,秘境宝箱收集攻略二"},{"content_id":2030,"title":"【远海诗夏游纪】春庭景如旧,秘境宝箱攻略(三)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/17/232866066/e438ef327bbab258d640620fc83dbd4c_1779258881941903556.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25753292","article_user_name":"Dramaturge","article_time":"1657993002","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】春庭景如旧,秘境宝箱收集攻略三"},{"content_id":2029,"title":"【远海诗夏游纪】烈火踏歌行,剧情任务攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/17/232866066/0eca930eb179769cef133961c5ff6530_2192500290369491872.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25757710","article_user_name":"Dramaturge","article_time":"1658009501","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】烈火踏歌行,剧情任务攻略"},{"content_id":2028,"title":"【远海诗夏游纪】烈火踏歌行,秘境全收集攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/17/232866066/aa19a1a0197335ee4a65221b08274185_9058419523356990686.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25761676","article_user_name":"Dramaturge","article_time":"1658017739","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】烈火踏歌行,秘境全收集攻略"},{"content_id":2027,"title":"【远海诗夏游纪】幽夜默示录秘境全收集(其一)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/18/232866066/3e7c77a33b9c5ec0a97bb75b8619b55b_7074585848661676048.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25817664","article_user_name":"Dramaturge","article_time":"1658098046","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】幽夜默示录秘境全收集(其一)"},{"content_id":2026,"title":"【远海诗夏游纪】幽夜默示录秘境全收集(其二)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/18/232866066/9754fdf2e4624211f17bbe23dd87d787_6920383395423732058.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25819912","article_user_name":"Dramaturge","article_time":"1658102411","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】幽夜默示录秘境全收集(其二)"},{"content_id":2025,"title":"【远海诗夏游纪】幽夜默示录秘境全收集(其三)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/18/232866066/9dcc5df1c3a457c4881e3bc832e446c0_7544239735956175191.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25821322","article_user_name":"Dramaturge","article_time":"1658104535","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2e3a18fbccd5fc1ce5cda7b86beeb967.png","summary":"原神活动攻略——【远海诗夏游纪】幽夜默示录秘境全收集(其三)"},{"content_id":2024,"title":"金苹果群岛宝箱收集(7.17)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/17/4896641/4373e4c0113d41a9de868ce79a31c4e4_1355706716781241180.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25784723","article_user_name":"FTFuture","article_time":"1658045824","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神活动攻略——金苹果群岛第三天宝箱收集攻略。"},{"content_id":2023,"title":"金苹果群岛宝箱收集(7.16)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/16/4896641/c706ef79cb083529163d29f61ef34723_2507349846227234539.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25730411","article_user_name":"FTFuture","article_time":"1657969592","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神活动攻略—— 金苹果群岛第二天宝箱收集攻略。"},{"content_id":2022,"title":"破破岛错置海螺及摆设图纸获得方法","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/17/4896641/ee033aa9d9dc63adfa80d34cba7036b5_6546348521680893935.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25761292","article_user_name":"FTFuture","article_time":"1658017127","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神活动攻略——破破岛,摆设图纸获取攻略。"},{"content_id":2021,"title":"鸣弦列岛宝箱收集流程(共16个)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/17/4896641/17701fa566ce9174ea7a9bf20c462c1d_2420221079382305111.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25809881","article_user_name":"FTFuture","article_time":"1658075036","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神活动攻略——鸣弦列岛宝箱收集流程"},{"content_id":2020,"title":"谜鸦论处宝箱收集","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/18/4896641/6c966c4353bfb10409bce43a90bc3a46_4167029136379809989.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25820922","article_user_name":"FTFuture","article_time":"1658103936","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神活动攻略——谜鸦论处宝箱收集攻略。"},{"content_id":2019,"title":"布丁岛全组合全宝箱收集攻略","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/16/4896641/c3215d383cbac397b7824ea3d9d69a0f_3938633429063870679.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25725713","article_user_name":"FTFuture","article_time":"1657964690","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神活动攻略——布丁岛全组合全宝箱收集攻略"},{"content_id":2018,"title":"悠悠云阶宝箱收集","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/16/4896641/cbcf3b682cb06f19b0c660e26a020c4e_6314629718320319700.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25707074","article_user_name":"FTFuture","article_time":"1657945652","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神解密攻略——金苹果群岛——悠悠云阶宝箱收集"},{"content_id":2017,"title":"布丁岛三种类元素方碑解谜","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/16/4896641/9d972d4025740785f4e669928fb4a829_5678895754772328754.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25701579","article_user_name":"FTFuture","article_time":"1657939986","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神角色攻略——布丁岛解密攻略。"},{"content_id":2016,"title":"限时世界任务「渴望旅行的妖狸」","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/16/4896641/104c35d906beb558194c7a9a981a92b7_5800376888803972430.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25692904","article_user_name":"FTFuture","article_time":"1657929484","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/222b847170feb3f2babcc1bd4f0e30dd.png","summary":"原神任务攻略——「渴望旅行的妖狸」任务攻略流程"},{"content_id":2014,"title":"【远海诗夏游纪】逸速穿浪详解","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/15/73705865/51706829ce1f10f6bb14b85fdd5ad098_2905940499627404396.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25643361","article_user_name":"mr.xiaoba","article_time":"1657861168","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/15ed0f56b48f97eefb749fd54c88f823.png","summary":"原神活动攻略——远海诗夏游纪第一阶段逸速穿浪活动攻略。"},{"content_id":2013,"title":"【远海诗夏游纪】再临!金苹果假日","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/15/74019947/fb85a3f571ee6135704c32f072e979e6_5333016976005366729.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25639117","article_user_name":"猫冬","article_time":"1657857721","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神活动攻略——远海诗夏游纪,活动攻略。"},{"content_id":2012,"title":"【幻声留形】环境海螺全收集(持续更新)当前可收集到14个海螺","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/15/74019947/9893cb538c97a34991b21798b164611b_1411112198728968601.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25645821","article_user_name":"猫冬","article_time":"1657863197","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/fef5df089c483c98792dc3ca6967a586.png","summary":"原神活动攻略——金苹果群岛,海螺收集攻略"},{"content_id":2011,"title":"海螺全收集!来拿菲谢尔皮肤吧(目前版本为14个)","ext":"{}","icon":"https://upload-bbs.mihoyo.com/upload/2022/07/15/184753361/709337eab2432ea266ddcef6328327a1_4209769290300390752.png","bbs_url":"https://bbs.mihoyo.com/ys/article/25642242","article_user_name":"老兵菜鸟","article_time":"1657860206","avatar_url":"https://img-static.mihoyo.com/communityweb/upload/2b88dc71beca9f3e0e4248e8456213f0.png","summary":"原神活动攻略——金苹果群岛,海螺收集攻略(14个)"}],"layout":"","entry_limit":0,"hidden":false}],"list":[],"layout":"","entry_limit":0,"hidden":false}]}} \ No newline at end of file diff --git a/GenshinUID/genshinuid_note/__init__.py b/GenshinUID/genshinuid_note/__init__.py new file mode 100644 index 00000000..14517c7e --- /dev/null +++ b/GenshinUID/genshinuid_note/__init__.py @@ -0,0 +1,29 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from .note_text import award +from ..utils.convert import get_uid +from ..utils.database import active_sqla +from ..utils.error_reply import UID_HINT +from .draw_note_card import draw_note_img + + +# 群聊内 每月统计 功能 +@SV('查询札记').on_fullmatch(('每月统计')) +async def send_monthly_data(bot: Bot, ev: Event): + sqla = active_sqla[bot.bot_id] + uid = await sqla.get_bind_uid(ev.user_id) + if uid is None: + return UID_HINT + await bot.send(await award(uid)) + + +@SV('查询札记').on_fullmatch(('当前信息', 'zj', '札记')) +async def send_monthly_pic(bot: Bot, ev: Event): + await bot.logger.info('开始执行[每日信息]') + uid = await get_uid(bot, ev) + if uid is None: + return UID_HINT + im = await draw_note_img(str(uid)) + await bot.send(im) diff --git a/GenshinUID/genshinuid_note/draw_note_card.py b/GenshinUID/genshinuid_note/draw_note_card.py new file mode 100644 index 00000000..6021d903 --- /dev/null +++ b/GenshinUID/genshinuid_note/draw_note_card.py @@ -0,0 +1,174 @@ +from pathlib import Path +from typing import Union + +from nonebot.log import logger +from PIL import Image, ImageDraw + +from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error +from ..utils.image.convert import convert_img +from ..utils.image.image_tools import get_color_bg +from ..utils.fonts.genshin_fonts import gs_font_26, gs_font_38, gs_font_58 + +TEXT_PATH = Path(__file__).parent / 'texture2d' + +note_pic = Image.open(TEXT_PATH / 'note.png') +oops_pic = Image.open(TEXT_PATH / 'oops.png') +ok_pic = Image.open(TEXT_PATH / 'ok.png') + +first_color = (29, 29, 29) +second_color = (67, 61, 56) + +COLOR_MAP = { + '邮件奖励': (127, 115, 173), + '每日活跃': (190, 158, 97), + '活动奖励': (89, 126, 162), + '深境螺旋': (113, 152, 113), + '冒险奖励': (220, 99, 96), + '任务奖励': (107, 182, 181), + '其他': (118, 168, 196), + 'Mail': (127, 115, 173), + 'Daily Activity': (190, 158, 97), + 'Events': (89, 126, 162), + 'Spiral Abyss': (113, 152, 113), + 'Adventure': (220, 99, 96), + 'Quests': (107, 182, 181), + 'Other': (118, 168, 196), +} + + +async def draw_note_img(uid: str) -> Union[bytes, str]: + # 获取数据 + data = await mys_api.get_award(uid) + if isinstance(data, int): + return get_error(data) + # nickname = data['nickname'] + day_stone = data['day_data']['current_primogems'] + day_mora = data['day_data']['current_mora'] + lastday_stone = 0 + lastday_mora = 0 + if int(uid[0]) < 6: + lastday_stone = data['day_data']['last_primogems'] + lastday_mora = data['day_data']['last_mora'] + month_stone = data['month_data']['current_primogems'] + month_mora = data['month_data']['current_mora'] + lastmonth_stone = data['month_data']['last_primogems'] + lastmonth_mora = data['month_data']['last_mora'] + + day_stone_str = await int_carry(day_stone) + day_mora_str = await int_carry(day_mora) + month_stone_str = await int_carry(month_stone) + month_mora_str = await int_carry(month_mora) + lastday_stone_str = f'昨日原石:{await int_carry(lastday_stone)}' + lastday_mora_str = f'昨日摩拉:{await int_carry(lastday_mora)}' + lastmonth_stone_str = f'上月原石:{await int_carry(lastmonth_stone)}' + lastmonth_mora_str = f'上月摩拉:{await int_carry(lastmonth_mora)}' + + # 处理数据 + # 今日比昨日 原石 + day_stone_percent = day_stone / lastday_stone if lastday_stone != 0 else 1 + day_stone_percent = day_stone_percent if day_stone_percent <= 1 else 1 + # 今日比昨日 摩拉 + day_mora_percent = day_mora / lastday_mora if lastday_mora != 0 else 1 + day_mora_percent = day_mora_percent if day_mora_percent <= 1 else 1 + # 本月比上月 原石 + month_stone_percent = ( + month_stone / lastmonth_stone if lastmonth_stone != 0 else 1 + ) + month_stone_percent = ( + month_stone_percent if month_stone_percent <= 1 else 1 + ) + # 本月比上月 摩拉 + month_mora_percent = ( + month_mora / lastmonth_mora if lastmonth_mora != 0 else 1 + ) + month_mora_percent = month_mora_percent if month_mora_percent <= 1 else 1 + + # 获取背景图片各项参数 + based_w = 850 + based_h = 1900 + + img = await get_color_bg(based_w, based_h) + img.paste(note_pic, (0, 0), note_pic) + + ring_pic = Image.open(TEXT_PATH / 'ring.apng') + ring_list = [] + ring_list.append([int(day_stone_percent * 49 + 0.5), (-5, 475)]) + ring_list.append([int(day_mora_percent * 49 + 0.5), (371, 475)]) + ring_list.append([int(month_stone_percent * 49 + 0.5), (-5, 948)]) + ring_list.append([int(month_mora_percent * 49 + 0.5), (371, 948)]) + ring_list.sort(key=lambda x: -x[0], reverse=True) + for i in ring_list: + ring_pic.seek(i[0]) + img.paste(ring_pic, i[1], ring_pic) + + img_draw = ImageDraw.Draw(img) + # UID + img_draw.text((430, 464), f'UID {uid}', second_color, gs_font_38, 'mm') + + # 具体数据 + img_draw.text((243, 718), day_stone_str, first_color, gs_font_58, 'mm') + img_draw.text((625, 718), day_mora_str, first_color, gs_font_58, 'mm') + img_draw.text((245, 1192), month_stone_str, first_color, gs_font_58, 'mm') + img_draw.text((621, 1192), month_mora_str, first_color, gs_font_58, 'mm') + + img_draw.text( + (245, 923), lastday_stone_str, second_color, gs_font_26, 'mm' + ) + img_draw.text((621, 923), lastday_mora_str, second_color, gs_font_26, 'mm') + img_draw.text( + (245, 1396), lastmonth_stone_str, second_color, gs_font_26, 'mm' + ) + img_draw.text( + (621, 1396), lastmonth_mora_str, second_color, gs_font_26, 'mm' + ) + + if data['month_data']['group_by'] == []: + for index, action in enumerate(COLOR_MAP): + if action == '其他': + continue + img_draw.text( + (614, 1535 + index * 52), + f'{action}:无', + second_color, + gs_font_26, + 'mm', + ) + img.paste(oops_pic, (106, 1513), oops_pic) + else: + xy = ((94, 1515), (384, 1805)) + temp = -90 + for index, i in enumerate(data['month_data']['group_by']): + img_draw.pieslice( + xy, + temp, + temp + (i['percent'] / 100) * 360, + COLOR_MAP[i['action']], + ) + temp = temp + (i['percent'] / 100) * 360 + if i['action'] == '其他': + continue + img_draw.rectangle( + ((407, 1523 + index * 52), (453, 1548 + index * 52)), + fill=COLOR_MAP[i['action']], + ) + img_draw.text( + (614, 1535 + index * 52), + f'{i["action"]}:{i["num"]}', + second_color, + gs_font_26, + 'mm', + ) + img.paste(ok_pic, (115, 1535), ok_pic) + + img = await convert_img(img) + logger.info('[原石札记] 图片绘制完成!等待发送...') + return img + + +async def int_carry(i: int) -> str: + if i >= 100000: + i_str = '{:.1f}W'.format(i / 10000) + else: + i_str = str(i) + return i_str diff --git a/GenshinUID/genshinuid_note/note_text.py b/GenshinUID/genshinuid_note/note_text.py new file mode 100644 index 00000000..3e4e1868 --- /dev/null +++ b/GenshinUID/genshinuid_note/note_text.py @@ -0,0 +1,67 @@ +from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error + +month_im = """ +============== +{} +UID:{} +============== +本日获取原石:{} +本日获取摩拉:{} +============== +昨日获取原石:{} +昨日获取摩拉:{} +============== +本月获取原石:{} +本月获取摩拉:{} +============== +上月获取原石:{} +上月获取摩拉:{} +============== +原石收入组成: +{}==============""" + + +async def award(uid) -> str: + data = await mys_api.get_award(uid) + if isinstance(data, int): + return get_error(data) + nickname = data['nickname'] + day_stone = data['day_data']['current_primogems'] + day_mora = data['day_data']['current_mora'] + lastday_stone = 0 + lastday_mora = 0 + if int(uid[0]) < 6: + lastday_stone = data['day_data']['last_primogems'] + lastday_mora = data['day_data']['last_mora'] + month_stone = data['month_data']['current_primogems'] + month_mora = data['month_data']['current_mora'] + lastmonth_stone = data['month_data']['last_primogems'] + lastmonth_mora = data['month_data']['last_mora'] + group_str = '' + for i in data['month_data']['group_by']: + group_str = ( + group_str + + i['action'] + + ':' + + str(i['num']) + + '(' + + str(i['percent']) + + '%)' + + '\n' + ) + + im = month_im.format( + nickname, + uid, + day_stone, + day_mora, + lastday_stone, + lastday_mora, + month_stone, + month_mora, + lastmonth_stone, + lastmonth_mora, + group_str, + ) + return im diff --git a/GenshinUID/genshinuid_note/texture2d/note.png b/GenshinUID/genshinuid_note/texture2d/note.png new file mode 100644 index 00000000..552753ea Binary files /dev/null and b/GenshinUID/genshinuid_note/texture2d/note.png differ diff --git a/GenshinUID/genshinuid_note/texture2d/ok.png b/GenshinUID/genshinuid_note/texture2d/ok.png new file mode 100644 index 00000000..8ef1fff1 Binary files /dev/null and b/GenshinUID/genshinuid_note/texture2d/ok.png differ diff --git a/GenshinUID/genshinuid_note/texture2d/oops.png b/GenshinUID/genshinuid_note/texture2d/oops.png new file mode 100644 index 00000000..1186e219 Binary files /dev/null and b/GenshinUID/genshinuid_note/texture2d/oops.png differ diff --git a/GenshinUID/genshinuid_note/texture2d/ring.apng b/GenshinUID/genshinuid_note/texture2d/ring.apng new file mode 100644 index 00000000..b9705cff Binary files /dev/null and b/GenshinUID/genshinuid_note/texture2d/ring.apng differ diff --git a/GenshinUID/genshinuid_resin/__init__.py b/GenshinUID/genshinuid_resin/__init__.py new file mode 100644 index 00000000..8bbeb8e1 --- /dev/null +++ b/GenshinUID/genshinuid_resin/__init__.py @@ -0,0 +1,61 @@ +import asyncio + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.gss import gss +from gsuid_core.models import Event +from gsuid_core.aps import scheduler +from gsuid_core.logger import logger +from gsuid_core.segment import MessageSegment + +from ..utils.convert import get_uid +from .notice import get_notice_list +from .resin_text import get_resin_text +from ..utils.error_reply import UID_HINT +from .draw_resin_card import get_resin_img + + +@SV('查询体力').on_fullmatch(('当前状态')) +async def send_daily_info(bot: Bot, ev: Event): + await bot.logger.info('开始执行[每日信息文字版]') + uid = await get_uid(bot, ev) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[每日信息文字版]UID: {}'.format(uid)) + + im = await get_resin_text(uid) + await bot.send(im) + + +@scheduler.scheduled_job('cron', minute='*/30') +async def notice_job(): + result = await get_notice_list() + logger.info('[推送检查]完成!等待消息推送中...') + # 执行私聊推送 + + for bot_id in result: + bot = gss.active_bot[bot_id] + for user_id in result[bot_id]['direct']: + msg = result[bot_id]['direct'][user_id] + await bot.target_send(msg, 'direct', user_id) + await asyncio.sleep(0.5) + logger.info('[推送检查] 私聊推送完成') + for gid in result[bot_id]['group']: + msg_list = [] + for user_id in result[bot_id]['group'][gid]: + msg_list.append(MessageSegment.at(user_id)) + msg = result[bot_id]['group'][gid][user_id] + msg_list.append(MessageSegment.text(msg)) + await bot.target_send(msg_list, 'group', gid) + await asyncio.sleep(0.5) + logger.info('[推送检查] 群聊推送完成') + + +@SV('查询体力').on_fullmatch(('每日', 'mr', '实时便笺', '便笺', '便签')) +async def send_daily_info_pic(bot: Bot, ev: Event): + await bot.logger.info('开始执行[每日信息]') + user_id = ev.at if ev.at else ev.user_id + await bot.logger.info('[每日信息]QQ号: {}'.format(user_id)) + + im = await get_resin_img(bot.bot_id, user_id) + await bot.send(im) diff --git a/GenshinUID/genshinuid_resin/draw_resin_card.py b/GenshinUID/genshinuid_resin/draw_resin_card.py new file mode 100644 index 00000000..aee53a82 --- /dev/null +++ b/GenshinUID/genshinuid_resin/draw_resin_card.py @@ -0,0 +1,339 @@ +import json +import asyncio +from typing import List +from pathlib import Path + +from nonebot.log import logger +from PIL import Image, ImageDraw + +from ..utils.mys_api import mys_api +from ..utils.database import active_sqla +from ..utils.image.convert import convert_img +from ..genshinuid_enka.to_data import get_enka_info +from ..gsuid_utils.api.mys.models import Expedition +from ..utils.image.image_tools import get_simple_bg +from ..utils.map.name_covert import enName_to_avatarId +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH, CHAR_SIDE_PATH +from ..utils.fonts.genshin_fonts import ( + gs_font_20, + gs_font_26, + gs_font_32, + gs_font_60, +) + +TEXT_PATH = Path(__file__).parent / 'texture2D' + +resin_fg_pic = Image.open(TEXT_PATH / 'resin_fg.png') +yes_pic = Image.open(TEXT_PATH / 'yes.png') +no_pic = Image.open(TEXT_PATH / 'no.png') +warn_pic = Image.open(TEXT_PATH / 'warn.png') + +based_w = 500 +based_h = 900 +white_overlay = Image.new('RGBA', (based_w, based_h), (255, 251, 242, 225)) + +first_color = (29, 29, 29) +second_color = (98, 98, 98) +green_color = (15, 196, 35) +orange_color = (237, 115, 61) +red_color = (235, 61, 75) + + +async def _draw_task_img( + img: Image.Image, + img_draw: ImageDraw.ImageDraw, + index: int, + char: Expedition, +): + char_en_name = char['avatar_side_icon'].split('_')[-1].split('.')[0] + avatar_id = await enName_to_avatarId(char_en_name) + char_pic = ( + Image.open(CHAR_SIDE_PATH / f'{avatar_id}.png') + .convert('RGBA') + .resize((80, 80), Image.Resampling.LANCZOS) # type: ignore + ) + img.paste(char_pic, (22 + index * 90, 770), char_pic) + if char['status'] == 'Finished': + status_mark = '待收取' + status_color = red_color + else: + status_mark = '已派遣' + status_color = green_color + img_draw.text( + (65 + index * 90, 870), + status_mark, + font=gs_font_20, + fill=status_color, + anchor='mm', + ) + + +async def get_resin_img(bot_id: str, user_id: str): + try: + sqla = active_sqla[bot_id] + uid_list: List = await sqla.get_bind_uid_list(user_id) + logger.info('[每日信息]UID: {}'.format(uid_list)) + # 进行校验UID是否绑定CK + useable_uid_list = [] + for uid in uid_list: + status = await sqla.get_user_cookie(uid) + if status is not None: + useable_uid_list.append(uid) + logger.info('[每日信息]可用UID: {}'.format(useable_uid_list)) + if len(useable_uid_list) == 0: + return '请先绑定一个可用CK & UID再来查询哦~' + # 开始绘图任务 + task = [] + img = Image.new( + 'RGBA', (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0) + ) + for uid_index, uid in enumerate(useable_uid_list): + task.append(_draw_all_resin_img(img, uid, uid_index)) + await asyncio.gather(*task) + res = await convert_img(img) + logger.info('[查询每日信息]绘图已完成,等待发送!') + except TypeError: + logger.exception('[查询每日信息]绘图失败!') + res = '你绑定过的UID中可能存在过期CK~请重新绑定一下噢~' + + return res + + +async def _draw_all_resin_img(img: Image.Image, uid: str, index: int): + resin_img = await draw_resin_img(uid) + img.paste(resin_img, (500 * index, 0), resin_img) + + +async def seconds2hours(seconds: int) -> str: + m, s = divmod(int(seconds), 60) + h, m = divmod(m, 60) + return '%02d小时%02d分' % (h, m) + + +async def draw_resin_img(uid: str) -> Image.Image: + # 获取数据 + daily_data = await mys_api.get_daily_data(uid) + + # 获取背景图片各项参数 + img = await get_simple_bg(based_w, based_h) + img.paste(white_overlay, (0, 0), white_overlay) + + if isinstance(daily_data, int): + img_draw = ImageDraw.Draw(img) + img.paste(warn_pic, (0, 0), warn_pic) + # 写UID + img_draw.text( + (250, 553), + f'UID{uid}', + font=gs_font_26, + fill=first_color, + anchor='mm', + ) + img_draw.text( + (250, 518), + f'错误码 {daily_data}', + font=gs_font_26, + fill=red_color, + anchor='mm', + ) + return img + + enta_data_path = PLAYER_PATH / uid / 'rawData.json' + if enta_data_path.exists(): + with open(enta_data_path, 'r', encoding='utf-8') as f: + player_data = json.load(f) + else: + try: + player_data = await get_enka_info(uid) + except Exception: + player_data = {} + + # 处理数据 + if player_data and 'playerInfo' in player_data: + if 'signature' in player_data['playerInfo']: + signature = player_data['playerInfo']['signature'] + else: + signature = '该旅行者还没有签名噢~' + world_level = player_data['playerInfo']['level'] + world_level_str = f'探索等级{str(world_level)}' + else: + signature = '暂无获取数据' + world_level_str = '暂无数据' + + img.paste(resin_fg_pic, (0, 0), resin_fg_pic) + + # 树脂 + resin = daily_data['current_resin'] + max_resin = daily_data['max_resin'] + resin_str = f'{resin}/{max_resin}' + resin_percent = resin / max_resin + if resin_percent > 0.8: + resin_color = red_color + else: + resin_color = second_color + resin_recovery_time = await seconds2hours( + daily_data['resin_recovery_time'] + ) + + delay = 53 + # 洞天宝钱 + home_coin = daily_data['current_home_coin'] + max_home_coin = daily_data['max_home_coin'] + home_coin_str = f'{home_coin}/{max_home_coin}' + if max_home_coin - home_coin < 200: + home_coin_mark = '可收取' + home_coin_color = red_color + img.paste(no_pic, (35, 559), no_pic) + else: + home_coin_mark = '已收取' + home_coin_color = green_color + img.paste(yes_pic, (35, 559), yes_pic) + # 完成委托 + finish_task = daily_data['finished_task_num'] + total_task = daily_data['total_task_num'] + is_task_reward = daily_data['is_extra_task_reward_received'] + task_str = f'{finish_task}/{total_task}' + if is_task_reward: + task_mark = '已领取' + task_color = green_color + img.paste(yes_pic, (35, 559 + delay), yes_pic) + else: + task_mark = '未领取' + task_color = red_color + img.paste(no_pic, (35, 559 + delay), no_pic) + # 周本减半 + weekly_half = daily_data['remain_resin_discount_num'] + max_weekly_half = daily_data['resin_discount_num_limit'] + weekly_half_str = f'{weekly_half}/{max_weekly_half}' + if weekly_half == 0: + weekly_half_mark = '已使用' + weekly_half_color = green_color + img.paste(yes_pic, (35, 559 + delay * 2), yes_pic) + else: + weekly_half_mark = '未用完' + weekly_half_color = red_color + img.paste(no_pic, (35, 559 + delay * 2), no_pic) + # 参量质变仪 + transformer = daily_data['transformer']['recovery_time']['reached'] + transformer_day = daily_data['transformer']['recovery_time']['Day'] + transformer_hour = daily_data['transformer']['recovery_time']['Hour'] + transformer_str = f'还剩{transformer_day}天{transformer_hour}小时' + if transformer: + transformer_mark = '可使用' + transformer_color = red_color + img.paste(no_pic, (35, 559 + delay * 3), no_pic) + else: + transformer_mark = '已使用' + transformer_color = green_color + img.paste(yes_pic, (35, 559 + delay * 3), yes_pic) + + img_draw = ImageDraw.Draw(img) + + # 派遣 + task_task = [] + for index, char in enumerate(daily_data['expeditions']): + task_task.append(_draw_task_img(img, img_draw, index, char)) + await asyncio.gather(*task_task) + + # 绘制树脂圆环 + ring_pic = Image.open(TEXT_PATH / 'ring.apng') + percent = ( + round(resin_percent * 49) if round(resin_percent * 49) <= 49 else 49 + ) + ring_pic.seek(percent) + img.paste(ring_pic, (0, 0), ring_pic) + + # 写树脂剩余时间 + img_draw.text( + (250, 370), + f'还剩{resin_recovery_time}', + font=gs_font_20, + fill=resin_color, + anchor='mm', + ) + # 写签名 + img_draw.text( + (48, 137), signature, font=gs_font_26, fill=second_color, anchor='lm' + ) + # 写UID + img_draw.text( + (250, 518), f'UID{uid}', font=gs_font_26, fill=first_color, anchor='mm' + ) + # 写探索等级 + img_draw.text( + (250, 281), + world_level_str, + font=gs_font_26, + fill=second_color, + anchor='mm', + ) + # 写树脂 + img_draw.text( + (250, 327), + resin_str, + font=gs_font_60, + fill=first_color, + anchor='mm', + ) + # 写洞天宝钱 + img_draw.text( + (335, 588), + home_coin_str, + font=gs_font_20, + fill=first_color, + anchor='lm', + ) + img_draw.text( + (225, 584), + home_coin_mark, + font=gs_font_32, + fill=home_coin_color, + anchor='lm', + ) + # 写完成委托 + img_draw.text( + (335, 588 + delay), + task_str, + font=gs_font_20, + fill=first_color, + anchor='lm', + ) + img_draw.text( + (225, 584 + delay), + task_mark, + font=gs_font_32, + fill=task_color, + anchor='lm', + ) + # 写周本减半 + img_draw.text( + (335, 588 + delay * 2), + weekly_half_str, + font=gs_font_20, + fill=first_color, + anchor='lm', + ) + img_draw.text( + (225, 584 + delay * 2), + weekly_half_mark, + font=gs_font_32, + fill=weekly_half_color, + anchor='lm', + ) + # 写参量质变仪 + img_draw.text( + (335, 588 + delay * 3), + transformer_str, + font=gs_font_20, + fill=first_color, + anchor='lm', + ) + img_draw.text( + (225, 584 + delay * 3), + transformer_mark, + font=gs_font_32, + fill=transformer_color, + anchor='lm', + ) + + return img diff --git a/GenshinUID/genshinuid_resin/notice.py b/GenshinUID/genshinuid_resin/notice.py new file mode 100644 index 00000000..d1d0fe12 --- /dev/null +++ b/GenshinUID/genshinuid_resin/notice.py @@ -0,0 +1,125 @@ +from typing import Dict + +from gsuid_core.gss import gss +from nonebot.log import logger + +from ..utils.mys_api import mys_api +from ..utils.database import active_sqla +from ..genshinuid_config.gs_config import gsconfig +from ..gsuid_utils.api.mys.models import DailyNoteData + +MR_NOTICE = '\n可发送[mr]或者[每日]来查看更多信息!\n' + +NOTICE = { + 'coin': f'你的洞天宝钱快满啦!{MR_NOTICE}', + 'resin': f'你的树脂/体力快满啦!{MR_NOTICE}', + 'go': f'你有派遣信息即将可收取!{MR_NOTICE}', + 'transform': f'你的质变仪即将可使用!{MR_NOTICE}', +} + + +async def get_notice_list() -> Dict[str, Dict[str, Dict]]: + msg_dict: Dict[str, Dict[str, Dict]] = {} + for bot_id in gss.active_bot: + sqla = active_sqla[bot_id] + user_list = await sqla.get_all_push_user_list() + for user in user_list: + raw_data = await mys_api.get_daily_data(user.uid) + if isinstance(raw_data, int): + logger.error(f'[推送提醒]获取{user.uid}的数据失败!') + continue + push_data = await sqla.select_push_data(user.uid) + msg_dict = await all_check( + bot_id, + raw_data, + push_data.__dict__, + msg_dict, + user.user_id, + user.uid, + ) + return msg_dict + + +async def all_check( + bot_id: str, + raw_data: DailyNoteData, + push_data: Dict, + msg_dict: Dict[str, Dict[str, Dict]], + user_id: str, + uid: str, +) -> Dict[str, Dict[str, Dict]]: + sqla = active_sqla[bot_id] + for mode in NOTICE.keys(): + # 检查条件 + if push_data[f'{mode}_is_push'] == 'on': + if gsconfig.get_config('CrazyNotice').data: + if not await check(mode, raw_data, push_data[f'{mode}_value']): + await sqla.update_push_data( + uid, {f'{mode}_is_push': 'off'} + ) + continue + # 准备推送 + if await check(mode, raw_data, push_data[f'{mode}_value']): + if push_data[f'{mode}_push'] == 'off': + pass + # on 推送到私聊 + else: + # 初始化 + if bot_id not in msg_dict: + msg_dict[bot_id] = {'direct': {}, 'group': {}} + + if push_data[f'{mode}_push'] == 'on': + # 添加私聊信息 + if user_id not in msg_dict[bot_id]['direct']: + msg_dict[bot_id]['direct'][user_id] = NOTICE[mode] + else: + msg_dict[bot_id]['direct'][user_id] += NOTICE[mode] + await sqla.update_push_data(uid, {f'{mode}_is_push': 'on'}) + # 群号推送到群聊 + else: + # 初始化 + gid = f'{mode}_push' + if push_data[gid] not in msg_dict[bot_id]['group']: + msg_dict[bot_id]['direct'][gid] = {} + + if user_id not in msg_dict[bot_id]['direct'][gid]: + msg_dict[bot_id]['direct'][gid][user_id] = NOTICE[mode] + else: + msg_dict[bot_id]['direct'][gid][user_id] += NOTICE[ + mode + ] + await sqla.update_push_data(uid, {f'{mode}_is_push': 'on'}) + return msg_dict + + +async def check(mode: str, data: DailyNoteData, limit: int) -> bool: + if mode == 'coin': + if data['current_home_coin'] >= limit: + return True + elif data['current_home_coin'] >= data['max_home_coin']: + return True + else: + return False + if mode == 'resin': + if data['current_resin'] >= limit: + return True + elif data['current_resin'] >= data['max_resin']: + return True + else: + return False + if mode == 'go': + for i in data['expeditions']: + if i['status'] == 'Ongoing': + if int(i['remained_time']) <= limit * 60: + return True + else: + return True + return False + if mode == 'transform': + if data['transformer']['obtained']: + time = data['transformer']['recovery_time'] + time_min = (time['Day'] * 24 + time['Hour']) * 60 + time['Minute'] + if time_min <= limit: + return True + return False + return False diff --git a/GenshinUID/genshinuid_resin/resin_text.py b/GenshinUID/genshinuid_resin/resin_text.py new file mode 100644 index 00000000..059420c8 --- /dev/null +++ b/GenshinUID/genshinuid_resin/resin_text.py @@ -0,0 +1,126 @@ +import math +from typing import List + +from nonebot.log import logger + +from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error +from ..utils.map.name_covert import avatar_id_to_name, enName_to_avatarId + +daily_im = """*数据刷新可能存在一定延迟,请以当前游戏实际数据为准 +============== +原粹树脂:{}/{}{} +每日委托:{}/{} 奖励{}领取 +减半已用:{}/{} +洞天宝钱:{} +参量质变仪:{} +探索派遣: +总数/完成/上限:{}/{}/{} +{}""" + + +def seconds2hours(seconds: int) -> str: + m, s = divmod(int(seconds), 60) + h, m = divmod(m, 60) + return '%02d:%02d:%02d' % (h, m, s) + + +async def get_resin_text(uid: str) -> str: + try: + dailydata = await mys_api.get_daily_data(uid) + if isinstance(dailydata, int): + return get_error(dailydata) + max_resin = dailydata['max_resin'] + rec_time = '' + current_resin = dailydata['current_resin'] + if current_resin < 160: + resin_recovery_time = seconds2hours( + dailydata['resin_recovery_time'] + ) + next_resin_rec_time = seconds2hours( + 8 * 60 + - ( + (dailydata['max_resin'] - dailydata['current_resin']) + * 8 + * 60 + - int(dailydata['resin_recovery_time']) + ) + ) + rec_time = f' ({next_resin_rec_time}/{resin_recovery_time})' + + current_expedition_num = dailydata['current_expedition_num'] + max_expedition_num = dailydata['max_expedition_num'] + finished_expedition_num = 0 + expedition_info: List[str] = [] + for expedition in dailydata['expeditions']: + avatar: str = expedition['avatar_side_icon'][89:-4] + try: + avatar_name: str = await enName_to_avatarId(avatar) + avatar_name: str = await avatar_id_to_name(avatar_name) + except KeyError: + avatar_name: str = avatar + + if expedition['status'] == 'Finished': + expedition_info.append(f'{avatar_name} 探索完成') + finished_expedition_num += 1 + else: + remained_timed: str = seconds2hours( + expedition['remained_time'] + ) + expedition_info.append(f'{avatar_name} 剩余时间{remained_timed}') + + if dailydata['transformer']['recovery_time']['reached']: + transformer_status = '可用' + else: + transformer_time = dailydata['transformer']['recovery_time'] + transformer_status = '还剩{}天{}小时{}分钟可用'.format( + transformer_time['Day'], + transformer_time['Hour'], + transformer_time['Minute'], + ) + + finished_task_num = dailydata['finished_task_num'] + total_task_num = dailydata['total_task_num'] + is_extra_got = ( + '已' if dailydata['is_extra_task_reward_received'] else '未' + ) + + resin_discount_num_limit = dailydata['resin_discount_num_limit'] + used_resin_discount_num = ( + resin_discount_num_limit - dailydata['remain_resin_discount_num'] + ) + + home_coin = ( + f'{dailydata["current_home_coin"]}/{dailydata["max_home_coin"]}' + ) + if dailydata['current_home_coin'] < dailydata['max_home_coin']: + coin_rec_time = seconds2hours( + int(dailydata['home_coin_recovery_time']) + ) + coin_add_speed = math.ceil( + (dailydata['max_home_coin'] - dailydata['current_home_coin']) + / (int(dailydata['home_coin_recovery_time']) / 60 / 60) + ) + home_coin += f'({coin_rec_time} 约{coin_add_speed}/h)' + + expedition_data = '\n'.join(expedition_info) + send_mes = daily_im.format( + current_resin, + max_resin, + rec_time, + finished_task_num, + total_task_num, + is_extra_got, + used_resin_discount_num, + resin_discount_num_limit, + home_coin, + transformer_status, + current_expedition_num, + finished_expedition_num, + max_expedition_num, + expedition_data, + ) + return send_mes + except TypeError: + logger.exception('[查询当前状态]查询失败!') + return '你绑定过的UID中可能存在过期CK~请重新绑定一下噢~' diff --git a/GenshinUID/genshinuid_resin/texture2D/no.png b/GenshinUID/genshinuid_resin/texture2D/no.png new file mode 100644 index 00000000..4866239d Binary files /dev/null and b/GenshinUID/genshinuid_resin/texture2D/no.png differ diff --git a/GenshinUID/genshinuid_resin/texture2D/resin_fg.png b/GenshinUID/genshinuid_resin/texture2D/resin_fg.png new file mode 100644 index 00000000..8447b9fe Binary files /dev/null and b/GenshinUID/genshinuid_resin/texture2D/resin_fg.png differ diff --git a/GenshinUID/genshinuid_resin/texture2D/ring.apng b/GenshinUID/genshinuid_resin/texture2D/ring.apng new file mode 100644 index 00000000..017f187e Binary files /dev/null and b/GenshinUID/genshinuid_resin/texture2D/ring.apng differ diff --git a/GenshinUID/genshinuid_resin/texture2D/warn.png b/GenshinUID/genshinuid_resin/texture2D/warn.png new file mode 100644 index 00000000..8f824782 Binary files /dev/null and b/GenshinUID/genshinuid_resin/texture2D/warn.png differ diff --git a/GenshinUID/genshinuid_resin/texture2D/yes.png b/GenshinUID/genshinuid_resin/texture2D/yes.png new file mode 100644 index 00000000..069292a1 Binary files /dev/null and b/GenshinUID/genshinuid_resin/texture2D/yes.png differ diff --git a/GenshinUID/genshinuid_resource/__init__.py b/GenshinUID/genshinuid_resource/__init__.py new file mode 100644 index 00000000..8737b68f --- /dev/null +++ b/GenshinUID/genshinuid_resource/__init__.py @@ -0,0 +1,24 @@ +import asyncio +import threading + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.logger import logger + +from ..utils.resource.download_all_resource import download_all_resource + + +@SV('下载资源', pm=2).on_fullmatch(('深渊概览', '深渊统计', '深渊使用率')) +async def send_download_resource_msg(bot: Bot, ev: Event): + await bot.send('正在开始下载~可能需要较久的时间!') + im = await download_all_resource() + await bot.send(im) + + +async def startup(): + logger.info('[资源文件下载] 正在检查与下载缺失的资源文件,可能需要较长时间,请稍等') + logger.info(f'[资源文件下载] {await download_all_resource()}') + + +threading.Thread(target=lambda: asyncio.run(startup()), daemon=True).start() diff --git a/GenshinUID/genshinuid_roleinfo/__init__.py b/GenshinUID/genshinuid_roleinfo/__init__.py new file mode 100644 index 00000000..da343ba0 --- /dev/null +++ b/GenshinUID/genshinuid_roleinfo/__init__.py @@ -0,0 +1,37 @@ +import re + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from ..utils.convert import get_uid +from .get_regtime import calc_reg_time +from ..utils.error_reply import UID_HINT +from .draw_roleinfo_card import draw_pic + + +@SV('查询注册时间').on_command(('原神注册时间', '注册时间')) +async def regtime(bot: Bot, ev: Event): + await bot.logger.info('开始执行[查询注册时间]') + uid = await get_uid(bot, ev) + if uid is None: + return bot.send(UID_HINT) + await bot.logger.info('[查询注册时间]uid: {}'.format(uid)) + + im = await calc_reg_time(uid) + await bot.send(im) + + +@SV('查询原神信息').on_command(('查询')) +async def send_role_info(bot: Bot, ev: Event): + name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) + if name: + return + await bot.logger.info('开始执行[查询角色信息]') + uid = await get_uid(bot, ev) + if uid is None: + return bot.send(UID_HINT) + await bot.logger.info('[查询角色信息]uid: {}'.format(uid)) + + im = await draw_pic(uid) + await bot.send(im) diff --git a/GenshinUID/genshinuid_roleinfo/draw_roleinfo_card.py b/GenshinUID/genshinuid_roleinfo/draw_roleinfo_card.py new file mode 100644 index 00000000..7b59c2c8 --- /dev/null +++ b/GenshinUID/genshinuid_roleinfo/draw_roleinfo_card.py @@ -0,0 +1,443 @@ +import asyncio +from pathlib import Path + +from nonebot.log import logger +from PIL import Image, ImageDraw + +from ..utils.mys_api import mys_api +from ..utils.convert import GsCookie +from ..utils.error_reply import get_error +from ..utils.image.convert import convert_img +from ..gsuid_utils.api.mys.models import MihoyoAvatar +from ..utils.resource.download_url import download_file +from ..utils.fonts.genshin_fonts import genshin_font_origin +from ..utils.resource.RESOURCE_PATH import ( + REL_PATH, + CHAR_PATH, + WEAPON_PATH, + CHAR_STAND_PATH, +) +from ..utils.image.image_tools import ( + get_level_pic, + get_simple_bg, + get_fetter_pic, + get_talent_pic, + get_weapon_pic, +) + +# 确定路径 +TEXT_PATH = Path(__file__).parent / 'texture2d' + + +# 打开图片 +char_card_bg4 = Image.open(TEXT_PATH / 'char_card_bg4.png') +char_card_bg5 = Image.open(TEXT_PATH / 'char_card_bg5.png') +char_card_fg = Image.open(TEXT_PATH / 'char_card_fg.png') +char_card_mask = Image.open(TEXT_PATH / 'char_card_mask.png') +role_info_fg = Image.open(TEXT_PATH / 'role_info_fg.png') + +char_card8_bg4 = Image.open(TEXT_PATH / 'char_card8_bg4.png') +char_card8_bg5 = Image.open(TEXT_PATH / 'char_card8_bg5.png') +char_card8_fg = Image.open(TEXT_PATH / 'char_card8_fg.png') +char_card8_mask = Image.open(TEXT_PATH / 'char_card8_mask.png') + + +# 生成几个字号 +gs_font_16 = genshin_font_origin(16) +gs_font_23 = genshin_font_origin(23) +gs_font_28 = genshin_font_origin(28) +gs_font_40 = genshin_font_origin(40) + +# 文字颜色 +text_color = (68, 66, 64) + + +async def _draw_char_full_pic( + img: Image.Image, char_data: MihoyoAvatar, index: int +): + result = Image.new('RGBA', (250, 150), (0, 0, 0, 0)) + char_card_img = Image.new('RGBA', (250, 150), (0, 0, 0, 0)) + if char_data['rarity'] >= 5: + char_card_img.paste(char_card_bg5, (0, 0)) + else: + char_card_img.paste(char_card_bg4, (0, 0)) + # 确认武器路径 + weapon_pic_path = WEAPON_PATH / f'{char_data["weapon"]["name"]}.png' + # 不存在自动下载 + if not weapon_pic_path.exists(): + await download_file( + char_data['weapon']['icon'], + 5, + f'{char_data["weapon"]["name"]}.png', + ) + # 粘贴武器图片 + weapon_pic = Image.open(weapon_pic_path).convert('RGBA') + weapon_pic_scale = weapon_pic.resize((50, 50)) + # 确认角色头像路径 + char_pic_path = CHAR_PATH / f'{char_data["id"]}.png' + # 不存在自动下载 + if not char_pic_path.exists(): + await download_file(char_data['icon'], 1, f'{char_data["id"]}.png') + # 粘贴角色头像 + char_img = Image.open(CHAR_PATH / f'{char_data["id"]}.png').convert('RGBA') + # 缩放至合适大小 + char_img_scale = char_img.resize((148, 148)) + char_card_img.paste(char_img_scale, (-20, 5), char_img_scale) + char_card_img.paste(char_card_fg, (0, 0), char_card_fg) + # 命座和好感的图片 + fetter_pic = await get_fetter_pic(char_data['fetter']) + talent_pic = await get_talent_pic(char_data['actived_constellation_num']) + char_card_img.paste(fetter_pic, (17, 110), fetter_pic) + char_card_img.paste(talent_pic, (177, 24), talent_pic) + # 武器 + weapon_bg_pic = await get_weapon_pic(char_data['weapon']['rarity']) + char_card_img.paste(weapon_bg_pic, (105, 83), weapon_bg_pic) + char_card_img.paste(weapon_pic_scale, (105, 83), weapon_pic_scale) + char_draw = ImageDraw.Draw(char_card_img) + # 写字 + char_draw.text( + (114, 37), + f'Lv{char_data["level"]}', + text_color, + gs_font_23, + anchor='lm', + ) + char_draw.text( + (162, 96), + f'Lv{char_data["weapon"]["level"]}', + text_color, + gs_font_23, + anchor='lm', + ) + char_draw.text( + (162, 123), + f'精炼{char_data["weapon"]["affix_level"]}', + text_color, + gs_font_23, + anchor='lm', + ) + result.paste(char_card_img, (0, 0), char_card_mask) + img.paste( + result, + (15 + (index % 4) * 265, 1199 + (index // 4) * 160), + result, + ) + + +async def draw_pic(uid: str): + # 获取Cookies# 获取Cookies + data_def = GsCookie() + retcode = await data_def.get_cookie(uid) + if retcode: + return retcode + use_cookies = data_def.cookie + raw_data = data_def.raw_data + + # 记录数据 + if raw_data: + char_data = raw_data['avatars'] + else: + return '没有找到角色信息!' + + char_ids = [] + for i in char_data: + char_ids.append(i['id']) + + char_rawdata = await mys_api.get_character(uid, char_ids, use_cookies) + if isinstance(char_rawdata, int): + return get_error(char_rawdata) + char_datas = char_rawdata['avatars'] + + for index, i in enumerate(char_datas): + if i['rarity'] > 5: + char_datas[index]['rarity'] = 3 + break + + char_datas.sort( + key=lambda x: ( + -x['rarity'], + -x['fetter'], + -x['actived_constellation_num'], + ) + ) + + # 确定角色占用行数 + char_num = len(char_datas) + char_hang = ( + 1 + (char_num - 1) // 4 + if char_num > 8 + else (char_num // 2) + (char_num % 2) + ) + + # 获取背景图片各项参数 + based_w = 1080 + if char_num > 8: + based_h = 1165 + char_hang * 160 + 50 + else: + based_h = 1165 + char_hang * 260 + 50 + img = await get_simple_bg(based_w, based_h) + white_overlay = Image.new('RGBA', (based_w, based_h), (255, 251, 242, 211)) + img.paste(white_overlay, (0, 0), white_overlay) + char_import = Image.open( + CHAR_STAND_PATH / f'{char_datas[0]["id"]}.png' + ).convert('RGBA') + img.paste(char_import, (-540, -180), char_import) + img.paste(role_info_fg, (0, 0), role_info_fg) + + # 绘制基础信息文字 + text_draw = ImageDraw.Draw(img) + text_draw.text((65, 468), f'UID{uid}', text_color, gs_font_40, anchor='lm') + # 已获角色 + text_draw.text( + (1024, 569), + str(raw_data['stats']['avatar_number']), + text_color, + gs_font_40, + anchor='rm', + ) + # 活跃天数 + text_draw.text( + (1024, 294), + str(raw_data['stats']['active_day_number']), + text_color, + gs_font_40, + anchor='rm', + ) + # 成就数量 + text_draw.text( + (1024, 386), + str(raw_data['stats']['achievement_number']), + text_color, + gs_font_40, + anchor='rm', + ) + # 深渊 + text_draw.text( + (1024, 477), + raw_data['stats']['spiral_abyss'], + text_color, + gs_font_40, + anchor='rm', + ) + + # 世界探索 + world_exp = raw_data['world_explorations'] + world_list = [] + # 须弥占坑 & 城市补足 + for city_index in range(1, 9): + world_list.append( + { + 'id': city_index, + 'exp': ['0.0%'], + 'extra': [{'name': '等阶', 'level': 0}], + } + ) + for world_part in world_exp: + # 添加探索值 + temp = { + 'id': world_part['id'], + 'exp': [f'{world_part["exploration_percentage"] / 10}%'], + 'extra': [{'name': '等阶', 'level': world_part['level']}], + } + # 添加属性值 + for offering in world_part['offerings']: + temp['extra'].append( + {'name': offering['name'], 'level': offering['level']} + ) + world_list[world_part['id'] - 1] = temp + world_list.sort(key=lambda x: (-x['id']), reverse=True) + # 令层岩地下和地上合并 + world_list[5]['exp'].append(world_list[6]['exp'][0]) + # 移除地下 + world_list.pop(6) + # 添加宝箱信息和锚点 + chest_data = [ + 'magic_chest_number', + 'common_chest_number', + 'exquisite_chest_number', + 'precious_chest_number', + 'luxurious_chest_number', + # 'way_point_number', + ] + for status_index, status in enumerate(chest_data): + world_list.append( + { + 'id': 500 + status_index, + 'exp': [str(raw_data['stats'][status])], + 'extra': [], + } + ) + task = [] + for world_index, world in enumerate(world_list): + task.append(_draw_world_exp_pic(img, text_draw, world, world_index)) + await asyncio.gather(*task) + + tasks = [] + if char_num > 8: + for index, char in enumerate(char_datas): + tasks.append( + _draw_char_full_pic( + img, + char, + index, + ) + ) + else: + for index, char in enumerate(char_datas): + tasks.append( + _draw_char_8_pic( + img, + char, + index, + ) + ) + await asyncio.gather(*tasks) + + res = await convert_img(img) + logger.info('[查询角色信息]绘图已完成,等待发送!') + return res + + +async def _draw_world_exp_pic( + img: Image.Image, + text_draw: ImageDraw.ImageDraw, + world: dict, + world_index: int, +): + offset_x = 258 + offset_y = 171 + for world_exp_index, world_exp in enumerate(world['exp']): + text_draw.text( + ( + 260 + world_index % 4 * offset_x, + 700 + world_index // 4 * offset_y + world_exp_index * 28, + ), + world_exp, + text_color, + gs_font_28, + anchor='rm', + ) + for offering_index, offering in enumerate(world['extra']): + if offering["name"] == "等阶": + level_pic = await get_level_pic(offering["level"]) + img.paste( + level_pic, + ( + 199 + world_index % 4 * offset_x, + 650 + world_index // 4 * offset_y, + ), + level_pic, + ) + else: + text_draw.text( + ( + 260 + world_index % 4 * offset_x, + (len(world['exp']) - 1) * 28 + + 711 + + world_index // 4 * offset_y + + offering_index * 23, + ), + f'{str(offering["name"])}:{str(offering["level"])}', + text_color, + gs_font_23, + anchor='rm', + ) + + +async def _draw_char_8_pic( + img: Image.Image, char_data: MihoyoAvatar, index: int +): + """ + 绘制8人角色图片 + """ + result = Image.new('RGBA', (510, 225), (0, 0, 0, 0)) + char_card_img = Image.new('RGBA', (510, 225), (0, 0, 0, 0)) + if char_data['rarity'] >= 5: + char_card_img.paste(char_card8_bg5, (0, 0)) + else: + char_card_img.paste(char_card8_bg4, (0, 0)) + # 确认武器路径 + weapon_pic_path = WEAPON_PATH / f'{char_data["weapon"]["name"]}.png' + # 不存在自动下载 + if not weapon_pic_path.exists(): + await download_file( + char_data['weapon']['icon'], + 5, + f'{char_data["weapon"]["name"]}.png', + ) + # 粘贴武器图片 + weapon_pic = Image.open(weapon_pic_path).convert('RGBA') + weapon_pic_scale = weapon_pic.resize((50, 50)) + # 确认角色头像路径 + char_pic_path = CHAR_PATH / f'{char_data["id"]}.png' + # 不存在自动下载 + if not char_pic_path.exists(): + await download_file(char_data['icon'], 1, f'{char_data["id"]}.png') + # 粘贴角色图片 + char_img = Image.open(CHAR_PATH / f'{char_data["id"]}.png').convert('RGBA') + + # 角色立绘 + char_stand_img = Image.open( + CHAR_STAND_PATH / f'{char_data["id"]}.png' + ).convert('RGBA') + char_stand_img.putalpha( + char_stand_img.getchannel('A').point( + lambda x: round(x * 0.4) if x > 0 else 0 + ) + ) + char_card_img.paste(char_stand_img, (-912, -313), char_stand_img) + char_card_img.paste(char_img, (-14, -28), char_img) + char_card_img.paste(char_card8_fg, (0, 0), char_card8_fg) + fetter_pic = await get_fetter_pic(char_data['fetter']) + talent_pic = await get_talent_pic(char_data['actived_constellation_num']) + weapon_bg_pic = await get_weapon_pic(char_data['weapon']['rarity']) + char_card_img.paste(fetter_pic, (355, 27), fetter_pic) + char_card_img.paste(talent_pic, (435, 24), talent_pic) + char_card_img.paste(weapon_bg_pic, (21, 158), weapon_bg_pic) + char_card_img.paste(weapon_pic_scale, (21, 158), weapon_pic_scale) + for equip_index, equip in enumerate(char_data['reliquaries']): + equip_bg = await get_weapon_pic(equip['rarity']) + equip_pic = ( + Image.open(REL_PATH / f'{equip["name"]}.png') + .convert('RGBA') + .resize((50, 50)) + ) + char_card_img.paste(equip_bg, (242 + equip_index * 50, 170), equip_bg) + char_card_img.paste( + equip_pic, (242 + equip_index * 50, 170), equip_pic + ) + char_draw = ImageDraw.Draw(char_card_img) + char_draw.text( + (254, 36), + f'Lv{char_data["level"]}', + text_color, + gs_font_40, + anchor='lm', + ) + char_draw.text( + (81, 196), + f'Lv{char_data["weapon"]["level"]}', + text_color, + gs_font_23, + anchor='lm', + ) + char_draw.text( + (81, 168), + f'{char_data["weapon"]["name"]}', + text_color, + gs_font_23, + anchor='lm', + ) + char_draw.text( + (138, 196), + f'精炼{char_data["weapon"]["affix_level"]}', + text_color, + gs_font_23, + anchor='lm', + ) + result.paste(char_card_img, (0, 0), char_card8_mask) + img.paste( + result, + (15 + (index % 2) * 520, 1199 + (index // 2) * 250), + result, + ) diff --git a/GenshinUID/genshinuid_roleinfo/get_regtime.py b/GenshinUID/genshinuid_roleinfo/get_regtime.py new file mode 100644 index 00000000..2a8fbbd0 --- /dev/null +++ b/GenshinUID/genshinuid_roleinfo/get_regtime.py @@ -0,0 +1,25 @@ +import json +import time + +from nonebot.log import logger + +from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error + + +async def calc_reg_time(uid: str) -> str: + # 获得原始数据 + try: + raw_data = await mys_api.get_regtime_data(uid) + if isinstance(raw_data, int): + return get_error(raw_data) + # 获取时间戳 + reg_time = json.loads(raw_data['data'])['1'] + # 转换为日期 + regtime_date = time.strftime( + "%Y-%m-%d %H:%M:%S", time.localtime(reg_time) + ) + return f'UID{uid} 的注册时间为\n{regtime_date}' + except Exception as e: + logger.error(e) + return '数据获取错误, 可尝试使用“刷新ck”功能。' diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_bg4.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_bg4.png new file mode 100644 index 00000000..db0751bf Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_bg4.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_bg5.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_bg5.png new file mode 100644 index 00000000..98c82e5c Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_bg5.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_fg.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_fg.png new file mode 100644 index 00000000..9e6353f8 Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_fg.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_mask.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_mask.png new file mode 100644 index 00000000..5016470d Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card8_mask.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card_bg4.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_bg4.png new file mode 100644 index 00000000..55a4929b Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_bg4.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card_bg5.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_bg5.png new file mode 100644 index 00000000..f7a5e4ca Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_bg5.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card_fg.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_fg.png new file mode 100644 index 00000000..d4a7107c Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_fg.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/char_card_mask.png b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_mask.png new file mode 100644 index 00000000..04733e82 Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/char_card_mask.png differ diff --git a/GenshinUID/genshinuid_roleinfo/texture2d/role_info_fg.png b/GenshinUID/genshinuid_roleinfo/texture2d/role_info_fg.png new file mode 100644 index 00000000..1e6f82e8 Binary files /dev/null and b/GenshinUID/genshinuid_roleinfo/texture2d/role_info_fg.png differ diff --git a/GenshinUID/genshinuid_signin/__init__.py b/GenshinUID/genshinuid_signin/__init__.py new file mode 100644 index 00000000..9c442951 --- /dev/null +++ b/GenshinUID/genshinuid_signin/__init__.py @@ -0,0 +1,86 @@ +import random +import asyncio + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.gss import gss +from gsuid_core.models import Event +from gsuid_core.aps import scheduler +from gsuid_core.logger import logger + +from .sign import sign_in, daily_sign +from ..utils.database import active_sqla +from ..utils.error_reply import UID_HINT +from ..genshinuid_config.gs_config import gsconfig + + +# 每日零点半执行米游社原神签到 +@scheduler.scheduled_job('cron', hour='0', minute='38') +async def sign_at_night(): + if gsconfig.get_config('SchedSignin').data: + await send_daily_sign() + + +# 群聊内 签到 功能 +@SV('原神签到').on_fullmatch('签到') +async def get_sign_func(bot: Bot, ev: Event): + await bot.logger.info('[签到]QQ号: {}'.format(ev.user_id)) + sqla = active_sqla[ev.bot_id] + uid = await sqla.get_bind_uid(ev.user_id) + if uid is None: + return await bot.send(UID_HINT) + await bot.logger.info('[签到]UID: {}'.format(uid)) + await bot.send(await sign_in(uid)) + + +@SV('原神签到', pm=2).on_fullmatch('全部重签') +async def recheck(bot: Bot): + await bot.logger.info('开始执行[全部重签]') + await bot.send('已开始执行') + await send_daily_sign() + await bot.send('执行完成') + + +async def send_daily_sign(): + logger.info('开始执行[每日全部签到]') + # 执行签到 并获得推送消息 + result = await daily_sign() + private_msg_list = result['private_msg_list'] + group_msg_list = result['group_msg_list'] + logger.info('[每日全部签到]完成') + + # 执行私聊推送 + for qid in private_msg_list: + try: + for single in private_msg_list[qid]: + await gss.active_bot['bot_id'].target_send( + single['msg'], 'direct', qid + ) + except Exception: + logger.warning(f'[每日全部签到] QQ {qid} 私聊推送失败!') + await asyncio.sleep(0.5) + logger.info('[每日全部签到]私聊推送完成') + + # 执行群聊推送 + for gid in group_msg_list: + # 根据succee数判断是否为简洁推送 + if group_msg_list[gid]['success'] >= 0: + report = ( + '以下为签到失败报告:{}'.format(group_msg_list[gid]['push_message']) + if group_msg_list[gid]['push_message'] != '' + else '' + ) + msg_title = '今日自动签到已完成!\n本群共签到成功{}人,共签到失败{}人。{}'.format( + group_msg_list[gid]['success'], + group_msg_list[gid]['failed'], + report, + ) + else: + msg_title = group_msg_list[gid]['push_message'] + # 发送群消息 + try: + await gss.active_bot['bot_id'].target_send(msg_title, 'group', gid) + except Exception: + logger.warning(f'[每日全部签到]群 {gid} 推送失败!') + await asyncio.sleep(0.5 + random.randint(1, 3)) + logger.info('[每日全部签到]群聊推送完成') diff --git a/GenshinUID/genshinuid_signin/sign.py b/GenshinUID/genshinuid_signin/sign.py new file mode 100644 index 00000000..a0da4041 --- /dev/null +++ b/GenshinUID/genshinuid_signin/sign.py @@ -0,0 +1,190 @@ +import random +import asyncio +from copy import deepcopy + +from nonebot.log import logger + +from ..utils.mys_api import mys_api +from ..utils.database import active_sqla +from ..genshinuid_config.gs_config import gsconfig + +private_msg_list = {} +group_msg_list = {} +already = 0 + + +# 签到函数 +async def sign_in(uid: str) -> str: + logger.info(f'[签到] {uid} 开始执行签到') + # 获得签到信息 + sign_info = await mys_api.get_sign_info(uid) + # 初步校验数据 + if isinstance(sign_info, int): + logger.warning(f'[签到] {uid} 出错, 请检查Cookies是否过期!') + return '签到失败...请检查Cookies是否过期!' + # 检测是否已签到 + if sign_info['is_sign']: + logger.info(f'[签到] {uid} 该用户今日已签到,跳过...') + global already + already += 1 + day_of_month = int(sign_info['today'].split('-')[-1]) + signed_count = int(sign_info['total_sign_day']) + sign_missed = day_of_month - signed_count + return f'今日已签到!本月漏签次数:{sign_missed}' + + # 实际进行签到 + Header = {} + for index in range(4): + # 进行一次签到 + sign_data = await mys_api.mys_sign(uid=uid, header=Header) + # 检测数据 + if isinstance(sign_data, int): + logger.warning(f'[签到] {uid} 出错, 请检查Cookies是否过期!') + return '签到失败...请检查Cookies是否过期!' + if 'risk_code' in sign_data: + # 出现校验码 + if sign_data['risk_code'] == 375: + if gsconfig.get_config('CaptchaPass').data: + gt = sign_data['gt'] + ch = sign_data['challenge'] + vl, ch = await mys_api._pass(gt, ch, Header) + if vl: + delay = 1 + Header['x-rpc-challenge'] = ch + Header['x-rpc-validate'] = vl + Header['x-rpc-seccode'] = f'{vl}|jordan' + logger.info(f'[签到] {uid} 已获取验证码, 等待时间{delay}秒') + await asyncio.sleep(delay) + else: + delay = 605 + random.randint(1, 120) + logger.info(f'[签到] {uid} 未获取验证码,等待{delay}秒后重试...') + await asyncio.sleep(delay) + continue + else: + logger.info('配置文件暂未开启[跳过无感验证],结束本次任务...') + return '签到失败...出现验证码!' + # 成功签到! + else: + if index == 0: + logger.info(f'[签到] {uid} 该用户无校验码!') + else: + logger.info(f'[签到] [无感验证] {uid} 该用户重试 {index} 次验证成功!') + break + elif (int(str(uid)[0]) > 5) and (sign_data['data']['code'] == 'ok'): + # 国际服签到无risk_code字段 + logger.info(f'[国际服签到] {uid} 签到成功!') + break + else: + # 重试超过阈值 + logger.warning('[签到] 超过请求阈值...') + return '签到失败...出现验证码!\n请过段时间使用[签到]或由管理员[全部重签]或手动至米游社进行签到!' + # 签到失败 + else: + im = '签到失败!' + logger.warning(f'[签到] {uid} 签到失败, 结果: {im}') + return im + # 获取签到列表 + sign_list = await mys_api.get_sign_list(uid) + new_sign_info = await mys_api.get_sign_info(uid) + if isinstance(sign_list, int) or isinstance(new_sign_info, int): + logger.warning(f'[签到] {uid} 出错, 请检查Cookies是否过期!') + return '签到失败...请检查Cookies是否过期!' + status = sign_data['message'] + # 获取签到奖励物品,拿旧的总签到天数 + 1 为新的签到天数,再 -1 即为今日奖励物品的下标 + getitem = sign_list['awards'][int(sign_info['total_sign_day']) + 1 - 1] + get_im = f'本次签到获得{getitem["name"]}x{getitem["cnt"]}' + day_of_month = int(new_sign_info['today'].split('-')[-1]) + signed_count = int(new_sign_info['total_sign_day']) + sign_missed = day_of_month - signed_count + if new_sign_info['is_sign']: + mes_im = '签到成功' + else: + mes_im = f'签到失败, 状态为:{status}' + sign_missed -= 1 + sign_missed = sign_info.get('sign_cnt_missed') or sign_missed + im = f'{mes_im}!\n{get_im}\n本月漏签次数:{sign_missed}' + logger.info(f'[签到] {uid} 签到完成, 结果: {mes_im}, 漏签次数: {sign_missed}') + return im + + +async def single_daily_sign(bot_id: str, uid: str, gid: str, qid: str): + im = await sign_in(uid) + if gid == 'on': + if qid not in private_msg_list: + private_msg_list[qid] = [] + private_msg_list[qid].append({'bot_id': bot_id, 'uid': uid, 'msg': im}) + else: + # 向群消息推送列表添加这个群 + if gid not in group_msg_list: + group_msg_list[gid] = { + 'bot_id': bot_id, + 'success': 0, + 'failed': 0, + 'push_message': '', + } + # 检查是否开启简洁签到 + if gsconfig.get_config('SignReportSimple').data: + # 如果失败, 则添加到推送列表 + if im.startswith(('签到失败', '网络有点忙', 'OK', 'ok')): + message = f'[CQ:at,qq={qid}] {im}' + group_msg_list[gid]['failed'] += 1 + group_msg_list[gid]['push_message'] += '\n' + message + else: + group_msg_list[gid]['success'] += 1 + # 没有开启简洁签到, 则每条消息都要携带@信息 + else: + # 不用MessageSegment.at(row[2]),因为不方便移植 + message = f'[CQ:at,qq={qid}] {im}' + group_msg_list[gid]['push_message'] += '\n' + message + group_msg_list[gid]['success'] -= 1 + + +async def daily_sign(): + """ + :说明: + 将数据库中全部Status不为`off`的用户进行签到, + 并返回签到信息private_msg_list, group_msg_list, + private_msg_list = [{'qid': 'msg'}, ...], + group_msg_list = [ + {'gid': {'success': 0, 'failed': 0, 'push_message': ''}}, ... + ], + 如开启简洁签到, + success = 签到成功数, + failed = 签到失败数, + 不开启简洁签到, + success将为负数, + :返回: + * {'private_msg_list': ..., 'group_msg_list': ...} (dict): 要发送的私聊消息和群聊消息 + """ + global already + tasks = [] + for bot_id in active_sqla: + sqla = active_sqla[bot_id] + user_list = await sqla.get_all_user() + for user in user_list: + if user.sign_switch != 'off': + tasks.append( + single_daily_sign( + bot_id, user.uid, user.sign_switch, user.user_id + ) + ) + if len(tasks) >= 1: + await asyncio.gather(*tasks) + if already >= 1: + delay = 1 + else: + delay = 50 + random.randint(3, 45) + logger.info(f'[签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到') + tasks.clear() + already = 0 + await asyncio.sleep(delay) + await asyncio.gather(*tasks) + tasks.clear() + result = { + 'private_msg_list': deepcopy(private_msg_list), + 'group_msg_list': deepcopy(group_msg_list), + } + private_msg_list.clear() + group_msg_list.clear() + logger.info(result) + return result diff --git a/GenshinUID/genshinuid_update/__init__.py b/GenshinUID/genshinuid_update/__init__.py new file mode 100644 index 00000000..90acd800 --- /dev/null +++ b/GenshinUID/genshinuid_update/__init__.py @@ -0,0 +1,65 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.gss import gss +from gsuid_core.models import Event +from gsuid_core.logger import logger + +from .draw_update_log import draw_update_log_img +from .restart import restart_message, restart_genshinuid + + +@gss.on_bot_connect +async def check_msg(): + try: + logger.info('检查遗留信息...') + update_log = await restart_message() + if update_log == {}: + return + if update_log['bot_id'] in gss.active_bot: + bot = gss.active_bot[update_log['bot_id']] + if update_log['send_type'] == 'group': + await bot.target_send( + update_log['msg'], 'group', update_log['send_to'] + ) + else: + await bot.target_send( + update_log['msg'], 'direct', update_log['send_to'] + ) + logger.info('遗留信息检查完毕!') + except Exception: + logger.warning('遗留信息检查失败!') + + +@SV('Core管理', pm=1).on_fullmatch(('gs重启')) +async def send_restart_msg(bot: Bot, ev: Event): + await bot.logger.warning('开始执行[重启]') + if ev.group_id: + send_id = ev.group_id + send_type = 'group' + else: + send_id = ev.user_id + send_type = 'direct' + await bot.send('正在执行[gs重启]...') + await restart_genshinuid(bot.bot_id, send_type, str(send_id)) + + +@SV('Core更新记录').on_fullmatch(('更新记录')) +async def send_updatelog_msg(bot: Bot): + await bot.logger.info('正在执行[更新记录]...') + im = await draw_update_log_img(is_update=False) + await bot.send(im) + + +@SV('Core管理', pm=1).on_fullmatch(('gs更新', 'gs强制更新', 'gs强行强制更新')) +async def send_update_msg(bot: Bot, ev: Event): + await bot.logger.info('[gs更新] 正在执行 ...') + level = 2 + if '强制' not in ev.command: + level -= 1 + if '强行' not in ev.command: + level -= 1 + await bot.logger.info(f'[gs更新] 更新等级为{level}') + await bot.send(f'开始执行[gs更新], 执行等级为{level}') + + im = await draw_update_log_img(level) + await bot.send(im) diff --git a/GenshinUID/genshinuid_update/draw_update_log.py b/GenshinUID/genshinuid_update/draw_update_log.py new file mode 100644 index 00000000..6fbfe07e --- /dev/null +++ b/GenshinUID/genshinuid_update/draw_update_log.py @@ -0,0 +1,65 @@ +from pathlib import Path +from typing import Union + +from PIL import Image, ImageDraw + +from .update import update_from_git +from ..utils.image.convert import convert_img +from ..utils.image.image_tools import get_color_bg +from ..utils.fonts.genshin_fonts import genshin_font_origin + +R_PATH = Path(__file__).parent +TEXT_PATH = R_PATH / 'texture2d' + +gs_font_30 = genshin_font_origin(30) +black_color = (24, 24, 24) + +log_config = { + 'key': '✨🐛🎨⚡🍱♻️', + 'num': 18, +} + +log_map = {'✨': 'feat', '🐛': 'bug', '🍱': 'bento', '⚡️': 'zap', '🎨': 'art'} + + +async def draw_update_log_img( + level: int = 0, + repo_path: Union[str, Path, None] = None, + is_update: bool = True, +) -> Union[bytes, str]: + log_list = await update_from_git(level, repo_path, log_config, is_update) + if len(log_list) == 0: + return ( + '更新失败!更多错误信息请查看控制台...\n ' + '>> 可以尝试使用\n ' + '>> [gs强制更新](危险)\n ' + '>> [gs强行强制更新](超级危险)!' + ) + + log_title = Image.open(TEXT_PATH / 'log_title.png') + + img = await get_color_bg(950, 20 + 475 + 80 * len(log_list)) + img.paste(log_title, (0, 0), log_title) + img_draw = ImageDraw.Draw(img) + img_draw.text( + (475, 432), 'GenshinUID 更新记录', black_color, gs_font_30, 'mm' + ) + + for index, log in enumerate(log_list): + for key in log_map: + if log.startswith(key): + log_img = Image.open(TEXT_PATH / f'{log_map[key]}.png') + break + else: + log_img = Image.open(TEXT_PATH / 'other.png') + + log_img_text = ImageDraw.Draw(log_img) + if ')' in log: + log = log.split(')')[0] + ')' + log = log.replace('`', '') + log_img_text.text((120, 40), log[2:], black_color, gs_font_30, 'lm') + + img.paste(log_img, (0, 475 + 80 * index), log_img) + + img = await convert_img(img) + return img diff --git a/GenshinUID/genshinuid_update/restart.py b/GenshinUID/genshinuid_update/restart.py new file mode 100644 index 00000000..800595ce --- /dev/null +++ b/GenshinUID/genshinuid_update/restart.py @@ -0,0 +1,72 @@ +import os +import sys +import json +import time +import platform +import subprocess +from pathlib import Path + +from ..genshinuid_config.gs_config import gsconfig + +bot_start = Path().cwd() / 'core.py' +restart_sh_path = Path().cwd() / 'gs_restart.sh' +update_log_path = Path(__file__).parent / 'update_log.json' + +_restart_sh = '''#!/bin/bash +kill -9 {} +{} &''' + + +async def get_restart_sh(extra: str) -> str: + args = f'{extra} {str(bot_start.absolute())}' + return _restart_sh.format(str(bot_start.absolute()), args) + + +async def restart_genshinuid( + bot_id: str, send_type: str, send_id: str +) -> None: + pid = os.getpid() + extra = '' + if gsconfig.get_config('UsePoetry').data: + extra = 'poetry run ' + extra += sys.executable + restart_sh = await get_restart_sh(extra) + with open(restart_sh_path, "w", encoding="utf8") as f: + f.write(restart_sh) + if platform.system() == 'Linux': + os.system(f'chmod +x {str(restart_sh_path)}') + os.system(f'chmod +x {str(bot_start)}') + now_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + update_log = { + 'type': 'restart', + 'msg': '重启完成!', + 'bot_id': bot_id, + 'send_type': send_type, + 'send_to': send_id, + 'time': now_time, + } + with open(str(update_log_path), 'w', encoding='utf-8') as f: + json.dump(update_log, f) + if platform.system() == 'Linux': + subprocess.Popen( + f'kill -9 {pid} & {extra} {bot_start}', + shell=True, + ) + else: + subprocess.Popen( + f'taskkill /F /PID {pid} & {extra} {bot_start}', + shell=True, + ) + + +async def restart_message() -> dict: + if update_log_path.exists(): + with open(update_log_path, 'r', encoding='utf-8') as f: + update_log = json.load(f) + msg = f'{update_log["msg"]}\n重启时间:{update_log["time"]}' + update_log['msg'] = msg + os.remove(update_log_path) + os.remove(restart_sh_path) + return update_log + else: + return {} diff --git a/GenshinUID/genshinuid_update/texture2d/art.png b/GenshinUID/genshinuid_update/texture2d/art.png new file mode 100644 index 00000000..8d25481c Binary files /dev/null and b/GenshinUID/genshinuid_update/texture2d/art.png differ diff --git a/GenshinUID/genshinuid_update/texture2d/bento.png b/GenshinUID/genshinuid_update/texture2d/bento.png new file mode 100644 index 00000000..4db6eee1 Binary files /dev/null and b/GenshinUID/genshinuid_update/texture2d/bento.png differ diff --git a/GenshinUID/genshinuid_update/texture2d/bug.png b/GenshinUID/genshinuid_update/texture2d/bug.png new file mode 100644 index 00000000..08203c84 Binary files /dev/null and b/GenshinUID/genshinuid_update/texture2d/bug.png differ diff --git a/GenshinUID/genshinuid_update/texture2d/feat.png b/GenshinUID/genshinuid_update/texture2d/feat.png new file mode 100644 index 00000000..7beb3550 Binary files /dev/null and b/GenshinUID/genshinuid_update/texture2d/feat.png differ diff --git a/GenshinUID/genshinuid_update/texture2d/log_title.png b/GenshinUID/genshinuid_update/texture2d/log_title.png new file mode 100644 index 00000000..52405dfe Binary files /dev/null and b/GenshinUID/genshinuid_update/texture2d/log_title.png differ diff --git a/GenshinUID/genshinuid_update/texture2d/other.png b/GenshinUID/genshinuid_update/texture2d/other.png new file mode 100644 index 00000000..4f510726 Binary files /dev/null and b/GenshinUID/genshinuid_update/texture2d/other.png differ diff --git a/GenshinUID/genshinuid_update/texture2d/zap.png b/GenshinUID/genshinuid_update/texture2d/zap.png new file mode 100644 index 00000000..4af48969 Binary files /dev/null and b/GenshinUID/genshinuid_update/texture2d/zap.png differ diff --git a/GenshinUID/genshinuid_update/update.py b/GenshinUID/genshinuid_update/update.py new file mode 100644 index 00000000..5ef81ed7 --- /dev/null +++ b/GenshinUID/genshinuid_update/update.py @@ -0,0 +1,65 @@ +from pathlib import Path +from typing import List, Union + +import git +from nonebot.log import logger +from git.exc import GitCommandError + + +async def update_from_git( + level: int = 0, + repo_path: Union[str, Path, None] = None, + log_config: dict = { + 'key': '✨🐛', + 'num': 7, + }, + is_update: bool = True, +) -> List[str]: + if repo_path is None: + repo_path = Path(__file__).parents[2] + repo = git.Repo(repo_path) # type: ignore + o = repo.remotes.origin + + if is_update: + # 清空暂存 + if level >= 2: + logger.warning('[gs更新] 正在执行 git clean --xdf') + repo.git.clean('-xdf') + # 还原上次更改 + if level >= 1: + logger.warning('[gs更新] 正在执行 git reset --hard') + repo.git.reset('--hard') + + try: + pull_log = o.pull() + logger.info(f'[gs更新] {pull_log}') + except GitCommandError as e: + logger.warning(e) + return [] + + commits = list(repo.iter_commits(max_count=40)) + log_list = [] + for commit in commits: + if isinstance(commit.message, str): + for key in log_config['key']: + if key in commit.message: + log_list.append(commit.message.replace('\n', '')) + if len(log_list) >= log_config['num']: + break + return log_list + + +async def update_genshinuid( + level: int = 0, repo_path: Union[str, Path, None] = None +) -> str: + log_list = await update_from_git(level, repo_path) + if len(log_list) == 0: + return ( + '更新失败!更多错误信息请查看控制台...\n ' + '>> 可以尝试使用\n ' + '>> [gs强制更新](危险)\n ' + '>> [gs强行强制更新](超级危险)!' + ) + log = '\n'.join(log_list) + logger.info(f'[gs更新]\n{log}') + return f'更新成功!\n >> 最近有效更新为:\n{log}' diff --git a/GenshinUID/genshinuid_user/__init__.py b/GenshinUID/genshinuid_user/__init__.py new file mode 100644 index 00000000..456d12bc --- /dev/null +++ b/GenshinUID/genshinuid_user/__init__.py @@ -0,0 +1,95 @@ +from typing import List + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.segment import MessageSegment + +from .qrlogin import qrcode_login +from ..utils.database import active_sqla +from .get_ck_help_msg import get_ck_help +from ..utils.message import send_diff_msg +from .draw_user_card import get_user_card +from .add_ck import deal_ck, get_ck_by_stoken, get_ck_by_all_stoken + + +@SV('用户管理', pm=2).on_fullmatch(('刷新全部CK', '刷新全部ck')) +async def send_refresh_all_ck_msg(bot: Bot, ev: Event): + await bot.logger.info('开始执行[刷新全部CK]') + im = await get_ck_by_all_stoken(ev.bot_id) + await bot.send(im) + + +@SV('用户添加').on_fullmatch(('刷新CK', '刷新ck')) +async def send_refresh_ck_msg(bot: Bot, ev: Event): + await bot.logger.info('开始执行[刷新CK]') + im = await get_ck_by_stoken(ev.bot_id, ev.user_id) + await bot.send(im) + + +@SV('扫码登陆').on_fullmatch(('扫码登陆', '扫码登录')) +async def send_qrcode_login(bot: Bot, ev: Event): + await bot.logger.info('开始执行[扫码登陆]') + im = await qrcode_login(bot, ev.user_id) + if not im: + return + im = await deal_ck(ev.bot_id, im, ev.user_id) + await bot.send(im) + + +@SV('用户信息').on_fullmatch(('绑定信息')) +async def send_bind_card(bot: Bot, ev: Event): + await bot.logger.info('开始执行[查询用户绑定状态]') + im = await get_user_card(ev.bot_id, ev.user_id) + await bot.logger.info('[查询用户绑定状态]完成!等待图片发送中...') + await bot.send(im) + + +@SV('添加CK', area='DIRECT').on_prefix(('添加')) +async def send_add_ck_msg(bot: Bot, ev: Event): + im = await deal_ck(ev.bot_id, ev.text, ev.user_id) + await bot.send(im) + + +@SV('用户信息').on_prefix(('绑定uid', '切换uid', '删除uid', '解绑uid')) +async def send_link_uid_msg(bot: Bot, ev: Event): + await bot.logger.info('开始执行[绑定/解绑用户信息]') + qid = ev.user_id + await bot.logger.info('[绑定/解绑]UserID: {}'.format(qid)) + + sqla = active_sqla[ev.bot_id] + uid = ev.text + + if ev.command.startswith('绑定'): + data = await sqla.insert_bind_data(qid, uid=uid) + return await send_diff_msg( + bot, + data, + { + 0: f'绑定UID{uid}成功!', + -1: f'UID{uid}的位数不正确!', + -2: f'UID{uid}已经绑定过了!', + }, + ) + elif ev.command.startswith('切换'): + data = await sqla.switch_uid(qid, uid=uid) + if isinstance(data, List): + return await bot.send(f'切换UID{uid}成功!') + else: + return await bot.send(f'尚未绑定该UID{uid}') + else: + data = await sqla.delete_bind_data(qid, uid=uid) + return await send_diff_msg( + bot, + data, + { + 0: f'删除UID{uid}成功!', + -1: f'该UID{uid}不在已绑定列表中!', + }, + ) + + +@SV('帮助').on_fullmatch(('ck帮助', '绑定帮助')) +async def send_ck_help(bot: Bot): + msg_list = await get_ck_help() + await bot.send(MessageSegment.node(msg_list)) diff --git a/GenshinUID/genshinuid_user/add_ck.py b/GenshinUID/genshinuid_user/add_ck.py new file mode 100644 index 00000000..dfae703c --- /dev/null +++ b/GenshinUID/genshinuid_user/add_ck.py @@ -0,0 +1,237 @@ +from pathlib import Path +from typing import Dict, List +from http.cookies import SimpleCookie + +from ..utils.mys_api import mys_api +from ..utils.database import active_sqla +from ..utils.error_reply import UID_HINT + +pic_path = Path(__file__).parent / 'pic' +id_list = [ + 'login_uid', + 'login_uid_v2', + 'account_mid_v2', + 'account_mid', + 'account_id', + 'stuid', + 'ltuid', + 'ltmid', + 'stmid', + 'stmid_v2', + 'ltmid_v2', + 'stuid_v2', + 'ltuid_v2', +] +sk_list = ['stoken', 'stoken_v2'] +ck_list = ['cookie_token', 'cookie_token_v2'] +lt_list = ['login_ticket', 'login_ticket_v2'] + + +async def get_ck_by_all_stoken(bot_id: str): + sqla = active_sqla[bot_id] + uid_list: List = await sqla.get_all_uid_list() + uid_dict = {} + for uid in uid_list: + user_data = await sqla.select_user_data(uid) + if user_data: + uid_dict[uid] = user_data.user_id + im = await refresh_ck_by_uid_list(bot_id, uid_dict) + return im + + +async def get_ck_by_stoken(bot_id: str, user_id: str): + sqla = active_sqla[bot_id] + uid_list: List = await sqla.get_bind_uid_list(user_id) + uid_dict = {uid: user_id for uid in uid_list} + im = await refresh_ck_by_uid_list(bot_id, uid_dict) + return im + + +async def refresh_ck_by_uid_list(bot_id: str, uid_dict: Dict): + sqla = active_sqla[bot_id] + uid_num = len(uid_dict) + if uid_num == 0: + return '请先绑定一个UID噢~' + error_list = {} + skip_num = 0 + error_num = 0 + for uid in uid_dict: + stoken = await sqla.get_user_stoken(uid) + if stoken is None: + skip_num += 1 + error_num += 1 + continue + else: + qid = uid_dict[uid] + try: + mes = await _deal_ck(bot_id, stoken, qid) + except TypeError: + error_list[uid] = 'SK或CK已过期!' + error_num += 1 + continue + ok_num = mes.count('成功') + if ok_num < 2: + error_list[uid] = '可能是SK已过期~' + error_num += 1 + continue + + s_im = f'执行完成~成功刷新CK{uid_num - error_num}个!跳过{skip_num}个!' + f_im = '\n'.join([f'UID{u}:{error_list[u]}' for u in error_list]) + im = f'{s_im}\n{f_im}' if f_im else s_im + + return im + + +async def deal_ck(bot_id: str, mes: str, user_id: str, mode: str = 'PIC'): + im = await _deal_ck(bot_id, mes, user_id) + if mode == 'PIC': + im = await _deal_ck_to_pic(im) + return im + + +async def _deal_ck_to_pic(im: str) -> bytes: + ok_num = im.count('成功') + if ok_num < 1: + status_pic = pic_path / 'ck_no.png' + elif ok_num < 2: + status_pic = pic_path / 'ck_ok.png' + else: + status_pic = pic_path / 'all_ok.png' + with open(status_pic, 'rb') as f: + img = f.read() + return img + + +async def get_account_id(simp_dict: SimpleCookie) -> str: + for _id in id_list: + if _id in simp_dict: + account_id = simp_dict[_id].value + break + else: + account_id = '' + return account_id + + +async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str: + sqla = active_sqla[bot_id] + simp_dict = SimpleCookie(mes) + uid = await sqla.get_bind_uid(user_id) + if uid is None: + return UID_HINT + im_list = [] + is_add_stoken = False + status = True + app_cookie, stoken = '', '' + account_id, cookie_token = '', '' + if status: + for sk in sk_list: + if sk in simp_dict: + account_id = await get_account_id(simp_dict) + if not account_id: + return '该CK字段出错, 缺少login_uid或stuid或ltuid字段!' + stoken = simp_dict[sk].value + if stoken.startswith('v2_'): + if 'mid' in simp_dict: + mid = simp_dict['mid'].value + app_cookie = ( + f'stuid={account_id};stoken={stoken};mid={mid}' + ) + else: + return 'v2类型SK必须携带mid...' + else: + app_cookie = f'stuid={account_id};stoken={stoken}' + cookie_token_data = await mys_api.get_cookie_token_by_stoken( + stoken, account_id, app_cookie + ) + if isinstance(cookie_token_data, Dict): + cookie_token = cookie_token_data['cookie_token'] + is_add_stoken = True + status = False + break + else: + return '返回值错误...' + if status: + for lt in lt_list: + if lt in simp_dict: + # 寻找stoken + login_ticket = simp_dict[lt].value + account_id = await get_account_id(simp_dict) + if not account_id: + return '该CK字段出错, 缺少login_uid或stuid或ltuid字段!' + stoken_data = await mys_api.get_stoken_by_login_ticket( + login_ticket, account_id + ) + if isinstance(stoken_data, Dict): + stoken = stoken_data['list'][0]['token'] + app_cookie = f'stuid={account_id};stoken={stoken}' + cookie_token_data = ( + await mys_api.get_cookie_token_by_stoken( + stoken, account_id + ) + ) + if isinstance(cookie_token_data, Dict): + cookie_token = cookie_token_data['cookie_token'] + is_add_stoken = True + status = False + break + if status: + for ck in ck_list: + if ck in simp_dict: + # 寻找uid + account_id = await get_account_id(simp_dict) + if not account_id: + return '该CK字段出错, 缺少login_uid或stuid或ltuid字段!' + cookie_token = simp_dict[ck].value + status = False + break + if status: + return ( + '添加Cookies失败!Cookies中应该包含cookie_token或者login_ticket相关信息!' + '\n可以尝试退出米游社登陆重新登陆获取!' + ) + + account_cookie = f'account_id={account_id};cookie_token={cookie_token}' + + try: + if int(uid[0]) < 6: + mys_data = await mys_api.get_mihoyo_bbs_info( + account_id, account_cookie + ) + else: + mys_data = await mys_api.get_mihoyo_bbs_info( + account_id, account_cookie, True + ) + # 剔除除了原神之外的其他游戏 + if isinstance(mys_data, List): + for i in mys_data: + if i['game_id'] == 2: + uid = i['game_role_id'] + break + else: + return f'你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!' + except Exception: + pass + + if not uid: + return f'你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!' + + await sqla.refresh_cache(uid) + if is_add_stoken: + im_list.append(f'添加Stoken成功,stuid={account_id},stoken={stoken}') + await sqla.insert_user_data(user_id, uid, account_cookie, app_cookie) + + im_list.append( + f'添加Cookies成功,account_id={account_id},cookie_token={cookie_token}' + ) + im_list.append( + 'Cookies和Stoken属于个人重要信息,如果你是在不知情的情况下添加,请马上修改米游社账户密码,保护个人隐私!' + ) + im_list.append( + ( + '如果需要【gs开启自动签到】和【gs开启推送】还需要在【群聊中】使用命令“绑定uid”绑定你的uid。' + '\n例如:绑定uid123456789。' + ) + ) + im_list.append('你可以使用命令【绑定信息】检查你的账号绑定情况!') + im = '\n'.join(im_list) + return im diff --git a/GenshinUID/genshinuid_user/draw_user_card.py b/GenshinUID/genshinuid_user/draw_user_card.py new file mode 100644 index 00000000..2c28f84a --- /dev/null +++ b/GenshinUID/genshinuid_user/draw_user_card.py @@ -0,0 +1,123 @@ +from typing import List +from pathlib import Path + +from PIL import Image, ImageDraw + +from ..utils.database import active_sqla +from ..utils.image.convert import convert_img +from ..gsuid_utils.database.models import GsUser +from ..utils.image.image_tools import get_simple_bg +from ..utils.fonts.genshin_fonts import genshin_font_origin + +TEXT_PATH = Path(__file__).parent / 'texture2d' + +status_s_on = Image.open(TEXT_PATH / 'status_s_on.png') +status_s_off = Image.open(TEXT_PATH / 'status_s_off.png') +status_l_off = Image.open(TEXT_PATH / 'status_l_off.png') +status_l_on = Image.open(TEXT_PATH / 'status_l_on.png') +uid_hint = Image.open(TEXT_PATH / 'uid_hint.png') + +EN_MAP = {'coin': '宝钱', 'resin': '体力', 'go': '派遣', 'transform': '质变仪'} + +white_color = (254, 243, 231) +gs_font_20 = genshin_font_origin(20) +gs_font_15 = genshin_font_origin(15) +gs_font_26 = genshin_font_origin(26) + + +async def get_user_card(bot_id: str, user_id: str) -> bytes: + sqla = active_sqla[bot_id] + uid_list: List = await sqla.get_bind_uid_list(user_id) + w, h = 500, len(uid_list) * 210 + 330 + img = await get_simple_bg(w, h) + white_overlay = Image.new('RGBA', (w, h), (244, 244, 244, 200)) + img.paste(white_overlay, (0, 0), white_overlay) + uid_title = Image.open(TEXT_PATH / 'uid_title.png') + uid_title_draw = ImageDraw.Draw(uid_title) + uid_title_draw.text( + (47, 70), f'QQ号{str(user_id)}', (106, 100, 89), font=gs_font_26 + ) + img.paste(uid_title, (0, 50), uid_title) + img.paste(uid_hint, (0, 145 + len(uid_list) * 210), uid_hint) + for uid_index, uid in enumerate(uid_list): + user_push_data = await sqla.select_push_data(uid) + user_data = await sqla.select_user_data(uid) + if user_data is None: + user_data = GsUser( + bot_id=bot_id, + user_id=user_id, + uid=uid, + stoken=None, + cookie=None, + sign_switch='off', + bbs_switch='off', + push_switch='off', + ) + uid_img = Image.open(TEXT_PATH / 'uid_part.png') + uid_img_draw = ImageDraw.Draw(uid_img) + uid_img_draw.text( + (112, 45), + f'UID{uid}', + white_color, + font=gs_font_20, + anchor='mm', + ) + uid_img_draw.text( + (390, 17), + f'user_id{user_data.user_id}', + white_color, + font=gs_font_20, + anchor='mm', + ) + if user_data.cookie: + uid_img.paste(status_s_on, (292, 41), status_s_on) + else: + uid_img.paste(status_s_off, (292, 41), status_s_off) + + if user_data.stoken: + uid_img.paste(status_s_on, (428, 41), status_s_on) + else: + uid_img.paste(status_s_off, (428, 41), status_s_off) + + if user_data.push_switch != 'off': + uid_img.paste(status_s_on, (135, 76), status_s_on) + else: + uid_img.paste(status_s_off, (135, 76), status_s_off) + + if user_data.sign_switch != 'off': + uid_img.paste(status_s_on, (270, 76), status_s_on) + else: + uid_img.paste(status_s_off, (270, 76), status_s_off) + + if user_data.bbs_switch != 'off': + uid_img.paste(status_s_on, (428, 76), status_s_on) + else: + uid_img.paste(status_s_off, (428, 76), status_s_off) + + for index, mode in enumerate(['coin', 'resin', 'go', 'transform']): + if getattr(user_push_data, f'{mode}_push') != 'off': + uid_img.paste( + status_l_on, (25 + index * 115, 112), status_l_on + ) + + else: + uid_img.paste( + status_l_off, (25 + index * 115, 112), status_l_off + ) + uid_img_draw.text( + (78 + index * 115, 141), + f'{EN_MAP[mode]}推送', + white_color, + font=gs_font_20, + anchor='mm', + ) + uid_img_draw.text( + (78 + index * 115, 164), + f'阈值:{getattr(user_push_data, f"{mode}_value")}', + white_color, + font=gs_font_15, + anchor='mm', + ) + img.paste(uid_img, (0, 150 + uid_index * 210), uid_img) + + return await convert_img(img) diff --git a/GenshinUID/genshinuid_user/get_ck_help_msg.py b/GenshinUID/genshinuid_user/get_ck_help_msg.py new file mode 100644 index 00000000..4c8eb607 --- /dev/null +++ b/GenshinUID/genshinuid_user/get_ck_help_msg.py @@ -0,0 +1,38 @@ +from typing import List + +from gsuid_core.models import Message + +CK_CONSOLE = '''var cookie = document.cookie; +var Str_Num = cookie.indexOf('_MHYUUID='); +cookie = '添加 ' + cookie.substring(Str_Num); +var ask = confirm('Cookie:' + cookie + '\\n\\n按确认,然后粘贴发送给机器人'); +if (ask == true) { + copy(cookie); + msg = cookie +} else { + msg = 'Cancel' +} +''' + +CK_URL = '''1.复制上面全部代码,然后打开下面的网站 +https://bbs.mihoyo.com/ys/obc/?bbs_presentation_style=no_header(国服) +https://www.hoyolab.com/home(国际服) +2.在页面上右键检查或者Ctrl+Shift+i +3.选择控制台(Console),粘贴,回车,在弹出的窗口点确认(点完自动复制) +4.然后在和机器人的私聊窗口,粘贴发送即可 +''' + +SK_URL = '''如果想获取SK,操作方法和上面一致,网址更换为 +http://user.mihoyo.com/(国服) +登陆后,进入控制台粘贴代码 +然后在和机器人的私聊窗口,粘贴发送即可 +''' + + +async def get_ck_help() -> List[Message]: + msg_list = [] + msg_list.append(Message('text', '请先添加bot为好友')) + msg_list.append(Message('text', CK_CONSOLE)) + msg_list.append(Message('text', CK_URL)) + msg_list.append(Message('text', SK_URL)) + return msg_list diff --git a/GenshinUID/genshinuid_user/pic/all_ok.png b/GenshinUID/genshinuid_user/pic/all_ok.png new file mode 100644 index 00000000..55c09428 Binary files /dev/null and b/GenshinUID/genshinuid_user/pic/all_ok.png differ diff --git a/GenshinUID/genshinuid_user/pic/ck_no.png b/GenshinUID/genshinuid_user/pic/ck_no.png new file mode 100644 index 00000000..efaa5ebf Binary files /dev/null and b/GenshinUID/genshinuid_user/pic/ck_no.png differ diff --git a/GenshinUID/genshinuid_user/pic/ck_ok.png b/GenshinUID/genshinuid_user/pic/ck_ok.png new file mode 100644 index 00000000..7c8a7ec1 Binary files /dev/null and b/GenshinUID/genshinuid_user/pic/ck_ok.png differ diff --git a/GenshinUID/genshinuid_user/qrlogin.py b/GenshinUID/genshinuid_user/qrlogin.py new file mode 100644 index 00000000..eb44f1d3 --- /dev/null +++ b/GenshinUID/genshinuid_user/qrlogin.py @@ -0,0 +1,155 @@ +import io +import json +import base64 +import asyncio +from http.cookies import SimpleCookie +from typing import Any, List, Tuple, Union, Literal + +import qrcode +from gsuid_core.bot import Bot +from gsuid_core.logger import logger +from qrcode.constants import ERROR_CORRECT_L +from gsuid_core.segment import MessageSegment + +from ..utils.mys_api import mys_api +from ..utils.database import active_sqla + +disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。 +本Bot将不会保存您的登录状态。 +我方仅提供米游社查询及相关游戏内容服务 +若您的账号封禁、被盗等处罚与我方无关。 +害怕风险请勿扫码! +''' + + +def get_qrcode_base64(url): + qr = qrcode.QRCode( + version=1, + error_correction=ERROR_CORRECT_L, + box_size=10, + border=4, + ) + qr.add_data(url) + qr.make(fit=True) + img = qr.make_image(fill_color='black', back_color='white') + img_byte = io.BytesIO() + img.save(img_byte, format='PNG') # type: ignore + img_byte = img_byte.getvalue() + return base64.b64encode(img_byte).decode() + + +async def refresh( + code_data: dict, +) -> Union[Tuple[Literal[False], None], Tuple[Literal[True], Any]]: + scanned = False + while True: + await asyncio.sleep(2) + status_data = await mys_api.check_qrcode( + code_data['app_id'], code_data['ticket'], code_data['device'] + ) + if isinstance(status_data, int): + logger.warning('二维码已过期') + return False, None + if status_data['stat'] == 'Scanned': + if not scanned: + logger.info('二维码已扫描') + scanned = True + continue + if status_data['stat'] == 'Confirmed': + logger.info('二维码已确认') + break + return True, json.loads(status_data['payload']['raw']) + + +async def qrcode_login(bot: Bot, user_id: str) -> str: + sqla = active_sqla[bot.bot_id] + + async def send_msg(msg: str): + await bot.send(msg) + return '' + + code_data = await mys_api.create_qrcode_url() + if isinstance(code_data, int): + return await send_msg('链接创建失败...') + try: + im = [] + im.append(MessageSegment.text('请使用米游社扫描下方二维码登录:')) + im.append( + MessageSegment.image( + f'base64://{get_qrcode_base64(code_data["url"])}' + ) + ) + im.append( + MessageSegment.text( + '免责声明:您将通过扫码完成获取米游社sk以及ck。\n' + '本Bot将不会保存您的登录状态。\n' + '我方仅提供米游社查询及相关游戏内容服务,\n' + '若您的账号封禁、被盗等处罚与我方无关。\n' + '害怕风险请勿扫码~' + ) + ) + await bot.send(MessageSegment.node(im)) + except Exception: + logger.warning(f'[扫码登录] {user_id} 图片发送失败') + status, game_token_data = await refresh(code_data) + if status: + assert game_token_data is not None # 骗过 pyright + logger.info('game_token获取成功') + cookie_token = await mys_api.get_cookie_token(**game_token_data) + stoken_data = await mys_api.get_stoken_by_game_token( + account_id=int(game_token_data['uid']), + game_token=game_token_data['token'], + ) + if isinstance(stoken_data, int): + return await send_msg('获取SK失败...') + account_id = game_token_data['uid'] + stoken = stoken_data['token']['token'] + mid = stoken_data['user_info']['mid'] + app_cookie = f'stuid={account_id};stoken={stoken};mid={mid}' + ck = await mys_api.get_cookie_token_by_stoken( + stoken, account_id, app_cookie + ) + if isinstance(ck, int): + return await send_msg('获取CK失败...') + ck = ck['cookie_token'] + cookie_check = f'account_id={account_id};cookie_token={ck}' + get_uid = await mys_api.get_mihoyo_bbs_info(account_id, cookie_check) + # 剔除除了原神之外的其他游戏 + im = None + if isinstance(get_uid, List): + for i in get_uid: + if i['game_id'] == 2: + uid_check = i['game_role_id'] + break + else: + im = f'你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!' + return await send_msg(im) + else: + im = '请求失败, 请稍后再试...' + return await send_msg(im) + + uid_bind = await sqla.get_bind_uid(user_id) + # 没有在gsuid绑定uid的情况 + if uid_bind: + logger.warning('game_token获取失败') + im = '你还没有绑定uid,请输入[绑定uid123456]绑定你的uid,再发送[扫码登录]进行绑定' + return await send_msg(im) + if isinstance(cookie_token, int): + return await send_msg('获取CK失败...') + # 比对gsuid数据库和扫码登陆获取到的uid + if str(uid_bind) == uid_check or str(uid_bind) == account_id: + return SimpleCookie( + { + 'stoken_v2': stoken_data['token']['token'], + 'stuid': stoken_data['user_info']['aid'], + 'mid': stoken_data['user_info']['mid'], + 'cookie_token': cookie_token['cookie_token'], + } + ).output(header='', sep=';') + else: + logger.warning('game_token获取失败') + im = 'game_token获取失败:被非绑定指定uid用户扫取,取消绑定,请重新发送[扫码登录]登录账号' + else: + logger.warning('game_token获取失败') + im = 'game_token获取失败:二维码已过期' + return await send_msg(im) diff --git a/GenshinUID/genshinuid_user/texture2d/status_l_off.png b/GenshinUID/genshinuid_user/texture2d/status_l_off.png new file mode 100644 index 00000000..9dd89742 Binary files /dev/null and b/GenshinUID/genshinuid_user/texture2d/status_l_off.png differ diff --git a/GenshinUID/genshinuid_user/texture2d/status_l_on.png b/GenshinUID/genshinuid_user/texture2d/status_l_on.png new file mode 100644 index 00000000..97b12d03 Binary files /dev/null and b/GenshinUID/genshinuid_user/texture2d/status_l_on.png differ diff --git a/GenshinUID/genshinuid_user/texture2d/status_s_off.png b/GenshinUID/genshinuid_user/texture2d/status_s_off.png new file mode 100644 index 00000000..ee32d1e3 Binary files /dev/null and b/GenshinUID/genshinuid_user/texture2d/status_s_off.png differ diff --git a/GenshinUID/genshinuid_user/texture2d/status_s_on.png b/GenshinUID/genshinuid_user/texture2d/status_s_on.png new file mode 100644 index 00000000..7df20956 Binary files /dev/null and b/GenshinUID/genshinuid_user/texture2d/status_s_on.png differ diff --git a/GenshinUID/genshinuid_user/texture2d/uid_hint.png b/GenshinUID/genshinuid_user/texture2d/uid_hint.png new file mode 100644 index 00000000..400e7c6f Binary files /dev/null and b/GenshinUID/genshinuid_user/texture2d/uid_hint.png differ diff --git a/GenshinUID/genshinuid_user/texture2d/uid_part.png b/GenshinUID/genshinuid_user/texture2d/uid_part.png new file mode 100644 index 00000000..df9484dd Binary files /dev/null and b/GenshinUID/genshinuid_user/texture2d/uid_part.png differ diff --git a/GenshinUID/genshinuid_user/texture2d/uid_title.png b/GenshinUID/genshinuid_user/texture2d/uid_title.png new file mode 100644 index 00000000..1a3840fc Binary files /dev/null and b/GenshinUID/genshinuid_user/texture2d/uid_title.png differ diff --git a/GenshinUID/genshinuid_wikitext/__init__.py b/GenshinUID/genshinuid_wikitext/__init__.py new file mode 100644 index 00000000..51b46091 --- /dev/null +++ b/GenshinUID/genshinuid_wikitext/__init__.py @@ -0,0 +1,92 @@ +import re + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.segment import MessageSegment + +from .get_wiki_text import ( + char_wiki, + foods_wiki, + talent_wiki, + weapon_wiki, + enemies_wiki, + artifacts_wiki, + char_costs_wiki, + char_stats_wiki, + weapon_costs_wiki, + weapon_stats_wiki, + constellation_wiki, +) + + +@SV('原神WIKI文字版').on_prefix(('原魔')) +async def send_enemies(bot: Bot, ev: Event): + await bot.send(await enemies_wiki(ev.text)) + + +@SV('原神WIKI文字版').on_prefix(('食物')) +async def send_food(bot: Bot, ev: Event): + await bot.send(await foods_wiki(ev.text)) + + +@SV('原神WIKI文字版').on_prefix(('圣遗物')) +async def send_artifacts(bot: Bot, ev: Event): + await bot.send(await artifacts_wiki(ev.text)) + + +@SV('原神WIKI文字版').on_prefix(('武器')) +async def send_weapon(bot: Bot, ev: Event): + name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) + level = re.findall(r'\d+', ev.text) + if len(level) == 1: + im = await weapon_stats_wiki(name, level[0]) + else: + im = await weapon_wiki(name) + await bot.send(im) + + +@SV('原神WIKI文字版').on_prefix(('天赋')) +async def send_talents(bot: Bot, ev: Event): + name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) + num = re.findall(r'\d+', ev.text) + if len(num) == 1: + im = await talent_wiki(name, num[0]) + if isinstance(im, list): + return bot.send(MessageSegment.node(im)) + else: + im = '参数不正确。' + await bot.send(im) + + +@SV('原神WIKI文字版').on_prefix(('角色')) +async def send_char(bot: Bot, ev: Event): + name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) + level = re.findall(r'\d+', ev.text) + if len(level) == 1: + im = await char_stats_wiki(name, level[0]) + else: + im = await char_wiki(name) + await bot.send(im) + + +@SV('原神WIKI文字版').on_prefix(('角色材料')) +async def send_char_cost(bot: Bot, ev: Event): + im = await char_costs_wiki(ev.text) + await bot.send(im) + + +@SV('原神WIKI文字版').on_prefix(('武器材料')) +async def send_weapon_cost(bot: Bot, ev: Event): + im = await weapon_costs_wiki(ev.text) + await bot.send(im) + + +@SV('原神WIKI文字版').on_prefix(('命座')) +async def send_polar(bot: Bot, ev: Event): + num = int(re.findall(r'\d+', ev.text)[0]) + m = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text)) + if num <= 0 or num > 6: + return await bot.send('你家{}有{}命?'.format(m, num)) + im = await constellation_wiki(m, num) + await bot.send(im) diff --git a/GenshinUID/genshinuid_wikitext/get_wiki_template.py b/GenshinUID/genshinuid_wikitext/get_wiki_template.py new file mode 100644 index 00000000..3d3a8c64 --- /dev/null +++ b/GenshinUID/genshinuid_wikitext/get_wiki_template.py @@ -0,0 +1,34 @@ +weapon_im = """【名称】:{} +【类型】:{} +【稀有度】:{} +【介绍】:{} +【攻击力】:{}{}{}""" + +char_info_im = """{} +【稀有度】:{} +【武器】:{} +【元素】:{} +【突破加成】:{} +【生日】:{} +【命之座】:{} +【cv】:{} +【介绍】:{}""" + +artifacts_im = """【{}】 +【稀有度】:{} +【2件套】:{} +【4件套】:{} +【{}】:{} +【{}】:{} +【{}】:{} +【{}】:{} +【{}】:{}""" + +food_im = """【{}】 +【稀有度】:{} +【食物类型】:{} +【食物类别】:{} +【效果】:{} +【介绍】:{} +【材料】: +{}""" diff --git a/GenshinUID/genshinuid_wikitext/get_wiki_text.py b/GenshinUID/genshinuid_wikitext/get_wiki_text.py new file mode 100644 index 00000000..d5e8f860 --- /dev/null +++ b/GenshinUID/genshinuid_wikitext/get_wiki_text.py @@ -0,0 +1,393 @@ +import re +import math +from typing import List, Union + +from ..gsuid_utils.api.minigg.models import MiniGGError +from .get_wiki_template import food_im, weapon_im, artifacts_im, char_info_im +from ..gsuid_utils.api.minigg.request import ( + get_others_info, + get_talent_info, + get_weapon_info, + get_weapon_costs, + get_weapon_stats, + get_character_info, + get_character_costs, + get_character_stats, + get_constellation_info, +) + + +async def artifacts_wiki(name: str) -> str: + data = await get_others_info('artifacts', name) + if isinstance(data, MiniGGError): + im = '该圣遗物不存在。' + else: + star = '' + for i in data['rarity']: + star = star + i + '星、' + star = star[:-1] + im = artifacts_im.format( + data['name'], + star, + data['2pc'], + data['4pc'], + data['flower']['name'], + data['flower']['description'], + data['plume']['name'], + data['plume']['description'], + data['sands']['name'], + data['sands']['description'], + data['goblet']['name'], + data['goblet']['description'], + data['circlet']['name'], + data['circlet']['description'], + ) + return im + + +async def foods_wiki(name: str) -> str: + data = await get_others_info('foods', name) + if isinstance(data, MiniGGError): + im = '该食物不存在。' + else: + ingredients = '' + food_temp = {} + for i in data['ingredients']: + if i['name'] not in food_temp: + food_temp[i['name']] = i['count'] + else: + food_temp[i['name']] = food_temp[i['name']] + i['count'] + for i in food_temp: + ingredients += i + ':' + str(food_temp[i]) + '\n' + ingredients = ingredients[:-1] + im = food_im.format( + data['name'], + data['rarity'], + data['foodtype'], + data['foodfilter'], + data['effect'], + data['description'], + ingredients, + ) + return im + + +async def enemies_wiki(name: str) -> str: + data = await get_others_info('enemies', name) + if isinstance(data, MiniGGError): + im = '该食物不存在。' + else: + reward = '' + for i in data['rewardpreview']: + reward += ( + f'{i["name"]}:{i["count"] if "count" in i else "未知"}' + if 'count' in i.keys() + else i['name'] + ': ' + '可能' + ) + reward += '\n' + im = '【{}】\n——{}——\n类型: {}\n信息: {}\n掉落物: \n{}'.format( + data['name'], + data['specialname'], + data['category'], + data['description'], + reward, + ) + return im + + +async def weapon_wiki(name: str) -> str: + data = await get_weapon_info(name) + if isinstance(data, MiniGGError): + im = '该武器不存在。' + elif isinstance(data, List): + im = ', '.join(data) + else: + name = data['name'] + _type = data['weapontype'] + star = data['rarity'] + '星' + info = data['description'] + atk = str(data['baseatk']) + sub_name = data['substat'] + if data['subvalue'] != '': + sub_val = ( + (data['subvalue'] + '%') + if sub_name != '元素精通' + else data['subvalue'] + ) + sub = '\n' + '【' + sub_name + '】' + sub_val + else: + sub = '' + + if data['effectname'] != '': + raw_effect = data['effect'] + rw_ef = [] + for i in range(len(data['r1'])): + now = '' + for j in range(1, 6): + now = now + data['r{}'.format(j)][i] + '/' + now = now[:-1] + rw_ef.append(now) + raw_effect = raw_effect.format(*rw_ef) + effect = '\n' + '【' + data['effectname'] + '】' + ': ' + raw_effect + else: + effect = '' + im = weapon_im.format(name, _type, star, info, atk, sub, effect) + return im + + +async def weapon_stats_wiki(name: str, stats: int): + data = await get_weapon_info(name) + data2 = await get_weapon_stats(name, stats) + if isinstance(data, MiniGGError) or isinstance(data2, MiniGGError): + im = '该武器不存在。' + elif isinstance(data, List) or isinstance(data2, List): + im = '请输入具体的武器名称...' + else: + if data['substat'] != '': + sp = ( + data['substat'] + + ': ' + + '%.1f%%' % (data2['specialized'] * 100) + if data['substat'] != '元素精通' + else data['substat'] + + ': ' + + str(math.floor(data2['specialized'])) + ) + else: + sp = '' + im = ( + data['name'] + + '\n等级: ' + + str(data2['level']) + + '(突破' + + str(data2['ascension']) + + ')' + + '\n攻击力: ' + + str(round(data2['attack'])) + + '\n' + + sp + ) + return im + + +async def weapon_costs_wiki(name: str) -> str: + data = await get_weapon_costs(name) + if isinstance(data, MiniGGError): + im = '不存在该武器或类型。' + elif isinstance(data, List): + im = ', '.join(data) + else: + im = '' + temp = {} + data = data['costs'] + for i in data.values(): + for j in i: # type:ignore + if j['name'] not in temp: + temp[j['name']] = j['count'] + else: + temp[j['name']] = temp[j['name']] + j['count'] + for k in temp: + im += k + ':' + str(temp[k]) + '\n' + return im + + +async def char_wiki(name: str) -> str: + data = await get_character_info(name) + if isinstance(data, MiniGGError): + im = '不存在该角色或类型。' + elif isinstance(data, List): + im = ', '.join(data) + else: + name = data['title'] + ' — ' + data['name'] + star = data['rarity'] + _type = data['weapontype'] + element = data['element'] + up_val = data['substat'] + bdday = data['birthday'] + polar = data['constellation'] + cv = data['cv']['chinese'] + info = data['description'] + im = char_info_im.format( + name, star, _type, element, up_val, bdday, polar, cv, info + ) + return im + + +async def char_stats_wiki(name: str, stats: int): + data2 = await get_character_info(name) + data = await get_character_stats(name, stats) + if isinstance(data, MiniGGError) or isinstance(data2, MiniGGError): + im = '该角色不存在。' + elif isinstance(data, List) or isinstance(data2, List): + im = '请输入具体的角色名称...' + else: + sp = ( + data2['substat'] + ': ' + '%.1f%%' % (data['specialized'] * 100) + if data2['substat'] != '元素精通' + else data2['substat'] + ': ' + str(math.floor(data['specialized'])) + ) + im = ( + data2['name'] + + '\n等级: ' + + str(data['level']) + + '\n血量: ' + + str(math.floor(data['hp'])) + + '\n攻击力: ' + + str(math.floor(data['attack'])) + + '\n防御力: ' + + str(math.floor(data['defense'])) + + '\n' + + sp + ) + return im + + +async def char_costs_wiki(name: str) -> str: + data = await get_character_costs(name) + data2 = await get_talent_info(name) + if isinstance(data, MiniGGError) or isinstance(data2, MiniGGError): + im = '该角色不存在。' + elif isinstance(data, List) or isinstance(data2, List): + im = '请输入具体的角色名称...' + else: + im = '【天赋材料(一份)】\n{}\n【突破材料】\n{}' + im1 = '' + im2 = '' + + talent_temp = {} + talent_cost = data2['costs'] + for i in talent_cost.values(): + for j in i: # type:ignore + if j['name'] not in talent_temp: + talent_temp[j['name']] = j['count'] + else: + talent_temp[j['name']] = ( + talent_temp[j['name']] + j['count'] + ) + for k in talent_temp: + im1 = im1 + k + ':' + str(talent_temp[k]) + '\n' + + temp = {} + for i in range(1, 7): + for j in data['ascend{}'.format(i)]: + if j['name'] not in temp: + temp[j['name']] = j['count'] + else: + temp[j['name']] = temp[j['name']] + j['count'] + + for k in temp: + im2 = im2 + k + ':' + str(temp[k]) + '\n' + + im = im.format(im1, im2) + return im + + +async def constellation_wiki(name: str, c: int) -> str: + data = await get_constellation_info(name) + if isinstance(data, MiniGGError): + im = '该角色不存在。' + else: + im = ( + '【' + + data['c{}'.format(c)]['name'] + + '】' + + ': ' + + '\n' + + data['c{}'.format(c)]['effect'].replace('*', '') + ) + return im + + +async def talent_wiki(name: str, level: int) -> Union[List, str]: + data = await get_talent_info(name) + if isinstance(data, MiniGGError): + im = '该角色不存在。' + else: + if int(level) <= 3: + if level == '1': + data = data['combat1'] + elif level == '2': + data = data['combat2'] + else: + data = data['combat3'] + skill_name = data['name'] + skill_info = data['info'] + skill_detail = '' + + mes_list = [] + parameters = [] + add_switch = True + + labels = ''.join(data['attributes']['labels']) + parameters_label = re.findall( + r'{[a-zA-Z0-9]+:[a-zA-Z0-9]+}', labels + ) + + labels = {} + for i in parameters_label: + value_type = i.replace('{', '').replace('}', '').split(':')[-1] + value_index = i.replace('{', '').replace('}', '').split(':')[0] + labels[value_index] = value_type + + for para in data['attributes']['parameters']: + if para in labels: + label_str = labels[para] + for index, j in enumerate( + data['attributes']['parameters'][para] + ): + if add_switch: + parameters.append({}) + + if label_str == 'F1P': + parameters[index].update( + {para: '%.1f%%' % (j * 100)} + ) + if label_str == 'F2P': + parameters[index].update( + {para: '%.2f%%' % (j * 100)} + ) + elif label_str == 'F1': + parameters[index].update({para: '%.1f' % j}) + elif label_str == 'F2': + parameters[index].update({para: '%.2f' % j}) + elif label_str == 'P': + parameters[index].update( + {para: str(round(j * 100)) + '%'} + ) + elif label_str == 'I': + parameters[index].update({para: '%.2f' % j}) + add_switch = False + + for k in data['attributes']['labels']: + k = re.sub(r':[a-zA-Z0-9]+}', '}', k) + skill_detail += k + '\n' + + skill_detail = skill_detail[:-1].replace('|', ' | ') + + for i in range(1, 10): + if i % 2 != 0: + skill_info = skill_info.replace('**', '「', 1) + else: + skill_info = skill_info.replace('**', '」', 1) + + mes_list.append(f'【{skill_name}】\n{skill_info}') + for index, i in enumerate(parameters): + mes = skill_detail.format(**i) + mes_list.append(f'lv.{index + 1}\n{mes}') + im = mes_list + else: + if level == '4': + data = data['passive1'] + elif level == '5': + data = data['passive2'] + elif level == '6': + data = data['passive3'] + else: + if 'passive4' in data: + data = data['passive4'] + else: + return '该角色未有第四个被动天赋...' + skill_name = data['name'] + skill_info = data['info'] + im = '【{}】\n{}'.format(skill_name, skill_info) + return im diff --git a/GenshinUID/genshinuid_xkdata/__init__.py b/GenshinUID/genshinuid_xkdata/__init__.py new file mode 100644 index 00000000..19095571 --- /dev/null +++ b/GenshinUID/genshinuid_xkdata/__init__.py @@ -0,0 +1,28 @@ +import random +import asyncio +import threading + +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.aps import scheduler + +from ..utils.image.convert import convert_img +from .draw_abyss_total import TOTAL_IMG, draw_xk_abyss_img + + +@scheduler.scheduled_job('interval', hours=3) +async def scheduled_draw_abyss(): + await asyncio.sleep(random.randint(0, 60)) + await draw_xk_abyss_img() + + +@SV('查询深渊数据库').on_fullmatch(('深渊概览', '深渊统计', '深渊使用率')) +async def send_abyss_pic(bot: Bot): + img = await convert_img(TOTAL_IMG) + await bot.logger.info('获得gs帮助图片成功!') + await bot.send(img) + + +threading.Thread( + target=lambda: asyncio.run(draw_xk_abyss_img()), daemon=True +).start() diff --git a/GenshinUID/genshinuid_xkdata/draw_abyss_total.py b/GenshinUID/genshinuid_xkdata/draw_abyss_total.py new file mode 100644 index 00000000..bc5b76b5 --- /dev/null +++ b/GenshinUID/genshinuid_xkdata/draw_abyss_total.py @@ -0,0 +1,123 @@ +from pathlib import Path +from typing import Tuple + +from PIL import Image, ImageDraw + +from ..utils.image.image_tools import get_color_bg +from ..utils.resource.RESOURCE_PATH import CHAR_PATH +from ..gsuid_utils.api.akashadata.request import get_akasha_abyss_info +from ..utils.fonts.genshin_fonts import gs_font_24, gs_font_26, gs_font_30 + +TEXT_PATH = Path(__file__).parent / 'texture2d' +TOTAL_IMG = Path(__file__).parent / 'abyss_total.png' + +black = (10, 10, 10) +grey = (40, 40, 40) + +green = (205, 255, 168) +red = (255, 168, 168) + + +def _c(part: str) -> Tuple[int, int, int]: + if part.startswith('-'): + return red + else: + return green + + +async def draw_xk_abyss_img(): + raw_data = await get_akasha_abyss_info() + last_time: str = raw_data['modify_time'] # 2022-11-23 00:06 + version_desc = raw_data['schedule_version_desc'] # 3.2第一期 + total_view = raw_data['abyss_total_view'] + last_rate = raw_data['last_rate'] + char_use_list = raw_data['character_used_list'] + + # 基本数据 + avgs = total_view['avg_star'] # 人均摘星 + abc = total_view['avg_battle_count'] # 平均战斗 + ambc = total_view['avg_maxstar_battle_count'] # 满星平均战斗 + pr = total_view['pass_rate'] # 通关比例 + mr = total_view['maxstar_rate'] # 满星比例 + m12 = total_view['maxstar_12_rate'] # 12场36星 + + # 倍率数据 + avgs_rate = last_rate['avg_star'] # 人均摘星 + abc_rate = last_rate['avg_battle_count'] # 平均战斗 + amb_rate = last_rate['avg_maxstar_battle_count'] # 满星平均战斗 + pr_rate = last_rate['pass_rate'] # 通关比例 + mr_rate = last_rate['maxstar_rate'] # 满星比例 + mf_rate = last_rate['maxstar_12_rate'] # 12场36星 + + # 拿一些资源 + title = Image.open(TEXT_PATH / 'total_title.png') + + # 计算宽高 + h = 1020 + ((len(char_use_list) + 1) // 7 + 1) * 160 + 20 + + # 开始绘图 + img = await get_color_bg(1080, h) + img.paste(title, (0, 0), title) + + # 基础文字部分 + img_draw = ImageDraw.Draw(img) + img_draw.text((673, 375), f'数据最后更新时间:{last_time}', grey, gs_font_30, 'mm') + img_draw.text((855, 311), f'{version_desc}', black, gs_font_30, 'mm') + + # 概览部分 85*26 + r = 20 + img_draw.rounded_rectangle((428, 556, 513, 582), r, _c(avgs_rate)) # 人均摘星 + img_draw.text((471, 606), avgs, black, gs_font_26, 'mm') + img_draw.text((471, 570), avgs_rate, grey, gs_font_24, 'mm') + img_draw.rounded_rectangle((945, 556, 1030, 582), r, _c(abc_rate)) # 平均战斗 + img_draw.text((988, 606), abc, black, gs_font_26, 'mm') + img_draw.text((988, 570), abc_rate, grey, gs_font_24, 'mm') + img_draw.rounded_rectangle((428, 681, 513, 707), r, _c(amb_rate)) # 满星平均战斗 + img_draw.text((471, 731), ambc, black, gs_font_26, 'mm') + img_draw.text((471, 695), amb_rate, grey, gs_font_24, 'mm') + img_draw.rounded_rectangle((945, 681, 1030, 707), r, _c(pr_rate)) # 通关比例 + img_draw.text((988, 731), f'{pr}%', black, gs_font_26, 'mm') + img_draw.text((988, 695), f'{pr_rate}%', grey, gs_font_24, 'mm') + img_draw.rounded_rectangle((428, 806, 513, 832), r, _c(mr_rate)) # 满星比例 + img_draw.text((471, 856), f'{mr}%', black, gs_font_26, 'mm') + img_draw.text((471, 820), f'{mr_rate}%', grey, gs_font_24, 'mm') + img_draw.rounded_rectangle((945, 806, 1030, 832), r, _c(mf_rate)) # 12场36星 + img_draw.text((988, 856), f'{m12}%', black, gs_font_26, 'mm') + img_draw.text((988, 820), f'{mf_rate}%', grey, gs_font_24, 'mm') + + # 遍历角色列表,获得使用率 + for index, char in enumerate(char_use_list): + had_count: int = char['maxstar_person_had_count'] + use_count: int = char['maxstar_person_use_count'] + if had_count == 0 or use_count == 0: + use_ratio = 0.0 + else: + use_ratio = (use_count / had_count) * 100 + use_ratio = '{:.2f}%'.format(use_ratio) + char_id: int = char['avatar_id'] + + # 绘图部分 + char_bg = Image.open(TEXT_PATH / 'char_bg.png') + charimg = Image.open(CHAR_PATH / f'{char_id}.png').resize((117, 117)) + char_bg.paste(charimg, (6, 2), charimg) + char_bg_draw = ImageDraw.Draw(char_bg) + if char['rarity'] >= 5: + text = (193, 123, 0) + else: + text = (145, 49, 218) + char_bg_draw.text((65, 133), use_ratio, text, gs_font_26, 'mm') + + # 粘贴 + x = index % 7 * 147 + y = index // 7 * 160 + img.paste(char_bg, (35 + x, 1010 + y), char_bg) + + bg = Image.new('RGBA', (1080, h), (255, 255, 255)) + img = Image.alpha_composite(bg, img) + + img.save( + TOTAL_IMG, + format='PNG', + quality=80, + subsampling=0, + ) diff --git a/GenshinUID/genshinuid_xkdata/texture2d/char_bg.png b/GenshinUID/genshinuid_xkdata/texture2d/char_bg.png new file mode 100644 index 00000000..e93c791a Binary files /dev/null and b/GenshinUID/genshinuid_xkdata/texture2d/char_bg.png differ diff --git a/GenshinUID/genshinuid_xkdata/texture2d/total_title.png b/GenshinUID/genshinuid_xkdata/texture2d/total_title.png new file mode 100644 index 00000000..eede409a Binary files /dev/null and b/GenshinUID/genshinuid_xkdata/texture2d/total_title.png differ diff --git a/GenshinUID/gsuid_utils/__init__.py b/GenshinUID/gsuid_utils/__init__.py new file mode 100644 index 00000000..eb42506f --- /dev/null +++ b/GenshinUID/gsuid_utils/__init__.py @@ -0,0 +1,4 @@ +from .version import __version__ as __version__ # noqa +from .version import genshin_impact_version as genshin_impact_version # noqa + +__all__ = ["version"] diff --git a/GenshinUID/gsuid_utils/api/akashadata/__init__.py b/GenshinUID/gsuid_utils/api/akashadata/__init__.py new file mode 100644 index 00000000..c03a6436 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/akashadata/__init__.py @@ -0,0 +1,10 @@ +""" +虚空数据库 API 包装: +深渊出场数据; +""" +from .models import AkashaAbyssData as AkashaAbyssData # noqa: F401 +from .request import ( # noqa: F401 + get_akasha_abyss_info as get_akasha_abyss_info, +) + +__all__ = ["request", "models"] diff --git a/GenshinUID/gsuid_utils/api/akashadata/models.py b/GenshinUID/gsuid_utils/api/akashadata/models.py new file mode 100644 index 00000000..7549c024 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/akashadata/models.py @@ -0,0 +1,88 @@ +from __future__ import annotations + +from typing import TypedDict + + +class TeamListItem(TypedDict): + ac: int + mr: str + uc: str + dc: str + ud: str + umr: str + dmr: str + tl: list[int] + + +class AbyssTotalView(TypedDict): + avg_star: str + avg_battle_count: str + avg_maxstar_battle_count: str + pass_rate: str + maxstar_rate: str + maxstar_12_rate: str + person_war: str + person_pass: int + maxstar_person: int + + +class LastRate(TypedDict): + avg_star: str + pass_rate: str + maxstar_rate: str + avg_battle_count: str + avg_maxstar_battle_count: str + maxstar_12_rate: str + + +class MaxstarPlayerData(TypedDict): + title: str + y_list: list[str] + x_list: list[str] + + +class PassPlayerData(TypedDict): + title: str + y_list: list[str] + x_list: list[str] + + +class PlayerLevelData(TypedDict): + maxstar_player_data: MaxstarPlayerData + pass_player_data: PassPlayerData + + +class PalyerCountLevelData(TypedDict): + player_count_data: list[int] + level_data: list[str] + + +class LevelData(TypedDict): + player_level_data: PlayerLevelData + palyer_count_level_data: PalyerCountLevelData + + +class CharacterUsedListItem(TypedDict): + avatar_id: int + maxstar_person_had_count: int + maxstar_person_use_count: int + value: float + used_index: int + name: str + en_name: str + icon: str + element: str + rarity: int + + +class AkashaAbyssData(TypedDict): + schedule_id: int + modify_time: str + schedule_version_desc: str + team_list: list[TeamListItem] + team_up_list: list[TeamListItem] + team_down_list: list[TeamListItem] + abyss_total_view: AbyssTotalView + last_rate: LastRate + level_data: LevelData + character_used_list: list[CharacterUsedListItem] diff --git a/GenshinUID/gsuid_utils/api/akashadata/request.py b/GenshinUID/gsuid_utils/api/akashadata/request.py new file mode 100644 index 00000000..40cb8f5c --- /dev/null +++ b/GenshinUID/gsuid_utils/api/akashadata/request.py @@ -0,0 +1,29 @@ +''' +虚空数据库 API 请求模块。 +''' +from __future__ import annotations + +import json + +from httpx import AsyncClient + +from ...version import __version__ +from .models import AkashaAbyssData + +AKASHA_ABYSS_URL = ( + 'https://akashadata.feixiaoqiu.com/static/data/abyss_total.js' +) + + +async def get_akasha_abyss_info() -> AkashaAbyssData: + '''请求虚空数据库 API 深渊出场数据 + + Returns: + AkashaAbyssData: 虚空数据库 API 深渊出场数据响应数据 + ''' # noqa: E501 + async with AsyncClient( + headers={'User-Agent': f'gsuid-utils/{__version__}'}, + ) as client: + req = await client.get(url=AKASHA_ABYSS_URL) + raw = req.text.lstrip('var static_abyss_total =') + return json.loads(raw) diff --git a/GenshinUID/gsuid_utils/api/ambr/__init__.py b/GenshinUID/gsuid_utils/api/ambr/__init__.py new file mode 100644 index 00000000..3787ecce --- /dev/null +++ b/GenshinUID/gsuid_utils/api/ambr/__init__.py @@ -0,0 +1,18 @@ +""" +安柏计划 API 包装: +书籍信息; +角色信息; +武器信息; +""" +from .models import AmbrBook as AmbrBook # noqa: F401 +from .models import AmbrWeapon as AmbrWeapon # noqa: F401 +from .models import AmbrCharacter as AmbrCharacter # noqa: F401 +from .models import AmbrBookDetail as AmbrBookDetail # noqa: F401 +from .request import get_story_data as get_story_data # noqa: F401 +from .request import get_all_book_id as get_all_book_id # noqa: F401 +from .request import get_book_volume as get_book_volume # noqa: F401 +from .request import get_ambr_char_data as get_ambr_char_data # noqa: F401 +from .request import get_ambr_event_info as get_ambr_event_info # noqa: F401 +from .request import get_ambr_weapon_data as get_ambr_weapon_data # noqa: F401 + +__all__ = ["request", "models", "utils"] diff --git a/GenshinUID/gsuid_utils/api/ambr/api.py b/GenshinUID/gsuid_utils/api/ambr/api.py new file mode 100644 index 00000000..c22ae42e --- /dev/null +++ b/GenshinUID/gsuid_utils/api/ambr/api.py @@ -0,0 +1,6 @@ +AMBR_EVENT_URL = 'https://api.ambr.top/assets/data/event.json' +AMBR_CHAR_URL = 'https://api.ambr.top/v2/chs/avatar/{}?vh=32F2' +AMBR_WEAPON_URL = 'https://api.ambr.top/v2/CHS/weapon/{}?vh=32F6' +AMBR_BOOK_URL = 'https://api.ambr.top/v2/chs/book?vh=34F5' +AMBR_BOOK_DETAILS_URL = 'https://api.ambr.top/v2/CHS/book/{}?vh=34F5' +AMBR_BOOK_DATA_URL = 'https://api.ambr.top/v2/CHS/readable/Book{}?vh=34F5' diff --git a/GenshinUID/gsuid_utils/api/ambr/models.py b/GenshinUID/gsuid_utils/api/ambr/models.py new file mode 100644 index 00000000..1110fe36 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/ambr/models.py @@ -0,0 +1,165 @@ +from __future__ import annotations + +from typing import Dict, List, Literal, Optional, TypedDict + + +class AmbrLanguageData(TypedDict): + EN: str + RU: str + CHS: str + KR: str + JP: str + + +class AmbrEvent(TypedDict): + id: int + name: AmbrLanguageData + nameFull: AmbrLanguageData + description: AmbrLanguageData + banner: AmbrLanguageData + endAt: str + + +class AmbrFetter(TypedDict): + title: str + detail: str + constellation: str + native: str + cv: AmbrLanguageData + + +class AmbrProp(TypedDict): + propType: str + initValue: float + type: str + + +class AmbrPromote(TypedDict): + promoteLevel: int + costItems: Dict[str, int] + unlockMaxLevel: int + addProps: Dict[str, float] + requiredPlayerLevel: int + coinCost: int + + +class AmbrUpgrade(TypedDict): + prop: List[AmbrProp] + promote: List[AmbrPromote] + + +class AmbrWeaponUpgrade(AmbrUpgrade): + awakenCost: List[int] + + +class AmbrNameCard(TypedDict): + id: int + name: str + description: str + icon: str + + +class AmbrFood(TypedDict): + id: int + name: str + rank: int + effectIcon: str + icon: str + + +class AmbrCharOther(TypedDict): + nameCard: AmbrNameCard + specialFood: AmbrFood + + +class AmbrTalentPromote(TypedDict): + level: int + costItems: Optional[Dict[str, int]] + coinCost: Optional[int] + description: List[str] + params: List[int] + + +class AmbrTalent(TypedDict): + type: int + name: str + description: str + icon: str + promote: Dict[str, AmbrTalentPromote] + cooldown: int + cost: int + + +class AmbrConstellation(TypedDict): + name: str + description: str + icon: str + + +class AmbrCharacter(TypedDict): + id: int + rank: int + name: str + element: Literal[ + 'Electric', 'Ice', 'Wind', 'Grass', 'Water', 'Rock', 'Fire' + ] + weaponType: Literal[ + 'WEAPON_SWORD_ONE_HAND', + 'WEAPON_CATALYST', + 'WEAPON_CLAYMORE', + 'WEAPON_BOW', + 'WEAPON_POLE', + ] + icon: str + birthday: List[int] + release: int + route: str + fetter: AmbrFetter + upgrade: AmbrUpgrade + other: AmbrCharOther + ascension: Dict[str, int] + talent: Dict[str, AmbrTalent] + constellation: Dict[str, AmbrConstellation] + + +class AmbrAffix(TypedDict): + name: str + upgrade: Dict[str, str] + + +class AmbrWeapon(TypedDict): + id: int + rank: int + type: str + name: str + description: str + icon: str + storyId: int + affix: Dict[str, AmbrAffix] + route: str + upgrade: AmbrWeaponUpgrade + ascension: Dict[str, int] + + +class AmbrBook(TypedDict): + id: int + name: str + rank: int + icon: str + route: str + + +class AmbrVolume(TypedDict): + id: int + name: str + description: str + storyId: str + + +class AmbrBookDetail(TypedDict): + id: int + name: str + rank: int + icon: str + volume: List[AmbrVolume] + route: str diff --git a/GenshinUID/gsuid_utils/api/ambr/request.py b/GenshinUID/gsuid_utils/api/ambr/request.py new file mode 100644 index 00000000..35782bb8 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/ambr/request.py @@ -0,0 +1,89 @@ +''' +安柏计划 API 请求模块。 +''' +from __future__ import annotations + +from typing import Dict, Union, Literal, Optional, cast + +from httpx import AsyncClient + +from ..types import AnyDict +from ...version import __version__ +from .models import ( + AmbrBook, + AmbrEvent, + AmbrWeapon, + AmbrCharacter, + AmbrBookDetail, +) +from .api import ( + AMBR_BOOK_URL, + AMBR_CHAR_URL, + AMBR_EVENT_URL, + AMBR_WEAPON_URL, + AMBR_BOOK_DATA_URL, + AMBR_BOOK_DETAILS_URL, +) + +_HEADER = {'User-Agent': f'gsuid-utils/{__version__}'} + + +async def get_ambr_event_info() -> Optional[Dict[str, AmbrEvent]]: + data = await _ambr_request(url=AMBR_EVENT_URL) + if isinstance(data, Dict): + return cast(Dict[str, AmbrEvent], data) + return None + + +async def get_ambr_char_data(id: Union[int, str]) -> Optional[AmbrCharacter]: + data = await _ambr_request(url=AMBR_CHAR_URL.format(id)) + if isinstance(data, Dict) and data['response'] == 200: + data = data['data'] + return cast(AmbrCharacter, data) + return None + + +async def get_ambr_weapon_data(id: Union[int, str]) -> Optional[AmbrWeapon]: + data = await _ambr_request(url=AMBR_WEAPON_URL.format(id)) + if isinstance(data, Dict) and data['response'] == 200: + data = data['data'] + return cast(AmbrWeapon, data) + return None + + +async def get_all_book_id() -> Optional[Dict[str, AmbrBook]]: + data = await _ambr_request(url=AMBR_BOOK_URL) + if isinstance(data, Dict) and data['response'] == 200: + data = data['data']['items'] + return cast(Dict[str, AmbrBook], data) + return None + + +async def get_book_volume(id: Union[int, str]) -> Optional[AmbrBookDetail]: + data = await _ambr_request(url=AMBR_BOOK_DETAILS_URL.format(id)) + if isinstance(data, Dict) and data['response'] == 200: + data = data['data'] + return cast(AmbrBookDetail, data) + return None + + +async def get_story_data(story_id: Union[int, str]) -> Optional[str]: + data = await _ambr_request(url=AMBR_BOOK_DATA_URL.format(story_id)) + if isinstance(data, Dict) and data['response'] == 200: + return data['data'] + return None + + +async def _ambr_request( + url: str, + method: Literal['GET', 'POST'] = 'GET', + header: AnyDict = _HEADER, + params: Optional[AnyDict] = None, + data: Optional[AnyDict] = None, +) -> Optional[AnyDict]: + async with AsyncClient() as client: + req = await client.request( + method, url=url, headers=header, params=params, json=data + ) + data = req.json() + return data diff --git a/GenshinUID/gsuid_utils/api/ambr/utils.py b/GenshinUID/gsuid_utils/api/ambr/utils.py new file mode 100644 index 00000000..f51042e9 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/ambr/utils.py @@ -0,0 +1,4727 @@ +GROW_CURVE_LIST = [ + { + 'level': 1, + 'curveInfos': [ + {'type': 'GROW_CURVE_HP_S4', 'arith': 'ARITH_MULTI', 'value': 1.0}, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.0, + }, + {'type': 'GROW_CURVE_HP_S5', 'arith': 'ARITH_MULTI', 'value': 1.0}, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.0, + }, + ], + }, + { + 'level': 2, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + ], + }, + { + 'level': 3, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.1649999618530273, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.1649999618530273, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.1660000085830688, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.1660000085830688, + }, + ], + }, + { + 'level': 4, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.2480000257492065, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.2480000257492065, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.25, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.25, + }, + ], + }, + { + 'level': 5, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.3300000429153442, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.3300000429153442, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.3329999446868896, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.3329999446868896, + }, + ], + }, + { + 'level': 6, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4129999876022339, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4129999876022339, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.4170000553131104, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.4170000553131104, + }, + ], + }, + { + 'level': 7, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4950000047683716, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4950000047683716, + }, + {'type': 'GROW_CURVE_HP_S5', 'arith': 'ARITH_MULTI', 'value': 1.5}, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.5, + }, + ], + }, + { + 'level': 8, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.5779999494552612, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.5779999494552612, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.5839999914169312, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.5839999914169312, + }, + ], + }, + { + 'level': 9, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.6610000133514404, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.6610000133514404, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.6679999828338623, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.6679999828338623, + }, + ], + }, + { + 'level': 10, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.7430000305175781, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.7430000305175781, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.7510000467300415, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.7510000467300415, + }, + ], + }, + { + 'level': 11, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.8259999752044678, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.8259999752044678, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.8350000381469727, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.8350000381469727, + }, + ], + }, + { + 'level': 12, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9079999923706055, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9079999923706055, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.9190000295639038, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.9190000295639038, + }, + ], + }, + { + 'level': 13, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9910000562667847, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9910000562667847, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.003000020980835, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.003000020980835, + }, + ], + }, + { + 'level': 14, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.072999954223633, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.072999954223633, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.0880000591278076, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.0880000591278076, + }, + ], + }, + { + 'level': 15, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.1559998989105225, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.1559998989105225, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.171999931335449, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.171999931335449, + }, + ], + }, + { + 'level': 16, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.239000082015991, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.239000082015991, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.25600004196167, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.25600004196167, + }, + ], + }, + { + 'level': 17, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.321000099182129, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.321000099182129, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.3410000801086426, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.3410000801086426, + }, + ], + }, + { + 'level': 18, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4040000438690186, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4040000438690186, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.424999952316284, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.424999952316284, + }, + ], + }, + { + 'level': 19, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4860000610351562, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4860000610351562, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.509999990463257, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.509999990463257, + }, + ], + }, + { + 'level': 20, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.569000005722046, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.569000005722046, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.5940001010894775, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.5940001010894775, + }, + ], + }, + { + 'level': 21, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.6510000228881836, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.6510000228881836, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.678999900817871, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.678999900817871, + }, + ], + }, + { + 'level': 22, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.7339999675750732, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.7339999675750732, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.7639999389648438, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.7639999389648438, + }, + ], + }, + { + 'level': 23, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.816999912261963, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.816999912261963, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.8489999771118164, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.8489999771118164, + }, + ], + }, + { + 'level': 24, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.8989999294281006, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.8989999294281006, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.934000015258789, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.934000015258789, + }, + ], + }, + { + 'level': 25, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.9820001125335693, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.9820001125335693, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.0190000534057617, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.0190000534057617, + }, + ], + }, + { + 'level': 26, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.063999891281128, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.063999891281128, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.1050000190734863, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.1050000190734863, + }, + ], + }, + { + 'level': 27, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.1470000743865967, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.1470000743865967, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.190000057220459, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.190000057220459, + }, + ], + }, + { + 'level': 28, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.2290000915527344, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.2290000915527344, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.2750000953674316, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.2750000953674316, + }, + ], + }, + { + 'level': 29, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.312000036239624, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.312000036239624, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.3610000610351562, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.3610000610351562, + }, + ], + }, + { + 'level': 30, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.3940000534057617, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.3940000534057617, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.446000099182129, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.446000099182129, + }, + ], + }, + { + 'level': 31, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.4769999980926514, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.4769999980926514, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.5320000648498535, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.5320000648498535, + }, + ], + }, + { + 'level': 32, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.559999942779541, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.559999942779541, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.618000030517578, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.618000030517578, + }, + ], + }, + { + 'level': 33, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.6419999599456787, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.6419999599456787, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7039999961853027, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7039999961853027, + }, + ], + }, + { + 'level': 34, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.7249999046325684, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.7249999046325684, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7890000343322754, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7890000343322754, + }, + ], + }, + { + 'level': 35, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.806999921798706, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.806999921798706, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.875, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.875, + }, + ], + }, + { + 'level': 36, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.890000104904175, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.890000104904175, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.9619998931884766, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.9619998931884766, + }, + ], + }, + { + 'level': 37, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.9719998836517334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.9719998836517334, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.047999858856201, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.047999858856201, + }, + ], + }, + { + 'level': 38, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.054999828338623, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.054999828338623, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.133999824523926, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.133999824523926, + }, + ], + }, + { + 'level': 39, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.138000011444092, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.138000011444092, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + ], + }, + { + 'level': 40, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.307000160217285, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.307000160217285, + }, + ], + }, + { + 'level': 41, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.302999973297119, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.302999973297119, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.39300012588501, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.39300012588501, + }, + ], + }, + { + 'level': 42, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.385000228881836, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.385000228881836, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.480000019073486, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.480000019073486, + }, + ], + }, + { + 'level': 43, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.4679999351501465, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.4679999351501465, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.566999912261963, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.566999912261963, + }, + ], + }, + { + 'level': 44, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.550000190734863, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.550000190734863, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.6529998779296875, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.6529998779296875, + }, + ], + }, + { + 'level': 45, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.632999897003174, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.632999897003174, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.739999771118164, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.739999771118164, + }, + ], + }, + { + 'level': 46, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.716000080108643, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.716000080108643, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.827000141143799, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.827000141143799, + }, + ], + }, + { + 'level': 47, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.797999858856201, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.797999858856201, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.914000034332275, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.914000034332275, + }, + ], + }, + { + 'level': 48, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.88100004196167, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.88100004196167, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.000999927520752, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.000999927520752, + }, + ], + }, + { + 'level': 49, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.9629998207092285, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.9629998207092285, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.089000225067139, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.089000225067139, + }, + ], + }, + { + 'level': 50, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.046000003814697, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.046000003814697, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.176000118255615, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.176000118255615, + }, + ], + }, + { + 'level': 51, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.127999782562256, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.127999782562256, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.263000011444092, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.263000011444092, + }, + ], + }, + { + 'level': 52, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.210999965667725, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.210999965667725, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.35099983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.35099983215332, + }, + ], + }, + { + 'level': 53, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.294000148773193, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.294000148773193, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.438000202178955, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.438000202178955, + }, + ], + }, + { + 'level': 54, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.375999927520752, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.375999927520752, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.526000022888184, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.526000022888184, + }, + ], + }, + { + 'level': 55, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.459000110626221, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.459000110626221, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.613999843597412, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.613999843597412, + }, + ], + }, + { + 'level': 56, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.540999889373779, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.540999889373779, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.702000141143799, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.702000141143799, + }, + ], + }, + { + 'level': 57, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.624000072479248, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.624000072479248, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.789999961853027, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.789999961853027, + }, + ], + }, + { + 'level': 58, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.705999851226807, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.705999851226807, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.877999782562256, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.877999782562256, + }, + ], + }, + { + 'level': 59, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.789000034332275, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.789000034332275, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.966000080108643, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.966000080108643, + }, + ], + }, + { + 'level': 60, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.872000217437744, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.872000217437744, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.053999900817871, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.053999900817871, + }, + ], + }, + { + 'level': 61, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.953999996185303, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.953999996185303, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.142000198364258, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.142000198364258, + }, + ], + }, + { + 'level': 62, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.0370001792907715, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.0370001792907715, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.230000019073486, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.230000019073486, + }, + ], + }, + { + 'level': 63, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.11899995803833, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.11899995803833, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.318999767303467, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.318999767303467, + }, + ], + }, + { + 'level': 64, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.202000141143799, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.202000141143799, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.4070000648498535, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.4070000648498535, + }, + ], + }, + { + 'level': 65, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.283999919891357, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.283999919891357, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.495999813079834, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.495999813079834, + }, + ], + }, + { + 'level': 66, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.367000102996826, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.367000102996826, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.585000038146973, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.585000038146973, + }, + ], + }, + { + 'level': 67, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.449999809265137, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.449999809265137, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.672999858856201, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.672999858856201, + }, + ], + }, + { + 'level': 68, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.5320000648498535, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.5320000648498535, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.76200008392334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.76200008392334, + }, + ], + }, + { + 'level': 69, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.614999771118164, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.614999771118164, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.85099983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.85099983215332, + }, + ], + }, + { + 'level': 70, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.697000026702881, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.697000026702881, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.940000057220459, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.940000057220459, + }, + ], + }, + { + 'level': 71, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.78000020980835, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.78000020980835, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.0289998054504395, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.0289998054504395, + }, + ], + }, + { + 'level': 72, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.861999988555908, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.861999988555908, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.11899995803833, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.11899995803833, + }, + ], + }, + { + 'level': 73, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.945000171661377, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.945000171661377, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.208000183105469, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.208000183105469, + }, + ], + }, + { + 'level': 74, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.0279998779296875, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.0279998779296875, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.296999931335449, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.296999931335449, + }, + ], + }, + { + 'level': 75, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.110000133514404, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.110000133514404, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.38700008392334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.38700008392334, + }, + ], + }, + { + 'level': 76, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.192999839782715, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.192999839782715, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.47599983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.47599983215332, + }, + ], + }, + { + 'level': 77, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.275000095367432, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.275000095367432, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.565999984741211, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.565999984741211, + }, + ], + }, + { + 'level': 78, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.357999801635742, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.357999801635742, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.656000137329102, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.656000137329102, + }, + ], + }, + { + 'level': 79, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.440000057220459, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.440000057220459, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.745999813079834, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.745999813079834, + }, + ], + }, + { + 'level': 80, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.5229997634887695, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.5229997634887695, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.835999965667725, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.835999965667725, + }, + ], + }, + { + 'level': 81, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.605999946594238, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.605999946594238, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.926000118255615, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.926000118255615, + }, + ], + }, + { + 'level': 82, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.688000202178955, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.688000202178955, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.015999794006348, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.015999794006348, + }, + ], + }, + { + 'level': 83, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.770999908447266, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.770999908447266, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.105999946594238, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.105999946594238, + }, + ], + }, + { + 'level': 84, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.853000164031982, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.853000164031982, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.196000099182129, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.196000099182129, + }, + ], + }, + { + 'level': 85, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.935999870300293, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.935999870300293, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.28600025177002, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.28600025177002, + }, + ], + }, + { + 'level': 86, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.017999649047852, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.017999649047852, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.376999855041504, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.376999855041504, + }, + ], + }, + { + 'level': 87, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.10099983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.10099983215332, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.467000007629395, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.467000007629395, + }, + ], + }, + { + 'level': 88, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.182999610900879, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.182999610900879, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.557999610900879, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.557999610900879, + }, + ], + }, + { + 'level': 89, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.265999794006348, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.265999794006348, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.64900016784668, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.64900016784668, + }, + ], + }, + { + 'level': 90, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.348999977111816, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.348999977111816, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.73900032043457, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.73900032043457, + }, + ], + }, + { + 'level': 91, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.430999755859375, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.430999755859375, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.829999923706055, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.829999923706055, + }, + ], + }, + { + 'level': 92, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.513999938964844, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.513999938964844, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.920999526977539, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.920999526977539, + }, + ], + }, + { + 'level': 93, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.595999717712402, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.595999717712402, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.01200008392334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.01200008392334, + }, + ], + }, + { + 'level': 94, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.678999900817871, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.678999900817871, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.102999687194824, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.102999687194824, + }, + ], + }, + { + 'level': 95, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.76099967956543, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.76099967956543, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.194999694824219, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.194999694824219, + }, + ], + }, + { + 'level': 96, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.843999862670898, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.843999862670898, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.28600025177002, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.28600025177002, + }, + ], + }, + { + 'level': 97, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.927000045776367, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.927000045776367, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.376999855041504, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.376999855041504, + }, + ], + }, + { + 'level': 98, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.008999824523926, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.008999824523926, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.468999862670898, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.468999862670898, + }, + ], + }, + { + 'level': 99, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.092000007629395, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.092000007629395, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.5600004196167, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.5600004196167, + }, + ], + }, + { + 'level': 100, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.173999786376953, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.173999786376953, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.652000427246094, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.652000427246094, + }, + ], + }, +] + +WEAPON_GROW_CURVE = { + '1': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1, + 'GROW_CURVE_ATTACK_102': 1, + 'GROW_CURVE_ATTACK_103': 1, + 'GROW_CURVE_ATTACK_104': 1, + 'GROW_CURVE_ATTACK_105': 1, + 'GROW_CURVE_CRITICAL_101': 1, + 'GROW_CURVE_ATTACK_201': 1, + 'GROW_CURVE_ATTACK_202': 1, + 'GROW_CURVE_ATTACK_203': 1, + 'GROW_CURVE_ATTACK_204': 1, + 'GROW_CURVE_ATTACK_205': 1, + 'GROW_CURVE_CRITICAL_201': 1, + 'GROW_CURVE_ATTACK_301': 1, + 'GROW_CURVE_ATTACK_302': 1, + 'GROW_CURVE_ATTACK_303': 1, + 'GROW_CURVE_ATTACK_304': 1, + 'GROW_CURVE_ATTACK_305': 1, + 'GROW_CURVE_CRITICAL_301': 1, + } + }, + '2': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.076, + 'GROW_CURVE_ATTACK_102': 1.081, + 'GROW_CURVE_ATTACK_103': 1.086, + 'GROW_CURVE_ATTACK_104': 1.071, + 'GROW_CURVE_ATTACK_105': 1.065, + 'GROW_CURVE_CRITICAL_101': 1, + 'GROW_CURVE_ATTACK_201': 1.083, + 'GROW_CURVE_ATTACK_202': 1.088, + 'GROW_CURVE_ATTACK_203': 1.093, + 'GROW_CURVE_ATTACK_204': 1.077, + 'GROW_CURVE_ATTACK_205': 1.071, + 'GROW_CURVE_CRITICAL_201': 1, + 'GROW_CURVE_ATTACK_301': 1.086, + 'GROW_CURVE_ATTACK_302': 1.091, + 'GROW_CURVE_ATTACK_303': 1.097, + 'GROW_CURVE_ATTACK_304': 1.079, + 'GROW_CURVE_ATTACK_305': 1.073, + 'GROW_CURVE_CRITICAL_301': 1, + } + }, + '3': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.152, + 'GROW_CURVE_ATTACK_102': 1.162, + 'GROW_CURVE_ATTACK_103': 1.172, + 'GROW_CURVE_ATTACK_104': 1.141, + 'GROW_CURVE_ATTACK_105': 1.129, + 'GROW_CURVE_CRITICAL_101': 1, + 'GROW_CURVE_ATTACK_201': 1.165, + 'GROW_CURVE_ATTACK_202': 1.176, + 'GROW_CURVE_ATTACK_203': 1.186, + 'GROW_CURVE_ATTACK_204': 1.154, + 'GROW_CURVE_ATTACK_205': 1.141, + 'GROW_CURVE_CRITICAL_201': 1, + 'GROW_CURVE_ATTACK_301': 1.171, + 'GROW_CURVE_ATTACK_302': 1.183, + 'GROW_CURVE_ATTACK_303': 1.194, + 'GROW_CURVE_ATTACK_304': 1.159, + 'GROW_CURVE_ATTACK_305': 1.145, + 'GROW_CURVE_CRITICAL_301': 1, + } + }, + '4': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.228, + 'GROW_CURVE_ATTACK_102': 1.244, + 'GROW_CURVE_ATTACK_103': 1.259, + 'GROW_CURVE_ATTACK_104': 1.211, + 'GROW_CURVE_ATTACK_105': 1.193, + 'GROW_CURVE_CRITICAL_101': 1, + 'GROW_CURVE_ATTACK_201': 1.248, + 'GROW_CURVE_ATTACK_202': 1.264, + 'GROW_CURVE_ATTACK_203': 1.28, + 'GROW_CURVE_ATTACK_204': 1.23, + 'GROW_CURVE_ATTACK_205': 1.211, + 'GROW_CURVE_CRITICAL_201': 1, + 'GROW_CURVE_ATTACK_301': 1.257, + 'GROW_CURVE_ATTACK_302': 1.275, + 'GROW_CURVE_ATTACK_303': 1.292, + 'GROW_CURVE_ATTACK_304': 1.238, + 'GROW_CURVE_ATTACK_305': 1.217, + 'GROW_CURVE_CRITICAL_301': 1, + } + }, + '5': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.303, + 'GROW_CURVE_ATTACK_102': 1.325, + 'GROW_CURVE_ATTACK_103': 1.346, + 'GROW_CURVE_ATTACK_104': 1.28, + 'GROW_CURVE_ATTACK_105': 1.255, + 'GROW_CURVE_CRITICAL_101': 1.162, + 'GROW_CURVE_ATTACK_201': 1.33, + 'GROW_CURVE_ATTACK_202': 1.353, + 'GROW_CURVE_ATTACK_203': 1.374, + 'GROW_CURVE_ATTACK_204': 1.306, + 'GROW_CURVE_ATTACK_205': 1.28, + 'GROW_CURVE_CRITICAL_201': 1.162, + 'GROW_CURVE_ATTACK_301': 1.343, + 'GROW_CURVE_ATTACK_302': 1.368, + 'GROW_CURVE_ATTACK_303': 1.391, + 'GROW_CURVE_ATTACK_304': 1.317, + 'GROW_CURVE_ATTACK_305': 1.288, + 'GROW_CURVE_CRITICAL_301': 1.162, + } + }, + '6': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.379, + 'GROW_CURVE_ATTACK_102': 1.407, + 'GROW_CURVE_ATTACK_103': 1.433, + 'GROW_CURVE_ATTACK_104': 1.349, + 'GROW_CURVE_ATTACK_105': 1.317, + 'GROW_CURVE_CRITICAL_101': 1.162, + 'GROW_CURVE_ATTACK_201': 1.413, + 'GROW_CURVE_ATTACK_202': 1.442, + 'GROW_CURVE_ATTACK_203': 1.469, + 'GROW_CURVE_ATTACK_204': 1.382, + 'GROW_CURVE_ATTACK_205': 1.349, + 'GROW_CURVE_CRITICAL_201': 1.162, + 'GROW_CURVE_ATTACK_301': 1.429, + 'GROW_CURVE_ATTACK_302': 1.461, + 'GROW_CURVE_ATTACK_303': 1.49, + 'GROW_CURVE_ATTACK_304': 1.395, + 'GROW_CURVE_ATTACK_305': 1.359, + 'GROW_CURVE_CRITICAL_301': 1.162, + } + }, + '7': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.454, + 'GROW_CURVE_ATTACK_102': 1.489, + 'GROW_CURVE_ATTACK_103': 1.521, + 'GROW_CURVE_ATTACK_104': 1.417, + 'GROW_CURVE_ATTACK_105': 1.379, + 'GROW_CURVE_CRITICAL_101': 1.162, + 'GROW_CURVE_ATTACK_201': 1.495, + 'GROW_CURVE_ATTACK_202': 1.531, + 'GROW_CURVE_ATTACK_203': 1.565, + 'GROW_CURVE_ATTACK_204': 1.457, + 'GROW_CURVE_ATTACK_205': 1.417, + 'GROW_CURVE_CRITICAL_201': 1.162, + 'GROW_CURVE_ATTACK_301': 1.516, + 'GROW_CURVE_ATTACK_302': 1.554, + 'GROW_CURVE_ATTACK_303': 1.591, + 'GROW_CURVE_ATTACK_304': 1.474, + 'GROW_CURVE_ATTACK_305': 1.429, + 'GROW_CURVE_CRITICAL_301': 1.162, + } + }, + '8': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.529, + 'GROW_CURVE_ATTACK_102': 1.57, + 'GROW_CURVE_ATTACK_103': 1.609, + 'GROW_CURVE_ATTACK_104': 1.486, + 'GROW_CURVE_ATTACK_105': 1.439, + 'GROW_CURVE_CRITICAL_101': 1.162, + 'GROW_CURVE_ATTACK_201': 1.578, + 'GROW_CURVE_ATTACK_202': 1.621, + 'GROW_CURVE_ATTACK_203': 1.661, + 'GROW_CURVE_ATTACK_204': 1.533, + 'GROW_CURVE_ATTACK_205': 1.484, + 'GROW_CURVE_CRITICAL_201': 1.162, + 'GROW_CURVE_ATTACK_301': 1.602, + 'GROW_CURVE_ATTACK_302': 1.648, + 'GROW_CURVE_ATTACK_303': 1.692, + 'GROW_CURVE_ATTACK_304': 1.552, + 'GROW_CURVE_ATTACK_305': 1.499, + 'GROW_CURVE_CRITICAL_301': 1.162, + } + }, + '9': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.604, + 'GROW_CURVE_ATTACK_102': 1.652, + 'GROW_CURVE_ATTACK_103': 1.698, + 'GROW_CURVE_ATTACK_104': 1.553, + 'GROW_CURVE_ATTACK_105': 1.499, + 'GROW_CURVE_CRITICAL_101': 1.162, + 'GROW_CURVE_ATTACK_201': 1.661, + 'GROW_CURVE_ATTACK_202': 1.71, + 'GROW_CURVE_ATTACK_203': 1.757, + 'GROW_CURVE_ATTACK_204': 1.607, + 'GROW_CURVE_ATTACK_205': 1.551, + 'GROW_CURVE_CRITICAL_201': 1.162, + 'GROW_CURVE_ATTACK_301': 1.689, + 'GROW_CURVE_ATTACK_302': 1.743, + 'GROW_CURVE_ATTACK_303': 1.793, + 'GROW_CURVE_ATTACK_304': 1.631, + 'GROW_CURVE_ATTACK_305': 1.568, + 'GROW_CURVE_CRITICAL_301': 1.162, + } + }, + '10': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.679, + 'GROW_CURVE_ATTACK_102': 1.734, + 'GROW_CURVE_ATTACK_103': 1.786, + 'GROW_CURVE_ATTACK_104': 1.621, + 'GROW_CURVE_ATTACK_105': 1.558, + 'GROW_CURVE_CRITICAL_101': 1.363, + 'GROW_CURVE_ATTACK_201': 1.743, + 'GROW_CURVE_ATTACK_202': 1.8, + 'GROW_CURVE_ATTACK_203': 1.854, + 'GROW_CURVE_ATTACK_204': 1.682, + 'GROW_CURVE_ATTACK_205': 1.617, + 'GROW_CURVE_CRITICAL_201': 1.363, + 'GROW_CURVE_ATTACK_301': 1.775, + 'GROW_CURVE_ATTACK_302': 1.837, + 'GROW_CURVE_ATTACK_303': 1.895, + 'GROW_CURVE_ATTACK_304': 1.709, + 'GROW_CURVE_ATTACK_305': 1.637, + 'GROW_CURVE_CRITICAL_301': 1.363, + } + }, + '11': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.754, + 'GROW_CURVE_ATTACK_102': 1.816, + 'GROW_CURVE_ATTACK_103': 1.875, + 'GROW_CURVE_ATTACK_104': 1.688, + 'GROW_CURVE_ATTACK_105': 1.617, + 'GROW_CURVE_CRITICAL_101': 1.363, + 'GROW_CURVE_ATTACK_201': 1.826, + 'GROW_CURVE_ATTACK_202': 1.891, + 'GROW_CURVE_ATTACK_203': 1.952, + 'GROW_CURVE_ATTACK_204': 1.757, + 'GROW_CURVE_ATTACK_205': 1.683, + 'GROW_CURVE_CRITICAL_201': 1.363, + 'GROW_CURVE_ATTACK_301': 1.862, + 'GROW_CURVE_ATTACK_302': 1.933, + 'GROW_CURVE_ATTACK_303': 1.998, + 'GROW_CURVE_ATTACK_304': 1.787, + 'GROW_CURVE_ATTACK_305': 1.706, + 'GROW_CURVE_CRITICAL_301': 1.363, + } + }, + '12': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.828, + 'GROW_CURVE_ATTACK_102': 1.898, + 'GROW_CURVE_ATTACK_103': 1.965, + 'GROW_CURVE_ATTACK_104': 1.754, + 'GROW_CURVE_ATTACK_105': 1.675, + 'GROW_CURVE_CRITICAL_101': 1.363, + 'GROW_CURVE_ATTACK_201': 1.908, + 'GROW_CURVE_ATTACK_202': 1.981, + 'GROW_CURVE_ATTACK_203': 2.049, + 'GROW_CURVE_ATTACK_204': 1.831, + 'GROW_CURVE_ATTACK_205': 1.748, + 'GROW_CURVE_CRITICAL_201': 1.363, + 'GROW_CURVE_ATTACK_301': 1.949, + 'GROW_CURVE_ATTACK_302': 2.028, + 'GROW_CURVE_ATTACK_303': 2.102, + 'GROW_CURVE_ATTACK_304': 1.865, + 'GROW_CURVE_ATTACK_305': 1.774, + 'GROW_CURVE_CRITICAL_301': 1.363, + } + }, + '13': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.903, + 'GROW_CURVE_ATTACK_102': 1.981, + 'GROW_CURVE_ATTACK_103': 2.054, + 'GROW_CURVE_ATTACK_104': 1.82, + 'GROW_CURVE_ATTACK_105': 1.733, + 'GROW_CURVE_CRITICAL_101': 1.363, + 'GROW_CURVE_ATTACK_201': 1.991, + 'GROW_CURVE_ATTACK_202': 2.072, + 'GROW_CURVE_ATTACK_203': 2.147, + 'GROW_CURVE_ATTACK_204': 1.905, + 'GROW_CURVE_ATTACK_205': 1.813, + 'GROW_CURVE_CRITICAL_201': 1.363, + 'GROW_CURVE_ATTACK_301': 2.036, + 'GROW_CURVE_ATTACK_302': 2.124, + 'GROW_CURVE_ATTACK_303': 2.206, + 'GROW_CURVE_ATTACK_304': 1.942, + 'GROW_CURVE_ATTACK_305': 1.841, + 'GROW_CURVE_CRITICAL_301': 1.363, + } + }, + '14': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 1.977, + 'GROW_CURVE_ATTACK_102': 2.063, + 'GROW_CURVE_ATTACK_103': 2.144, + 'GROW_CURVE_ATTACK_104': 1.886, + 'GROW_CURVE_ATTACK_105': 1.79, + 'GROW_CURVE_CRITICAL_101': 1.363, + 'GROW_CURVE_ATTACK_201': 2.073, + 'GROW_CURVE_ATTACK_202': 2.162, + 'GROW_CURVE_ATTACK_203': 2.246, + 'GROW_CURVE_ATTACK_204': 1.979, + 'GROW_CURVE_ATTACK_205': 1.878, + 'GROW_CURVE_CRITICAL_201': 1.363, + 'GROW_CURVE_ATTACK_301': 2.124, + 'GROW_CURVE_ATTACK_302': 2.22, + 'GROW_CURVE_ATTACK_303': 2.31, + 'GROW_CURVE_ATTACK_304': 2.02, + 'GROW_CURVE_ATTACK_305': 1.909, + 'GROW_CURVE_CRITICAL_301': 1.363, + } + }, + '15': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.051, + 'GROW_CURVE_ATTACK_102': 2.145, + 'GROW_CURVE_ATTACK_103': 2.234, + 'GROW_CURVE_ATTACK_104': 1.952, + 'GROW_CURVE_ATTACK_105': 1.846, + 'GROW_CURVE_CRITICAL_101': 1.565, + 'GROW_CURVE_ATTACK_201': 2.156, + 'GROW_CURVE_ATTACK_202': 2.253, + 'GROW_CURVE_ATTACK_203': 2.345, + 'GROW_CURVE_ATTACK_204': 2.052, + 'GROW_CURVE_ATTACK_205': 1.942, + 'GROW_CURVE_CRITICAL_201': 1.565, + 'GROW_CURVE_ATTACK_301': 2.211, + 'GROW_CURVE_ATTACK_302': 2.317, + 'GROW_CURVE_ATTACK_303': 2.415, + 'GROW_CURVE_ATTACK_304': 2.098, + 'GROW_CURVE_ATTACK_305': 1.976, + 'GROW_CURVE_CRITICAL_301': 1.565, + } + }, + '16': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.125, + 'GROW_CURVE_ATTACK_102': 2.227, + 'GROW_CURVE_ATTACK_103': 2.324, + 'GROW_CURVE_ATTACK_104': 2.017, + 'GROW_CURVE_ATTACK_105': 1.902, + 'GROW_CURVE_CRITICAL_101': 1.565, + 'GROW_CURVE_ATTACK_201': 2.239, + 'GROW_CURVE_ATTACK_202': 2.345, + 'GROW_CURVE_ATTACK_203': 2.444, + 'GROW_CURVE_ATTACK_204': 2.126, + 'GROW_CURVE_ATTACK_205': 2.005, + 'GROW_CURVE_CRITICAL_201': 1.565, + 'GROW_CURVE_ATTACK_301': 2.299, + 'GROW_CURVE_ATTACK_302': 2.414, + 'GROW_CURVE_ATTACK_303': 2.521, + 'GROW_CURVE_ATTACK_304': 2.175, + 'GROW_CURVE_ATTACK_305': 2.043, + 'GROW_CURVE_CRITICAL_301': 1.565, + } + }, + '17': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.199, + 'GROW_CURVE_ATTACK_102': 2.31, + 'GROW_CURVE_ATTACK_103': 2.414, + 'GROW_CURVE_ATTACK_104': 2.082, + 'GROW_CURVE_ATTACK_105': 1.958, + 'GROW_CURVE_CRITICAL_101': 1.565, + 'GROW_CURVE_ATTACK_201': 2.321, + 'GROW_CURVE_ATTACK_202': 2.436, + 'GROW_CURVE_ATTACK_203': 2.544, + 'GROW_CURVE_ATTACK_204': 2.199, + 'GROW_CURVE_ATTACK_205': 2.068, + 'GROW_CURVE_CRITICAL_201': 1.565, + 'GROW_CURVE_ATTACK_301': 2.386, + 'GROW_CURVE_ATTACK_302': 2.511, + 'GROW_CURVE_ATTACK_303': 2.627, + 'GROW_CURVE_ATTACK_304': 2.253, + 'GROW_CURVE_ATTACK_305': 2.109, + 'GROW_CURVE_CRITICAL_301': 1.565, + } + }, + '18': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.273, + 'GROW_CURVE_ATTACK_102': 2.392, + 'GROW_CURVE_ATTACK_103': 2.505, + 'GROW_CURVE_ATTACK_104': 2.147, + 'GROW_CURVE_ATTACK_105': 2.013, + 'GROW_CURVE_CRITICAL_101': 1.565, + 'GROW_CURVE_ATTACK_201': 2.404, + 'GROW_CURVE_ATTACK_202': 2.527, + 'GROW_CURVE_ATTACK_203': 2.644, + 'GROW_CURVE_ATTACK_204': 2.272, + 'GROW_CURVE_ATTACK_205': 2.131, + 'GROW_CURVE_CRITICAL_201': 1.565, + 'GROW_CURVE_ATTACK_301': 2.474, + 'GROW_CURVE_ATTACK_302': 2.608, + 'GROW_CURVE_ATTACK_303': 2.734, + 'GROW_CURVE_ATTACK_304': 2.33, + 'GROW_CURVE_ATTACK_305': 2.175, + 'GROW_CURVE_CRITICAL_301': 1.565, + } + }, + '19': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.347, + 'GROW_CURVE_ATTACK_102': 2.474, + 'GROW_CURVE_ATTACK_103': 2.595, + 'GROW_CURVE_ATTACK_104': 2.211, + 'GROW_CURVE_ATTACK_105': 2.067, + 'GROW_CURVE_CRITICAL_101': 1.565, + 'GROW_CURVE_ATTACK_201': 2.486, + 'GROW_CURVE_ATTACK_202': 2.619, + 'GROW_CURVE_ATTACK_203': 2.744, + 'GROW_CURVE_ATTACK_204': 2.345, + 'GROW_CURVE_ATTACK_205': 2.194, + 'GROW_CURVE_CRITICAL_201': 1.565, + 'GROW_CURVE_ATTACK_301': 2.562, + 'GROW_CURVE_ATTACK_302': 2.706, + 'GROW_CURVE_ATTACK_303': 2.841, + 'GROW_CURVE_ATTACK_304': 2.408, + 'GROW_CURVE_ATTACK_305': 2.241, + 'GROW_CURVE_CRITICAL_301': 1.565, + } + }, + '20': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.42, + 'GROW_CURVE_ATTACK_102': 2.557, + 'GROW_CURVE_ATTACK_103': 2.686, + 'GROW_CURVE_ATTACK_104': 2.275, + 'GROW_CURVE_ATTACK_105': 2.121, + 'GROW_CURVE_CRITICAL_101': 1.767, + 'GROW_CURVE_ATTACK_201': 2.569, + 'GROW_CURVE_ATTACK_202': 2.711, + 'GROW_CURVE_ATTACK_203': 2.845, + 'GROW_CURVE_ATTACK_204': 2.417, + 'GROW_CURVE_ATTACK_205': 2.256, + 'GROW_CURVE_CRITICAL_201': 1.767, + 'GROW_CURVE_ATTACK_301': 2.65, + 'GROW_CURVE_ATTACK_302': 2.804, + 'GROW_CURVE_ATTACK_303': 2.949, + 'GROW_CURVE_ATTACK_304': 2.485, + 'GROW_CURVE_ATTACK_305': 2.307, + 'GROW_CURVE_CRITICAL_301': 1.767, + } + }, + '21': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.493, + 'GROW_CURVE_ATTACK_102': 2.639, + 'GROW_CURVE_ATTACK_103': 2.777, + 'GROW_CURVE_ATTACK_104': 2.339, + 'GROW_CURVE_ATTACK_105': 2.175, + 'GROW_CURVE_CRITICAL_101': 1.767, + 'GROW_CURVE_ATTACK_201': 2.651, + 'GROW_CURVE_ATTACK_202': 2.803, + 'GROW_CURVE_ATTACK_203': 2.946, + 'GROW_CURVE_ATTACK_204': 2.49, + 'GROW_CURVE_ATTACK_205': 2.318, + 'GROW_CURVE_CRITICAL_201': 1.767, + 'GROW_CURVE_ATTACK_301': 2.738, + 'GROW_CURVE_ATTACK_302': 2.903, + 'GROW_CURVE_ATTACK_303': 3.057, + 'GROW_CURVE_ATTACK_304': 2.562, + 'GROW_CURVE_ATTACK_305': 2.373, + 'GROW_CURVE_CRITICAL_301': 1.767, + } + }, + '22': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.567, + 'GROW_CURVE_ATTACK_102': 2.722, + 'GROW_CURVE_ATTACK_103': 2.868, + 'GROW_CURVE_ATTACK_104': 2.402, + 'GROW_CURVE_ATTACK_105': 2.228, + 'GROW_CURVE_CRITICAL_101': 1.767, + 'GROW_CURVE_ATTACK_201': 2.734, + 'GROW_CURVE_ATTACK_202': 2.895, + 'GROW_CURVE_ATTACK_203': 3.047, + 'GROW_CURVE_ATTACK_204': 2.562, + 'GROW_CURVE_ATTACK_205': 2.379, + 'GROW_CURVE_CRITICAL_201': 1.767, + 'GROW_CURVE_ATTACK_301': 2.827, + 'GROW_CURVE_ATTACK_302': 3.002, + 'GROW_CURVE_ATTACK_303': 3.165, + 'GROW_CURVE_ATTACK_304': 2.639, + 'GROW_CURVE_ATTACK_305': 2.438, + 'GROW_CURVE_CRITICAL_301': 1.767, + } + }, + '23': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.64, + 'GROW_CURVE_ATTACK_102': 2.804, + 'GROW_CURVE_ATTACK_103': 2.96, + 'GROW_CURVE_ATTACK_104': 2.466, + 'GROW_CURVE_ATTACK_105': 2.28, + 'GROW_CURVE_CRITICAL_101': 1.767, + 'GROW_CURVE_ATTACK_201': 2.817, + 'GROW_CURVE_ATTACK_202': 2.987, + 'GROW_CURVE_ATTACK_203': 3.148, + 'GROW_CURVE_ATTACK_204': 2.634, + 'GROW_CURVE_ATTACK_205': 2.44, + 'GROW_CURVE_CRITICAL_201': 1.767, + 'GROW_CURVE_ATTACK_301': 2.915, + 'GROW_CURVE_ATTACK_302': 3.101, + 'GROW_CURVE_ATTACK_303': 3.274, + 'GROW_CURVE_ATTACK_304': 2.717, + 'GROW_CURVE_ATTACK_305': 2.503, + 'GROW_CURVE_CRITICAL_301': 1.767, + } + }, + '24': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.713, + 'GROW_CURVE_ATTACK_102': 2.887, + 'GROW_CURVE_ATTACK_103': 3.051, + 'GROW_CURVE_ATTACK_104': 2.529, + 'GROW_CURVE_ATTACK_105': 2.333, + 'GROW_CURVE_CRITICAL_101': 1.767, + 'GROW_CURVE_ATTACK_201': 2.899, + 'GROW_CURVE_ATTACK_202': 3.08, + 'GROW_CURVE_ATTACK_203': 3.25, + 'GROW_CURVE_ATTACK_204': 2.707, + 'GROW_CURVE_ATTACK_205': 2.501, + 'GROW_CURVE_CRITICAL_201': 1.767, + 'GROW_CURVE_ATTACK_301': 3.004, + 'GROW_CURVE_ATTACK_302': 3.2, + 'GROW_CURVE_ATTACK_303': 3.384, + 'GROW_CURVE_ATTACK_304': 2.794, + 'GROW_CURVE_ATTACK_305': 2.568, + 'GROW_CURVE_CRITICAL_301': 1.767, + } + }, + '25': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.786, + 'GROW_CURVE_ATTACK_102': 2.969, + 'GROW_CURVE_ATTACK_103': 3.143, + 'GROW_CURVE_ATTACK_104': 2.591, + 'GROW_CURVE_ATTACK_105': 2.385, + 'GROW_CURVE_CRITICAL_101': 1.969, + 'GROW_CURVE_ATTACK_201': 2.982, + 'GROW_CURVE_ATTACK_202': 3.172, + 'GROW_CURVE_ATTACK_203': 3.352, + 'GROW_CURVE_ATTACK_204': 2.778, + 'GROW_CURVE_ATTACK_205': 2.562, + 'GROW_CURVE_CRITICAL_201': 1.969, + 'GROW_CURVE_ATTACK_301': 3.093, + 'GROW_CURVE_ATTACK_302': 3.3, + 'GROW_CURVE_ATTACK_303': 3.493, + 'GROW_CURVE_ATTACK_304': 2.871, + 'GROW_CURVE_ATTACK_305': 2.633, + 'GROW_CURVE_CRITICAL_301': 1.969, + } + }, + '26': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.859, + 'GROW_CURVE_ATTACK_102': 3.052, + 'GROW_CURVE_ATTACK_103': 3.234, + 'GROW_CURVE_ATTACK_104': 2.654, + 'GROW_CURVE_ATTACK_105': 2.436, + 'GROW_CURVE_CRITICAL_101': 1.969, + 'GROW_CURVE_ATTACK_201': 3.064, + 'GROW_CURVE_ATTACK_202': 3.265, + 'GROW_CURVE_ATTACK_203': 3.454, + 'GROW_CURVE_ATTACK_204': 2.85, + 'GROW_CURVE_ATTACK_205': 2.622, + 'GROW_CURVE_CRITICAL_201': 1.969, + 'GROW_CURVE_ATTACK_301': 3.182, + 'GROW_CURVE_ATTACK_302': 3.4, + 'GROW_CURVE_ATTACK_303': 3.604, + 'GROW_CURVE_ATTACK_304': 2.948, + 'GROW_CURVE_ATTACK_305': 2.697, + 'GROW_CURVE_CRITICAL_301': 1.969, + } + }, + '27': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 2.931, + 'GROW_CURVE_ATTACK_102': 3.134, + 'GROW_CURVE_ATTACK_103': 3.326, + 'GROW_CURVE_ATTACK_104': 2.716, + 'GROW_CURVE_ATTACK_105': 2.487, + 'GROW_CURVE_CRITICAL_101': 1.969, + 'GROW_CURVE_ATTACK_201': 3.147, + 'GROW_CURVE_ATTACK_202': 3.358, + 'GROW_CURVE_ATTACK_203': 3.557, + 'GROW_CURVE_ATTACK_204': 2.922, + 'GROW_CURVE_ATTACK_205': 2.682, + 'GROW_CURVE_CRITICAL_201': 1.969, + 'GROW_CURVE_ATTACK_301': 3.271, + 'GROW_CURVE_ATTACK_302': 3.5, + 'GROW_CURVE_ATTACK_303': 3.714, + 'GROW_CURVE_ATTACK_304': 3.026, + 'GROW_CURVE_ATTACK_305': 2.762, + 'GROW_CURVE_CRITICAL_301': 1.969, + } + }, + '28': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.004, + 'GROW_CURVE_ATTACK_102': 3.217, + 'GROW_CURVE_ATTACK_103': 3.418, + 'GROW_CURVE_ATTACK_104': 2.778, + 'GROW_CURVE_ATTACK_105': 2.538, + 'GROW_CURVE_CRITICAL_101': 1.969, + 'GROW_CURVE_ATTACK_201': 3.229, + 'GROW_CURVE_ATTACK_202': 3.451, + 'GROW_CURVE_ATTACK_203': 3.66, + 'GROW_CURVE_ATTACK_204': 2.993, + 'GROW_CURVE_ATTACK_205': 2.741, + 'GROW_CURVE_CRITICAL_201': 1.969, + 'GROW_CURVE_ATTACK_301': 3.36, + 'GROW_CURVE_ATTACK_302': 3.601, + 'GROW_CURVE_ATTACK_303': 3.825, + 'GROW_CURVE_ATTACK_304': 3.103, + 'GROW_CURVE_ATTACK_305': 2.826, + 'GROW_CURVE_CRITICAL_301': 1.969, + } + }, + '29': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.076, + 'GROW_CURVE_ATTACK_102': 3.299, + 'GROW_CURVE_ATTACK_103': 3.51, + 'GROW_CURVE_ATTACK_104': 2.84, + 'GROW_CURVE_ATTACK_105': 2.588, + 'GROW_CURVE_CRITICAL_101': 1.969, + 'GROW_CURVE_ATTACK_201': 3.312, + 'GROW_CURVE_ATTACK_202': 3.544, + 'GROW_CURVE_ATTACK_203': 3.762, + 'GROW_CURVE_ATTACK_204': 3.065, + 'GROW_CURVE_ATTACK_205': 2.801, + 'GROW_CURVE_CRITICAL_201': 1.969, + 'GROW_CURVE_ATTACK_301': 3.45, + 'GROW_CURVE_ATTACK_302': 3.701, + 'GROW_CURVE_ATTACK_303': 3.937, + 'GROW_CURVE_ATTACK_304': 3.18, + 'GROW_CURVE_ATTACK_305': 2.89, + 'GROW_CURVE_CRITICAL_301': 1.969, + } + }, + '30': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.148, + 'GROW_CURVE_ATTACK_102': 3.382, + 'GROW_CURVE_ATTACK_103': 3.602, + 'GROW_CURVE_ATTACK_104': 2.901, + 'GROW_CURVE_ATTACK_105': 2.638, + 'GROW_CURVE_CRITICAL_101': 2.171, + 'GROW_CURVE_ATTACK_201': 3.394, + 'GROW_CURVE_ATTACK_202': 3.637, + 'GROW_CURVE_ATTACK_203': 3.866, + 'GROW_CURVE_ATTACK_204': 3.136, + 'GROW_CURVE_ATTACK_205': 2.86, + 'GROW_CURVE_CRITICAL_201': 2.171, + 'GROW_CURVE_ATTACK_301': 3.539, + 'GROW_CURVE_ATTACK_302': 3.803, + 'GROW_CURVE_ATTACK_303': 4.049, + 'GROW_CURVE_ATTACK_304': 3.257, + 'GROW_CURVE_ATTACK_305': 2.954, + 'GROW_CURVE_CRITICAL_301': 2.171, + } + }, + '31': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.221, + 'GROW_CURVE_ATTACK_102': 3.464, + 'GROW_CURVE_ATTACK_103': 3.694, + 'GROW_CURVE_ATTACK_104': 2.962, + 'GROW_CURVE_ATTACK_105': 2.688, + 'GROW_CURVE_CRITICAL_101': 2.171, + 'GROW_CURVE_ATTACK_201': 3.477, + 'GROW_CURVE_ATTACK_202': 3.731, + 'GROW_CURVE_ATTACK_203': 3.969, + 'GROW_CURVE_ATTACK_204': 3.207, + 'GROW_CURVE_ATTACK_205': 2.919, + 'GROW_CURVE_CRITICAL_201': 2.171, + 'GROW_CURVE_ATTACK_301': 3.629, + 'GROW_CURVE_ATTACK_302': 3.904, + 'GROW_CURVE_ATTACK_303': 4.161, + 'GROW_CURVE_ATTACK_304': 3.334, + 'GROW_CURVE_ATTACK_305': 3.018, + 'GROW_CURVE_CRITICAL_301': 2.171, + } + }, + '32': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.293, + 'GROW_CURVE_ATTACK_102': 3.547, + 'GROW_CURVE_ATTACK_103': 3.787, + 'GROW_CURVE_ATTACK_104': 3.023, + 'GROW_CURVE_ATTACK_105': 2.737, + 'GROW_CURVE_CRITICAL_101': 2.171, + 'GROW_CURVE_ATTACK_201': 3.56, + 'GROW_CURVE_ATTACK_202': 3.824, + 'GROW_CURVE_ATTACK_203': 4.073, + 'GROW_CURVE_ATTACK_204': 3.278, + 'GROW_CURVE_ATTACK_205': 2.978, + 'GROW_CURVE_CRITICAL_201': 2.171, + 'GROW_CURVE_ATTACK_301': 3.719, + 'GROW_CURVE_ATTACK_302': 4.005, + 'GROW_CURVE_ATTACK_303': 4.273, + 'GROW_CURVE_ATTACK_304': 3.412, + 'GROW_CURVE_ATTACK_305': 3.082, + 'GROW_CURVE_CRITICAL_301': 2.171, + } + }, + '33': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.365, + 'GROW_CURVE_ATTACK_102': 3.629, + 'GROW_CURVE_ATTACK_103': 3.879, + 'GROW_CURVE_ATTACK_104': 3.084, + 'GROW_CURVE_ATTACK_105': 2.786, + 'GROW_CURVE_CRITICAL_101': 2.171, + 'GROW_CURVE_ATTACK_201': 3.642, + 'GROW_CURVE_ATTACK_202': 3.918, + 'GROW_CURVE_ATTACK_203': 4.177, + 'GROW_CURVE_ATTACK_204': 3.349, + 'GROW_CURVE_ATTACK_205': 3.036, + 'GROW_CURVE_CRITICAL_201': 2.171, + 'GROW_CURVE_ATTACK_301': 3.809, + 'GROW_CURVE_ATTACK_302': 4.107, + 'GROW_CURVE_ATTACK_303': 4.386, + 'GROW_CURVE_ATTACK_304': 3.489, + 'GROW_CURVE_ATTACK_305': 3.145, + 'GROW_CURVE_CRITICAL_301': 2.171, + } + }, + '34': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.437, + 'GROW_CURVE_ATTACK_102': 3.712, + 'GROW_CURVE_ATTACK_103': 3.972, + 'GROW_CURVE_ATTACK_104': 3.145, + 'GROW_CURVE_ATTACK_105': 2.835, + 'GROW_CURVE_CRITICAL_101': 2.171, + 'GROW_CURVE_ATTACK_201': 3.725, + 'GROW_CURVE_ATTACK_202': 4.011, + 'GROW_CURVE_ATTACK_203': 4.281, + 'GROW_CURVE_ATTACK_204': 3.42, + 'GROW_CURVE_ATTACK_205': 3.094, + 'GROW_CURVE_CRITICAL_201': 2.171, + 'GROW_CURVE_ATTACK_301': 3.899, + 'GROW_CURVE_ATTACK_302': 4.209, + 'GROW_CURVE_ATTACK_303': 4.499, + 'GROW_CURVE_ATTACK_304': 3.566, + 'GROW_CURVE_ATTACK_305': 3.209, + 'GROW_CURVE_CRITICAL_301': 2.171, + } + }, + '35': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.508, + 'GROW_CURVE_ATTACK_102': 3.794, + 'GROW_CURVE_ATTACK_103': 4.064, + 'GROW_CURVE_ATTACK_104': 3.205, + 'GROW_CURVE_ATTACK_105': 2.883, + 'GROW_CURVE_CRITICAL_101': 2.373, + 'GROW_CURVE_ATTACK_201': 3.807, + 'GROW_CURVE_ATTACK_202': 4.105, + 'GROW_CURVE_ATTACK_203': 4.385, + 'GROW_CURVE_ATTACK_204': 3.49, + 'GROW_CURVE_ATTACK_205': 3.152, + 'GROW_CURVE_CRITICAL_201': 2.373, + 'GROW_CURVE_ATTACK_301': 3.989, + 'GROW_CURVE_ATTACK_302': 4.312, + 'GROW_CURVE_ATTACK_303': 4.613, + 'GROW_CURVE_ATTACK_304': 3.644, + 'GROW_CURVE_ATTACK_305': 3.272, + 'GROW_CURVE_CRITICAL_301': 2.373, + } + }, + '36': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.58, + 'GROW_CURVE_ATTACK_102': 3.877, + 'GROW_CURVE_ATTACK_103': 4.157, + 'GROW_CURVE_ATTACK_104': 3.265, + 'GROW_CURVE_ATTACK_105': 2.931, + 'GROW_CURVE_CRITICAL_101': 2.373, + 'GROW_CURVE_ATTACK_201': 3.89, + 'GROW_CURVE_ATTACK_202': 4.199, + 'GROW_CURVE_ATTACK_203': 4.489, + 'GROW_CURVE_ATTACK_204': 3.561, + 'GROW_CURVE_ATTACK_205': 3.21, + 'GROW_CURVE_CRITICAL_201': 2.373, + 'GROW_CURVE_ATTACK_301': 4.08, + 'GROW_CURVE_ATTACK_302': 4.414, + 'GROW_CURVE_ATTACK_303': 4.727, + 'GROW_CURVE_ATTACK_304': 3.721, + 'GROW_CURVE_ATTACK_305': 3.336, + 'GROW_CURVE_CRITICAL_301': 2.373, + } + }, + '37': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.652, + 'GROW_CURVE_ATTACK_102': 3.959, + 'GROW_CURVE_ATTACK_103': 4.25, + 'GROW_CURVE_ATTACK_104': 3.325, + 'GROW_CURVE_ATTACK_105': 2.979, + 'GROW_CURVE_CRITICAL_101': 2.373, + 'GROW_CURVE_ATTACK_201': 3.972, + 'GROW_CURVE_ATTACK_202': 4.293, + 'GROW_CURVE_ATTACK_203': 4.594, + 'GROW_CURVE_ATTACK_204': 3.632, + 'GROW_CURVE_ATTACK_205': 3.268, + 'GROW_CURVE_CRITICAL_201': 2.373, + 'GROW_CURVE_ATTACK_301': 4.17, + 'GROW_CURVE_ATTACK_302': 4.517, + 'GROW_CURVE_ATTACK_303': 4.841, + 'GROW_CURVE_ATTACK_304': 3.798, + 'GROW_CURVE_ATTACK_305': 3.399, + 'GROW_CURVE_CRITICAL_301': 2.373, + } + }, + '38': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.723, + 'GROW_CURVE_ATTACK_102': 4.042, + 'GROW_CURVE_ATTACK_103': 4.342, + 'GROW_CURVE_ATTACK_104': 3.385, + 'GROW_CURVE_ATTACK_105': 3.027, + 'GROW_CURVE_CRITICAL_101': 2.373, + 'GROW_CURVE_ATTACK_201': 4.055, + 'GROW_CURVE_ATTACK_202': 4.387, + 'GROW_CURVE_ATTACK_203': 4.699, + 'GROW_CURVE_ATTACK_204': 3.702, + 'GROW_CURVE_ATTACK_205': 3.325, + 'GROW_CURVE_CRITICAL_201': 2.373, + 'GROW_CURVE_ATTACK_301': 4.261, + 'GROW_CURVE_ATTACK_302': 4.62, + 'GROW_CURVE_ATTACK_303': 4.956, + 'GROW_CURVE_ATTACK_304': 3.876, + 'GROW_CURVE_ATTACK_305': 3.462, + 'GROW_CURVE_CRITICAL_301': 2.373, + } + }, + '39': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.794, + 'GROW_CURVE_ATTACK_102': 4.124, + 'GROW_CURVE_ATTACK_103': 4.435, + 'GROW_CURVE_ATTACK_104': 3.445, + 'GROW_CURVE_ATTACK_105': 3.074, + 'GROW_CURVE_CRITICAL_101': 2.373, + 'GROW_CURVE_ATTACK_201': 4.138, + 'GROW_CURVE_ATTACK_202': 4.481, + 'GROW_CURVE_ATTACK_203': 4.803, + 'GROW_CURVE_ATTACK_204': 3.772, + 'GROW_CURVE_ATTACK_205': 3.382, + 'GROW_CURVE_CRITICAL_201': 2.373, + 'GROW_CURVE_ATTACK_301': 4.352, + 'GROW_CURVE_ATTACK_302': 4.723, + 'GROW_CURVE_ATTACK_303': 5.071, + 'GROW_CURVE_ATTACK_304': 3.953, + 'GROW_CURVE_ATTACK_305': 3.525, + 'GROW_CURVE_CRITICAL_301': 2.373, + } + }, + '40': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.866, + 'GROW_CURVE_ATTACK_102': 4.206, + 'GROW_CURVE_ATTACK_103': 4.528, + 'GROW_CURVE_ATTACK_104': 3.504, + 'GROW_CURVE_ATTACK_105': 3.121, + 'GROW_CURVE_CRITICAL_101': 2.575, + 'GROW_CURVE_ATTACK_201': 4.22, + 'GROW_CURVE_ATTACK_202': 4.575, + 'GROW_CURVE_ATTACK_203': 4.909, + 'GROW_CURVE_ATTACK_204': 3.842, + 'GROW_CURVE_ATTACK_205': 3.439, + 'GROW_CURVE_CRITICAL_201': 2.575, + 'GROW_CURVE_ATTACK_301': 4.443, + 'GROW_CURVE_ATTACK_302': 4.827, + 'GROW_CURVE_ATTACK_303': 5.186, + 'GROW_CURVE_ATTACK_304': 4.031, + 'GROW_CURVE_ATTACK_305': 3.588, + 'GROW_CURVE_CRITICAL_301': 2.575, + } + }, + '41': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 3.937, + 'GROW_CURVE_ATTACK_102': 4.289, + 'GROW_CURVE_ATTACK_103': 4.621, + 'GROW_CURVE_ATTACK_104': 3.564, + 'GROW_CURVE_ATTACK_105': 3.167, + 'GROW_CURVE_CRITICAL_101': 2.575, + 'GROW_CURVE_ATTACK_201': 4.303, + 'GROW_CURVE_ATTACK_202': 4.669, + 'GROW_CURVE_ATTACK_203': 5.014, + 'GROW_CURVE_ATTACK_204': 3.913, + 'GROW_CURVE_ATTACK_205': 3.496, + 'GROW_CURVE_CRITICAL_201': 2.575, + 'GROW_CURVE_ATTACK_301': 4.534, + 'GROW_CURVE_ATTACK_302': 4.931, + 'GROW_CURVE_ATTACK_303': 5.301, + 'GROW_CURVE_ATTACK_304': 4.109, + 'GROW_CURVE_ATTACK_305': 3.651, + 'GROW_CURVE_CRITICAL_301': 2.575, + } + }, + '42': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.008, + 'GROW_CURVE_ATTACK_102': 4.371, + 'GROW_CURVE_ATTACK_103': 4.714, + 'GROW_CURVE_ATTACK_104': 3.623, + 'GROW_CURVE_ATTACK_105': 3.214, + 'GROW_CURVE_CRITICAL_101': 2.575, + 'GROW_CURVE_ATTACK_201': 4.385, + 'GROW_CURVE_ATTACK_202': 4.763, + 'GROW_CURVE_ATTACK_203': 5.119, + 'GROW_CURVE_ATTACK_204': 3.983, + 'GROW_CURVE_ATTACK_205': 3.553, + 'GROW_CURVE_CRITICAL_201': 2.575, + 'GROW_CURVE_ATTACK_301': 4.625, + 'GROW_CURVE_ATTACK_302': 5.035, + 'GROW_CURVE_ATTACK_303': 5.417, + 'GROW_CURVE_ATTACK_304': 4.186, + 'GROW_CURVE_ATTACK_305': 3.714, + 'GROW_CURVE_CRITICAL_301': 2.575, + } + }, + '43': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.079, + 'GROW_CURVE_ATTACK_102': 4.454, + 'GROW_CURVE_ATTACK_103': 4.808, + 'GROW_CURVE_ATTACK_104': 3.682, + 'GROW_CURVE_ATTACK_105': 3.26, + 'GROW_CURVE_CRITICAL_101': 2.575, + 'GROW_CURVE_ATTACK_201': 4.468, + 'GROW_CURVE_ATTACK_202': 4.858, + 'GROW_CURVE_ATTACK_203': 5.225, + 'GROW_CURVE_ATTACK_204': 4.053, + 'GROW_CURVE_ATTACK_205': 3.609, + 'GROW_CURVE_CRITICAL_201': 2.575, + 'GROW_CURVE_ATTACK_301': 4.717, + 'GROW_CURVE_ATTACK_302': 5.139, + 'GROW_CURVE_ATTACK_303': 5.533, + 'GROW_CURVE_ATTACK_304': 4.264, + 'GROW_CURVE_ATTACK_305': 3.777, + 'GROW_CURVE_CRITICAL_301': 2.575, + } + }, + '44': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.15, + 'GROW_CURVE_ATTACK_102': 4.536, + 'GROW_CURVE_ATTACK_103': 4.901, + 'GROW_CURVE_ATTACK_104': 3.741, + 'GROW_CURVE_ATTACK_105': 3.306, + 'GROW_CURVE_CRITICAL_101': 2.575, + 'GROW_CURVE_ATTACK_201': 4.55, + 'GROW_CURVE_ATTACK_202': 4.952, + 'GROW_CURVE_ATTACK_203': 5.33, + 'GROW_CURVE_ATTACK_204': 4.122, + 'GROW_CURVE_ATTACK_205': 3.666, + 'GROW_CURVE_CRITICAL_201': 2.575, + 'GROW_CURVE_ATTACK_301': 4.808, + 'GROW_CURVE_ATTACK_302': 5.243, + 'GROW_CURVE_ATTACK_303': 5.65, + 'GROW_CURVE_ATTACK_304': 4.342, + 'GROW_CURVE_ATTACK_305': 3.84, + 'GROW_CURVE_CRITICAL_301': 2.575, + } + }, + '45': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.221, + 'GROW_CURVE_ATTACK_102': 4.618, + 'GROW_CURVE_ATTACK_103': 4.994, + 'GROW_CURVE_ATTACK_104': 3.799, + 'GROW_CURVE_ATTACK_105': 3.351, + 'GROW_CURVE_CRITICAL_101': 2.777, + 'GROW_CURVE_ATTACK_201': 4.633, + 'GROW_CURVE_ATTACK_202': 5.047, + 'GROW_CURVE_ATTACK_203': 5.436, + 'GROW_CURVE_ATTACK_204': 4.192, + 'GROW_CURVE_ATTACK_205': 3.722, + 'GROW_CURVE_CRITICAL_201': 2.777, + 'GROW_CURVE_ATTACK_301': 4.9, + 'GROW_CURVE_ATTACK_302': 5.348, + 'GROW_CURVE_ATTACK_303': 5.767, + 'GROW_CURVE_ATTACK_304': 4.419, + 'GROW_CURVE_ATTACK_305': 3.903, + 'GROW_CURVE_CRITICAL_301': 2.777, + } + }, + '46': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.291, + 'GROW_CURVE_ATTACK_102': 4.701, + 'GROW_CURVE_ATTACK_103': 5.087, + 'GROW_CURVE_ATTACK_104': 3.858, + 'GROW_CURVE_ATTACK_105': 3.397, + 'GROW_CURVE_CRITICAL_101': 2.777, + 'GROW_CURVE_ATTACK_201': 4.716, + 'GROW_CURVE_ATTACK_202': 5.142, + 'GROW_CURVE_ATTACK_203': 5.542, + 'GROW_CURVE_ATTACK_204': 4.262, + 'GROW_CURVE_ATTACK_205': 3.778, + 'GROW_CURVE_CRITICAL_201': 2.777, + 'GROW_CURVE_ATTACK_301': 4.992, + 'GROW_CURVE_ATTACK_302': 5.453, + 'GROW_CURVE_ATTACK_303': 5.884, + 'GROW_CURVE_ATTACK_304': 4.497, + 'GROW_CURVE_ATTACK_305': 3.966, + 'GROW_CURVE_CRITICAL_301': 2.777, + } + }, + '47': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.362, + 'GROW_CURVE_ATTACK_102': 4.783, + 'GROW_CURVE_ATTACK_103': 5.181, + 'GROW_CURVE_ATTACK_104': 3.916, + 'GROW_CURVE_ATTACK_105': 3.442, + 'GROW_CURVE_CRITICAL_101': 2.777, + 'GROW_CURVE_ATTACK_201': 4.798, + 'GROW_CURVE_ATTACK_202': 5.236, + 'GROW_CURVE_ATTACK_203': 5.648, + 'GROW_CURVE_ATTACK_204': 4.332, + 'GROW_CURVE_ATTACK_205': 3.834, + 'GROW_CURVE_CRITICAL_201': 2.777, + 'GROW_CURVE_ATTACK_301': 5.084, + 'GROW_CURVE_ATTACK_302': 5.558, + 'GROW_CURVE_ATTACK_303': 6.001, + 'GROW_CURVE_ATTACK_304': 4.575, + 'GROW_CURVE_ATTACK_305': 4.029, + 'GROW_CURVE_CRITICAL_301': 2.777, + } + }, + '48': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.433, + 'GROW_CURVE_ATTACK_102': 4.865, + 'GROW_CURVE_ATTACK_103': 5.274, + 'GROW_CURVE_ATTACK_104': 3.974, + 'GROW_CURVE_ATTACK_105': 3.487, + 'GROW_CURVE_CRITICAL_101': 2.777, + 'GROW_CURVE_ATTACK_201': 4.881, + 'GROW_CURVE_ATTACK_202': 5.331, + 'GROW_CURVE_ATTACK_203': 5.755, + 'GROW_CURVE_ATTACK_204': 4.401, + 'GROW_CURVE_ATTACK_205': 3.889, + 'GROW_CURVE_CRITICAL_201': 2.777, + 'GROW_CURVE_ATTACK_301': 5.176, + 'GROW_CURVE_ATTACK_302': 5.663, + 'GROW_CURVE_ATTACK_303': 6.118, + 'GROW_CURVE_ATTACK_304': 4.653, + 'GROW_CURVE_ATTACK_305': 4.092, + 'GROW_CURVE_CRITICAL_301': 2.777, + } + }, + '49': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.503, + 'GROW_CURVE_ATTACK_102': 4.948, + 'GROW_CURVE_ATTACK_103': 5.367, + 'GROW_CURVE_ATTACK_104': 4.032, + 'GROW_CURVE_ATTACK_105': 3.532, + 'GROW_CURVE_CRITICAL_101': 2.777, + 'GROW_CURVE_ATTACK_201': 4.963, + 'GROW_CURVE_ATTACK_202': 5.426, + 'GROW_CURVE_ATTACK_203': 5.861, + 'GROW_CURVE_ATTACK_204': 4.471, + 'GROW_CURVE_ATTACK_205': 3.945, + 'GROW_CURVE_CRITICAL_201': 2.777, + 'GROW_CURVE_ATTACK_301': 5.268, + 'GROW_CURVE_ATTACK_302': 5.768, + 'GROW_CURVE_ATTACK_303': 6.236, + 'GROW_CURVE_ATTACK_304': 4.731, + 'GROW_CURVE_ATTACK_305': 4.155, + 'GROW_CURVE_CRITICAL_301': 2.777, + } + }, + '50': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.574, + 'GROW_CURVE_ATTACK_102': 5.03, + 'GROW_CURVE_ATTACK_103': 5.461, + 'GROW_CURVE_ATTACK_104': 4.09, + 'GROW_CURVE_ATTACK_105': 3.576, + 'GROW_CURVE_CRITICAL_101': 2.979, + 'GROW_CURVE_ATTACK_201': 5.046, + 'GROW_CURVE_ATTACK_202': 5.521, + 'GROW_CURVE_ATTACK_203': 5.968, + 'GROW_CURVE_ATTACK_204': 4.54, + 'GROW_CURVE_ATTACK_205': 4, + 'GROW_CURVE_CRITICAL_201': 2.979, + 'GROW_CURVE_ATTACK_301': 5.36, + 'GROW_CURVE_ATTACK_302': 5.874, + 'GROW_CURVE_ATTACK_303': 6.354, + 'GROW_CURVE_ATTACK_304': 4.81, + 'GROW_CURVE_ATTACK_305': 4.217, + 'GROW_CURVE_CRITICAL_301': 2.979, + } + }, + '51': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.644, + 'GROW_CURVE_ATTACK_102': 5.112, + 'GROW_CURVE_ATTACK_103': 5.554, + 'GROW_CURVE_ATTACK_104': 4.148, + 'GROW_CURVE_ATTACK_105': 3.62, + 'GROW_CURVE_CRITICAL_101': 2.979, + 'GROW_CURVE_ATTACK_201': 5.128, + 'GROW_CURVE_ATTACK_202': 5.616, + 'GROW_CURVE_ATTACK_203': 6.074, + 'GROW_CURVE_ATTACK_204': 4.609, + 'GROW_CURVE_ATTACK_205': 4.056, + 'GROW_CURVE_CRITICAL_201': 2.979, + 'GROW_CURVE_ATTACK_301': 5.453, + 'GROW_CURVE_ATTACK_302': 5.98, + 'GROW_CURVE_ATTACK_303': 6.473, + 'GROW_CURVE_ATTACK_304': 4.888, + 'GROW_CURVE_ATTACK_305': 4.28, + 'GROW_CURVE_CRITICAL_301': 2.979, + } + }, + '52': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.714, + 'GROW_CURVE_ATTACK_102': 5.194, + 'GROW_CURVE_ATTACK_103': 5.648, + 'GROW_CURVE_ATTACK_104': 4.205, + 'GROW_CURVE_ATTACK_105': 3.665, + 'GROW_CURVE_CRITICAL_101': 2.979, + 'GROW_CURVE_ATTACK_201': 5.211, + 'GROW_CURVE_ATTACK_202': 5.711, + 'GROW_CURVE_ATTACK_203': 6.181, + 'GROW_CURVE_ATTACK_204': 4.679, + 'GROW_CURVE_ATTACK_205': 4.111, + 'GROW_CURVE_CRITICAL_201': 2.979, + 'GROW_CURVE_ATTACK_301': 5.546, + 'GROW_CURVE_ATTACK_302': 6.086, + 'GROW_CURVE_ATTACK_303': 6.592, + 'GROW_CURVE_ATTACK_304': 4.966, + 'GROW_CURVE_ATTACK_305': 4.343, + 'GROW_CURVE_CRITICAL_301': 2.979, + } + }, + '53': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.784, + 'GROW_CURVE_ATTACK_102': 5.277, + 'GROW_CURVE_ATTACK_103': 5.742, + 'GROW_CURVE_ATTACK_104': 4.263, + 'GROW_CURVE_ATTACK_105': 3.708, + 'GROW_CURVE_CRITICAL_101': 2.979, + 'GROW_CURVE_ATTACK_201': 5.294, + 'GROW_CURVE_ATTACK_202': 5.806, + 'GROW_CURVE_ATTACK_203': 6.288, + 'GROW_CURVE_ATTACK_204': 4.748, + 'GROW_CURVE_ATTACK_205': 4.166, + 'GROW_CURVE_CRITICAL_201': 2.979, + 'GROW_CURVE_ATTACK_301': 5.638, + 'GROW_CURVE_ATTACK_302': 6.192, + 'GROW_CURVE_ATTACK_303': 6.71, + 'GROW_CURVE_ATTACK_304': 5.044, + 'GROW_CURVE_ATTACK_305': 4.406, + 'GROW_CURVE_CRITICAL_301': 2.979, + } + }, + '54': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.855, + 'GROW_CURVE_ATTACK_102': 5.359, + 'GROW_CURVE_ATTACK_103': 5.835, + 'GROW_CURVE_ATTACK_104': 4.32, + 'GROW_CURVE_ATTACK_105': 3.752, + 'GROW_CURVE_CRITICAL_101': 2.979, + 'GROW_CURVE_ATTACK_201': 5.376, + 'GROW_CURVE_ATTACK_202': 5.901, + 'GROW_CURVE_ATTACK_203': 6.395, + 'GROW_CURVE_ATTACK_204': 4.817, + 'GROW_CURVE_ATTACK_205': 4.221, + 'GROW_CURVE_CRITICAL_201': 2.979, + 'GROW_CURVE_ATTACK_301': 5.731, + 'GROW_CURVE_ATTACK_302': 6.299, + 'GROW_CURVE_ATTACK_303': 6.83, + 'GROW_CURVE_ATTACK_304': 5.123, + 'GROW_CURVE_ATTACK_305': 4.469, + 'GROW_CURVE_CRITICAL_301': 2.979, + } + }, + '55': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.925, + 'GROW_CURVE_ATTACK_102': 5.441, + 'GROW_CURVE_ATTACK_103': 5.929, + 'GROW_CURVE_ATTACK_104': 4.377, + 'GROW_CURVE_ATTACK_105': 3.796, + 'GROW_CURVE_CRITICAL_101': 3.181, + 'GROW_CURVE_ATTACK_201': 5.459, + 'GROW_CURVE_ATTACK_202': 5.996, + 'GROW_CURVE_ATTACK_203': 6.502, + 'GROW_CURVE_ATTACK_204': 4.886, + 'GROW_CURVE_ATTACK_205': 4.275, + 'GROW_CURVE_CRITICAL_201': 3.181, + 'GROW_CURVE_ATTACK_301': 5.825, + 'GROW_CURVE_ATTACK_302': 6.406, + 'GROW_CURVE_ATTACK_303': 6.949, + 'GROW_CURVE_ATTACK_304': 5.201, + 'GROW_CURVE_ATTACK_305': 4.532, + 'GROW_CURVE_CRITICAL_301': 3.181, + } + }, + '56': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 4.995, + 'GROW_CURVE_ATTACK_102': 5.523, + 'GROW_CURVE_ATTACK_103': 6.023, + 'GROW_CURVE_ATTACK_104': 4.434, + 'GROW_CURVE_ATTACK_105': 3.839, + 'GROW_CURVE_CRITICAL_101': 3.181, + 'GROW_CURVE_ATTACK_201': 5.541, + 'GROW_CURVE_ATTACK_202': 6.092, + 'GROW_CURVE_ATTACK_203': 6.609, + 'GROW_CURVE_ATTACK_204': 4.955, + 'GROW_CURVE_ATTACK_205': 4.33, + 'GROW_CURVE_CRITICAL_201': 3.181, + 'GROW_CURVE_ATTACK_301': 5.918, + 'GROW_CURVE_ATTACK_302': 6.513, + 'GROW_CURVE_ATTACK_303': 7.069, + 'GROW_CURVE_ATTACK_304': 5.28, + 'GROW_CURVE_ATTACK_305': 4.594, + 'GROW_CURVE_CRITICAL_301': 3.181, + } + }, + '57': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.065, + 'GROW_CURVE_ATTACK_102': 5.605, + 'GROW_CURVE_ATTACK_103': 6.116, + 'GROW_CURVE_ATTACK_104': 4.491, + 'GROW_CURVE_ATTACK_105': 3.882, + 'GROW_CURVE_CRITICAL_101': 3.181, + 'GROW_CURVE_ATTACK_201': 5.624, + 'GROW_CURVE_ATTACK_202': 6.187, + 'GROW_CURVE_ATTACK_203': 6.717, + 'GROW_CURVE_ATTACK_204': 5.024, + 'GROW_CURVE_ATTACK_205': 4.384, + 'GROW_CURVE_CRITICAL_201': 3.181, + 'GROW_CURVE_ATTACK_301': 6.011, + 'GROW_CURVE_ATTACK_302': 6.62, + 'GROW_CURVE_ATTACK_303': 7.189, + 'GROW_CURVE_ATTACK_304': 5.359, + 'GROW_CURVE_ATTACK_305': 4.657, + 'GROW_CURVE_CRITICAL_301': 3.181, + } + }, + '58': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.134, + 'GROW_CURVE_ATTACK_102': 5.688, + 'GROW_CURVE_ATTACK_103': 6.21, + 'GROW_CURVE_ATTACK_104': 4.548, + 'GROW_CURVE_ATTACK_105': 3.925, + 'GROW_CURVE_CRITICAL_101': 3.181, + 'GROW_CURVE_ATTACK_201': 5.706, + 'GROW_CURVE_ATTACK_202': 6.282, + 'GROW_CURVE_ATTACK_203': 6.824, + 'GROW_CURVE_ATTACK_204': 5.093, + 'GROW_CURVE_ATTACK_205': 4.439, + 'GROW_CURVE_CRITICAL_201': 3.181, + 'GROW_CURVE_ATTACK_301': 6.105, + 'GROW_CURVE_ATTACK_302': 6.727, + 'GROW_CURVE_ATTACK_303': 7.309, + 'GROW_CURVE_ATTACK_304': 5.437, + 'GROW_CURVE_ATTACK_305': 4.72, + 'GROW_CURVE_CRITICAL_301': 3.181, + } + }, + '59': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.204, + 'GROW_CURVE_ATTACK_102': 5.77, + 'GROW_CURVE_ATTACK_103': 6.304, + 'GROW_CURVE_ATTACK_104': 4.605, + 'GROW_CURVE_ATTACK_105': 3.968, + 'GROW_CURVE_CRITICAL_101': 3.181, + 'GROW_CURVE_ATTACK_201': 5.789, + 'GROW_CURVE_ATTACK_202': 6.378, + 'GROW_CURVE_ATTACK_203': 6.932, + 'GROW_CURVE_ATTACK_204': 5.162, + 'GROW_CURVE_ATTACK_205': 4.493, + 'GROW_CURVE_CRITICAL_201': 3.181, + 'GROW_CURVE_ATTACK_301': 6.198, + 'GROW_CURVE_ATTACK_302': 6.835, + 'GROW_CURVE_ATTACK_303': 7.429, + 'GROW_CURVE_ATTACK_304': 5.516, + 'GROW_CURVE_ATTACK_305': 4.783, + 'GROW_CURVE_CRITICAL_301': 3.181, + } + }, + '60': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.274, + 'GROW_CURVE_ATTACK_102': 5.852, + 'GROW_CURVE_ATTACK_103': 6.398, + 'GROW_CURVE_ATTACK_104': 4.661, + 'GROW_CURVE_ATTACK_105': 4.01, + 'GROW_CURVE_CRITICAL_101': 3.383, + 'GROW_CURVE_ATTACK_201': 5.872, + 'GROW_CURVE_ATTACK_202': 6.473, + 'GROW_CURVE_ATTACK_203': 7.039, + 'GROW_CURVE_ATTACK_204': 5.231, + 'GROW_CURVE_ATTACK_205': 4.547, + 'GROW_CURVE_CRITICAL_201': 3.383, + 'GROW_CURVE_ATTACK_301': 6.292, + 'GROW_CURVE_ATTACK_302': 6.942, + 'GROW_CURVE_ATTACK_303': 7.55, + 'GROW_CURVE_ATTACK_304': 5.595, + 'GROW_CURVE_ATTACK_305': 4.846, + 'GROW_CURVE_CRITICAL_301': 3.383, + } + }, + '61': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.344, + 'GROW_CURVE_ATTACK_102': 5.934, + 'GROW_CURVE_ATTACK_103': 6.492, + 'GROW_CURVE_ATTACK_104': 4.718, + 'GROW_CURVE_ATTACK_105': 4.053, + 'GROW_CURVE_CRITICAL_101': 3.383, + 'GROW_CURVE_ATTACK_201': 5.954, + 'GROW_CURVE_ATTACK_202': 6.569, + 'GROW_CURVE_ATTACK_203': 7.147, + 'GROW_CURVE_ATTACK_204': 5.3, + 'GROW_CURVE_ATTACK_205': 4.601, + 'GROW_CURVE_CRITICAL_201': 3.383, + 'GROW_CURVE_ATTACK_301': 6.386, + 'GROW_CURVE_ATTACK_302': 7.05, + 'GROW_CURVE_ATTACK_303': 7.671, + 'GROW_CURVE_ATTACK_304': 5.674, + 'GROW_CURVE_ATTACK_305': 4.909, + 'GROW_CURVE_CRITICAL_301': 3.383, + } + }, + '62': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.413, + 'GROW_CURVE_ATTACK_102': 6.016, + 'GROW_CURVE_ATTACK_103': 6.586, + 'GROW_CURVE_ATTACK_104': 4.774, + 'GROW_CURVE_ATTACK_105': 4.095, + 'GROW_CURVE_CRITICAL_101': 3.383, + 'GROW_CURVE_ATTACK_201': 6.037, + 'GROW_CURVE_ATTACK_202': 6.664, + 'GROW_CURVE_ATTACK_203': 7.255, + 'GROW_CURVE_ATTACK_204': 5.368, + 'GROW_CURVE_ATTACK_205': 4.655, + 'GROW_CURVE_CRITICAL_201': 3.383, + 'GROW_CURVE_ATTACK_301': 6.48, + 'GROW_CURVE_ATTACK_302': 7.158, + 'GROW_CURVE_ATTACK_303': 7.792, + 'GROW_CURVE_ATTACK_304': 5.753, + 'GROW_CURVE_ATTACK_305': 4.972, + 'GROW_CURVE_CRITICAL_301': 3.383, + } + }, + '63': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.483, + 'GROW_CURVE_ATTACK_102': 6.098, + 'GROW_CURVE_ATTACK_103': 6.68, + 'GROW_CURVE_ATTACK_104': 4.83, + 'GROW_CURVE_ATTACK_105': 4.137, + 'GROW_CURVE_CRITICAL_101': 3.383, + 'GROW_CURVE_ATTACK_201': 6.119, + 'GROW_CURVE_ATTACK_202': 6.76, + 'GROW_CURVE_ATTACK_203': 7.363, + 'GROW_CURVE_ATTACK_204': 5.437, + 'GROW_CURVE_ATTACK_205': 4.709, + 'GROW_CURVE_CRITICAL_201': 3.383, + 'GROW_CURVE_ATTACK_301': 6.575, + 'GROW_CURVE_ATTACK_302': 7.267, + 'GROW_CURVE_ATTACK_303': 7.913, + 'GROW_CURVE_ATTACK_304': 5.833, + 'GROW_CURVE_ATTACK_305': 5.035, + 'GROW_CURVE_CRITICAL_301': 3.383, + } + }, + '64': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.552, + 'GROW_CURVE_ATTACK_102': 6.18, + 'GROW_CURVE_ATTACK_103': 6.774, + 'GROW_CURVE_ATTACK_104': 4.887, + 'GROW_CURVE_ATTACK_105': 4.179, + 'GROW_CURVE_CRITICAL_101': 3.383, + 'GROW_CURVE_ATTACK_201': 6.202, + 'GROW_CURVE_ATTACK_202': 6.856, + 'GROW_CURVE_ATTACK_203': 7.471, + 'GROW_CURVE_ATTACK_204': 5.506, + 'GROW_CURVE_ATTACK_205': 4.763, + 'GROW_CURVE_CRITICAL_201': 3.383, + 'GROW_CURVE_ATTACK_301': 6.669, + 'GROW_CURVE_ATTACK_302': 7.375, + 'GROW_CURVE_ATTACK_303': 8.035, + 'GROW_CURVE_ATTACK_304': 5.912, + 'GROW_CURVE_ATTACK_305': 5.098, + 'GROW_CURVE_CRITICAL_301': 3.383, + } + }, + '65': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.622, + 'GROW_CURVE_ATTACK_102': 6.262, + 'GROW_CURVE_ATTACK_103': 6.868, + 'GROW_CURVE_ATTACK_104': 4.943, + 'GROW_CURVE_ATTACK_105': 4.221, + 'GROW_CURVE_CRITICAL_101': 3.585, + 'GROW_CURVE_ATTACK_201': 6.284, + 'GROW_CURVE_ATTACK_202': 6.951, + 'GROW_CURVE_ATTACK_203': 7.579, + 'GROW_CURVE_ATTACK_204': 5.574, + 'GROW_CURVE_ATTACK_205': 4.816, + 'GROW_CURVE_CRITICAL_201': 3.585, + 'GROW_CURVE_ATTACK_301': 6.763, + 'GROW_CURVE_ATTACK_302': 7.484, + 'GROW_CURVE_ATTACK_303': 8.157, + 'GROW_CURVE_ATTACK_304': 5.991, + 'GROW_CURVE_ATTACK_305': 5.161, + 'GROW_CURVE_CRITICAL_301': 3.585, + } + }, + '66': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.691, + 'GROW_CURVE_ATTACK_102': 6.344, + 'GROW_CURVE_ATTACK_103': 6.962, + 'GROW_CURVE_ATTACK_104': 4.999, + 'GROW_CURVE_ATTACK_105': 4.263, + 'GROW_CURVE_CRITICAL_101': 3.585, + 'GROW_CURVE_ATTACK_201': 6.367, + 'GROW_CURVE_ATTACK_202': 7.047, + 'GROW_CURVE_ATTACK_203': 7.687, + 'GROW_CURVE_ATTACK_204': 5.643, + 'GROW_CURVE_ATTACK_205': 4.87, + 'GROW_CURVE_CRITICAL_201': 3.585, + 'GROW_CURVE_ATTACK_301': 6.858, + 'GROW_CURVE_ATTACK_302': 7.592, + 'GROW_CURVE_ATTACK_303': 8.279, + 'GROW_CURVE_ATTACK_304': 6.071, + 'GROW_CURVE_ATTACK_305': 5.225, + 'GROW_CURVE_CRITICAL_301': 3.585, + } + }, + '67': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.761, + 'GROW_CURVE_ATTACK_102': 6.427, + 'GROW_CURVE_ATTACK_103': 7.056, + 'GROW_CURVE_ATTACK_104': 5.054, + 'GROW_CURVE_ATTACK_105': 4.304, + 'GROW_CURVE_CRITICAL_101': 3.585, + 'GROW_CURVE_ATTACK_201': 6.45, + 'GROW_CURVE_ATTACK_202': 7.143, + 'GROW_CURVE_ATTACK_203': 7.795, + 'GROW_CURVE_ATTACK_204': 5.711, + 'GROW_CURVE_ATTACK_205': 4.923, + 'GROW_CURVE_CRITICAL_201': 3.585, + 'GROW_CURVE_ATTACK_301': 6.953, + 'GROW_CURVE_ATTACK_302': 7.701, + 'GROW_CURVE_ATTACK_303': 8.401, + 'GROW_CURVE_ATTACK_304': 6.15, + 'GROW_CURVE_ATTACK_305': 5.288, + 'GROW_CURVE_CRITICAL_301': 3.585, + } + }, + '68': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.83, + 'GROW_CURVE_ATTACK_102': 6.509, + 'GROW_CURVE_ATTACK_103': 7.15, + 'GROW_CURVE_ATTACK_104': 5.11, + 'GROW_CURVE_ATTACK_105': 4.346, + 'GROW_CURVE_CRITICAL_101': 3.585, + 'GROW_CURVE_ATTACK_201': 6.532, + 'GROW_CURVE_ATTACK_202': 7.239, + 'GROW_CURVE_ATTACK_203': 7.904, + 'GROW_CURVE_ATTACK_204': 5.78, + 'GROW_CURVE_ATTACK_205': 4.977, + 'GROW_CURVE_CRITICAL_201': 3.585, + 'GROW_CURVE_ATTACK_301': 7.048, + 'GROW_CURVE_ATTACK_302': 7.811, + 'GROW_CURVE_ATTACK_303': 8.524, + 'GROW_CURVE_ATTACK_304': 6.23, + 'GROW_CURVE_ATTACK_305': 5.351, + 'GROW_CURVE_CRITICAL_301': 3.585, + } + }, + '69': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.899, + 'GROW_CURVE_ATTACK_102': 6.591, + 'GROW_CURVE_ATTACK_103': 7.244, + 'GROW_CURVE_ATTACK_104': 5.166, + 'GROW_CURVE_ATTACK_105': 4.387, + 'GROW_CURVE_CRITICAL_101': 3.585, + 'GROW_CURVE_ATTACK_201': 6.615, + 'GROW_CURVE_ATTACK_202': 7.335, + 'GROW_CURVE_ATTACK_203': 8.012, + 'GROW_CURVE_ATTACK_204': 5.848, + 'GROW_CURVE_ATTACK_205': 5.03, + 'GROW_CURVE_CRITICAL_201': 3.585, + 'GROW_CURVE_ATTACK_301': 7.143, + 'GROW_CURVE_ATTACK_302': 7.92, + 'GROW_CURVE_ATTACK_303': 8.646, + 'GROW_CURVE_ATTACK_304': 6.31, + 'GROW_CURVE_ATTACK_305': 5.414, + 'GROW_CURVE_CRITICAL_301': 3.585, + } + }, + '70': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 5.968, + 'GROW_CURVE_ATTACK_102': 6.673, + 'GROW_CURVE_ATTACK_103': 7.338, + 'GROW_CURVE_ATTACK_104': 5.222, + 'GROW_CURVE_ATTACK_105': 4.428, + 'GROW_CURVE_CRITICAL_101': 3.786, + 'GROW_CURVE_ATTACK_201': 6.697, + 'GROW_CURVE_ATTACK_202': 7.431, + 'GROW_CURVE_ATTACK_203': 8.12, + 'GROW_CURVE_ATTACK_204': 5.916, + 'GROW_CURVE_ATTACK_205': 5.083, + 'GROW_CURVE_CRITICAL_201': 3.786, + 'GROW_CURVE_ATTACK_301': 7.238, + 'GROW_CURVE_ATTACK_302': 8.03, + 'GROW_CURVE_ATTACK_303': 8.769, + 'GROW_CURVE_ATTACK_304': 6.39, + 'GROW_CURVE_ATTACK_305': 5.478, + 'GROW_CURVE_CRITICAL_301': 3.786, + } + }, + '71': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.038, + 'GROW_CURVE_ATTACK_102': 6.755, + 'GROW_CURVE_ATTACK_103': 7.432, + 'GROW_CURVE_ATTACK_104': 5.277, + 'GROW_CURVE_ATTACK_105': 4.469, + 'GROW_CURVE_CRITICAL_101': 3.786, + 'GROW_CURVE_ATTACK_201': 6.78, + 'GROW_CURVE_ATTACK_202': 7.527, + 'GROW_CURVE_ATTACK_203': 8.229, + 'GROW_CURVE_ATTACK_204': 5.985, + 'GROW_CURVE_ATTACK_205': 5.136, + 'GROW_CURVE_CRITICAL_201': 3.786, + 'GROW_CURVE_ATTACK_301': 7.334, + 'GROW_CURVE_ATTACK_302': 8.139, + 'GROW_CURVE_ATTACK_303': 8.893, + 'GROW_CURVE_ATTACK_304': 6.47, + 'GROW_CURVE_ATTACK_305': 5.541, + 'GROW_CURVE_CRITICAL_301': 3.786, + } + }, + '72': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.107, + 'GROW_CURVE_ATTACK_102': 6.837, + 'GROW_CURVE_ATTACK_103': 7.527, + 'GROW_CURVE_ATTACK_104': 5.333, + 'GROW_CURVE_ATTACK_105': 4.51, + 'GROW_CURVE_CRITICAL_101': 3.786, + 'GROW_CURVE_ATTACK_201': 6.862, + 'GROW_CURVE_ATTACK_202': 7.623, + 'GROW_CURVE_ATTACK_203': 8.338, + 'GROW_CURVE_ATTACK_204': 6.053, + 'GROW_CURVE_ATTACK_205': 5.189, + 'GROW_CURVE_CRITICAL_201': 3.786, + 'GROW_CURVE_ATTACK_301': 7.429, + 'GROW_CURVE_ATTACK_302': 8.249, + 'GROW_CURVE_ATTACK_303': 9.016, + 'GROW_CURVE_ATTACK_304': 6.55, + 'GROW_CURVE_ATTACK_305': 5.605, + 'GROW_CURVE_CRITICAL_301': 3.786, + } + }, + '73': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.176, + 'GROW_CURVE_ATTACK_102': 6.919, + 'GROW_CURVE_ATTACK_103': 7.621, + 'GROW_CURVE_ATTACK_104': 5.388, + 'GROW_CURVE_ATTACK_105': 4.551, + 'GROW_CURVE_CRITICAL_101': 3.786, + 'GROW_CURVE_ATTACK_201': 6.945, + 'GROW_CURVE_ATTACK_202': 7.719, + 'GROW_CURVE_ATTACK_203': 8.446, + 'GROW_CURVE_ATTACK_204': 6.121, + 'GROW_CURVE_ATTACK_205': 5.242, + 'GROW_CURVE_CRITICAL_201': 3.786, + 'GROW_CURVE_ATTACK_301': 7.525, + 'GROW_CURVE_ATTACK_302': 8.359, + 'GROW_CURVE_ATTACK_303': 9.14, + 'GROW_CURVE_ATTACK_304': 6.63, + 'GROW_CURVE_ATTACK_305': 5.668, + 'GROW_CURVE_CRITICAL_301': 3.786, + } + }, + '74': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.245, + 'GROW_CURVE_ATTACK_102': 7.001, + 'GROW_CURVE_ATTACK_103': 7.715, + 'GROW_CURVE_ATTACK_104': 5.443, + 'GROW_CURVE_ATTACK_105': 4.592, + 'GROW_CURVE_CRITICAL_101': 3.786, + 'GROW_CURVE_ATTACK_201': 7.028, + 'GROW_CURVE_ATTACK_202': 7.815, + 'GROW_CURVE_ATTACK_203': 8.555, + 'GROW_CURVE_ATTACK_204': 6.189, + 'GROW_CURVE_ATTACK_205': 5.295, + 'GROW_CURVE_CRITICAL_201': 3.786, + 'GROW_CURVE_ATTACK_301': 7.621, + 'GROW_CURVE_ATTACK_302': 8.47, + 'GROW_CURVE_ATTACK_303': 9.263, + 'GROW_CURVE_ATTACK_304': 6.71, + 'GROW_CURVE_ATTACK_305': 5.732, + 'GROW_CURVE_CRITICAL_301': 3.786, + } + }, + '75': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.314, + 'GROW_CURVE_ATTACK_102': 7.083, + 'GROW_CURVE_ATTACK_103': 7.81, + 'GROW_CURVE_ATTACK_104': 5.498, + 'GROW_CURVE_ATTACK_105': 4.632, + 'GROW_CURVE_CRITICAL_101': 3.988, + 'GROW_CURVE_ATTACK_201': 7.11, + 'GROW_CURVE_ATTACK_202': 7.911, + 'GROW_CURVE_ATTACK_203': 8.664, + 'GROW_CURVE_ATTACK_204': 6.257, + 'GROW_CURVE_ATTACK_205': 5.347, + 'GROW_CURVE_CRITICAL_201': 3.988, + 'GROW_CURVE_ATTACK_301': 7.717, + 'GROW_CURVE_ATTACK_302': 8.58, + 'GROW_CURVE_ATTACK_303': 9.387, + 'GROW_CURVE_ATTACK_304': 6.791, + 'GROW_CURVE_ATTACK_305': 5.796, + 'GROW_CURVE_CRITICAL_301': 3.988, + } + }, + '76': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.383, + 'GROW_CURVE_ATTACK_102': 7.165, + 'GROW_CURVE_ATTACK_103': 7.904, + 'GROW_CURVE_ATTACK_104': 5.554, + 'GROW_CURVE_ATTACK_105': 4.673, + 'GROW_CURVE_CRITICAL_101': 3.988, + 'GROW_CURVE_ATTACK_201': 7.193, + 'GROW_CURVE_ATTACK_202': 8.007, + 'GROW_CURVE_ATTACK_203': 8.773, + 'GROW_CURVE_ATTACK_204': 6.326, + 'GROW_CURVE_ATTACK_205': 5.4, + 'GROW_CURVE_CRITICAL_201': 3.988, + 'GROW_CURVE_ATTACK_301': 7.813, + 'GROW_CURVE_ATTACK_302': 8.691, + 'GROW_CURVE_ATTACK_303': 9.512, + 'GROW_CURVE_ATTACK_304': 6.871, + 'GROW_CURVE_ATTACK_305': 5.859, + 'GROW_CURVE_CRITICAL_301': 3.988, + } + }, + '77': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.452, + 'GROW_CURVE_ATTACK_102': 7.247, + 'GROW_CURVE_ATTACK_103': 7.998, + 'GROW_CURVE_ATTACK_104': 5.609, + 'GROW_CURVE_ATTACK_105': 4.713, + 'GROW_CURVE_CRITICAL_101': 3.988, + 'GROW_CURVE_ATTACK_201': 7.275, + 'GROW_CURVE_ATTACK_202': 8.103, + 'GROW_CURVE_ATTACK_203': 8.882, + 'GROW_CURVE_ATTACK_204': 6.394, + 'GROW_CURVE_ATTACK_205': 5.453, + 'GROW_CURVE_CRITICAL_201': 3.988, + 'GROW_CURVE_ATTACK_301': 7.909, + 'GROW_CURVE_ATTACK_302': 8.802, + 'GROW_CURVE_ATTACK_303': 9.636, + 'GROW_CURVE_ATTACK_304': 6.952, + 'GROW_CURVE_ATTACK_305': 5.923, + 'GROW_CURVE_CRITICAL_301': 3.988, + } + }, + '78': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.521, + 'GROW_CURVE_ATTACK_102': 7.329, + 'GROW_CURVE_ATTACK_103': 8.093, + 'GROW_CURVE_ATTACK_104': 5.664, + 'GROW_CURVE_ATTACK_105': 4.753, + 'GROW_CURVE_CRITICAL_101': 3.988, + 'GROW_CURVE_ATTACK_201': 7.358, + 'GROW_CURVE_ATTACK_202': 8.199, + 'GROW_CURVE_ATTACK_203': 8.991, + 'GROW_CURVE_ATTACK_204': 6.462, + 'GROW_CURVE_ATTACK_205': 5.505, + 'GROW_CURVE_CRITICAL_201': 3.988, + 'GROW_CURVE_ATTACK_301': 8.005, + 'GROW_CURVE_ATTACK_302': 8.913, + 'GROW_CURVE_ATTACK_303': 9.761, + 'GROW_CURVE_ATTACK_304': 7.033, + 'GROW_CURVE_ATTACK_305': 5.987, + 'GROW_CURVE_CRITICAL_301': 3.988, + } + }, + '79': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.59, + 'GROW_CURVE_ATTACK_102': 7.411, + 'GROW_CURVE_ATTACK_103': 8.187, + 'GROW_CURVE_ATTACK_104': 5.719, + 'GROW_CURVE_ATTACK_105': 4.793, + 'GROW_CURVE_CRITICAL_101': 3.988, + 'GROW_CURVE_ATTACK_201': 7.44, + 'GROW_CURVE_ATTACK_202': 8.296, + 'GROW_CURVE_ATTACK_203': 9.1, + 'GROW_CURVE_ATTACK_204': 6.53, + 'GROW_CURVE_ATTACK_205': 5.558, + 'GROW_CURVE_CRITICAL_201': 3.988, + 'GROW_CURVE_ATTACK_301': 8.102, + 'GROW_CURVE_ATTACK_302': 9.024, + 'GROW_CURVE_ATTACK_303': 9.886, + 'GROW_CURVE_ATTACK_304': 7.113, + 'GROW_CURVE_ATTACK_305': 6.051, + 'GROW_CURVE_CRITICAL_301': 3.988, + } + }, + '80': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.659, + 'GROW_CURVE_ATTACK_102': 7.493, + 'GROW_CURVE_ATTACK_103': 8.282, + 'GROW_CURVE_ATTACK_104': 5.774, + 'GROW_CURVE_ATTACK_105': 4.834, + 'GROW_CURVE_CRITICAL_101': 4.19, + 'GROW_CURVE_ATTACK_201': 7.523, + 'GROW_CURVE_ATTACK_202': 8.392, + 'GROW_CURVE_ATTACK_203': 9.209, + 'GROW_CURVE_ATTACK_204': 6.598, + 'GROW_CURVE_ATTACK_205': 5.61, + 'GROW_CURVE_CRITICAL_201': 4.19, + 'GROW_CURVE_ATTACK_301': 8.199, + 'GROW_CURVE_ATTACK_302': 9.135, + 'GROW_CURVE_ATTACK_303': 10.011, + 'GROW_CURVE_ATTACK_304': 7.194, + 'GROW_CURVE_ATTACK_305': 6.115, + 'GROW_CURVE_CRITICAL_301': 4.19, + } + }, + '81': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.727, + 'GROW_CURVE_ATTACK_102': 7.575, + 'GROW_CURVE_ATTACK_103': 8.376, + 'GROW_CURVE_ATTACK_104': 5.828, + 'GROW_CURVE_ATTACK_105': 4.873, + 'GROW_CURVE_CRITICAL_101': 4.19, + 'GROW_CURVE_ATTACK_201': 7.606, + 'GROW_CURVE_ATTACK_202': 8.488, + 'GROW_CURVE_ATTACK_203': 9.319, + 'GROW_CURVE_ATTACK_204': 6.665, + 'GROW_CURVE_ATTACK_205': 5.662, + 'GROW_CURVE_CRITICAL_201': 4.19, + 'GROW_CURVE_ATTACK_301': 8.295, + 'GROW_CURVE_ATTACK_302': 9.247, + 'GROW_CURVE_ATTACK_303': 10.136, + 'GROW_CURVE_ATTACK_304': 7.275, + 'GROW_CURVE_ATTACK_305': 6.179, + 'GROW_CURVE_CRITICAL_301': 4.19, + } + }, + '82': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.796, + 'GROW_CURVE_ATTACK_102': 7.657, + 'GROW_CURVE_ATTACK_103': 8.471, + 'GROW_CURVE_ATTACK_104': 5.883, + 'GROW_CURVE_ATTACK_105': 4.913, + 'GROW_CURVE_CRITICAL_101': 4.19, + 'GROW_CURVE_ATTACK_201': 7.688, + 'GROW_CURVE_ATTACK_202': 8.585, + 'GROW_CURVE_ATTACK_203': 9.428, + 'GROW_CURVE_ATTACK_204': 6.733, + 'GROW_CURVE_ATTACK_205': 5.715, + 'GROW_CURVE_CRITICAL_201': 4.19, + 'GROW_CURVE_ATTACK_301': 8.392, + 'GROW_CURVE_ATTACK_302': 9.358, + 'GROW_CURVE_ATTACK_303': 10.261, + 'GROW_CURVE_ATTACK_304': 7.357, + 'GROW_CURVE_ATTACK_305': 6.243, + 'GROW_CURVE_CRITICAL_301': 4.19, + } + }, + '83': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.865, + 'GROW_CURVE_ATTACK_102': 7.739, + 'GROW_CURVE_ATTACK_103': 8.565, + 'GROW_CURVE_ATTACK_104': 5.938, + 'GROW_CURVE_ATTACK_105': 4.953, + 'GROW_CURVE_CRITICAL_101': 4.19, + 'GROW_CURVE_ATTACK_201': 7.771, + 'GROW_CURVE_ATTACK_202': 8.681, + 'GROW_CURVE_ATTACK_203': 9.537, + 'GROW_CURVE_ATTACK_204': 6.801, + 'GROW_CURVE_ATTACK_205': 5.767, + 'GROW_CURVE_CRITICAL_201': 4.19, + 'GROW_CURVE_ATTACK_301': 8.489, + 'GROW_CURVE_ATTACK_302': 9.47, + 'GROW_CURVE_ATTACK_303': 10.387, + 'GROW_CURVE_ATTACK_304': 7.438, + 'GROW_CURVE_ATTACK_305': 6.308, + 'GROW_CURVE_CRITICAL_301': 4.19, + } + }, + '84': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 6.934, + 'GROW_CURVE_ATTACK_102': 7.821, + 'GROW_CURVE_ATTACK_103': 8.66, + 'GROW_CURVE_ATTACK_104': 5.993, + 'GROW_CURVE_ATTACK_105': 4.993, + 'GROW_CURVE_CRITICAL_101': 4.19, + 'GROW_CURVE_ATTACK_201': 7.853, + 'GROW_CURVE_ATTACK_202': 8.777, + 'GROW_CURVE_ATTACK_203': 9.647, + 'GROW_CURVE_ATTACK_204': 6.869, + 'GROW_CURVE_ATTACK_205': 5.819, + 'GROW_CURVE_CRITICAL_201': 4.19, + 'GROW_CURVE_ATTACK_301': 8.587, + 'GROW_CURVE_ATTACK_302': 9.582, + 'GROW_CURVE_ATTACK_303': 10.513, + 'GROW_CURVE_ATTACK_304': 7.519, + 'GROW_CURVE_ATTACK_305': 6.372, + 'GROW_CURVE_CRITICAL_301': 4.19, + } + }, + '85': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.003, + 'GROW_CURVE_ATTACK_102': 7.904, + 'GROW_CURVE_ATTACK_103': 8.755, + 'GROW_CURVE_ATTACK_104': 6.047, + 'GROW_CURVE_ATTACK_105': 5.032, + 'GROW_CURVE_CRITICAL_101': 4.392, + 'GROW_CURVE_ATTACK_201': 7.936, + 'GROW_CURVE_ATTACK_202': 8.874, + 'GROW_CURVE_ATTACK_203': 9.756, + 'GROW_CURVE_ATTACK_204': 6.937, + 'GROW_CURVE_ATTACK_205': 5.871, + 'GROW_CURVE_CRITICAL_201': 4.392, + 'GROW_CURVE_ATTACK_301': 8.684, + 'GROW_CURVE_ATTACK_302': 9.694, + 'GROW_CURVE_ATTACK_303': 10.639, + 'GROW_CURVE_ATTACK_304': 7.601, + 'GROW_CURVE_ATTACK_305': 6.436, + 'GROW_CURVE_CRITICAL_301': 4.392, + } + }, + '86': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.071, + 'GROW_CURVE_ATTACK_102': 7.986, + 'GROW_CURVE_ATTACK_103': 8.849, + 'GROW_CURVE_ATTACK_104': 6.102, + 'GROW_CURVE_ATTACK_105': 5.072, + 'GROW_CURVE_CRITICAL_101': 4.392, + 'GROW_CURVE_ATTACK_201': 8.018, + 'GROW_CURVE_ATTACK_202': 8.97, + 'GROW_CURVE_ATTACK_203': 9.866, + 'GROW_CURVE_ATTACK_204': 7.005, + 'GROW_CURVE_ATTACK_205': 5.923, + 'GROW_CURVE_CRITICAL_201': 4.392, + 'GROW_CURVE_ATTACK_301': 8.782, + 'GROW_CURVE_ATTACK_302': 9.807, + 'GROW_CURVE_ATTACK_303': 10.765, + 'GROW_CURVE_ATTACK_304': 7.682, + 'GROW_CURVE_ATTACK_305': 6.501, + 'GROW_CURVE_CRITICAL_301': 4.392, + } + }, + '87': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.14, + 'GROW_CURVE_ATTACK_102': 8.068, + 'GROW_CURVE_ATTACK_103': 8.944, + 'GROW_CURVE_ATTACK_104': 6.156, + 'GROW_CURVE_ATTACK_105': 5.111, + 'GROW_CURVE_CRITICAL_101': 4.392, + 'GROW_CURVE_ATTACK_201': 8.101, + 'GROW_CURVE_ATTACK_202': 9.067, + 'GROW_CURVE_ATTACK_203': 9.975, + 'GROW_CURVE_ATTACK_204': 7.072, + 'GROW_CURVE_ATTACK_205': 5.975, + 'GROW_CURVE_CRITICAL_201': 4.392, + 'GROW_CURVE_ATTACK_301': 8.879, + 'GROW_CURVE_ATTACK_302': 9.919, + 'GROW_CURVE_ATTACK_303': 10.892, + 'GROW_CURVE_ATTACK_304': 7.764, + 'GROW_CURVE_ATTACK_305': 6.565, + 'GROW_CURVE_CRITICAL_301': 4.392, + } + }, + '88': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.209, + 'GROW_CURVE_ATTACK_102': 8.15, + 'GROW_CURVE_ATTACK_103': 9.039, + 'GROW_CURVE_ATTACK_104': 6.211, + 'GROW_CURVE_ATTACK_105': 5.151, + 'GROW_CURVE_CRITICAL_101': 4.392, + 'GROW_CURVE_ATTACK_201': 8.183, + 'GROW_CURVE_ATTACK_202': 9.163, + 'GROW_CURVE_ATTACK_203': 10.085, + 'GROW_CURVE_ATTACK_204': 7.14, + 'GROW_CURVE_ATTACK_205': 6.027, + 'GROW_CURVE_CRITICAL_201': 4.392, + 'GROW_CURVE_ATTACK_301': 8.977, + 'GROW_CURVE_ATTACK_302': 10.032, + 'GROW_CURVE_ATTACK_303': 11.018, + 'GROW_CURVE_ATTACK_304': 7.846, + 'GROW_CURVE_ATTACK_305': 6.63, + 'GROW_CURVE_CRITICAL_301': 4.392, + } + }, + '89': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.277, + 'GROW_CURVE_ATTACK_102': 8.232, + 'GROW_CURVE_ATTACK_103': 9.134, + 'GROW_CURVE_ATTACK_104': 6.265, + 'GROW_CURVE_ATTACK_105': 5.19, + 'GROW_CURVE_CRITICAL_101': 4.392, + 'GROW_CURVE_ATTACK_201': 8.266, + 'GROW_CURVE_ATTACK_202': 9.26, + 'GROW_CURVE_ATTACK_203': 10.195, + 'GROW_CURVE_ATTACK_204': 7.208, + 'GROW_CURVE_ATTACK_205': 6.078, + 'GROW_CURVE_CRITICAL_201': 4.392, + 'GROW_CURVE_ATTACK_301': 9.075, + 'GROW_CURVE_ATTACK_302': 10.145, + 'GROW_CURVE_ATTACK_303': 11.145, + 'GROW_CURVE_ATTACK_304': 7.928, + 'GROW_CURVE_ATTACK_305': 6.695, + 'GROW_CURVE_CRITICAL_301': 4.392, + } + }, + '90': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.346, + 'GROW_CURVE_ATTACK_102': 8.314, + 'GROW_CURVE_ATTACK_103': 9.229, + 'GROW_CURVE_ATTACK_104': 6.32, + 'GROW_CURVE_ATTACK_105': 5.229, + 'GROW_CURVE_CRITICAL_101': 4.594, + 'GROW_CURVE_ATTACK_201': 8.349, + 'GROW_CURVE_ATTACK_202': 9.356, + 'GROW_CURVE_ATTACK_203': 10.305, + 'GROW_CURVE_ATTACK_204': 7.275, + 'GROW_CURVE_ATTACK_205': 6.13, + 'GROW_CURVE_CRITICAL_201': 4.594, + 'GROW_CURVE_ATTACK_301': 9.173, + 'GROW_CURVE_ATTACK_302': 10.258, + 'GROW_CURVE_ATTACK_303': 11.272, + 'GROW_CURVE_ATTACK_304': 8.01, + 'GROW_CURVE_ATTACK_305': 6.76, + 'GROW_CURVE_CRITICAL_301': 4.594, + } + }, + '91': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.415, + 'GROW_CURVE_ATTACK_102': 8.396, + 'GROW_CURVE_ATTACK_103': 9.324, + 'GROW_CURVE_ATTACK_104': 6.374, + 'GROW_CURVE_ATTACK_105': 5.269, + 'GROW_CURVE_CRITICAL_101': 4.594, + 'GROW_CURVE_ATTACK_201': 8.431, + 'GROW_CURVE_ATTACK_202': 9.453, + 'GROW_CURVE_ATTACK_203': 10.414, + 'GROW_CURVE_ATTACK_204': 7.343, + 'GROW_CURVE_ATTACK_205': 6.182, + 'GROW_CURVE_CRITICAL_201': 4.594, + 'GROW_CURVE_ATTACK_301': 9.271, + 'GROW_CURVE_ATTACK_302': 10.371, + 'GROW_CURVE_ATTACK_303': 11.399, + 'GROW_CURVE_ATTACK_304': 8.092, + 'GROW_CURVE_ATTACK_305': 6.825, + 'GROW_CURVE_CRITICAL_301': 4.594, + } + }, + '92': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.483, + 'GROW_CURVE_ATTACK_102': 8.478, + 'GROW_CURVE_ATTACK_103': 9.418, + 'GROW_CURVE_ATTACK_104': 6.428, + 'GROW_CURVE_ATTACK_105': 5.308, + 'GROW_CURVE_CRITICAL_101': 4.594, + 'GROW_CURVE_ATTACK_201': 8.514, + 'GROW_CURVE_ATTACK_202': 9.55, + 'GROW_CURVE_ATTACK_203': 10.524, + 'GROW_CURVE_ATTACK_204': 7.411, + 'GROW_CURVE_ATTACK_205': 6.233, + 'GROW_CURVE_CRITICAL_201': 4.594, + 'GROW_CURVE_ATTACK_301': 9.37, + 'GROW_CURVE_ATTACK_302': 10.485, + 'GROW_CURVE_ATTACK_303': 11.527, + 'GROW_CURVE_ATTACK_304': 8.174, + 'GROW_CURVE_ATTACK_305': 6.89, + 'GROW_CURVE_CRITICAL_301': 4.594, + } + }, + '93': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.552, + 'GROW_CURVE_ATTACK_102': 8.561, + 'GROW_CURVE_ATTACK_103': 9.513, + 'GROW_CURVE_ATTACK_104': 6.483, + 'GROW_CURVE_ATTACK_105': 5.347, + 'GROW_CURVE_CRITICAL_101': 4.594, + 'GROW_CURVE_ATTACK_201': 8.596, + 'GROW_CURVE_ATTACK_202': 9.646, + 'GROW_CURVE_ATTACK_203': 10.634, + 'GROW_CURVE_ATTACK_204': 7.478, + 'GROW_CURVE_ATTACK_205': 6.285, + 'GROW_CURVE_CRITICAL_201': 4.594, + 'GROW_CURVE_ATTACK_301': 9.468, + 'GROW_CURVE_ATTACK_302': 10.598, + 'GROW_CURVE_ATTACK_303': 11.654, + 'GROW_CURVE_ATTACK_304': 8.257, + 'GROW_CURVE_ATTACK_305': 6.955, + 'GROW_CURVE_CRITICAL_301': 4.594, + } + }, + '94': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.621, + 'GROW_CURVE_ATTACK_102': 8.643, + 'GROW_CURVE_ATTACK_103': 9.608, + 'GROW_CURVE_ATTACK_104': 6.537, + 'GROW_CURVE_ATTACK_105': 5.386, + 'GROW_CURVE_CRITICAL_101': 4.594, + 'GROW_CURVE_ATTACK_201': 8.679, + 'GROW_CURVE_ATTACK_202': 9.743, + 'GROW_CURVE_ATTACK_203': 10.744, + 'GROW_CURVE_ATTACK_204': 7.546, + 'GROW_CURVE_ATTACK_205': 6.336, + 'GROW_CURVE_CRITICAL_201': 4.594, + 'GROW_CURVE_ATTACK_301': 9.567, + 'GROW_CURVE_ATTACK_302': 10.712, + 'GROW_CURVE_ATTACK_303': 11.782, + 'GROW_CURVE_ATTACK_304': 8.339, + 'GROW_CURVE_ATTACK_305': 7.02, + 'GROW_CURVE_CRITICAL_301': 4.594, + } + }, + '95': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.689, + 'GROW_CURVE_ATTACK_102': 8.725, + 'GROW_CURVE_ATTACK_103': 9.704, + 'GROW_CURVE_ATTACK_104': 6.591, + 'GROW_CURVE_ATTACK_105': 5.425, + 'GROW_CURVE_CRITICAL_101': 4.796, + 'GROW_CURVE_ATTACK_201': 8.761, + 'GROW_CURVE_ATTACK_202': 9.84, + 'GROW_CURVE_ATTACK_203': 10.854, + 'GROW_CURVE_ATTACK_204': 7.613, + 'GROW_CURVE_ATTACK_205': 6.388, + 'GROW_CURVE_CRITICAL_201': 4.796, + 'GROW_CURVE_ATTACK_301': 9.666, + 'GROW_CURVE_ATTACK_302': 10.826, + 'GROW_CURVE_ATTACK_303': 11.91, + 'GROW_CURVE_ATTACK_304': 8.422, + 'GROW_CURVE_ATTACK_305': 7.085, + 'GROW_CURVE_CRITICAL_301': 4.796, + } + }, + '96': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.758, + 'GROW_CURVE_ATTACK_102': 8.807, + 'GROW_CURVE_ATTACK_103': 9.799, + 'GROW_CURVE_ATTACK_104': 6.646, + 'GROW_CURVE_ATTACK_105': 5.464, + 'GROW_CURVE_CRITICAL_101': 4.796, + 'GROW_CURVE_ATTACK_201': 8.844, + 'GROW_CURVE_ATTACK_202': 9.936, + 'GROW_CURVE_ATTACK_203': 10.964, + 'GROW_CURVE_ATTACK_204': 7.681, + 'GROW_CURVE_ATTACK_205': 6.439, + 'GROW_CURVE_CRITICAL_201': 4.796, + 'GROW_CURVE_ATTACK_301': 9.765, + 'GROW_CURVE_ATTACK_302': 10.94, + 'GROW_CURVE_ATTACK_303': 12.038, + 'GROW_CURVE_ATTACK_304': 8.505, + 'GROW_CURVE_ATTACK_305': 7.151, + 'GROW_CURVE_CRITICAL_301': 4.796, + } + }, + '97': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.827, + 'GROW_CURVE_ATTACK_102': 8.89, + 'GROW_CURVE_ATTACK_103': 9.894, + 'GROW_CURVE_ATTACK_104': 6.7, + 'GROW_CURVE_ATTACK_105': 5.503, + 'GROW_CURVE_CRITICAL_101': 4.796, + 'GROW_CURVE_ATTACK_201': 8.927, + 'GROW_CURVE_ATTACK_202': 10.033, + 'GROW_CURVE_ATTACK_203': 11.074, + 'GROW_CURVE_ATTACK_204': 7.748, + 'GROW_CURVE_ATTACK_205': 6.491, + 'GROW_CURVE_CRITICAL_201': 4.796, + 'GROW_CURVE_ATTACK_301': 9.864, + 'GROW_CURVE_ATTACK_302': 11.054, + 'GROW_CURVE_ATTACK_303': 12.166, + 'GROW_CURVE_ATTACK_304': 8.588, + 'GROW_CURVE_ATTACK_305': 7.216, + 'GROW_CURVE_CRITICAL_301': 4.796, + } + }, + '98': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.895, + 'GROW_CURVE_ATTACK_102': 8.972, + 'GROW_CURVE_ATTACK_103': 9.989, + 'GROW_CURVE_ATTACK_104': 6.754, + 'GROW_CURVE_ATTACK_105': 5.542, + 'GROW_CURVE_CRITICAL_101': 4.796, + 'GROW_CURVE_ATTACK_201': 9.009, + 'GROW_CURVE_ATTACK_202': 10.13, + 'GROW_CURVE_ATTACK_203': 11.184, + 'GROW_CURVE_ATTACK_204': 7.816, + 'GROW_CURVE_ATTACK_205': 6.542, + 'GROW_CURVE_CRITICAL_201': 4.796, + 'GROW_CURVE_ATTACK_301': 9.963, + 'GROW_CURVE_ATTACK_302': 11.168, + 'GROW_CURVE_ATTACK_303': 12.295, + 'GROW_CURVE_ATTACK_304': 8.671, + 'GROW_CURVE_ATTACK_305': 7.282, + 'GROW_CURVE_CRITICAL_301': 4.796, + } + }, + '99': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 7.964, + 'GROW_CURVE_ATTACK_102': 9.054, + 'GROW_CURVE_ATTACK_103': 10.084, + 'GROW_CURVE_ATTACK_104': 6.808, + 'GROW_CURVE_ATTACK_105': 5.58, + 'GROW_CURVE_CRITICAL_101': 4.796, + 'GROW_CURVE_ATTACK_201': 9.092, + 'GROW_CURVE_ATTACK_202': 10.227, + 'GROW_CURVE_ATTACK_203': 11.295, + 'GROW_CURVE_ATTACK_204': 7.883, + 'GROW_CURVE_ATTACK_205': 6.593, + 'GROW_CURVE_CRITICAL_201': 4.796, + 'GROW_CURVE_ATTACK_301': 10.062, + 'GROW_CURVE_ATTACK_302': 11.283, + 'GROW_CURVE_ATTACK_303': 12.424, + 'GROW_CURVE_ATTACK_304': 8.754, + 'GROW_CURVE_ATTACK_305': 7.347, + 'GROW_CURVE_CRITICAL_301': 4.796, + } + }, + '100': { + 'curveInfos': { + 'GROW_CURVE_ATTACK_101': 8.033, + 'GROW_CURVE_ATTACK_102': 9.137, + 'GROW_CURVE_ATTACK_103': 10.18, + 'GROW_CURVE_ATTACK_104': 6.862, + 'GROW_CURVE_ATTACK_105': 5.619, + 'GROW_CURVE_CRITICAL_101': 4.998, + 'GROW_CURVE_ATTACK_201': 9.174, + 'GROW_CURVE_ATTACK_202': 10.324, + 'GROW_CURVE_ATTACK_203': 11.405, + 'GROW_CURVE_ATTACK_204': 7.95, + 'GROW_CURVE_ATTACK_205': 6.644, + 'GROW_CURVE_CRITICAL_201': 4.998, + 'GROW_CURVE_ATTACK_301': 10.162, + 'GROW_CURVE_ATTACK_302': 11.397, + 'GROW_CURVE_ATTACK_303': 12.552, + 'GROW_CURVE_ATTACK_304': 8.837, + 'GROW_CURVE_ATTACK_305': 7.413, + 'GROW_CURVE_CRITICAL_301': 4.998, + } + }, +} + +PROP_MAP = { + 'FIGHT_PROP_BASE_HP': '基础生命值', + 'FIGHT_PROP_HP': '总生命值', + 'FIGHT_PROP_HP_PERCENT': '生命值', + 'FIGHT_PROP_BASE_ATTACK': '基础攻击力', + 'FIGHT_PROP_ATTACK': '总攻击力', + 'FIGHT_PROP_ATTACK_PERCENT': '攻击力', + 'FIGHT_PROP_BASE_DEFENSE': '基础防御力', + 'FIGHT_PROP_DEFENSE': '总防御力', + 'FIGHT_PROP_DEFENSE_PERCENT': '防御力', + 'FIGHT_PROP_CRITICAL': '暴击率', + 'FIGHT_PROP_ANTI_CRITICAL': '暴击抵抗', + 'FIGHT_PROP_CRITICAL_HURT': '暴击伤害', + 'FIGHT_PROP_CHARGE_EFFICIENCY': '元素充能效率', + 'FIGHT_PROP_HEAL_ADD': '治疗加成', + 'FIGHT_PROP_HEALED_ADD': '受治疗加成', + 'FIGHT_PROP_ELEMENT_MASTERY': '元素精通', + 'FIGHT_PROP_PHYSICAL_ADD_HURT': '物理伤害加成', + 'FIGHT_PROP_FIRE_ADD_HURT': '火元素伤害加成', + 'FIGHT_PROP_ELEC_ADD_HURT': '雷元素伤害加成', + 'FIGHT_PROP_WATER_ADD_HURT': '水元素伤害加成', + 'FIGHT_PROP_GRASS_ADD_HURT': '草元素伤害加成', + 'FIGHT_PROP_WIND_ADD_HURT': '风元素伤害加成', + 'FIGHT_PROP_ROCK_ADD_HURT': '岩元素伤害加成', + 'FIGHT_PROP_ICE_ADD_HURT': '冰元素伤害加成', + 'FIGHT_PROP_FIRE_SUB_HURT': '火元素抗性', + 'FIGHT_PROP_ELEC_SUB_HURT': '雷元素抗性', + 'FIGHT_PROP_WATER_SUB_HURT': '水元素抗性', + 'FIGHT_PROP_GRASS_SUB_HURT': '草元素抗性', + 'FIGHT_PROP_WIND_SUB_HURT': '风元素抗性', + 'FIGHT_PROP_ROCK_SUB_HURT': '岩元素抗性', + 'FIGHT_PROP_ICE_SUB_HURT': '冰元素抗性', +} diff --git a/GenshinUID/gsuid_utils/api/enka/__init__.py b/GenshinUID/gsuid_utils/api/enka/__init__.py new file mode 100644 index 00000000..8f9f9ce2 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/enka/__init__.py @@ -0,0 +1,7 @@ +"""Enka Network 包装 +参考:https://api.enka.network +""" +from .models import EnkaData as EnkaData # noqa: F401 +from .request import get_enka_info as get_enka_info # noqa: F401 + +__all__ = ["request", "models"] diff --git a/GenshinUID/gsuid_utils/api/enka/models.py b/GenshinUID/gsuid_utils/api/enka/models.py new file mode 100644 index 00000000..b0b230cd --- /dev/null +++ b/GenshinUID/gsuid_utils/api/enka/models.py @@ -0,0 +1,113 @@ +from __future__ import annotations + +import sys +from typing import List, Literal, TypedDict + +# https://peps.python.org/pep-0655/#usage-in-python-3-11 +if sys.version_info >= (3, 11): + from typing import NotRequired +else: + from typing_extensions import NotRequired + + +class EnkaData(TypedDict): + playerInfo: PlayerInfo + avatarInfoList: List[AvatarInfoListItem] + ttl: int + uid: str + + +class PlayerInfo(TypedDict): + nickname: str + level: int + signature: str + worldLevel: int + nameCardId: int + finishAchievementNum: int + towerFloorIndex: int + towerLevelIndex: int + showAvatarInfoList: List[ShowAvatarInfoListItem] + showNameCardIdList: List[int] + profilePicture: ProfilePicture + + +class ShowAvatarInfoListItem(TypedDict): + avatarId: int + level: int + costumeId: NotRequired[int] + + +class ProfilePicture(TypedDict): + avatarId: int + + +class AvatarInfoListItem(TypedDict): + avatarId: int + propMap: dict[str, PropMap] + talentIdList: List[int] + fightPropMap: dict[str, float] + skillDepotId: int + inherentProudSkillList: List[int] + skillLevelMap: dict[str, int] + equipList: List[Equip] + fetterInfo: FetterInfo + + +class Equip(TypedDict): + itemId: int + reliquary: Reliquary + weapon: Weapon + flat: Flat + + +class Flat(TypedDict): + # l10n + nameTextMapHash: str + setNameTextMapHash: str + + # artifact + reliquaryMainstat: Stat + reliquarySubstats: List[Stat] + equipType: Literal[ + "EQUIP_BRACER", + "EQUIP_NECKLACE", + "EQUIP_SHOES", + "EQUIP_RING", + "EQUIP_DRESS", + ] + + # weapon + weaponStats: List[Stat] + + rankLevel: Literal[3, 4, 5] + itemType: Literal["ITEM_WEAPON", "ITEM_RELIQUARY"] + icon: str # https://enka.network/ui/{Icon}.png + + +class Stat(TypedDict): + mainPropId: str + appendPropId: str + statName: str + statValue: float | int + + +class Weapon(TypedDict): + level: int + promoteLevel: int + affixMap: dict[str, int] + + +class Reliquary(TypedDict): + level: int + mainPropId: int + appendPropIdList: List[int] + + +class PropMap(TypedDict): + type: int + ival: str # Ignore It! + val: str + + +class FetterInfo(TypedDict): + expLevel: int diff --git a/GenshinUID/gsuid_utils/api/enka/request.py b/GenshinUID/gsuid_utils/api/enka/request.py new file mode 100644 index 00000000..c53327f1 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/enka/request.py @@ -0,0 +1,36 @@ +'''Enka Network 请求模块。 +MiniGG Enka 加速服务在此模块内。 +''' +from __future__ import annotations + +from typing import Literal + +from httpx import AsyncClient + +from .models import EnkaData +from ...version import __version__ + +ADDRESS = { + 'enka': 'https://enka.network', + 'microgg': 'https://profile.microgg.cn', +} + + +async def get_enka_info( + uid: str, address: Literal['enka', 'microgg'] = 'enka' +) -> EnkaData: + '''请求 Enka Network + + Args: + uid (str): 原神 UID + address (Literal["enka", "microgg", "minigg"], optional): API 地址. Defaults to 'enka'. + + Returns: + EnkaData: Enka Network 响应数据 + ''' # noqa: E501 + async with AsyncClient( + base_url=ADDRESS[address], + headers={'User-Agent': f'gsuid-utils/{__version__}'}, + ) as client: + req = await client.get(url=f'/api/uid/{uid}') + return req.json() diff --git a/GenshinUID/gsuid_utils/api/hhw/__init__.py b/GenshinUID/gsuid_utils/api/hhw/__init__.py new file mode 100644 index 00000000..4a540023 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/hhw/__init__.py @@ -0,0 +1,7 @@ +""" +内鬼网(hhw) API 包装: +深渊出场数据; +""" +from .request import get_abyss_review as get_abyss_review # noqa: F401 + +__all__ = ["request"] diff --git a/GenshinUID/gsuid_utils/api/hhw/request.py b/GenshinUID/gsuid_utils/api/hhw/request.py new file mode 100644 index 00000000..ab3f731c --- /dev/null +++ b/GenshinUID/gsuid_utils/api/hhw/request.py @@ -0,0 +1,54 @@ +''' +内鬼网(hhw) API 请求模块。 +''' +from __future__ import annotations + +from typing import Dict, Union, Optional + +from httpx import AsyncClient +from bs4 import BeautifulSoup, NavigableString + +from ...version import __version__ + +HHW_ABYSS = 'https://genshin.honeyhunterworld.com/d_1001/?lang=CHS' + + +async def get_abyss_review( + raw_data: bytes, _id: Union[str, int], floor: Union[str, int] +) -> Optional[Dict[str, str]]: + '''请求内鬼网 API 深渊怪物数据 + + Returns: + Dict: 内鬼网 API 深渊怪物数据 + ''' # noqa: E501 + bs = BeautifulSoup(raw_data, 'lxml') + data = bs.find('section', {'id': f'Variant #{_id}'}) + + if data is None or isinstance(data, NavigableString): + return None + + floor_data = data.find_all('td') + abyss_list = [] + result = {} + for index, td in enumerate(floor_data): + temp = [] + if 'Monsters' in td.text: + monsters = floor_data[index + 1].find_all('a') + for monster in monsters: + if monster.text: + temp.append(monster.text) + if temp: + abyss_list.append(temp) + + for index, half in enumerate(['-1上', '-1下', '-2上', '-2下', '-3上', '-3下']): + result[f'{floor}{half}'] = abyss_list[index] + + return result + + +async def get_abyss_review_raw() -> bytes: + async with AsyncClient( + headers={'User-Agent': f'gsuid-utils/{__version__}'}, + ) as client: + req = await client.get(url=HHW_ABYSS) + return req.read() diff --git a/GenshinUID/gsuid_utils/api/minigg/__init__.py b/GenshinUID/gsuid_utils/api/minigg/__init__.py new file mode 100644 index 00000000..13af556f --- /dev/null +++ b/GenshinUID/gsuid_utils/api/minigg/__init__.py @@ -0,0 +1,36 @@ +""" +MiniGG API 包装: +原神基础信息 v4/v5; +原神语音; +原神地图; +""" +from .models import Food as Food # noqa: F401 +from .models import Costs as Costs # noqa: F401 +from .models import Enemy as Enemy # noqa: F401 +from .models import Domain as Domain # noqa: F401 +from .models import Weapon as Weapon # noqa: F401 +from .models import Artifact as Artifact # noqa: F401 +from .models import Material as Material # noqa: F401 +from .models import Character as Character # noqa: F401 +from .models import WeaponStats as WeaponStats # noqa: F401 +from .request import get_map_data as get_map_data # noqa: F401 +from .models import CharacterStats as CharacterStats # noqa: F401 +from .request import get_audio_info as get_audio_info # noqa: F401 +from .request import get_others_info as get_others_info # noqa: F401 +from .request import get_talent_info as get_talent_info # noqa: F401 +from .request import get_weapon_info as get_weapon_info # noqa: F401 +from .models import CharacterTalents as CharacterTalents # noqa: F401 +from .request import get_weapon_costs as get_weapon_costs # noqa: F401 +from .request import get_weapon_stats as get_weapon_stats # noqa: F401 +from .request import get_character_info as get_character_info # noqa: F401 +from .request import get_character_costs as get_character_costs # noqa: F401 +from .request import get_character_stats as get_character_stats # noqa: F401 +from .exception import MiniggNotFoundError as MiniggNotFoundError # noqa: F401 +from .request import ( # noqa: F401 + get_constellation_info as get_constellation_info, +) +from .models import ( # noqa: F401 + CharacterConstellations as CharacterConstellations, +) + +__all__ = ["request", "exception", "models"] diff --git a/GenshinUID/gsuid_utils/api/minigg/exception.py b/GenshinUID/gsuid_utils/api/minigg/exception.py new file mode 100644 index 00000000..38861450 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/minigg/exception.py @@ -0,0 +1,17 @@ +from typing import Any + +from ..types import AnyDict + + +class MiniggNotFoundError(Exception): + """MiniGG API 未找到报错""" + + def __init__(self, **raw: Any) -> None: + self.raw: AnyDict = raw + + def __repr__(self) -> str: + raw = self.raw + return f"" + + def __str__(self) -> str: + return repr(self) diff --git a/GenshinUID/gsuid_utils/api/minigg/models.py b/GenshinUID/gsuid_utils/api/minigg/models.py new file mode 100644 index 00000000..697c76fa --- /dev/null +++ b/GenshinUID/gsuid_utils/api/minigg/models.py @@ -0,0 +1,359 @@ +""" +MiniGG API 响应模型。 +""" +# TODO: - @KimigaiiWuyi 补文档 +from __future__ import annotations + +import sys +from typing import Dict, List, Literal, TypedDict + +# https://peps.python.org/pep-0655/#usage-in-python-3-11 +if sys.version_info >= (3, 11): + from typing import NotRequired +else: + from typing_extensions import NotRequired + +# https://peps.python.org/pep-0613 +if sys.version_info >= (3, 10): + from typing import TypeAlias +else: + from typing_extensions import TypeAlias + +R: TypeAlias = List[str] + + +class FandomUrl(TypedDict): + fandom: str + + +class WeaponImage(TypedDict): + image: str + nameicon: str + namegacha: str + icon: str + nameawakenicon: str + awakenicon: str + + +class AscendItem(TypedDict): + name: str + count: int + + +class Costs(TypedDict): + ascend1: List[AscendItem] + ascend2: List[AscendItem] + ascend3: List[AscendItem] + ascend4: List[AscendItem] + ascend5: List[AscendItem] + ascend6: List[AscendItem] + + +class Weapon(TypedDict): + name: str + description: str + weapontype: str + rarity: str + baseatk: int + substat: str + subvalue: str + effectname: str + effect: str + r1: R + r2: R + r3: R + r4: R + r5: R + weaponmaterialtype: str + images: WeaponImage + url: NotRequired[FandomUrl] + version: str + costs: Costs + + +class WeaponStats(TypedDict): + level: int + ascension: int + attack: float + specialized: float + + +class Character(TypedDict): + name: str + fullname: str + title: str + description: str + rarity: str + element: str + weapontype: str + substat: str + gender: Literal['男', '女'] + body: str + association: str + region: Literal['蒙德', '璃月', '稻妻', '须弥', '枫丹', '纳塔', '至冬', '穆纳塔'] + affiliation: str + birthdaymmdd: str + birthday: str + constellation: str + cv: CharacterCv + costs: Costs + image: CharacterImage + url: FandomUrl + version: str + + +class CharacterCv(TypedDict): + english: str + chinese: str + japanese: str + korean: str + + +class CharacterImage(TypedDict): + card: str + portrait: str + icon: str + sideicon: str + cover1: str + cover2: str + hoyolab_avatar: str + nameicon: str + nameiconcard: str + namegachasplash: str + namegachaslice: str + namesideicon: str + + +class CharacterStats(TypedDict): + level: int + ascension: int + hp: float + attack: float + defense: float + specialized: float + + +class CharacterConstellations(TypedDict): + name: str + c1: CharacterConstellation + c2: CharacterConstellation + c3: CharacterConstellation + c4: CharacterConstellation + c5: CharacterConstellation + c6: CharacterConstellation + images: ConstellationsImage + version: str + + +class CharacterConstellation(TypedDict): + name: str + effect: str + + +class ConstellationsImage(TypedDict): + c1: str + c2: str + c3: str + c4: str + c5: str + c6: str + + +class MiniGGError(TypedDict): + retcode: int + error: str + + +class CharacterTalents(TypedDict): + name: str + combat1: TalentCombat + combat2: TalentCombat + combat3: TalentCombat + passive1: TalentPassive + passive2: TalentPassive + passive3: TalentPassive + passive4: NotRequired[TalentPassive] + costs: TalentsCosts + images: TalentsImages + + +class TalentsCosts(TypedDict): + lvl2: List[AscendItem] + lvl3: List[AscendItem] + lvl4: List[AscendItem] + lvl5: List[AscendItem] + lvl6: List[AscendItem] + lvl7: List[AscendItem] + lvl8: List[AscendItem] + lvl9: List[AscendItem] + lvl10: List[AscendItem] + + +class TalentsImages(TypedDict): + combat1: str + combat2: str + combat3: str + passive1: str + passive2: str + passive3: str + passive4: NotRequired[str] + + +class TalentCombat(TypedDict): + name: str + info: str + description: NotRequired[str] + attributes: TalentAttr + + +class TalentPassive(TypedDict): + name: str + info: str + + +class TalentAttr(TypedDict): + labels: List[str] + parameters: Dict[str, List[float]] + + +class Food(TypedDict): + name: str + rarity: str + foodtype: str + foodfilter: str + foodcategory: str + effect: str + description: str + suspicious: FoodEffect + normal: FoodEffect + delicious: FoodEffect + ingredients: List[AscendItem] + images: Image + url: FandomUrl + version: str + + +class FoodEffect(TypedDict): + effect: str + description: str + + +class Image(TypedDict): + nameicon: str + + +class Enemy(TypedDict): + name: str + specialname: str + enemytype: str + category: str + description: str + investigation: EnemyInvest + rewardpreview: List[EnemyReward] + images: Image + version: str + + +class EnemyReward(TypedDict): + name: str + count: NotRequired[float] + + +class EnemyInvest(TypedDict): + name: str + category: str + description: str + + +class Domain(TypedDict): + name: str + region: Literal['蒙德', '璃月', '稻妻', '须弥', '枫丹', '纳塔', '至冬', '穆纳塔'] + domainentrance: str + domaintype: str + description: str + recommendedlevel: int + recommendedelements: List[ + Literal['冰元素', '火元素', '雷元素', '水元素', '草元素', '岩元素', '风元素'] + ] + daysofweek: List[Literal['周日', '周一', '周二', '周三', '周四', '周五', '周六']] + unlockrank: int + rewardpreview: List[EnemyReward] + disorder: List[str] + monsterlist: List[str] + images: Image + version: str + + +class Piece(TypedDict): + name: str + description: str + story: str + + +class PieceFlower(Piece): + relictype: Literal['生之花'] + + +class PiecePlume(Piece): + relictype: Literal['死之羽'] + + +class PieceSands(Piece): + relictype: Literal['时之沙'] + + +class PieceGoblet(Piece): + relictype: Literal['空之杯'] + + +class PieceCirclet(Piece): + relictype: Literal['理之冠'] + + +class PieceImages(TypedDict): + flower: str + plume: str + sands: str + goblet: str + circlet: str + nameflower: str + nameplume: str + namesands: str + namegoblet: str + namecirclet: str + + +Artifact = TypedDict( + 'Artifact', + { + 'name': str, + 'rarity': List[str], + '2pc': str, + '4pc': str, + 'flower': PieceFlower, + 'plume': PiecePlume, + 'sands': PieceSands, + 'goblet': PieceGoblet, + 'circlet': PieceCirclet, + 'images': PieceImages, + 'url': FandomUrl, + 'version': str, + }, +) + + +class MaterialImage(TypedDict): + nameicon: str + redirect: str + + +class Material(TypedDict): + name: str + description: str + sortorder: int + rarity: str + category: str + materialtype: str + source: List[str] + images: MaterialImage + version: str diff --git a/GenshinUID/gsuid_utils/api/minigg/request.py b/GenshinUID/gsuid_utils/api/minigg/request.py new file mode 100644 index 00000000..67549d94 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/minigg/request.py @@ -0,0 +1,448 @@ +''' +MiniGG API v4/v5 请求模块。 +参考:https://blog.minigg.cn/g/18 +MiniGG Enka 加速服务不在此模块内。 +''' +from __future__ import annotations + +import warnings +from enum import Enum +from typing import Any, Dict, List, Union, Literal, Optional, cast, overload + +from httpx import AsyncClient + +from ..types import AnyDict +from .exception import MiniggNotFoundError +from .models import ( + Food, + Costs, + Enemy, + Domain, + Weapon, + Artifact, + Material, + Character, + MiniGGError, + WeaponStats, + CharacterStats, + CharacterTalents, + CharacterConstellations, +) + +MINIGG_AUDIO_URL = 'https://genshin.minigg.cn/' +MINIGG_URL = 'https://info.minigg.cn' +MINIGG_MAP_URL = 'https://map.minigg.cn/map/get_map' + + +class APILanguages(str, Enum): + '''API 语言列表''' + + CHS = 'CN' + '''简体中文''' + CN = 'CN' + '''简体中文''' + + JP = 'JP' + '''日语''' + JA = 'JP' + '''日语''' + + EN = 'EN' + '''英语''' + ENG = 'EN' + '''英语''' + + KR = 'KR' + '''韩语''' + KA = 'KR' + '''韩语''' + + CHT = 'CHT' + '''繁体中文''' + FR = 'FR' + '''法语''' + DE = 'DE' + '''德语''' + ID = 'ID' + '''印度尼西亚语''' + PT = 'PT' + '''葡萄牙语''' + RU = 'RU' + '''俄语''' + ES = 'ES' + '''西班牙语''' + TH = 'TH' + '''泰语''' + VI = 'VI' + '''越南语''' + + +async def get_map_data( + resource_name: str, map_id: str, is_cluster: bool = False +) -> bytes: + '''返回地图信息。 + + Args: + resource_name (str): 资源点名称。 + map_id (str): 地图ID。 + is_cluster (bool, optional): 是否使用 K-Means 聚类算法。 Defaults to False. + + Raises: + MiniggNotFoundError: 资源未找到。 + + Returns: + bytes: 图片。 + ''' + async with AsyncClient() as client: + req = await client.get( + url=MINIGG_MAP_URL, + params={ + 'resource_name': resource_name, + 'map_id': map_id, + 'is_cluster': is_cluster, + }, + ) + if req.headers['content-type'] == 'image/jpeg': + return req.content + else: + raise MiniggNotFoundError(**req.json()) + + +async def get_audio_info( + name: str, audio_id: str, language: str = 'cn' +) -> str: + '''`@deprecated: API is invalid` 访问 MiniGG API 获得原神角色音频信息。 + + Args: + name (str): 原神角色名称。 + audio_id (str): 语音id。 + language (str, optional): 语言。 Defaults to 'cn'. + + Returns: + str: 语音 URL。 + ''' + warnings.warn('Audio API is already deprecated.', DeprecationWarning) + async with AsyncClient() as client: + req = await client.get( + url=MINIGG_AUDIO_URL, + params={ + 'characters': name, + 'audioid': audio_id, + 'language': language, + }, + ) + return req.text + + +async def minigg_request( + endpoint: str, + query: str, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, + match_categories: bool = False, + **kwargs: Any, +) -> Union[AnyDict, List[str], MiniGGError]: + '''请求 MiniGG API。 + + Args: + endpoint (str): 终结点。 + query (str): 查询名称。 + query_languages (APILanguages, optional): 查询语言。 + Defaults to APILanguages.CHS. + result_languages (APILanguages, optional): 返回语言。 + Defaults to APILanguages.CHS. + match_categories (bool, optional): 是否查询类别。 Defaults to False. + + Raises: + MiniggNotFoundError: 查询内容未找到。 + + Returns: + AnyDict | list[str]: 返回列表时,列表每一项元素都符合根据名称匹配的实际名称;返回字典则是此名称的实际数据。 + ''' + params = { + 'query': query, + 'queryLanguages': query_languages.value, + 'resultLanguage': result_languages.value, + **kwargs, + } + if match_categories: + params['matchCategories'] = '1' + async with AsyncClient(base_url=MINIGG_URL) as client: + req = await client.get(endpoint, params=params) + data = req.json() + if 'retcode' in data: + return cast(MiniGGError, data) + if req.status_code == 404: + raise MiniggNotFoundError(**data) + return data + + +async def get_weapon_info( + name: str, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[Weapon, List[str], MiniGGError]: + '''获取武器信息 + + Args: + name (str): 武器名称或类别名称。 + + **其他参数另见 `minigg_request`。** + + Raises: + MiniggNotFoundError: 武器未找到。 + + Returns: + Weapon | list[str]: 武器信息,如果为列表,则每个元素都是武器名。 + `get_weapon_costs` 和 `get_weapon_stats` 同 + ''' + data = await minigg_request( + '/weapons', + name, + query_languages=query_languages, + result_languages=result_languages, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + data = cast(Weapon, data) + return data + + +async def get_weapon_costs( + name: str, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[Weapon, List[str], MiniGGError]: + '''获取武器信息(花费) + + Args: + name (str): 武器名称或类别名称。 + + **其他参数另见 `minigg_request`。** + + Raises: + MiniggNotFoundError: 武器未找到。 + + Returns: + WeaponCosts | list[str]: 武器花费。 + ''' + data = await minigg_request( + '/weapons', + name, + query_languages=query_languages, + result_languages=result_languages, + costs=True, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + data = cast(Weapon, data) + return data + + +async def get_weapon_stats( + name: str, + stats: int, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[WeaponStats, List[str], MiniGGError]: + '''_summary_ + + Args: + name (str): 武器名称或类别名称。 + stats (int): 查询指定武器在这个等级的基础面板。 + + **其他参数另见 `minigg_request`。** + + Raises: + MiniggNotFoundError: 武器未找到。 + ValueError: stats 大于 90 或小于等于 0。 + + Returns: + WeaponStats: 武器等级基础面板。 + ''' + if stats > 90 or stats <= 0: + raise ValueError('stats must <= 90 and > 0') + + data = await minigg_request( + '/weapons', + name, + query_languages=query_languages, + result_languages=result_languages, + stats=stats, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + data = cast(WeaponStats, data) + return data + + +async def get_character_info( + name: str, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[Character, List[str], MiniGGError]: + data = await minigg_request( + '/characters', + name, + query_languages=query_languages, + result_languages=result_languages, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + data = cast(Character, data) + return data + + +async def get_character_costs( + name: str, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[Costs, MiniGGError]: + data = await minigg_request( + '/characters', + name, + query_languages=query_languages, + result_languages=result_languages, + Costs=True, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + return cast(Costs, data) + else: + return MiniGGError(retcode=-1, error='未知错误') + + +async def get_character_stats( + name: str, + stats: int, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[CharacterStats, MiniGGError]: + if stats > 90 or stats <= 0: + raise ValueError('stats must <= 90 and > 0') + + data = await minigg_request( + '/characters', + name, + query_languages=query_languages, + result_languages=result_languages, + stats=stats, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + return cast(CharacterStats, data) + else: + return MiniGGError(retcode=-1, error='未知错误') + + +async def get_constellation_info( + name: str, + c: Optional[int] = None, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[CharacterConstellations, MiniGGError]: + if c and (c > 6 or c <= 0): + raise ValueError('c must <= 6 and > 0') + + data = await minigg_request( + '/constellations', + name, + query_languages=query_languages, + result_languages=result_languages, + c=c, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + return cast(CharacterConstellations, data) + else: + return MiniGGError(retcode=-1, error='未知错误') + + +async def get_talent_info( + name: str, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[CharacterTalents, MiniGGError]: + data = await minigg_request( + '/talents', + name, + query_languages=query_languages, + result_languages=result_languages, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + return cast(CharacterTalents, data) + else: + return MiniGGError(retcode=-1, error='未知错误') + + +@overload +async def get_others_info( + type: Literal['foods'], name: str +) -> Union[Food, MiniGGError]: + ... + + +@overload +async def get_others_info( + type: Literal['enemies'], name: str +) -> Union[Enemy, MiniGGError]: + ... + + +@overload +async def get_others_info( + type: Literal['domains'], name: str +) -> Union[Domain, MiniGGError]: + ... + + +@overload +async def get_others_info( + type: Literal['artifacts'], name: str +) -> Union[Artifact, MiniGGError]: + ... + + +@overload +async def get_others_info( + type: Literal['materials'], name: str +) -> Union[Material, MiniGGError]: + ... + + +async def get_others_info( + type: Literal['foods', 'enemies', 'domains', 'artifacts', 'materials'], + name: str, + query_languages: APILanguages = APILanguages.CHS, + result_languages: APILanguages = APILanguages.CHS, +) -> Union[Food, Material, Domain, Artifact, Enemy, MiniGGError]: + data = await minigg_request( + f'/{type}', + name, + query_languages=query_languages, + result_languages=result_languages, + ) + if isinstance(data, MiniGGError): + return data + elif isinstance(data, Dict): + if type == 'foods': + return cast(Food, data) + elif type == 'materials': + return cast(Material, data) + elif type == 'domains': + return cast(Domain, data) + elif type == 'artifacts': + return cast(Artifact, data) + elif type == 'enemies': + return cast(Enemy, data) + else: + return MiniGGError(retcode=-1, error='未知错误') diff --git a/GenshinUID/gsuid_utils/api/mys/__init__.py b/GenshinUID/gsuid_utils/api/mys/__init__.py new file mode 100644 index 00000000..ef372f75 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/mys/__init__.py @@ -0,0 +1,17 @@ +""" +米游社 API 包装 +""" + +from .request import MysApi # noqa: F401 +from .models import ( # noqa: F401 + AbyssData, + IndexData, + MihoyoRole, + MihoyoAvatar, + MihoyoWeapon, + DailyNoteData, + MihoyoReliquary, + MihoyoConstellation, +) + +__all__ = ["models", 'request'] diff --git a/GenshinUID/gsuid_utils/api/mys/api.py b/GenshinUID/gsuid_utils/api/mys/api.py new file mode 100644 index 00000000..5552ce41 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/mys/api.py @@ -0,0 +1,119 @@ +# flake8: noqa +OLD_URL = 'https://api-takumi.mihoyo.com' +NEW_URL = 'https://api-takumi-record.mihoyo.com' +BBS_URL = 'https://bbs-api.mihoyo.com' +HK4_URL = 'https://hk4e-api.mihoyo.com' + +OLD_URL_OS = 'https://api-os-takumi.mihoyo.com' +NEW_URL_OS = 'https://bbs-api-os.hoyolab.com' +BBS_URL_OS = 'https://bbs-api-os.hoyolab.com' +HK4_URL_OS = 'https://hk4e-api-os.hoyoverse.com' +SIGN_URL_OS = 'https://sg-hk4e-api.hoyolab.com' +ACT_URL_OS = 'https://sg-hk4e-api.hoyoverse.com' + +HK4E_LOGIN_URL = f'{OLD_URL}/common/badge/v1/login/account' +HK4E_LOGIN_URL_OS = f'{OLD_URL_OS}/common/badge/v1/login/account' + +BBS_TASKLIST = f'{BBS_URL}/apihub/sapi/getUserMissionsState' + +PASSPORT_URL = "https://passport-api.mihoyo.com" +HK4_SDK_URL = "https://hk4e-sdk.mihoyo.com" + +'''GT''' +# AJAX 无感验证 +GT_TEST = 'https://api.geetest.com/ajax.php?' +GT_TEST_V6 = 'https://apiv6.geetest.com/ajax.php?' +GT_QUERY = 'gt={}&challenge={}&lang=zh-cn&pt=3&client_type=web_mobile' + +GT_TEST_URL = GT_TEST + GT_QUERY +GT_TEST_URL_V6 = GT_TEST_V6 + GT_QUERY + +GT_TPYE_URL = 'https://api.geetest.com/gettype.php?gt={}' +VERIFICATION_URL = ( + f'{NEW_URL}/game_record/app/card/wapi/createVerification?is_high=false' +) +VERIFY_URL = f'{NEW_URL}/game_record/app/card/wapi/verifyVerification' + +'''账号相关''' +# 通过LoginTicket获取Stoken +GET_STOKEN_URL = f'{OLD_URL}/auth/api/getMultiTokenByLoginTicket' +# 通过Stoken获取Cookie_token +GET_COOKIE_TOKEN_URL = f'{OLD_URL}/auth/api/getCookieAccountInfoBySToken' +# 通过Stoken获取AuthKey +GET_AUTHKEY_URL = f'{OLD_URL}/binding/api/genAuthKey' +# 通过AuthKey获取gachalogs +GET_GACHA_LOG_URL = f'{HK4_URL}/event/gacha_info/api/getGachaLog' +GET_GACHA_LOG_URL_OS = f'{HK4_URL_OS}/event/gacha_info/api/getGachaLog' +# 通过GameToken获取Stoken +GET_STOKEN = f"{PASSPORT_URL}/account/ma-cn-session/app/getTokenByGameToken" +# 创建登录URL +CREATE_QRCODE = f"{HK4_SDK_URL}/hk4e_cn/combo/panda/qrcode/fetch" +# 检查二维码扫描状态 +CHECK_QRCODE = f"{HK4_SDK_URL}/hk4e_cn/combo/panda/qrcode/query" +# 通过GameToken获取Cookie_token +GET_COOKIE_TOKEN_BY_GAME_TOKEN = ( + f"{OLD_URL}/auth/api/getCookieAccountInfoByGameToken" +) + +'''米游社相关''' +# 获取签到列表 +SIGN_LIST_URL = f'{OLD_URL}/event/bbs_sign_reward/home' +SIGN_LIST_URL_OS = f'{SIGN_URL_OS}/event/sol/home' +# 获取签到信息 +SIGN_INFO_URL = f'{OLD_URL}/event/bbs_sign_reward/info' +SIGN_INFO_URL_OS = f'{SIGN_URL_OS}/event/sol/info' +# 执行签到 +SIGN_URL = f'{OLD_URL}/event/bbs_sign_reward/sign' +SIGN_URL_OS += '/event/sol/sign' + +'''原神相关''' +# 每日信息 树脂 派遣等 +DAILY_NOTE_URL = f'{NEW_URL}/game_record/app/genshin/api/dailyNote' +DAILY_NOTE_URL_OS = f'{NEW_URL_OS}/game_record/genshin/api/dailyNote' +# 每月札记 +MONTHLY_AWARD_URL = f'{HK4_URL}/event/ys_ledger/monthInfo' +MONTHLY_AWARD_URL_OS = f'{HK4_URL_OS}/event/ysledgeros/month_info' +# 获取角色基本信息 +PLAYER_INFO_URL = f'{NEW_URL}/game_record/app/genshin/api/index' +PLAYER_INFO_URL_OS = f'{NEW_URL_OS}/game_record/genshin/api/index' +# 获取深渊信息 +PLAYER_ABYSS_INFO_URL = f'{NEW_URL}/game_record/app/genshin/api/spiralAbyss' +PLAYER_ABYSS_INFO_URL_OS = f'{NEW_URL_OS}/game_record/genshin/api/spiralAbyss' +# 获取详细角色信息 +PLAYER_DETAIL_INFO_URL = f'{NEW_URL}/game_record/app/genshin/api/character' +PLAYER_DETAIL_INFO_URL_OS = f'{NEW_URL_OS}/game_record/genshin/api/character' +# 天赋计算器API 获取天赋等级信息 +CALCULATE_INFO_URL = ( + f'{OLD_URL}/event/e20200928calculate/v1/sync/avatar/detail' +) +CALCULATE_INFO_URL_OS = ( + 'https://sg-public-api.hoyoverse.com/event/calculateos/sync/avatar/detail' +) +# 获取米游社内的角色信息 mysid -> uid +MIHOYO_BBS_PLAYER_INFO_URL = ( + f'{NEW_URL}/game_record/card/wapi/getGameRecordCard' +) +MIHOYO_BBS_PLAYER_INFO_URL_OS = ( + f'{NEW_URL_OS}/game_record/card/wapi/getGameRecordCard' +) + +# 获取七圣召唤相关信息 +GCG_INFO = f'{NEW_URL}/game_record/app/genshin/api/gcg/basicInfo' +GCG_INFO_OS = f'{NEW_URL_OS}/game_record/genshin/api/gcg/basicInfo' + +# 获取注册时间API 绘忆星辰 +REG_TIME = f'{HK4_URL}/event/e20220928anniversary/game_data?' +REG_TIME_OS = f'{ACT_URL_OS}/event/e20220928anniversary/game_data?' + +# 米游社的API列表 +bbs_Taskslist = f'{BBS_URL}/apihub/sapi/getUserMissionsState' +bbs_Signurl = f'{BBS_URL}/apihub/app/api/signIn' +bbs_Listurl = ( + BBS_URL + '/post/api/getForumPostList?' + 'forum_id={}&is_good=false&is_hot=false&page_size=20&sort_type=1' +) +bbs_Detailurl = BBS_URL + '/post/api/getPostFull?post_id={}' +bbs_Shareurl = BBS_URL + '/apihub/api/getShareConf?entity_id={}&entity_type=1' +bbs_Likeurl = f'{BBS_URL}/apihub/sapi/upvotePost' + +_API = locals() diff --git a/GenshinUID/gsuid_utils/api/mys/models.py b/GenshinUID/gsuid_utils/api/mys/models.py new file mode 100644 index 00000000..dff192ed --- /dev/null +++ b/GenshinUID/gsuid_utils/api/mys/models.py @@ -0,0 +1,593 @@ +from __future__ import annotations + +import sys +from typing import List, Literal, Optional, TypedDict + +# https://peps.python.org/pep-0655/#usage-in-python-3-11 +if sys.version_info >= (3, 11): + from typing import NotRequired +else: + from typing_extensions import NotRequired + + +# Response about +# https://api-takumi-record.mihoyo.com/game_record/app/genshin/api/index +# https://api-takumi-record.mihoyo.com/game_record/app/genshin/api/character +# 玩家、武器、圣遗物、角色模型 + + +class MihoyoRole(TypedDict): + AvatarUrl: str + nickname: str + region: str + level: int + + +class MihoyoWeapon(TypedDict): + id: int + name: str + icon: str + type: int + rarity: int + level: int + promote_level: int + type_name: Literal['单手剑', '双手剑', '长柄武器', '弓', '法器'] + desc: str + affix_level: int + + +class ReliquaryAffix(TypedDict): + activation_number: int + effect: str + + +class ReliquarySet(TypedDict): + id: int + name: str + affixes: List[ReliquaryAffix] + + +class MihoyoReliquary(TypedDict): + id: int + name: str + icon: str + pos: int + rarity: int + level: int + set: ReliquarySet + pos_name: str + + +class MihoyoConstellation(TypedDict): + id: int + name: str + icon: str + effect: str + is_actived: bool + pos: int + + +class MihoyoCostume(TypedDict): + id: int + name: str + icon: str + + +class MihoyoAvatar(TypedDict): + id: int + image: str + icon: str + '''在api/character接口有''' + name: str + element: Literal[ + 'Geo', 'Anemo', 'Dendro', 'Electro', 'Pyro', 'Cryo', 'Hydro' + ] + fetter: int + level: int + rarity: int + weapon: MihoyoWeapon + '''在api/character接口有''' + reliquaries: List[MihoyoReliquary] + '''在api/character接口有''' + constellations: List[MihoyoConstellation] + '''在api/character接口有''' + actived_constellation_num: int + costumes: List[MihoyoCostume] + '''在api/character接口有''' + card_image: str + '''在api/index接口有''' + is_chosen: bool + '''在api/index接口有''' + + +# Response +# https://api-takumi-record.mihoyo.com/game_record/app/genshin/api/spiralAbyss + + +class AbyssAvatar(TypedDict): + avatar_id: int + avatar_icon: str + value: int + rarity: int + + +class AbyssBattleAvatar(TypedDict): + id: int + icon: str + level: int + rarity: int + + +class AbyssBattle(TypedDict): + index: int + timestamp: str + avatars: List[AbyssBattleAvatar] + + +class AbyssLevel(TypedDict): + index: int + star: int + max_star: int + battles: List[AbyssBattle] + + +class AbyssFloor(TypedDict): + index: int + icon: str + is_unlock: bool + settle_time: str + star: int + max_star: int + levels: List[AbyssLevel] + + +class AbyssData(TypedDict): + schedule_id: int + start_time: str + end_time: str + total_battle_times: int + total_win_times: int + max_floor: str + reveal_rank: List[AbyssAvatar] + defeat_rank: List[AbyssAvatar] + damage_rank: List[AbyssAvatar] + take_damage_rank: List[AbyssAvatar] + normal_skill_rank: List[AbyssAvatar] + energy_skill_rank: List[AbyssAvatar] + floors: List[AbyssFloor] + total_star: int + is_unlock: bool + + +# Response +# https://api-takumi-record.mihoyo.com/game_record/app/genshin/api/dailyNote + + +class Expedition(TypedDict): + avatar_side_icon: str + status: Literal['Ongoing', 'Finished'] + remained_time: int + + +class RecoveryTime(TypedDict): + Day: int + Hour: int + Minute: int + Second: int + reached: bool + + +class Transformer(TypedDict): + obtained: bool + recovery_time: RecoveryTime + wiki: str + noticed: bool + latest_job_id: str + + +class DailyNoteData(TypedDict): + current_resin: int + max_resin: int + resin_recovery_time: int + finished_task_num: int + total_task_num: int + is_extra_task_reward_received: bool + remain_resin_discount_num: int + resin_discount_num_limit: int + current_expedition_num: int + max_expedition_num: int + expeditions: List[Expedition] + current_home_coin: int + max_home_coin: int + home_coin_recovery_time: int + calendar_url: str + transformer: Transformer + + +# Response from https://api-takumi.mihoyo.com/game_record/app/genshin/api/index + + +class Stats(TypedDict): + active_day_number: int + achievement_number: int + anemoculus_number: int + geoculus_number: int + avatar_number: int + way_point_number: int + domain_number: int + spiral_abyss: str + precious_chest_number: int + luxurious_chest_number: int + exquisite_chest_number: int + common_chest_number: int + electroculus_number: int + magic_chest_number: int + dendroculus_number: int + + +class Offering(TypedDict): + name: str + level: int + icon: str + + +class WorldExploration(TypedDict): + level: int + exploration_percentage: int + icon: str + name: str + type: str + offerings: List[Offering] + id: int + parent_id: int + map_url: str + strategy_url: str + background_image: str + inner_icon: str + cover: str + + +class Home(TypedDict): + level: int + visit_num: int + comfort_num: int + item_num: int + name: str + icon: str + comfort_level_name: str + comfort_level_icon: str + + +class IndexData(TypedDict): + role: MihoyoRole + avatars: List[MihoyoAvatar] + stats: Stats + city_explorations: List + world_explorations: List[WorldExploration] + homes: List[Home] + + +class CharDetailData(TypedDict): + avatars: List[MihoyoAvatar] + + +################ +# Token Models # +################ + + +class CookieTokenInfo(TypedDict): + uid: str + cookie_token: str + + +class StokenInfo(TypedDict): + token_type: NotRequired[int] + name: NotRequired[str] + token: str + + +class GameTokenInfo(TypedDict): + token: StokenInfo + user_info: UserInfo + + +class LoginTicketInfo(TypedDict): + list: List[StokenInfo] + + +class AuthKeyInfo(TypedDict): + sign_type: int + authkey_ver: int + authkey: str + + +class Hk4eLoginInfo(TypedDict): + game: str + region: str + game_uid: str + game_biz: str + level: int + nickname: str + region_name: str + + +################ +# 扫码登录相关 # +################ + + +class QrCodeUrl(TypedDict): + url: str + + +class QrPayload(TypedDict): + proto: str + raw: str + ext: str + + +class QrCodeStatus(TypedDict): + stat: Literal['Init', 'Scanned', 'Confirmed'] + payload: QrPayload + + +################ +# UserInfo相关 # +################ + + +class UserLinks(TypedDict): + thirdparty: str + union_id: str + nickname: str + + +class UserInfo(TypedDict): + aid: str + mid: str + account_name: str + email: str + is_email_verify: int + area_code: str + mobile: str + safe_area_code: str + safe_mobile: str + realname: str + identity_code: str + rebind_area_code: str + rebind_mobile: str + rebind_mobile_time: str + links: List[UserLinks] + + +################ +# 抽卡记录相关 # +################ + + +class SingleGachaLog(TypedDict): + uid: str + gacha_type: str + item_id: str + count: str + time: str + name: str + lang: str + item_type: str + rank_type: str + id: str + + +class GachaLog(TypedDict): + page: str + size: str + total: str + list: List[SingleGachaLog] + region: str + + +################ +# 注册时间相关 # +################ + + +class CardOpts(TypedDict): + adjs: List[int] + titles: List[int] + items: List[int] + data_version: str + + +Props = TypedDict( + 'Props', + { + '66a': str, + '50a': str, + '53b': str, + 'pre_69b': str, + '49a': str, + '52b': str, + 'pre_71b': str, + '37': str, + '48a': str, + '57': str, + }, +) + + +class RegTime(TypedDict): + data: str + card_opts: CardOpts + props: Props + data_version: int + prop_version: int + + +################ +# 七圣召唤相关 # +################ + + +class CardCovers(TypedDict): + id: int + image: str + + +class GcgInfo(TypedDict): + level: int + nickname: str + avatar_card_num_gained: int + avatar_card_num_total: int + action_card_num_gained: int + action_card_num_total: int + covers: List[CardCovers] + + +################ +# 每月札记相关 # +################ + + +class DayData(TypedDict): + current_primogems: int + current_mora: int + last_primogems: int + last_mora: int + + +class GroupBy(TypedDict): + action_id: int + action: str + num: int + percent: int + + +class MonthData(TypedDict): + current_primogems: int + current_mora: int + last_primogems: int + last_mora: int + current_primogems_level: int + primogems_rate: int + mora_rate: int + group_by: List[GroupBy] + + +class MonthlyAward(TypedDict): + uid: int + region: str + account_id: str + nickname: str + date: str + month: str + optional_month: List[int] + data_month: int + data_last_month: int + day_data: DayData + month_data: MonthData + lantern: bool + + +################ +# 签到相关 # +################ + + +class MysSign(TypedDict): + code: str + risk_code: int + gt: str + challenge: str + success: int + message: str + + +class SignInfo(TypedDict): + total_sign_day: int + today: str + is_sign: bool + first_bind: bool + is_sub: bool + month_first: bool + sign_cnt_missed: int + month_last_day: bool + + +class SignAward(TypedDict): + icon: str + name: str + cnt: int + + +class SignList(TypedDict): + month: int + awards: List[SignAward] + resign: bool + + +################ +# 养成计算器部分 # +################ + + +class CalculateInfo(TypedDict): + skill_list: List[CalculateSkill] + weapon: CalculateWeapon + reliquary_list: List[CalculateReliquary] + + +class CalculateBaseData(TypedDict): + id: int + name: str + icon: str + max_level: int + level_current: int + + +class CalculateWeapon(CalculateBaseData): + weapon_cat_id: int + weapon_level: int + + +class CalculateReliquary(CalculateBaseData): + reliquary_cat_id: int + reliquary_level: int + + +class CalculateSkill(CalculateBaseData): + group_id: int + + +################ +# RecordCard # +################ + + +class MysGame(TypedDict): + has_role: bool + game_id: int # 2是原神 + game_role_id: str # UID + nickname: str + region: str + level: int + background_image: str + is_public: bool + data: List[MysGameData] + region_name: str + url: str + data_switches: List[MysGameSwitch] + h5_data_switches: Optional[List] + background_color: str # 十六进制颜色代码 + + +class MysGameData(TypedDict): + name: str + type: int + value: str + + +class MysGameSwitch(TypedDict): + switch_id: int + is_public: bool + switch_name: str diff --git a/GenshinUID/gsuid_utils/api/mys/request.py b/GenshinUID/gsuid_utils/api/mys/request.py new file mode 100644 index 00000000..d7bea0ac --- /dev/null +++ b/GenshinUID/gsuid_utils/api/mys/request.py @@ -0,0 +1,739 @@ +''' +米游社 API 请求模块。 +''' +from __future__ import annotations + +import copy +import time +import uuid +import random +from abc import abstractmethod +from string import digits, ascii_letters +from typing import Any, Dict, List, Union, Literal, Optional, cast + +from aiohttp import ClientSession + +from .api import _API +from .tools import ( + random_hex, + random_text, + get_ds_token, + generate_os_ds, + get_web_ds_token, + generate_passport_ds, +) +from .models import ( + GcgInfo, + MysGame, + MysSign, + RegTime, + GachaLog, + SignInfo, + SignList, + AbyssData, + IndexData, + AuthKeyInfo, + MonthlyAward, + QrCodeStatus, + CalculateInfo, + DailyNoteData, + GameTokenInfo, + CharDetailData, + CookieTokenInfo, + LoginTicketInfo, +) + +mysVersion = '2.44.1' +_HEADER = { + 'x-rpc-app_version': mysVersion, + 'User-Agent': ( + 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) ' + f'AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/{mysVersion}' + ), + 'x-rpc-client_type': '5', + 'Referer': 'https://webstatic.mihoyo.com/', + 'Origin': 'https://webstatic.mihoyo.com', +} +_HEADER_OS = { + 'x-rpc-app_version': '1.5.0', + 'x-rpc-client_type': '4', + 'x-rpc-language': 'zh-cn', +} +RECOGNIZE_SERVER = { + '1': 'cn_gf01', + '2': 'cn_gf01', + '5': 'cn_qd01', + '6': 'os_usa', + '7': 'os_euro', + '8': 'os_asia', + '9': 'os_cht', +} + + +class MysApi: + proxy_url: Optional[str] = None + + @abstractmethod + async def _upass(self, header: Dict): + ... + + @abstractmethod + async def _pass(self, gt: str, ch: str, header: Dict): + ... + + @abstractmethod + async def get_ck( + self, uid: str, mode: Literal['OWNER', 'RANDOM'] = 'RANDOM' + ) -> Optional[str]: + ... + + @abstractmethod + async def get_stoken(self, uid: str) -> Optional[str]: + ... + + async def get_upass_link(self, header: Dict) -> Union[int, Dict]: + header['DS'] = get_ds_token('is_high=false') + return await self._mys_request( + url=_API['VERIFICATION_URL'], + method='GET', + header=header, + ) + + async def get_header_and_vl(self, header: Dict, ch, vl): + header['DS'] = get_ds_token( + '', + { + 'geetest_challenge': ch, + 'geetest_validate': vl, + 'geetest_seccode': f'{vl}|jordan', + }, + ) + _ = await self._mys_request( + url=_API['VERIFY_URL'], + method='POST', + header=header, + data={ + 'geetest_challenge': ch, + 'geetest_validate': vl, + 'geetest_seccode': f'{vl}|jordan', + }, + ) + + def check_os(self, uid: str) -> bool: + return False if int(str(uid)[0]) < 6 else True + + async def get_info(self, uid, ck: Optional[str]) -> Union[IndexData, int]: + data = await self.simple_mys_req('PLAYER_INFO_URL', uid, cookie=ck) + if isinstance(data, Dict): + data = cast(IndexData, data['data']) + return data + + async def get_daily_data(self, uid: str) -> Union[DailyNoteData, int]: + data = await self.simple_mys_req('DAILY_NOTE_URL', uid) + if isinstance(data, Dict): + data = cast(DailyNoteData, data['data']) + return data + + async def get_gcg_info(self, uid: str) -> Union[GcgInfo, int]: + data = await self.simple_mys_req('GCG_INFO', uid) + if isinstance(data, Dict): + data = cast(GcgInfo, data['data']) + return data + + async def get_cookie_token( + self, token: str, uid: str + ) -> Union[CookieTokenInfo, int]: + data = await self._mys_request( + _API['GET_COOKIE_TOKEN_BY_GAME_TOKEN'], + 'GET', + params={ + 'game_token': token, + 'account_id': uid, + }, + ) + if isinstance(data, Dict): + data = cast(CookieTokenInfo, data['data']) + return data + + async def get_sign_list(self, uid) -> Union[SignList, int]: + is_os = self.check_os(uid) + if is_os: + params = { + 'act_id': 'e202102251931481', + 'lang': 'zh-cn', + } + else: + params = {'act_id': 'e202009291139501'} + data = await self._mys_req_get('SIGN_LIST_URL', is_os, params) + if isinstance(data, Dict): + data = cast(SignList, data['data']) + return data + + async def get_sign_info(self, uid) -> Union[SignInfo, int]: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + is_os = self.check_os(uid) + if is_os: + params = { + 'act_id': 'e202102251931481', + 'lang': 'zh-cn', + 'region': server_id, + 'uid': uid, + } + header = { + 'DS': generate_os_ds(), + } + else: + params = { + 'act_id': 'e202009291139501', + 'region': server_id, + 'uid': uid, + } + header = {} + data = await self._mys_req_get('SIGN_INFO_URL', is_os, params, header) + if isinstance(data, Dict): + data = cast(SignInfo, data['data']) + return data + + async def mys_sign( + self, uid, header={}, server_id='cn_gf01' + ) -> Union[MysSign, int]: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + if int(str(uid)[0]) < 6: + HEADER = copy.deepcopy(_HEADER) + HEADER['Cookie'] = ck + HEADER['x-rpc-device_id'] = random_hex(32) + HEADER['x-rpc-app_version'] = '2.35.2' + HEADER['x-rpc-client_type'] = '5' + HEADER['X_Requested_With'] = 'com.mihoyo.hyperion' + HEADER['DS'] = get_web_ds_token(True) + HEADER['Referer'] = ( + 'https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html' + '?bbs_auth_required=true&act_id=e202009291139501' + '&utm_source=bbs&utm_medium=mys&utm_campaign=icon' + ) + HEADER.update(header) + data = await self._mys_request( + url=_API['SIGN_URL'], + method='POST', + header=HEADER, + data={ + 'act_id': 'e202009291139501', + 'uid': uid, + 'region': server_id, + }, + ) + else: + HEADER = copy.deepcopy(_HEADER_OS) + HEADER['Cookie'] = ck + HEADER['DS'] = generate_os_ds() + HEADER.update(header) + data = await self._mys_request( + url=_API['SIGN_URL_OS'], + method='POST', + header=HEADER, + data={ + 'act_id': 'e202102251931481', + 'lang': 'zh-cn', + 'uid': uid, + 'region': server_id, + }, + use_proxy=True, + ) + if isinstance(data, Dict): + data = cast(MysSign, data['data']) + return data + + async def get_award(self, uid) -> Union[MonthlyAward, int]: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + if int(str(uid)[0]) < 6: + HEADER = copy.deepcopy(_HEADER) + HEADER['Cookie'] = ck + HEADER['DS'] = get_web_ds_token(True) + HEADER['x-rpc-device_id'] = random_hex(32) + data = await self._mys_request( + url=_API['MONTHLY_AWARD_URL'], + method='GET', + header=HEADER, + params={ + 'act_id': 'e202009291139501', + 'bind_region': server_id, + 'bind_uid': uid, + 'month': '0', + 'bbs_presentation_style': 'fullscreen', + 'bbs_auth_required': 'true', + 'utm_source': 'bbs', + 'utm_medium': 'mys', + 'utm_campaign': 'icon', + }, + ) + else: + HEADER = copy.deepcopy(_HEADER_OS) + HEADER['Cookie'] = ck + HEADER['x-rpc-device_id'] = random_hex(32) + HEADER['DS'] = generate_os_ds() + data = await self._mys_request( + url=_API['MONTHLY_AWARD_URL_OS'], + method='GET', + header=HEADER, + params={ + 'act_id': 'e202009291139501', + 'region': server_id, + 'uid': uid, + 'month': '0', + }, + use_proxy=True, + ) + if isinstance(data, Dict): + data = cast(MonthlyAward, data['data']) + return data + + async def get_spiral_abyss_info( + self, uid, schedule_type='1', ck: Optional[str] = None + ) -> Union[AbyssData, int]: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + data = await self.simple_mys_req( + 'PLAYER_ABYSS_INFO_URL', + uid, + { + 'server': server_id, + 'role_id': uid, + 'schedule_type': schedule_type, + }, + cookie=ck, + ) + if isinstance(data, Dict): + data = cast(AbyssData, data['data']) + return data + + async def get_character( + self, uid, character_ids, ck + ) -> Union[CharDetailData, int]: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + if int(str(uid)[0]) < 6: + HEADER = copy.deepcopy(_HEADER) + HEADER['Cookie'] = ck + HEADER['DS'] = get_ds_token( + '', + { + 'character_ids': character_ids, + 'role_id': uid, + 'server': server_id, + }, + ) + data = await self._mys_request( + _API['PLAYER_DETAIL_INFO_URL'], + 'POST', + HEADER, + data={ + 'character_ids': character_ids, + 'role_id': uid, + 'server': server_id, + }, + ) + else: + HEADER = copy.deepcopy(_HEADER_OS) + HEADER['Cookie'] = ck + HEADER['DS'] = generate_os_ds() + data = await self._mys_request( + _API['PLAYER_DETAIL_INFO_URL_OS'], + 'POST', + HEADER, + data={ + 'character_ids': character_ids, + 'role_id': uid, + 'server': server_id, + }, + use_proxy=True, + ) + if isinstance(data, Dict): + data = cast(CharDetailData, data['data']) + return data + + async def get_calculate_info( + self, uid, char_id: int + ) -> Union[CalculateInfo, int]: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + data = await self.simple_mys_req( + 'CALCULATE_INFO_URL', + uid, + {'avatar_id': char_id, 'uid': uid, 'region': server_id}, + ) + if isinstance(data, Dict): + data = cast(CalculateInfo, data['data']) + return data + + async def get_mihoyo_bbs_info( + self, + mys_id: str, + cookie: Optional[str] = None, + is_os: bool = False, + ) -> Union[List[MysGame], int]: + if not cookie: + cookie = await self.get_ck(mys_id, 'OWNER') + data = await self.simple_mys_req( + 'MIHOYO_BBS_PLAYER_INFO_URL', + is_os, + {'uid': mys_id}, + {'Cookie': cookie}, + ) + if isinstance(data, Dict): + data = cast(List[MysGame], data['data']['list']) + return data + + async def create_qrcode_url(self) -> Union[Dict, int]: + device_id: str = ''.join(random.choices(ascii_letters + digits, k=64)) + app_id: str = '8' + data = await self._mys_request( + _API['CREATE_QRCODE'], + 'POST', + header={}, + data={'app_id': app_id, 'device': device_id}, + ) + if isinstance(data, Dict): + url: str = data['data']['url'] + ticket = url.split('ticket=')[1] + return { + 'app_id': app_id, + 'ticket': ticket, + 'device': device_id, + 'url': url, + } + return data + + async def check_qrcode( + self, app_id: str, ticket: str, device: str + ) -> Union[QrCodeStatus, int]: + data = await self._mys_request( + _API['CHECK_QRCODE'], + 'POST', + data={ + 'app_id': app_id, + 'ticket': ticket, + 'device': device, + }, + ) + if isinstance(data, Dict): + data = cast(QrCodeStatus, data['data']) + return data + + async def get_gacha_log_by_authkey( + self, + uid: str, + gacha_type: str = '301', + page: int = 1, + end_id: str = '0', + ) -> Union[int, GachaLog]: + server_id = 'cn_qd01' if uid[0] == '5' else 'cn_gf01' + authkey_rawdata = await self.get_authkey_by_cookie(uid) + if isinstance(authkey_rawdata, int): + return -1 + authkey = authkey_rawdata['authkey'] + data = await self._mys_request( + url=_API['GET_GACHA_LOG_URL'], + method='GET', + header=_HEADER, + params={ + 'authkey_ver': '1', + 'sign_type': '2', + 'auth_appid': 'webview_gacha', + 'init_type': '200', + 'gacha_id': 'fecafa7b6560db5f3182222395d88aaa6aaac1bc', + 'timestamp': str(int(time.time())), + 'lang': 'zh-cn', + 'device_type': 'mobile', + 'plat_type': 'ios', + 'region': server_id, + 'authkey': authkey, + 'game_biz': 'hk4e_cn', + 'gacha_type': gacha_type, + 'page': page, + 'size': '20', + 'end_id': end_id, + }, + ) + if isinstance(data, Dict): + data = cast(GachaLog, data['data']) + return data + + async def get_cookie_token_by_game_token( + self, token: str, uid: str + ) -> Union[CookieTokenInfo, int]: + data = await self._mys_request( + _API['GET_COOKIE_TOKEN_BY_GAME_TOKEN'], + 'GET', + params={ + 'game_token': token, + 'account_id': uid, + }, + ) + if isinstance(data, Dict): + data = cast(CookieTokenInfo, data['data']) + return data + + async def get_cookie_token_by_stoken( + self, stoken: str, mys_id: str, full_sk: Optional[str] = None + ) -> Union[CookieTokenInfo, int]: + HEADER = copy.deepcopy(_HEADER) + if full_sk: + HEADER['Cookie'] = full_sk + else: + HEADER['Cookie'] = f'stuid={mys_id};stoken={stoken}' + data = await self._mys_request( + url=_API['GET_COOKIE_TOKEN_URL'], + method='GET', + header=HEADER, + params={ + 'stoken': stoken, + 'uid': mys_id, + }, + ) + if isinstance(data, Dict): + data = cast(CookieTokenInfo, data['data']) + return data + + async def get_stoken_by_login_ticket( + self, lt: str, mys_id: str + ) -> Union[LoginTicketInfo, int]: + data = await self._mys_request( + url=_API['GET_STOKEN_URL'], + method='GET', + header=_HEADER, + params={ + 'login_ticket': lt, + 'token_types': '3', + 'uid': mys_id, + }, + ) + if isinstance(data, Dict): + data = cast(LoginTicketInfo, data['data']) + return data + + async def get_stoken_by_game_token( + self, account_id: int, game_token: str + ) -> Union[GameTokenInfo, int]: + _data = { + 'account_id': account_id, + 'game_token': game_token, + } + data = await self._mys_request( + _API['GET_STOKEN'], + 'POST', + { + 'x-rpc-app_version': '2.41.0', + 'DS': generate_passport_ds(b=_data), + 'x-rpc-aigis': '', + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'x-rpc-game_biz': 'bbs_cn', + 'x-rpc-sys_version': '11', + 'x-rpc-device_id': uuid.uuid4().hex, + 'x-rpc-device_fp': ''.join( + random.choices(ascii_letters + digits, k=13) + ), + 'x-rpc-device_name': 'GenshinUid_login_device_lulu', + 'x-rpc-device_model': 'GenshinUid_login_device_lulu', + 'x-rpc-app_id': 'bll8iq97cem8', + 'x-rpc-client_type': '2', + 'User-Agent': 'okhttp/4.8.0', + }, + data=_data, + ) + if isinstance(data, Dict): + data = cast(GameTokenInfo, data['data']) + return data + + async def get_authkey_by_cookie(self, uid: str) -> Union[AuthKeyInfo, int]: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + HEADER = copy.deepcopy(_HEADER) + stoken = await self.get_stoken(uid) + if stoken is None: + return -51 + HEADER['Cookie'] = stoken + HEADER['DS'] = get_web_ds_token(True) + HEADER['User-Agent'] = 'okhttp/4.8.0' + HEADER['x-rpc-app_version'] = '2.35.2' + HEADER['x-rpc-sys_version'] = '12' + HEADER['x-rpc-client_type'] = '5' + HEADER['x-rpc-channel'] = 'mihoyo' + HEADER['x-rpc-device_id'] = random_hex(32) + HEADER['x-rpc-device_name'] = random_text(random.randint(1, 10)) + HEADER['x-rpc-device_model'] = 'Mi 10' + HEADER['Referer'] = 'https://app.mihoyo.com' + HEADER['Host'] = 'api-takumi.mihoyo.com' + data = await self._mys_request( + url=_API['GET_AUTHKEY_URL'], + method='POST', + header=HEADER, + data={ + 'auth_appid': 'webview_gacha', + 'game_biz': 'hk4e_cn', + 'game_uid': uid, + 'region': server_id, + }, + ) + if isinstance(data, Dict): + data = cast(AuthKeyInfo, data['data']) + return data + + async def get_hk4e_token(self, uid: str): + # 获取e_hk4e_token + server_id = RECOGNIZE_SERVER.get(uid[0]) + header = { + 'Cookie': await self.get_ck(uid, 'OWNER'), + 'Content-Type': 'application/json;charset=UTF-8', + 'Referer': 'https://webstatic.mihoyo.com/', + 'Origin': 'https://webstatic.mihoyo.com', + } + use_proxy = False + data = { + 'game_biz': 'hk4e_cn', + 'lang': 'zh-cn', + 'uid': f'{uid}', + 'region': f'{server_id}', + } + if int(str(uid)[0]) < 6: + url = _API['HK4E_LOGIN_URL'] + else: + url = _API['HK4E_LOGIN_URL_OS'] + data['game_biz'] = 'hk4e_global' + use_proxy = True + + async with ClientSession() as client: + async with client.request( + method='POST', + url=url, + headers=header, + json=data, + proxy=self.proxy_url if use_proxy else None, + timeout=300, + ) as resp: + raw_data = await resp.json() + if 'retcode' in raw_data and raw_data['retcode'] == 0: + _k = resp.cookies['e_hk4e_token'].key + _v = resp.cookies['e_hk4e_token'].value + ck = f'{_k}={_v}' + return ck + else: + return None + + async def get_regtime_data(self, uid: str) -> Union[RegTime, int]: + hk4e_token = await self.get_hk4e_token(uid) + ck_token = await self.get_ck(uid, 'OWNER') + params = { + 'game_biz': 'hk4e_cn', + 'lang': 'zh-cn', + 'badge_uid': uid, + 'badge_region': RECOGNIZE_SERVER.get(uid[0]), + } + data = await self.simple_mys_req( + 'REG_TIME', + uid, + params, + {'Cookie': f'{hk4e_token};{ck_token}' if int(uid[0]) <= 5 else {}}, + ) + if isinstance(data, Dict): + return cast(RegTime, data['data']) + else: + return data + + async def simple_mys_req( + self, + URL: str, + uid: Union[str, bool], + params: Dict = {}, + header: Dict = {}, + cookie: Optional[str] = None, + ) -> Union[Dict, int]: + if isinstance(uid, bool): + is_os = uid + server_id = 'cn_qd01' if is_os else 'cn_gf01' + else: + server_id = RECOGNIZE_SERVER.get(str(uid)[0]) + is_os = False if int(str(uid)[0]) < 6 else True + ex_params = '&'.join([f'{k}={v}' for k, v in params.items()]) + + if is_os: + _URL = _API[f'{URL}_OS'] + HEADER = copy.deepcopy(_HEADER_OS) + HEADER['DS'] = generate_os_ds() + else: + _URL = _API[URL] + HEADER = copy.deepcopy(_HEADER) + HEADER['DS'] = get_ds_token( + ex_params if ex_params else f'role_id={uid}&server={server_id}' + ) + HEADER.update(header) + if cookie is not None: + HEADER['Cookie'] = cookie + elif 'Cookie' not in HEADER and isinstance(uid, str): + ck = await self.get_ck(uid) + if ck is None: + return -51 + HEADER['Cookie'] = ck + data = await self._mys_request( + url=_URL, + method='GET', + header=HEADER, + params=params if params else {'server': server_id, 'role_id': uid}, + use_proxy=True if is_os else False, + ) + return data + + async def _mys_req_get( + self, + url: str, + is_os: bool, + params: Dict, + header: Optional[Dict] = None, + ) -> Union[Dict, int]: + if is_os: + _URL = _API[f'{url}_OS'] + HEADER = copy.deepcopy(_HEADER_OS) + use_proxy = True + else: + _URL = _API[url] + HEADER = copy.deepcopy(_HEADER) + use_proxy = False + if header: + HEADER.update(header) + data = await self._mys_request( + url=_URL, + method='GET', + header=HEADER, + params=params, + use_proxy=use_proxy, + ) + return data + + async def _mys_request( + self, + url: str, + method: Literal['GET', 'POST'] = 'GET', + header: Dict[str, Any] = _HEADER, + params: Optional[Dict[str, Any]] = None, + data: Optional[Dict[str, Any]] = None, + use_proxy: Optional[bool] = False, + ) -> Union[Dict, int]: + async with ClientSession() as client: + async with client.request( + method, + url=url, + headers=header, + params=params, + json=data, + proxy=self.proxy_url if use_proxy else None, + timeout=300, + ) as resp: + raw_data = await resp.json() + retcode: int = raw_data['retcode'] + if retcode == 1034: + await self._upass(header) + elif retcode != 0: + return retcode + return raw_data diff --git a/GenshinUID/gsuid_utils/api/mys/tools.py b/GenshinUID/gsuid_utils/api/mys/tools.py new file mode 100644 index 00000000..40ac5c15 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/mys/tools.py @@ -0,0 +1,78 @@ +import json +import time +import random +import string +import hashlib +from typing import Any, Dict, Optional + +_S = { + '2.44.1': { + 'LK2': 'IEIZiKYaput2OCKQprNuGsog1NZc1FkS', + 'K2': 'dZAwGk4e9aC0MXXItkwnHamjA1x30IYw', + '25': 'xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs', + }, + 'os': '6cqshh5dhw73bzxn20oexa9k516chk7s', + 'PD': 'JwYDpKvLj6MrMqqYU6jTKF17KNO2PXoS', +} + + +def random_hex(length): + result = hex(random.randint(0, 16**length)).replace('0x', '').upper() + if len(result) < length: + result = '0' * (length - len(result)) + result + return result + + +def md5(text): + md5_func = hashlib.md5() + md5_func.update(text.encode()) + return md5_func.hexdigest() + + +def random_text(num: int) -> str: + return ''.join(random.sample(string.ascii_lowercase + string.digits, num)) + + +def _random_str_ds( + salt: str, + sets: str = string.ascii_lowercase + string.digits, + with_body: bool = False, + q: str = '', + b: Optional[Dict[str, Any]] = None, +): + i = str(int(time.time())) + r = ''.join(random.sample(sets, 6)) + s = f'salt={salt}&t={i}&r={r}' + if with_body: + s += f'&b={json.dumps(b) if b else ""}&q={q}' + c = md5(s) + return f'{i},{r},{c}' + + +def _random_int_ds(salt: str, q: str = '', b: Optional[Dict[str, Any]] = None): + br = json.dumps(b) if b else '' + s = salt + t = str(int(time.time())) + r = str(random.randint(100000, 200000)) + c = md5(f'salt={s}&t={t}&r={r}&b={br}&q={q}') + return f'{t},{r},{c}' + + +def get_ds_token( + q: str = '', + b: Optional[Dict[str, Any]] = None, + salt: str = _S['2.44.1']['25'], +): + return _random_int_ds(salt, q, b) + + +def get_web_ds_token(web=False): + return _random_str_ds(_S['2.44.1']['LK2'] if web else _S['2.44.1']['K2']) + + +def generate_os_ds(salt: str = '') -> str: + return _random_str_ds(salt or _S['os'], sets=string.ascii_letters) + + +def generate_passport_ds(q: str = '', b: Optional[Dict[str, Any]] = None): + return _random_str_ds(_S['PD'], string.ascii_letters, True, q, b) diff --git a/GenshinUID/gsuid_utils/api/types.py b/GenshinUID/gsuid_utils/api/types.py new file mode 100644 index 00000000..66bcd334 --- /dev/null +++ b/GenshinUID/gsuid_utils/api/types.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from typing import Any, Dict + +AnyDict = Dict[str, Any] diff --git a/GenshinUID/gsuid_utils/database/dal.py b/GenshinUID/gsuid_utils/database/dal.py new file mode 100644 index 00000000..fd2654a6 --- /dev/null +++ b/GenshinUID/gsuid_utils/database/dal.py @@ -0,0 +1,372 @@ +import re +import asyncio +from typing import Dict, List, Literal, Optional + +from sqlmodel import SQLModel +from sqlalchemy.future import select +from sqlalchemy import delete, update +from sqlalchemy.orm import sessionmaker +from sqlalchemy.sql.expression import func +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine + +from .utils import SERVER +from .models import GsBind, GsPush, GsUser, GsCache + + +class SQLA: + def __init__(self, url: str, bot_id: str): + self.bot_id = bot_id + self.url = f'sqlite+aiosqlite:///{url}' + self.engine = create_async_engine(self.url, pool_recycle=1500) + self.session = sessionmaker(self.engine, class_=AsyncSession)() + + def create_all(self): + asyncio.create_task(self._create_all()) + + async def _create_all(self): + async with self.engine.begin() as conn: + await conn.run_sync(SQLModel.metadata.create_all) + + ##################### + # GsBind 部分 # + ##################### + async def select_bind_data(self, user_id: str) -> Optional[GsBind]: + result = await self.session.execute( + select(GsBind).where( + GsBind.user_id == user_id and GsBind.bot_id == self.bot_id + ) + ) + data = result.scalars().all() + return data[0] if data else None + + async def insert_bind_data(self, user_id: str, **data) -> int: + new_uid = data['uid'] if 'uid' in data else '' + if len(new_uid) != 9: + return -1 + if await self.bind_exists(user_id): + uid_list = await self.get_bind_uid_list(user_id) + if uid_list and new_uid not in uid_list: + uid_list.append(new_uid) + else: + return -2 + data['uid'] = '_'.join(uid_list) + await self.update_bind_data(user_id, data) + else: + new_data = GsBind(user_id=user_id, bot_id=self.bot_id, **data) + self.session.add(new_data) + await self.session.commit() + return 0 + + async def delete_bind_data(self, user_id: str, **data) -> int: + _uid = data['uid'] if 'uid' in data else '' + if await self.bind_exists(user_id): + uid_list = await self.get_bind_uid_list(user_id) + if uid_list and _uid in uid_list: + uid_list.remove(_uid) + else: + return -1 + data['uid'] = '_'.join(uid_list) + await self.update_bind_data(user_id, data) + await self.session.commit() + return 0 + else: + return -1 + + async def update_bind_data(self, user_id: str, data: Optional[Dict]): + sql = update(GsBind).where( + GsBind.user_id == user_id and GsBind.bot_id == self.bot_id + ) + if data is not None: + query = sql.values(**data) + query.execution_options(synchronize_session='fetch') + await self.session.execute(query) + + async def bind_exists(self, user_id: str) -> bool: + return bool(await self.select_bind_data(user_id)) + + async def get_all_uid_list(self) -> List[str]: + sql = select(GsBind).where(GsBind.bot_id == self.bot_id) + result = await self.session.execute(sql) + data: List[GsBind] = result.scalars().all() + uid_list: List[str] = [] + for item in data: + uid_list.extend(item.uid.split("_") if item.uid else []) + return uid_list + + async def get_bind_uid_list(self, user_id: str) -> List[str]: + data = await self.select_bind_data(user_id) + return data.uid.split("_") if data and data.uid else [] + + async def get_bind_uid(self, user_id: str) -> Optional[str]: + data = await self.get_bind_uid_list(user_id) + return data[0] if data else None + + async def switch_uid( + self, user_id: str, uid: Optional[str] = None + ) -> Optional[List]: + uid_list = await self.get_bind_uid_list(user_id) + if uid_list and len(uid_list) >= 1: + if uid and uid not in uid_list: + return None + elif uid: + pass + else: + uid = uid_list[1] + uid_list.remove(uid) + uid_list.insert(0, uid) + await self.update_bind_data(user_id, {'uid': '_'.join(uid_list)}) + return uid_list + else: + return None + + ##################### + # GsUser、GsCache 部分 # + ##################### + + async def select_user_data(self, uid: str) -> Optional[GsUser]: + sql = select(GsUser).where(GsUser.uid == uid) + result = await self.session.execute(sql) + return data[0] if (data := result.scalars().all()) else None + + async def select_cache_cookie(self, uid: str) -> Optional[str]: + sql = select(GsCache).where(GsCache.uid == uid) + result = await self.session.execute(sql) + data: GsCache = result.scalars().one() + return data.cookie if data else None + + async def delete_error_cache(self) -> bool: + data = await self.get_all_error_cookie() + for cookie in data: + sql = delete(GsCache).where(GsCache.cookie == cookie) + await self.session.execute(sql) + return True + + async def insert_cache_data( + self, + cookie: str, + uid: Optional[str] = None, + mys_id: Optional[str] = None, + ) -> bool: + new_data = GsCache(cookie=cookie, uid=uid, mys_id=mys_id) + self.session.add(new_data) + await self.session.commit() + return True + + async def insert_user_data( + self, user_id: str, uid: str, cookie: str, stoken: Optional[str] = None + ) -> bool: + if await self.user_exists(uid): + sql = ( + update(GsUser) + .where(GsUser.uid == uid) + .values(cookie=cookie, status=None, stoken=stoken) + ) + await self.session.execute(sql) + else: + account_id = re.search(r'account_id=(\d*)', cookie) + assert account_id is not None + account_id = str(account_id.group(1)) + + user_data = GsUser( + uid=uid, + mys_id=account_id, + cookie=cookie, + stoken=stoken if stoken else None, + user_id=user_id, + bot_id=self.bot_id, + sign_switch='off', + push_switch='off', + bbs_switch='off', + region=SERVER.get(uid[0], 'cn_gf01'), + ) + self.session.add(user_data) + await self.session.commit() + return True + + async def update_user_data(self, user_id: str, data: Optional[Dict]): + sql = update(GsUser).where( + GsUser.user_id == user_id and GsUser.bot_id == self.bot_id + ) + if data is not None: + query = sql.values(**data) + query.execution_options(synchronize_session='fetch') + await self.session.execute(query) + + async def delete_user_data(self, uid: str): + if await self.user_exists(uid): + sql = delete(GsUser).where(GsUser.uid == uid) + await self.session.execute(sql) + return True + return False + + async def delete_cache(self): + sql = ( + update(GsUser) + .where(GsUser.status == 'limit30') + .values(status=None) + ) + empty_sql = delete(GsCache) + await self.session.execute(sql) + await self.session.execute(empty_sql) + + async def mark_invalid(self, cookie: str, mark: str): + sql = update(GsUser).where(GsUser.cookie == cookie).values(status=mark) + await self.session.execute(sql) + + async def user_exists(self, uid: str) -> bool: + data = await self.select_user_data(uid) + return True if data else False + + async def update_user_stoken( + self, uid: str, stoken: Optional[str] + ) -> bool: + if await self.user_exists(uid): + sql = update(GsUser).where(GsUser.uid == uid).values(stoken=stoken) + await self.session.execute(sql) + await self.session.commit() + return True + return False + + async def update_switch_status(self, uid: str, data: Dict) -> bool: + if await self.user_exists(uid): + sql = update(GsUser).where(GsUser.uid == uid).values(**data) + await self.session.execute(sql) + await self.session.commit() + return True + return False + + async def update_error_status(self, cookie: str, err: str) -> bool: + sql = update(GsUser).where(GsUser.cookie == cookie).values(status=err) + await self.session.execute(sql) + await self.session.commit() + return True + + async def get_user_cookie(self, uid: str) -> Optional[str]: + data = await self.select_user_data(uid) + return data.cookie if data else None + + async def cookie_validate(self, uid: str) -> bool: + data = await self.select_user_data(uid) + return True if data and data.status is None else False + + async def get_user_stoken(self, uid: str) -> Optional[str]: + data = await self.select_user_data(uid) + return data.stoken if data and data.stoken else None + + async def get_all_user(self) -> List[GsUser]: + sql = select(GsUser).where(GsUser.cookie) + result = await self.session.execute(sql) + data: List[GsUser] = result.scalars().all() + return data + + async def get_all_cookie(self) -> List[str]: + data = await self.get_all_user() + return [_u.cookie for _u in data if _u.cookie] + + async def get_all_stoken(self) -> List[str]: + data = await self.get_all_user() + return [_u.stoken for _u in data if _u.stoken] + + async def get_all_error_cookie(self) -> List[str]: + data = await self.get_all_user() + return [_u.cookie for _u in data if _u.cookie and _u.status] + + async def get_all_push_user_list(self) -> List[GsUser]: + data = await self.get_all_user() + return [user for user in data if user.push_switch != 'off'] + + async def get_random_cookie(self, uid: str) -> Optional[str]: + # 有绑定自己CK 并且该CK有效的前提下,优先使用自己CK + if await self.user_exists(uid) and await self.cookie_validate(uid): + return await self.get_user_cookie(uid) + # 自动刷新缓存 + await self.delete_error_cache() + # 获得缓存库Ck + cache_data = await self.select_cache_cookie(uid) + if cache_data is not None: + return cache_data + # 随机取CK + server = SERVER.get(uid[0], 'cn_gf01') + sql = ( + select(GsUser) + .where(GsUser.region == server) + .order_by(func.random()) + ) + data = await self.session.execute(sql) + user_list: List[GsUser] = data.scalars().all() + for user in user_list: + if not user.status and user.cookie: + await self.insert_cache_data(user.cookie, uid) # 进入缓存 + return user.cookie + continue + else: + return None + + async def get_switch_status_list( + self, switch: Literal['push', 'sign', 'bbs'] + ) -> List[GsUser]: + _switch = getattr(GsUser, switch, GsUser.push_switch) + sql = select(GsUser).filter(_switch != 'off') + data = await self.session.execute(sql) + data_list: List[GsUser] = data.scalars().all() + return [user for user in data_list] + + ##################### + # GsPush 部分 # + ##################### + async def insert_push_data(self, uid: str): + push_data = GsPush( + uid=uid, + coin_push='off', + coin_value=2100, + coin_is_push='off', + resin_push='on', + resin_value=140, + resin_is_push='off', + go_push='off', + go_value=120, + go_is_push='off', + transform_push='off', + transform_value=140, + transform_is_push='off', + ) + self.session.add(push_data) + await self.session.commit() + + async def update_push_data(self, uid: str, data: dict) -> bool: + await self.push_exists(uid) + sql = update(GsPush).where(GsPush.uid == uid).values(**data) + await self.session.execute(sql) + await self.session.commit() + return True + + async def change_push_status( + self, + mode: Literal['coin', 'resin', 'go', 'transform'], + uid: str, + status: str, + ): + await self.update_push_data(uid, {f'{mode}_is_push': status}) + + async def select_push_data(self, uid: str) -> GsPush: + await self.push_exists(uid) + sql = select(GsPush).where(GsPush.uid == uid) + result = await self.session.execute(sql) + return result.scalars().one() + + async def push_exists(self, uid: str) -> bool: + sql = select(GsPush).where(GsPush.uid == uid) + result = await self.session.execute(sql) + data = result.scalars().all() + if not data: + await self.insert_push_data(uid) + return True + + ##################### + # 杂项部分 # + ##################### + + async def refresh_cache(self, uid: str): + sql = delete(GsCache).where(GsCache.uid == uid) + await self.session.execute(sql) + return True diff --git a/GenshinUID/gsuid_utils/database/models.py b/GenshinUID/gsuid_utils/database/models.py new file mode 100644 index 00000000..973672fc --- /dev/null +++ b/GenshinUID/gsuid_utils/database/models.py @@ -0,0 +1,54 @@ +from typing import Optional + +from sqlmodel import Field, SQLModel + + +class GsBind(SQLModel, table=True): + __table_args__ = {'keep_existing': True} + id: Optional[int] = Field(default=None, primary_key=True, title='序号') + bot_id: str = Field(title='平台') + user_id: str = Field(title='账号') + uid: Optional[str] = Field(default=None, title='UID') + mys_id: Optional[str] = Field(default=None, title='米游社通行证') + + +class GsUser(SQLModel, table=True): + __table_args__ = {'keep_existing': True} + id: Optional[int] = Field(default=None, primary_key=True, title='序号') + bot_id: str = Field(title='平台') + uid: str = Field(title='UID') + mys_id: Optional[str] = Field(default=None, title='米游社通行证') + region: Optional[str] = Field(default=None, title='地区') + cookie: Optional[str] = Field(default=None, title='Cookie') + stoken: Optional[str] = Field(default=None, title='Stoken') + user_id: str = Field(title='账号') + push_switch: str = Field(title='全局推送开关') + sign_switch: str = Field(title='自动签到') + bbs_switch: str = Field(title='自动米游币') + status: Optional[str] = Field(default=None, title='状态') + + +class GsCache(SQLModel, table=True): + __table_args__ = {'keep_existing': True} + id: Optional[int] = Field(default=None, primary_key=True, title='序号') + cookie: str = Field(default=None, title='Cookie') + uid: Optional[str] = Field(default=None, title='UID') + mys_id: Optional[str] = Field(default=None, title='米游社通行证') + + +class GsPush(SQLModel, table=True): + __table_args__ = {'keep_existing': True} + id: Optional[int] = Field(default=None, primary_key=True, title='序号') + uid: str = Field(title='UID') + coin_push: Optional[str] = Field(title='洞天宝钱推送') + coin_value: Optional[int] = Field(title='洞天宝钱阈值') + coin_is_push: Optional[str] = Field(title='洞天宝钱是否已推送') + resin_push: Optional[str] = Field(title='体力推送') + resin_value: Optional[int] = Field(title='体力阈值') + resin_is_push: Optional[str] = Field(title='体力是否已推送') + go_push: Optional[str] = Field(title='派遣推送') + go_value: Optional[int] = Field(title='派遣阈值') + go_is_push: Optional[str] = Field(title='派遣是否已推送') + transform_push: Optional[str] = Field(title='质变仪推送') + transform_value: Optional[int] = Field(title='质变仪阈值') + transform_is_push: Optional[str] = Field(title='质变仪是否已推送') diff --git a/GenshinUID/gsuid_utils/database/utils.py b/GenshinUID/gsuid_utils/database/utils.py new file mode 100644 index 00000000..2a7315b0 --- /dev/null +++ b/GenshinUID/gsuid_utils/database/utils.py @@ -0,0 +1,9 @@ +SERVER = { + '1': 'cn_gf01', + '2': 'cn_gf01', + '5': 'cn_qd01', + '6': 'os_usa', + '7': 'os_euro', + '8': 'os_asia', + '9': 'os_cht', +} diff --git a/GenshinUID/gsuid_utils/image/colortext/ColorText.py b/GenshinUID/gsuid_utils/image/colortext/ColorText.py new file mode 100644 index 00000000..acfe911b --- /dev/null +++ b/GenshinUID/gsuid_utils/image/colortext/ColorText.py @@ -0,0 +1,148 @@ +from typing import Union + +from color import Color, check_if_color + + +class BaseTextContainer(list): + @property + def len(self): + _len_count = 0 + for i_ in self: + _len_count += len(i_) + return _len_count + + def __and__(self, other): + self.append(other) + + def __repr__(self): + return f'BaseTextContainer({list(self)})' + + +class ColorText: + def _set_color(self, color): + self.color = Color(color) + + def __init__(self, text: str, color: Union[str, tuple] = 'black'): + self._check_color = check_if_color + if not self._check_color(color): + print(f'Color: {color}\n' f'Type: {str(type(color))}') + + # assert self._check_color(color) + self._set_color(color) + self.text = text + + def __len__(self): + return len(self.text) + + def __repr__(self): + return f'ColorText(\'{self.text}\', {self.color})' + + def __str__(self): + return self.text + + def __format__(self, format_spec): + return self.__repr__() + + def __lshift__(self, other): + self._set_color(other) + + def __getitem__(self, index): + return ColorText(self.text[index], color=self.color) + + +class ColorTextGroup(BaseTextContainer): + def __init__(self, texts=None): + if texts is None: + texts = [] + super().__init__(texts) + + def append(self, text): + if isinstance(text, (str, ColorText)): + super().append(text) + else: + raise TypeError('The text parameter is neither str nor ColorText') + + +class TextBuffer(BaseTextContainer): + def __init__(self, seq, length: int): + super().__init__(seq) + self.max_length = length + + @property + def free_size(self): + return self.max_length - self.len + + +def split_ep( + text: Union[str, ColorText], length: int, pre_len: int = 0 +): # Cut strings by length but discard the first N characters + # https://github.com/PyCQA/pycodestyle/issues/373 + return text[:pre_len], [ + text[i : i + length] for i in range(pre_len, len(text), length) # noqa + ] + + +def split_ctg( + group: Union[list, ColorTextGroup], length: int +) -> list: # Cut strings from ColorTextGroup + result = [] + buffer = TextBuffer([], length) + + if isinstance(group, list): + group = ColorTextGroup(group) + for t in group: + if len(t) <= buffer.free_size: + # buffer & t + continue + if len(t) > buffer.free_size: + _long_text_result = split_ep(t, length, buffer.free_size) + # buffer & _long_text_result[0] + result.append(buffer.copy()) + buffer.clear() + if len(_long_text_result[1][-1]) < length: + buffer = TextBuffer(_long_text_result[1][-1:], length) + result.append(_long_text_result[1][:-1]) + else: + result.append(_long_text_result[1]) + if buffer.free_size == 0: + result.append(buffer.copy()) + buffer.clear() + + return result + + +if __name__ == '__main__': + from pprint import pformat + + from colorama import Fore, Style + + def test_ctg(length: int, *params): + print( + f'{Fore.GREEN}> running split_ctg(){Style.RESET_ALL}\ + \n length: {length}\ + \n texts: {params}' + ) + groups_ = ColorTextGroup(list(params)) + f_ = pformat(split_ctg(groups_, length)).split('\n') + print(Fore.CYAN, '\t', f_[0], '\n\t'.join(f_[0:])) + + print('*** ColorTextGroup cutting test ***') + test_ctg( + 5, + 'test', + ColorText('i am red', 'red'), + 'foo', + ColorText('bar', color='cyan'), + ) + test_ctg( + 10, + '获得', + ColorText('12%/15%/18%/21%/24%', color='rgb(69,113,236)'), + '所有元素伤害加成;队伍中附近的其他角色在施放元素战技时,' + '会为装备该武器的角色产生1层「波穗」效果,至多叠加2层,' + '每0.3秒最多触发1次。装备该武器的角色施放元素战技时,' + '如果有积累的「波穗」效果,则将消耗已有的「波穗」,' + '获得「波乱」:根据消耗的层数,每层提升', + ColorText('20%/25%/30%/35%/40%', (69, 113, 236)), + '普通攻击伤害,持续8秒。', + ) diff --git a/GenshinUID/gsuid_utils/image/colortext/LICENSE b/GenshinUID/gsuid_utils/image/colortext/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/GenshinUID/gsuid_utils/image/colortext/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/GenshinUID/gsuid_utils/image/colortext/README.md b/GenshinUID/gsuid_utils/image/colortext/README.md new file mode 100644 index 00000000..4bebb500 --- /dev/null +++ b/GenshinUID/gsuid_utils/image/colortext/README.md @@ -0,0 +1,2 @@ +# Image +Image utils split from GsUtils diff --git a/GenshinUID/gsuid_utils/image/colortext/color.py b/GenshinUID/gsuid_utils/image/colortext/color.py new file mode 100644 index 00000000..2720d5aa --- /dev/null +++ b/GenshinUID/gsuid_utils/image/colortext/color.py @@ -0,0 +1,123 @@ +from enum import Enum +from typing import Tuple, Union + +from PIL import ImageColor + + +class ColorCodes(Enum): + HEX = 'hex' + RGB = 'rgb' + HSV = 'hsv' + + +class ConvertableColor: + def __init__(self, v_color: tuple): + self.v_color = v_color + + def __call__(self, space): + if space == ColorCodes.HEX: + return self.hex + elif space == ColorCodes.RGB: + return self.rgb + elif space == ColorCodes.HSV: + return self.hsv + else: + raise ValueError('Invalid color-code type') + + @property + def hex(self): + if len(self.v_color) == 3: + r, g, b = self.v_color + return f'#{r:02x}{g:02x}{b:02x}' + elif len(self.v_color) == 4: + r, g, b, a = self.v_color + return f'#{r:02x}{g:02x}{b:02x}{a:02x}' + else: + raise ValueError('Invalid color value') + + @property + def rgb(self): + if len(self.v_color) == 3: + r, g, b = self.v_color + return f'rgb({r}, {g}, {b})' + elif len(self.v_color) == 4: + r, g, b, a = self.v_color + return f'rgba({r}, {g}, {b}, {a})' + else: + raise ValueError('Invalid color value') + + @property + def hsv(self): + r, g, b = self.v_color[:3] + r, g, b = r / 255.0, g / 255.0, b / 255.0 + mx = max(r, g, b) + mn = min(r, g, b) + df = mx - mn + if mx == mn: + h = 0 + elif mx == r: + h = (60 * ((g - b) / df) + 360) % 360 + elif mx == g: + h = (60 * ((b - r) / df) + 120) % 360 + elif mx == b: + h = (60 * ((r - g) / df) + 240) % 360 + else: + h = 360 + + if mx == 0: + s = 0 + else: + s = df / mx + v = mx + return f'hsv({h}, {s}, {v})' + + +class Color(tuple): + @property + def to(self): + return ConvertableColor(self) + + def __new__( + cls, + _color: Union[str, Tuple[int, int, int], Tuple[int, int, int, int]], + ): + assert check_if_color(_color) + if isinstance(_color, str): + _color = ImageColor.getrgb(_color) + return super().__new__(cls, _color) + + def __str__(self): + return self.to.hex + + def __repr__(self): + return f"Color('{self.to.rgb}')" + + def __setitem__(self, key, value): + if 0 <= value <= 255: + super().__setitem__(key, value) # type: ignore + else: + raise ValueError("Color value must be between 0 and 255") + + +def check_if_color(color: Union[str, tuple]): + if isinstance(color, str): + try: + return ImageColor.getrgb(color) + except ValueError: + return False + if isinstance(color, (tuple, Color)): + if len(color) <= 4: + return all(isinstance(d, int) and 0 <= d <= 255 for d in color) + return False + + +if __name__ == '__main__': + red = Color((1, 1, 1)) + print(f'HEX: {red.to.hex}\nHSV: {red.to.hsv}\nRGB: {red.to.rgb}') + print( + f'rgb(123, 23, -1) \ + {check_if_color("rgb(123, 23, -1)")}\ + \n(100, 200, 255): \ + {check_if_color((100, 200, 256))}' + ) + print(check_if_color('#ff0000')) diff --git a/GenshinUID/gsuid_utils/version.py b/GenshinUID/gsuid_utils/version.py new file mode 100644 index 00000000..66fc7bc8 --- /dev/null +++ b/GenshinUID/gsuid_utils/version.py @@ -0,0 +1,2 @@ +__version__ = "0.1.0" +genshin_impact_version = "3.3" diff --git a/GenshinUID/tools/blue_data/参考面板3.4.xlsx b/GenshinUID/tools/blue_data/参考面板3.4.xlsx new file mode 100644 index 00000000..11ecd2d7 Binary files /dev/null and b/GenshinUID/tools/blue_data/参考面板3.4.xlsx differ diff --git a/GenshinUID/tools/data_to_map.py b/GenshinUID/tools/data_to_map.py new file mode 100644 index 00000000..cceb67a4 --- /dev/null +++ b/GenshinUID/tools/data_to_map.py @@ -0,0 +1,261 @@ +import sys +import json +import asyncio +from pathlib import Path + +import httpx + +sys.path.append(str(Path(__file__).parents[1])) +from version import Genshin_version # noqa: E402 +from utils.ambr_api.convert_ambr_data import ( # noqa: E402 + convert_ambr_to_minigg, +) + +R_PATH = Path(__file__).parents[0] +MAP_PATH = Path(__file__).parents[1] / 'utils' / 'enka_api' / 'map' +DATA_PATH = R_PATH / 'gs_data' +WEAPON_TYPE = { + "WEAPON_POLE": "长柄武器", + "WEAPON_BOW": "弓", + "WEAPON_SWORD_ONE_HAND": "单手剑", + "WEAPON_CLAYMORE": "双手剑", + "WEAPON_CATALYST": "法器", +} + +version = Genshin_version + +avatarName2Element_fileName = f'avatarName2Element_mapping_{version}.json' +weaponHash2Name_fileName = f'weaponHash2Name_mapping_{version}.json' +weaponHash2Type_fileName = f'weaponHash2Type_mapping_{version}.json' +skillId2Name_fileName = f'skillId2Name_mapping_{version}.json' +talentId2Name_fileName = f'talentId2Name_mapping_{version}.json' +avatarId2Name_fileName = f'avatarId2Name_mapping_{version}.json' +enName2Id_fileName = f'enName2AvatarID_mapping_{version}.json' +avatarId2Star_fileName = f'avatarId2Star_mapping_{version}.json' +avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json' + +artifact2attr_fileName = f'artifact2attr_mapping_{version}.json' +icon2Name_fileName = f'icon2Name_mapping_{version}.json' + +try: + with open(DATA_PATH / 'textMap.json', "r", encoding='UTF-8') as f: + raw_data = json.load(f) +except FileNotFoundError: + pass + +BETA_CHAR = { + '10000078': '艾尔海森', + '10000077': '瑶瑶', + '10000079': '迪希雅', + '10000080': '米卡', +} + + +async def avatarId2NameJson() -> None: + with open( + DATA_PATH / 'AvatarExcelConfigData.json', "r", encoding='UTF-8' + ) as f: + avatar_data = json.load(f) + + temp = {} + for i in avatar_data: + temp[str(i['id'])] = raw_data[str(i['nameTextMapHash'])] + + for _id in BETA_CHAR: + temp[_id] = BETA_CHAR[_id] + + result = {} + for _id in temp: + if int(_id) >= 11000000: + continue + else: + result[_id] = temp[_id] + + with open( + MAP_PATH / avatarId2Name_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(result, file, ensure_ascii=False) + + +async def avatarName2ElementJson() -> None: + with open(MAP_PATH / avatarId2Name_fileName, "r", encoding='UTF-8') as f: + avatarId2Name = json.load(f) + + temp = {} + enName2Id_result = {} + avatarId2Star_result = {} + avatarName2Weapon_result = {} + elementMap = { + '风': 'Anemo', + '岩': 'Geo', + '草': 'Dendro', + '火': 'Pyro', + '水': 'Hydro', + '冰': 'Cryo', + '雷': 'Electro', + } + for _id in avatarId2Name: + print(_id) + if _id in ['10000005', '10000007'] or int(_id) >= 11000000: + continue + name = avatarId2Name[_id] + data = httpx.get( + f'https://info.minigg.cn/characters?query={name}' + ).json() + if 'errcode' in data: + data = await convert_ambr_to_minigg(_id) + if data is not None and 'code' not in data: + temp[name] = elementMap[data['element']] + enName = data['images']['namesideicon'].split('_')[-1] + enName2Id_result[enName] = _id + avatarId2Star_result[int(_id)] = str(data['rarity']) + avatarName2Weapon_result[data['name']] = data['weapontype'] + + avatarId2Star_result['10000005'] = '5' + avatarId2Star_result['10000007'] = '5' + avatarName2Weapon_result['旅行者'] = '单手剑' + + with open(MAP_PATH / enName2Id_fileName, 'w', encoding='UTF-8') as file: + json.dump(enName2Id_result, file, ensure_ascii=False) + + with open( + MAP_PATH / avatarId2Star_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(avatarId2Star_result, file, ensure_ascii=False) + + with open( + MAP_PATH / avatarName2Element_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(temp, file, ensure_ascii=False) + + with open( + MAP_PATH / avatarName2Weapon_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(avatarName2Weapon_result, file, ensure_ascii=False) + + +async def weaponHash2NameJson() -> None: + with open( + DATA_PATH / 'WeaponExcelConfigData.json', "r", encoding='UTF-8' + ) as f: + weapon_data = json.load(f) + temp = { + str(i['nameTextMapHash']): raw_data[str(i['nameTextMapHash'])] + for i in weapon_data + if str(i['nameTextMapHash']) in raw_data + } + + with open( + MAP_PATH / weaponHash2Name_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(temp, file, ensure_ascii=False) + + +async def weaponHash2TypeJson() -> None: + with open( + DATA_PATH / 'WeaponExcelConfigData.json', "r", encoding='UTF-8' + ) as f: + weapon_data = json.load(f) + temp = { + str(i['nameTextMapHash']): WEAPON_TYPE.get(i['weaponType'], "") + for i in weapon_data + } + + with open( + MAP_PATH / weaponHash2Type_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(temp, file, ensure_ascii=False) + + +async def skillId2NameJson() -> None: + with open( + DATA_PATH / 'AvatarSkillExcelConfigData.json', "r", encoding='UTF-8' + ) as f: + skill_data = json.load(f) + + temp = {'Name': {}, 'Icon': {}} + for i in skill_data: + if str(i['nameTextMapHash']) in raw_data: + temp['Name'][str(i['id'])] = raw_data[str(i['nameTextMapHash'])] + temp['Icon'][str(i['id'])] = i['skillIcon'] + + with open(MAP_PATH / skillId2Name_fileName, 'w', encoding='UTF-8') as file: + json.dump(temp, file, ensure_ascii=False) + + +async def talentId2NameJson() -> None: + with open( + DATA_PATH / 'AvatarTalentExcelConfigData.json', "r", encoding='UTF-8' + ) as f: + talent_data = json.load(f) + + temp = {'Name': {}, 'Icon': {}} + for i in talent_data: + temp['Name'][str(i['talentId'])] = raw_data[str(i['nameTextMapHash'])] + temp['Icon'][str(i['talentId'])] = i['icon'] + + with open( + MAP_PATH / talentId2Name_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(temp, file, ensure_ascii=False) + + +async def artifact2attrJson() -> None: + with open( + DATA_PATH / 'ReliquaryExcelConfigData.json', "r", encoding='UTF-8' + ) as f: + reliquary_data = json.load(f) + + with open( + DATA_PATH / 'DisplayItemExcelConfigData.json', "r", encoding='UTF-8' + ) as f: + Display_data = json.load(f) + + temp = {} + for i in reliquary_data: + temp[str(i['icon'])] = raw_data[str(i['nameTextMapHash'])] + + temp['UI_RelicIcon_10001_1'] = '异国之盏' + temp['UI_RelicIcon_10001_2'] = '归乡之羽' + temp['UI_RelicIcon_10001_3'] = '感别之冠' + temp['UI_RelicIcon_10001_4'] = '故人之心' + temp['UI_RelicIcon_10001_5'] = '逐光之石' + with open(MAP_PATH / icon2Name_fileName, 'w', encoding='UTF-8') as file: + json.dump(temp, file, ensure_ascii=False) + + temp2 = {} + for i in Display_data: + if i['icon'].startswith('UI_RelicIcon'): + temp2[raw_data[str(i['nameTextMapHash'])]] = '_'.join( + i['icon'].split('_')[:-1] + ) + + temp3 = {} + for i in temp: + for k in temp2: + if i.startswith(temp2[k]): + temp3[temp[i]] = k + + temp3['异国之盏'] = '行者之心' + temp3['归乡之羽'] = '行者之心' + temp3['感别之冠'] = '行者之心' + temp3['故人之心'] = '行者之心' + temp3['逐光之石'] = '行者之心' + + with open( + MAP_PATH / artifact2attr_fileName, 'w', encoding='UTF-8' + ) as file: + json.dump(temp3, file, ensure_ascii=False) + + +async def main(): + await avatarId2NameJson() + await avatarName2ElementJson() + await weaponHash2NameJson() + await skillId2NameJson() + await talentId2NameJson() + await weaponHash2TypeJson() + await artifact2attrJson() + + +asyncio.run(main()) diff --git a/GenshinUID/tools/download_icon.py b/GenshinUID/tools/download_icon.py new file mode 100644 index 00000000..7cd7402d --- /dev/null +++ b/GenshinUID/tools/download_icon.py @@ -0,0 +1,44 @@ +from pathlib import Path + +import httpx + +char_list = ['Dehya', 'Mika'] +title = 'https://api.ambr.top/assets/UI/{}' +# title = 'https://enka.network/ui/{}' +icon_list = [ + 'Skill_E_{}_01.png', + 'Skill_E_{}_02.png', + 'Skill_S_{}_01.png', + 'Skill_S_{}_02.png', + 'UI_Talent_S_{}_01.png', + 'UI_Talent_S_{}_02.png', + 'UI_Talent_S_{}_03.png', + 'UI_Talent_S_{}_04.png', + 'UI_Talent_S_{}_05.png', + 'UI_Talent_S_{}_06.png', + 'UI_Talent_S_{}_07.png', + 'UI_Talent_U_{}_01.png', + 'UI_Talent_U_{}_02.png', + 'UI_Talent_C_{}_01.png', + 'UI_Talent_C_{}_02.png', + 'UI_Gacha_AvatarImg_{}.png', +] +is_download = True + +for char in char_list: + for icon in icon_list: + icon_name = icon.format(char) + url = title.format(icon_name) + print(url) + if is_download: + print(f'正在下载{icon_name}') + char_data = httpx.get(url, follow_redirects=True, timeout=80) + if char_data.headers['Content-Type'] == 'image/png': + char_bytes = char_data.content + else: + print(f'{icon_name}不存在,跳过!') + continue + img_data = httpx.get(url).content + with open(Path(__file__).parent / icon_name, '+wb') as handler: + handler.write(char_bytes) + print('下载成功!') diff --git a/GenshinUID/tools/gen_char_li.py b/GenshinUID/tools/gen_char_li.py new file mode 100644 index 00000000..2d3d809b --- /dev/null +++ b/GenshinUID/tools/gen_char_li.py @@ -0,0 +1,50 @@ +import copy +import json +from pathlib import Path + +from openpyxl import load_workbook + +sample = { + 'weapon': {'5': [], '4': [], '3': []}, + 'artifact': [], # list[list[str,Optional[str]]] 四件套 / 2+2 + 'remark': [], +} + +char_json = {} + +path = Path(__file__).parents[1] / 'genshinuid_adv' + +wb = load_workbook(str(path / 'Genshin All Char.xlsx')) +ws = wb.active +for char_i in range(2, 336, 5): # 角色行 + char = ws.cell(char_i, 1).value + if not isinstance(char, str): + continue + char_name = char.replace('\n', '') + char_sample = copy.deepcopy(sample) + for i in range(5): + row = i + char_i + + if star_5 := ws.cell(row, 2).value: + char_sample['weapon']['5'].append(star_5) + if star_4 := ws.cell(row, 3).value: + char_sample['weapon']['4'].append(star_4) + if star_3 := ws.cell(row, 4).value: + char_sample['weapon']['3'].append(star_3) + + artifact = [] + if arti_1 := ws.cell(row, 5).value: + artifact.append(arti_1) + if arti_2 := ws.cell(row, 6).value: + artifact.append(arti_2) + if artifact: + char_sample['artifact'].append(artifact) + + if remark := ws.cell(row, 7).value: + if row > 7: + char_sample['remark'].append(remark) + + char_json[char_name] = char_sample + +with open(str(path / 'char_adv_list.json'), 'w', encoding='utf-8') as f: + json.dump(char_json, f, indent=2, ensure_ascii=False) diff --git a/GenshinUID/tools/gen_curve_json.py b/GenshinUID/tools/gen_curve_json.py new file mode 100644 index 00000000..6d93adc2 --- /dev/null +++ b/GenshinUID/tools/gen_curve_json.py @@ -0,0 +1,29 @@ +import json +from pathlib import Path + +from openpyxl import load_workbook +from openpyxl.worksheet.worksheet import Worksheet + +R_PATH = Path(__file__).parent +DATA_PATH = R_PATH / 'blue_data' +CURVE_PATH = Path(__file__).parents[1] / 'genshinuid_enka' / 'curveCalc' + +wb = load_workbook(str(DATA_PATH / '曲线素材.xlsx'), data_only=True) +ws: Worksheet = wb['曲线素材'] # type: ignore + +result = {} +for col in range(1, 45): + if not ws.cell(1, col).value: + continue + else: + title = ws.cell(1, col).column_letter # type: ignore + + temp = [] + for row in range(2, 302): + val = ws.cell(row, col).value + temp.append(val) + + result[title] = temp + +with open(str(CURVE_PATH / 'curve.json'), 'w', encoding='utf-8') as f: + json.dump(result, f, indent=2, ensure_ascii=False) diff --git a/GenshinUID/tools/gen_help.py b/GenshinUID/tools/gen_help.py new file mode 100644 index 00000000..1705aed9 --- /dev/null +++ b/GenshinUID/tools/gen_help.py @@ -0,0 +1,67 @@ +import copy +import json +from pathlib import Path + +from openpyxl import load_workbook + +sample = { + 'name': '', + 'desc': '', + 'eg': '', + 'need_ck': False, + 'need_sk': False, + 'need_admin': False, +} + +result = {} + +R_PATH = Path(__file__).parent +DATA_PATH = R_PATH / 'help_data' +HELP_PATH = Path(__file__).parents[1] / 'genshinuid_help' + +# 表格地址: https://kdocs.cn/l/ccpc6z0bZx6u +wb = load_workbook(str(DATA_PATH / 'GenshinUID Help.xlsx')) +ws = wb.active + +module_name_str = '' +for row in range(2, 999): + # 跳过空白行 + if not ws.cell(row, 2).value: + continue + + _sample = copy.deepcopy(sample) + + # 将第一列读取为模块名 + if ws.cell(row, 1): + if ws.cell(row, 1).value is not None: + module_name_str = ws.cell(row, 1).value + + # if module_name_str is None and not isinstance(module_name_str, str): + # continue + + # 第二列为功能名 + _sample['name'] = ws.cell(row, 2).value + # 第三列为详细信息 + _sample['desc'] = ws.cell(row, 3).value + # 第四列为使用例 + _sample['eg'] = ws.cell(row, 4).value + + if ws.cell(row, 5).value == '是': + _sample['need_ck'] = True + + if ws.cell(row, 6).value == '是': + _sample['need_sk'] = True + + if ws.cell(row, 7).value == '是': + _sample['need_admin'] = True + + if isinstance(module_name_str, str): + module_name = module_name_str.split(' | ')[0] + module_desc = module_name_str.split(' | ')[1] + if module_name not in result: + result[module_name] = {'desc': module_desc, 'data': []} + + result[module_name]['data'].append(_sample) + +with open(str(HELP_PATH / 'help.json'), 'w', encoding='utf-8') as f: + json.dump(result, f, indent=2, ensure_ascii=False) diff --git a/GenshinUID/tools/get_achievement_json.py b/GenshinUID/tools/get_achievement_json.py new file mode 100644 index 00000000..581570b6 --- /dev/null +++ b/GenshinUID/tools/get_achievement_json.py @@ -0,0 +1,92 @@ +import json +import warnings +from pathlib import Path + +from openpyxl import Workbook, load_workbook +from openpyxl.worksheet.worksheet import Worksheet + +warnings.filterwarnings('ignore', category=UserWarning, module='openpyxl') +import_path = Path(__file__).parent / 'achievement_data' / '成就汇总.xlsx' +export_path = Path(__file__).parents[1] / 'genshinuid_achievement' + +wb: Workbook = load_workbook(str(import_path)) +ws_daily: Worksheet = wb['成就相关每日委托'] +ws_all: Worksheet = wb['正式服成就汇总'] +ws_32: Worksheet = wb['3.2 新增成就'] +ws_33: Worksheet = wb['3.3 新增成就'] +ws_34: Worksheet = wb['3.4 新增成就'] + +result_achi = {} +result_all = {} + +is_first = False +for row in range(3, 100): + task = ws_daily.cell(row, 3).value + achi = ws_daily.cell(row, 4).value + desc = ws_daily.cell(row, 5).value + guide = ws_daily.cell(row, 6).value + hyper_link = ws_daily.cell(row, 6).hyperlink + hyper_link = '' if hyper_link is None else hyper_link.target + if not task: + if is_first: + break + is_first = True + continue + else: + is_first = False + task_list = task.split('\n') + for t in task_list: + if t.startswith('('): + continue + result_achi[t] = { + 'achievement': achi, + 'desc': desc, + 'guide': guide, + 'link': hyper_link, + } + +for row in range(3, 1000): + book = ws_all.cell(row, 5).value + achi = ws_all.cell(row, 6).value + desc = ws_all.cell(row, 7).value + guide = ws_all.cell(row, 11).value + hyper_link = ws_all.cell(row, 11).hyperlink + hyper_link = '' if hyper_link is None else hyper_link.target + if not book: + break + result_all[achi] = { + 'book': book, + 'desc': desc, + 'guide': guide, + 'link': hyper_link, + } + + +def get_book(_book: Worksheet, loop: int, bn: int, an: int, dn: int, gn: int): + for row in range(3, loop): + book = _book.cell(row, bn).value + achi = _book.cell(row, an).value + desc = _book.cell(row, dn).value + guide = _book.cell(row, gn).value + hyper_link = _book.cell(row, gn).hyperlink + hyper_link = '' if hyper_link is None else hyper_link.target + if not book: + break + result_all[achi] = { + 'book': book, + 'desc': desc, + 'guide': guide, + 'link': hyper_link, + } + + +get_book(ws_32, 50, 4, 5, 6, 9) +get_book(ws_33, 50, 5, 6, 7, 10) +get_book(ws_34, 50, 5, 6, 7, 10) + + +with open(str(export_path / 'daily_achi.json'), 'w', encoding='utf-8') as f: + json.dump(result_achi, f, indent=2, ensure_ascii=False) + +with open(str(export_path / 'all_achi.json'), 'w', encoding='utf-8') as f: + json.dump(result_all, f, indent=2, ensure_ascii=False) diff --git a/GenshinUID/tools/get_action.py b/GenshinUID/tools/get_action.py new file mode 100644 index 00000000..d5a4771f --- /dev/null +++ b/GenshinUID/tools/get_action.py @@ -0,0 +1,355 @@ +import re +import sys +import json +import asyncio +from typing import List +from pathlib import Path +from copy import deepcopy + +import httpx + +sys.path.append(str(Path(__file__).parents[1])) +from version import Genshin_version # noqa: E402 +from utils.ambr_api.convert_ambr_data import ( # noqa: E402 + convert_ambr_to_talent, +) + +path = ( + Path(__file__).parents[1] + / 'utils' + / 'enka_api' + / 'map' + / f'avatarId2Name_mapping_{Genshin_version}.json' +) +element_path = ( + Path(__file__).parents[1] + / 'utils' + / 'enka_api' + / 'map' + / f'avatarName2Element_mapping_{Genshin_version}.json' +) +with open(path, 'r', encoding='utf-8') as f: + char_id_list = json.load(f) + +with open(element_path, 'r', encoding='utf-8') as f: + char_element_list = json.load(f) + +char_list: List[str] = [] +char_action = {} +INDEX_MAP = ['', 'A', 'E', 'Q'] +attack_type_list = {'普通攻击': 'A', '重击': 'B', '下落攻击': 'C', '战技': 'E', '爆发': 'Q'} +label_type_list = { + '普通攻击': 'A', + '重击': 'B', + '下落攻击': 'C', + '攻击': 'attack', + '充能效率': 'ce', + '生命值': 'hp', + '防御': 'defense', + '暴击率': 'critrate', + '暴击伤害': 'critDmg', + '元素精通': 'em', +} +extra = { + '烟绯': {'A重击伤害': '蒸发'}, + '胡桃': {'A重击伤害': '蒸发', 'Q低血量时技能伤害': '蒸发'}, + '安柏': {'A满蓄力瞄准射击': ['融化', '蒸发']}, + '香菱': {'E喷火伤害': '蒸发', 'Q旋火轮伤害': '蒸发'}, + '达达利亚': {'A满蓄力瞄准射击': '蒸发', 'Q技能伤害·近战': '蒸发', 'Q技能伤害·远程': '蒸发'}, + '重云': {'Q技能伤害': '融化'}, + '雷电将军': { + 'E协同攻击伤害': '超激化', + 'Q梦想一刀基础伤害': '满愿力', + 'Q一段伤害': '满愿力', + 'Q重击伤害': '满愿力', + }, + '班尼特': {'Q技能伤害': '蒸发'}, + '甘雨': {'A霜华矢命中伤害': '融化', 'A霜华矢·霜华绽发伤害': '融化'}, + '可莉': {'A重击伤害': '蒸发'}, + '优菈': {'Q光降之剑基础伤害': ['13层', '24层']}, + '行秋': {'E技能伤害': '蒸发'}, + '莫娜': {'A重击伤害': '蒸发', 'Q泡影破裂伤害': '蒸发'}, + '迪卢克': {'Q斩击伤害': '蒸发'}, + '芭芭拉': {'A重击伤害': '蒸发'}, + '七七': {'Q技能伤害': '融化'}, + '八重神子': { + 'Q伤害': '超激化', + 'Q天狐霆雷伤害': '超激化', + 'E杀生樱伤害·叁阶': '超激化', + 'E杀生樱伤害·肆阶': '超激化', + }, + '菲谢尔': {'E奥兹攻击伤害': '超激化'}, + '久岐忍': {'Q单次伤害': '超激化'}, + '柯莱': {'Q跃动伤害': '蔓激化', 'E技能伤害': '蔓激化'}, + '提纳里': { + 'A藏蕴花矢伤害': '蔓激化', + 'E技能伤害': '蔓激化', + 'Q缠藤箭伤害': '蔓激化', + 'Q次级缠藤箭伤害': '蔓激化', + }, + '刻晴': { + 'A重击伤害': '超激化', + 'E雷楔伤害': '超激化', + 'E斩击伤害': '超激化', + 'Q技能伤害': '超激化', + 'Q连斩伤害': '超激化*2', + 'Q最后一击伤害': '超激化', + }, + '北斗': {'Q闪雷伤害': '超激化'}, + '赛诺': {'E冥祭伤害': '超激化', 'Q一段伤害': '超激化', 'Q重击伤害': '超激化'}, + '纳西妲': {'E长按伤害': '蔓激化', 'E灭净三业伤害': ['蔓激化', '蔓激化·前台']}, + '旅行者(草)': {'Q草灯莲攻击伤害': '蔓激化'}, + '夜兰': {'E伤害': '蒸发'}, + '艾尔海森': {'Q单次伤害': '蔓激化', 'E突进攻击伤害': '蔓激化', 'E1枚光幕攻击伤害': '蔓激化'}, + '迪希雅': { + 'E净焰昂藏伤害': '蒸发', + 'E剑域炽焰伤害': '蒸发', + 'E领域伤害': '蒸发', + 'Q炽鬃拳伤害': '蒸发', + 'Q焚落踢伤害': '蒸发', + }, +} +template = {'A重击伤害': {'name': 'A重击伤害', 'type': '', 'plus': 1, 'value': []}} + + +def fill_label(label_name: str, index: int) -> str: + label_name = INDEX_MAP[index] + label_name + return label_name + + +def from_type_to_value(value_type: str, para): + value = '' + if value_type == 'F1P': + value = '%.1f%%' % (para * 100) + elif value_type == 'F2P': + value = '%.2f%%' % (para * 100) + elif value_type == 'F1': + value = '%.1f' % (para) + elif value_type == 'F2': + value = '%.2f' % (para) + elif value_type == 'P': + value = str(round(para * 100)) + '%' + elif value_type == 'I': + value = '%.2f' % para + return value + + +def find_tag(labels: List, index: int, char: str, parameters: dict) -> dict: + result = {} + for label in labels: + if '旅行者' not in char: + if char_element_list[char] == 'Anemo': + if 'A扩散伤害' not in result: + result['A扩散伤害'] = { + 'name': 'A扩散伤害', + 'type': '扩散', + 'plus': 0, + 'value': [str(i) for i in range(1, 11)], + } + if char == '妮露': + if 'A丰穰之核(绽放)' not in result: + result['A丰穰之核(绽放)'] = { + 'name': 'A丰穰之核(绽放)', + 'type': '绽放', + 'plus': 0, + 'value': [str(i) for i in range(1, 11)], + } + if char == '久岐忍': + if 'A元素反应(超绽放)' not in result: + result['A元素反应(超绽放)'] = { + 'name': 'A元素反应(超绽放)', + 'type': '扩散', + 'plus': 0, + 'value': [str(i) for i in range(1, 11)], + } + if char == '托马': + if 'A元素反应(烈绽放)' not in result: + result['A元素反应(烈绽放)'] = { + 'name': 'A元素反应(烈绽放)', + 'type': '扩散', + 'plus': 0, + 'value': [str(i) for i in range(1, 11)], + } + # 拿到形如{param1:F1P}的字典 + label_split = label.split('|')[-1] + # 拿到单个标签的名称,形如一段伤害 + label_name = label.split('|')[0] + # 寻找label中带*的倍数倍率,比如 攻击力*3 + label_plus = 1 + if '*' in label_split: + label_plus = label_split.split('*')[-1] + label_plus = int(re.findall(r'[0-9]+', label_plus)[0]) + # 如果在label_split内拿到了形如每秒{param2:F2P}生命值上限+{param3:I},获取汉字转换类型 + laber_kanji_list = re.findall(r'[\u4e00-\u9fa5]+', label_split) + # 如果label_split中有汉字,则获取汉字的类型 + laber_kanji_list_str = ''.join(laber_kanji_list).replace('每秒', '') + for type in label_type_list: + if type in laber_kanji_list_str: + label_kanji = type + break + else: + label_kanji = '攻击力' + # 找到标签{param1:F1P}的List + label_attr = re.findall(r'{[a-zA-Z0-9]+:[a-zA-Z0-9]+}', label_split) + # 例如"持续治疗|每秒{param2:F2P}生命值上限+{param3:I}", + # 对单个标签内多个param进行处理,处理成形如['{param2:F2P}', '{param3:I}'] + value_type = '' + temp_value = [] + temp_temp = [] + for indexA, k in enumerate(label_attr): + # 去除多多余字符 变成 param2:F2P + k_deal = k.replace('{', '').replace('}', '') + value_type = k_deal.split(':')[-1] # F2P + value_index = k_deal.split(':')[0] # param2 + temp = [ + from_type_to_value(value_type, parameter) + for parameter in parameters[value_index] + ] + if indexA == 0: + temp_value = temp + # 只采用高空坠地的倍率 + elif indexA == 1 and '低空/高空坠地' in label: + temp_value = temp + # 阿忍仅计算50%血量以下伤害 + elif indexA == 1 and char == '久岐忍' and label_name == '总伤害': + temp_value = temp + # 埃洛伊特殊值 + elif indexA == 2 and char == '埃洛伊': + temp_value = temp + # 烟绯满层丹火印 + elif indexA == 4 and char == '烟绯': + temp_value = temp + # 无例外情况倍率全部相加 + else: + temp_value = [f'{i}+{j}' for i, j in zip(temp_temp, temp)] + # 读入缓存 + temp_temp = temp + # 制作倍率单元素 + parameter_list = { + 'name': '', + 'type': label_kanji, + 'plus': label_plus, + 'value': temp_value, + } + + # 特殊化处理 + if '心海' in char: + label_name = label_name.replace('提升', '提高') + label_name = label_name.replace('低空/高空坠地冲击伤害', '高空下落伤害') + label_name = label_name.replace('技能', '') + + # 提升指提升百分比 例如 E:dmgBouns+50% + # 提高指提高固定值 例如 Q:addDmg+40%defense + + label_keyword_hurt_list = ['一段', '壹阶', '贰阶', '叁阶', '肆阶'] + + if '炽焰箭' in label_name: + continue + elif char == '珊瑚宫心海' and '提高' in label_name: + continue + elif '元素爆发伤害提高' in label_name and char == '雷电将军': + continue + elif '持续时间' in label_name: + continue + elif '提升' in label_name: + # 云瑾和申鹤 + if '伤害值提升' in label_name: + parameter_list['name'] = fill_label(label_name, index) + result[fill_label(label_name, index)] = parameter_list + else: + continue + elif '伤害' in label_name: + if '段' in label_name or '阶' in label_name: + for label_keyword in label_keyword_hurt_list: + if label_keyword in label_name: + parameter_list['name'] = fill_label(label_name, index) + result[fill_label(label_name, index)] = parameter_list + elif '低空/高空坠地冲击伤害' in label_name and char not in ['魈']: + continue + elif '下坠期间伤害' in label_name: + continue + else: + parameter_list['name'] = fill_label(label_name, index) + result[fill_label(label_name, index)] = parameter_list + elif '治疗' in label_name or '回复' in label_name: + parameter_list['name'] = fill_label(label_name, index) + result[fill_label(label_name, index)] = parameter_list + elif '护盾' in label_name: + parameter_list['name'] = fill_label(label_name, index) + result[fill_label(label_name, index)] = parameter_list + elif '满蓄力瞄准射击' in label_name: + parameter_list['name'] = fill_label(label_name, index) + result[fill_label(label_name, index)] = parameter_list + + if char in extra: + for extra_name in extra[char]: + temp_name = extra_name.replace('技能', '') + if fill_label(label_name, index) == temp_name: + if isinstance(extra[char][extra_name], List): + for extra_tag in extra[char][extra_name]: + new_parameter_list = deepcopy(parameter_list) + new_parameter_list['name'] = ( + fill_label(label_name, index) + + f'({extra_tag})' + ) + result[ + fill_label(label_name, index) + + f'({extra_tag})' + ] = new_parameter_list + else: + new_parameter_list = deepcopy(parameter_list) + new_parameter_list['name'] = ( + fill_label(label_name, index) + + f'({extra[char][extra_name]})' + ) + result[ + fill_label(label_name, index) + + f'({extra[char][extra_name]})' + ] = new_parameter_list + + return result + + +async def main(): + for char_id in char_id_list: + char_list.append(char_id_list[char_id]) + char_list.extend(['旅行者(风)', '旅行者(雷)', '旅行者(岩)', '旅行者(草)']) + for char in char_list: + print(char) + talent_data = httpx.get( + f'https://info.minigg.cn/talents?query={char}' + ).json() + if 'errcode' in talent_data: + for _id in char_id_list: + if char_id_list[_id] == char: + char_id = _id + break + else: + continue + if int(char_id) >= 11000000: + continue + talent_data = await convert_ambr_to_talent(char_id) + if talent_data is None: + continue + result = {} + for i in range(1, 4): + skill = talent_data['combat{}'.format(str(i))] + labels = skill['attributes']['labels'] + parameters = skill['attributes']['parameters'] + result = dict(result, **find_tag(labels, i, char, parameters)) + char_action[char] = result + + with open( + str( + Path(__file__).parents[1] + / 'genshinuid_enka' + / 'effect' + / 'char_action.json' + ), + 'w', + encoding='UTF-8', + ) as file: + json.dump(char_action, file, ensure_ascii=False) + + +asyncio.run(main()) diff --git a/GenshinUID/tools/gs_data/DisplayItemExcelConfigData.json b/GenshinUID/tools/gs_data/DisplayItemExcelConfigData.json new file mode 100644 index 00000000..1f6419e6 --- /dev/null +++ b/GenshinUID/tools/gs_data/DisplayItemExcelConfigData.json @@ -0,0 +1,2424 @@ +[ + { + "typeDescTextMapHash": 2403746527, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "id": 410001, + "nameTextMapHash": 4192916761, + "descTextMapHash": 1573763994, + "icon": "UI_DrinkIcon_1001_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2616409095, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "id": 410002, + "nameTextMapHash": 733246713, + "descTextMapHash": 3192445994, + "icon": "UI_DrinkIcon_1002_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 940123903, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "id": 410003, + "nameTextMapHash": 3251800745, + "descTextMapHash": 1718620258, + "icon": "UI_DrinkIcon_1003_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 68398607, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "param": 1, + "id": 410004, + "nameTextMapHash": 890771921, + "descTextMapHash": 65921474, + "icon": "UI_DrinkIcon_1004_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3245621311, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "param": 1, + "id": 410005, + "nameTextMapHash": 2627302889, + "descTextMapHash": 1772578642, + "icon": "UI_DrinkIcon_1005_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2934589295, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "param": 1, + "id": 410006, + "nameTextMapHash": 368659801, + "descTextMapHash": 2572977450, + "icon": "UI_DrinkIcon_1006_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2914490791, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "param": 1, + "id": 410007, + "nameTextMapHash": 4241219113, + "descTextMapHash": 1043258722, + "icon": "UI_DrinkIcon_1007_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2208119679, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "param": 1, + "id": 410008, + "nameTextMapHash": 2823490929, + "descTextMapHash": 1657539546, + "icon": "UI_DrinkIcon_1008_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1125193335, + "rankLevel": 1, + "displayType": "BARTENDER_ITEM", + "param": 1, + "id": 410009, + "nameTextMapHash": 578422633, + "descTextMapHash": 984773306, + "icon": "UI_DrinkIcon_1009_1", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 718006855, + "rankLevel": 4, + "displayType": "DEFAULT_ITEM", + "id": 410010, + "nameTextMapHash": 1349879729, + "descTextMapHash": 297508946, + "icon": "UI_DisplayItemIcon_410010", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1010293015, + "rankLevel": 1, + "param": 10001, + "id": 400000, + "nameTextMapHash": 3420003793, + "descTextMapHash": 629015074, + "icon": "UI_RelicIcon_10001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3946399119, + "rankLevel": 2, + "param": 10001, + "id": 400001, + "nameTextMapHash": 1294083273, + "descTextMapHash": 4146219754, + "icon": "UI_RelicIcon_10001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 328783207, + "rankLevel": 3, + "param": 10001, + "id": 400002, + "nameTextMapHash": 131837153, + "descTextMapHash": 1851075306, + "icon": "UI_RelicIcon_10001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1362491287, + "rankLevel": 4, + "param": 10001, + "id": 400003, + "nameTextMapHash": 3143403633, + "descTextMapHash": 3192340274, + "icon": "UI_RelicIcon_10001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 310579055, + "rankLevel": 5, + "param": 10001, + "id": 400004, + "nameTextMapHash": 3685062329, + "descTextMapHash": 480361466, + "icon": "UI_RelicIcon_10001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 836643319, + "rankLevel": 1, + "param": 10002, + "id": 400005, + "nameTextMapHash": 938593057, + "descTextMapHash": 2749484074, + "icon": "UI_RelicIcon_10002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1048402767, + "rankLevel": 2, + "param": 10002, + "id": 400006, + "nameTextMapHash": 687101065, + "descTextMapHash": 3182766234, + "icon": "UI_RelicIcon_10002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3673807583, + "rankLevel": 3, + "param": 10002, + "id": 400007, + "nameTextMapHash": 1424974385, + "descTextMapHash": 1755017082, + "icon": "UI_RelicIcon_10002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3191078935, + "rankLevel": 4, + "param": 10002, + "id": 400008, + "nameTextMapHash": 50514673, + "descTextMapHash": 384092578, + "icon": "UI_RelicIcon_10002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2442594207, + "rankLevel": 5, + "param": 10002, + "id": 400009, + "nameTextMapHash": 649075033, + "descTextMapHash": 2871575722, + "icon": "UI_RelicIcon_10002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1428458071, + "rankLevel": 1, + "param": 10003, + "id": 400010, + "nameTextMapHash": 2977125049, + "descTextMapHash": 509490850, + "icon": "UI_RelicIcon_10003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3960509911, + "rankLevel": 2, + "param": 10003, + "id": 400011, + "nameTextMapHash": 2184536137, + "descTextMapHash": 1341362034, + "icon": "UI_RelicIcon_10003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 292768687, + "rankLevel": 3, + "param": 10003, + "id": 400012, + "nameTextMapHash": 2078239241, + "descTextMapHash": 2057213210, + "icon": "UI_RelicIcon_10003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2057814271, + "rankLevel": 4, + "param": 10003, + "id": 400013, + "nameTextMapHash": 3835475265, + "descTextMapHash": 1019905882, + "icon": "UI_RelicIcon_10003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2605847319, + "rankLevel": 5, + "param": 10003, + "id": 400014, + "nameTextMapHash": 2874887817, + "descTextMapHash": 2693346522, + "icon": "UI_RelicIcon_10003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2714736823, + "rankLevel": 1, + "param": 10004, + "id": 400015, + "nameTextMapHash": 2869581145, + "descTextMapHash": 2103626498, + "icon": "UI_RelicIcon_10004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1623431351, + "rankLevel": 2, + "param": 10004, + "id": 400016, + "nameTextMapHash": 1811625, + "descTextMapHash": 863787466, + "icon": "UI_RelicIcon_10004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3854642991, + "rankLevel": 3, + "param": 10004, + "id": 400017, + "nameTextMapHash": 1218621281, + "descTextMapHash": 3483834378, + "icon": "UI_RelicIcon_10004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1457196543, + "rankLevel": 4, + "param": 10004, + "id": 400018, + "nameTextMapHash": 2271525561, + "descTextMapHash": 601243858, + "icon": "UI_RelicIcon_10004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 671580847, + "rankLevel": 5, + "param": 10004, + "id": 400019, + "nameTextMapHash": 3824571961, + "descTextMapHash": 2273465066, + "icon": "UI_RelicIcon_10004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1217423551, + "rankLevel": 1, + "param": 10005, + "id": 400020, + "nameTextMapHash": 2245117145, + "descTextMapHash": 1741939218, + "icon": "UI_RelicIcon_10005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 15839167, + "rankLevel": 2, + "param": 10005, + "id": 400021, + "nameTextMapHash": 4251115017, + "descTextMapHash": 2231586578, + "icon": "UI_RelicIcon_10005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1255070335, + "rankLevel": 3, + "param": 10005, + "id": 400022, + "nameTextMapHash": 694267465, + "descTextMapHash": 3483389474, + "icon": "UI_RelicIcon_10005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2509233031, + "rankLevel": 4, + "param": 10005, + "id": 400023, + "nameTextMapHash": 1633955449, + "descTextMapHash": 2145429298, + "icon": "UI_RelicIcon_10005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3180364143, + "rankLevel": 5, + "param": 10005, + "id": 400024, + "nameTextMapHash": 3991638305, + "descTextMapHash": 3853891914, + "icon": "UI_RelicIcon_10005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3232210623, + "rankLevel": 1, + "param": 10006, + "id": 400025, + "nameTextMapHash": 1926816889, + "descTextMapHash": 2709082474, + "icon": "UI_RelicIcon_10006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 816175279, + "rankLevel": 2, + "param": 10006, + "id": 400026, + "nameTextMapHash": 859453249, + "descTextMapHash": 3447284018, + "icon": "UI_RelicIcon_10006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3592968359, + "rankLevel": 3, + "param": 10006, + "id": 400027, + "nameTextMapHash": 194176337, + "descTextMapHash": 4135353986, + "icon": "UI_RelicIcon_10006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3510851511, + "rankLevel": 4, + "param": 10006, + "id": 400028, + "nameTextMapHash": 3512197793, + "descTextMapHash": 3908983754, + "icon": "UI_RelicIcon_10006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3315664183, + "rankLevel": 5, + "param": 10006, + "id": 400029, + "nameTextMapHash": 3534799953, + "descTextMapHash": 3470784586, + "icon": "UI_RelicIcon_10006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2183429247, + "rankLevel": 1, + "param": 10007, + "id": 400030, + "nameTextMapHash": 1175029185, + "descTextMapHash": 2968248698, + "icon": "UI_RelicIcon_10007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3438392215, + "rankLevel": 2, + "param": 10007, + "id": 400031, + "nameTextMapHash": 2341847433, + "descTextMapHash": 3032621378, + "icon": "UI_RelicIcon_10007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 743080519, + "rankLevel": 3, + "param": 10007, + "id": 400032, + "nameTextMapHash": 2759952201, + "descTextMapHash": 2535347850, + "icon": "UI_RelicIcon_10007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4145166215, + "rankLevel": 4, + "param": 10007, + "id": 400033, + "nameTextMapHash": 2321771185, + "descTextMapHash": 2367327402, + "icon": "UI_RelicIcon_10007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1978849583, + "rankLevel": 5, + "param": 10007, + "id": 400034, + "nameTextMapHash": 4268243577, + "descTextMapHash": 623792962, + "icon": "UI_RelicIcon_10007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 806025455, + "rankLevel": 1, + "param": 10008, + "id": 400035, + "nameTextMapHash": 334829249, + "descTextMapHash": 1812221258, + "icon": "UI_RelicIcon_10008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2868596111, + "rankLevel": 2, + "param": 10008, + "id": 400036, + "nameTextMapHash": 4151361937, + "descTextMapHash": 846041898, + "icon": "UI_RelicIcon_10008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1451178039, + "rankLevel": 3, + "param": 10008, + "id": 400037, + "nameTextMapHash": 2183030137, + "descTextMapHash": 3518784730, + "icon": "UI_RelicIcon_10008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3953992351, + "rankLevel": 4, + "param": 10008, + "id": 400038, + "nameTextMapHash": 3748755097, + "descTextMapHash": 1462100178, + "icon": "UI_RelicIcon_10008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2130457879, + "rankLevel": 5, + "param": 10008, + "id": 400039, + "nameTextMapHash": 2727195289, + "descTextMapHash": 3992792658, + "icon": "UI_RelicIcon_10008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3849654319, + "rankLevel": 1, + "param": 10009, + "id": 400040, + "nameTextMapHash": 2705989913, + "descTextMapHash": 2461921586, + "icon": "UI_RelicIcon_10009_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1002987375, + "rankLevel": 2, + "param": 10009, + "id": 400041, + "nameTextMapHash": 1444729305, + "descTextMapHash": 2447643826, + "icon": "UI_RelicIcon_10009_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2927748247, + "rankLevel": 3, + "param": 10009, + "id": 400042, + "nameTextMapHash": 3863439601, + "descTextMapHash": 3214956690, + "icon": "UI_RelicIcon_10009_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1080479335, + "rankLevel": 4, + "param": 10009, + "id": 400043, + "nameTextMapHash": 634336161, + "descTextMapHash": 3644274130, + "icon": "UI_RelicIcon_10009_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3941127719, + "rankLevel": 5, + "param": 10009, + "id": 400044, + "nameTextMapHash": 2199672057, + "descTextMapHash": 2071477450, + "icon": "UI_RelicIcon_10009_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2278286823, + "rankLevel": 1, + "param": 10010, + "id": 400045, + "nameTextMapHash": 3833300977, + "descTextMapHash": 2508837314, + "icon": "UI_RelicIcon_10010_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2054643951, + "rankLevel": 2, + "param": 10010, + "id": 400046, + "nameTextMapHash": 674805713, + "descTextMapHash": 3413086082, + "icon": "UI_RelicIcon_10010_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3086151535, + "rankLevel": 3, + "param": 10010, + "id": 400047, + "nameTextMapHash": 2472682233, + "descTextMapHash": 3191948410, + "icon": "UI_RelicIcon_10010_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2848991655, + "rankLevel": 4, + "param": 10010, + "id": 400048, + "nameTextMapHash": 927944529, + "descTextMapHash": 2377860154, + "icon": "UI_RelicIcon_10010_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2285710607, + "rankLevel": 5, + "param": 10010, + "id": 400049, + "nameTextMapHash": 2774586849, + "descTextMapHash": 3649215562, + "icon": "UI_RelicIcon_10010_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3615228759, + "rankLevel": 1, + "param": 10011, + "id": 400050, + "nameTextMapHash": 409348857, + "descTextMapHash": 2410085442, + "icon": "UI_RelicIcon_10011_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 475280999, + "rankLevel": 2, + "param": 10011, + "id": 400051, + "nameTextMapHash": 1975249953, + "descTextMapHash": 1921365594, + "icon": "UI_RelicIcon_10011_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2867495071, + "rankLevel": 3, + "param": 10011, + "id": 400052, + "nameTextMapHash": 1389084425, + "descTextMapHash": 4031422402, + "icon": "UI_RelicIcon_10011_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2735890623, + "rankLevel": 4, + "param": 10011, + "id": 400053, + "nameTextMapHash": 4066303449, + "descTextMapHash": 466564450, + "icon": "UI_RelicIcon_10011_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1343018879, + "rankLevel": 5, + "param": 10011, + "id": 400054, + "nameTextMapHash": 3259256353, + "descTextMapHash": 1870869242, + "icon": "UI_RelicIcon_10011_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2209639791, + "rankLevel": 1, + "param": 10012, + "id": 400055, + "nameTextMapHash": 674552305, + "descTextMapHash": 2959429138, + "icon": "UI_RelicIcon_10012_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2953025455, + "rankLevel": 2, + "param": 10012, + "id": 400056, + "nameTextMapHash": 1163887857, + "descTextMapHash": 3383981914, + "icon": "UI_RelicIcon_10012_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1938277575, + "rankLevel": 3, + "param": 10012, + "id": 400057, + "nameTextMapHash": 681663489, + "descTextMapHash": 69596434, + "icon": "UI_RelicIcon_10012_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3772750575, + "rankLevel": 4, + "param": 10012, + "id": 400058, + "nameTextMapHash": 4127294977, + "descTextMapHash": 3987198450, + "icon": "UI_RelicIcon_10012_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2293299599, + "rankLevel": 5, + "param": 10012, + "id": 400059, + "nameTextMapHash": 2903046105, + "descTextMapHash": 3269995626, + "icon": "UI_RelicIcon_10012_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1845515511, + "rankLevel": 1, + "param": 10013, + "id": 400060, + "nameTextMapHash": 3502111921, + "descTextMapHash": 2723193154, + "icon": "UI_RelicIcon_10013_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1542195695, + "rankLevel": 2, + "param": 10013, + "id": 400061, + "nameTextMapHash": 1773401049, + "descTextMapHash": 1561636242, + "icon": "UI_RelicIcon_10013_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2289050343, + "rankLevel": 3, + "param": 10013, + "id": 400062, + "nameTextMapHash": 2787252177, + "descTextMapHash": 1261547290, + "icon": "UI_RelicIcon_10013_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 587845471, + "rankLevel": 4, + "param": 10013, + "id": 400063, + "nameTextMapHash": 1345129713, + "descTextMapHash": 2293192522, + "icon": "UI_RelicIcon_10013_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2998330335, + "rankLevel": 5, + "param": 10013, + "id": 400064, + "nameTextMapHash": 19715033, + "descTextMapHash": 2950860130, + "icon": "UI_RelicIcon_10013_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3212120407, + "rankLevel": 1, + "param": 14001, + "id": 400065, + "nameTextMapHash": 2957822793, + "descTextMapHash": 394715722, + "icon": "UI_RelicIcon_14001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4108575295, + "rankLevel": 2, + "param": 14001, + "id": 400066, + "nameTextMapHash": 1113152801, + "descTextMapHash": 615072586, + "icon": "UI_RelicIcon_14001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1280360175, + "rankLevel": 3, + "param": 14001, + "id": 400067, + "nameTextMapHash": 461141697, + "descTextMapHash": 48142794, + "icon": "UI_RelicIcon_14001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 970463127, + "rankLevel": 4, + "param": 14001, + "id": 400068, + "nameTextMapHash": 874178113, + "descTextMapHash": 3058634266, + "icon": "UI_RelicIcon_14001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 471183463, + "rankLevel": 5, + "param": 14001, + "id": 400069, + "nameTextMapHash": 3044182913, + "descTextMapHash": 1181711826, + "icon": "UI_RelicIcon_14001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3841157215, + "rankLevel": 1, + "param": 14002, + "id": 400070, + "nameTextMapHash": 3111849345, + "descTextMapHash": 411040122, + "icon": "UI_RelicIcon_14002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 130762495, + "rankLevel": 2, + "param": 14002, + "id": 400071, + "nameTextMapHash": 4202140537, + "descTextMapHash": 3333592634, + "icon": "UI_RelicIcon_14002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2739444975, + "rankLevel": 3, + "param": 14002, + "id": 400072, + "nameTextMapHash": 1051997641, + "descTextMapHash": 888066378, + "icon": "UI_RelicIcon_14002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1108564823, + "rankLevel": 4, + "param": 14002, + "id": 400073, + "nameTextMapHash": 809005113, + "descTextMapHash": 2212623330, + "icon": "UI_RelicIcon_14002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1022812047, + "rankLevel": 5, + "param": 14002, + "id": 400074, + "nameTextMapHash": 2907139945, + "descTextMapHash": 2871838658, + "icon": "UI_RelicIcon_14002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3855180839, + "rankLevel": 1, + "param": 14003, + "id": 400075, + "nameTextMapHash": 3812264553, + "descTextMapHash": 4223193178, + "icon": "UI_RelicIcon_14003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4168399599, + "rankLevel": 2, + "param": 14003, + "id": 400076, + "nameTextMapHash": 3077650225, + "descTextMapHash": 743259586, + "icon": "UI_RelicIcon_14003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3257042215, + "rankLevel": 3, + "param": 14003, + "id": 400077, + "nameTextMapHash": 817784209, + "descTextMapHash": 4004125890, + "icon": "UI_RelicIcon_14003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2866509695, + "rankLevel": 4, + "param": 14003, + "id": 400078, + "nameTextMapHash": 1862663065, + "descTextMapHash": 3086353242, + "icon": "UI_RelicIcon_14003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1009827815, + "rankLevel": 5, + "param": 14003, + "id": 400079, + "nameTextMapHash": 2705999809, + "descTextMapHash": 3166642786, + "icon": "UI_RelicIcon_14003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2922338975, + "rankLevel": 1, + "param": 14004, + "id": 400080, + "nameTextMapHash": 191175537, + "descTextMapHash": 4069632922, + "icon": "UI_RelicIcon_14004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4223863871, + "rankLevel": 2, + "param": 14004, + "id": 400081, + "nameTextMapHash": 4251805129, + "descTextMapHash": 1013196194, + "icon": "UI_RelicIcon_14004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3511054711, + "rankLevel": 3, + "param": 14004, + "id": 400082, + "nameTextMapHash": 2543704793, + "descTextMapHash": 119746754, + "icon": "UI_RelicIcon_14004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1768321455, + "rankLevel": 4, + "param": 14004, + "id": 400083, + "nameTextMapHash": 3262423929, + "descTextMapHash": 3098987474, + "icon": "UI_RelicIcon_14004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1754392615, + "rankLevel": 5, + "param": 14004, + "id": 400084, + "nameTextMapHash": 3153452425, + "descTextMapHash": 1422663682, + "icon": "UI_RelicIcon_14004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 450053679, + "rankLevel": 1, + "param": 15001, + "id": 400085, + "nameTextMapHash": 163914217, + "descTextMapHash": 3119019442, + "icon": "UI_RelicIcon_15001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3766625767, + "rankLevel": 2, + "param": 15001, + "id": 400086, + "nameTextMapHash": 2701026001, + "descTextMapHash": 1935007530, + "icon": "UI_RelicIcon_15001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1791393023, + "rankLevel": 3, + "param": 15001, + "id": 400087, + "nameTextMapHash": 3675935833, + "descTextMapHash": 1433091642, + "icon": "UI_RelicIcon_15001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2910709375, + "rankLevel": 4, + "param": 15001, + "id": 400088, + "nameTextMapHash": 2063221481, + "descTextMapHash": 3298131930, + "icon": "UI_RelicIcon_15001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 860733855, + "rankLevel": 5, + "param": 15001, + "id": 400089, + "nameTextMapHash": 802240673, + "descTextMapHash": 1869990810, + "icon": "UI_RelicIcon_15001_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1916445559, + "rankLevel": 1, + "param": 15002, + "id": 400090, + "nameTextMapHash": 3969435777, + "descTextMapHash": 2171165954, + "icon": "UI_RelicIcon_15002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2764245151, + "rankLevel": 2, + "param": 15002, + "id": 400091, + "nameTextMapHash": 3642628225, + "descTextMapHash": 1109631986, + "icon": "UI_RelicIcon_15002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3553694415, + "rankLevel": 3, + "param": 15002, + "id": 400092, + "nameTextMapHash": 3707638457, + "descTextMapHash": 3580239138, + "icon": "UI_RelicIcon_15002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1817495503, + "rankLevel": 4, + "param": 15002, + "id": 400093, + "nameTextMapHash": 2439963817, + "descTextMapHash": 1293398410, + "icon": "UI_RelicIcon_15002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 569300095, + "rankLevel": 5, + "param": 15002, + "id": 400094, + "nameTextMapHash": 3489672513, + "descTextMapHash": 363841578, + "icon": "UI_RelicIcon_15002_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3104250951, + "rankLevel": 1, + "param": 15003, + "id": 400095, + "nameTextMapHash": 2936488761, + "descTextMapHash": 2934699754, + "icon": "UI_RelicIcon_15003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2136846967, + "rankLevel": 2, + "param": 15003, + "id": 400096, + "nameTextMapHash": 552894225, + "descTextMapHash": 348901442, + "icon": "UI_RelicIcon_15003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 11674999, + "rankLevel": 3, + "param": 15003, + "id": 400097, + "nameTextMapHash": 3738082673, + "descTextMapHash": 706220378, + "icon": "UI_RelicIcon_15003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1609701823, + "rankLevel": 4, + "param": 15003, + "id": 400098, + "nameTextMapHash": 185640969, + "descTextMapHash": 1223547034, + "icon": "UI_RelicIcon_15003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3838229759, + "rankLevel": 5, + "param": 15003, + "id": 400099, + "nameTextMapHash": 2334795545, + "descTextMapHash": 4207966954, + "icon": "UI_RelicIcon_15003_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1627459111, + "rankLevel": 1, + "param": 15004, + "id": 400100, + "nameTextMapHash": 1362850481, + "descTextMapHash": 4202359378, + "icon": "UI_RelicIcon_15004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4030110055, + "rankLevel": 2, + "param": 15004, + "id": 400101, + "nameTextMapHash": 2856774425, + "descTextMapHash": 3551404906, + "icon": "UI_RelicIcon_15004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1124247311, + "rankLevel": 3, + "param": 15004, + "id": 400102, + "nameTextMapHash": 2839857201, + "descTextMapHash": 3898958722, + "icon": "UI_RelicIcon_15004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2793060663, + "rankLevel": 4, + "param": 15004, + "id": 400103, + "nameTextMapHash": 2487138265, + "descTextMapHash": 3543757418, + "icon": "UI_RelicIcon_15004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2770744487, + "rankLevel": 5, + "param": 15004, + "id": 400104, + "nameTextMapHash": 2938335329, + "descTextMapHash": 4192097786, + "icon": "UI_RelicIcon_15004_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2040913495, + "rankLevel": 1, + "param": 15005, + "id": 400105, + "nameTextMapHash": 461367369, + "descTextMapHash": 2141028746, + "icon": "UI_RelicIcon_15005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3721187903, + "rankLevel": 2, + "param": 15005, + "id": 400106, + "nameTextMapHash": 1863932681, + "descTextMapHash": 325718626, + "icon": "UI_RelicIcon_15005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4175952975, + "rankLevel": 3, + "param": 15005, + "id": 400107, + "nameTextMapHash": 959951473, + "descTextMapHash": 4242774362, + "icon": "UI_RelicIcon_15005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2008943023, + "rankLevel": 4, + "param": 15005, + "id": 400108, + "nameTextMapHash": 77282553, + "descTextMapHash": 3161780314, + "icon": "UI_RelicIcon_15005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1220683919, + "rankLevel": 5, + "param": 15005, + "id": 400109, + "nameTextMapHash": 4057190225, + "descTextMapHash": 2394996594, + "icon": "UI_RelicIcon_15005_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1008942495, + "rankLevel": 1, + "param": 15006, + "id": 400110, + "nameTextMapHash": 1014415945, + "descTextMapHash": 2713849250, + "icon": "UI_RelicIcon_15006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2014286807, + "rankLevel": 2, + "param": 15006, + "id": 400111, + "nameTextMapHash": 278145233, + "descTextMapHash": 2151208778, + "icon": "UI_RelicIcon_15006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4220329471, + "rankLevel": 3, + "param": 15006, + "id": 400112, + "nameTextMapHash": 3196015065, + "descTextMapHash": 2262195018, + "icon": "UI_RelicIcon_15006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 367408839, + "rankLevel": 4, + "param": 15006, + "id": 400113, + "nameTextMapHash": 1377102065, + "descTextMapHash": 1257951402, + "icon": "UI_RelicIcon_15006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 623423991, + "rankLevel": 5, + "param": 15006, + "id": 400114, + "nameTextMapHash": 1174446721, + "descTextMapHash": 1593977690, + "icon": "UI_RelicIcon_15006_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1191598583, + "rankLevel": 1, + "param": 15007, + "id": 400115, + "nameTextMapHash": 913281913, + "descTextMapHash": 4015439746, + "icon": "UI_RelicIcon_15007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3694599743, + "rankLevel": 2, + "param": 15007, + "id": 400116, + "nameTextMapHash": 2619393169, + "descTextMapHash": 4253558890, + "icon": "UI_RelicIcon_15007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2568123647, + "rankLevel": 3, + "param": 15007, + "id": 400117, + "nameTextMapHash": 3457597953, + "descTextMapHash": 500919794, + "icon": "UI_RelicIcon_15007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3542861287, + "rankLevel": 4, + "param": 15007, + "id": 400118, + "nameTextMapHash": 3009732577, + "descTextMapHash": 674938442, + "icon": "UI_RelicIcon_15007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3780183719, + "rankLevel": 5, + "param": 15007, + "id": 400119, + "nameTextMapHash": 2803938137, + "descTextMapHash": 756822010, + "icon": "UI_RelicIcon_15007_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1192286303, + "rankLevel": 1, + "param": 15008, + "id": 400120, + "nameTextMapHash": 2416827057, + "descTextMapHash": 4182274066, + "icon": "UI_RelicIcon_15008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 912243127, + "rankLevel": 2, + "param": 15008, + "id": 400121, + "nameTextMapHash": 2962237801, + "descTextMapHash": 2534203066, + "icon": "UI_RelicIcon_15008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1973817519, + "rankLevel": 3, + "param": 15008, + "id": 400122, + "nameTextMapHash": 3184745785, + "descTextMapHash": 307808586, + "icon": "UI_RelicIcon_15008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2404215415, + "rankLevel": 4, + "param": 15008, + "id": 400123, + "nameTextMapHash": 3366606809, + "descTextMapHash": 3212416978, + "icon": "UI_RelicIcon_15008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3189932967, + "rankLevel": 5, + "param": 15008, + "id": 400124, + "nameTextMapHash": 1010593545, + "descTextMapHash": 2425222234, + "icon": "UI_RelicIcon_15008_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3009112991, + "rankLevel": 1, + "param": 15009, + "id": 400125, + "nameTextMapHash": 3865669473, + "descTextMapHash": 64424770, + "icon": "UI_RelicIcon_15009_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3175594783, + "rankLevel": 2, + "param": 15009, + "id": 400126, + "nameTextMapHash": 2704833129, + "descTextMapHash": 2741873002, + "icon": "UI_RelicIcon_15009_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 119537975, + "rankLevel": 3, + "param": 15009, + "id": 400127, + "nameTextMapHash": 3670092193, + "descTextMapHash": 3932611578, + "icon": "UI_RelicIcon_15009_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3185499367, + "rankLevel": 4, + "param": 15009, + "id": 400128, + "nameTextMapHash": 2887662793, + "descTextMapHash": 3901272050, + "icon": "UI_RelicIcon_15009_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3141995895, + "rankLevel": 5, + "param": 15009, + "id": 400129, + "nameTextMapHash": 3345039521, + "descTextMapHash": 1132330906, + "icon": "UI_RelicIcon_15009_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2412881687, + "rankLevel": 1, + "param": 15010, + "id": 400130, + "nameTextMapHash": 521235377, + "descTextMapHash": 84645498, + "icon": "UI_RelicIcon_15010_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 183673327, + "rankLevel": 2, + "param": 15010, + "id": 400131, + "nameTextMapHash": 98606657, + "descTextMapHash": 2683512810, + "icon": "UI_RelicIcon_15010_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3136420847, + "rankLevel": 3, + "param": 15010, + "id": 400132, + "nameTextMapHash": 2016136193, + "descTextMapHash": 2156625514, + "icon": "UI_RelicIcon_15010_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 361285583, + "rankLevel": 4, + "param": 15010, + "id": 400133, + "nameTextMapHash": 2272498361, + "descTextMapHash": 190057362, + "icon": "UI_RelicIcon_15010_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3822185263, + "rankLevel": 5, + "param": 15010, + "id": 400134, + "nameTextMapHash": 3997002617, + "descTextMapHash": 1163445850, + "icon": "UI_RelicIcon_15010_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1139234223, + "rankLevel": 1, + "param": 15011, + "id": 400135, + "nameTextMapHash": 4229222905, + "descTextMapHash": 2906807914, + "icon": "UI_RelicIcon_15011_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3390977399, + "rankLevel": 2, + "param": 15011, + "id": 400136, + "nameTextMapHash": 394047233, + "descTextMapHash": 373586306, + "icon": "UI_RelicIcon_15011_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 136480575, + "rankLevel": 3, + "param": 15011, + "id": 400137, + "nameTextMapHash": 3023944209, + "descTextMapHash": 2351179586, + "icon": "UI_RelicIcon_15011_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2926956319, + "rankLevel": 4, + "param": 15011, + "id": 400138, + "nameTextMapHash": 1884810337, + "descTextMapHash": 3223657010, + "icon": "UI_RelicIcon_15011_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2901823663, + "rankLevel": 5, + "param": 15011, + "id": 400139, + "nameTextMapHash": 2019417977, + "descTextMapHash": 1034794146, + "icon": "UI_RelicIcon_15011_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2292866583, + "rankLevel": 1, + "param": 15012, + "id": 400140, + "nameTextMapHash": 3575070305, + "descTextMapHash": 1515860586, + "icon": "UI_RelicIcon_15012_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3520790455, + "rankLevel": 2, + "param": 15012, + "id": 400141, + "nameTextMapHash": 3370719257, + "descTextMapHash": 3831221634, + "icon": "UI_RelicIcon_15012_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2632975647, + "rankLevel": 3, + "param": 15012, + "id": 400142, + "nameTextMapHash": 518034073, + "descTextMapHash": 769617162, + "icon": "UI_RelicIcon_15012_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4280574599, + "rankLevel": 4, + "param": 15012, + "id": 400143, + "nameTextMapHash": 2033394089, + "descTextMapHash": 1673768562, + "icon": "UI_RelicIcon_15012_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1060136535, + "rankLevel": 5, + "param": 15012, + "id": 400144, + "nameTextMapHash": 3215920913, + "descTextMapHash": 2732987162, + "icon": "UI_RelicIcon_15012_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1134771247, + "rankLevel": 1, + "param": 15013, + "id": 400145, + "nameTextMapHash": 4120516785, + "descTextMapHash": 1989934842, + "icon": "UI_RelicIcon_15013_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 321779359, + "rankLevel": 2, + "param": 15013, + "id": 400146, + "nameTextMapHash": 2294379529, + "descTextMapHash": 1873757626, + "icon": "UI_RelicIcon_15013_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1408397479, + "rankLevel": 3, + "param": 15013, + "id": 400147, + "nameTextMapHash": 793290745, + "descTextMapHash": 3655925418, + "icon": "UI_RelicIcon_15013_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2143950863, + "rankLevel": 4, + "param": 15013, + "id": 400148, + "nameTextMapHash": 1952579793, + "descTextMapHash": 3619478802, + "icon": "UI_RelicIcon_15013_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3245383143, + "rankLevel": 5, + "param": 15013, + "id": 400149, + "nameTextMapHash": 3269152153, + "descTextMapHash": 3057516250, + "icon": "UI_RelicIcon_15013_3", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 417518607, + "rankLevel": 1, + "param": 15014, + "id": 400150, + "nameTextMapHash": 1900192521, + "descTextMapHash": 734805226, + "icon": "UI_RelicIcon_15014_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3074894295, + "rankLevel": 2, + "param": 15014, + "id": 400151, + "nameTextMapHash": 3771481633, + "descTextMapHash": 4110146026, + "icon": "UI_RelicIcon_15014_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 942471999, + "rankLevel": 3, + "param": 15014, + "id": 400152, + "nameTextMapHash": 3755964937, + "descTextMapHash": 4215981090, + "icon": "UI_RelicIcon_15014_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4138913647, + "rankLevel": 4, + "param": 15014, + "id": 400153, + "nameTextMapHash": 1369877081, + "descTextMapHash": 77612450, + "icon": "UI_RelicIcon_15014_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3896683999, + "rankLevel": 5, + "param": 15014, + "id": 400154, + "nameTextMapHash": 1181556057, + "descTextMapHash": 2300691362, + "icon": "UI_RelicIcon_15014_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4236517895, + "rankLevel": 1, + "param": 15015, + "id": 400155, + "nameTextMapHash": 809663817, + "descTextMapHash": 3855672594, + "icon": "UI_RelicIcon_15015_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 509417103, + "rankLevel": 2, + "param": 15015, + "id": 400156, + "nameTextMapHash": 1835597145, + "descTextMapHash": 3271242930, + "icon": "UI_RelicIcon_15015_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3318102983, + "rankLevel": 3, + "param": 15015, + "id": 400157, + "nameTextMapHash": 3120787865, + "descTextMapHash": 1975499402, + "icon": "UI_RelicIcon_15015_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3725785079, + "rankLevel": 4, + "param": 15015, + "id": 400158, + "nameTextMapHash": 3272236921, + "descTextMapHash": 2036850850, + "icon": "UI_RelicIcon_15015_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4153259263, + "rankLevel": 5, + "param": 15015, + "id": 400159, + "nameTextMapHash": 1222882825, + "descTextMapHash": 1637689554, + "icon": "UI_RelicIcon_15015_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 863241655, + "rankLevel": 1, + "param": 15016, + "id": 400160, + "nameTextMapHash": 136617793, + "descTextMapHash": 1416502674, + "icon": "UI_RelicIcon_15016_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3822144951, + "rankLevel": 2, + "param": 15016, + "id": 400161, + "nameTextMapHash": 741797129, + "descTextMapHash": 1523147162, + "icon": "UI_RelicIcon_15016_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3152842911, + "rankLevel": 3, + "param": 15016, + "id": 400162, + "nameTextMapHash": 3626539121, + "descTextMapHash": 527025770, + "icon": "UI_RelicIcon_15016_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1523506751, + "rankLevel": 4, + "param": 15016, + "id": 400163, + "nameTextMapHash": 2038917049, + "descTextMapHash": 268669346, + "icon": "UI_RelicIcon_15016_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2595445319, + "rankLevel": 5, + "param": 15016, + "id": 400164, + "nameTextMapHash": 2783514185, + "descTextMapHash": 1227832146, + "icon": "UI_RelicIcon_15016_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 241187423, + "rankLevel": 1, + "param": 15017, + "id": 400165, + "nameTextMapHash": 346769057, + "descTextMapHash": 3415676538, + "icon": "UI_RelicIcon_15017_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 682234567, + "rankLevel": 2, + "param": 15017, + "id": 400166, + "nameTextMapHash": 277526977, + "descTextMapHash": 2573778106, + "icon": "UI_RelicIcon_15017_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2929355399, + "rankLevel": 3, + "param": 15017, + "id": 400167, + "nameTextMapHash": 2505371481, + "descTextMapHash": 2802576034, + "icon": "UI_RelicIcon_15017_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 56926847, + "rankLevel": 4, + "param": 15017, + "id": 400168, + "nameTextMapHash": 3809966577, + "descTextMapHash": 1073577442, + "icon": "UI_RelicIcon_15017_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3793484935, + "rankLevel": 5, + "param": 15017, + "id": 400169, + "nameTextMapHash": 3722036745, + "descTextMapHash": 2890776402, + "icon": "UI_RelicIcon_15017_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 292683511, + "rankLevel": 1, + "param": 15018, + "id": 400170, + "nameTextMapHash": 2029367273, + "descTextMapHash": 2600917778, + "icon": "UI_RelicIcon_15018_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 858161239, + "rankLevel": 2, + "param": 15018, + "id": 400171, + "nameTextMapHash": 3306032761, + "descTextMapHash": 3867614874, + "icon": "UI_RelicIcon_15018_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1921725711, + "rankLevel": 3, + "param": 15018, + "id": 400172, + "nameTextMapHash": 809378017, + "descTextMapHash": 3672211258, + "icon": "UI_RelicIcon_15018_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 897987359, + "rankLevel": 4, + "param": 15018, + "id": 400173, + "nameTextMapHash": 588361993, + "descTextMapHash": 3252228882, + "icon": "UI_RelicIcon_15018_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3904418255, + "rankLevel": 5, + "param": 15018, + "id": 400174, + "nameTextMapHash": 3723959073, + "descTextMapHash": 2930897602, + "icon": "UI_RelicIcon_15018_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1774260463, + "rankLevel": 1, + "param": 15019, + "id": 400175, + "nameTextMapHash": 1570486289, + "descTextMapHash": 986680546, + "icon": "UI_RelicIcon_15019_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 464332391, + "rankLevel": 2, + "param": 15019, + "id": 400176, + "nameTextMapHash": 2261709353, + "descTextMapHash": 1155677218, + "icon": "UI_RelicIcon_15019_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 489068559, + "rankLevel": 3, + "param": 15019, + "id": 400177, + "nameTextMapHash": 3130904289, + "descTextMapHash": 2216476922, + "icon": "UI_RelicIcon_15019_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1142624743, + "rankLevel": 4, + "param": 15019, + "id": 400178, + "nameTextMapHash": 591245353, + "descTextMapHash": 1198829962, + "icon": "UI_RelicIcon_15019_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3097466799, + "rankLevel": 5, + "param": 15019, + "id": 400179, + "nameTextMapHash": 1623885257, + "descTextMapHash": 2506921426, + "icon": "UI_RelicIcon_15019_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2686120311, + "rankLevel": 1, + "param": 15020, + "id": 400180, + "nameTextMapHash": 1616876569, + "descTextMapHash": 1121669794, + "icon": "UI_RelicIcon_15020_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 746735767, + "rankLevel": 2, + "param": 15020, + "id": 400181, + "nameTextMapHash": 3418093857, + "descTextMapHash": 241052490, + "icon": "UI_RelicIcon_15020_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1623605855, + "rankLevel": 3, + "param": 15020, + "id": 400182, + "nameTextMapHash": 850845273, + "descTextMapHash": 405996418, + "icon": "UI_RelicIcon_15020_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2473559415, + "rankLevel": 4, + "param": 15020, + "id": 400183, + "nameTextMapHash": 3094700057, + "descTextMapHash": 3944176594, + "icon": "UI_RelicIcon_15020_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4067910823, + "rankLevel": 5, + "param": 15020, + "id": 400184, + "nameTextMapHash": 4275647481, + "descTextMapHash": 67218042, + "icon": "UI_RelicIcon_15020_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3126225823, + "rankLevel": 1, + "param": 15021, + "id": 400185, + "nameTextMapHash": 2894909313, + "descTextMapHash": 4184096594, + "icon": "UI_RelicIcon_15021_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 339108343, + "rankLevel": 2, + "param": 15021, + "id": 400186, + "nameTextMapHash": 1926475833, + "descTextMapHash": 2649611722, + "icon": "UI_RelicIcon_15021_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3846031623, + "rankLevel": 3, + "param": 15021, + "id": 400187, + "nameTextMapHash": 104325481, + "descTextMapHash": 3418948130, + "icon": "UI_RelicIcon_15021_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3960685719, + "rankLevel": 4, + "param": 15021, + "id": 400188, + "nameTextMapHash": 3800523049, + "descTextMapHash": 2656782602, + "icon": "UI_RelicIcon_15021_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1220144103, + "rankLevel": 5, + "param": 15021, + "id": 400189, + "nameTextMapHash": 151884321, + "descTextMapHash": 706453162, + "icon": "UI_RelicIcon_15021_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1408356543, + "rankLevel": 1, + "param": 15022, + "id": 400190, + "nameTextMapHash": 2996061297, + "descTextMapHash": 2458227770, + "icon": "UI_RelicIcon_15022_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2206350359, + "rankLevel": 2, + "param": 15022, + "id": 400191, + "nameTextMapHash": 1945973977, + "descTextMapHash": 3843458114, + "icon": "UI_RelicIcon_15022_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2286651911, + "rankLevel": 3, + "param": 15022, + "id": 400192, + "nameTextMapHash": 2685761369, + "descTextMapHash": 2436534266, + "icon": "UI_RelicIcon_15022_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1740523519, + "rankLevel": 4, + "param": 15022, + "id": 400193, + "nameTextMapHash": 1695606113, + "descTextMapHash": 2859746474, + "icon": "UI_RelicIcon_15022_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 232768719, + "rankLevel": 5, + "param": 15022, + "id": 400194, + "nameTextMapHash": 2838071273, + "descTextMapHash": 388124714, + "icon": "UI_RelicIcon_15022_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3848990167, + "rankLevel": 1, + "param": 15023, + "id": 400195, + "nameTextMapHash": 3101521161, + "descTextMapHash": 4275041634, + "icon": "UI_RelicIcon_15023_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3269622247, + "rankLevel": 2, + "param": 15023, + "id": 400196, + "nameTextMapHash": 3930671337, + "descTextMapHash": 2296664554, + "icon": "UI_RelicIcon_15023_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 815198855, + "rankLevel": 3, + "param": 15023, + "id": 400197, + "nameTextMapHash": 3925100889, + "descTextMapHash": 946148258, + "icon": "UI_RelicIcon_15023_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2562228351, + "rankLevel": 4, + "param": 15023, + "id": 400198, + "nameTextMapHash": 2893444281, + "descTextMapHash": 1854398906, + "icon": "UI_RelicIcon_15023_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1041597679, + "rankLevel": 5, + "param": 15023, + "id": 400199, + "nameTextMapHash": 2011718905, + "descTextMapHash": 145658874, + "icon": "UI_RelicIcon_15023_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2784978535, + "rankLevel": 1, + "param": 15024, + "id": 400200, + "nameTextMapHash": 4053247081, + "descTextMapHash": 1001542874, + "icon": "UI_RelicIcon_15024_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3215550687, + "rankLevel": 2, + "param": 15024, + "id": 400201, + "nameTextMapHash": 1137032809, + "descTextMapHash": 1606291506, + "icon": "UI_RelicIcon_15024_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 778138615, + "rankLevel": 3, + "param": 15024, + "id": 400202, + "nameTextMapHash": 2410987305, + "descTextMapHash": 2216948522, + "icon": "UI_RelicIcon_15024_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1929956143, + "rankLevel": 4, + "param": 15024, + "id": 400203, + "nameTextMapHash": 4187481489, + "descTextMapHash": 3497082938, + "icon": "UI_RelicIcon_15024_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1570010111, + "rankLevel": 5, + "param": 15024, + "id": 400204, + "nameTextMapHash": 3295464401, + "descTextMapHash": 495271050, + "icon": "UI_RelicIcon_15024_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1634190111, + "rankLevel": 1, + "param": 15025, + "id": 400205, + "nameTextMapHash": 3687571241, + "descTextMapHash": 3489609466, + "icon": "UI_RelicIcon_15025_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 4101151127, + "rankLevel": 2, + "param": 15025, + "id": 400206, + "nameTextMapHash": 3433391185, + "descTextMapHash": 535460114, + "icon": "UI_RelicIcon_15025_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2372386463, + "rankLevel": 3, + "param": 15025, + "id": 400207, + "nameTextMapHash": 1232816025, + "descTextMapHash": 1604667450, + "icon": "UI_RelicIcon_15025_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2105904615, + "rankLevel": 4, + "param": 15025, + "id": 400208, + "nameTextMapHash": 2468076273, + "descTextMapHash": 2712030466, + "icon": "UI_RelicIcon_15025_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1036894463, + "rankLevel": 5, + "param": 15025, + "id": 400209, + "nameTextMapHash": 3089448137, + "descTextMapHash": 1005726234, + "icon": "UI_RelicIcon_15025_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2374699607, + "rankLevel": 1, + "param": 15026, + "id": 400210, + "nameTextMapHash": 2960609681, + "descTextMapHash": 2235777122, + "icon": "UI_RelicIcon_15026_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1158811919, + "rankLevel": 2, + "param": 15026, + "id": 400211, + "nameTextMapHash": 2570717633, + "descTextMapHash": 2889453506, + "icon": "UI_RelicIcon_15026_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2720685231, + "rankLevel": 3, + "param": 15026, + "id": 400212, + "nameTextMapHash": 763475449, + "descTextMapHash": 1889215354, + "icon": "UI_RelicIcon_15026_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3005743711, + "rankLevel": 4, + "param": 15026, + "id": 400213, + "nameTextMapHash": 55003377, + "descTextMapHash": 2600023850, + "icon": "UI_RelicIcon_15026_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1597584456, + "rankLevel": 5, + "param": 15026, + "id": 400214, + "nameTextMapHash": 1758613569, + "descTextMapHash": 1291039922, + "icon": "UI_RelicIcon_15026_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 830068375, + "rankLevel": 4, + "param": 15027, + "id": 400220, + "nameTextMapHash": 1658883201, + "descTextMapHash": 1755772250, + "icon": "UI_RelicIcon_15027_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3196176855, + "rankLevel": 5, + "param": 15027, + "id": 400221, + "nameTextMapHash": 2820679369, + "descTextMapHash": 3940383498, + "icon": "UI_RelicIcon_15027_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 395782655, + "rankLevel": 4, + "param": 15028, + "id": 400230, + "nameTextMapHash": 1967436969, + "descTextMapHash": 949474802, + "icon": "UI_RelicIcon_15028_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2577486127, + "rankLevel": 5, + "param": 15028, + "id": 400231, + "nameTextMapHash": 3033880561, + "descTextMapHash": 2836168714, + "icon": "UI_RelicIcon_15028_4", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 342345127, + "rankLevel": 5, + "id": 419000, + "nameTextMapHash": 3723237137, + "descTextMapHash": 454636058, + "icon": "UI_DisplayItemIcon_419000", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 447413943, + "rankLevel": 5, + "id": 419001, + "nameTextMapHash": 2012817457, + "descTextMapHash": 2373116058, + "icon": "UI_DisplayItemIcon_419001", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3721492255, + "rankLevel": 5, + "id": 419002, + "nameTextMapHash": 4141792441, + "descTextMapHash": 2956261242, + "icon": "UI_DisplayItemIcon_419002", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 61170855, + "rankLevel": 5, + "id": 419003, + "nameTextMapHash": 3682852601, + "descTextMapHash": 196022146, + "icon": "UI_DisplayItemIcon_419003", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1613865839, + "rankLevel": 5, + "id": 419004, + "nameTextMapHash": 4017406953, + "descTextMapHash": 3264091922, + "icon": "UI_DisplayItemIcon_419004", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 946181583, + "rankLevel": 5, + "id": 419005, + "nameTextMapHash": 2306601497, + "descTextMapHash": 1483428378, + "icon": "UI_DisplayItemIcon_419005", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2238905327, + "rankLevel": 5, + "id": 419006, + "nameTextMapHash": 1750253545, + "descTextMapHash": 2933300866, + "icon": "UI_DisplayItemIcon_419006", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 487894223, + "rankLevel": 5, + "id": 419007, + "nameTextMapHash": 3085240897, + "descTextMapHash": 1029758370, + "icon": "UI_DisplayItemIcon_419007", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 1316558303, + "rankLevel": 5, + "id": 419008, + "nameTextMapHash": 740019217, + "descTextMapHash": 2858158082, + "icon": "UI_DisplayItemIcon_419008", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3621595055, + "rankLevel": 5, + "id": 419009, + "nameTextMapHash": 840881833, + "descTextMapHash": 3059126994, + "icon": "UI_DisplayItemIcon_419009", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 3181621559, + "rankLevel": 5, + "id": 419010, + "nameTextMapHash": 4182266065, + "descTextMapHash": 4114643626, + "icon": "UI_DisplayItemIcon_419010", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 831472887, + "rankLevel": 5, + "id": 419011, + "nameTextMapHash": 2812873121, + "descTextMapHash": 3441852498, + "icon": "UI_DisplayItemIcon_419011", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2318602439, + "rankLevel": 5, + "id": 419012, + "nameTextMapHash": 570079177, + "descTextMapHash": 1651627274, + "icon": "UI_DisplayItemIcon_419012", + "itemType": "ITEM_DISPLAY" + }, + { + "typeDescTextMapHash": 2877555335, + "rankLevel": 5, + "id": 419013, + "nameTextMapHash": 1215418833, + "descTextMapHash": 305711386, + "icon": "UI_DisplayItemIcon_419013", + "itemType": "ITEM_DISPLAY" + } +] diff --git a/GenshinUID/tools/help_data/GenshinUID Help.xlsx b/GenshinUID/tools/help_data/GenshinUID Help.xlsx new file mode 100644 index 00000000..6d6d4a31 Binary files /dev/null and b/GenshinUID/tools/help_data/GenshinUID Help.xlsx differ diff --git a/GenshinUID/tools/img_crop.py b/GenshinUID/tools/img_crop.py new file mode 100644 index 00000000..7fdda232 --- /dev/null +++ b/GenshinUID/tools/img_crop.py @@ -0,0 +1,26 @@ +from pathlib import Path + +from PIL import Image + +target = Path(__file__).parent / 'support' +img = Path(__file__).parent / '图.png' +image = Image.open(img) +# 设置要裁剪的图块的宽度和高度 +width = 1750 +height = 1045 + +# 设置要裁剪的图块的位置 +positions = [ + (120 + width * x, 11540 + height * y) for x in range(2) for y in range(1) +] + +# 循环裁剪每个图块 +for i, position in enumerate(positions): + # 获取起始位置 + x, y = position + + # 裁剪图片 + cropped_image = image.crop((x, y, x + width, y + height)) + + # 保存裁剪后的图片 + cropped_image.save(target / "cropped_image_{}.png".format(i + 1)) diff --git a/GenshinUID/tools/panle_to_json.py b/GenshinUID/tools/panle_to_json.py new file mode 100644 index 00000000..dd808490 --- /dev/null +++ b/GenshinUID/tools/panle_to_json.py @@ -0,0 +1,217 @@ +import json +import asyncio +from pathlib import Path + +import httpx +import openpyxl + +R_PATH = Path(__file__).parent +DATA_PATH = R_PATH / 'blue_data' +ETC_PATH = Path(__file__).parents[1] / 'genshinuid_enka' / 'effect' + + +SAMPLE = { + '神里绫华': 'Q切割伤害', + '琴': 'Q领域发动治疗量', + '丽莎': ['E三层引雷长按伤害', 'Q放电伤害'], + '芭芭拉': 'Q治疗量', + '凯亚': 'Q伤害', + '迪卢克': 'Q斩击伤害(蒸发)', + '雷泽': 'A一段伤害', + '安柏': ['Q箭雨总伤害', 'A满蓄力瞄准射击'], + '温迪': 'A扩散伤害', + '香菱': 'Q旋火轮伤害(蒸发)', + '北斗': 'Q闪雷伤害', + '行秋': 'Q剑雨伤害', + '魈': 'A高空下落伤害', + '凝光': 'Q宝石伤害', + '可莉': 'A重击伤害(蒸发)', + '钟离': ['E总护盾量', 'Q伤害'], + '菲谢尔': 'E奥兹攻击伤害', + '班尼特': ['Q伤害(蒸发)', 'Q持续治疗'], + '达达利亚': 'Q伤害·近战(蒸发)', + '诺艾尔': 'A一段伤害', + '七七': 'Q治疗量', + '重云': 'Q伤害', + '甘雨': ['A霜华矢·霜华绽发伤害', 'A霜华矢·霜华绽发伤害(融化)'], + '阿贝多': 'E刹那之花伤害', + '迪奥娜': 'E护盾基础吸收量', + '莫娜': ['Q泡影破裂伤害(蒸发)', 'Q泡影破裂伤害'], + '刻晴': 'A重击伤害', + '砂糖': 'A扩散伤害', + '辛焱': ['Q伤害', 'E三级护盾吸收量'], + '罗莎莉亚': 'Q冰枪持续伤害', + '胡桃': 'A重击伤害(蒸发)', + '枫原万叶': 'A扩散伤害', + '烟绯': 'A重击伤害(蒸发)', + '宵宫': 'A一段伤害', + '托马': 'E护盾吸收量上限', + '优菈': 'Q光降之剑基础伤害(13层)', + '雷电将军': 'Q梦想一刀基础伤害(满愿力)', + '早柚': 'Q不倒貉貉治疗量', + '珊瑚宫心海': ['A一段伤害', 'E治疗量'], + '五郎': 'def', + '九条裟罗': 'Q天狗咒雷·金刚坏 伤害', + '荒泷一斗': 'A荒泷逆袈裟连斩伤害', + '八重神子': 'E杀生樱伤害·叁阶', + '鹿野院平藏': 'E伤害', + '夜兰': 'Q玄掷玲珑伤害', + '埃洛伊': 'Q伤害', + '申鹤': 'atk', + '云堇': 'def', + '久岐忍': 'E越祓草轮治疗量', + '神里绫人': 'E一段瞬水剑伤害', + '柯莱': 'Q跃动伤害(蔓激化)', + '多莉': 'Q持续治疗量', + '提纳里': 'A藏蕴花矢伤害(蔓激化)', + '妮露': 'A丰穰之核(绽放)', + '赛诺': 'E渡荒之雷(超激化)', + '坎蒂丝': 'Q水波冲击伤害', + '纳西妲': 'E灭净三业伤害(蔓激化)', + '莱依拉': 'E护盾基础吸收量', + '旅行者(草)': 'Q草灯莲攻击伤害(蔓激化)', + '旅行者(岩)': 'Q地震波单次伤害', + '旅行者(风)': 'A扩散伤害', + '流浪者': 'E空居·不生断伤害', + '珐露珊': 'Q伤害', + '艾尔海森': 'E1枚光幕攻击伤害(蔓激化)', + '瑶瑶': 'E白玉萝卜治疗量', +} + + +async def get_misc_info(mode: str, name: str): + ''' + :说明: + 一些杂项信息。 + :参数: + * name (str): 'enemies', 'foods', 'artifacts'。 + * name (str): 参数。 + :返回: + * data (str): 获取数据信息。 + ''' + url = 'https://info.minigg.cn/{}'.format(mode) + req = httpx.get(url=url, params={'query': name}) + return req.json() + + +async def getEquipName(name: str) -> str: + if name == '花神': + name = '乐园遗落之花' + elif name == '饰金': + name = '饰金之梦' + elif name == '追忆': + name = '追忆之注连' + print(name) + r = await get_misc_info('artifacts', name) + re = r['name'] + print(re) + return re + + +async def panle2Json() -> None: + ''' + :说明: + 访问DATA_PATH并转换数据为dmgMap.json。 + ''' + wb = openpyxl.load_workbook(str(DATA_PATH / '参考面板.xlsx'), data_only=True) + sheet = wb.active + + result = {} + char_result = [] + char_temp = '' + skill_temp = '' + skill_count = -1 + title = 0 + for row in range(9, 400): + temp = {} + char_name = sheet.cell(row, 1).value + skill = sheet.cell(row, 19).value + if char_name and char_name != '角色' and isinstance(char_name, str): + weapon = str(sheet.cell(row, 2).value) + equip_set = str(sheet.cell(row, 3).value) + if '4' in equip_set: + equip_set = equip_set.replace('4', '') + equip_set = await getEquipName(equip_set) + elif '2' in equip_set: + equip_set_list = equip_set[1:].split('2') + equip_set = '' + for i in equip_set_list: + equip_set += await getEquipName(i) + else: + print('error') + + equip_main = str(sheet.cell(row, 4).value) + g_atk = sheet.cell(row, 8).value + other = {} + for i in [9, 10]: + if sheet.cell(title, i).value is not None: + n = str(sheet.cell(title, i).value) + n = n.replace('力', '') + if '加成' in n: + continue + if sheet.cell(row, i).value is not None: + v = float(str(sheet.cell(row, i).value)) + if v: + other[n] = v + crit_rate = sheet.cell(row, 13).value + crit_dmg = sheet.cell(row, 14).value + + weapon = weapon.replace('试做', '试作') + char_name = ( + char_name.replace('空/荧', '旅行者') + .replace('(', '(') + .replace(')', ')') + ) + if char_name != char_temp: + skill_temp = '' + skill_count = -1 + if char_name in SAMPLE: + if isinstance(SAMPLE[char_name], str): + temp['skill'] = SAMPLE[char_name] + else: + if skill != skill_temp: + skill_count += 1 + skill_temp = skill + temp['skill'] = SAMPLE[char_name][skill_count] + value = ( + str(sheet.cell(row, 20).value) + if sheet.cell(row, 20).value + else '' + ) + if '.' in value: + value = float(value) + else: + value = 0 + temp['value'] = value + else: + temp['skill'] = '' + temp['seq'] = '{}|{}|{}'.format(weapon, equip_set, equip_main) + temp['critRate'] = crit_rate + temp['critDmg'] = crit_dmg + temp['atk'] = g_atk + temp['other'] = other + + if char_temp: + if char_name == char_temp: + pass + else: + result[char_temp] = char_result + char_result = [] + char_temp = char_name + else: + char_temp = char_name + char_result.append(temp) + if row == 344: + print('ok!') + result[char_temp] = char_result + else: + title = row + with open(ETC_PATH / 'dmg_map.json', 'w', encoding='UTF-8') as file: + json.dump(result, file, ensure_ascii=False) + + +async def main(): + await panle2Json() + + +asyncio.run(main()) diff --git a/GenshinUID/utils/ambr_to_minigg.py b/GenshinUID/utils/ambr_to_minigg.py new file mode 100644 index 00000000..eb380035 --- /dev/null +++ b/GenshinUID/utils/ambr_to_minigg.py @@ -0,0 +1,257 @@ +import re +from typing import List, Union, Optional, TypedDict, cast + +from ..gsuid_utils.api.minigg.models import CharacterTalents +from .map.grow_curve import GROW_CURVE_LIST, WEAPON_GROW_CURVE +from ..gsuid_utils.api.ambr.request import ( + get_ambr_char_data, + get_ambr_weapon_data, +) + +PROP_MAP = { + 'FIGHT_PROP_BASE_HP': '基础生命值', + 'FIGHT_PROP_HP': '总生命值', + 'FIGHT_PROP_HP_PERCENT': '生命值', + 'FIGHT_PROP_BASE_ATTACK': '基础攻击力', + 'FIGHT_PROP_ATTACK': '总攻击力', + 'FIGHT_PROP_ATTACK_PERCENT': '攻击力', + 'FIGHT_PROP_BASE_DEFENSE': '基础防御力', + 'FIGHT_PROP_DEFENSE': '总防御力', + 'FIGHT_PROP_DEFENSE_PERCENT': '防御力', + 'FIGHT_PROP_CRITICAL': '暴击率', + 'FIGHT_PROP_ANTI_CRITICAL': '暴击抵抗', + 'FIGHT_PROP_CRITICAL_HURT': '暴击伤害', + 'FIGHT_PROP_CHARGE_EFFICIENCY': '元素充能效率', + 'FIGHT_PROP_HEAL_ADD': '治疗加成', + 'FIGHT_PROP_HEALED_ADD': '受治疗加成', + 'FIGHT_PROP_ELEMENT_MASTERY': '元素精通', + 'FIGHT_PROP_PHYSICAL_ADD_HURT': '物理伤害加成', + 'FIGHT_PROP_FIRE_ADD_HURT': '火元素伤害加成', + 'FIGHT_PROP_ELEC_ADD_HURT': '雷元素伤害加成', + 'FIGHT_PROP_WATER_ADD_HURT': '水元素伤害加成', + 'FIGHT_PROP_GRASS_ADD_HURT': '草元素伤害加成', + 'FIGHT_PROP_WIND_ADD_HURT': '风元素伤害加成', + 'FIGHT_PROP_ROCK_ADD_HURT': '岩元素伤害加成', + 'FIGHT_PROP_ICE_ADD_HURT': '冰元素伤害加成', + 'FIGHT_PROP_FIRE_SUB_HURT': '火元素抗性', + 'FIGHT_PROP_ELEC_SUB_HURT': '雷元素抗性', + 'FIGHT_PROP_WATER_SUB_HURT': '水元素抗性', + 'FIGHT_PROP_GRASS_SUB_HURT': '草元素抗性', + 'FIGHT_PROP_WIND_SUB_HURT': '风元素抗性', + 'FIGHT_PROP_ROCK_SUB_HURT': '岩元素抗性', + 'FIGHT_PROP_ICE_SUB_HURT': '冰元素抗性', +} + +ELEMENT_MAP = { + 'Wind': '风', + 'Ice': '冰', + 'Grass': '草', + 'Water': '水', + 'Electric': '雷', + 'Rock': '岩', + 'Fire': '火', +} + +TYPE_TO_INT = { + 'GROW_CURVE_HP_S4': 0, + 'GROW_CURVE_ATTACK_S4': 1, + 'GROW_CURVE_HP_S5': 2, + 'GROW_CURVE_ATTACK_S5': 3, +} + +WEAPON_TYPE = { + 'WEAPON_SWORD_ONE_HAND': '单手剑', + 'WEAPON_CATALYST': '法器', + 'WEAPON_CLAYMORE': '双手剑', + 'WEAPON_BOW': '弓', + 'WEAPON_POLE': '长柄武器', +} + + +class ConvertWeapon(TypedDict): + name: str + weapontype: str + rarity: str + baseatk: float + substat: str + effect: str + effectname: str + level: int + ascension: int + attack: float + specialized: float + r1: List[str] + r2: List[str] + r3: List[str] + r4: List[str] + r5: List[str] + + +class Image(TypedDict): + nameicon: str + + +class ConvertCharacter(TypedDict): + name: str + weapontype: str + rarity: str + baseatk: float + substat: str + effect: str + effectname: str + level: int + ascension: int + attack: float + specialized: float + title: str + element: str + images: Image + hp: float + defense: float + + +async def convert_ambr_to_weapon( + weapon_id: Union[int, str] +) -> Optional[ConvertWeapon]: + raw_data = await get_ambr_weapon_data(weapon_id) + if raw_data is None: + return None + effect = list(raw_data['affix'].values())[0] + effect_name = effect['name'] + effect_up = effect['upgrade'] + upgrade = raw_data['upgrade'] + baseatk = upgrade['prop'][0]['initValue'] + basesp = upgrade['prop'][-1]['initValue'] + result = { + 'name': raw_data['name'], + 'weapontype': raw_data['type'], + 'rarity': str(raw_data['rank']), + 'baseatk': baseatk, + 'substat': PROP_MAP[upgrade['prop'][1]['propType']], + 'effectname': effect_name, + 'level': 90, + 'ascension': 6, + } + for index, affix in enumerate(effect_up): + effect_value = re.findall( + r'\d+?.?\d+[^\u4e00-\u9fa5]+r>', + effect_up[affix], + ) + attr_list = [] + if index == 0: + result['effect'] = effect_up[affix] + for i, v in enumerate(effect_value): + if index == 0: + result['effect'] = result['effect'].replace(v, f'{{{i}}}') + r = re.search(r'>([0-9/.%]+)', v) + if r: + attr_list.append(r.group(1)) + result[f'r{index+1}'] = attr_list + atk_curve_type = upgrade['prop'][0]['type'] + sp_curve_type = upgrade['prop'][1]['type'] + atk_curve = WEAPON_GROW_CURVE['90']['curveInfos'][atk_curve_type] + sp_curve = WEAPON_GROW_CURVE['90']['curveInfos'][sp_curve_type] + atk_promoto = upgrade['promote'][-1]['addProps']['FIGHT_PROP_BASE_ATTACK'] + result['attack'] = atk_curve * baseatk + atk_promoto + result['specialized'] = sp_curve * basesp + return cast(ConvertWeapon, result) + + +async def convert_ambr_to_minigg( + char_id: Union[str, int] +) -> Optional[ConvertCharacter]: + raw_data = await get_ambr_char_data(char_id) + if raw_data is None: + return + result = { + 'name': raw_data['name'], + 'title': raw_data['fetter']['title'], + 'rarity': raw_data['rank'], + 'weapontype': WEAPON_TYPE[raw_data['weaponType']], + 'element': ELEMENT_MAP[raw_data['element']], + 'images': {'namesideicon': raw_data['icon']}, # 暂时适配 + 'substat': PROP_MAP[ + list(raw_data['upgrade']['promote'][-1]['addProps'].keys())[-1] + ], + 'hp': raw_data['upgrade']['prop'][0]['initValue'] + * GROW_CURVE_LIST[89]['curveInfos'][ + TYPE_TO_INT[raw_data['upgrade']['prop'][0]['type']] + ]['value'] + + raw_data['upgrade']['promote'][-1]['addProps']['FIGHT_PROP_BASE_HP'], + 'attack': raw_data['upgrade']['prop'][1]['initValue'] + * GROW_CURVE_LIST[89]['curveInfos'][ + TYPE_TO_INT[raw_data['upgrade']['prop'][1]['type']] + ]['value'] + + raw_data['upgrade']['promote'][-1]['addProps'][ + 'FIGHT_PROP_BASE_ATTACK' + ], + 'defense': raw_data['upgrade']['prop'][2]['initValue'] + * GROW_CURVE_LIST[89]['curveInfos'][ + TYPE_TO_INT[raw_data['upgrade']['prop'][2]['type']] + ]['value'] + + raw_data['upgrade']['promote'][-1]['addProps'][ + 'FIGHT_PROP_BASE_DEFENSE' + ], + 'specialized': raw_data['upgrade']['promote'][-1]['addProps'][ + list(raw_data['upgrade']['promote'][-1]['addProps'].keys())[-1] + ], + } + return cast(ConvertCharacter, result) + + +async def convert_ambr_to_talent( + char_id: Union[str, int] +) -> Optional[CharacterTalents]: + raw_data = await get_ambr_char_data(char_id) + if raw_data is None: + return + talent_data = raw_data['talent'] + result = {} + if '7' in talent_data: + num = ['0', '1', '4'] + else: + num = ['0', '1', '3'] + for index, i in enumerate(num): + result[f'combat{index+1}'] = { + 'name': talent_data[i]['name'], + 'info': talent_data[i]['description'], + 'attributes': { + 'labels': [], + 'parameters': {}, + }, + } + label_str = '' + for label in talent_data[i]['promote']['1']['description']: + if label: + label_str += label + result[f'combat{index+1}']['attributes']['labels'].append( + label + ) + para_list = re.findall(r'{(param[0-9]+):', label_str) + + # 进行排序 + new_para_list = [ + f'param{i}' + for i in sorted( + [ + int(i[-2:]) if i[-2].isdigit() else int(i[-1]) + for i in para_list + ] + ) + ] + + for ig, para in enumerate(new_para_list): + for level in talent_data[i]['promote']: + if ( + para + not in result[f'combat{index+1}']['attributes'][ + 'parameters' + ] + ): + result[f'combat{index+1}']['attributes']['parameters'][ + para + ] = [] + result[f'combat{index+1}']['attributes']['parameters'][ + para + ].append(talent_data[i]['promote'][level]['params'][ig]) + return cast(CharacterTalents, result) diff --git a/GenshinUID/utils/convert.py b/GenshinUID/utils/convert.py new file mode 100644 index 00000000..9836ef4c --- /dev/null +++ b/GenshinUID/utils/convert.py @@ -0,0 +1,77 @@ +import re +from typing import Optional + +from gsuid_core.bot import Bot +from gsuid_core.models import Event + +from .mys_api import mys_api +from .database import active_sqla +from .error_reply import VERIFY_HINT + + +async def get_uid(bot: Bot, ev: Event): + uid = re.findall(r'\d{9}', ev.text) + user_id = ev.at if ev.at else ev.user_id + if uid: + uid = uid[0] + else: + sqla = active_sqla[bot.bot_id] + uid = await sqla.get_bind_uid(user_id) + return uid + + +class GsCookie: + def __init__(self) -> None: + self.cookie: Optional[str] = None + self.uid: Optional[str] = None + self.raw_data = None + for bot_id in active_sqla: + self.sqla = active_sqla[bot_id] + break + + async def get_cookie(self, uid: str) -> str: + self.uid = uid + while True: + self.cookie = await self.sqla.get_random_cookie(uid) + if self.cookie is None: + return '没有可以使用的cookie!' + await self.get_uid_data() + msg = await self.check_cookies_useable() + if isinstance(msg, str): + return msg + elif msg: + return '' + + async def get_uid_data(self): + data = await mys_api.get_info(self.uid, self.cookie) + if not isinstance(data, int): + self.raw_data = data + + async def get_spiral_abyss_data(self, schedule_type: str = '1'): + data = await mys_api.get_spiral_abyss_info( + self.uid, schedule_type, self.cookie + ) + if isinstance(data, int): + return None + else: + return data + + async def check_cookies_useable(self): + if isinstance(self.raw_data, int) and self.cookie: + retcode = self.raw_data + if retcode == 10001: + await self.sqla.mark_invalid(self.cookie, 'error') + return False + # return '您的cookie已经失效, 请重新获取!' + elif retcode == 10101: + await self.sqla.mark_invalid(self.cookie, 'limit30') + return False + # return '当前查询CK已超过每日30次上限!' + elif retcode == 10102: + return '当前查询id已经设置了隐私, 无法查询!' + elif retcode == 1034: + return VERIFY_HINT + else: + return f'API报错, 错误码为{retcode}!' + else: + return True diff --git a/GenshinUID/utils/database.py b/GenshinUID/utils/database.py new file mode 100644 index 00000000..c54fddda --- /dev/null +++ b/GenshinUID/utils/database.py @@ -0,0 +1,26 @@ +from typing import Dict + +from sqlalchemy import event +from gsuid_core.gss import gss + +from ..gsuid_utils.database.dal import SQLA + +is_wal = False + +active_sqla: Dict[str, SQLA] = {} +db_url = 'GsData.db' + + +@gss.on_bot_connect +async def refresh_sqla(): + for bot_id in gss.active_bot: + sqla = SQLA(db_url, bot_id) + active_sqla[bot_id] = sqla + sqla.create_all() + + @event.listens_for(sqla.engine.sync_engine, 'connect') + def engine_connect(conn, branch): + if is_wal: + cursor = conn.cursor() + cursor.execute('PRAGMA journal_mode=WAL') + cursor.close() diff --git a/GenshinUID/utils/error_reply.py b/GenshinUID/utils/error_reply.py new file mode 100644 index 00000000..0cb6d2cc --- /dev/null +++ b/GenshinUID/utils/error_reply.py @@ -0,0 +1,29 @@ +from typing import Union + +UID_HINT = '你还没有绑定过uid哦!\n请使用[绑定uid123456]命令绑定!' +MYS_HINT = '你还没有绑定过mysid哦!\n请使用[绑定mys1234]命令绑定!' +CK_HINT = """你还没有绑定过Cookie哦! +警告:绑定Cookie可能会带来未知的账号风险,请确保信任机器人管理员 +获取Cookies教程:https://github.com/KimigaiiWuyi/GenshinUID/issues/255""" +CHAR_HINT = '你还没有{}的缓存噢!\n请先使用【强制刷新】命令来缓存数据! \n或者使用【查询展柜角色】命令查看已缓存角色!' +VERIFY_HINT = '''出现验证码! +如已绑定CK: 请至米游社软件->我的->我的角色处解锁验证码 +(可使用[gs关闭推送]命令关闭体力推送以减少出现验证码风险) +如未绑定CK: 可联系管理员使用[gs清除缓存]命令 +''' +SK_HINT = '你还没有绑定过Stoken或者Stoken已失效~\n请加好友私聊Bot\n [扫码登陆] 或 [添加]后跟SK格式 以绑定SK' + + +def get_error(retcode: Union[int, str]) -> str: + if retcode == -51: + return CK_HINT + if retcode == 10001: + return '您的cookie已经失效, 请重新获取!' + elif retcode == 10101: + return '当前查询CK已超过每日30次上限!' + elif retcode == 10102: + return '当前查询id已经设置了隐私, 无法查询!' + elif retcode == 1034: + return VERIFY_HINT + else: + return f'API报错, 错误码为{retcode}!' diff --git a/GenshinUID/utils/fonts/genshin_fonts.py b/GenshinUID/utils/fonts/genshin_fonts.py new file mode 100644 index 00000000..9c37076c --- /dev/null +++ b/GenshinUID/utils/fonts/genshin_fonts.py @@ -0,0 +1,28 @@ +from pathlib import Path + +from PIL import ImageFont + +FONT_ORIGIN_PATH = Path(__file__).parent / 'yuanshen_origin.ttf' + + +def genshin_font_origin(size: int) -> ImageFont.FreeTypeFont: + return ImageFont.truetype(str(FONT_ORIGIN_PATH), size=size) + + +gs_font_18 = genshin_font_origin(18) +gs_font_20 = genshin_font_origin(20) +gs_font_22 = genshin_font_origin(22) +gs_font_24 = genshin_font_origin(24) +gs_font_26 = genshin_font_origin(26) +gs_font_28 = genshin_font_origin(28) +gs_font_30 = genshin_font_origin(30) +gs_font_32 = genshin_font_origin(32) +gs_font_36 = genshin_font_origin(36) +gs_font_38 = genshin_font_origin(38) +gs_font_40 = genshin_font_origin(40) +gs_font_44 = genshin_font_origin(44) +gs_font_50 = genshin_font_origin(50) +gs_font_58 = genshin_font_origin(58) +gs_font_60 = genshin_font_origin(60) +gs_font_62 = genshin_font_origin(62) +gs_font_84 = genshin_font_origin(84) diff --git a/GenshinUID/utils/fonts/yuanshen_origin.ttf b/GenshinUID/utils/fonts/yuanshen_origin.ttf new file mode 100644 index 00000000..cd3ecd4d Binary files /dev/null and b/GenshinUID/utils/fonts/yuanshen_origin.ttf differ diff --git a/GenshinUID/utils/image/bg/nm_bg/zy.jpg b/GenshinUID/utils/image/bg/nm_bg/zy.jpg new file mode 100644 index 00000000..76042e07 Binary files /dev/null and b/GenshinUID/utils/image/bg/nm_bg/zy.jpg differ diff --git a/GenshinUID/utils/image/bg/sp_bg/shin-w.jpg b/GenshinUID/utils/image/bg/sp_bg/shin-w.jpg new file mode 100644 index 00000000..b0971705 Binary files /dev/null and b/GenshinUID/utils/image/bg/sp_bg/shin-w.jpg differ diff --git a/GenshinUID/utils/image/bg/sp_bg/teamdmg_bg.jpg b/GenshinUID/utils/image/bg/sp_bg/teamdmg_bg.jpg new file mode 100644 index 00000000..3af71375 Binary files /dev/null and b/GenshinUID/utils/image/bg/sp_bg/teamdmg_bg.jpg differ diff --git a/GenshinUID/utils/image/convert.py b/GenshinUID/utils/image/convert.py new file mode 100644 index 00000000..0fe1f625 --- /dev/null +++ b/GenshinUID/utils/image/convert.py @@ -0,0 +1,55 @@ +from io import BytesIO +from pathlib import Path +from base64 import b64encode +from typing import Union, overload + +import aiofiles +from PIL import Image + + +@overload +async def convert_img(img: Image.Image, is_base64: bool = False) -> bytes: + ... + + +@overload +async def convert_img(img: Image.Image, is_base64: bool = True) -> str: + ... + + +@overload +async def convert_img(img: bytes, is_base64: bool = False) -> str: + ... + + +@overload +async def convert_img(img: Path, is_base64: bool = False) -> str: + ... + + +async def convert_img( + img: Union[Image.Image, str, Path, bytes], is_base64: bool = False +): + """ + :说明: + 将PIL.Image对象转换为bytes或者base64格式。 + :参数: + * img (Image): 图片。 + * is_base64 (bool): 是否转换为base64格式, 不填默认转为bytes。 + :返回: + * res: bytes对象或base64编码图片。 + """ + if isinstance(img, Image.Image): + img = img.convert('RGB') + result_buffer = BytesIO() + img.save(result_buffer, format='PNG', quality=80, subsampling=0) + res = result_buffer.getvalue() + if is_base64: + res = 'base64://' + b64encode(res).decode() + return res + elif isinstance(img, bytes): + pass + else: + async with aiofiles.open(img, 'rb') as fp: + img = await fp.read() + return f'[CQ:image,file=base64://{b64encode(img).decode()}]' diff --git a/GenshinUID/utils/image/image_tools.py b/GenshinUID/utils/image/image_tools.py new file mode 100644 index 00000000..3d5aea56 --- /dev/null +++ b/GenshinUID/utils/image/image_tools.py @@ -0,0 +1,430 @@ +import math +import random +from io import BytesIO +from pathlib import Path +from typing import Tuple, Union, Optional + +import httpx +from httpx import get +from PIL import Image, ImageDraw, ImageFont + +from ..fonts.genshin_fonts import gs_font_32 +from ..resource.RESOURCE_PATH import CU_BG_PATH, TEXT2D_PATH + +FETTER_PATH = TEXT2D_PATH / 'fetter' +TALENT_PATH = TEXT2D_PATH / 'talent' +WEAPON_BG_PATH = TEXT2D_PATH / 'weapon' +WEAPON_AFFIX_PATH = TEXT2D_PATH / 'weapon_affix' +LEVEL_PATH = TEXT2D_PATH / 'level' + +BG_PATH = Path(__file__).parent / 'bg' +TEXT_PATH = Path(__file__).parent / 'texture2d' +ring_pic = Image.open(TEXT_PATH / 'ring.png') +mask_pic = Image.open(TEXT_PATH / 'mask.png') +NM_BG_PATH = BG_PATH / 'nm_bg' +SP_BG_PATH = BG_PATH / 'sp_bg' + +if list(CU_BG_PATH.iterdir()) != []: + bg_path = CU_BG_PATH +else: + bg_path = NM_BG_PATH + + +async def get_pic(url, size: Optional[Tuple[int, int]] = None) -> Image.Image: + """ + 从网络获取图片,格式化为RGBA格式的指定尺寸 + """ + async with httpx.AsyncClient() as client: + resp = await client.get(url=url) + if resp.status_code != 200: + if size is None: + size = (960, 600) + return Image.new('RGBA', size) + pic = Image.open(BytesIO(resp.read())) + pic = pic.convert("RGBA") + if size is not None: + pic = pic.resize(size, Image.LANCZOS) + return pic + + +def draw_text_by_line( + img: Image.Image, + pos: Tuple[int, int], + text: str, + font: ImageFont.FreeTypeFont, + fill: Union[Tuple[int, int, int, int], str], + max_length: float, + center=False, + line_space: Optional[float] = None, +): + """ + 在图片上写长段文字, 自动换行 + max_length单行最大长度, 单位像素 + line_space 行间距, 单位像素, 默认是字体高度的0.3倍 + """ + x, y = pos + _, h = font.getsize('X') + if line_space is None: + y_add = math.ceil(1.3 * h) + else: + y_add = math.ceil(h + line_space) + draw = ImageDraw.Draw(img) + row = "" # 存储本行文字 + length = 0 # 记录本行长度 + for character in text: + w, h = font.getsize(character) # 获取当前字符的宽度 + if length + w * 2 <= max_length: + row += character + length += w + else: + row += character + if center: + font_size = font.getsize(row) + x = math.ceil((img.size[0] - font_size[0]) / 2) + draw.text((x, y), row, font=font, fill=fill) + row = "" + length = 0 + y += y_add + if row != "": + if center: + font_size = font.getsize(row) + x = math.ceil((img.size[0] - font_size[0]) / 2) + draw.text((x, y), row, font=font, fill=fill) + + +def easy_paste( + im: Image.Image, im_paste: Image.Image, pos=(0, 0), direction="lt" +): + """ + inplace method + 快速粘贴, 自动获取被粘贴图像的坐标。 + pos应当是粘贴点坐标,direction指定粘贴点方位,例如lt为左上 + """ + x, y = pos + size_x, size_y = im_paste.size + if "d" in direction: + y = y - size_y + if "r" in direction: + x = x - size_x + if "c" in direction: + x = x - int(0.5 * size_x) + y = y - int(0.5 * size_y) + im.paste(im_paste, (x, y, x + size_x, y + size_y), im_paste) + + +def easy_alpha_composite( + im: Image.Image, im_paste: Image.Image, pos=(0, 0), direction="lt" +) -> Image.Image: + ''' + 透明图像快速粘贴 + ''' + base = Image.new("RGBA", im.size) + easy_paste(base, im_paste, pos, direction) + base = Image.alpha_composite(im, base) + return base + + +async def draw_bar( + title: str, + percent: float, + value: str, + color: Optional[Tuple[int, int, int]] = None, +): + ''' + :说明: + 绘制一张750X100的透明白底进度条图片 + + :参数: + * title: `str`: 名字 + * percent: `float`: 进度条百分比, 超过1的部分会被限制在1以内。 + * value: `str`: 右侧具体数值呈现 + * bcolor: `Optional[Tuple[int, int, int]]`: 指定文字颜色。 + + :返回: + * img: `Image.Image`: 图片对象 + ''' + bg = Image.open(TEXT2D_PATH / 'slider_bar.png') + if color is None: + color = (142, 91, 35) + if percent >= 1: + percent = 1 + + draw = ImageDraw.Draw(bg) + draw.text((53, 38), title, color, gs_font_32, 'lm') + draw.text((706, 38), value, (13, 13, 13), gs_font_32, 'rm') + bs = 670 * percent + draw.rounded_rectangle( + (40, 62, 40 + bs, 76), + fill=color, + radius=20, + ) + return bg + + +async def get_weapon_affix_pic(affix: int) -> Image.Image: + return Image.open(WEAPON_AFFIX_PATH / f'weapon_affix_{affix}.png') + + +async def get_fetter_pic(fetter: int) -> Image.Image: + return Image.open(FETTER_PATH / f'fetter_{fetter}.png') + + +async def get_talent_pic(talent: int) -> Image.Image: + return Image.open(TALENT_PATH / f'talent_{talent}.png') + + +async def get_weapon_pic(weapon_rarity: int) -> Image.Image: + return Image.open(WEAPON_BG_PATH / f'weapon_bg{weapon_rarity}.png') + + +async def get_level_pic(level: int) -> Image.Image: + return Image.open(LEVEL_PATH / f'level_{level}.png') + + +async def get_qq_avatar( + qid: Optional[Union[int, str]] = None, avatar_url: Optional[str] = None +) -> Image.Image: + if qid: + avatar_url = f'http://q1.qlogo.cn/g?b=qq&nk={qid}&s=640' + elif avatar_url is None: + avatar_url = 'https://q1.qlogo.cn/g?b=qq&nk=3399214199&s=640' + char_pic = Image.open(BytesIO(get(avatar_url).content)).convert('RGBA') + return char_pic + + +async def draw_pic_with_ring( + pic: Image.Image, + size: int, + bg_color: Optional[Tuple[int, int, int]] = None, +): + ''' + :说明: + 绘制一张带白色圆环的1:1比例图片。 + + :参数: + * pic: `Image.Image`: 要修改的图片。 + * size: `int`: 最后传出图片的大小(1:1)。 + * bg_color: `Optional[Tuple[int, int, int]]`: 是否指定圆环内背景颜色。 + + :返回: + * img: `Image.Image`: 图片对象 + ''' + img = Image.new('RGBA', (size, size)) + mask = mask_pic.resize((size, size)) + ring = ring_pic.resize((size, size)) + resize_pic = crop_center_img(pic, size, size) + if bg_color: + img_color = Image.new('RGBA', (size, size), bg_color) + img_color.paste(resize_pic, (0, 0), resize_pic) + img.paste(img_color, (0, 0), mask) + else: + img.paste(resize_pic, (0, 0), mask) + img.paste(ring, (0, 0), ring) + return img + + +def crop_center_img( + img: Image.Image, based_w: int, based_h: int +) -> Image.Image: + # 确定图片的长宽 + based_scale = '%.3f' % (based_w / based_h) + w, h = img.size + scale_f = '%.3f' % (w / h) + new_w = math.ceil(based_h * float(scale_f)) + new_h = math.ceil(based_w / float(scale_f)) + if scale_f > based_scale: + resize_img = img.resize((new_w, based_h), Image.ANTIALIAS) + x1 = int(new_w / 2 - based_w / 2) + y1 = 0 + x2 = int(new_w / 2 + based_w / 2) + y2 = based_h + else: + resize_img = img.resize((based_w, new_h), Image.ANTIALIAS) + x1 = 0 + y1 = int(new_h / 2 - based_h / 2) + x2 = based_w + y2 = int(new_h / 2 + based_h / 2) + crop_img = resize_img.crop((x1, y1, x2, y2)) + return crop_img + + +async def get_color_bg( + based_w: int, based_h: int, bg: Optional[str] = None +) -> Image.Image: + image = '' + if bg: + path = SP_BG_PATH / f'{bg}.jpg' + if path.exists(): + image = Image.open(path) + CI_img = CustomizeImage(image, based_w, based_h) + img = CI_img.bg_img + color = CI_img.bg_color + color_mask = Image.new('RGBA', (based_w, based_h), color) + enka_mask = Image.open(TEXT2D_PATH / 'mask.png').resize((based_w, based_h)) + img.paste(color_mask, (0, 0), enka_mask) + return img + + +async def get_simple_bg( + based_w: int, based_h: int, image: Union[str, None, Image.Image] = None +) -> Image.Image: + if image: + if isinstance(image, str): + edit_bg = Image.open(BytesIO(get(image).content)).convert('RGBA') + elif isinstance(image, Image.Image): + edit_bg = image.convert('RGBA') + else: + bg_path = random.choice(list(NM_BG_PATH.iterdir())) + edit_bg = Image.open(bg_path).convert('RGBA') + + # 确定图片的长宽 + bg_img = crop_center_img(edit_bg, based_w, based_h) + return bg_img + + +class CustomizeImage: + def __init__( + self, image: Union[str, Image.Image], based_w: int, based_h: int + ) -> None: + + self.bg_img = self.get_image(image, based_w, based_h) + self.bg_color = self.get_bg_color(self.bg_img, is_light=True) + self.text_color = self.get_text_color(self.bg_color) + self.highlight_color = self.get_highlight_color(self.bg_color) + self.char_color = self.get_char_color(self.bg_color) + self.bg_detail_color = self.get_bg_detail_color(self.bg_color) + self.char_high_color = self.get_char_high_color(self.bg_color) + + @staticmethod + def get_image( + image: Union[str, Image.Image], based_w: int, based_h: int + ) -> Image.Image: + # 获取背景图片 + if isinstance(image, Image.Image): + edit_bg = image + elif image: + edit_bg = Image.open(BytesIO(get(image).content)).convert('RGBA') + else: + path = random.choice(list(bg_path.iterdir())) + edit_bg = Image.open(path).convert('RGBA') + + # 确定图片的长宽 + bg_img = crop_center_img(edit_bg, based_w, based_h) + return bg_img + + @staticmethod + def get_dominant_color(pil_img: Image.Image) -> Tuple[int, int, int]: + img = pil_img.copy() + img = img.convert("RGBA") + img = img.resize((1, 1), resample=0) + dominant_color = img.getpixel((0, 0)) + return dominant_color + + @staticmethod + def get_bg_color( + edit_bg: Image.Image, is_light: Optional[bool] = False + ) -> Tuple[int, int, int]: + # 获取背景主色 + color = 8 + q = edit_bg.quantize(colors=color, method=2) + bg_color = (0, 0, 0) + if is_light: + based_light = 195 + else: + based_light = 120 + temp = 9999 + for i in range(color): + bg = tuple( + q.getpalette()[ # type:ignore + i * 3 : (i * 3) + 3 # noqa:E203 + ] + ) + light_value = bg[0] * 0.3 + bg[1] * 0.6 + bg[2] * 0.1 + if abs(light_value - based_light) < temp: + bg_color = bg + temp = abs(light_value - based_light) + return bg_color + + @staticmethod + def get_text_color(bg_color: Tuple[int, int, int]) -> Tuple[int, int, int]: + # 通过背景主色(bg_color)确定文字主色 + r = 125 + if max(*bg_color) > 255 - r: + r *= -1 + text_color = ( + math.floor(bg_color[0] + r if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] + r if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] + r if bg_color[2] + r <= 255 else 255), + ) + return text_color + + @staticmethod + def get_char_color(bg_color: Tuple[int, int, int]) -> Tuple[int, int, int]: + r = 140 + if max(*bg_color) > 255 - r: + r *= -1 + char_color = ( + math.floor(bg_color[0] + 5 if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] + 5 if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] + 5 if bg_color[2] + r <= 255 else 255), + ) + return char_color + + @staticmethod + def get_char_high_color( + bg_color: Tuple[int, int, int] + ) -> Tuple[int, int, int]: + r = 140 + d = 20 + if max(*bg_color) > 255 - r: + r *= -1 + char_color = ( + math.floor(bg_color[0] + d if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] + d if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] + d if bg_color[2] + r <= 255 else 255), + ) + return char_color + + @staticmethod + def get_bg_detail_color( + bg_color: Tuple[int, int, int] + ) -> Tuple[int, int, int]: + r = 140 + if max(*bg_color) > 255 - r: + r *= -1 + bg_detail_color = ( + math.floor(bg_color[0] - 20 if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] - 20 if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] - 20 if bg_color[2] + r <= 255 else 255), + ) + return bg_detail_color + + @staticmethod + def get_highlight_color( + color: Tuple[int, int, int] + ) -> Tuple[int, int, int]: + red_color = color[0] + green_color = color[1] + blue_color = color[2] + + highlight_color = { + 'red': red_color - 127 if red_color > 127 else 127, + 'green': green_color - 127 if green_color > 127 else 127, + 'blue': blue_color - 127 if blue_color > 127 else 127, + } + + max_color = max(highlight_color.values()) + + name = '' + for _highlight_color in highlight_color: + if highlight_color[_highlight_color] == max_color: + name = str(_highlight_color) + + if name == 'red': + return red_color, highlight_color['green'], highlight_color['blue'] + elif name == 'green': + return highlight_color['red'], green_color, highlight_color['blue'] + elif name == 'blue': + return highlight_color['red'], highlight_color['green'], blue_color + else: + return 0, 0, 0 # Error diff --git a/GenshinUID/utils/image/texture2d/mask.png b/GenshinUID/utils/image/texture2d/mask.png new file mode 100644 index 00000000..c2211002 Binary files /dev/null and b/GenshinUID/utils/image/texture2d/mask.png differ diff --git a/GenshinUID/utils/image/texture2d/ring.png b/GenshinUID/utils/image/texture2d/ring.png new file mode 100644 index 00000000..328995cb Binary files /dev/null and b/GenshinUID/utils/image/texture2d/ring.png differ diff --git a/GenshinUID/utils/map/GS_MAP_PATH.py b/GenshinUID/utils/map/GS_MAP_PATH.py new file mode 100644 index 00000000..e28fbfa3 --- /dev/null +++ b/GenshinUID/utils/map/GS_MAP_PATH.py @@ -0,0 +1,73 @@ +from pathlib import Path +from typing import Dict, List, TypedDict + +from msgspec import json as msgjson + +from ...version import Genshin_version + +MAP = Path(__file__).parent / 'data' + +version = Genshin_version + +avatarName2Element_fileName = f'avatarName2Element_mapping_{version}.json' +weaponHash2Name_fileName = f'weaponHash2Name_mapping_{version}.json' +weaponHash2Type_fileName = f'weaponHash2Type_mapping_{version}.json' +skillId2Name_fileName = f'skillId2Name_mapping_{version}.json' +talentId2Name_fileName = f'talentId2Name_mapping_{version}.json' +avatarId2Name_fileName = f'avatarId2Name_mapping_{version}.json' +avatarId2Star_fileName = f'avatarId2Star_mapping_{version}.json' +artifact2attr_fileName = f'artifact2attr_mapping_{version}.json' +enName2Id_fileName = f'enName2AvatarID_mapping_{version}.json' +icon2Name_fileName = f'icon2Name_mapping_{version}.json' +avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json' + + +class TS(TypedDict): + Name: Dict[str, str] + Icon: Dict[str, str] + + +with open(MAP / avatarId2Name_fileName, 'r', encoding='UTF-8') as f: + avatarId2Name = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / icon2Name_fileName, 'r', encoding='UTF-8') as f: + icon2Name = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / artifact2attr_fileName, 'r', encoding='UTF-8') as f: + artifact2attr = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / 'propId2Name_mapping.json', 'r', encoding='UTF-8') as f: + propId2Name = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / weaponHash2Name_fileName, 'r', encoding='UTF-8') as f: + weaponHash2Name = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / weaponHash2Type_fileName, 'r', encoding='UTF-8') as f: + weaponHash2Type = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / 'artifactId2Piece_mapping.json', 'r', encoding='UTF-8') as f: + artifactId2Piece = msgjson.decode(f.read(), type=Dict[str, List[str]]) + +with open(MAP / skillId2Name_fileName, 'r', encoding='UTF-8') as f: + skillId2Name = msgjson.decode(f.read(), type=TS) + +with open(MAP / talentId2Name_fileName, 'r', encoding='UTF-8') as f: + talentId2Name = msgjson.decode(f.read(), type=TS) + +with open(MAP / avatarName2Element_fileName, 'r', encoding='UTF-8') as f: + avatarName2Element = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / avatarName2Weapon_fileName, 'r', encoding='UTF-8') as f: + avatarName2Weapon = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / 'char_alias.json', 'r', encoding='UTF-8') as f: + alias_data = msgjson.decode(f.read(), type=Dict[str, List[str]]) + +with open(MAP / avatarId2Star_fileName, 'r', encoding='utf8') as f: + avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / avatarId2Star_fileName, 'r', encoding='utf8') as f: + avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / enName2Id_fileName, 'r', encoding='utf8') as f: + enName_to_avatarId_data = msgjson.decode(f.read(), type=Dict[str, str]) diff --git a/GenshinUID/utils/map/data/artifact2attr_mapping_3.4.0.json b/GenshinUID/utils/map/data/artifact2attr_mapping_3.4.0.json new file mode 100644 index 00000000..e8e26bae --- /dev/null +++ b/GenshinUID/utils/map/data/artifact2attr_mapping_3.4.0.json @@ -0,0 +1 @@ +{"逐光之石": "行者之心", "异国之盏": "行者之心", "归乡之羽": "行者之心", "感别之冠": "行者之心", "故人之心": "行者之心", "勇士的壮行": "勇士之心", "勇士的期许": "勇士之心", "勇士的冠冕": "勇士之心", "勇士的勋章": "勇士之心", "勇士的坚毅": "勇士之心", "守护之皿": "守护之心", "守护徽印": "守护之心", "守护束带": "守护之心", "守护之花": "守护之心", "守护座钟": "守护之心", "奇迹之杯": "奇迹", "奇迹之羽": "奇迹", "奇迹耳坠": "奇迹", "奇迹之花": "奇迹", "奇迹之沙": "奇迹", "战狂的骨杯": "战狂", "战狂的翎羽": "战狂", "战狂的鬼面": "战狂", "战狂的蔷薇": "战狂", "战狂的时计": "战狂", "武人的酒杯": "武人", "武人的羽饰": "武人", "武人的头巾": "武人", "武人的红花": "武人", "武人的水漏": "武人", "教官的茶杯": "教官", "教官的羽饰": "教官", "教官的帽子": "教官", "教官的胸花": "教官", "教官的怀表": "教官", "赌徒的骰盅": "赌徒", "赌徒的羽饰": "赌徒", "赌徒的耳环": "赌徒", "赌徒的胸花": "赌徒", "赌徒的怀表": "赌徒", "流放者之杯": "流放者", "流放者之羽": "流放者", "流放者头冠": "流放者", "流放者之花": "流放者", "流放者怀表": "流放者", "冒险家金杯": "冒险家", "冒险家尾羽": "冒险家", "冒险家头带": "冒险家", "冒险家之花": "冒险家", "冒险家怀表": "冒险家", "幸运儿之杯": "幸运儿", "幸运儿鹰羽": "幸运儿", "幸运儿银冠": "幸运儿", "幸运儿绿花": "幸运儿", "幸运儿沙漏": "幸运儿", "学士的墨杯": "学士", "学士的羽笔": "学士", "学士的镜片": "学士", "学士的书签": "学士", "学士的时钟": "学士", "游医的药壶": "游医", "游医的枭羽": "游医", "游医的方巾": "游医", "游医的银莲": "游医", "游医的怀钟": "游医", "遍结寒霜的傲骨": "冰风迷途的勇士", "摧冰而行的执望": "冰风迷途的勇士", "破冰踏雪的回音": "冰风迷途的勇士", "历经风雪的思念": "冰风迷途的勇士", "冰雪故园的终期": "冰风迷途的勇士", "平雷之器": "平息鸣雷的尊者", "平雷之羽": "平息鸣雷的尊者", "平雷之冠": "平息鸣雷的尊者", "平雷之心": "平息鸣雷的尊者", "平雷之刻": "平息鸣雷的尊者", "渡火者的醒悟": "渡过烈火的贤人", "渡火者的解脱": "渡过烈火的贤人", "渡火者的智慧": "渡过烈火的贤人", "渡火者的决绝": "渡过烈火的贤人", "渡火者的煎熬": "渡过烈火的贤人", "少女片刻的闲暇": "被怜爱的少女", "少女飘摇的思念": "被怜爱的少女", "少女易逝的芳颜": "被怜爱的少女", "远方的少女之心": "被怜爱的少女", "少女苦短的良辰": "被怜爱的少女", "角斗士的酣醉": "角斗士的终幕礼", "角斗士的归宿": "角斗士的终幕礼", "角斗士的凯旋": "角斗士的终幕礼", "角斗士的留恋": "角斗士的终幕礼", "角斗士的希冀": "角斗士的终幕礼", "翠绿猎人的容器": "翠绿之影", "猎人青翠的箭羽": "翠绿之影", "翠绿的猎人之冠": "翠绿之影", "野花记忆的绿野": "翠绿之影", "翠绿猎人的笃定": "翠绿之影", "吟游者之壶": "流浪大地的乐团", "琴师的箭羽": "流浪大地的乐团", "指挥的礼帽": "流浪大地的乐团", "乐团的晨光": "流浪大地的乐团", "终幕的时计": "流浪大地的乐团", "北风之盏": "冰之川与雪之砂", "雪藏之羽": "冰之川与雪之砂", "冰河之冠": "冰之川与雪之砂", "凛冬霜心": "冰之川与雪之砂", "凝冰成砂": "冰之川与雪之砂", "降雷的凶兆": "如雷的盛怒", "雷灾的孑遗": "如雷的盛怒", "唤雷的头冠": "如雷的盛怒", "雷鸟的怜悯": "如雷的盛怒", "雷霆的时计": "如雷的盛怒", "魔女的心之火": "炽烈的炎之魔女", "魔女常燃之羽": "炽烈的炎之魔女", "焦灼的魔女帽": "炽烈的炎之魔女", "魔女的炎之花": "炽烈的炎之魔女", "魔女破灭之时": "炽烈的炎之魔女", "宗室银瓮": "昔日宗室之仪", "宗室之翎": "昔日宗室之仪", "宗室面具": "昔日宗室之仪", "宗室之花": "昔日宗室之仪", "宗室时计": "昔日宗室之仪", "染血骑士之杯": "染血的骑士道", "染血的黑之羽": "染血的骑士道", "染血的铁假面": "染血的骑士道", "染血的铁之心": "染血的骑士道", "骑士染血之时": "染血的骑士道", "祭火礼冠": "祭火之人", "祭水礼冠": "祭水之人", "祭雷礼冠": "祭雷之人", "祭风礼冠": "祭风之人", "祭冰礼冠": "祭冰之人", "巉岩琢塑之樽": "悠古的磐岩", "嵯峨群峰之翼": "悠古的磐岩", "不动玄石之相": "悠古的磐岩", "磐陀裂生之花": "悠古的磐岩", "星罗圭璧之晷": "悠古的磐岩", "夏祭水玉": "逆飞的流星", "夏祭终末": "逆飞的流星", "夏祭之面": "逆飞的流星", "夏祭之花": "逆飞的流星", "夏祭之刻": "逆飞的流星", "沉波之盏": "沉沦之心", "追忆之风": "沉沦之心", "酒渍船帽": "沉沦之心", "饰金胸花": "沉沦之心", "坚铜罗盘": "沉沦之心", "盟誓金爵": "千岩牢固", "昭武翎羽": "千岩牢固", "将帅兜鍪": "千岩牢固", "勋绩之花": "千岩牢固", "金铜时晷": "千岩牢固", "超越之盏": "苍白之火", "贤医之羽": "苍白之火", "嗤笑之面": "苍白之火", "无垢之花": "苍白之火", "停摆之刻": "苍白之火", "祈望之心": "追忆之注连", "思忆之矢": "追忆之注连", "无常之面": "追忆之注连", "羁缠之花": "追忆之注连", "朝露之时": "追忆之注连", "绯花之壶": "绝缘之旗印", "切落之羽": "绝缘之旗印", "华饰之兜": "绝缘之旗印", "明威之镡": "绝缘之旗印", "雷云之笼": "绝缘之旗印", "梦醒之瓢": "华馆梦醒形骸记", "华馆之羽": "华馆梦醒形骸记", "形骸之笠": "华馆梦醒形骸记", "荣花之期": "华馆梦醒形骸记", "众生之谣": "华馆梦醒形骸记", "真珠之笼": "海染砗磲", "渊宫之羽": "海染砗磲", "海祇之冠": "海染砗磲", "海染之花": "海染砗磲", "离别之贝": "海染砗磲", "结契之刻": "辰砂往生录", "潜光片羽": "辰砂往生录", "虺雷之姿": "辰砂往生录", "生灵之华": "辰砂往生录", "阳辔之遗": "辰砂往生录", "涌泉之盏": "来歆余响", "垂玉之叶": "来歆余响", "浮溯之珏": "来歆余响", "魂香之花": "来歆余响", "祝祀之凭": "来歆余响", "迷误者之灯": "深林的记忆", "翠蔓的智者": "深林的记忆", "月桂的宝冠": "深林的记忆", "迷宫的游人": "深林的记忆", "贤智的定期": "深林的记忆", "如蜜的终宴": "饰金之梦", "裁断的翎羽": "饰金之梦", "沙王的投影": "饰金之梦", "梦中的铁花": "饰金之梦", "沉金的岁月": "饰金之梦", "迷醉长梦的守护": "沙上楼阁史话", "黄金邦国的结末": "沙上楼阁史话", "流沙贵嗣的遗宝": "沙上楼阁史话", "众王之都的开端": "沙上楼阁史话", "失落迷途的机芯": "沙上楼阁史话", "守秘的魔瓶": "乐园遗落之花", "谢落的筵席": "乐园遗落之花", "紫晶的花冠": "乐园遗落之花", "月女的华彩": "乐园遗落之花", "凝结的时刻": "乐园遗落之花"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/artifactId2Piece_mapping.json b/GenshinUID/utils/map/data/artifactId2Piece_mapping.json new file mode 100644 index 00000000..fd756005 --- /dev/null +++ b/GenshinUID/utils/map/data/artifactId2Piece_mapping.json @@ -0,0 +1,22 @@ +{ + "1": [ + "goblet", + "空之杯" + ], + "2": [ + "plume", + "死之羽" + ], + "3": [ + "circlet", + "理之冠" + ], + "4": [ + "flower", + "生之花" + ], + "5": [ + "sands", + "时之沙" + ] +} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/avatarId2Name_mapping_3.4.0.json b/GenshinUID/utils/map/data/avatarId2Name_mapping_3.4.0.json new file mode 100644 index 00000000..9d11543c --- /dev/null +++ b/GenshinUID/utils/map/data/avatarId2Name_mapping_3.4.0.json @@ -0,0 +1 @@ +{"10000001": "凯特", "10000002": "神里绫华", "10000003": "琴", "10000005": "旅行者", "10000006": "丽莎", "10000007": "旅行者", "10000014": "芭芭拉", "10000015": "凯亚", "10000016": "迪卢克", "10000020": "雷泽", "10000021": "安柏", "10000022": "温迪", "10000023": "香菱", "10000024": "北斗", "10000025": "行秋", "10000026": "魈", "10000027": "凝光", "10000029": "可莉", "10000030": "钟离", "10000031": "菲谢尔", "10000032": "班尼特", "10000033": "达达利亚", "10000034": "诺艾尔", "10000035": "七七", "10000036": "重云", "10000037": "甘雨", "10000038": "阿贝多", "10000039": "迪奥娜", "10000041": "莫娜", "10000042": "刻晴", "10000043": "砂糖", "10000044": "辛焱", "10000045": "罗莎莉亚", "10000046": "胡桃", "10000047": "枫原万叶", "10000048": "烟绯", "10000049": "宵宫", "10000050": "托马", "10000051": "优菈", "10000052": "雷电将军", "10000053": "早柚", "10000054": "珊瑚宫心海", "10000055": "五郎", "10000056": "九条裟罗", "10000057": "荒泷一斗", "10000058": "八重神子", "10000059": "鹿野院平藏", "10000060": "夜兰", "10000062": "埃洛伊", "10000063": "申鹤", "10000064": "云堇", "10000065": "久岐忍", "10000066": "神里绫人", "10000067": "柯莱", "10000068": "多莉", "10000069": "提纳里", "10000070": "妮露", "10000071": "赛诺", "10000072": "坎蒂丝", "10000073": "纳西妲", "10000074": "莱依拉", "10000075": "流浪者", "10000076": "珐露珊", "10000077": "瑶瑶", "10000078": "艾尔海森", "10000079": "迪希雅", "10000080": "米卡"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/avatarId2Star_mapping_3.4.0.json b/GenshinUID/utils/map/data/avatarId2Star_mapping_3.4.0.json new file mode 100644 index 00000000..ee9a913f --- /dev/null +++ b/GenshinUID/utils/map/data/avatarId2Star_mapping_3.4.0.json @@ -0,0 +1 @@ +{"10000002": "5", "10000003": "5", "10000006": "4", "10000014": "4", "10000015": "4", "10000016": "5", "10000020": "4", "10000021": "4", "10000022": "5", "10000023": "4", "10000024": "4", "10000025": "4", "10000026": "5", "10000027": "4", "10000029": "5", "10000030": "5", "10000031": "4", "10000032": "4", "10000033": "5", "10000034": "4", "10000035": "5", "10000036": "4", "10000037": "5", "10000038": "5", "10000039": "4", "10000041": "5", "10000042": "5", "10000043": "4", "10000044": "4", "10000045": "4", "10000046": "5", "10000047": "5", "10000048": "4", "10000049": "5", "10000050": "4", "10000051": "5", "10000052": "5", "10000053": "4", "10000054": "5", "10000055": "4", "10000056": "4", "10000057": "5", "10000058": "5", "10000059": "4", "10000060": "5", "10000062": "5", "10000063": "5", "10000064": "4", "10000065": "4", "10000066": "5", "10000067": "4", "10000068": "4", "10000069": "5", "10000070": "5", "10000071": "5", "10000072": "4", "10000073": "5", "10000074": "4", "10000075": "5", "10000076": "4", "10000077": "4", "10000078": "5", "10000079": "5", "10000080": "4", "10000005": "5", "10000007": "5"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/avatarName2Element_mapping_3.4.0.json b/GenshinUID/utils/map/data/avatarName2Element_mapping_3.4.0.json new file mode 100644 index 00000000..2d8ec2bf --- /dev/null +++ b/GenshinUID/utils/map/data/avatarName2Element_mapping_3.4.0.json @@ -0,0 +1 @@ +{"神里绫华": "Cryo", "琴": "Anemo", "丽莎": "Electro", "芭芭拉": "Hydro", "凯亚": "Cryo", "迪卢克": "Pyro", "雷泽": "Electro", "安柏": "Pyro", "温迪": "Anemo", "香菱": "Pyro", "北斗": "Electro", "行秋": "Hydro", "魈": "Anemo", "凝光": "Geo", "可莉": "Pyro", "钟离": "Geo", "菲谢尔": "Electro", "班尼特": "Pyro", "达达利亚": "Hydro", "诺艾尔": "Geo", "七七": "Cryo", "重云": "Cryo", "甘雨": "Cryo", "阿贝多": "Geo", "迪奥娜": "Cryo", "莫娜": "Hydro", "刻晴": "Electro", "砂糖": "Anemo", "辛焱": "Pyro", "罗莎莉亚": "Cryo", "胡桃": "Pyro", "枫原万叶": "Anemo", "烟绯": "Pyro", "宵宫": "Pyro", "托马": "Pyro", "优菈": "Cryo", "雷电将军": "Electro", "早柚": "Anemo", "珊瑚宫心海": "Hydro", "五郎": "Geo", "九条裟罗": "Electro", "荒泷一斗": "Geo", "八重神子": "Electro", "鹿野院平藏": "Anemo", "夜兰": "Hydro", "埃洛伊": "Cryo", "申鹤": "Cryo", "云堇": "Geo", "久岐忍": "Electro", "神里绫人": "Hydro", "柯莱": "Dendro", "多莉": "Electro", "提纳里": "Dendro", "妮露": "Hydro", "赛诺": "Electro", "坎蒂丝": "Hydro", "纳西妲": "Dendro", "莱依拉": "Cryo", "流浪者": "Anemo", "珐露珊": "Anemo", "瑶瑶": "Dendro", "艾尔海森": "Dendro", "迪希雅": "Pyro", "米卡": "Cryo"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/avatarName2Weapon_mapping_3.4.0.json b/GenshinUID/utils/map/data/avatarName2Weapon_mapping_3.4.0.json new file mode 100644 index 00000000..ba66e742 --- /dev/null +++ b/GenshinUID/utils/map/data/avatarName2Weapon_mapping_3.4.0.json @@ -0,0 +1 @@ +{"神里绫华": "单手剑", "琴": "单手剑", "丽莎": "法器", "芭芭拉": "法器", "凯亚": "单手剑", "迪卢克": "双手剑", "雷泽": "双手剑", "安柏": "弓", "温迪": "弓", "香菱": "长柄武器", "北斗": "双手剑", "行秋": "单手剑", "魈": "长柄武器", "凝光": "法器", "可莉": "法器", "钟离": "长柄武器", "菲谢尔": "弓", "班尼特": "单手剑", "达达利亚": "弓", "诺艾尔": "双手剑", "七七": "单手剑", "重云": "双手剑", "甘雨": "弓", "阿贝多": "单手剑", "迪奥娜": "弓", "莫娜": "法器", "刻晴": "单手剑", "砂糖": "法器", "辛焱": "双手剑", "罗莎莉亚": "长柄武器", "胡桃": "长柄武器", "枫原万叶": "单手剑", "烟绯": "法器", "宵宫": "弓", "托马": "长柄武器", "优菈": "双手剑", "雷电将军": "长柄武器", "早柚": "双手剑", "珊瑚宫心海": "法器", "五郎": "弓", "九条裟罗": "弓", "荒泷一斗": "双手剑", "八重神子": "法器", "鹿野院平藏": "法器", "夜兰": "弓", "埃洛伊": "弓", "申鹤": "长柄武器", "云堇": "长柄武器", "久岐忍": "单手剑", "神里绫人": "单手剑", "柯莱": "弓", "多莉": "双手剑", "提纳里": "弓", "妮露": "单手剑", "赛诺": "长柄武器", "坎蒂丝": "长柄武器", "纳西妲": "法器", "莱依拉": "单手剑", "流浪者": "法器", "珐露珊": "弓", "瑶瑶": "长柄武器", "艾尔海森": "单手剑", "迪希雅": "双手剑", "米卡": "长柄武器", "旅行者": "单手剑"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/char_alias.json b/GenshinUID/utils/map/data/char_alias.json new file mode 100644 index 00000000..ed7a4c61 --- /dev/null +++ b/GenshinUID/utils/map/data/char_alias.json @@ -0,0 +1,739 @@ +{ + "旅行者风": [ + "风主" + ], + "旅行者岩": [ + "岩主" + ], + "旅行者雷": [ + "雷主" + ], + "旅行者草": [ + "草主" + ], + "旅行者": [ + "主角", + "卑鄙的外乡人", + "荣誉骑士", + "爷", + "履刑者", + "抽卡不歪真君", + "男主", + "男主角", + "龙哥", + "空哥", + "男爷", + "女主", + "女主角", + "莹", + "萤", + "黄毛阿姨", + "荧妹", + "女爷" + ], + "神里绫华": [ + "Kamisato Ayaka", + "Ayaka", + "ayaka", + "神里", + "绫华", + "神里凌华", + "凌华", + "白鹭公主", + "神里大小姐", + "小乌龟", + "龟龟" + ], + "琴": [ + "Jean", + "jean", + "团长", + "代理团长", + "琴团长", + "蒲公英骑士", + "琴·古恩希尔德", + "古恩希尔德" + ], + "丽莎": [ + "Lisa", + "lisa", + "图书管理员", + "图书馆管理员", + "蔷薇魔女", + "丽莎阿姨", + "丽莎·敏兹", + "敏兹" + ], + "芭芭拉": [ + "Barbara", + "barbara", + "巴巴拉", + "拉粑粑", + "拉巴巴", + "内鬼", + "加湿器", + "肉身解咒", + "肉身解咒真君", + "闪耀偶像", + "偶像", + "芭芭拉·佩奇", + "佩奇" + ], + "凯亚": [ + "Kaeya", + "kaeya", + "盖亚", + "凯子哥", + "凯鸭", + "矿工", + "矿工头子", + "骑兵队长", + "凯子", + "凝冰渡海真君", + "凯亚·亚尔伯里奇", + "亚尔伯里奇" + ], + "迪卢克": [ + "diluc", + "Diluc", + "卢姥爷", + "姥爷", + "卢老爷", + "卢锅巴", + "正义人", + "正e人", + "正E人", + "卢本伟", + "暗夜英雄", + "卢卢伯爵", + "落魄了", + "落魄了家人们", + "迪卢克·莱艮芬德", + "莱艮芬德" + ], + "雷泽": [ + "razor", + "Razor", + "狼少年", + "狼崽子", + "狼崽", + "卢皮卡", + "小狼", + "小狼狗", + "狼孩" + ], + "安柏": [ + "Amber", + "amber", + "安伯", + "兔兔伯爵", + "飞行冠军", + "侦查骑士", + "点火姬", + "点火机", + "打火机", + "打火姬" + ], + "温迪": [ + "Venti", + "venti", + "温蒂", + "风神", + "卖唱的", + "巴巴托斯", + "巴巴脱丝", + "芭芭托斯", + "芭芭脱丝", + "干点正事", + "不干正事", + "吟游诗人", + "诶嘿", + "唉嘿", + "摸鱼" + ], + "香菱": [ + "Xiangling", + "xiangling", + "香玲", + "锅巴", + "厨师", + "万民堂厨师", + "香师傅", + "卯香菱" + ], + "北斗": [ + "Beidou", + "beidou", + "大姐头", + "大姐", + "无冕的龙王", + "龙王" + ], + "行秋": [ + "Xingqiu", + "xingqiu", + "秋秋人", + "秋妹妹", + "书呆子", + "水神", + "飞云商会二少爷" + ], + "魈": [ + "Xiao", + "xiao", + "打桩机", + "插秧", + "三眼五显仙人", + "三眼五显真人", + "降魔大圣", + "护法夜叉", + "快乐风男", + "无聊", + "靖妖傩舞", + "矮子仙人", + "三点五尺仙人", + "跳跳虎" + ], + "凝光": [ + "Ningguang", + "ningguang", + "富婆", + "天权星", + "天权" + ], + "可莉": [ + "Klee", + "klee", + "嘟嘟可", + "火花骑士", + "蹦蹦炸弹", + "炸鱼", + "放火烧山", + "放火烧山真君", + "蒙德最强战力", + "逃跑的太阳", + "啦啦啦", + "哒哒哒", + "炸弹人", + "禁闭室", + "太阳", + "小太阳" + ], + "钟离": [ + "Zhongli", + "zhongli", + "摩拉克斯", + "岩王爷", + "岩神", + "钟师傅", + "天动万象", + "岩王帝君", + "未来可期", + "帝君", + "拒收病婿" + ], + "菲谢尔": [ + "Fischl", + "fischl", + "皇女", + "小艾米", + "小艾咪", + "奥兹", + "断罪皇女", + "中二病", + "中二少女", + "中二皇女", + "奥兹发射器", + "菲谢尔·冯·露弗施洛斯·那菲多特", + "露弗施洛斯", + "那菲多特" + ], + "班尼特": [ + "Bennett", + "bennett", + "点赞哥", + "点赞", + "倒霉少年", + "倒霉蛋", + "霹雳闪雷真君", + "班神", + "班爷", + "倒霉", + "火神", + "六星真神" + ], + "达达利亚": [ + "Tartaglia", + "tartaglia", + "Childe", + "childe", + "Ajax", + "ajax", + "达达鸭", + "达达利鸭", + "公子", + "工资", + "玩具销售员", + "玩具推销员", + "钱包", + "鸭鸭", + "愚人众末席", + "阿贾克斯" + ], + "诺艾尔": [ + "Noelle", + "noelle", + "女仆", + "高达", + "岩王帝姬" + ], + "七七": [ + "Qiqi", + "qiqi", + "僵尸", + "肚饿真君", + "度厄真君", + "'77'" + ], + "重云": [ + "Chongyun", + "chongyun", + "纯阳之体", + "冰棍" + ], + "甘雨": [ + "Ganyu", + "ganyu", + "椰羊", + "椰奶", + "王小美" + ], + "阿贝多": [ + "Albedo", + "albedo", + "可莉哥哥", + "升降机", + "升降台", + "电梯", + "白垩之子", + "贝爷", + "白垩", + "阿贝少", + "花呗多", + "阿贝夕", + "abd", + "阿师傅" + ], + "迪奥娜": [ + "Diona", + "diona", + "迪欧娜", + "dio", + "dio娜", + "冰猫", + "猫猫", + "猫娘", + "喵喵", + "调酒师", + "迪奥娜·凯茨莱茵", + "凯茨莱茵" + ], + "莫娜": [ + "Mona", + "mona", + "穷鬼", + "穷光蛋", + "穷", + "莫纳", + "占星术士", + "占星师", + "讨龙真君", + "半部讨龙真君", + "阿斯托洛吉斯·莫娜·梅姬斯图斯", + "阿斯托洛吉斯", + "梅姬斯图斯", + "梅姬斯图斯姬" + ], + "刻晴": [ + "Keqing", + "keqing", + "刻情", + "氪晴", + "刻师傅", + "刻师父", + "牛杂", + "牛杂师傅", + "斩尽牛杂", + "免疫", + "免疫免疫", + "屁斜剑法", + "玉衡星", + "玉衡", + "阿晴", + "啊晴", + "璃月雷神" + ], + "砂糖": [ + "Sucrose", + "sucrose", + "雷莹术士", + "雷萤术士", + "雷荧术士" + ], + "辛焱": [ + "Xinyan", + "xinyan", + "辛炎", + "黑妹", + "摇滚" + ], + "罗莎莉亚": [ + "Rosaria", + "rosaria", + "罗莎莉娅", + "白色史莱姆", + "白史莱姆", + "修女", + "罗莎利亚", + "罗莎利娅", + "罗沙莉亚", + "罗沙莉娅", + "罗沙利亚", + "罗沙利娅", + "萝莎莉亚", + "萝莎莉娅", + "萝莎利亚", + "萝莎利娅", + "萝沙莉亚", + "萝沙莉娅", + "萝沙利亚", + "萝沙利娅" + ], + "胡桃": [ + "Hu Tao", + "hu tao", + "HuTao", + "hutao", + "Hutao", + "胡淘", + "往生堂堂主", + "火化", + "抬棺的", + "蝴蝶", + "核桃", + "堂主", + "胡堂主", + "雪霁梅香", + "桃子" + ], + "枫原万叶": [ + "Kaedehara Kazuha", + "Kazuha", + "kazuha", + "万叶", + "叶天帝", + "天帝", + "叶师傅" + ], + "烟绯": [ + "Yanfei", + "yanfei", + "烟老师", + "律师", + "罗翔" + ], + "宵宫": [ + "Yoimiya", + "yoimiya", + "霄宫", + "烟花", + "肖宫", + "肖工", + "绷带女孩", + "长野原宵宫" + ], + "托马": [ + "Thoma", + "thoma", + "家政官", + "太郎丸", + "地头蛇", + "男仆", + "拖马" + ], + "优菈": [ + "Eula", + "eula", + "优拉", + "尤拉", + "尤菈", + "浪花骑士", + "记仇", + "优菈·劳伦斯", + "劳伦斯" + ], + "雷电将军": [ + "Raiden Shogun", + "Raiden", + "raiden", + "雷神", + "将军", + "雷军", + "巴尔", + "阿影", + "影", + "巴尔泽布", + "煮饭婆", + "奶香一刀", + "无想一刀", + "散兵他妈", + "宅女" + ], + "早柚": [ + "Sayu", + "sayu", + "小狸猫", + "狸猫", + "忍者", + "貉" + ], + "珊瑚宫心海": [ + "Sangonomiya Kokomi", + "Kokomi", + "kokomi", + "心海", + "军师", + "珊瑚宫", + "书记", + "观赏鱼", + "水母", + "鱼", + "美人鱼" + ], + "五郎": [ + "Gorou", + "gorou", + "柴犬", + "土狗", + "希娜", + "希娜小姐" + ], + "九条裟罗": [ + "Kujou Sara", + "Sara", + "sara", + "九条", + "九条沙罗", + "裟罗", + "沙罗", + "天狗" + ], + "荒泷一斗": [ + "Arataki Itto", + "Itto", + "itto", + "荒龙一斗", + "荒泷天下第一斗", + "一斗", + "一抖", + "荒泷", + "1斗", + "牛牛", + "斗子哥", + "牛子哥", + "牛子", + "孩子王", + "斗虫", + "巧乐兹", + "放牛的" + ], + "八重神子": [ + "Yae Miko", + "Miko", + "miko", + "八重", + "神子", + "狐狸", + "想得美哦", + "巫女", + "屑狐狸", + "骚狐狸", + "八重宫司", + "婶子", + "小八", + "八重寄子", + "寄子" + ], + "鹿野院平藏": [ + "shikanoin heizou", + "Heizou", + "heizou", + "heizo", + "鹿野苑", + "鹿野院", + "平藏", + "鹿野苑平藏", + "小鹿" + ], + "夜兰": [ + "Yelan", + "yelan", + "夜阑", + "叶澜", + "腋兰", + "夜天后" + ], + "埃洛伊": [ + "Aloy", + "aloy" + ], + "申鹤": [ + "Shenhe", + "shenhe", + "神鹤", + "小姨", + "小姨子", + "审鹤" + ], + "云堇": [ + "Yun Jin", + "yunjin", + "yun jin", + "云瑾", + "云先生", + "云锦", + "神女劈观", + "土女" + ], + "久岐忍": [ + "Kuki Shinobu", + "Kuki", + "kuki", + "Shinobu", + "shinobu", + "97忍", + "小忍", + "久歧忍", + "'97'", + "茄忍", + "茄子", + "紫茄子", + "阿忍", + "忍姐" + ], + "神里绫人": [ + "Kamisato Ayato", + "Ayato", + "ayato", + "绫人", + "神里凌人", + "凌人", + "0人", + "神人", + "零人", + "大舅哥" + ], + "柯莱": [ + "Collei", + "collei", + "柯来", + "科莱", + "科来", + "小天使", + "须弥安柏", + "须弥飞行冠军", + "见习巡林员", + "巡林员" + ], + "多莉": [ + "Dori", + "dori", + "多利", + "多力", + "多丽", + "奸商" + ], + "提纳里": [ + "Tighnari", + "tighnari", + "小提", + "提那里", + "缇娜里", + "提哪里", + "驴", + "柯莱老师", + "柯莱师傅", + "巡林官" + ], + "妮露": [ + "Nilou", + "nilou", + "尼露", + "尼禄" + ], + "赛诺": [ + "Cyno", + "cyno" + ], + "坎蒂丝": [ + "Candace", + "candace", + "坎迪斯" + ], + "纳西妲": [ + "Nahida", + "nahida", + "草王", + "草神", + "小吉祥草王", + "草萝莉", + "纳西坦", + "羽毛球" + ], + "莱依拉": [ + "layla", + "Layla", + "拉一拉", + "拉拉" + ], + "流浪者": [ + "散兵", + "斯卡拉姆齐", + "国崩", + "伞兵", + "正机之神", + "七叶寂照秘密主", + "散散" + ], + "珐露珊": [ + "初音", + "机逐封秘", + "初音未来", + "百岁珊", + "苏珊" + ], + "艾尔海森": [ + "草刻晴", + "海森", + "海子哥", + "苏哥", + "海参", + "海参哥" + ], + "瑶瑶": [ + "遥遥", + "幺幺" + ], + "迪希雅": [ + "迪西娅", + "狮女", + "狮子", + "腕豪", + "女拳" + ], + "米卡": [ + "咪卡", + "小米", + "正太" + ] +} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/enName2AvatarID_mapping_3.4.0.json b/GenshinUID/utils/map/data/enName2AvatarID_mapping_3.4.0.json new file mode 100644 index 00000000..463db52c --- /dev/null +++ b/GenshinUID/utils/map/data/enName2AvatarID_mapping_3.4.0.json @@ -0,0 +1 @@ +{"Ayaka": "10000002", "Qin": "10000003", "Lisa": "10000006", "Barbara": "10000014", "Kaeya": "10000015", "Diluc": "10000016", "Razor": "10000020", "Ambor": "10000021", "Venti": "10000022", "Xiangling": "10000023", "Beidou": "10000024", "Xingqiu": "10000025", "Xiao": "10000026", "Ningguang": "10000027", "Klee": "10000029", "Zhongli": "10000030", "Fischl": "10000031", "Bennett": "10000032", "Tartaglia": "10000033", "Noel": "10000034", "Qiqi": "10000035", "Chongyun": "10000036", "Ganyu": "10000037", "Albedo": "10000038", "Diona": "10000039", "Mona": "10000041", "Keqing": "10000042", "Sucrose": "10000043", "Xinyan": "10000044", "Rosaria": "10000045", "Hutao": "10000046", "Kazuha": "10000047", "Feiyan": "10000048", "Yoimiya": "10000049", "Tohma": "10000050", "Eula": "10000051", "Shougun": "10000052", "Sayu": "10000053", "Kokomi": "10000054", "Gorou": "10000055", "Sara": "10000056", "Itto": "10000057", "Yae": "10000058", "Heizo": "10000059", "Yelan": "10000060", "Aloy": "10000062", "Shenhe": "10000063", "Yunjin": "10000064", "Shinobu": "10000065", "Ayato": "10000066", "Collei": "10000067", "Dori": "10000068", "Tighnari": "10000069", "Nilou": "10000070", "Cyno": "10000071", "Candace": "10000072", "Nahida": "10000073", "Layla": "10000074", "Wanderer": "10000075", "Faruzan": "10000076", "Yaoyao": "10000077", "Alhatham": "10000078", "Dehya": "10000079", "Mika": "10000080"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/icon2Name_mapping_3.4.0.json b/GenshinUID/utils/map/data/icon2Name_mapping_3.4.0.json new file mode 100644 index 00000000..1bf4d6df --- /dev/null +++ b/GenshinUID/utils/map/data/icon2Name_mapping_3.4.0.json @@ -0,0 +1 @@ +{"UI_RelicIcon_10000_2": "初学者之羽", "UI_RelicIcon_10000_4": "初学者之花", "UI_RelicIcon_10001_5": "逐光之石", "UI_RelicIcon_10001_1": "异国之盏", "UI_RelicIcon_10001_2": "归乡之羽", "UI_RelicIcon_10001_3": "感别之冠", "UI_RelicIcon_10001_4": "故人之心", "UI_RelicIcon_10002_1": "勇士的壮行", "UI_RelicIcon_10002_2": "勇士的期许", "UI_RelicIcon_10002_3": "勇士的冠冕", "UI_RelicIcon_10002_4": "勇士的勋章", "UI_RelicIcon_10002_5": "勇士的坚毅", "UI_RelicIcon_10003_1": "守护之皿", "UI_RelicIcon_10003_2": "守护徽印", "UI_RelicIcon_10003_3": "守护束带", "UI_RelicIcon_10003_4": "守护之花", "UI_RelicIcon_10003_5": "守护座钟", "UI_RelicIcon_10004_1": "奇迹之杯", "UI_RelicIcon_10004_2": "奇迹之羽", "UI_RelicIcon_10004_3": "奇迹耳坠", "UI_RelicIcon_10004_4": "奇迹之花", "UI_RelicIcon_10004_5": "奇迹之沙", "UI_RelicIcon_10005_1": "战狂的骨杯", "UI_RelicIcon_10005_2": "战狂的翎羽", "UI_RelicIcon_10005_3": "战狂的鬼面", "UI_RelicIcon_10005_4": "战狂的蔷薇", "UI_RelicIcon_10005_5": "战狂的时计", "UI_RelicIcon_10006_1": "武人的酒杯", "UI_RelicIcon_10006_2": "武人的羽饰", "UI_RelicIcon_10006_3": "武人的头巾", "UI_RelicIcon_10006_4": "武人的红花", "UI_RelicIcon_10006_5": "武人的水漏", "UI_RelicIcon_10007_1": "教官的茶杯", "UI_RelicIcon_10007_2": "教官的羽饰", "UI_RelicIcon_10007_3": "教官的帽子", "UI_RelicIcon_10007_4": "教官的胸花", "UI_RelicIcon_10007_5": "教官的怀表", "UI_RelicIcon_10008_1": "赌徒的骰盅", "UI_RelicIcon_10008_2": "赌徒的羽饰", "UI_RelicIcon_10008_3": "赌徒的耳环", "UI_RelicIcon_10008_4": "赌徒的胸花", "UI_RelicIcon_10008_5": "赌徒的怀表", "UI_RelicIcon_10009_1": "流放者之杯", "UI_RelicIcon_10009_2": "流放者之羽", "UI_RelicIcon_10009_3": "流放者头冠", "UI_RelicIcon_10009_4": "流放者之花", "UI_RelicIcon_10009_5": "流放者怀表", "UI_RelicIcon_10010_1": "冒险家金杯", "UI_RelicIcon_10010_2": "冒险家尾羽", "UI_RelicIcon_10010_3": "冒险家头带", "UI_RelicIcon_10010_4": "冒险家之花", "UI_RelicIcon_10010_5": "冒险家怀表", "UI_RelicIcon_10011_1": "幸运儿之杯", "UI_RelicIcon_10011_2": "幸运儿鹰羽", "UI_RelicIcon_10011_3": "幸运儿银冠", "UI_RelicIcon_10011_4": "幸运儿绿花", "UI_RelicIcon_10011_5": "幸运儿沙漏", "UI_RelicIcon_10012_1": "学士的墨杯", "UI_RelicIcon_10012_2": "学士的羽笔", "UI_RelicIcon_10012_3": "学士的镜片", "UI_RelicIcon_10012_4": "学士的书签", "UI_RelicIcon_10012_5": "学士的时钟", "UI_RelicIcon_10013_1": "游医的药壶", "UI_RelicIcon_10013_2": "游医的枭羽", "UI_RelicIcon_10013_3": "游医的方巾", "UI_RelicIcon_10013_4": "游医的银莲", "UI_RelicIcon_10013_5": "游医的怀钟", "UI_RelicIcon_14001_1": "遍结寒霜的傲骨", "UI_RelicIcon_14001_2": "摧冰而行的执望", "UI_RelicIcon_14001_3": "破冰踏雪的回音", "UI_RelicIcon_14001_4": "历经风雪的思念", "UI_RelicIcon_14001_5": "冰雪故园的终期", "UI_RelicIcon_14002_1": "平雷之器", "UI_RelicIcon_14002_2": "平雷之羽", "UI_RelicIcon_14002_3": "平雷之冠", "UI_RelicIcon_14002_4": "平雷之心", "UI_RelicIcon_14002_5": "平雷之刻", "UI_RelicIcon_14003_1": "渡火者的醒悟", "UI_RelicIcon_14003_2": "渡火者的解脱", "UI_RelicIcon_14003_3": "渡火者的智慧", "UI_RelicIcon_14003_4": "渡火者的决绝", "UI_RelicIcon_14003_5": "渡火者的煎熬", "UI_RelicIcon_14004_1": "少女片刻的闲暇", "UI_RelicIcon_14004_2": "少女飘摇的思念", "UI_RelicIcon_14004_3": "少女易逝的芳颜", "UI_RelicIcon_14004_4": "远方的少女之心", "UI_RelicIcon_14004_5": "少女苦短的良辰", "UI_RelicIcon_15001_1": "角斗士的酣醉", "UI_RelicIcon_15001_2": "角斗士的归宿", "UI_RelicIcon_15001_3": "角斗士的凯旋", "UI_RelicIcon_15001_4": "角斗士的留恋", "UI_RelicIcon_15001_5": "角斗士的希冀", "UI_RelicIcon_15002_1": "翠绿猎人的容器", "UI_RelicIcon_15002_2": "猎人青翠的箭羽", "UI_RelicIcon_15002_3": "翠绿的猎人之冠", "UI_RelicIcon_15002_4": "野花记忆的绿野", "UI_RelicIcon_15002_5": "翠绿猎人的笃定", "UI_RelicIcon_15003_1": "吟游者之壶", "UI_RelicIcon_15003_2": "琴师的箭羽", "UI_RelicIcon_15003_3": "指挥的礼帽", "UI_RelicIcon_15003_4": "乐团的晨光", "UI_RelicIcon_15003_5": "终幕的时计", "UI_RelicIcon_15004_1": "北风之盏", "UI_RelicIcon_15004_2": "雪藏之羽", "UI_RelicIcon_15004_3": "冰河之冠", "UI_RelicIcon_15004_4": "凛冬霜心", "UI_RelicIcon_15004_5": "凝冰成砂", "UI_RelicIcon_15005_1": "降雷的凶兆", "UI_RelicIcon_15005_2": "雷灾的孑遗", "UI_RelicIcon_15005_3": "唤雷的头冠", "UI_RelicIcon_15005_4": "雷鸟的怜悯", "UI_RelicIcon_15005_5": "雷霆的时计", "UI_RelicIcon_15006_1": "魔女的心之火", "UI_RelicIcon_15006_2": "魔女常燃之羽", "UI_RelicIcon_15006_3": "焦灼的魔女帽", "UI_RelicIcon_15006_4": "魔女的炎之花", "UI_RelicIcon_15006_5": "魔女破灭之时", "UI_RelicIcon_15007_1": "宗室银瓮", "UI_RelicIcon_15007_2": "宗室之翎", "UI_RelicIcon_15007_3": "宗室面具", "UI_RelicIcon_15007_4": "宗室之花", "UI_RelicIcon_15007_5": "宗室时计", "UI_RelicIcon_15008_1": "染血骑士之杯", "UI_RelicIcon_15008_2": "染血的黑之羽", "UI_RelicIcon_15008_3": "染血的铁假面", "UI_RelicIcon_15008_4": "染血的铁之心", "UI_RelicIcon_15008_5": "骑士染血之时", "UI_RelicIcon_15009_3": "祭火礼冠", "UI_RelicIcon_15010_3": "祭水礼冠", "UI_RelicIcon_15011_3": "祭雷礼冠", "UI_RelicIcon_15012_3": "祭风礼冠", "UI_RelicIcon_15013_3": "祭冰礼冠", "UI_RelicIcon_15014_1": "巉岩琢塑之樽", "UI_RelicIcon_15014_2": "嵯峨群峰之翼", "UI_RelicIcon_15014_3": "不动玄石之相", "UI_RelicIcon_15014_4": "磐陀裂生之花", "UI_RelicIcon_15014_5": "星罗圭璧之晷", "UI_RelicIcon_15015_1": "夏祭水玉", "UI_RelicIcon_15015_2": "夏祭终末", "UI_RelicIcon_15015_3": "夏祭之面", "UI_RelicIcon_15015_4": "夏祭之花", "UI_RelicIcon_15015_5": "夏祭之刻", "UI_RelicIcon_15016_1": "沉波之盏", "UI_RelicIcon_15016_2": "追忆之风", "UI_RelicIcon_15016_3": "酒渍船帽", "UI_RelicIcon_15016_4": "饰金胸花", "UI_RelicIcon_15016_5": "坚铜罗盘", "UI_RelicIcon_15017_1": "盟誓金爵", "UI_RelicIcon_15017_2": "昭武翎羽", "UI_RelicIcon_15017_3": "将帅兜鍪", "UI_RelicIcon_15017_4": "勋绩之花", "UI_RelicIcon_15017_5": "金铜时晷", "UI_RelicIcon_15018_1": "超越之盏", "UI_RelicIcon_15018_2": "贤医之羽", "UI_RelicIcon_15018_3": "嗤笑之面", "UI_RelicIcon_15018_4": "无垢之花", "UI_RelicIcon_15018_5": "停摆之刻", "UI_RelicIcon_15019_1": "祈望之心", "UI_RelicIcon_15019_2": "思忆之矢", "UI_RelicIcon_15019_3": "无常之面", "UI_RelicIcon_15019_4": "羁缠之花", "UI_RelicIcon_15019_5": "朝露之时", "UI_RelicIcon_15020_1": "绯花之壶", "UI_RelicIcon_15020_2": "切落之羽", "UI_RelicIcon_15020_3": "华饰之兜", "UI_RelicIcon_15020_4": "明威之镡", "UI_RelicIcon_15020_5": "雷云之笼", "UI_RelicIcon_15021_1": "梦醒之瓢", "UI_RelicIcon_15021_2": "华馆之羽", "UI_RelicIcon_15021_3": "形骸之笠", "UI_RelicIcon_15021_4": "荣花之期", "UI_RelicIcon_15021_5": "众生之谣", "UI_RelicIcon_15022_1": "真珠之笼", "UI_RelicIcon_15022_2": "渊宫之羽", "UI_RelicIcon_15022_3": "海祇之冠", "UI_RelicIcon_15022_4": "海染之花", "UI_RelicIcon_15022_5": "离别之贝", "UI_RelicIcon_15023_1": "结契之刻", "UI_RelicIcon_15023_2": "潜光片羽", "UI_RelicIcon_15023_3": "虺雷之姿", "UI_RelicIcon_15023_4": "生灵之华", "UI_RelicIcon_15023_5": "阳辔之遗", "UI_RelicIcon_15024_1": "涌泉之盏", "UI_RelicIcon_15024_2": "垂玉之叶", "UI_RelicIcon_15024_3": "浮溯之珏", "UI_RelicIcon_15024_4": "魂香之花", "UI_RelicIcon_15024_5": "祝祀之凭", "UI_RelicIcon_15000_1": "高天的风之主杯", "UI_RelicIcon_15000_2": "高天的风之主羽", "UI_RelicIcon_15000_3": "高天的风之主冠", "UI_RelicIcon_15000_4": "高天的风之主花", "UI_RelicIcon_15000_5": "高天的风之主沙", "UI_RelicIcon_15025_1": "迷误者之灯", "UI_RelicIcon_15025_2": "翠蔓的智者", "UI_RelicIcon_15025_3": "月桂的宝冠", "UI_RelicIcon_15025_4": "迷宫的游人", "UI_RelicIcon_15025_5": "贤智的定期", "UI_RelicIcon_15026_1": "如蜜的终宴", "UI_RelicIcon_15026_2": "裁断的翎羽", "UI_RelicIcon_15026_3": "沙王的投影", "UI_RelicIcon_15026_4": "梦中的铁花", "UI_RelicIcon_15026_5": "沉金的岁月", "UI_RelicIcon_15027_1": "迷醉长梦的守护", "UI_RelicIcon_15027_2": "黄金邦国的结末", "UI_RelicIcon_15027_3": "流沙贵嗣的遗宝", "UI_RelicIcon_15027_4": "众王之都的开端", "UI_RelicIcon_15027_5": "失落迷途的机芯", "UI_RelicIcon_15028_1": "守秘的魔瓶", "UI_RelicIcon_15028_2": "谢落的筵席", "UI_RelicIcon_15028_3": "紫晶的花冠", "UI_RelicIcon_15028_4": "月女的华彩", "UI_RelicIcon_15028_5": "凝结的时刻"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/propId2Name_mapping.json b/GenshinUID/utils/map/data/propId2Name_mapping.json new file mode 100644 index 00000000..ed504c55 --- /dev/null +++ b/GenshinUID/utils/map/data/propId2Name_mapping.json @@ -0,0 +1,31 @@ +{ + "FIGHT_PROP_BASE_ATTACK": "基础攻击力", + "FIGHT_PROP_BASE_DEFENSE": "基础防御力", + "FIGHT_PROP_BASE_HP": "基础血量", + "FIGHT_PROP_ATTACK": "攻击力", + "FIGHT_PROP_ATTACK_PERCENT": "百分比攻击力", + "FIGHT_PROP_HP": "血量", + "FIGHT_PROP_HP_PERCENT": "百分比血量", + "FIGHT_PROP_DEFENSE": "防御力", + "FIGHT_PROP_DEFENSE_PERCENT": "百分比防御力", + "FIGHT_PROP_ELEMENT_MASTERY": "元素精通", + "FIGHT_PROP_CRITICAL": "暴击率", + "FIGHT_PROP_CRITICAL_HURT": "暴击伤害", + "FIGHT_PROP_CHARGE_EFFICIENCY": "元素充能效率", + "FIGHT_PROP_FIRE_SUB_HURT": "火元素抗性", + "FIGHT_PROP_ELEC_SUB_HURT": "雷元素抗性", + "FIGHT_PROP_ICE_SUB_HURT": "冰元素抗性", + "FIGHT_PROP_WATER_SUB_HURT": "水元素抗性", + "FIGHT_PROP_WIND_SUB_HURT": "风元素抗性", + "FIGHT_PROP_ROCK_SUB_HURT": "岩元素抗性", + "FIGHT_PROP_GRASS_SUB_HURT": "草元素抗性", + "FIGHT_PROP_FIRE_ADD_HURT": "火元素伤害加成", + "FIGHT_PROP_ELEC_ADD_HURT": "雷元素伤害加成", + "FIGHT_PROP_ICE_ADD_HURT": "冰元素伤害加成", + "FIGHT_PROP_WATER_ADD_HURT": "水元素伤害加成", + "FIGHT_PROP_WIND_ADD_HURT": "风元素伤害加成", + "FIGHT_PROP_ROCK_ADD_HURT": "岩元素伤害加成", + "FIGHT_PROP_GRASS_ADD_HURT": "草元素伤害加成", + "FIGHT_PROP_PHYSICAL_ADD_HURT": "物理伤害加成", + "FIGHT_PROP_HEAL_ADD": "治疗加成" +} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/skillId2Name_mapping_3.4.0.json b/GenshinUID/utils/map/data/skillId2Name_mapping_3.4.0.json new file mode 100644 index 00000000..519d3050 --- /dev/null +++ b/GenshinUID/utils/map/data/skillId2Name_mapping_3.4.0.json @@ -0,0 +1 @@ +{"Name": {"10001": "单手剑重攻击", "10002": "长枪重攻击", "10003": "法器重击", "10004": "双手剑单次重击", "10006": "蓄力技能教学触发器", "10011": "五连击", "10101": "武器技能CD", "10102": "队伍天赋共CD", "10111": "神里绫华空中连斩", "10012": "凯特测试技能", "10013": "神里流·霰步", "10014": "凯特-穿透电流", "10015": "冰风魔", "10016": "木锭壁", "10017": "箭雨", "10018": "神里流·冰华", "10019": "神里流·霜灭", "10020": "水激流冰华", "10021": "水激流霜灭", "10024": "普通攻击·神里流·倾", "10031": "普通攻击·西风剑术", "10032": "爆弹玩偶", "10033": "风压剑", "10034": "蒲公英之风", "10035": "潜入诱饵", "10036": "琴队伍机制", "10037": "空中投弹", "10038": "一斗个人线撒豆", "10041": "普通攻击·神射手", "10044": "安柏队伍天赋技能", "10053": "水激流-破隐一击", "10054": "普通攻击·故去的追忆", "10055": "普通攻击·故去的追忆", "10056": "主角(水)", "10057": "主角(风)", "10058": "主角(冰)", "10059": "主角(岩)", "10060": "普通攻击·指尖雷暴", "10061": "苍雷", "10062": "蔷薇的雷光", "10063": "测试角色5-01", "10064": "测试角色5-02", "10065": "测试角色5-03", "10066": "kevin震击", "10067": "风涡剑", "10068": "风息激荡", "10069": "kate测试普通攻击", "10070": "普通攻击·水之浅唱", "10071": "演唱,开始♪", "10072": "闪耀奇迹♪", "10073": "普通攻击·仪典剑术", "10074": "霜袭", "10075": "凛冽轮舞", "10076": "Barbara天赋技能", "10077": "星陨剑", "10078": "岩潮叠嶂", "10079": "Barbara天赋技能", "10080": "Barbara天赋技能", "10081": "Kaeya天赋技能", "10082": "Barbara队伍天赋技能", "10083": "Lisa队伍天赋技能", "10117": "草缘剑", "10118": "偃草若化", "10160": "普通攻击·淬炼之剑", "10161": "逆焰之刃", "10162": "逆焰之刃", "10163": "逆焰之刃", "10165": "黎明", "10166": "Diluc队伍机制", "10201": "普通攻击·钢脊", "10202": "利爪与苍雷", "10203": "雷牙", "10204": "雷泽小技能(狼神)", "10211": "安柏空中连射", "10221": "普通攻击·神代射术", "10222": "温迪长按瞄准", "10223": "温迪瞄准模式", "10224": "高天之歌", "10225": "风神之诗", "10231": "普通攻击·白案功夫", "10232": "锅巴出击", "10235": "旋火轮", "10241": "普通攻击·征涛", "10242": "捉浪", "10245": "斫雷", "20000": "进入瞄准模式", "10251": "阿葵丽雅点射", "10252": "阿葵丽雅长按瞄准", "10253": "阿葵丽雅瞄准模式", "10254": "冰爆弓", "10255": "霜寒病毒", "10261": "普通攻击·卷积微尘", "10262": "风轮两立", "10263": "魈冲抓(空中)", "10264": "魈空中攻击", "10265": "靖妖傩舞", "10271": "普通攻击·千金掷", "10272": "璇玑屏", "10273": "凝光小技能替换技能", "10274": "天权崩玉", "10275": "凝光触发小技能CD技能", "10281": "白盒普攻", "10282": "白盒小技能", "10283": "穿刺攻", "10291": "普通攻击·砰砰", "10292": "蹦蹦炸弹", "10295": "轰轰火花", "10300": "白盒技能连续爆弹", "10301": "普通攻击·岩雨", "10302": "地心", "10303": "天星", "10311": "普通攻击·罪灭之矢", "10312": "夜巡影翼", "10313": "至夜幻现", "10314": "菲谢尔长按瞄准", "10315": "菲谢尔瞄准模式", "10316": "菲谢尔小技能-重置乌鸦位置", "10321": "普通攻击·好运剑", "10322": "热情过载", "10323": "美妙旅程", "10331": "普通攻击·断雨", "10332": "魔王武装·狂澜", "10333": "极恶技·尽灭闪", "10334": "达达利亚进入瞄准", "10335": "达达利亚触发射击", "10336": "达达利亚小技能取消按钮", "10337": "达达利亚近战姿态普攻", "10341": "普通攻击·西风剑术·女仆", "10342": "护心铠", "10343": "大扫除", "10344": "诺艾尔被动天赋(上盾)", "10351": "普通攻击·云来古剑法", "10352": "仙法·寒病鬼差", "10353": "仙法·救苦度厄", "10355": "七七复活技能", "10371": "普通攻击·流天射术", "10372": "山泽麟迹", "10373": "降众天华", "10374": "花雨", "11301": "菲谢尔普攻", "11302": "菲谢尔小技能", "11305": "菲谢尔充能技", "10256": "风魔遁-地面", "10257": "风魔遁-空遁", "10258": "冰爆弓", "10259": "霜寒病毒", "10362": "重云小技能白盒测试", "10363": "雷主角小技能白盒测试", "10364": "雷主角小技能白盒测试", "10365": "雷主角小技能白盒测试1", "11371": "Rx白盒测试普攻", "11372": "Rx白盒测试技能1", "11373": "Rx白盒测试技能2", "11374": "Rx白盒进入瞄准", "11375": "Rx白盒触发射击", "10381": "普通攻击·古华剑法", "10382": "古华剑·画雨笼山", "10385": "古华剑·裁雨留虹", "10386": "普通攻击·西风剑术·白", "10387": "创生法·拟造阳华", "10388": "诞生式·大地之潮", "10391": "普通攻击·猎人射术", "10392": "猫爪冻冻", "10393": "迪奥娜长按瞄准", "10394": "迪奥娜瞄准模式", "10395": "最烈特调", "10401": "普通攻击·灭邪四式", "10402": "灵刃·重华叠霜", "10403": "灵刃·云开星落", "10411": "普通攻击·因果点破", "10412": "水中幻愿", "10413": "虚实流动", "10415": "星命定轨", "10421": "普通攻击·云来剑法", "10422": "星斗归位", "10423": "星斗归位", "10425": "天街巡游", "10431": "普通攻击·简式风灵作成", "10432": "风灵作成·陆叁零捌", "10433": "砂糖空中跳跃", "10434": "砂糖空中跳跃(伪)", "10435": "禁·风灵作成·柒伍同构贰型", "10441": "普通攻击·炎舞", "10442": "热情拂扫", "10443": "叛逆刮弦", "10451": "普通攻击·教会枪术", "10452": "噬罪的告解", "10453": "终命的圣礼", "10461": "普通攻击·往生秘传枪法", "10462": "蝶引来生", "10463": "安神秘法", "10464": "胡桃命之座相关", "10471": "普通攻击·我流剑术", "10472": "千早振", "10473": "千早振", "10474": "下落攻击·乱岚拨止", "10475": "万叶之一刀", "10481": "普通攻击·火漆制印", "10482": "丹书立约", "10485": "凭此结契", "10491": "普通攻击·烟火打扬", "10492": "焰硝庭火舞", "10493": "宵宫长按瞄准/瞄准模式", "10495": "琉金云间草", "10501": "普通攻击·迅破枪势", "10502": "烈烧佑命之侍护", "10505": "真红炽火之大铠", "10511": "普通攻击·西风剑术·宗室", "10512": "冰潮的涡旋", "10515": "凝浪之光剑", "10521": "普通攻击·源流", "10522": "神变·恶曜开眼", "10525": "奥义·梦想真说", "10531": "普通攻击·忍刀·终末番", "10532": "呜呼流·风隐急进", "10533": "呜呼流·风隐急进", "10535": "呜呼流·影貉缭乱", "10541": "普通攻击·水有常形", "10542": "海月之誓", "10545": "海人化羽", "10551": "普通攻击·呲牙裂扇箭", "10552": "犬坂吠吠方圆阵", "10553": "五郎长按瞄准", "10554": "五郎瞄准模式", "10555": "兽牙逐突形胜战法", "10561": "普通攻击·天狗传弓术", "10562": "鸦羽天狗霆雷召咒", "10563": "九条裟罗长按瞄准", "10564": "九条裟罗瞄准模式", "10565": "煌煌千道镇式", "10571": "普通攻击· 喧哗屋传说", "10572": "魔杀绝技·赤牛发破!", "10575": "最恶鬼王·一斗轰临!!", "10581": "普通攻击·狐灵食罪式", "10582": "野干役咒·杀生樱", "10583": "元素战技(空中)", "10585": "大密法·天狐显真", "10591": "普通攻击·不动流格斗术", "10592": "勠心拳", "10595": "聚风蹴", "10602": "雷影剑", "10605": "雷轰电转", "10606": "普通攻击·潜形隐曜弓", "10607": "萦络纵命索", "10608": "夜兰-长按瞄准/瞄准模式", "10609": "夜兰-元素战技", "10610": "渊图玲珑骰", "10621": "普通攻击·快速射击", "10622": "冰尘雪野", "10623": "埃洛伊瞄准射击", "10624": "埃洛伊普通攻击", "10631": "普通攻击·踏辰摄斗", "10632": "仰灵威召将役咒", "10635": "神女遣灵真诀", "10625": "曙光预言", "10641": "普通攻击·拂云出手", "10642": "旋云开相", "10643": "破嶂见旌仪", "10651": "普通攻击·忍流飞刃斩", "10652": "越祓雷草之轮", "10655": "御咏鸣神刈山祭", "10656": "久岐忍命6护死CD", "10657": "久岐忍命6精通CD", "10661": "普通攻击·神里流·转", "10662": "神里流·镜花", "10663": "瞬水剑(绫人特殊攻击用)", "10665": "神里流·水囿", "10671": "普通攻击·祈颂射艺", "10672": "拂花偈叶", "10675": "猫猫秘宝", "10674": "柯莱瞄准模式", "10681": "普通攻击·妙显剑舞·改", "10682": "镇灵之灯·烦恼解决炮", "10685": "卡萨扎莱宫的无微不至", "10691": "普通攻击·藏蕴破障", "10692": "识果种雷", "10693": "提纳里长按/瞄准模式", "10695": "造生缠藤箭", "10701": "普通攻击·弦月舞步", "10702": "七域舞步", "10703": "妮露元素战技2", "10704": "妮露元素战技3", "10706": "妮露元素战技特殊A", "10707": "妮露元素战技特殊E", "10705": "浮莲舞步·远梦聆泉", "10708": "妮露元素战技1命六用", "10711": "普通攻击·七圣枪术", "10712": "秘仪·律渊渡魂", "10713": "赛诺元素战技开大后", "10715": "圣仪·煟煌随狼行", "10721": "普通攻击·流耀枪术·守势", "10722": "圣仪·苍鹭庇卫", "10725": "圣仪·灰鸰衒潮", "10731": "普通攻击·行相", "10732": "所闻遍计", "10735": "心景幻成", "10741": "普通攻击·熠辉轨度剑", "10742": "垂裳端凝之夜", "10745": "星流摇床之梦", "10751": "普通攻击·行幡鸣弦", "10752": "羽画·风姿华歌", "10753": "狂言·式乐五番", "10755": "狂言·式乐五番", "10756": "流浪者元素战技", "10757": "流浪者元素战技", "10758": "流浪者元素战技", "10759": "流浪者元素战技", "10750": "流浪者元素战技", "10761": "普通攻击·迴身箭术", "10762": "非想风天", "10764": "珐露珊长按/瞄准模式", "10765": "抟风秘道", "10771": "普通攻击·颠扑连环枪", "10772": "云台团团降芦菔", "10775": "玉颗珊珊月中落", "10781": "普通攻击·溯因反绎法", "10782": "共相·理式摹写", "10785": "殊境·显象缚结", "20001": "风魔炮", "20002": "风魔炮", "20011": "飞行挑战 - 前冲", "20012": "飞行挑战 - 上冲", "20020": "纯水精灵", "20021": "羽球节-发球", "20022": "羽球节-接球", "20023": "羽球节-单体", "20024": "羽球节-爆破", "20025": "羽球节-破盾", "20026": "羽球节-单体", "20027": "羽球节-爆破", "20028": "羽球节-破盾", "20029": "羽球节-接球", "20030": "元素战技", "20031": "元素爆发", "20032": "手鞠游戏-放置球", "20033": "飞雷核", "20034": "飞雷核", "20035": "禁用元素战记", "20036": "禁用菲谢尔元素战技", "20037": "禁用菲谢尔元素爆发", "20040": "大世界动物-发射子弹", "20041": "活动动物-发射子弹", "20042": "2.5测试用大世界动物-发射子弹", "20043": "钩爪占位", "20044": "钩爪占位", "20045": "3.1抓捕野猪-投掷", "20049": "大世界抓捕蕈兽-发射子弹", "20051": "蕈兽战斗-集火", "20054": "3.2散兵2阶段瞄准射击", "20055": "3.2禁用元素战技", "20056": "3.2禁用元素爆发", "20057": "弹跳球占位", "20058": "弹跳球占位", "20100": "捕获!", "20101": "捕获!", "20110": "神秘预感", "20111": "感应光环", "20120": "狩猎直觉", "20121": "洞察全局", "20122": "禁锢诅咒", "20200": "伪装", "20201": "伪装", "20210": "透明戏法", "20212": "透明戏法", "20211": "诱饵战术", "20213": "诱饵战术", "20220": "星步疾行", "20202": "伪装", "20203": "伪装", "20214": "诱饵战术", "20215": "诱饵战术", "20400": "捕获!", "20401": "捕获!", "20410": "神秘预感", "20411": "感应光环", "20420": "狩猎直觉", "20421": "洞察全局", "20422": "禁锢诅咒", "20500": "伪装", "20501": "伪装", "20510": "透明戏法", "20512": "透明戏法", "20511": "诱饵战术", "20513": "诱饵战术", "20520": "星步疾行", "20521": "猎手投网", "20522": "幻形信标", "20523": "匿踪信标", "20524": "神秘预感", "20525": "伪装", "20526": "伪装", "20310": "进入钓鱼选竿状态", "20311": "进入钓鱼瞄准状态", "20312": "QTE启动按键", "20313": "QTE战斗按键", "20314": "收竿", "20315": "退出钓鱼状态", "20316": "换鱼饵", "20320": "格挡玩法-格挡键", "20321": "格挡玩法-必杀技1", "20322": "格挡玩法-必杀技2", "20323": "格挡玩法-必杀技3", "20330": "兰那罗小道具-发射", "20331": "兰那罗小道具-切换", "20340": "打砖块发球", "20341": "3.4跑酷冲刺", "20342": "3.4跑酷冲刺空中", "10384": "抓猫扔鱼", "100540": "普通攻击·故去的追忆", "100541": "旅行者五连击(火)", "100542": "旅行者五连击(水)", "100543": "普通攻击·异邦铁风", "100544": "旅行者五连击(冰)", "100545": "普通攻击·异邦岩锋", "100546": "普通攻击·异邦惊雷", "100547": "普通攻击·异邦草翦", "100550": "普通攻击·故去的追忆", "100551": "旅行者五连击(火)", "100552": "旅行者五连击(水)", "100553": "普通攻击·异邦铁风", "100554": "旅行者五连击(冰)", "100555": "普通攻击·异邦岩锋", "100556": "普通攻击·异邦惊雷", "100557": "普通攻击·异邦草翦", "5002010": "神里绫华空中攻击", "5003010": "琴空中攻击", "5005010": "男主角空中攻击", "5005020": "男主角(火)空中攻击", "5005030": "男主角(水)空中攻击", "5005040": "男主角(风)空中攻击", "5005050": "男主角(冰)空中攻击", "5005060": "男主角(岩)空中攻击", "5005070": "男主角(电)空中攻击", "5005080": "男主角(草)空中攻击", "5006010": "丽莎空中攻击", "5007010": "女主角空中攻击", "5007020": "女主角(火)空中攻击", "5007030": "女主角(水)空中攻击", "5007040": "女主角(风)空中攻击", "5007050": "女主角(冰)空中攻击", "5007060": "女主角(岩)空中攻击", "5007070": "女主角(电)空中攻击", "5007080": "女主角(草)空中攻击", "5014010": "芭芭拉空中攻击", "5015010": "凯亚空中攻击", "5016010": "迪卢克空中攻击", "5020010": "雷泽空中攻击", "5021010": "安柏空中攻击", "5022010": "温迪空中攻击", "5023010": "香菱空中攻击", "5024010": "北斗空中攻击", "5025010": "行秋空中攻击", "5026010": "魈空中攻击", "5027010": "凝光空中攻击", "5029010": "可莉空中攻击", "5030010": "钟离空中攻击", "5031010": "菲谢尔空中攻击", "5032010": "班尼特空中攻击", "5033010": "达达利亚空中攻击", "5034010": "诺艾尔空中攻击", "5035010": "七七空中攻击", "5036010": "重云空中攻击", "5037010": "甘雨空中攻击", "5038010": "阿贝多空中攻击", "5039010": "迪奥娜空中攻击", "5041010": "莫娜空中攻击", "5042010": "刻晴空中攻击", "5043010": "砂糖空中攻击", "5044010": "辛焱空中攻击", "5045010": "罗莎莉亚空中攻击", "5046010": "胡桃空中攻击", "5047010": "枫原万叶空中攻击", "5048010": "烟绯空中攻击", "5049010": "宵宫空中攻击", "5050010": "测试角色50空中攻击", "5051010": "优菈空中攻击", "5052010": "雷电将军空中攻击", "5053010": "早柚空中攻击", "5054010": "珊瑚宫心海空中攻击", "5055010": "五郎空中攻击", "5056010": "九条裟罗空中攻击", "5058010": "测试角色空中攻击", "5057010": "荒泷一斗空中攻击", "5059010": "鹿野院平藏空中攻击", "5060010": "夜兰空中攻击", "5062010": "埃洛伊空中攻击", "5063010": "申鹤空中攻击", "5064010": "云堇空中攻击", "5065010": "久岐忍空中攻击", "5066010": "神里绫人空中攻击", "5067010": "柯莱空中攻击", "5068010": "多莉空中攻击", "5069010": "提纳里空中攻击", "5070010": "妮露空中攻击", "5071010": "赛诺空中攻击", "5072010": "坎蒂丝空中攻击", "5073010": "纳西妲空中攻击", "5074010": "莱依拉空中攻击", "5075010": "流浪者空中攻击", "5076010": "空中攻击", "5077010": "瑶瑶空中攻击", "5078010": "艾尔海森空中攻击"}, "Icon": {"10001": "", "10002": "", "10003": "", "10004": "", "10006": "", "10011": "Skill_A_01", "10101": "", "10102": "", "10111": "Skill_A_01", "10012": "Skill_S_Kate_01", "10013": "Skill_S_Ayaka_02", "10014": "Skill_E_Kate", "10015": "Skill_E_Ayaka", "10016": "Skill_E_Qin", "10017": "Skill_E_Ambor", "10018": "Skill_S_Ayaka_01", "10019": "Skill_E_Ayaka", "10020": "Skill_S_Ayaka_01", "10021": "Skill_E_Ayaka", "10024": "Skill_A_01", "10031": "Skill_A_01", "10032": "Skill_S_Ambor_01", "10033": "Skill_S_Qin_02", "10034": "Skill_E_Qin_01", "10035": "Btn_Recon_Bait", "10036": "Skill_E_Kate", "10037": "Btn_Recon_Bait", "10038": "Btn_Recon_Bait_Beans", "10041": "Skill_A_02", "10044": "Skill_E_Kate", "10053": "Skill_S_Ayaka_02", "10054": "Skill_A_01", "10055": "Skill_A_01", "10056": "Skill_A_01", "10057": "Skill_A_01", "10058": "Skill_A_01", "10059": "Skill_A_01", "10060": "Skill_A_Catalyst_MD", "10061": "Skill_S_Lisa_01", "10062": "Skill_E_Lisa_01", "10063": "Skill_E_Ayaka", "10064": "Skill_S_Ayaka_01", "10065": "Skill_S_Ambor_01", "10066": "Skill_E_Kate", "10067": "Skill_S_PlayerWind_01", "10068": "Skill_E_PlayerWind_01", "10069": "Skill_A_01", "10070": "Skill_A_Catalyst_MD", "10071": "Skill_S_Barbara_01", "10072": "Skill_E_Barbara_01", "10073": "Skill_A_01", "10074": "Skill_S_Kaeya_01", "10075": "Skill_E_Kaeya_01", "10076": "Skill_E_Kate", "10077": "Skill_S_PlayerRock_01", "10078": "Skill_E_PlayerRock_01", "10079": "Skill_E_Kate", "10080": "Skill_E_Kate", "10081": "Skill_E_Kate", "10082": "Skill_E_Kate", "10083": "Skill_E_Kate", "10117": "Skill_E_PlayerGrass_01", "10118": "Skill_S_PlayerGrass_01", "10160": "Skill_A_04", "10161": "Skill_S_Diluc_01_01", "10162": "Skill_S_Diluc_01_02", "10163": "Skill_S_Diluc_01_03", "10165": "Skill_E_Diluc_01", "10166": "Skill_E_Kate", "10201": "Skill_A_04", "10202": "Skill_S_Razor_01", "10203": "Skill_E_Razor_01", "10204": "Skill_S_Ayaka_02", "10211": "Skill_A_02", "10221": "Skill_A_02", "10222": "Skill_A_02", "10223": "Skill_A_02", "10224": "Skill_S_Venti_01", "10225": "Skill_E_Venti_01", "10231": "Skill_A_03", "10232": "Skill_S_Xiangling_01", "10235": "Skill_E_Xiangling_01", "10241": "Skill_A_04", "10242": "Skill_S_Beidou_01", "10245": "Skill_E_Beidou_01", "20000": "Main_AimActive", "10251": "Skill_A_02", "10252": "Skill_A_02", "10253": "Skill_A_02", "10254": "Skill_S_Ayaka_01", "10255": "Skill_E_Ayaka", "10261": "Skill_A_03", "10262": "Skill_S_Xiao_01", "10263": "Skill_S_Xiao_01", "10264": "Skill_A_03", "10265": "Skill_E_Xiao_01", "10271": "Skill_A_Catalyst_MD", "10272": "Skill_S_Ningguang_01", "10273": "Skill_S_Ningguang_02", "10274": "Skill_E_Ningguang_01", "10275": "Skill_E_Ayaka", "10281": "Skill_A_01", "10282": "Skill_A_01", "10283": "Skill_S_Ayaka_01", "10291": "Skill_A_Catalyst_MD", "10292": "Skill_S_Klee_01", "10295": "Skill_E_Klee_01", "10300": "Skill_A_01", "10301": "Skill_A_03", "10302": "Skill_S_Zhongli_01", "10303": "Skill_E_Zhongli_01", "10311": "Skill_A_02", "10312": "Skill_S_Fischl_01", "10313": "Skill_E_Fischl_01", "10314": "Skill_A_02", "10315": "Skill_A_02", "10316": "Skill_S_Fischl_02", "10321": "Skill_A_01", "10322": "Skill_S_Bennett_01", "10323": "Skill_E_Bennett_01", "10331": "Skill_A_02", "10332": "Skill_S_Tartaglia_01", "10333": "Skill_E_Tartaglia_01", "10334": "Skill_A_02", "10335": "Skill_A_02", "10336": "Skill_S_Tartaglia_02", "10337": "Skill_A_01", "10341": "Skill_A_04", "10342": "Skill_S_Noel_01", "10343": "Skill_E_Noel_01", "10344": "Skill_E_Kate", "10351": "Skill_A_01", "10352": "Skill_S_Qiqi_01", "10353": "Skill_E_Qiqi_01", "10355": "Skill_E_Kate", "10371": "Skill_A_02", "10372": "Skill_S_Ganyu_01", "10373": "Skill_E_Ganyu_01", "10374": "Skill_A_02", "11301": "Skill_A_02", "11302": "Skill_S_Ambor_01", "11305": "Skill_E_Beidou_01", "10256": "Skill_S_Ayaka_01", "10257": "Skill_S_Ayaka_01", "10258": "Skill_S_Ayaka_01", "10259": "Skill_E_Ayaka", "10362": "Skill_E_Ayaka", "10363": "Skill_E_Ayaka", "10364": "Skill_S_Ayaka_01", "10365": "Skill_E_Ayaka", "11371": "Skill_A_02", "11372": "Skill_S_Razor_01", "11373": "Skill_E_Razor_01", "11374": "Skill_A_02", "11375": "Skill_A_02", "10381": "Skill_A_01", "10382": "Skill_S_Xingqiu_01", "10385": "Skill_E_Xingqiu_01", "10386": "Skill_A_01", "10387": "Skill_S_Albedo_01", "10388": "Skill_E_Albedo_01", "10391": "Skill_A_02", "10392": "Skill_S_Diona_01", "10393": "Skill_A_02", "10394": "Skill_A_02", "10395": "Skill_E_Diona_01", "10401": "Skill_A_04", "10402": "Skill_S_Chongyun_01", "10403": "Skill_E_Chongyun_01", "10411": "Skill_A_Catalyst_MD", "10412": "Skill_S_Mona_01", "10413": "Skill_S_Mona_02", "10415": "Skill_E_Mona_01", "10421": "Skill_A_01", "10422": "Skill_S_Keqing_01", "10423": "Skill_S_Keqing_02", "10425": "Skill_E_Keqing_01", "10431": "Skill_A_Catalyst_MD", "10432": "Skill_S_Sucrose_01", "10433": "Skill_S_Sucrose_02", "10434": "Skill_S_Sucrose_02", "10435": "Skill_E_Sucrose_01", "10441": "Skill_A_04", "10442": "Skill_S_Xinyan_01", "10443": "Skill_E_Xinyan_01", "10451": "Skill_A_03", "10452": "Skill_S_Rosaria_01", "10453": "Skill_E_Rosaria_01", "10461": "Skill_A_03", "10462": "Skill_S_Hutao_01", "10463": "Skill_E_Hutao_01", "10464": "Skill_A_03", "10471": "Skill_A_01", "10472": "Skill_S_Kazuha_01", "10473": "Skill_S_Kazuha_01", "10474": "Skill_S_Kazuha_02", "10475": "Skill_E_Kazuha_01", "10481": "Skill_A_Catalyst_MD", "10482": "Skill_S_Feiyan_01", "10485": "Skill_E_Feiyan_01", "10491": "Skill_A_02", "10492": "Skill_S_Yoimiya_01", "10493": "Skill_A_02", "10495": "Skill_E_Yoimiya_01", "10501": "Skill_A_03", "10502": "Skill_S_Tohma_01", "10505": "Skill_E_Tohma_01", "10511": "Skill_A_04", "10512": "Skill_S_Eula_01", "10515": "Skill_E_Eula_01", "10521": "Skill_A_03", "10522": "Skill_S_Shougun_01", "10525": "Skill_E_Shougun_01", "10531": "Skill_A_04", "10532": "Skill_S_Sayu_01", "10533": "Skill_S_Sayu_02", "10535": "Skill_E_Sayu_01", "10541": "Skill_A_Catalyst_MD", "10542": "Skill_S_Kokomi_01", "10545": "Skill_E_Kokomi_01", "10551": "Skill_A_02", "10552": "Skill_S_Gorou_01", "10553": "Skill_A_02", "10554": "Skill_A_02", "10555": "Skill_E_Gorou_01", "10561": "Skill_A_02", "10562": "Skill_S_Sara_01", "10563": "Skill_A_02", "10564": "Skill_A_02", "10565": "Skill_E_Sara_01", "10571": "Skill_A_04", "10572": "Skill_S_Itto_01", "10575": "Skill_E_Itto_01", "10581": "Skill_A_Catalyst_MD", "10582": "Skill_S_Yae_01", "10583": "", "10585": "Skill_E_Yae_01", "10591": "Skill_A_Catalyst_MD", "10592": "Skill_S_Heizo_01", "10595": "Skill_E_Heizo_01", "10602": "Skill_S_PlayerElectric_01", "10605": "Skill_E_PlayerElectric_01", "10606": "Skill_A_02", "10607": "Skill_S_Yelan_01", "10608": "Skill_A_02", "10609": "Skill_S_Yelan_02", "10610": "Skill_E_Yelan_01", "10621": "Skill_A_02", "10622": "Skill_S_Aloy_01", "10623": "Skill_A_02", "10624": "Skill_A_02", "10631": "Skill_A_03", "10632": "Skill_S_Shenhe_01", "10635": "Skill_E_Shenhe_01", "10625": "Skill_E_Aloy_01", "10641": "Skill_A_03", "10642": "Skill_S_Yunjin_01", "10643": "Skill_E_Yunjin_01", "10651": "Skill_A_01", "10652": "Skill_S_Shinobu_01", "10655": "Skill_E_Shinobu_01", "10656": "Skill_A_03", "10657": "Skill_A_03", "10661": "Skill_A_01", "10662": "Skill_S_Ayato_01", "10663": "Skill_A_01", "10665": "Skill_E_Ayato_01", "10671": "Skill_A_02", "10672": "Skill_S_Collei_01", "10675": "Skill_E_Collei_01", "10674": "Skill_A_02", "10681": "Skill_A_04", "10682": "Skill_S_Dori_01", "10685": "Skill_E_Dori_01", "10691": "Skill_A_02", "10692": "Skill_S_Tighnari_01", "10693": "Skill_A_02", "10695": "Skill_E_Tighnari_01", "10701": "Skill_A_01", "10702": "Skill_S_Nilou_01", "10703": "Skill_S_Nilou_01", "10704": "Skill_S_Nilou_01", "10706": "Skill_S_Nilou_04", "10707": "Skill_S_Nilou_02", "10705": "Skill_E_Nilou_01", "10708": "Skill_S_Nilou_01", "10711": "Skill_A_03", "10712": "Skill_S_Cyno_01", "10713": "Skill_S_Cyno_02", "10715": "Skill_E_Cyno_01", "10721": "Skill_A_03", "10722": "Skill_S_Candace_01", "10725": "Skill_E_Candace_01", "10731": "Skill_A_Catalyst_MD", "10732": "Skill_S_Nahida_01", "10735": "Skill_E_Nahida_01", "10741": "Skill_A_01", "10742": "Skill_S_Layla_01", "10745": "Skill_E_Layla_01", "10751": "Skill_A_Catalyst_MD", "10752": "Skill_S_Wanderer_01", "10753": "Skill_E_Wanderer_01", "10755": "Skill_E_Wanderer_01", "10756": "Skill_S_Wanderer_04", "10757": "Skill_S_Wanderer_01", "10758": "Skill_A_Catalyst_MD", "10759": "Skill_S_Wanderer_02", "10750": "Skill_S_Wanderer_03", "10761": "Skill_A_02", "10762": "Skill_S_Faruzan_01", "10764": "Skill_A_02", "10765": "Skill_E_Faruzan_01", "10771": "Skill_A_03", "10772": "Skill_S_Yaoyao_01", "10775": "Skill_E_Yaoyao_01", "10781": "Skill_A_01", "10782": "Skill_S_Alhatham_01", "10785": "Skill_E_Alhatham_01", "20001": "Skill_A_Dvalin_AirGun", "20002": "Skill_A_Dvalin_AirGun", "20011": "Btn_FlightSprint", "20012": "Btn_Rises", "20020": "Btn_WaterSpirit_Skill", "20021": "Btn_BounceConjuring_Serve_S_01", "20022": "Btn_BounceConjuring_Hit_A_01", "20023": "Btn_BounceConjuring_Bomb_S_01", "20024": "Btn_BounceConjuring_Bomb_S_02", "20025": "Btn_BounceConjuring_Bomb_S_03", "20026": "Btn_BounceConjuring_Bomb_S_01", "20027": "Btn_BounceConjuring_Bomb_S_02", "20028": "Btn_BounceConjuring_Bomb_S_03", "20029": "Btn_BounceConjuring_Hit_A_01", "20030": "Skill_S_Monster_Shougun_EyeStrip", "20031": "Skill_E_Monster_Shougun_EyeStrip", "20032": "Btn_Temari_S_01", "20033": "", "20034": "", "20035": "Skill_S_LunaRiteQuest_BanSkill", "20036": "Skill_S_SummerTimeV2Quest_BanSkill", "20037": "Skill_E_SummerTimeV2Quest_BanSkill", "20040": "Btn_CatchAnimal_Shoot", "20041": "Btn_CatchAnimal_Shoot", "20042": "Btn_CatchAnimal_Shoot", "20043": "", "20044": "", "20045": "Btn_CatchAnimal_Shoot", "20049": "Btn_CatchAnimal_Shoot", "20051": "Btn_FungusFighter_Aim", "20054": "Skill_E_Gagana_AimShoot", "20055": "", "20056": "", "20057": "", "20058": "", "20100": "Btn_HideAndSeek_Seeker_A_01", "20101": "Btn_HideAndSeek_Seeker_A_01", "20110": "Btn_HideAndSeek_Seeker_S_01", "20111": "Btn_HideAndSeek_Seeker_S_02", "20120": "Btn_HideAndSeek_Seeker_E_01", "20121": "Btn_HideAndSeek_Seeker_E_02", "20122": "Btn_HideAndSeek_Seeker_E_03", "20200": "Btn_HideAndSeek_Hider_A_01", "20201": "Btn_HideAndSeek_Hider_A_03", "20210": "Btn_HideAndSeek_Hider_S_01", "20212": "Btn_HideAndSeek_Hider_S_01_Borbid", "20211": "Btn_HideAndSeek_Hider_S_02", "20213": "Btn_HideAndSeek_Hider_S_02_Borbid", "20220": "Btn_HideAndSeek_Hider_E_01", "20202": "Btn_HideAndSeek_Hider_A_01", "20203": "Btn_HideAndSeek_Hider_A_03", "20214": "Btn_HideAndSeek_Hider_S_02", "20215": "Btn_HideAndSeek_Hider_S_02_Borbid", "20400": "Btn_HideAndSeek_Seeker_A_01", "20401": "Btn_HideAndSeek_Seeker_A_01", "20410": "Btn_HideAndSeek_Seeker_S_01", "20411": "Btn_HideAndSeek_Seeker_S_02", "20420": "Btn_HideAndSeek_Seeker_E_01", "20421": "Btn_HideAndSeek_Seeker_E_02", "20422": "Btn_HideAndSeek_Seeker_E_03", "20500": "Btn_HideAndSeek_Hider_A_01", "20501": "Btn_HideAndSeek_Hider_A_03", "20510": "Btn_HideAndSeek_Hider_S_01", "20512": "Btn_HideAndSeek_Hider_S_01_Borbid", "20511": "Btn_HideAndSeek_Hider_S_02", "20513": "Btn_HideAndSeek_Hider_S_02_Borbid", "20520": "Btn_HideAndSeek_Hider_E_01", "20521": "UI_Icon_Skill_Hunter_Net", "20522": "Btn_HideAndSeek_Hider_S_02", "20523": "UI_Icon_Skill_Prey_Invisible_Bait", "20524": "Btn_HideAndSeek_Seeker_S_01", "20525": "Btn_HideAndSeek_Hider_A_01", "20526": "Btn_HideAndSeek_Hider_A_03", "20310": "", "20311": "Btn_Fishing_Cast", "20312": "Btn_Fishing_Battle", "20313": "Btn_Fishing_Battle", "20314": "Btn_Fishing_Pull", "20315": "Btn_Fishing_Exit", "20316": "Btn_Fishing_Bait", "20320": "Btn_Blocking", "20321": "Btn_Blocking_Burst01", "20322": "Btn_Blocking_Burst02", "20323": "Btn_Blocking_Burst03", "20330": "Btn_Arana_Shoot", "20331": "Btn_Arana_Exchange", "20340": "Btn_BrickBreaker_Launch", "20341": "Skill_LanV3_Icon05", "20342": "Skill_LanV3_Icon05", "10384": "Btn_Recon_Bait", "100540": "Skill_A_01", "100541": "Skill_A_01", "100542": "Skill_A_01", "100543": "Skill_A_01", "100544": "Skill_A_01", "100545": "Skill_A_01", "100546": "Skill_A_01", "100547": "Skill_A_01", "100550": "Skill_A_01", "100551": "Skill_A_01", "100552": "Skill_A_01", "100553": "Skill_A_01", "100554": "Skill_A_01", "100555": "Skill_A_01", "100556": "Skill_A_01", "100557": "Skill_A_01", "5002010": "Skill_A_01", "5003010": "Skill_A_01", "5005010": "Skill_A_01", "5005020": "Skill_A_01", "5005030": "Skill_A_01", "5005040": "Skill_A_01", "5005050": "Skill_A_01", "5005060": "Skill_A_01", "5005070": "Skill_A_01", "5005080": "Skill_A_01", "5006010": "Skill_A_Catalyst_MD", "5007010": "Skill_A_01", "5007020": "Skill_A_01", "5007030": "Skill_A_01", "5007040": "Skill_A_01", "5007050": "Skill_A_01", "5007060": "Skill_A_01", "5007070": "Skill_A_01", "5007080": "Skill_A_01", "5014010": "Skill_A_Catalyst_MD", "5015010": "Skill_A_01", "5016010": "Skill_A_04", "5020010": "Skill_A_04", "5021010": "Skill_A_02", "5022010": "Skill_A_02", "5023010": "Skill_A_03", "5024010": "Skill_A_04", "5025010": "Skill_A_01", "5026010": "Skill_A_03", "5027010": "Skill_A_Catalyst_MD", "5029010": "Skill_A_Catalyst_MD", "5030010": "Skill_A_03", "5031010": "Skill_A_02", "5032010": "Skill_A_01", "5033010": "Skill_A_02", "5034010": "Skill_A_04", "5035010": "Skill_A_01", "5036010": "Skill_A_04", "5037010": "Skill_A_02", "5038010": "Skill_A_01", "5039010": "Skill_A_02", "5041010": "Skill_A_Catalyst_MD", "5042010": "Skill_A_01", "5043010": "Skill_A_Catalyst_MD", "5044010": "Skill_A_04", "5045010": "Skill_A_03", "5046010": "Skill_A_03", "5047010": "Skill_A_01", "5048010": "Skill_A_Catalyst_MD", "5049010": "Skill_A_02", "5050010": "Skill_A_03", "5051010": "Skill_A_04", "5052010": "Skill_A_03", "5053010": "Skill_A_04", "5054010": "Skill_A_Catalyst_MD", "5055010": "Skill_A_02", "5056010": "Skill_A_02", "5058010": "Skill_A_Catalyst_MD", "5057010": "Skill_A_04", "5059010": "Skill_A_Catalyst_MD", "5060010": "Skill_A_02", "5062010": "Skill_A_02", "5063010": "Skill_A_03", "5064010": "Skill_A_03", "5065010": "Skill_A_01", "5066010": "Skill_A_01", "5067010": "Skill_A_02", "5068010": "Skill_A_04", "5069010": "Skill_A_02", "5070010": "Skill_A_01", "5071010": "Skill_A_03", "5072010": "Skill_A_03", "5073010": "Skill_A_Catalyst_MD", "5074010": "Skill_A_01", "5075010": "Skill_A_Catalyst_MD", "5076010": "Skill_A_02", "5077010": "Skill_A_03", "5078010": "Skill_A_01"}} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/talentId2Name_mapping_3.4.0.json b/GenshinUID/utils/map/data/talentId2Name_mapping_3.4.0.json new file mode 100644 index 00000000..6628d0b8 --- /dev/null +++ b/GenshinUID/utils/map/data/talentId2Name_mapping_3.4.0.json @@ -0,0 +1 @@ +{"Name": {"21": "霜杀墨染樱", "22": "三重雪关扉", "23": "花白锦画纸吹雪", "24": "盈缺流返", "25": "花云钟入月", "26": "间水月", "31": "流转剑脊的暴风", "32": "守护众人的坚盾", "33": "西风吹拂之时", "34": "蒲公英的国土", "35": "须臾一瞬的烈风", "36": "恩眷万民的狮牙", "41": "无限的电回路", "42": "空间电势结界", "43": "谐振的雷光", "44": "如雨的电浆", "45": "等离态的落雷", "46": "脉冲的魔女", "71": "回转的怒风", "72": "革新的旋风", "73": "天地的刚风", "74": "眷护的和风", "75": "群星的涡风", "76": "纠缠的信风", "91": "巍然的青岩", "92": "不稳的熔岩", "93": "八方之岩", "94": "险峻的重岩", "95": "天坠之岩", "96": "永世的磐岩", "101": "丰穰的春雷", "102": "震怒的苍雷", "103": "连延的远雷", "104": "难测的云雷", "105": "荒野的霆雷", "106": "撼世的神雷", "111": "寄身的倚草", "112": "健韧的劲草", "113": "婆娑的瑶草", "114": "如饴的蜜草", "115": "迅生的丰草", "116": "蕴思的霜草", "141": "彩色歌谣", "142": "元气迸发", "143": "明日之星", "144": "努力即魔法", "145": "纯真的羁绊", "146": "将一切美好献给你", "151": "卓越的血脉", "152": "无尽的霜舞", "153": "凛冽的冰戏", "154": "极寒的轻吻", "155": "至冷的拥抱", "156": "轮旋的冰凌", "161": "罪罚裁断", "162": "炙热余烬", "163": "钢铁炽焰", "164": "流火焦灼", "165": "昭告黎明的火之鸟", "166": "清算黑暗的炎之剑", "201": "狼性", "202": "压制", "203": "兽魂", "204": "撕咬", "205": "利爪", "206": "天狼", "211": "一箭双丘丘!", "212": "一触即发", "213": "烧起来啦!", "214": "才不是普通的布偶", "215": "是兔兔伯爵!", "216": "疾如野火", "221": "弦发的苍风", "222": "眷恋的泠风", "223": "千风的诗篇", "224": "自由的凛风", "225": "高天的协奏", "226": "抗争的暴风", "231": "外酥里嫩", "232": "大火宽油", "233": "武火急烹", "234": "文火慢煨", "235": "锅巴凶猛", "236": "大龙卷旋火轮", "241": "鱼龙沉四方", "242": "赫赫雷涌起", "243": "潮奔蓦引电", "244": "牵星觅乡岸", "245": "踏浪霞连阶", "246": "北斗祓幽孽", "251": "重帘留香", "252": "天青现虹", "253": "织诗成锦", "254": "孤舟斩蛟", "255": "雨深闭门", "256": "万文集此", "261": "坏劫·毁坏三界", "262": "空劫·虚空华开敷变", "263": "降魔·忿怒显相", "264": "神通·诸苦灭尽", "265": "成劫·无明增长", "266": "降魔·护法夜叉", "271": "悬星尽散击云碎", "272": "璇玑合璧镇昆仑", "273": "星罗宿列天权临", "274": "攻守易形著神机", "275": "琼屏千扇正天衡", "276": "七星璨璨凝流光", "291": "连环轰隆", "292": "破破弹片", "293": "可莉特调", "294": "一触即发", "295": "轰击之星", "296": "火力全开", "301": "岩者,六合引之为骨", "302": "石者,八荒韫玉而明", "303": "圭璋,暝仍不移其晖", "304": "黄琮,破而不夺其坚", "305": "苍璧,驱之长昭天理", "306": "金玉,礼予天地四方", "311": "幽邃鸦眼", "312": "圣裁影羽", "313": "渊色黑翼", "314": "皇女幻绮谭", "315": "至夜默示录", "316": "永夜之禽", "321": "冒险憧憬", "322": "踏破绝境", "323": "火热激情", "324": "热情不灭", "325": "开拓的心魂", "326": "烈火与勇气", "331": "魔王武装·遏浪", "332": "魔王武装·暗流", "333": "深渊之灾·纷争涡源", "334": "深渊之灾·凝水盛放", "335": "极恶技·斩水斩雨", "336": "极恶技·天使灭尽", "341": "支援就交给我吧", "342": "旋风女仆", "343": "女仆不会受伤", "344": "之后会扫干净的", "345": "骑士团扫除专家", "346": "要一尘不染才行", "351": "寒苦回向", "352": "冰寒蚀骨", "353": "升天宝诰", "354": "天威压众", "355": "红莲开绽", "356": "起死回骸", "361": "释凌咏冰", "362": "周天运转", "363": "云尽光生", "364": "浮云霜天", "365": "真道正理", "366": "四灵捧圣", "371": "饮露", "372": "获麟", "373": "云行", "374": "西狩", "375": "折草", "376": "履虫", "381": "伊甸之花", "382": "显生之宙", "383": "太阳之华", "384": "神性之陨", "385": "冥古之潮", "386": "无垢之土", "391": "特调的余韵", "392": "猫爪冰摇", "393": "还、还要续杯?", "394": "「酒业杀手」", "395": "双份加冰", "396": "猫尾打烊之时", "411": "沉没的预言", "412": "星月的连珠", "413": "不休的天象", "414": "灭绝的预言", "415": "命运的嘲弄", "416": "厄运的修辞", "421": "雷厉", "422": "苛捐", "423": "登楼", "424": "调律", "425": "移灯", "426": "廉贞", "431": "堆叠真空域", "432": "不羁型贝特", "433": "零失误少女", "434": "炼金的偏执", "435": "认真普通瓶", "436": "混元熵增论", "441": "绝命的加速", "442": "开场即兴段", "443": "摭分的指法", "444": "节奏的传染", "445": "返场的高呼", "446": "地狱里摇摆", "451": "罪之导引", "452": "无福之地", "453": "告解之仪", "454": "苦痛恩典", "455": "临终祈礼", "456": "代行裁判", "461": "赤团开时斜飞去", "462": "最不安神晴又复雨", "463": "逗留采血色", "464": "伴君眠花房", "465": "无可奈何燃花作香", "466": "幽蝶能留一缕芳", "471": "千山红遍", "472": "山岚残芯", "473": "枫袖奇谭", "474": "大空幻法", "475": "万世之集", "476": "血赤叶红", "481": "占理不饶人", "482": "最终解释权", "483": "真火炼宝印", "484": "丹书金铁券", "485": "遵法切结书", "486": "是额外条款", "491": "赤玉琉金", "492": "万灯送火", "493": "鼠火戏法", "494": "花火职人心得", "495": "真夏宵祭锦绘", "496": "长野原龙势流星群", "501": "同袍的义理", "502": "僚佐的才巧", "503": "御敌的执定", "504": "用臣的久计", "505": "野火的豪烈", "506": "炽烧的至心", "511": "光潮的幻象", "512": "海沫的少女", "513": "劳伦斯的血脉", "514": "自卑者的逞强", "515": "骑士的素质", "516": "高贵者的义务", "521": "恶曜卜词", "522": "斩铁断金", "523": "真影旧事", "524": "誓奉常道", "525": "凶将显形", "526": "负愿前行", "531": "一心二用之术", "532": "理清逃跑路线", "533": "都交给分身吧", "534": "偷懒的新方法", "535": "快是第一奥义", "536": "呼呼大睡时间", "541": "决水于溪", "542": "波起云海", "543": "海渚月舟", "544": "月摄千川", "545": "百川集海", "546": "珊瑚一心", "551": "犬奔·疾如风", "552": "犬坐·稳如钟", "553": "犬爪·势如火", "554": "犬舐·温如水", "555": "犬突·动如雷", "556": "犬勇·忠如山", "561": "乌眼", "562": "鸦羽", "563": "心魔", "564": "彻证", "565": "咒咏", "566": "我界", "571": "倘若不知,我讲你听", "572": "纠集众人,斗倒御岳", "573": "水陆自在,牛王同行", "574": "奉行牢狱,茶饭之所", "575": "十年花坂,皆知我名", "576": "在下荒泷一斗是也", "581": "野狐供真篇", "582": "望月吼哕声", "583": "七段妙变化", "584": "绯樱引雷章", "585": "暴恶嗤笑面", "586": "大杀生咒禁", "591": "称名少年事件簿", "592": "殊解诸因探案集", "593": "暗文隐语谜题册", "594": "虚言假说百物语", "595": "禁室密所大图鉴", "596": "奇想天开捕物帐", "601": "与谋者,以局入局", "602": "入彀者,多多益善", "603": "晃盅者,琼畟药骰", "604": "诓惑者,接树移花", "605": "坐庄者,三仙戏法", "606": "取胜者,大小通吃", "621": "异界之星", "622": "异界之星", "623": "异界之星", "624": "异界之星", "625": "异界之星", "626": "异界之星", "631": "心斋", "632": "定蒙", "633": "潜虚", "634": "洞观", "635": "化神", "636": "忘玄", "641": "飞身趟马", "642": "诸般切末", "643": "牙纛探海", "644": "昇堂吊云", "645": "翘楚名坤", "646": "庄谐并举", "651": "割舍怜悯之心", "652": "割舍侥幸之心", "653": "割舍痛苦之心", "654": "割舍封闭之心", "655": "割舍逢迎之心", "656": "割舍软弱之心", "661": "镜华风姿", "662": "世有源泉", "663": "无意弄花", "664": "不厌细流", "665": "万水一露", "666": "滥觞无底", "671": "巡护深林", "672": "漫行山薮", "673": "夏堇芳菲", "674": "骞林馈遗", "675": "俱象残火", "676": "坠镞为林", "681": "追加投资", "682": "特许经营", "683": "百巧千奇", "684": "酌盈剂虚", "685": "物超所值", "686": "漫掷万镒", "691": "由根须断定肇始", "692": "由茎干剖析来缘", "693": "由枝节知晓造化", "694": "由片叶管窥枯荣", "695": "由繁花明了悟觉", "696": "由硕实品论应果", "701": "却月的轻舞", "702": "星天的花雨", "703": "倾影的莲步", "704": "挽漪的节音", "705": "翩旋的流光", "706": "断霜的弦歌", "711": "立仪·俯览昼冥", "712": "令仪·引谒归灵", "713": "律仪·行度誓惩", "714": "巡仪·蒇护禁罔", "715": "幽仪·逝往星芒", "716": "羽仪·裁落钧衡", "721": "赤沙的归嗣", "722": "贯月的耀锋", "723": "织狩的奉祀", "724": "守戍的誓命", "725": "萦金的苍瞳", "726": "衍溢的汐潮", "731": "心识蕴藏之种", "732": "正等善见之根", "733": "熏习成就之芽", "734": "比量现行之茎", "735": "妙谛破愚之叶", "736": "大辨圆成之实", "741": "寐领围垣", "742": "归芒携信", "743": "长宵宣秘", "744": "星示昭明", "745": "悬神系流", "746": "曜光灵炬", "751": "初番·茂风流羽行", "752": "二番·箙岛廓白浪", "753": "三番·久世舞夕颜", "754": "四番·花月歌浮舟", "755": "末番·今昔渡来殿", "756": "祝言·霞幕倾松风", "761": "舍径求真", "762": "忘形炼智", "763": "漫行灵圃", "764": "神机明悟", "765": "繁想奇境", "766": "妙道合真", "771": "妙受琼阁", "772": "正思无邪", "773": "墩墩善道", "774": "爰爰可亲", "775": "恻隐本义", "776": "慈惠仁心", "781": "直观", "782": "辩章", "783": "遮诠", "784": "义贯", "785": "智度", "786": "正理"}, "Icon": {"21": "UI_Talent_S_Ayaka_01", "22": "UI_Talent_S_Ayaka_02", "23": "UI_Talent_U_Ayaka_02", "24": "UI_Talent_S_Ayaka_03", "25": "UI_Talent_U_Ayaka_01", "26": "UI_Talent_S_Ayaka_04", "31": "UI_Talent_S_Qin_01", "32": "UI_Talent_S_Qin_02", "33": "UI_Talent_U_Qin_02", "34": "UI_Talent_S_Qin_03", "35": "UI_Talent_U_Qin_01", "36": "UI_Talent_S_Qin_04", "41": "UI_Talent_S_Lisa_01", "42": "UI_Talent_S_Lisa_02", "43": "UI_Talent_U_Lisa_02", "44": "UI_Talent_S_Lisa_03", "45": "UI_Talent_U_Lisa_01", "46": "UI_Talent_S_Lisa_04", "71": "UI_Talent_S_PlayerWind_01", "72": "UI_Talent_S_PlayerWind_02", "73": "UI_Talent_U_PlayerWind_02", "74": "UI_Talent_S_PlayerWind_03", "75": "UI_Talent_U_PlayerWind_01", "76": "UI_Talent_S_PlayerWind_04", "91": "UI_Talent_S_PlayerRock_01", "92": "UI_Talent_S_PlayerRock_02", "93": "UI_Talent_U_PlayerRock_02", "94": "UI_Talent_S_PlayerRock_03", "95": "UI_Talent_U_PlayerRock_01", "96": "UI_Talent_S_PlayerRock_04", "101": "UI_Talent_S_PlayerElectric_01", "102": "UI_Talent_S_PlayerElectric_02", "103": "UI_Talent_U_PlayerElectric_01", "104": "UI_Talent_S_PlayerElectric_03", "105": "UI_Talent_U_PlayerElectric_02", "106": "UI_Talent_S_PlayerElectric_04", "111": "UI_Talent_S_PlayerGrass_01", "112": "UI_Talent_S_PlayerGrass_02", "113": "UI_Talent_S_PlayerGrass_03", "114": "UI_Talent_S_PlayerGrass_04", "115": "UI_Talent_S_PlayerGrass_05", "116": "UI_Talent_S_PlayerGrass_06", "141": "UI_Talent_S_Barbara_01", "142": "UI_Talent_S_Barbara_02", "143": "UI_Talent_U_Barbara_02", "144": "UI_Talent_S_Barbara_03", "145": "UI_Talent_U_Barbara_01", "146": "UI_Talent_S_Barbara_04", "151": "UI_Talent_S_Kaeya_01", "152": "UI_Talent_S_Kaeya_02", "153": "UI_Talent_U_Kaeya_01", "154": "UI_Talent_S_Kaeya_03", "155": "UI_Talent_U_Kaeya_02", "156": "UI_Talent_S_Kaeya_04", "161": "UI_Talent_S_Diluc_01", "162": "UI_Talent_S_Diluc_02", "163": "UI_Talent_U_Diluc_01", "164": "UI_Talent_S_Diluc_03", "165": "UI_Talent_U_Diluc_02", "166": "UI_Talent_S_Diluc_04", "201": "UI_Talent_S_Razor_01", "202": "UI_Talent_S_Razor_02", "203": "UI_Talent_U_Razor_02", "204": "UI_Talent_S_Razor_03", "205": "UI_Talent_U_Razor_01", "206": "UI_Talent_S_Razor_04", "211": "UI_Talent_S_Ambor_01", "212": "UI_Talent_S_Ambor_02", "213": "UI_Talent_U_Ambor_02", "214": "UI_Talent_S_Ambor_03", "215": "UI_Talent_U_Ambor_01", "216": "UI_Talent_S_Ambor_04", "221": "UI_Talent_S_Venti_01", "222": "UI_Talent_S_Venti_02", "223": "UI_Talent_U_Venti_02", "224": "UI_Talent_S_Venti_03", "225": "UI_Talent_U_Venti_01", "226": "UI_Talent_S_Venti_04", "231": "UI_Talent_S_Xiangling_01", "232": "UI_Talent_S_Xiangling_02", "233": "UI_Talent_U_Xiangling_02", "234": "UI_Talent_S_Xiangling_03", "235": "UI_Talent_U_Xiangling_01", "236": "UI_Talent_S_Xiangling_04", "241": "UI_Talent_S_Beidou_02", "242": "UI_Talent_S_Beidou_01", "243": "UI_Talent_U_Beidou_01", "244": "UI_Talent_S_Beidou_03", "245": "UI_Talent_U_Beidou_02", "246": "UI_Talent_S_Beidou_04", "251": "UI_Talent_S_Xingqiu_01", "252": "UI_Talent_S_Xingqiu_02", "253": "UI_Talent_U_Xingqiu_01", "254": "UI_Talent_S_Xingqiu_03", "255": "UI_Talent_U_Xingqiu_02", "256": "UI_Talent_S_Xingqiu_04", "261": "UI_Talent_S_Xiao_01", "262": "UI_Talent_S_Xiao_02", "263": "UI_Talent_U_Xiao_01", "264": "UI_Talent_S_Xiao_03", "265": "UI_Talent_U_Xiao_02", "266": "UI_Talent_S_Xiao_04", "271": "UI_Talent_S_Ningguang_01", "272": "UI_Talent_S_Ningguang_05", "273": "UI_Talent_U_Ningguang_02", "274": "UI_Talent_S_Ningguang_03", "275": "UI_Talent_U_Ningguang_01", "276": "UI_Talent_S_Ningguang_04", "291": "UI_Talent_S_Klee_01", "292": "UI_Talent_S_Klee_02", "293": "UI_Talent_U_Klee_01", "294": "UI_Talent_S_Klee_03", "295": "UI_Talent_U_Klee_02", "296": "UI_Talent_S_Klee_04", "301": "UI_Talent_S_Zhongli_01", "302": "UI_Talent_S_Zhongli_02", "303": "UI_Talent_U_Zhongli_01", "304": "UI_Talent_S_Zhongli_03", "305": "UI_Talent_U_Zhongli_02", "306": "UI_Talent_S_Zhongli_04", "311": "UI_Talent_S_Fischl_01", "312": "UI_Talent_S_Fischl_02", "313": "UI_Talent_U_Fischl_01", "314": "UI_Talent_S_Fischl_03", "315": "UI_Talent_U_Fischl_02", "316": "UI_Talent_S_Fischl_04", "321": "UI_Talent_S_Bennett_01", "322": "UI_Talent_S_Bennett_02", "323": "UI_Talent_U_Bennett_01", "324": "UI_Talent_S_Bennett_03", "325": "UI_Talent_U_Bennett_02", "326": "UI_Talent_S_Bennett_04", "331": "UI_Talent_S_Tartaglia_01", "332": "UI_Talent_S_Tartaglia_02", "333": "UI_Talent_U_Tartaglia_01", "334": "UI_Talent_S_Tartaglia_05", "335": "UI_Talent_U_Tartaglia_02", "336": "UI_Talent_S_Tartaglia_04", "341": "UI_Talent_S_Noel_01", "342": "UI_Talent_S_Noel_02", "343": "UI_Talent_U_Noel_01", "344": "UI_Talent_S_Noel_03", "345": "UI_Talent_U_Noel_02", "346": "UI_Talent_S_Noel_04", "351": "UI_Talent_S_Qiqi_01", "352": "UI_Talent_S_Qiqi_02", "353": "UI_Talent_U_Qiqi_01", "354": "UI_Talent_S_Qiqi_03", "355": "UI_Talent_U_Qiqi_02", "356": "UI_Talent_S_Qiqi_04", "361": "UI_Talent_S_Chongyun_01", "362": "UI_Talent_S_Chongyun_02", "363": "UI_Talent_U_Chongyun_01", "364": "UI_Talent_S_Chongyun_03", "365": "UI_Talent_U_Chongyun_02", "366": "UI_Talent_S_Chongyun_04", "371": "UI_Talent_S_Ganyu_01", "372": "UI_Talent_S_Ganyu_02", "373": "UI_Talent_U_Ganyu_01", "374": "UI_Talent_S_Ganyu_03", "375": "UI_Talent_U_Ganyu_02", "376": "UI_Talent_S_Ganyu_04", "381": "UI_Talent_S_Albedo_01", "382": "UI_Talent_S_Albedo_02", "383": "UI_Talent_U_Albedo_01", "384": "UI_Talent_S_Albedo_03", "385": "UI_Talent_U_Albedo_02", "386": "UI_Talent_S_Albedo_04", "391": "UI_Talent_S_Diona_01", "392": "UI_Talent_S_Diona_02", "393": "UI_Talent_U_Diona_01", "394": "UI_Talent_S_Diona_03", "395": "UI_Talent_U_Diona_02", "396": "UI_Talent_S_Diona_04", "411": "UI_Talent_S_Mona_01", "412": "UI_Talent_S_Mona_02", "413": "UI_Talent_U_Mona_01", "414": "UI_Talent_S_Mona_03", "415": "UI_Talent_U_Mona_02", "416": "UI_Talent_S_Mona_04", "421": "UI_Talent_S_Keqing_01", "422": "UI_Talent_S_Keqing_02", "423": "UI_Talent_U_Keqing_01", "424": "UI_Talent_S_Keqing_03", "425": "UI_Talent_U_Keqing_02", "426": "UI_Talent_S_Keqing_04", "431": "UI_Talent_S_Sucrose_01", "432": "UI_Talent_S_Sucrose_02", "433": "UI_Talent_U_Sucrose_01", "434": "UI_Talent_S_Sucrose_03", "435": "UI_Talent_U_Sucrose_02", "436": "UI_Talent_S_Sucrose_04", "441": "UI_Talent_S_Xinyan_01", "442": "UI_Talent_S_Xinyan_02", "443": "UI_Talent_U_Xinyan_01", "444": "UI_Talent_S_Xinyan_03", "445": "UI_Talent_U_Xinyan_02", "446": "UI_Talent_S_Xinyan_04", "451": "UI_Talent_S_Rosaria_01", "452": "UI_Talent_S_Rosaria_02", "453": "UI_Talent_U_Rosaria_01", "454": "UI_Talent_S_Rosaria_03", "455": "UI_Talent_U_Rosaria_02", "456": "UI_Talent_S_Rosaria_04", "461": "UI_Talent_S_Hutao_03", "462": "UI_Talent_S_Hutao_01", "463": "UI_Talent_U_Hutao_01", "464": "UI_Talent_S_Hutao_02", "465": "UI_Talent_U_Hutao_02", "466": "UI_Talent_S_Hutao_04", "471": "UI_Talent_S_Kazuha_01", "472": "UI_Talent_S_Kazuha_02", "473": "UI_Talent_U_Kazuha_01", "474": "UI_Talent_S_Kazuha_03", "475": "UI_Talent_U_Kazuha_02", "476": "UI_Talent_S_Kazuha_04", "481": "UI_Talent_S_Feiyan_01", "482": "UI_Talent_S_Feiyan_02", "483": "UI_Talent_U_Feiyan_01", "484": "UI_Talent_S_Feiyan_03", "485": "UI_Talent_U_Feiyan_02", "486": "UI_Talent_S_Feiyan_04", "491": "UI_Talent_S_Yoimiya_01", "492": "UI_Talent_S_Yoimiya_02", "493": "UI_Talent_U_Yoimiya_01", "494": "UI_Talent_S_Yoimiya_03", "495": "UI_Talent_U_Yoimiya_02", "496": "UI_Talent_S_Yoimiya_04", "501": "UI_Talent_S_Tohma_01", "502": "UI_Talent_S_Tohma_02", "503": "UI_Talent_U_Tohma_01", "504": "UI_Talent_S_Tohma_03", "505": "UI_Talent_U_Tohma_02", "506": "UI_Talent_S_Tohma_04", "511": "UI_Talent_S_Eula_02", "512": "UI_Talent_S_Eula_01", "513": "UI_Talent_U_Eula_01", "514": "UI_Talent_S_Eula_03", "515": "UI_Talent_U_Eula_02", "516": "UI_Talent_S_Eula_04", "521": "UI_Talent_S_Shougun_01", "522": "UI_Talent_S_Shougun_03", "523": "UI_Talent_U_Shougun_02", "524": "UI_Talent_S_Shougun_02", "525": "UI_Talent_U_Shougun_01", "526": "UI_Talent_S_Shougun_04", "531": "UI_Talent_S_Sayu_01", "532": "UI_Talent_S_Sayu_02", "533": "UI_Talent_U_Sayu_02", "534": "UI_Talent_S_Sayu_03", "535": "UI_Talent_U_Sayu_01", "536": "UI_Talent_S_Sayu_04", "541": "UI_Talent_S_Kokomi_01", "542": "UI_Talent_S_Kokomi_02", "543": "UI_Talent_U_Kokomi_02", "544": "UI_Talent_S_Kokomi_03", "545": "UI_Talent_U_Kokomi_01", "546": "UI_Talent_S_Kokomi_04", "551": "UI_Talent_S_Gorou_01", "552": "UI_Talent_S_Gorou_02", "553": "UI_Talent_U_Gorou_01", "554": "UI_Talent_S_Gorou_03", "555": "UI_Talent_U_Gorou_02", "556": "UI_Talent_S_Gorou_04", "561": "UI_Talent_S_Sara_05", "562": "UI_Talent_S_Sara_02", "563": "UI_Talent_U_Sara_02", "564": "UI_Talent_S_Sara_03", "565": "UI_Talent_U_Sara_01", "566": "UI_Talent_S_Sara_04", "571": "UI_Talent_S_Itto_01", "572": "UI_Talent_S_Itto_02", "573": "UI_Talent_U_Itto_01", "574": "UI_Talent_S_Itto_03", "575": "UI_Talent_U_Itto_02", "576": "UI_Talent_S_Itto_04", "581": "UI_Talent_S_Yae_01", "582": "UI_Talent_S_Yae_02", "583": "UI_Talent_U_Yae_01", "584": "UI_Talent_S_Yae_03", "585": "UI_Talent_U_Yae_02", "586": "UI_Talent_S_Yae_04", "591": "UI_Talent_S_Heizo_01", "592": "UI_Talent_S_Heizo_02", "593": "UI_Talent_U_Heizo_01", "594": "UI_Talent_S_Heizo_03", "595": "UI_Talent_U_Heizo_02", "596": "UI_Talent_S_Heizo_04", "601": "UI_Talent_S_Yelan_01", "602": "UI_Talent_S_Yelan_02", "603": "UI_Talent_U_Yelan_01", "604": "UI_Talent_S_Yelan_03", "605": "UI_Talent_U_Yelan_02", "606": "UI_Talent_S_Yelan_04", "621": "UI_Talent_S_Aloy_Lock", "622": "UI_Talent_S_Aloy_Lock", "623": "UI_Talent_S_Aloy_Lock", "624": "UI_Talent_S_Aloy_Lock", "625": "UI_Talent_S_Aloy_Lock", "626": "UI_Talent_S_Aloy_Lock", "631": "UI_Talent_S_Shenhe_02", "632": "UI_Talent_S_Shenhe_01", "633": "UI_Talent_U_Shenhe_01", "634": "UI_Talent_S_Shenhe_03", "635": "UI_Talent_U_Shenhe_02", "636": "UI_Talent_S_Shenhe_04", "641": "UI_Talent_S_Yunjin_01", "642": "UI_Talent_S_Yunjin_02", "643": "UI_Talent_U_Yunjin_01", "644": "UI_Talent_S_Yunjin_03", "645": "UI_Talent_U_Yunjin_02", "646": "UI_Talent_S_Yunjin_04", "651": "UI_Talent_S_Shinobu_01", "652": "UI_Talent_S_Shinobu_02", "653": "UI_Talent_U_Shinobu_01", "654": "UI_Talent_S_Shinobu_03", "655": "UI_Talent_U_Shinobu_02", "656": "UI_Talent_S_Shinobu_04", "661": "UI_Talent_S_Ayato_01", "662": "UI_Talent_S_Ayato_02", "663": "UI_Talent_U_Ayato_02", "664": "UI_Talent_S_Ayato_03", "665": "UI_Talent_U_Ayato_01", "666": "UI_Talent_S_Ayato_04", "671": "UI_Talent_S_Collei_01", "672": "UI_Talent_S_Collei_02", "673": "UI_Talent_U_Collei_02", "674": "UI_Talent_S_Collei_03", "675": "UI_Talent_U_Collei_01", "676": "UI_Talent_S_Collei_04", "681": "UI_Talent_S_Dori_01", "682": "UI_Talent_S_Dori_02", "683": "UI_Talent_U_Dori_02", "684": "UI_Talent_S_Dori_03", "685": "UI_Talent_U_Dori_01", "686": "UI_Talent_S_Dori_04", "691": "UI_Talent_S_Tighnari_01", "692": "UI_Talent_S_Tighnari_02", "693": "UI_Talent_U_Tighnari_01", "694": "UI_Talent_S_Tighnari_03", "695": "UI_Talent_U_Tighnari_02", "696": "UI_Talent_S_Tighnari_04", "701": "UI_Talent_S_Nilou_01", "702": "UI_Talent_S_Nilou_02", "703": "UI_Talent_U_Nilou_01", "704": "UI_Talent_S_Nilou_03", "705": "UI_Talent_U_Nilou_02", "706": "UI_Talent_S_Nilou_04", "711": "UI_Talent_S_Cyno_01", "712": "UI_Talent_S_Cyno_02", "713": "UI_Talent_U_Cyno_01", "714": "UI_Talent_S_Cyno_03", "715": "UI_Talent_U_Cyno_02", "716": "UI_Talent_S_Cyno_04", "721": "UI_Talent_S_Candace_01", "722": "UI_Talent_S_Candace_02", "723": "UI_Talent_U_Candace_01", "724": "UI_Talent_S_Candace_03", "725": "UI_Talent_U_Candace_02", "726": "UI_Talent_S_Candace_04", "731": "UI_Talent_S_Nahida_01", "732": "UI_Talent_S_Nahida_02", "733": "UI_Talent_U_Nahida_01", "734": "UI_Talent_S_Nahida_03", "735": "UI_Talent_U_Nahida_02", "736": "UI_Talent_S_Nahida_04", "741": "UI_Talent_S_Layla_01", "742": "UI_Talent_S_Layla_02", "743": "UI_Talent_U_Layla_01", "744": "UI_Talent_S_Layla_03", "745": "UI_Talent_U_Layla_02", "746": "UI_Talent_S_Layla_04", "751": "UI_Talent_S_Wanderer_01", "752": "UI_Talent_S_Wanderer_02", "753": "UI_Talent_U_Wanderer_02", "754": "UI_Talent_S_Wanderer_03", "755": "UI_Talent_U_Wanderer_01", "756": "UI_Talent_S_Wanderer_04", "761": "UI_Talent_S_Faruzan_01", "762": "UI_Talent_S_Faruzan_02", "763": "UI_Talent_U_Faruzan_01", "764": "UI_Talent_S_Faruzan_03", "765": "UI_Talent_U_Faruzan_02", "766": "UI_Talent_S_Faruzan_04", "771": "UI_Talent_S_Yaoyao_01", "772": "UI_Talent_S_Yaoyao_02", "773": "UI_Talent_U_Yaoyao_01", "774": "UI_Talent_S_Yaoyao_03", "775": "UI_Talent_U_Yaoyao_02", "776": "UI_Talent_S_Yaoyao_04", "781": "UI_Talent_S_Alhatham_02", "782": "UI_Talent_S_Alhatham_01", "783": "UI_Talent_U_Alhatham_01", "784": "UI_Talent_S_Alhatham_03", "785": "UI_Talent_U_Alhatham_02", "786": "UI_Talent_S_Alhatham_04"}} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/weaponHash2Name_mapping_3.4.0.json b/GenshinUID/utils/map/data/weaponHash2Name_mapping_3.4.0.json new file mode 100644 index 00000000..6cf77fb3 --- /dev/null +++ b/GenshinUID/utils/map/data/weaponHash2Name_mapping_3.4.0.json @@ -0,0 +1 @@ +{"2410593283": "无锋剑", "2125206395": "银剑", "479076483": "冷刃", "1608953539": "黎明神剑", "3673792067": "旅行剑", "160493219": "暗铁剑", "3421967235": "吃虎鱼刀", "1388004931": "飞天御剑", "2474354867": "西风剑", "3587621259": "笛剑", "1990641987": "祭礼剑", "2375993851": "宗室长剑", "1321135667": "匣里龙吟", "1991707099": "试作斩岩", "4103022435": "铁蜂刺", "3378007475": "黑岩长剑", "3796905611": "黑剑", "2947140987": "暗巷闪光", "1773425155": "降临之剑", "2749853923": "腐殖之剑", "1990820123": "天目影打刀", "342097547": "辰砂之纺锤", "1012170803": "笼钓瓶一心", "313300315": "原木刀", "143051931": "西福斯的月光", "1499745907": "「一心传」名刀", "1538092267": "「一心传」名刀", "3464027035": "「一心传」名刀", "2448629019": "东花坊时雨", "902264035": "风鹰剑", "4055003299": "天空之刃", "2949448555": "苍古自由之誓", "944332883": "斫峰之刃", "1345343763": "磐岩结绿", "4124851547": "雾切之回光", "1600275315": "波乱月白经津", "454086795": "圣显之钥", "275622963": "裁叶萃光", "2666951267": "训练大剑", "1182966603": "佣兵重剑", "1479961579": "铁影阔剑", "4090429643": "沐浴龙血的剑", "850802171": "白铁大剑", "1516554699": "石英大剑", "3097441915": "以理服人", "2614170427": "飞天大御剑", "735056795": "西风大剑", "930640955": "钟剑", "1675686363": "祭礼大剑", "877751435": "宗室大剑", "3684723963": "雨裁", "3722933411": "试作古华", "680510411": "白影剑", "20848859": "黑岩斩刀", "1437658243": "螭骨剑", "2006422931": "千岩古剑", "2753539619": "雪葬的星银", "346510395": "衔珠海皇", "4193089947": "桂木斩长正", "3073454867": "玛海菈的水色", "2359799475": "恶王丸", "902184579": "森林王器", "1089950259": "天空之傲", "3995710363": "狼的末路", "1075647299": "松籁响起之时", "2792766467": "无工之剑", "3914951691": "赤角石溃杵", "2796697027": "新手长枪", "3070169307": "铁尖枪", "1390797107": "白缨枪", "618786571": "钺矛", "4103766499": "黑缨枪", "500612819": "「旗杆」", "2664629131": "匣里灭辰", "1154009435": "试作星镰", "578575283": "流月针", "481755219": "黑岩刺枪", "4049410651": "决斗之枪", "716252627": "千岩长枪", "3755004051": "西风长枪", "2935286715": "宗室猎枪", "3443142923": "龙脊长枪", "2491797315": "喜多院十文字", "1148024603": "「渔获」", "4122509083": "断浪长鳍", "452357939": "贯月矢", "1470442731": "风信之锋", "3235324891": "护摩之杖", "4158505619": "天空之脊", "197755235": "贯虹之槊", "1997709467": "和璞鸢", "688991243": "息灾", "3717849275": "薙草之稻光", "4238339131": "赤沙之杖", "3584825427": "学徒笔记", "2705029563": "口袋魔导书", "2279290283": "魔导绪论", "3500935003": "讨龙英杰谭", "1406746947": "异世界行记", "2963220587": "翡玉法球", "3719372715": "甲级宝珏", "302691299": "琥珀玥", "623534363": "西风秘典", "1163263227": "流浪乐章", "2195665683": "祭礼残章", "3827789435": "宗室秘法录", "37147251": "匣里日月", "2521338131": "试作金珀", "1072884907": "万国诸海图谱", "3273999011": "黑岩绯玉", "3156385731": "昭心", "3090373787": "暗巷的酒与诗", "2587614459": "忍冬之果", "3456986819": "嘟嘟可故事集", "2324146259": "白辰之环", "2539208459": "证誓之明瞳", "426363739": "流浪的晚星", "2267978875": "盈满之实", "807607555": "天空之卷", "1455107995": "四风原典", "693354267": "尘世之锁", "1890163363": "不灭月华", "310247243": "神乐之真意", "1201790667": "千夜浮梦", "359484419": "图莱杜拉的回忆", "3600623979": "猎弓", "2340970067": "历练的猎弓", "3975746731": "鸦羽弓", "656120259": "神射手之誓", "4267718859": "反曲弓", "1021898539": "弹弓", "4139294531": "信使", "2242027395": "黑檀弓", "1240067179": "西风猎弓", "2556914683": "绝弦", "2400012995": "祭礼弓", "2832648187": "宗室长弓", "3169209451": "弓藏", "3625393819": "试作澹月", "411685275": "钢轮弓", "3447737235": "黑岩战弓", "3439749859": "苍翠猎弓", "2417717595": "暗巷猎手", "2425414923": "落霞", "3949653579": "幽夜华尔兹", "650049651": "风花之颂", "4186179883": "破魔之弓", "540938627": "掠食者", "1860795787": "曚云之月", "3176599083": "王下近侍", "3063191787": "竭泽", "3933622347": "天空之翼", "828711395": "阿莫斯之弓", "3112679155": "终末嗟叹之诗", "1901973075": "冬极白星", "4230231107": "若水", "2918525947": "飞雷之弦振", "1348687251": "猎人之径", "4137694339": "(test)竿测试", "2719832059": "(test)穿模测试", "500987603": "(test)穿模测试", "1595734083": "(test)穿模测试", "2009975571": "(test)穿模测试", "4162981171": "(test)穿模测试", "3762437019": "(test)穿模测试"} \ No newline at end of file diff --git a/GenshinUID/utils/map/data/weaponHash2Type_mapping_3.4.0.json b/GenshinUID/utils/map/data/weaponHash2Type_mapping_3.4.0.json new file mode 100644 index 00000000..cfb80ab2 --- /dev/null +++ b/GenshinUID/utils/map/data/weaponHash2Type_mapping_3.4.0.json @@ -0,0 +1 @@ +{"2410593283": "单手剑", "2125206395": "单手剑", "479076483": "单手剑", "1608953539": "单手剑", "3673792067": "单手剑", "160493219": "单手剑", "3421967235": "单手剑", "1388004931": "单手剑", "2474354867": "单手剑", "3587621259": "单手剑", "1990641987": "单手剑", "2375993851": "单手剑", "1321135667": "单手剑", "1991707099": "单手剑", "4103022435": "单手剑", "3378007475": "单手剑", "3796905611": "单手剑", "2947140987": "单手剑", "1135130229": "单手剑", "1773425155": "单手剑", "2749853923": "单手剑", "1990820123": "单手剑", "342097547": "单手剑", "1012170803": "单手剑", "313300315": "单手剑", "143051931": "单手剑", "1499745907": "单手剑", "1538092267": "单手剑", "3464027035": "单手剑", "2448629019": "单手剑", "902264035": "单手剑", "4055003299": "单手剑", "2949448555": "单手剑", "944332883": "单手剑", "1345343763": "单手剑", "231836963": "单手剑", "3780343147": "单手剑", "1664039091": "单手剑", "4124851547": "单手剑", "1600275315": "单手剑", "454086795": "单手剑", "275622963": "单手剑", "2666951267": "双手剑", "1182966603": "双手剑", "1479961579": "双手剑", "4090429643": "双手剑", "850802171": "双手剑", "1516554699": "双手剑", "3097441915": "双手剑", "2614170427": "双手剑", "735056795": "双手剑", "930640955": "双手剑", "1675686363": "双手剑", "877751435": "双手剑", "3684723963": "双手剑", "3722933411": "双手剑", "680510411": "双手剑", "20848859": "双手剑", "1437658243": "双手剑", "2006422931": "双手剑", "2753539619": "双手剑", "346510395": "双手剑", "4193089947": "双手剑", "3073454867": "双手剑", "2359799475": "双手剑", "902184579": "双手剑", "1089950259": "双手剑", "3995710363": "双手剑", "1075647299": "双手剑", "2792766467": "双手剑", "977648923": "双手剑", "2597527627": "双手剑", "759708203": "双手剑", "2507837467": "双手剑", "3914951691": "双手剑", "2796697027": "长柄武器", "3070169307": "长柄武器", "1390797107": "长柄武器", "618786571": "长柄武器", "4103766499": "长柄武器", "500612819": "长柄武器", "2664629131": "长柄武器", "1154009435": "长柄武器", "578575283": "长柄武器", "481755219": "长柄武器", "4049410651": "长柄武器", "716252627": "长柄武器", "3755004051": "长柄武器", "2935286715": "长柄武器", "3443142923": "长柄武器", "2491797315": "长柄武器", "1148024603": "长柄武器", "4122509083": "长柄武器", "452357939": "长柄武器", "1470442731": "长柄武器", "3235324891": "长柄武器", "4158505619": "长柄武器", "469555475": "长柄武器", "197755235": "长柄武器", "1997709467": "长柄武器", "3532343811": "长柄武器", "688991243": "长柄武器", "3717849275": "长柄武器", "4238339131": "长柄武器", "3584825427": "法器", "2705029563": "法器", "2279290283": "法器", "3500935003": "法器", "1406746947": "法器", "2963220587": "法器", "3719372715": "法器", "302691299": "法器", "623534363": "法器", "1163263227": "法器", "2195665683": "法器", "3827789435": "法器", "37147251": "法器", "2521338131": "法器", "1072884907": "法器", "3273999011": "法器", "3156385731": "法器", "3090373787": "法器", "415851979": "法器", "2587614459": "法器", "3456986819": "法器", "2324146259": "法器", "2539208459": "法器", "426363739": "法器", "2267978875": "法器", "807607555": "法器", "1455107995": "法器", "452043283": "法器", "693354267": "法器", "4007372867": "法器", "1890163363": "法器", "4123950051": "法器", "310247243": "法器", "1201790667": "法器", "359484419": "法器", "3600623979": "弓", "2340970067": "弓", "3975746731": "弓", "656120259": "弓", "4267718859": "弓", "1021898539": "弓", "4139294531": "弓", "2242027395": "弓", "1240067179": "弓", "2556914683": "弓", "2400012995": "弓", "2832648187": "弓", "3169209451": "弓", "3625393819": "弓", "411685275": "弓", "3447737235": "弓", "3439749859": "弓", "2417717595": "弓", "2425414923": "弓", "3949653579": "弓", "650049651": "弓", "4186179883": "弓", "540938627": "弓", "1860795787": "弓", "3176599083": "弓", "3063191787": "弓", "3933622347": "弓", "828711395": "弓", "3112679155": "弓", "565329475": "弓", "1994081075": "弓", "2824690859": "弓", "1901973075": "弓", "4230231107": "弓", "2918525947": "弓", "1348687251": "弓", "4137694339": "单手剑", "2719832059": "单手剑", "500987603": "双手剑", "1595734083": "长柄武器", "2009975571": "法器", "4162981171": "法器", "3762437019": "弓"} \ No newline at end of file diff --git a/GenshinUID/utils/map/grow_curve.py b/GenshinUID/utils/map/grow_curve.py new file mode 100644 index 00000000..485268c5 --- /dev/null +++ b/GenshinUID/utils/map/grow_curve.py @@ -0,0 +1,4693 @@ +GROW_CURVE_LIST = [ + { + 'level': 1, + 'curveInfos': [ + {'type': 'GROW_CURVE_HP_S4', 'arith': 'ARITH_MULTI', 'value': 1.0}, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.0, + }, + {'type': 'GROW_CURVE_HP_S5', 'arith': 'ARITH_MULTI', 'value': 1.0}, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.0, + }, + ], + }, + { + 'level': 2, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.0829999446868896, + }, + ], + }, + { + 'level': 3, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.1649999618530273, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.1649999618530273, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.1660000085830688, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.1660000085830688, + }, + ], + }, + { + 'level': 4, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.2480000257492065, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.2480000257492065, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.25, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.25, + }, + ], + }, + { + 'level': 5, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.3300000429153442, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.3300000429153442, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.3329999446868896, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.3329999446868896, + }, + ], + }, + { + 'level': 6, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4129999876022339, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4129999876022339, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.4170000553131104, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.4170000553131104, + }, + ], + }, + { + 'level': 7, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4950000047683716, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.4950000047683716, + }, + {'type': 'GROW_CURVE_HP_S5', 'arith': 'ARITH_MULTI', 'value': 1.5}, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.5, + }, + ], + }, + { + 'level': 8, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.5779999494552612, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.5779999494552612, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.5839999914169312, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.5839999914169312, + }, + ], + }, + { + 'level': 9, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.6610000133514404, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.6610000133514404, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.6679999828338623, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.6679999828338623, + }, + ], + }, + { + 'level': 10, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.7430000305175781, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.7430000305175781, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.7510000467300415, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.7510000467300415, + }, + ], + }, + { + 'level': 11, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.8259999752044678, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.8259999752044678, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.8350000381469727, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.8350000381469727, + }, + ], + }, + { + 'level': 12, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9079999923706055, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9079999923706055, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.9190000295639038, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 1.9190000295639038, + }, + ], + }, + { + 'level': 13, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9910000562667847, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 1.9910000562667847, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.003000020980835, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.003000020980835, + }, + ], + }, + { + 'level': 14, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.072999954223633, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.072999954223633, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.0880000591278076, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.0880000591278076, + }, + ], + }, + { + 'level': 15, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.1559998989105225, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.1559998989105225, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.171999931335449, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.171999931335449, + }, + ], + }, + { + 'level': 16, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.239000082015991, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.239000082015991, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.25600004196167, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.25600004196167, + }, + ], + }, + { + 'level': 17, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.321000099182129, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.321000099182129, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.3410000801086426, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.3410000801086426, + }, + ], + }, + { + 'level': 18, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4040000438690186, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4040000438690186, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.424999952316284, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.424999952316284, + }, + ], + }, + { + 'level': 19, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4860000610351562, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.4860000610351562, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.509999990463257, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.509999990463257, + }, + ], + }, + { + 'level': 20, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.569000005722046, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.569000005722046, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.5940001010894775, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.5940001010894775, + }, + ], + }, + { + 'level': 21, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.6510000228881836, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.6510000228881836, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.678999900817871, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.678999900817871, + }, + ], + }, + { + 'level': 22, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.7339999675750732, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.7339999675750732, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.7639999389648438, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.7639999389648438, + }, + ], + }, + { + 'level': 23, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.816999912261963, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.816999912261963, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.8489999771118164, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.8489999771118164, + }, + ], + }, + { + 'level': 24, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.8989999294281006, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.8989999294281006, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.934000015258789, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 2.934000015258789, + }, + ], + }, + { + 'level': 25, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.9820001125335693, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 2.9820001125335693, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.0190000534057617, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.0190000534057617, + }, + ], + }, + { + 'level': 26, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.063999891281128, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.063999891281128, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.1050000190734863, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.1050000190734863, + }, + ], + }, + { + 'level': 27, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.1470000743865967, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.1470000743865967, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.190000057220459, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.190000057220459, + }, + ], + }, + { + 'level': 28, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.2290000915527344, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.2290000915527344, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.2750000953674316, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.2750000953674316, + }, + ], + }, + { + 'level': 29, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.312000036239624, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.312000036239624, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.3610000610351562, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.3610000610351562, + }, + ], + }, + { + 'level': 30, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.3940000534057617, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.3940000534057617, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.446000099182129, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.446000099182129, + }, + ], + }, + { + 'level': 31, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.4769999980926514, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.4769999980926514, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.5320000648498535, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.5320000648498535, + }, + ], + }, + { + 'level': 32, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.559999942779541, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.559999942779541, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.618000030517578, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.618000030517578, + }, + ], + }, + { + 'level': 33, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.6419999599456787, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.6419999599456787, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7039999961853027, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7039999961853027, + }, + ], + }, + { + 'level': 34, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.7249999046325684, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.7249999046325684, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7890000343322754, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.7890000343322754, + }, + ], + }, + { + 'level': 35, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.806999921798706, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.806999921798706, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.875, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.875, + }, + ], + }, + { + 'level': 36, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.890000104904175, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.890000104904175, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.9619998931884766, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 3.9619998931884766, + }, + ], + }, + { + 'level': 37, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.9719998836517334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 3.9719998836517334, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.047999858856201, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.047999858856201, + }, + ], + }, + { + 'level': 38, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.054999828338623, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.054999828338623, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.133999824523926, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.133999824523926, + }, + ], + }, + { + 'level': 39, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.138000011444092, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.138000011444092, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + ], + }, + { + 'level': 40, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.21999979019165, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.307000160217285, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.307000160217285, + }, + ], + }, + { + 'level': 41, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.302999973297119, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.302999973297119, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.39300012588501, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.39300012588501, + }, + ], + }, + { + 'level': 42, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.385000228881836, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.385000228881836, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.480000019073486, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.480000019073486, + }, + ], + }, + { + 'level': 43, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.4679999351501465, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.4679999351501465, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.566999912261963, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.566999912261963, + }, + ], + }, + { + 'level': 44, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.550000190734863, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.550000190734863, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.6529998779296875, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.6529998779296875, + }, + ], + }, + { + 'level': 45, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.632999897003174, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.632999897003174, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.739999771118164, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.739999771118164, + }, + ], + }, + { + 'level': 46, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.716000080108643, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.716000080108643, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.827000141143799, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.827000141143799, + }, + ], + }, + { + 'level': 47, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.797999858856201, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.797999858856201, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.914000034332275, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 4.914000034332275, + }, + ], + }, + { + 'level': 48, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.88100004196167, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.88100004196167, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.000999927520752, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.000999927520752, + }, + ], + }, + { + 'level': 49, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.9629998207092285, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 4.9629998207092285, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.089000225067139, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.089000225067139, + }, + ], + }, + { + 'level': 50, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.046000003814697, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.046000003814697, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.176000118255615, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.176000118255615, + }, + ], + }, + { + 'level': 51, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.127999782562256, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.127999782562256, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.263000011444092, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.263000011444092, + }, + ], + }, + { + 'level': 52, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.210999965667725, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.210999965667725, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.35099983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.35099983215332, + }, + ], + }, + { + 'level': 53, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.294000148773193, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.294000148773193, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.438000202178955, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.438000202178955, + }, + ], + }, + { + 'level': 54, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.375999927520752, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.375999927520752, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.526000022888184, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.526000022888184, + }, + ], + }, + { + 'level': 55, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.459000110626221, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.459000110626221, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.613999843597412, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.613999843597412, + }, + ], + }, + { + 'level': 56, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.540999889373779, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.540999889373779, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.702000141143799, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.702000141143799, + }, + ], + }, + { + 'level': 57, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.624000072479248, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.624000072479248, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.789999961853027, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.789999961853027, + }, + ], + }, + { + 'level': 58, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.705999851226807, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.705999851226807, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.877999782562256, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.877999782562256, + }, + ], + }, + { + 'level': 59, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.789000034332275, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.789000034332275, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.966000080108643, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 5.966000080108643, + }, + ], + }, + { + 'level': 60, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.872000217437744, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.872000217437744, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.053999900817871, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.053999900817871, + }, + ], + }, + { + 'level': 61, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.953999996185303, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 5.953999996185303, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.142000198364258, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.142000198364258, + }, + ], + }, + { + 'level': 62, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.0370001792907715, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.0370001792907715, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.230000019073486, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.230000019073486, + }, + ], + }, + { + 'level': 63, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.11899995803833, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.11899995803833, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.318999767303467, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.318999767303467, + }, + ], + }, + { + 'level': 64, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.202000141143799, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.202000141143799, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.4070000648498535, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.4070000648498535, + }, + ], + }, + { + 'level': 65, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.283999919891357, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.283999919891357, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.495999813079834, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.495999813079834, + }, + ], + }, + { + 'level': 66, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.367000102996826, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.367000102996826, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.585000038146973, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.585000038146973, + }, + ], + }, + { + 'level': 67, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.449999809265137, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.449999809265137, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.672999858856201, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.672999858856201, + }, + ], + }, + { + 'level': 68, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.5320000648498535, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.5320000648498535, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.76200008392334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.76200008392334, + }, + ], + }, + { + 'level': 69, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.614999771118164, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.614999771118164, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.85099983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.85099983215332, + }, + ], + }, + { + 'level': 70, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.697000026702881, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.697000026702881, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.940000057220459, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 6.940000057220459, + }, + ], + }, + { + 'level': 71, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.78000020980835, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.78000020980835, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.0289998054504395, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.0289998054504395, + }, + ], + }, + { + 'level': 72, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.861999988555908, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.861999988555908, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.11899995803833, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.11899995803833, + }, + ], + }, + { + 'level': 73, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.945000171661377, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 6.945000171661377, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.208000183105469, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.208000183105469, + }, + ], + }, + { + 'level': 74, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.0279998779296875, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.0279998779296875, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.296999931335449, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.296999931335449, + }, + ], + }, + { + 'level': 75, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.110000133514404, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.110000133514404, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.38700008392334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.38700008392334, + }, + ], + }, + { + 'level': 76, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.192999839782715, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.192999839782715, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.47599983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.47599983215332, + }, + ], + }, + { + 'level': 77, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.275000095367432, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.275000095367432, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.565999984741211, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.565999984741211, + }, + ], + }, + { + 'level': 78, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.357999801635742, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.357999801635742, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.656000137329102, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.656000137329102, + }, + ], + }, + { + 'level': 79, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.440000057220459, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.440000057220459, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.745999813079834, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.745999813079834, + }, + ], + }, + { + 'level': 80, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.5229997634887695, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.5229997634887695, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.835999965667725, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.835999965667725, + }, + ], + }, + { + 'level': 81, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.605999946594238, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.605999946594238, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.926000118255615, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 7.926000118255615, + }, + ], + }, + { + 'level': 82, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.688000202178955, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.688000202178955, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.015999794006348, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.015999794006348, + }, + ], + }, + { + 'level': 83, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.770999908447266, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.770999908447266, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.105999946594238, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.105999946594238, + }, + ], + }, + { + 'level': 84, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.853000164031982, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.853000164031982, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.196000099182129, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.196000099182129, + }, + ], + }, + { + 'level': 85, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.935999870300293, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 7.935999870300293, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.28600025177002, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.28600025177002, + }, + ], + }, + { + 'level': 86, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.017999649047852, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.017999649047852, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.376999855041504, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.376999855041504, + }, + ], + }, + { + 'level': 87, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.10099983215332, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.10099983215332, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.467000007629395, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.467000007629395, + }, + ], + }, + { + 'level': 88, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.182999610900879, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.182999610900879, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.557999610900879, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.557999610900879, + }, + ], + }, + { + 'level': 89, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.265999794006348, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.265999794006348, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.64900016784668, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.64900016784668, + }, + ], + }, + { + 'level': 90, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.348999977111816, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.348999977111816, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.73900032043457, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.73900032043457, + }, + ], + }, + { + 'level': 91, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.430999755859375, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.430999755859375, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.829999923706055, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.829999923706055, + }, + ], + }, + { + 'level': 92, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.513999938964844, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.513999938964844, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.920999526977539, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 8.920999526977539, + }, + ], + }, + { + 'level': 93, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.595999717712402, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.595999717712402, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.01200008392334, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.01200008392334, + }, + ], + }, + { + 'level': 94, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.678999900817871, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.678999900817871, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.102999687194824, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.102999687194824, + }, + ], + }, + { + 'level': 95, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.76099967956543, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.76099967956543, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.194999694824219, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.194999694824219, + }, + ], + }, + { + 'level': 96, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.843999862670898, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.843999862670898, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.28600025177002, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.28600025177002, + }, + ], + }, + { + 'level': 97, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.927000045776367, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 8.927000045776367, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.376999855041504, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.376999855041504, + }, + ], + }, + { + 'level': 98, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.008999824523926, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.008999824523926, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.468999862670898, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.468999862670898, + }, + ], + }, + { + 'level': 99, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.092000007629395, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.092000007629395, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.5600004196167, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.5600004196167, + }, + ], + }, + { + 'level': 100, + 'curveInfos': [ + { + 'type': 'GROW_CURVE_HP_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.173999786376953, + }, + { + 'type': 'GROW_CURVE_ATTACK_S4', + 'arith': 'ARITH_MULTI', + 'value': 9.173999786376953, + }, + { + 'type': 'GROW_CURVE_HP_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.652000427246094, + }, + { + 'type': 'GROW_CURVE_ATTACK_S5', + 'arith': 'ARITH_MULTI', + 'value': 9.652000427246094, + }, + ], + }, +] + +WEAPON_GROW_CURVE = { + "1": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1, + "GROW_CURVE_ATTACK_102": 1, + "GROW_CURVE_ATTACK_103": 1, + "GROW_CURVE_ATTACK_104": 1, + "GROW_CURVE_ATTACK_105": 1, + "GROW_CURVE_CRITICAL_101": 1, + "GROW_CURVE_ATTACK_201": 1, + "GROW_CURVE_ATTACK_202": 1, + "GROW_CURVE_ATTACK_203": 1, + "GROW_CURVE_ATTACK_204": 1, + "GROW_CURVE_ATTACK_205": 1, + "GROW_CURVE_CRITICAL_201": 1, + "GROW_CURVE_ATTACK_301": 1, + "GROW_CURVE_ATTACK_302": 1, + "GROW_CURVE_ATTACK_303": 1, + "GROW_CURVE_ATTACK_304": 1, + "GROW_CURVE_ATTACK_305": 1, + "GROW_CURVE_CRITICAL_301": 1, + } + }, + "2": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.076, + "GROW_CURVE_ATTACK_102": 1.081, + "GROW_CURVE_ATTACK_103": 1.086, + "GROW_CURVE_ATTACK_104": 1.071, + "GROW_CURVE_ATTACK_105": 1.065, + "GROW_CURVE_CRITICAL_101": 1, + "GROW_CURVE_ATTACK_201": 1.083, + "GROW_CURVE_ATTACK_202": 1.088, + "GROW_CURVE_ATTACK_203": 1.093, + "GROW_CURVE_ATTACK_204": 1.077, + "GROW_CURVE_ATTACK_205": 1.071, + "GROW_CURVE_CRITICAL_201": 1, + "GROW_CURVE_ATTACK_301": 1.086, + "GROW_CURVE_ATTACK_302": 1.091, + "GROW_CURVE_ATTACK_303": 1.097, + "GROW_CURVE_ATTACK_304": 1.079, + "GROW_CURVE_ATTACK_305": 1.073, + "GROW_CURVE_CRITICAL_301": 1, + } + }, + "3": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.152, + "GROW_CURVE_ATTACK_102": 1.162, + "GROW_CURVE_ATTACK_103": 1.172, + "GROW_CURVE_ATTACK_104": 1.141, + "GROW_CURVE_ATTACK_105": 1.129, + "GROW_CURVE_CRITICAL_101": 1, + "GROW_CURVE_ATTACK_201": 1.165, + "GROW_CURVE_ATTACK_202": 1.176, + "GROW_CURVE_ATTACK_203": 1.186, + "GROW_CURVE_ATTACK_204": 1.154, + "GROW_CURVE_ATTACK_205": 1.141, + "GROW_CURVE_CRITICAL_201": 1, + "GROW_CURVE_ATTACK_301": 1.171, + "GROW_CURVE_ATTACK_302": 1.183, + "GROW_CURVE_ATTACK_303": 1.194, + "GROW_CURVE_ATTACK_304": 1.159, + "GROW_CURVE_ATTACK_305": 1.145, + "GROW_CURVE_CRITICAL_301": 1, + } + }, + "4": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.228, + "GROW_CURVE_ATTACK_102": 1.244, + "GROW_CURVE_ATTACK_103": 1.259, + "GROW_CURVE_ATTACK_104": 1.211, + "GROW_CURVE_ATTACK_105": 1.193, + "GROW_CURVE_CRITICAL_101": 1, + "GROW_CURVE_ATTACK_201": 1.248, + "GROW_CURVE_ATTACK_202": 1.264, + "GROW_CURVE_ATTACK_203": 1.28, + "GROW_CURVE_ATTACK_204": 1.23, + "GROW_CURVE_ATTACK_205": 1.211, + "GROW_CURVE_CRITICAL_201": 1, + "GROW_CURVE_ATTACK_301": 1.257, + "GROW_CURVE_ATTACK_302": 1.275, + "GROW_CURVE_ATTACK_303": 1.292, + "GROW_CURVE_ATTACK_304": 1.238, + "GROW_CURVE_ATTACK_305": 1.217, + "GROW_CURVE_CRITICAL_301": 1, + } + }, + "5": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.303, + "GROW_CURVE_ATTACK_102": 1.325, + "GROW_CURVE_ATTACK_103": 1.346, + "GROW_CURVE_ATTACK_104": 1.28, + "GROW_CURVE_ATTACK_105": 1.255, + "GROW_CURVE_CRITICAL_101": 1.162, + "GROW_CURVE_ATTACK_201": 1.33, + "GROW_CURVE_ATTACK_202": 1.353, + "GROW_CURVE_ATTACK_203": 1.374, + "GROW_CURVE_ATTACK_204": 1.306, + "GROW_CURVE_ATTACK_205": 1.28, + "GROW_CURVE_CRITICAL_201": 1.162, + "GROW_CURVE_ATTACK_301": 1.343, + "GROW_CURVE_ATTACK_302": 1.368, + "GROW_CURVE_ATTACK_303": 1.391, + "GROW_CURVE_ATTACK_304": 1.317, + "GROW_CURVE_ATTACK_305": 1.288, + "GROW_CURVE_CRITICAL_301": 1.162, + } + }, + "6": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.379, + "GROW_CURVE_ATTACK_102": 1.407, + "GROW_CURVE_ATTACK_103": 1.433, + "GROW_CURVE_ATTACK_104": 1.349, + "GROW_CURVE_ATTACK_105": 1.317, + "GROW_CURVE_CRITICAL_101": 1.162, + "GROW_CURVE_ATTACK_201": 1.413, + "GROW_CURVE_ATTACK_202": 1.442, + "GROW_CURVE_ATTACK_203": 1.469, + "GROW_CURVE_ATTACK_204": 1.382, + "GROW_CURVE_ATTACK_205": 1.349, + "GROW_CURVE_CRITICAL_201": 1.162, + "GROW_CURVE_ATTACK_301": 1.429, + "GROW_CURVE_ATTACK_302": 1.461, + "GROW_CURVE_ATTACK_303": 1.49, + "GROW_CURVE_ATTACK_304": 1.395, + "GROW_CURVE_ATTACK_305": 1.359, + "GROW_CURVE_CRITICAL_301": 1.162, + } + }, + "7": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.454, + "GROW_CURVE_ATTACK_102": 1.489, + "GROW_CURVE_ATTACK_103": 1.521, + "GROW_CURVE_ATTACK_104": 1.417, + "GROW_CURVE_ATTACK_105": 1.379, + "GROW_CURVE_CRITICAL_101": 1.162, + "GROW_CURVE_ATTACK_201": 1.495, + "GROW_CURVE_ATTACK_202": 1.531, + "GROW_CURVE_ATTACK_203": 1.565, + "GROW_CURVE_ATTACK_204": 1.457, + "GROW_CURVE_ATTACK_205": 1.417, + "GROW_CURVE_CRITICAL_201": 1.162, + "GROW_CURVE_ATTACK_301": 1.516, + "GROW_CURVE_ATTACK_302": 1.554, + "GROW_CURVE_ATTACK_303": 1.591, + "GROW_CURVE_ATTACK_304": 1.474, + "GROW_CURVE_ATTACK_305": 1.429, + "GROW_CURVE_CRITICAL_301": 1.162, + } + }, + "8": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.529, + "GROW_CURVE_ATTACK_102": 1.57, + "GROW_CURVE_ATTACK_103": 1.609, + "GROW_CURVE_ATTACK_104": 1.486, + "GROW_CURVE_ATTACK_105": 1.439, + "GROW_CURVE_CRITICAL_101": 1.162, + "GROW_CURVE_ATTACK_201": 1.578, + "GROW_CURVE_ATTACK_202": 1.621, + "GROW_CURVE_ATTACK_203": 1.661, + "GROW_CURVE_ATTACK_204": 1.533, + "GROW_CURVE_ATTACK_205": 1.484, + "GROW_CURVE_CRITICAL_201": 1.162, + "GROW_CURVE_ATTACK_301": 1.602, + "GROW_CURVE_ATTACK_302": 1.648, + "GROW_CURVE_ATTACK_303": 1.692, + "GROW_CURVE_ATTACK_304": 1.552, + "GROW_CURVE_ATTACK_305": 1.499, + "GROW_CURVE_CRITICAL_301": 1.162, + } + }, + "9": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.604, + "GROW_CURVE_ATTACK_102": 1.652, + "GROW_CURVE_ATTACK_103": 1.698, + "GROW_CURVE_ATTACK_104": 1.553, + "GROW_CURVE_ATTACK_105": 1.499, + "GROW_CURVE_CRITICAL_101": 1.162, + "GROW_CURVE_ATTACK_201": 1.661, + "GROW_CURVE_ATTACK_202": 1.71, + "GROW_CURVE_ATTACK_203": 1.757, + "GROW_CURVE_ATTACK_204": 1.607, + "GROW_CURVE_ATTACK_205": 1.551, + "GROW_CURVE_CRITICAL_201": 1.162, + "GROW_CURVE_ATTACK_301": 1.689, + "GROW_CURVE_ATTACK_302": 1.743, + "GROW_CURVE_ATTACK_303": 1.793, + "GROW_CURVE_ATTACK_304": 1.631, + "GROW_CURVE_ATTACK_305": 1.568, + "GROW_CURVE_CRITICAL_301": 1.162, + } + }, + "10": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.679, + "GROW_CURVE_ATTACK_102": 1.734, + "GROW_CURVE_ATTACK_103": 1.786, + "GROW_CURVE_ATTACK_104": 1.621, + "GROW_CURVE_ATTACK_105": 1.558, + "GROW_CURVE_CRITICAL_101": 1.363, + "GROW_CURVE_ATTACK_201": 1.743, + "GROW_CURVE_ATTACK_202": 1.8, + "GROW_CURVE_ATTACK_203": 1.854, + "GROW_CURVE_ATTACK_204": 1.682, + "GROW_CURVE_ATTACK_205": 1.617, + "GROW_CURVE_CRITICAL_201": 1.363, + "GROW_CURVE_ATTACK_301": 1.775, + "GROW_CURVE_ATTACK_302": 1.837, + "GROW_CURVE_ATTACK_303": 1.895, + "GROW_CURVE_ATTACK_304": 1.709, + "GROW_CURVE_ATTACK_305": 1.637, + "GROW_CURVE_CRITICAL_301": 1.363, + } + }, + "11": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.754, + "GROW_CURVE_ATTACK_102": 1.816, + "GROW_CURVE_ATTACK_103": 1.875, + "GROW_CURVE_ATTACK_104": 1.688, + "GROW_CURVE_ATTACK_105": 1.617, + "GROW_CURVE_CRITICAL_101": 1.363, + "GROW_CURVE_ATTACK_201": 1.826, + "GROW_CURVE_ATTACK_202": 1.891, + "GROW_CURVE_ATTACK_203": 1.952, + "GROW_CURVE_ATTACK_204": 1.757, + "GROW_CURVE_ATTACK_205": 1.683, + "GROW_CURVE_CRITICAL_201": 1.363, + "GROW_CURVE_ATTACK_301": 1.862, + "GROW_CURVE_ATTACK_302": 1.933, + "GROW_CURVE_ATTACK_303": 1.998, + "GROW_CURVE_ATTACK_304": 1.787, + "GROW_CURVE_ATTACK_305": 1.706, + "GROW_CURVE_CRITICAL_301": 1.363, + } + }, + "12": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.828, + "GROW_CURVE_ATTACK_102": 1.898, + "GROW_CURVE_ATTACK_103": 1.965, + "GROW_CURVE_ATTACK_104": 1.754, + "GROW_CURVE_ATTACK_105": 1.675, + "GROW_CURVE_CRITICAL_101": 1.363, + "GROW_CURVE_ATTACK_201": 1.908, + "GROW_CURVE_ATTACK_202": 1.981, + "GROW_CURVE_ATTACK_203": 2.049, + "GROW_CURVE_ATTACK_204": 1.831, + "GROW_CURVE_ATTACK_205": 1.748, + "GROW_CURVE_CRITICAL_201": 1.363, + "GROW_CURVE_ATTACK_301": 1.949, + "GROW_CURVE_ATTACK_302": 2.028, + "GROW_CURVE_ATTACK_303": 2.102, + "GROW_CURVE_ATTACK_304": 1.865, + "GROW_CURVE_ATTACK_305": 1.774, + "GROW_CURVE_CRITICAL_301": 1.363, + } + }, + "13": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.903, + "GROW_CURVE_ATTACK_102": 1.981, + "GROW_CURVE_ATTACK_103": 2.054, + "GROW_CURVE_ATTACK_104": 1.82, + "GROW_CURVE_ATTACK_105": 1.733, + "GROW_CURVE_CRITICAL_101": 1.363, + "GROW_CURVE_ATTACK_201": 1.991, + "GROW_CURVE_ATTACK_202": 2.072, + "GROW_CURVE_ATTACK_203": 2.147, + "GROW_CURVE_ATTACK_204": 1.905, + "GROW_CURVE_ATTACK_205": 1.813, + "GROW_CURVE_CRITICAL_201": 1.363, + "GROW_CURVE_ATTACK_301": 2.036, + "GROW_CURVE_ATTACK_302": 2.124, + "GROW_CURVE_ATTACK_303": 2.206, + "GROW_CURVE_ATTACK_304": 1.942, + "GROW_CURVE_ATTACK_305": 1.841, + "GROW_CURVE_CRITICAL_301": 1.363, + } + }, + "14": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 1.977, + "GROW_CURVE_ATTACK_102": 2.063, + "GROW_CURVE_ATTACK_103": 2.144, + "GROW_CURVE_ATTACK_104": 1.886, + "GROW_CURVE_ATTACK_105": 1.79, + "GROW_CURVE_CRITICAL_101": 1.363, + "GROW_CURVE_ATTACK_201": 2.073, + "GROW_CURVE_ATTACK_202": 2.162, + "GROW_CURVE_ATTACK_203": 2.246, + "GROW_CURVE_ATTACK_204": 1.979, + "GROW_CURVE_ATTACK_205": 1.878, + "GROW_CURVE_CRITICAL_201": 1.363, + "GROW_CURVE_ATTACK_301": 2.124, + "GROW_CURVE_ATTACK_302": 2.22, + "GROW_CURVE_ATTACK_303": 2.31, + "GROW_CURVE_ATTACK_304": 2.02, + "GROW_CURVE_ATTACK_305": 1.909, + "GROW_CURVE_CRITICAL_301": 1.363, + } + }, + "15": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.051, + "GROW_CURVE_ATTACK_102": 2.145, + "GROW_CURVE_ATTACK_103": 2.234, + "GROW_CURVE_ATTACK_104": 1.952, + "GROW_CURVE_ATTACK_105": 1.846, + "GROW_CURVE_CRITICAL_101": 1.565, + "GROW_CURVE_ATTACK_201": 2.156, + "GROW_CURVE_ATTACK_202": 2.253, + "GROW_CURVE_ATTACK_203": 2.345, + "GROW_CURVE_ATTACK_204": 2.052, + "GROW_CURVE_ATTACK_205": 1.942, + "GROW_CURVE_CRITICAL_201": 1.565, + "GROW_CURVE_ATTACK_301": 2.211, + "GROW_CURVE_ATTACK_302": 2.317, + "GROW_CURVE_ATTACK_303": 2.415, + "GROW_CURVE_ATTACK_304": 2.098, + "GROW_CURVE_ATTACK_305": 1.976, + "GROW_CURVE_CRITICAL_301": 1.565, + } + }, + "16": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.125, + "GROW_CURVE_ATTACK_102": 2.227, + "GROW_CURVE_ATTACK_103": 2.324, + "GROW_CURVE_ATTACK_104": 2.017, + "GROW_CURVE_ATTACK_105": 1.902, + "GROW_CURVE_CRITICAL_101": 1.565, + "GROW_CURVE_ATTACK_201": 2.239, + "GROW_CURVE_ATTACK_202": 2.345, + "GROW_CURVE_ATTACK_203": 2.444, + "GROW_CURVE_ATTACK_204": 2.126, + "GROW_CURVE_ATTACK_205": 2.005, + "GROW_CURVE_CRITICAL_201": 1.565, + "GROW_CURVE_ATTACK_301": 2.299, + "GROW_CURVE_ATTACK_302": 2.414, + "GROW_CURVE_ATTACK_303": 2.521, + "GROW_CURVE_ATTACK_304": 2.175, + "GROW_CURVE_ATTACK_305": 2.043, + "GROW_CURVE_CRITICAL_301": 1.565, + } + }, + "17": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.199, + "GROW_CURVE_ATTACK_102": 2.31, + "GROW_CURVE_ATTACK_103": 2.414, + "GROW_CURVE_ATTACK_104": 2.082, + "GROW_CURVE_ATTACK_105": 1.958, + "GROW_CURVE_CRITICAL_101": 1.565, + "GROW_CURVE_ATTACK_201": 2.321, + "GROW_CURVE_ATTACK_202": 2.436, + "GROW_CURVE_ATTACK_203": 2.544, + "GROW_CURVE_ATTACK_204": 2.199, + "GROW_CURVE_ATTACK_205": 2.068, + "GROW_CURVE_CRITICAL_201": 1.565, + "GROW_CURVE_ATTACK_301": 2.386, + "GROW_CURVE_ATTACK_302": 2.511, + "GROW_CURVE_ATTACK_303": 2.627, + "GROW_CURVE_ATTACK_304": 2.253, + "GROW_CURVE_ATTACK_305": 2.109, + "GROW_CURVE_CRITICAL_301": 1.565, + } + }, + "18": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.273, + "GROW_CURVE_ATTACK_102": 2.392, + "GROW_CURVE_ATTACK_103": 2.505, + "GROW_CURVE_ATTACK_104": 2.147, + "GROW_CURVE_ATTACK_105": 2.013, + "GROW_CURVE_CRITICAL_101": 1.565, + "GROW_CURVE_ATTACK_201": 2.404, + "GROW_CURVE_ATTACK_202": 2.527, + "GROW_CURVE_ATTACK_203": 2.644, + "GROW_CURVE_ATTACK_204": 2.272, + "GROW_CURVE_ATTACK_205": 2.131, + "GROW_CURVE_CRITICAL_201": 1.565, + "GROW_CURVE_ATTACK_301": 2.474, + "GROW_CURVE_ATTACK_302": 2.608, + "GROW_CURVE_ATTACK_303": 2.734, + "GROW_CURVE_ATTACK_304": 2.33, + "GROW_CURVE_ATTACK_305": 2.175, + "GROW_CURVE_CRITICAL_301": 1.565, + } + }, + "19": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.347, + "GROW_CURVE_ATTACK_102": 2.474, + "GROW_CURVE_ATTACK_103": 2.595, + "GROW_CURVE_ATTACK_104": 2.211, + "GROW_CURVE_ATTACK_105": 2.067, + "GROW_CURVE_CRITICAL_101": 1.565, + "GROW_CURVE_ATTACK_201": 2.486, + "GROW_CURVE_ATTACK_202": 2.619, + "GROW_CURVE_ATTACK_203": 2.744, + "GROW_CURVE_ATTACK_204": 2.345, + "GROW_CURVE_ATTACK_205": 2.194, + "GROW_CURVE_CRITICAL_201": 1.565, + "GROW_CURVE_ATTACK_301": 2.562, + "GROW_CURVE_ATTACK_302": 2.706, + "GROW_CURVE_ATTACK_303": 2.841, + "GROW_CURVE_ATTACK_304": 2.408, + "GROW_CURVE_ATTACK_305": 2.241, + "GROW_CURVE_CRITICAL_301": 1.565, + } + }, + "20": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.42, + "GROW_CURVE_ATTACK_102": 2.557, + "GROW_CURVE_ATTACK_103": 2.686, + "GROW_CURVE_ATTACK_104": 2.275, + "GROW_CURVE_ATTACK_105": 2.121, + "GROW_CURVE_CRITICAL_101": 1.767, + "GROW_CURVE_ATTACK_201": 2.569, + "GROW_CURVE_ATTACK_202": 2.711, + "GROW_CURVE_ATTACK_203": 2.845, + "GROW_CURVE_ATTACK_204": 2.417, + "GROW_CURVE_ATTACK_205": 2.256, + "GROW_CURVE_CRITICAL_201": 1.767, + "GROW_CURVE_ATTACK_301": 2.65, + "GROW_CURVE_ATTACK_302": 2.804, + "GROW_CURVE_ATTACK_303": 2.949, + "GROW_CURVE_ATTACK_304": 2.485, + "GROW_CURVE_ATTACK_305": 2.307, + "GROW_CURVE_CRITICAL_301": 1.767, + } + }, + "21": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.493, + "GROW_CURVE_ATTACK_102": 2.639, + "GROW_CURVE_ATTACK_103": 2.777, + "GROW_CURVE_ATTACK_104": 2.339, + "GROW_CURVE_ATTACK_105": 2.175, + "GROW_CURVE_CRITICAL_101": 1.767, + "GROW_CURVE_ATTACK_201": 2.651, + "GROW_CURVE_ATTACK_202": 2.803, + "GROW_CURVE_ATTACK_203": 2.946, + "GROW_CURVE_ATTACK_204": 2.49, + "GROW_CURVE_ATTACK_205": 2.318, + "GROW_CURVE_CRITICAL_201": 1.767, + "GROW_CURVE_ATTACK_301": 2.738, + "GROW_CURVE_ATTACK_302": 2.903, + "GROW_CURVE_ATTACK_303": 3.057, + "GROW_CURVE_ATTACK_304": 2.562, + "GROW_CURVE_ATTACK_305": 2.373, + "GROW_CURVE_CRITICAL_301": 1.767, + } + }, + "22": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.567, + "GROW_CURVE_ATTACK_102": 2.722, + "GROW_CURVE_ATTACK_103": 2.868, + "GROW_CURVE_ATTACK_104": 2.402, + "GROW_CURVE_ATTACK_105": 2.228, + "GROW_CURVE_CRITICAL_101": 1.767, + "GROW_CURVE_ATTACK_201": 2.734, + "GROW_CURVE_ATTACK_202": 2.895, + "GROW_CURVE_ATTACK_203": 3.047, + "GROW_CURVE_ATTACK_204": 2.562, + "GROW_CURVE_ATTACK_205": 2.379, + "GROW_CURVE_CRITICAL_201": 1.767, + "GROW_CURVE_ATTACK_301": 2.827, + "GROW_CURVE_ATTACK_302": 3.002, + "GROW_CURVE_ATTACK_303": 3.165, + "GROW_CURVE_ATTACK_304": 2.639, + "GROW_CURVE_ATTACK_305": 2.438, + "GROW_CURVE_CRITICAL_301": 1.767, + } + }, + "23": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.64, + "GROW_CURVE_ATTACK_102": 2.804, + "GROW_CURVE_ATTACK_103": 2.96, + "GROW_CURVE_ATTACK_104": 2.466, + "GROW_CURVE_ATTACK_105": 2.28, + "GROW_CURVE_CRITICAL_101": 1.767, + "GROW_CURVE_ATTACK_201": 2.817, + "GROW_CURVE_ATTACK_202": 2.987, + "GROW_CURVE_ATTACK_203": 3.148, + "GROW_CURVE_ATTACK_204": 2.634, + "GROW_CURVE_ATTACK_205": 2.44, + "GROW_CURVE_CRITICAL_201": 1.767, + "GROW_CURVE_ATTACK_301": 2.915, + "GROW_CURVE_ATTACK_302": 3.101, + "GROW_CURVE_ATTACK_303": 3.274, + "GROW_CURVE_ATTACK_304": 2.717, + "GROW_CURVE_ATTACK_305": 2.503, + "GROW_CURVE_CRITICAL_301": 1.767, + } + }, + "24": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.713, + "GROW_CURVE_ATTACK_102": 2.887, + "GROW_CURVE_ATTACK_103": 3.051, + "GROW_CURVE_ATTACK_104": 2.529, + "GROW_CURVE_ATTACK_105": 2.333, + "GROW_CURVE_CRITICAL_101": 1.767, + "GROW_CURVE_ATTACK_201": 2.899, + "GROW_CURVE_ATTACK_202": 3.08, + "GROW_CURVE_ATTACK_203": 3.25, + "GROW_CURVE_ATTACK_204": 2.707, + "GROW_CURVE_ATTACK_205": 2.501, + "GROW_CURVE_CRITICAL_201": 1.767, + "GROW_CURVE_ATTACK_301": 3.004, + "GROW_CURVE_ATTACK_302": 3.2, + "GROW_CURVE_ATTACK_303": 3.384, + "GROW_CURVE_ATTACK_304": 2.794, + "GROW_CURVE_ATTACK_305": 2.568, + "GROW_CURVE_CRITICAL_301": 1.767, + } + }, + "25": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.786, + "GROW_CURVE_ATTACK_102": 2.969, + "GROW_CURVE_ATTACK_103": 3.143, + "GROW_CURVE_ATTACK_104": 2.591, + "GROW_CURVE_ATTACK_105": 2.385, + "GROW_CURVE_CRITICAL_101": 1.969, + "GROW_CURVE_ATTACK_201": 2.982, + "GROW_CURVE_ATTACK_202": 3.172, + "GROW_CURVE_ATTACK_203": 3.352, + "GROW_CURVE_ATTACK_204": 2.778, + "GROW_CURVE_ATTACK_205": 2.562, + "GROW_CURVE_CRITICAL_201": 1.969, + "GROW_CURVE_ATTACK_301": 3.093, + "GROW_CURVE_ATTACK_302": 3.3, + "GROW_CURVE_ATTACK_303": 3.493, + "GROW_CURVE_ATTACK_304": 2.871, + "GROW_CURVE_ATTACK_305": 2.633, + "GROW_CURVE_CRITICAL_301": 1.969, + } + }, + "26": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.859, + "GROW_CURVE_ATTACK_102": 3.052, + "GROW_CURVE_ATTACK_103": 3.234, + "GROW_CURVE_ATTACK_104": 2.654, + "GROW_CURVE_ATTACK_105": 2.436, + "GROW_CURVE_CRITICAL_101": 1.969, + "GROW_CURVE_ATTACK_201": 3.064, + "GROW_CURVE_ATTACK_202": 3.265, + "GROW_CURVE_ATTACK_203": 3.454, + "GROW_CURVE_ATTACK_204": 2.85, + "GROW_CURVE_ATTACK_205": 2.622, + "GROW_CURVE_CRITICAL_201": 1.969, + "GROW_CURVE_ATTACK_301": 3.182, + "GROW_CURVE_ATTACK_302": 3.4, + "GROW_CURVE_ATTACK_303": 3.604, + "GROW_CURVE_ATTACK_304": 2.948, + "GROW_CURVE_ATTACK_305": 2.697, + "GROW_CURVE_CRITICAL_301": 1.969, + } + }, + "27": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 2.931, + "GROW_CURVE_ATTACK_102": 3.134, + "GROW_CURVE_ATTACK_103": 3.326, + "GROW_CURVE_ATTACK_104": 2.716, + "GROW_CURVE_ATTACK_105": 2.487, + "GROW_CURVE_CRITICAL_101": 1.969, + "GROW_CURVE_ATTACK_201": 3.147, + "GROW_CURVE_ATTACK_202": 3.358, + "GROW_CURVE_ATTACK_203": 3.557, + "GROW_CURVE_ATTACK_204": 2.922, + "GROW_CURVE_ATTACK_205": 2.682, + "GROW_CURVE_CRITICAL_201": 1.969, + "GROW_CURVE_ATTACK_301": 3.271, + "GROW_CURVE_ATTACK_302": 3.5, + "GROW_CURVE_ATTACK_303": 3.714, + "GROW_CURVE_ATTACK_304": 3.026, + "GROW_CURVE_ATTACK_305": 2.762, + "GROW_CURVE_CRITICAL_301": 1.969, + } + }, + "28": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.004, + "GROW_CURVE_ATTACK_102": 3.217, + "GROW_CURVE_ATTACK_103": 3.418, + "GROW_CURVE_ATTACK_104": 2.778, + "GROW_CURVE_ATTACK_105": 2.538, + "GROW_CURVE_CRITICAL_101": 1.969, + "GROW_CURVE_ATTACK_201": 3.229, + "GROW_CURVE_ATTACK_202": 3.451, + "GROW_CURVE_ATTACK_203": 3.66, + "GROW_CURVE_ATTACK_204": 2.993, + "GROW_CURVE_ATTACK_205": 2.741, + "GROW_CURVE_CRITICAL_201": 1.969, + "GROW_CURVE_ATTACK_301": 3.36, + "GROW_CURVE_ATTACK_302": 3.601, + "GROW_CURVE_ATTACK_303": 3.825, + "GROW_CURVE_ATTACK_304": 3.103, + "GROW_CURVE_ATTACK_305": 2.826, + "GROW_CURVE_CRITICAL_301": 1.969, + } + }, + "29": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.076, + "GROW_CURVE_ATTACK_102": 3.299, + "GROW_CURVE_ATTACK_103": 3.51, + "GROW_CURVE_ATTACK_104": 2.84, + "GROW_CURVE_ATTACK_105": 2.588, + "GROW_CURVE_CRITICAL_101": 1.969, + "GROW_CURVE_ATTACK_201": 3.312, + "GROW_CURVE_ATTACK_202": 3.544, + "GROW_CURVE_ATTACK_203": 3.762, + "GROW_CURVE_ATTACK_204": 3.065, + "GROW_CURVE_ATTACK_205": 2.801, + "GROW_CURVE_CRITICAL_201": 1.969, + "GROW_CURVE_ATTACK_301": 3.45, + "GROW_CURVE_ATTACK_302": 3.701, + "GROW_CURVE_ATTACK_303": 3.937, + "GROW_CURVE_ATTACK_304": 3.18, + "GROW_CURVE_ATTACK_305": 2.89, + "GROW_CURVE_CRITICAL_301": 1.969, + } + }, + "30": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.148, + "GROW_CURVE_ATTACK_102": 3.382, + "GROW_CURVE_ATTACK_103": 3.602, + "GROW_CURVE_ATTACK_104": 2.901, + "GROW_CURVE_ATTACK_105": 2.638, + "GROW_CURVE_CRITICAL_101": 2.171, + "GROW_CURVE_ATTACK_201": 3.394, + "GROW_CURVE_ATTACK_202": 3.637, + "GROW_CURVE_ATTACK_203": 3.866, + "GROW_CURVE_ATTACK_204": 3.136, + "GROW_CURVE_ATTACK_205": 2.86, + "GROW_CURVE_CRITICAL_201": 2.171, + "GROW_CURVE_ATTACK_301": 3.539, + "GROW_CURVE_ATTACK_302": 3.803, + "GROW_CURVE_ATTACK_303": 4.049, + "GROW_CURVE_ATTACK_304": 3.257, + "GROW_CURVE_ATTACK_305": 2.954, + "GROW_CURVE_CRITICAL_301": 2.171, + } + }, + "31": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.221, + "GROW_CURVE_ATTACK_102": 3.464, + "GROW_CURVE_ATTACK_103": 3.694, + "GROW_CURVE_ATTACK_104": 2.962, + "GROW_CURVE_ATTACK_105": 2.688, + "GROW_CURVE_CRITICAL_101": 2.171, + "GROW_CURVE_ATTACK_201": 3.477, + "GROW_CURVE_ATTACK_202": 3.731, + "GROW_CURVE_ATTACK_203": 3.969, + "GROW_CURVE_ATTACK_204": 3.207, + "GROW_CURVE_ATTACK_205": 2.919, + "GROW_CURVE_CRITICAL_201": 2.171, + "GROW_CURVE_ATTACK_301": 3.629, + "GROW_CURVE_ATTACK_302": 3.904, + "GROW_CURVE_ATTACK_303": 4.161, + "GROW_CURVE_ATTACK_304": 3.334, + "GROW_CURVE_ATTACK_305": 3.018, + "GROW_CURVE_CRITICAL_301": 2.171, + } + }, + "32": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.293, + "GROW_CURVE_ATTACK_102": 3.547, + "GROW_CURVE_ATTACK_103": 3.787, + "GROW_CURVE_ATTACK_104": 3.023, + "GROW_CURVE_ATTACK_105": 2.737, + "GROW_CURVE_CRITICAL_101": 2.171, + "GROW_CURVE_ATTACK_201": 3.56, + "GROW_CURVE_ATTACK_202": 3.824, + "GROW_CURVE_ATTACK_203": 4.073, + "GROW_CURVE_ATTACK_204": 3.278, + "GROW_CURVE_ATTACK_205": 2.978, + "GROW_CURVE_CRITICAL_201": 2.171, + "GROW_CURVE_ATTACK_301": 3.719, + "GROW_CURVE_ATTACK_302": 4.005, + "GROW_CURVE_ATTACK_303": 4.273, + "GROW_CURVE_ATTACK_304": 3.412, + "GROW_CURVE_ATTACK_305": 3.082, + "GROW_CURVE_CRITICAL_301": 2.171, + } + }, + "33": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.365, + "GROW_CURVE_ATTACK_102": 3.629, + "GROW_CURVE_ATTACK_103": 3.879, + "GROW_CURVE_ATTACK_104": 3.084, + "GROW_CURVE_ATTACK_105": 2.786, + "GROW_CURVE_CRITICAL_101": 2.171, + "GROW_CURVE_ATTACK_201": 3.642, + "GROW_CURVE_ATTACK_202": 3.918, + "GROW_CURVE_ATTACK_203": 4.177, + "GROW_CURVE_ATTACK_204": 3.349, + "GROW_CURVE_ATTACK_205": 3.036, + "GROW_CURVE_CRITICAL_201": 2.171, + "GROW_CURVE_ATTACK_301": 3.809, + "GROW_CURVE_ATTACK_302": 4.107, + "GROW_CURVE_ATTACK_303": 4.386, + "GROW_CURVE_ATTACK_304": 3.489, + "GROW_CURVE_ATTACK_305": 3.145, + "GROW_CURVE_CRITICAL_301": 2.171, + } + }, + "34": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.437, + "GROW_CURVE_ATTACK_102": 3.712, + "GROW_CURVE_ATTACK_103": 3.972, + "GROW_CURVE_ATTACK_104": 3.145, + "GROW_CURVE_ATTACK_105": 2.835, + "GROW_CURVE_CRITICAL_101": 2.171, + "GROW_CURVE_ATTACK_201": 3.725, + "GROW_CURVE_ATTACK_202": 4.011, + "GROW_CURVE_ATTACK_203": 4.281, + "GROW_CURVE_ATTACK_204": 3.42, + "GROW_CURVE_ATTACK_205": 3.094, + "GROW_CURVE_CRITICAL_201": 2.171, + "GROW_CURVE_ATTACK_301": 3.899, + "GROW_CURVE_ATTACK_302": 4.209, + "GROW_CURVE_ATTACK_303": 4.499, + "GROW_CURVE_ATTACK_304": 3.566, + "GROW_CURVE_ATTACK_305": 3.209, + "GROW_CURVE_CRITICAL_301": 2.171, + } + }, + "35": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.508, + "GROW_CURVE_ATTACK_102": 3.794, + "GROW_CURVE_ATTACK_103": 4.064, + "GROW_CURVE_ATTACK_104": 3.205, + "GROW_CURVE_ATTACK_105": 2.883, + "GROW_CURVE_CRITICAL_101": 2.373, + "GROW_CURVE_ATTACK_201": 3.807, + "GROW_CURVE_ATTACK_202": 4.105, + "GROW_CURVE_ATTACK_203": 4.385, + "GROW_CURVE_ATTACK_204": 3.49, + "GROW_CURVE_ATTACK_205": 3.152, + "GROW_CURVE_CRITICAL_201": 2.373, + "GROW_CURVE_ATTACK_301": 3.989, + "GROW_CURVE_ATTACK_302": 4.312, + "GROW_CURVE_ATTACK_303": 4.613, + "GROW_CURVE_ATTACK_304": 3.644, + "GROW_CURVE_ATTACK_305": 3.272, + "GROW_CURVE_CRITICAL_301": 2.373, + } + }, + "36": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.58, + "GROW_CURVE_ATTACK_102": 3.877, + "GROW_CURVE_ATTACK_103": 4.157, + "GROW_CURVE_ATTACK_104": 3.265, + "GROW_CURVE_ATTACK_105": 2.931, + "GROW_CURVE_CRITICAL_101": 2.373, + "GROW_CURVE_ATTACK_201": 3.89, + "GROW_CURVE_ATTACK_202": 4.199, + "GROW_CURVE_ATTACK_203": 4.489, + "GROW_CURVE_ATTACK_204": 3.561, + "GROW_CURVE_ATTACK_205": 3.21, + "GROW_CURVE_CRITICAL_201": 2.373, + "GROW_CURVE_ATTACK_301": 4.08, + "GROW_CURVE_ATTACK_302": 4.414, + "GROW_CURVE_ATTACK_303": 4.727, + "GROW_CURVE_ATTACK_304": 3.721, + "GROW_CURVE_ATTACK_305": 3.336, + "GROW_CURVE_CRITICAL_301": 2.373, + } + }, + "37": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.652, + "GROW_CURVE_ATTACK_102": 3.959, + "GROW_CURVE_ATTACK_103": 4.25, + "GROW_CURVE_ATTACK_104": 3.325, + "GROW_CURVE_ATTACK_105": 2.979, + "GROW_CURVE_CRITICAL_101": 2.373, + "GROW_CURVE_ATTACK_201": 3.972, + "GROW_CURVE_ATTACK_202": 4.293, + "GROW_CURVE_ATTACK_203": 4.594, + "GROW_CURVE_ATTACK_204": 3.632, + "GROW_CURVE_ATTACK_205": 3.268, + "GROW_CURVE_CRITICAL_201": 2.373, + "GROW_CURVE_ATTACK_301": 4.17, + "GROW_CURVE_ATTACK_302": 4.517, + "GROW_CURVE_ATTACK_303": 4.841, + "GROW_CURVE_ATTACK_304": 3.798, + "GROW_CURVE_ATTACK_305": 3.399, + "GROW_CURVE_CRITICAL_301": 2.373, + } + }, + "38": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.723, + "GROW_CURVE_ATTACK_102": 4.042, + "GROW_CURVE_ATTACK_103": 4.342, + "GROW_CURVE_ATTACK_104": 3.385, + "GROW_CURVE_ATTACK_105": 3.027, + "GROW_CURVE_CRITICAL_101": 2.373, + "GROW_CURVE_ATTACK_201": 4.055, + "GROW_CURVE_ATTACK_202": 4.387, + "GROW_CURVE_ATTACK_203": 4.699, + "GROW_CURVE_ATTACK_204": 3.702, + "GROW_CURVE_ATTACK_205": 3.325, + "GROW_CURVE_CRITICAL_201": 2.373, + "GROW_CURVE_ATTACK_301": 4.261, + "GROW_CURVE_ATTACK_302": 4.62, + "GROW_CURVE_ATTACK_303": 4.956, + "GROW_CURVE_ATTACK_304": 3.876, + "GROW_CURVE_ATTACK_305": 3.462, + "GROW_CURVE_CRITICAL_301": 2.373, + } + }, + "39": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.794, + "GROW_CURVE_ATTACK_102": 4.124, + "GROW_CURVE_ATTACK_103": 4.435, + "GROW_CURVE_ATTACK_104": 3.445, + "GROW_CURVE_ATTACK_105": 3.074, + "GROW_CURVE_CRITICAL_101": 2.373, + "GROW_CURVE_ATTACK_201": 4.138, + "GROW_CURVE_ATTACK_202": 4.481, + "GROW_CURVE_ATTACK_203": 4.803, + "GROW_CURVE_ATTACK_204": 3.772, + "GROW_CURVE_ATTACK_205": 3.382, + "GROW_CURVE_CRITICAL_201": 2.373, + "GROW_CURVE_ATTACK_301": 4.352, + "GROW_CURVE_ATTACK_302": 4.723, + "GROW_CURVE_ATTACK_303": 5.071, + "GROW_CURVE_ATTACK_304": 3.953, + "GROW_CURVE_ATTACK_305": 3.525, + "GROW_CURVE_CRITICAL_301": 2.373, + } + }, + "40": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.866, + "GROW_CURVE_ATTACK_102": 4.206, + "GROW_CURVE_ATTACK_103": 4.528, + "GROW_CURVE_ATTACK_104": 3.504, + "GROW_CURVE_ATTACK_105": 3.121, + "GROW_CURVE_CRITICAL_101": 2.575, + "GROW_CURVE_ATTACK_201": 4.22, + "GROW_CURVE_ATTACK_202": 4.575, + "GROW_CURVE_ATTACK_203": 4.909, + "GROW_CURVE_ATTACK_204": 3.842, + "GROW_CURVE_ATTACK_205": 3.439, + "GROW_CURVE_CRITICAL_201": 2.575, + "GROW_CURVE_ATTACK_301": 4.443, + "GROW_CURVE_ATTACK_302": 4.827, + "GROW_CURVE_ATTACK_303": 5.186, + "GROW_CURVE_ATTACK_304": 4.031, + "GROW_CURVE_ATTACK_305": 3.588, + "GROW_CURVE_CRITICAL_301": 2.575, + } + }, + "41": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 3.937, + "GROW_CURVE_ATTACK_102": 4.289, + "GROW_CURVE_ATTACK_103": 4.621, + "GROW_CURVE_ATTACK_104": 3.564, + "GROW_CURVE_ATTACK_105": 3.167, + "GROW_CURVE_CRITICAL_101": 2.575, + "GROW_CURVE_ATTACK_201": 4.303, + "GROW_CURVE_ATTACK_202": 4.669, + "GROW_CURVE_ATTACK_203": 5.014, + "GROW_CURVE_ATTACK_204": 3.913, + "GROW_CURVE_ATTACK_205": 3.496, + "GROW_CURVE_CRITICAL_201": 2.575, + "GROW_CURVE_ATTACK_301": 4.534, + "GROW_CURVE_ATTACK_302": 4.931, + "GROW_CURVE_ATTACK_303": 5.301, + "GROW_CURVE_ATTACK_304": 4.109, + "GROW_CURVE_ATTACK_305": 3.651, + "GROW_CURVE_CRITICAL_301": 2.575, + } + }, + "42": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.008, + "GROW_CURVE_ATTACK_102": 4.371, + "GROW_CURVE_ATTACK_103": 4.714, + "GROW_CURVE_ATTACK_104": 3.623, + "GROW_CURVE_ATTACK_105": 3.214, + "GROW_CURVE_CRITICAL_101": 2.575, + "GROW_CURVE_ATTACK_201": 4.385, + "GROW_CURVE_ATTACK_202": 4.763, + "GROW_CURVE_ATTACK_203": 5.119, + "GROW_CURVE_ATTACK_204": 3.983, + "GROW_CURVE_ATTACK_205": 3.553, + "GROW_CURVE_CRITICAL_201": 2.575, + "GROW_CURVE_ATTACK_301": 4.625, + "GROW_CURVE_ATTACK_302": 5.035, + "GROW_CURVE_ATTACK_303": 5.417, + "GROW_CURVE_ATTACK_304": 4.186, + "GROW_CURVE_ATTACK_305": 3.714, + "GROW_CURVE_CRITICAL_301": 2.575, + } + }, + "43": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.079, + "GROW_CURVE_ATTACK_102": 4.454, + "GROW_CURVE_ATTACK_103": 4.808, + "GROW_CURVE_ATTACK_104": 3.682, + "GROW_CURVE_ATTACK_105": 3.26, + "GROW_CURVE_CRITICAL_101": 2.575, + "GROW_CURVE_ATTACK_201": 4.468, + "GROW_CURVE_ATTACK_202": 4.858, + "GROW_CURVE_ATTACK_203": 5.225, + "GROW_CURVE_ATTACK_204": 4.053, + "GROW_CURVE_ATTACK_205": 3.609, + "GROW_CURVE_CRITICAL_201": 2.575, + "GROW_CURVE_ATTACK_301": 4.717, + "GROW_CURVE_ATTACK_302": 5.139, + "GROW_CURVE_ATTACK_303": 5.533, + "GROW_CURVE_ATTACK_304": 4.264, + "GROW_CURVE_ATTACK_305": 3.777, + "GROW_CURVE_CRITICAL_301": 2.575, + } + }, + "44": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.15, + "GROW_CURVE_ATTACK_102": 4.536, + "GROW_CURVE_ATTACK_103": 4.901, + "GROW_CURVE_ATTACK_104": 3.741, + "GROW_CURVE_ATTACK_105": 3.306, + "GROW_CURVE_CRITICAL_101": 2.575, + "GROW_CURVE_ATTACK_201": 4.55, + "GROW_CURVE_ATTACK_202": 4.952, + "GROW_CURVE_ATTACK_203": 5.33, + "GROW_CURVE_ATTACK_204": 4.122, + "GROW_CURVE_ATTACK_205": 3.666, + "GROW_CURVE_CRITICAL_201": 2.575, + "GROW_CURVE_ATTACK_301": 4.808, + "GROW_CURVE_ATTACK_302": 5.243, + "GROW_CURVE_ATTACK_303": 5.65, + "GROW_CURVE_ATTACK_304": 4.342, + "GROW_CURVE_ATTACK_305": 3.84, + "GROW_CURVE_CRITICAL_301": 2.575, + } + }, + "45": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.221, + "GROW_CURVE_ATTACK_102": 4.618, + "GROW_CURVE_ATTACK_103": 4.994, + "GROW_CURVE_ATTACK_104": 3.799, + "GROW_CURVE_ATTACK_105": 3.351, + "GROW_CURVE_CRITICAL_101": 2.777, + "GROW_CURVE_ATTACK_201": 4.633, + "GROW_CURVE_ATTACK_202": 5.047, + "GROW_CURVE_ATTACK_203": 5.436, + "GROW_CURVE_ATTACK_204": 4.192, + "GROW_CURVE_ATTACK_205": 3.722, + "GROW_CURVE_CRITICAL_201": 2.777, + "GROW_CURVE_ATTACK_301": 4.9, + "GROW_CURVE_ATTACK_302": 5.348, + "GROW_CURVE_ATTACK_303": 5.767, + "GROW_CURVE_ATTACK_304": 4.419, + "GROW_CURVE_ATTACK_305": 3.903, + "GROW_CURVE_CRITICAL_301": 2.777, + } + }, + "46": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.291, + "GROW_CURVE_ATTACK_102": 4.701, + "GROW_CURVE_ATTACK_103": 5.087, + "GROW_CURVE_ATTACK_104": 3.858, + "GROW_CURVE_ATTACK_105": 3.397, + "GROW_CURVE_CRITICAL_101": 2.777, + "GROW_CURVE_ATTACK_201": 4.716, + "GROW_CURVE_ATTACK_202": 5.142, + "GROW_CURVE_ATTACK_203": 5.542, + "GROW_CURVE_ATTACK_204": 4.262, + "GROW_CURVE_ATTACK_205": 3.778, + "GROW_CURVE_CRITICAL_201": 2.777, + "GROW_CURVE_ATTACK_301": 4.992, + "GROW_CURVE_ATTACK_302": 5.453, + "GROW_CURVE_ATTACK_303": 5.884, + "GROW_CURVE_ATTACK_304": 4.497, + "GROW_CURVE_ATTACK_305": 3.966, + "GROW_CURVE_CRITICAL_301": 2.777, + } + }, + "47": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.362, + "GROW_CURVE_ATTACK_102": 4.783, + "GROW_CURVE_ATTACK_103": 5.181, + "GROW_CURVE_ATTACK_104": 3.916, + "GROW_CURVE_ATTACK_105": 3.442, + "GROW_CURVE_CRITICAL_101": 2.777, + "GROW_CURVE_ATTACK_201": 4.798, + "GROW_CURVE_ATTACK_202": 5.236, + "GROW_CURVE_ATTACK_203": 5.648, + "GROW_CURVE_ATTACK_204": 4.332, + "GROW_CURVE_ATTACK_205": 3.834, + "GROW_CURVE_CRITICAL_201": 2.777, + "GROW_CURVE_ATTACK_301": 5.084, + "GROW_CURVE_ATTACK_302": 5.558, + "GROW_CURVE_ATTACK_303": 6.001, + "GROW_CURVE_ATTACK_304": 4.575, + "GROW_CURVE_ATTACK_305": 4.029, + "GROW_CURVE_CRITICAL_301": 2.777, + } + }, + "48": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.433, + "GROW_CURVE_ATTACK_102": 4.865, + "GROW_CURVE_ATTACK_103": 5.274, + "GROW_CURVE_ATTACK_104": 3.974, + "GROW_CURVE_ATTACK_105": 3.487, + "GROW_CURVE_CRITICAL_101": 2.777, + "GROW_CURVE_ATTACK_201": 4.881, + "GROW_CURVE_ATTACK_202": 5.331, + "GROW_CURVE_ATTACK_203": 5.755, + "GROW_CURVE_ATTACK_204": 4.401, + "GROW_CURVE_ATTACK_205": 3.889, + "GROW_CURVE_CRITICAL_201": 2.777, + "GROW_CURVE_ATTACK_301": 5.176, + "GROW_CURVE_ATTACK_302": 5.663, + "GROW_CURVE_ATTACK_303": 6.118, + "GROW_CURVE_ATTACK_304": 4.653, + "GROW_CURVE_ATTACK_305": 4.092, + "GROW_CURVE_CRITICAL_301": 2.777, + } + }, + "49": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.503, + "GROW_CURVE_ATTACK_102": 4.948, + "GROW_CURVE_ATTACK_103": 5.367, + "GROW_CURVE_ATTACK_104": 4.032, + "GROW_CURVE_ATTACK_105": 3.532, + "GROW_CURVE_CRITICAL_101": 2.777, + "GROW_CURVE_ATTACK_201": 4.963, + "GROW_CURVE_ATTACK_202": 5.426, + "GROW_CURVE_ATTACK_203": 5.861, + "GROW_CURVE_ATTACK_204": 4.471, + "GROW_CURVE_ATTACK_205": 3.945, + "GROW_CURVE_CRITICAL_201": 2.777, + "GROW_CURVE_ATTACK_301": 5.268, + "GROW_CURVE_ATTACK_302": 5.768, + "GROW_CURVE_ATTACK_303": 6.236, + "GROW_CURVE_ATTACK_304": 4.731, + "GROW_CURVE_ATTACK_305": 4.155, + "GROW_CURVE_CRITICAL_301": 2.777, + } + }, + "50": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.574, + "GROW_CURVE_ATTACK_102": 5.03, + "GROW_CURVE_ATTACK_103": 5.461, + "GROW_CURVE_ATTACK_104": 4.09, + "GROW_CURVE_ATTACK_105": 3.576, + "GROW_CURVE_CRITICAL_101": 2.979, + "GROW_CURVE_ATTACK_201": 5.046, + "GROW_CURVE_ATTACK_202": 5.521, + "GROW_CURVE_ATTACK_203": 5.968, + "GROW_CURVE_ATTACK_204": 4.54, + "GROW_CURVE_ATTACK_205": 4, + "GROW_CURVE_CRITICAL_201": 2.979, + "GROW_CURVE_ATTACK_301": 5.36, + "GROW_CURVE_ATTACK_302": 5.874, + "GROW_CURVE_ATTACK_303": 6.354, + "GROW_CURVE_ATTACK_304": 4.81, + "GROW_CURVE_ATTACK_305": 4.217, + "GROW_CURVE_CRITICAL_301": 2.979, + } + }, + "51": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.644, + "GROW_CURVE_ATTACK_102": 5.112, + "GROW_CURVE_ATTACK_103": 5.554, + "GROW_CURVE_ATTACK_104": 4.148, + "GROW_CURVE_ATTACK_105": 3.62, + "GROW_CURVE_CRITICAL_101": 2.979, + "GROW_CURVE_ATTACK_201": 5.128, + "GROW_CURVE_ATTACK_202": 5.616, + "GROW_CURVE_ATTACK_203": 6.074, + "GROW_CURVE_ATTACK_204": 4.609, + "GROW_CURVE_ATTACK_205": 4.056, + "GROW_CURVE_CRITICAL_201": 2.979, + "GROW_CURVE_ATTACK_301": 5.453, + "GROW_CURVE_ATTACK_302": 5.98, + "GROW_CURVE_ATTACK_303": 6.473, + "GROW_CURVE_ATTACK_304": 4.888, + "GROW_CURVE_ATTACK_305": 4.28, + "GROW_CURVE_CRITICAL_301": 2.979, + } + }, + "52": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.714, + "GROW_CURVE_ATTACK_102": 5.194, + "GROW_CURVE_ATTACK_103": 5.648, + "GROW_CURVE_ATTACK_104": 4.205, + "GROW_CURVE_ATTACK_105": 3.665, + "GROW_CURVE_CRITICAL_101": 2.979, + "GROW_CURVE_ATTACK_201": 5.211, + "GROW_CURVE_ATTACK_202": 5.711, + "GROW_CURVE_ATTACK_203": 6.181, + "GROW_CURVE_ATTACK_204": 4.679, + "GROW_CURVE_ATTACK_205": 4.111, + "GROW_CURVE_CRITICAL_201": 2.979, + "GROW_CURVE_ATTACK_301": 5.546, + "GROW_CURVE_ATTACK_302": 6.086, + "GROW_CURVE_ATTACK_303": 6.592, + "GROW_CURVE_ATTACK_304": 4.966, + "GROW_CURVE_ATTACK_305": 4.343, + "GROW_CURVE_CRITICAL_301": 2.979, + } + }, + "53": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.784, + "GROW_CURVE_ATTACK_102": 5.277, + "GROW_CURVE_ATTACK_103": 5.742, + "GROW_CURVE_ATTACK_104": 4.263, + "GROW_CURVE_ATTACK_105": 3.708, + "GROW_CURVE_CRITICAL_101": 2.979, + "GROW_CURVE_ATTACK_201": 5.294, + "GROW_CURVE_ATTACK_202": 5.806, + "GROW_CURVE_ATTACK_203": 6.288, + "GROW_CURVE_ATTACK_204": 4.748, + "GROW_CURVE_ATTACK_205": 4.166, + "GROW_CURVE_CRITICAL_201": 2.979, + "GROW_CURVE_ATTACK_301": 5.638, + "GROW_CURVE_ATTACK_302": 6.192, + "GROW_CURVE_ATTACK_303": 6.71, + "GROW_CURVE_ATTACK_304": 5.044, + "GROW_CURVE_ATTACK_305": 4.406, + "GROW_CURVE_CRITICAL_301": 2.979, + } + }, + "54": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.855, + "GROW_CURVE_ATTACK_102": 5.359, + "GROW_CURVE_ATTACK_103": 5.835, + "GROW_CURVE_ATTACK_104": 4.32, + "GROW_CURVE_ATTACK_105": 3.752, + "GROW_CURVE_CRITICAL_101": 2.979, + "GROW_CURVE_ATTACK_201": 5.376, + "GROW_CURVE_ATTACK_202": 5.901, + "GROW_CURVE_ATTACK_203": 6.395, + "GROW_CURVE_ATTACK_204": 4.817, + "GROW_CURVE_ATTACK_205": 4.221, + "GROW_CURVE_CRITICAL_201": 2.979, + "GROW_CURVE_ATTACK_301": 5.731, + "GROW_CURVE_ATTACK_302": 6.299, + "GROW_CURVE_ATTACK_303": 6.83, + "GROW_CURVE_ATTACK_304": 5.123, + "GROW_CURVE_ATTACK_305": 4.469, + "GROW_CURVE_CRITICAL_301": 2.979, + } + }, + "55": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.925, + "GROW_CURVE_ATTACK_102": 5.441, + "GROW_CURVE_ATTACK_103": 5.929, + "GROW_CURVE_ATTACK_104": 4.377, + "GROW_CURVE_ATTACK_105": 3.796, + "GROW_CURVE_CRITICAL_101": 3.181, + "GROW_CURVE_ATTACK_201": 5.459, + "GROW_CURVE_ATTACK_202": 5.996, + "GROW_CURVE_ATTACK_203": 6.502, + "GROW_CURVE_ATTACK_204": 4.886, + "GROW_CURVE_ATTACK_205": 4.275, + "GROW_CURVE_CRITICAL_201": 3.181, + "GROW_CURVE_ATTACK_301": 5.825, + "GROW_CURVE_ATTACK_302": 6.406, + "GROW_CURVE_ATTACK_303": 6.949, + "GROW_CURVE_ATTACK_304": 5.201, + "GROW_CURVE_ATTACK_305": 4.532, + "GROW_CURVE_CRITICAL_301": 3.181, + } + }, + "56": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 4.995, + "GROW_CURVE_ATTACK_102": 5.523, + "GROW_CURVE_ATTACK_103": 6.023, + "GROW_CURVE_ATTACK_104": 4.434, + "GROW_CURVE_ATTACK_105": 3.839, + "GROW_CURVE_CRITICAL_101": 3.181, + "GROW_CURVE_ATTACK_201": 5.541, + "GROW_CURVE_ATTACK_202": 6.092, + "GROW_CURVE_ATTACK_203": 6.609, + "GROW_CURVE_ATTACK_204": 4.955, + "GROW_CURVE_ATTACK_205": 4.33, + "GROW_CURVE_CRITICAL_201": 3.181, + "GROW_CURVE_ATTACK_301": 5.918, + "GROW_CURVE_ATTACK_302": 6.513, + "GROW_CURVE_ATTACK_303": 7.069, + "GROW_CURVE_ATTACK_304": 5.28, + "GROW_CURVE_ATTACK_305": 4.594, + "GROW_CURVE_CRITICAL_301": 3.181, + } + }, + "57": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.065, + "GROW_CURVE_ATTACK_102": 5.605, + "GROW_CURVE_ATTACK_103": 6.116, + "GROW_CURVE_ATTACK_104": 4.491, + "GROW_CURVE_ATTACK_105": 3.882, + "GROW_CURVE_CRITICAL_101": 3.181, + "GROW_CURVE_ATTACK_201": 5.624, + "GROW_CURVE_ATTACK_202": 6.187, + "GROW_CURVE_ATTACK_203": 6.717, + "GROW_CURVE_ATTACK_204": 5.024, + "GROW_CURVE_ATTACK_205": 4.384, + "GROW_CURVE_CRITICAL_201": 3.181, + "GROW_CURVE_ATTACK_301": 6.011, + "GROW_CURVE_ATTACK_302": 6.62, + "GROW_CURVE_ATTACK_303": 7.189, + "GROW_CURVE_ATTACK_304": 5.359, + "GROW_CURVE_ATTACK_305": 4.657, + "GROW_CURVE_CRITICAL_301": 3.181, + } + }, + "58": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.134, + "GROW_CURVE_ATTACK_102": 5.688, + "GROW_CURVE_ATTACK_103": 6.21, + "GROW_CURVE_ATTACK_104": 4.548, + "GROW_CURVE_ATTACK_105": 3.925, + "GROW_CURVE_CRITICAL_101": 3.181, + "GROW_CURVE_ATTACK_201": 5.706, + "GROW_CURVE_ATTACK_202": 6.282, + "GROW_CURVE_ATTACK_203": 6.824, + "GROW_CURVE_ATTACK_204": 5.093, + "GROW_CURVE_ATTACK_205": 4.439, + "GROW_CURVE_CRITICAL_201": 3.181, + "GROW_CURVE_ATTACK_301": 6.105, + "GROW_CURVE_ATTACK_302": 6.727, + "GROW_CURVE_ATTACK_303": 7.309, + "GROW_CURVE_ATTACK_304": 5.437, + "GROW_CURVE_ATTACK_305": 4.72, + "GROW_CURVE_CRITICAL_301": 3.181, + } + }, + "59": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.204, + "GROW_CURVE_ATTACK_102": 5.77, + "GROW_CURVE_ATTACK_103": 6.304, + "GROW_CURVE_ATTACK_104": 4.605, + "GROW_CURVE_ATTACK_105": 3.968, + "GROW_CURVE_CRITICAL_101": 3.181, + "GROW_CURVE_ATTACK_201": 5.789, + "GROW_CURVE_ATTACK_202": 6.378, + "GROW_CURVE_ATTACK_203": 6.932, + "GROW_CURVE_ATTACK_204": 5.162, + "GROW_CURVE_ATTACK_205": 4.493, + "GROW_CURVE_CRITICAL_201": 3.181, + "GROW_CURVE_ATTACK_301": 6.198, + "GROW_CURVE_ATTACK_302": 6.835, + "GROW_CURVE_ATTACK_303": 7.429, + "GROW_CURVE_ATTACK_304": 5.516, + "GROW_CURVE_ATTACK_305": 4.783, + "GROW_CURVE_CRITICAL_301": 3.181, + } + }, + "60": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.274, + "GROW_CURVE_ATTACK_102": 5.852, + "GROW_CURVE_ATTACK_103": 6.398, + "GROW_CURVE_ATTACK_104": 4.661, + "GROW_CURVE_ATTACK_105": 4.01, + "GROW_CURVE_CRITICAL_101": 3.383, + "GROW_CURVE_ATTACK_201": 5.872, + "GROW_CURVE_ATTACK_202": 6.473, + "GROW_CURVE_ATTACK_203": 7.039, + "GROW_CURVE_ATTACK_204": 5.231, + "GROW_CURVE_ATTACK_205": 4.547, + "GROW_CURVE_CRITICAL_201": 3.383, + "GROW_CURVE_ATTACK_301": 6.292, + "GROW_CURVE_ATTACK_302": 6.942, + "GROW_CURVE_ATTACK_303": 7.55, + "GROW_CURVE_ATTACK_304": 5.595, + "GROW_CURVE_ATTACK_305": 4.846, + "GROW_CURVE_CRITICAL_301": 3.383, + } + }, + "61": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.344, + "GROW_CURVE_ATTACK_102": 5.934, + "GROW_CURVE_ATTACK_103": 6.492, + "GROW_CURVE_ATTACK_104": 4.718, + "GROW_CURVE_ATTACK_105": 4.053, + "GROW_CURVE_CRITICAL_101": 3.383, + "GROW_CURVE_ATTACK_201": 5.954, + "GROW_CURVE_ATTACK_202": 6.569, + "GROW_CURVE_ATTACK_203": 7.147, + "GROW_CURVE_ATTACK_204": 5.3, + "GROW_CURVE_ATTACK_205": 4.601, + "GROW_CURVE_CRITICAL_201": 3.383, + "GROW_CURVE_ATTACK_301": 6.386, + "GROW_CURVE_ATTACK_302": 7.05, + "GROW_CURVE_ATTACK_303": 7.671, + "GROW_CURVE_ATTACK_304": 5.674, + "GROW_CURVE_ATTACK_305": 4.909, + "GROW_CURVE_CRITICAL_301": 3.383, + } + }, + "62": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.413, + "GROW_CURVE_ATTACK_102": 6.016, + "GROW_CURVE_ATTACK_103": 6.586, + "GROW_CURVE_ATTACK_104": 4.774, + "GROW_CURVE_ATTACK_105": 4.095, + "GROW_CURVE_CRITICAL_101": 3.383, + "GROW_CURVE_ATTACK_201": 6.037, + "GROW_CURVE_ATTACK_202": 6.664, + "GROW_CURVE_ATTACK_203": 7.255, + "GROW_CURVE_ATTACK_204": 5.368, + "GROW_CURVE_ATTACK_205": 4.655, + "GROW_CURVE_CRITICAL_201": 3.383, + "GROW_CURVE_ATTACK_301": 6.48, + "GROW_CURVE_ATTACK_302": 7.158, + "GROW_CURVE_ATTACK_303": 7.792, + "GROW_CURVE_ATTACK_304": 5.753, + "GROW_CURVE_ATTACK_305": 4.972, + "GROW_CURVE_CRITICAL_301": 3.383, + } + }, + "63": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.483, + "GROW_CURVE_ATTACK_102": 6.098, + "GROW_CURVE_ATTACK_103": 6.68, + "GROW_CURVE_ATTACK_104": 4.83, + "GROW_CURVE_ATTACK_105": 4.137, + "GROW_CURVE_CRITICAL_101": 3.383, + "GROW_CURVE_ATTACK_201": 6.119, + "GROW_CURVE_ATTACK_202": 6.76, + "GROW_CURVE_ATTACK_203": 7.363, + "GROW_CURVE_ATTACK_204": 5.437, + "GROW_CURVE_ATTACK_205": 4.709, + "GROW_CURVE_CRITICAL_201": 3.383, + "GROW_CURVE_ATTACK_301": 6.575, + "GROW_CURVE_ATTACK_302": 7.267, + "GROW_CURVE_ATTACK_303": 7.913, + "GROW_CURVE_ATTACK_304": 5.833, + "GROW_CURVE_ATTACK_305": 5.035, + "GROW_CURVE_CRITICAL_301": 3.383, + } + }, + "64": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.552, + "GROW_CURVE_ATTACK_102": 6.18, + "GROW_CURVE_ATTACK_103": 6.774, + "GROW_CURVE_ATTACK_104": 4.887, + "GROW_CURVE_ATTACK_105": 4.179, + "GROW_CURVE_CRITICAL_101": 3.383, + "GROW_CURVE_ATTACK_201": 6.202, + "GROW_CURVE_ATTACK_202": 6.856, + "GROW_CURVE_ATTACK_203": 7.471, + "GROW_CURVE_ATTACK_204": 5.506, + "GROW_CURVE_ATTACK_205": 4.763, + "GROW_CURVE_CRITICAL_201": 3.383, + "GROW_CURVE_ATTACK_301": 6.669, + "GROW_CURVE_ATTACK_302": 7.375, + "GROW_CURVE_ATTACK_303": 8.035, + "GROW_CURVE_ATTACK_304": 5.912, + "GROW_CURVE_ATTACK_305": 5.098, + "GROW_CURVE_CRITICAL_301": 3.383, + } + }, + "65": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.622, + "GROW_CURVE_ATTACK_102": 6.262, + "GROW_CURVE_ATTACK_103": 6.868, + "GROW_CURVE_ATTACK_104": 4.943, + "GROW_CURVE_ATTACK_105": 4.221, + "GROW_CURVE_CRITICAL_101": 3.585, + "GROW_CURVE_ATTACK_201": 6.284, + "GROW_CURVE_ATTACK_202": 6.951, + "GROW_CURVE_ATTACK_203": 7.579, + "GROW_CURVE_ATTACK_204": 5.574, + "GROW_CURVE_ATTACK_205": 4.816, + "GROW_CURVE_CRITICAL_201": 3.585, + "GROW_CURVE_ATTACK_301": 6.763, + "GROW_CURVE_ATTACK_302": 7.484, + "GROW_CURVE_ATTACK_303": 8.157, + "GROW_CURVE_ATTACK_304": 5.991, + "GROW_CURVE_ATTACK_305": 5.161, + "GROW_CURVE_CRITICAL_301": 3.585, + } + }, + "66": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.691, + "GROW_CURVE_ATTACK_102": 6.344, + "GROW_CURVE_ATTACK_103": 6.962, + "GROW_CURVE_ATTACK_104": 4.999, + "GROW_CURVE_ATTACK_105": 4.263, + "GROW_CURVE_CRITICAL_101": 3.585, + "GROW_CURVE_ATTACK_201": 6.367, + "GROW_CURVE_ATTACK_202": 7.047, + "GROW_CURVE_ATTACK_203": 7.687, + "GROW_CURVE_ATTACK_204": 5.643, + "GROW_CURVE_ATTACK_205": 4.87, + "GROW_CURVE_CRITICAL_201": 3.585, + "GROW_CURVE_ATTACK_301": 6.858, + "GROW_CURVE_ATTACK_302": 7.592, + "GROW_CURVE_ATTACK_303": 8.279, + "GROW_CURVE_ATTACK_304": 6.071, + "GROW_CURVE_ATTACK_305": 5.225, + "GROW_CURVE_CRITICAL_301": 3.585, + } + }, + "67": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.761, + "GROW_CURVE_ATTACK_102": 6.427, + "GROW_CURVE_ATTACK_103": 7.056, + "GROW_CURVE_ATTACK_104": 5.054, + "GROW_CURVE_ATTACK_105": 4.304, + "GROW_CURVE_CRITICAL_101": 3.585, + "GROW_CURVE_ATTACK_201": 6.45, + "GROW_CURVE_ATTACK_202": 7.143, + "GROW_CURVE_ATTACK_203": 7.795, + "GROW_CURVE_ATTACK_204": 5.711, + "GROW_CURVE_ATTACK_205": 4.923, + "GROW_CURVE_CRITICAL_201": 3.585, + "GROW_CURVE_ATTACK_301": 6.953, + "GROW_CURVE_ATTACK_302": 7.701, + "GROW_CURVE_ATTACK_303": 8.401, + "GROW_CURVE_ATTACK_304": 6.15, + "GROW_CURVE_ATTACK_305": 5.288, + "GROW_CURVE_CRITICAL_301": 3.585, + } + }, + "68": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.83, + "GROW_CURVE_ATTACK_102": 6.509, + "GROW_CURVE_ATTACK_103": 7.15, + "GROW_CURVE_ATTACK_104": 5.11, + "GROW_CURVE_ATTACK_105": 4.346, + "GROW_CURVE_CRITICAL_101": 3.585, + "GROW_CURVE_ATTACK_201": 6.532, + "GROW_CURVE_ATTACK_202": 7.239, + "GROW_CURVE_ATTACK_203": 7.904, + "GROW_CURVE_ATTACK_204": 5.78, + "GROW_CURVE_ATTACK_205": 4.977, + "GROW_CURVE_CRITICAL_201": 3.585, + "GROW_CURVE_ATTACK_301": 7.048, + "GROW_CURVE_ATTACK_302": 7.811, + "GROW_CURVE_ATTACK_303": 8.524, + "GROW_CURVE_ATTACK_304": 6.23, + "GROW_CURVE_ATTACK_305": 5.351, + "GROW_CURVE_CRITICAL_301": 3.585, + } + }, + "69": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.899, + "GROW_CURVE_ATTACK_102": 6.591, + "GROW_CURVE_ATTACK_103": 7.244, + "GROW_CURVE_ATTACK_104": 5.166, + "GROW_CURVE_ATTACK_105": 4.387, + "GROW_CURVE_CRITICAL_101": 3.585, + "GROW_CURVE_ATTACK_201": 6.615, + "GROW_CURVE_ATTACK_202": 7.335, + "GROW_CURVE_ATTACK_203": 8.012, + "GROW_CURVE_ATTACK_204": 5.848, + "GROW_CURVE_ATTACK_205": 5.03, + "GROW_CURVE_CRITICAL_201": 3.585, + "GROW_CURVE_ATTACK_301": 7.143, + "GROW_CURVE_ATTACK_302": 7.92, + "GROW_CURVE_ATTACK_303": 8.646, + "GROW_CURVE_ATTACK_304": 6.31, + "GROW_CURVE_ATTACK_305": 5.414, + "GROW_CURVE_CRITICAL_301": 3.585, + } + }, + "70": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 5.968, + "GROW_CURVE_ATTACK_102": 6.673, + "GROW_CURVE_ATTACK_103": 7.338, + "GROW_CURVE_ATTACK_104": 5.222, + "GROW_CURVE_ATTACK_105": 4.428, + "GROW_CURVE_CRITICAL_101": 3.786, + "GROW_CURVE_ATTACK_201": 6.697, + "GROW_CURVE_ATTACK_202": 7.431, + "GROW_CURVE_ATTACK_203": 8.12, + "GROW_CURVE_ATTACK_204": 5.916, + "GROW_CURVE_ATTACK_205": 5.083, + "GROW_CURVE_CRITICAL_201": 3.786, + "GROW_CURVE_ATTACK_301": 7.238, + "GROW_CURVE_ATTACK_302": 8.03, + "GROW_CURVE_ATTACK_303": 8.769, + "GROW_CURVE_ATTACK_304": 6.39, + "GROW_CURVE_ATTACK_305": 5.478, + "GROW_CURVE_CRITICAL_301": 3.786, + } + }, + "71": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.038, + "GROW_CURVE_ATTACK_102": 6.755, + "GROW_CURVE_ATTACK_103": 7.432, + "GROW_CURVE_ATTACK_104": 5.277, + "GROW_CURVE_ATTACK_105": 4.469, + "GROW_CURVE_CRITICAL_101": 3.786, + "GROW_CURVE_ATTACK_201": 6.78, + "GROW_CURVE_ATTACK_202": 7.527, + "GROW_CURVE_ATTACK_203": 8.229, + "GROW_CURVE_ATTACK_204": 5.985, + "GROW_CURVE_ATTACK_205": 5.136, + "GROW_CURVE_CRITICAL_201": 3.786, + "GROW_CURVE_ATTACK_301": 7.334, + "GROW_CURVE_ATTACK_302": 8.139, + "GROW_CURVE_ATTACK_303": 8.893, + "GROW_CURVE_ATTACK_304": 6.47, + "GROW_CURVE_ATTACK_305": 5.541, + "GROW_CURVE_CRITICAL_301": 3.786, + } + }, + "72": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.107, + "GROW_CURVE_ATTACK_102": 6.837, + "GROW_CURVE_ATTACK_103": 7.527, + "GROW_CURVE_ATTACK_104": 5.333, + "GROW_CURVE_ATTACK_105": 4.51, + "GROW_CURVE_CRITICAL_101": 3.786, + "GROW_CURVE_ATTACK_201": 6.862, + "GROW_CURVE_ATTACK_202": 7.623, + "GROW_CURVE_ATTACK_203": 8.338, + "GROW_CURVE_ATTACK_204": 6.053, + "GROW_CURVE_ATTACK_205": 5.189, + "GROW_CURVE_CRITICAL_201": 3.786, + "GROW_CURVE_ATTACK_301": 7.429, + "GROW_CURVE_ATTACK_302": 8.249, + "GROW_CURVE_ATTACK_303": 9.016, + "GROW_CURVE_ATTACK_304": 6.55, + "GROW_CURVE_ATTACK_305": 5.605, + "GROW_CURVE_CRITICAL_301": 3.786, + } + }, + "73": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.176, + "GROW_CURVE_ATTACK_102": 6.919, + "GROW_CURVE_ATTACK_103": 7.621, + "GROW_CURVE_ATTACK_104": 5.388, + "GROW_CURVE_ATTACK_105": 4.551, + "GROW_CURVE_CRITICAL_101": 3.786, + "GROW_CURVE_ATTACK_201": 6.945, + "GROW_CURVE_ATTACK_202": 7.719, + "GROW_CURVE_ATTACK_203": 8.446, + "GROW_CURVE_ATTACK_204": 6.121, + "GROW_CURVE_ATTACK_205": 5.242, + "GROW_CURVE_CRITICAL_201": 3.786, + "GROW_CURVE_ATTACK_301": 7.525, + "GROW_CURVE_ATTACK_302": 8.359, + "GROW_CURVE_ATTACK_303": 9.14, + "GROW_CURVE_ATTACK_304": 6.63, + "GROW_CURVE_ATTACK_305": 5.668, + "GROW_CURVE_CRITICAL_301": 3.786, + } + }, + "74": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.245, + "GROW_CURVE_ATTACK_102": 7.001, + "GROW_CURVE_ATTACK_103": 7.715, + "GROW_CURVE_ATTACK_104": 5.443, + "GROW_CURVE_ATTACK_105": 4.592, + "GROW_CURVE_CRITICAL_101": 3.786, + "GROW_CURVE_ATTACK_201": 7.028, + "GROW_CURVE_ATTACK_202": 7.815, + "GROW_CURVE_ATTACK_203": 8.555, + "GROW_CURVE_ATTACK_204": 6.189, + "GROW_CURVE_ATTACK_205": 5.295, + "GROW_CURVE_CRITICAL_201": 3.786, + "GROW_CURVE_ATTACK_301": 7.621, + "GROW_CURVE_ATTACK_302": 8.47, + "GROW_CURVE_ATTACK_303": 9.263, + "GROW_CURVE_ATTACK_304": 6.71, + "GROW_CURVE_ATTACK_305": 5.732, + "GROW_CURVE_CRITICAL_301": 3.786, + } + }, + "75": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.314, + "GROW_CURVE_ATTACK_102": 7.083, + "GROW_CURVE_ATTACK_103": 7.81, + "GROW_CURVE_ATTACK_104": 5.498, + "GROW_CURVE_ATTACK_105": 4.632, + "GROW_CURVE_CRITICAL_101": 3.988, + "GROW_CURVE_ATTACK_201": 7.11, + "GROW_CURVE_ATTACK_202": 7.911, + "GROW_CURVE_ATTACK_203": 8.664, + "GROW_CURVE_ATTACK_204": 6.257, + "GROW_CURVE_ATTACK_205": 5.347, + "GROW_CURVE_CRITICAL_201": 3.988, + "GROW_CURVE_ATTACK_301": 7.717, + "GROW_CURVE_ATTACK_302": 8.58, + "GROW_CURVE_ATTACK_303": 9.387, + "GROW_CURVE_ATTACK_304": 6.791, + "GROW_CURVE_ATTACK_305": 5.796, + "GROW_CURVE_CRITICAL_301": 3.988, + } + }, + "76": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.383, + "GROW_CURVE_ATTACK_102": 7.165, + "GROW_CURVE_ATTACK_103": 7.904, + "GROW_CURVE_ATTACK_104": 5.554, + "GROW_CURVE_ATTACK_105": 4.673, + "GROW_CURVE_CRITICAL_101": 3.988, + "GROW_CURVE_ATTACK_201": 7.193, + "GROW_CURVE_ATTACK_202": 8.007, + "GROW_CURVE_ATTACK_203": 8.773, + "GROW_CURVE_ATTACK_204": 6.326, + "GROW_CURVE_ATTACK_205": 5.4, + "GROW_CURVE_CRITICAL_201": 3.988, + "GROW_CURVE_ATTACK_301": 7.813, + "GROW_CURVE_ATTACK_302": 8.691, + "GROW_CURVE_ATTACK_303": 9.512, + "GROW_CURVE_ATTACK_304": 6.871, + "GROW_CURVE_ATTACK_305": 5.859, + "GROW_CURVE_CRITICAL_301": 3.988, + } + }, + "77": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.452, + "GROW_CURVE_ATTACK_102": 7.247, + "GROW_CURVE_ATTACK_103": 7.998, + "GROW_CURVE_ATTACK_104": 5.609, + "GROW_CURVE_ATTACK_105": 4.713, + "GROW_CURVE_CRITICAL_101": 3.988, + "GROW_CURVE_ATTACK_201": 7.275, + "GROW_CURVE_ATTACK_202": 8.103, + "GROW_CURVE_ATTACK_203": 8.882, + "GROW_CURVE_ATTACK_204": 6.394, + "GROW_CURVE_ATTACK_205": 5.453, + "GROW_CURVE_CRITICAL_201": 3.988, + "GROW_CURVE_ATTACK_301": 7.909, + "GROW_CURVE_ATTACK_302": 8.802, + "GROW_CURVE_ATTACK_303": 9.636, + "GROW_CURVE_ATTACK_304": 6.952, + "GROW_CURVE_ATTACK_305": 5.923, + "GROW_CURVE_CRITICAL_301": 3.988, + } + }, + "78": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.521, + "GROW_CURVE_ATTACK_102": 7.329, + "GROW_CURVE_ATTACK_103": 8.093, + "GROW_CURVE_ATTACK_104": 5.664, + "GROW_CURVE_ATTACK_105": 4.753, + "GROW_CURVE_CRITICAL_101": 3.988, + "GROW_CURVE_ATTACK_201": 7.358, + "GROW_CURVE_ATTACK_202": 8.199, + "GROW_CURVE_ATTACK_203": 8.991, + "GROW_CURVE_ATTACK_204": 6.462, + "GROW_CURVE_ATTACK_205": 5.505, + "GROW_CURVE_CRITICAL_201": 3.988, + "GROW_CURVE_ATTACK_301": 8.005, + "GROW_CURVE_ATTACK_302": 8.913, + "GROW_CURVE_ATTACK_303": 9.761, + "GROW_CURVE_ATTACK_304": 7.033, + "GROW_CURVE_ATTACK_305": 5.987, + "GROW_CURVE_CRITICAL_301": 3.988, + } + }, + "79": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.59, + "GROW_CURVE_ATTACK_102": 7.411, + "GROW_CURVE_ATTACK_103": 8.187, + "GROW_CURVE_ATTACK_104": 5.719, + "GROW_CURVE_ATTACK_105": 4.793, + "GROW_CURVE_CRITICAL_101": 3.988, + "GROW_CURVE_ATTACK_201": 7.44, + "GROW_CURVE_ATTACK_202": 8.296, + "GROW_CURVE_ATTACK_203": 9.1, + "GROW_CURVE_ATTACK_204": 6.53, + "GROW_CURVE_ATTACK_205": 5.558, + "GROW_CURVE_CRITICAL_201": 3.988, + "GROW_CURVE_ATTACK_301": 8.102, + "GROW_CURVE_ATTACK_302": 9.024, + "GROW_CURVE_ATTACK_303": 9.886, + "GROW_CURVE_ATTACK_304": 7.113, + "GROW_CURVE_ATTACK_305": 6.051, + "GROW_CURVE_CRITICAL_301": 3.988, + } + }, + "80": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.659, + "GROW_CURVE_ATTACK_102": 7.493, + "GROW_CURVE_ATTACK_103": 8.282, + "GROW_CURVE_ATTACK_104": 5.774, + "GROW_CURVE_ATTACK_105": 4.834, + "GROW_CURVE_CRITICAL_101": 4.19, + "GROW_CURVE_ATTACK_201": 7.523, + "GROW_CURVE_ATTACK_202": 8.392, + "GROW_CURVE_ATTACK_203": 9.209, + "GROW_CURVE_ATTACK_204": 6.598, + "GROW_CURVE_ATTACK_205": 5.61, + "GROW_CURVE_CRITICAL_201": 4.19, + "GROW_CURVE_ATTACK_301": 8.199, + "GROW_CURVE_ATTACK_302": 9.135, + "GROW_CURVE_ATTACK_303": 10.011, + "GROW_CURVE_ATTACK_304": 7.194, + "GROW_CURVE_ATTACK_305": 6.115, + "GROW_CURVE_CRITICAL_301": 4.19, + } + }, + "81": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.727, + "GROW_CURVE_ATTACK_102": 7.575, + "GROW_CURVE_ATTACK_103": 8.376, + "GROW_CURVE_ATTACK_104": 5.828, + "GROW_CURVE_ATTACK_105": 4.873, + "GROW_CURVE_CRITICAL_101": 4.19, + "GROW_CURVE_ATTACK_201": 7.606, + "GROW_CURVE_ATTACK_202": 8.488, + "GROW_CURVE_ATTACK_203": 9.319, + "GROW_CURVE_ATTACK_204": 6.665, + "GROW_CURVE_ATTACK_205": 5.662, + "GROW_CURVE_CRITICAL_201": 4.19, + "GROW_CURVE_ATTACK_301": 8.295, + "GROW_CURVE_ATTACK_302": 9.247, + "GROW_CURVE_ATTACK_303": 10.136, + "GROW_CURVE_ATTACK_304": 7.275, + "GROW_CURVE_ATTACK_305": 6.179, + "GROW_CURVE_CRITICAL_301": 4.19, + } + }, + "82": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.796, + "GROW_CURVE_ATTACK_102": 7.657, + "GROW_CURVE_ATTACK_103": 8.471, + "GROW_CURVE_ATTACK_104": 5.883, + "GROW_CURVE_ATTACK_105": 4.913, + "GROW_CURVE_CRITICAL_101": 4.19, + "GROW_CURVE_ATTACK_201": 7.688, + "GROW_CURVE_ATTACK_202": 8.585, + "GROW_CURVE_ATTACK_203": 9.428, + "GROW_CURVE_ATTACK_204": 6.733, + "GROW_CURVE_ATTACK_205": 5.715, + "GROW_CURVE_CRITICAL_201": 4.19, + "GROW_CURVE_ATTACK_301": 8.392, + "GROW_CURVE_ATTACK_302": 9.358, + "GROW_CURVE_ATTACK_303": 10.261, + "GROW_CURVE_ATTACK_304": 7.357, + "GROW_CURVE_ATTACK_305": 6.243, + "GROW_CURVE_CRITICAL_301": 4.19, + } + }, + "83": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.865, + "GROW_CURVE_ATTACK_102": 7.739, + "GROW_CURVE_ATTACK_103": 8.565, + "GROW_CURVE_ATTACK_104": 5.938, + "GROW_CURVE_ATTACK_105": 4.953, + "GROW_CURVE_CRITICAL_101": 4.19, + "GROW_CURVE_ATTACK_201": 7.771, + "GROW_CURVE_ATTACK_202": 8.681, + "GROW_CURVE_ATTACK_203": 9.537, + "GROW_CURVE_ATTACK_204": 6.801, + "GROW_CURVE_ATTACK_205": 5.767, + "GROW_CURVE_CRITICAL_201": 4.19, + "GROW_CURVE_ATTACK_301": 8.489, + "GROW_CURVE_ATTACK_302": 9.47, + "GROW_CURVE_ATTACK_303": 10.387, + "GROW_CURVE_ATTACK_304": 7.438, + "GROW_CURVE_ATTACK_305": 6.308, + "GROW_CURVE_CRITICAL_301": 4.19, + } + }, + "84": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 6.934, + "GROW_CURVE_ATTACK_102": 7.821, + "GROW_CURVE_ATTACK_103": 8.66, + "GROW_CURVE_ATTACK_104": 5.993, + "GROW_CURVE_ATTACK_105": 4.993, + "GROW_CURVE_CRITICAL_101": 4.19, + "GROW_CURVE_ATTACK_201": 7.853, + "GROW_CURVE_ATTACK_202": 8.777, + "GROW_CURVE_ATTACK_203": 9.647, + "GROW_CURVE_ATTACK_204": 6.869, + "GROW_CURVE_ATTACK_205": 5.819, + "GROW_CURVE_CRITICAL_201": 4.19, + "GROW_CURVE_ATTACK_301": 8.587, + "GROW_CURVE_ATTACK_302": 9.582, + "GROW_CURVE_ATTACK_303": 10.513, + "GROW_CURVE_ATTACK_304": 7.519, + "GROW_CURVE_ATTACK_305": 6.372, + "GROW_CURVE_CRITICAL_301": 4.19, + } + }, + "85": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.003, + "GROW_CURVE_ATTACK_102": 7.904, + "GROW_CURVE_ATTACK_103": 8.755, + "GROW_CURVE_ATTACK_104": 6.047, + "GROW_CURVE_ATTACK_105": 5.032, + "GROW_CURVE_CRITICAL_101": 4.392, + "GROW_CURVE_ATTACK_201": 7.936, + "GROW_CURVE_ATTACK_202": 8.874, + "GROW_CURVE_ATTACK_203": 9.756, + "GROW_CURVE_ATTACK_204": 6.937, + "GROW_CURVE_ATTACK_205": 5.871, + "GROW_CURVE_CRITICAL_201": 4.392, + "GROW_CURVE_ATTACK_301": 8.684, + "GROW_CURVE_ATTACK_302": 9.694, + "GROW_CURVE_ATTACK_303": 10.639, + "GROW_CURVE_ATTACK_304": 7.601, + "GROW_CURVE_ATTACK_305": 6.436, + "GROW_CURVE_CRITICAL_301": 4.392, + } + }, + "86": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.071, + "GROW_CURVE_ATTACK_102": 7.986, + "GROW_CURVE_ATTACK_103": 8.849, + "GROW_CURVE_ATTACK_104": 6.102, + "GROW_CURVE_ATTACK_105": 5.072, + "GROW_CURVE_CRITICAL_101": 4.392, + "GROW_CURVE_ATTACK_201": 8.018, + "GROW_CURVE_ATTACK_202": 8.97, + "GROW_CURVE_ATTACK_203": 9.866, + "GROW_CURVE_ATTACK_204": 7.005, + "GROW_CURVE_ATTACK_205": 5.923, + "GROW_CURVE_CRITICAL_201": 4.392, + "GROW_CURVE_ATTACK_301": 8.782, + "GROW_CURVE_ATTACK_302": 9.807, + "GROW_CURVE_ATTACK_303": 10.765, + "GROW_CURVE_ATTACK_304": 7.682, + "GROW_CURVE_ATTACK_305": 6.501, + "GROW_CURVE_CRITICAL_301": 4.392, + } + }, + "87": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.14, + "GROW_CURVE_ATTACK_102": 8.068, + "GROW_CURVE_ATTACK_103": 8.944, + "GROW_CURVE_ATTACK_104": 6.156, + "GROW_CURVE_ATTACK_105": 5.111, + "GROW_CURVE_CRITICAL_101": 4.392, + "GROW_CURVE_ATTACK_201": 8.101, + "GROW_CURVE_ATTACK_202": 9.067, + "GROW_CURVE_ATTACK_203": 9.975, + "GROW_CURVE_ATTACK_204": 7.072, + "GROW_CURVE_ATTACK_205": 5.975, + "GROW_CURVE_CRITICAL_201": 4.392, + "GROW_CURVE_ATTACK_301": 8.879, + "GROW_CURVE_ATTACK_302": 9.919, + "GROW_CURVE_ATTACK_303": 10.892, + "GROW_CURVE_ATTACK_304": 7.764, + "GROW_CURVE_ATTACK_305": 6.565, + "GROW_CURVE_CRITICAL_301": 4.392, + } + }, + "88": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.209, + "GROW_CURVE_ATTACK_102": 8.15, + "GROW_CURVE_ATTACK_103": 9.039, + "GROW_CURVE_ATTACK_104": 6.211, + "GROW_CURVE_ATTACK_105": 5.151, + "GROW_CURVE_CRITICAL_101": 4.392, + "GROW_CURVE_ATTACK_201": 8.183, + "GROW_CURVE_ATTACK_202": 9.163, + "GROW_CURVE_ATTACK_203": 10.085, + "GROW_CURVE_ATTACK_204": 7.14, + "GROW_CURVE_ATTACK_205": 6.027, + "GROW_CURVE_CRITICAL_201": 4.392, + "GROW_CURVE_ATTACK_301": 8.977, + "GROW_CURVE_ATTACK_302": 10.032, + "GROW_CURVE_ATTACK_303": 11.018, + "GROW_CURVE_ATTACK_304": 7.846, + "GROW_CURVE_ATTACK_305": 6.63, + "GROW_CURVE_CRITICAL_301": 4.392, + } + }, + "89": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.277, + "GROW_CURVE_ATTACK_102": 8.232, + "GROW_CURVE_ATTACK_103": 9.134, + "GROW_CURVE_ATTACK_104": 6.265, + "GROW_CURVE_ATTACK_105": 5.19, + "GROW_CURVE_CRITICAL_101": 4.392, + "GROW_CURVE_ATTACK_201": 8.266, + "GROW_CURVE_ATTACK_202": 9.26, + "GROW_CURVE_ATTACK_203": 10.195, + "GROW_CURVE_ATTACK_204": 7.208, + "GROW_CURVE_ATTACK_205": 6.078, + "GROW_CURVE_CRITICAL_201": 4.392, + "GROW_CURVE_ATTACK_301": 9.075, + "GROW_CURVE_ATTACK_302": 10.145, + "GROW_CURVE_ATTACK_303": 11.145, + "GROW_CURVE_ATTACK_304": 7.928, + "GROW_CURVE_ATTACK_305": 6.695, + "GROW_CURVE_CRITICAL_301": 4.392, + } + }, + "90": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.346, + "GROW_CURVE_ATTACK_102": 8.314, + "GROW_CURVE_ATTACK_103": 9.229, + "GROW_CURVE_ATTACK_104": 6.32, + "GROW_CURVE_ATTACK_105": 5.229, + "GROW_CURVE_CRITICAL_101": 4.594, + "GROW_CURVE_ATTACK_201": 8.349, + "GROW_CURVE_ATTACK_202": 9.356, + "GROW_CURVE_ATTACK_203": 10.305, + "GROW_CURVE_ATTACK_204": 7.275, + "GROW_CURVE_ATTACK_205": 6.13, + "GROW_CURVE_CRITICAL_201": 4.594, + "GROW_CURVE_ATTACK_301": 9.173, + "GROW_CURVE_ATTACK_302": 10.258, + "GROW_CURVE_ATTACK_303": 11.272, + "GROW_CURVE_ATTACK_304": 8.01, + "GROW_CURVE_ATTACK_305": 6.76, + "GROW_CURVE_CRITICAL_301": 4.594, + } + }, + "91": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.415, + "GROW_CURVE_ATTACK_102": 8.396, + "GROW_CURVE_ATTACK_103": 9.324, + "GROW_CURVE_ATTACK_104": 6.374, + "GROW_CURVE_ATTACK_105": 5.269, + "GROW_CURVE_CRITICAL_101": 4.594, + "GROW_CURVE_ATTACK_201": 8.431, + "GROW_CURVE_ATTACK_202": 9.453, + "GROW_CURVE_ATTACK_203": 10.414, + "GROW_CURVE_ATTACK_204": 7.343, + "GROW_CURVE_ATTACK_205": 6.182, + "GROW_CURVE_CRITICAL_201": 4.594, + "GROW_CURVE_ATTACK_301": 9.271, + "GROW_CURVE_ATTACK_302": 10.371, + "GROW_CURVE_ATTACK_303": 11.399, + "GROW_CURVE_ATTACK_304": 8.092, + "GROW_CURVE_ATTACK_305": 6.825, + "GROW_CURVE_CRITICAL_301": 4.594, + } + }, + "92": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.483, + "GROW_CURVE_ATTACK_102": 8.478, + "GROW_CURVE_ATTACK_103": 9.418, + "GROW_CURVE_ATTACK_104": 6.428, + "GROW_CURVE_ATTACK_105": 5.308, + "GROW_CURVE_CRITICAL_101": 4.594, + "GROW_CURVE_ATTACK_201": 8.514, + "GROW_CURVE_ATTACK_202": 9.55, + "GROW_CURVE_ATTACK_203": 10.524, + "GROW_CURVE_ATTACK_204": 7.411, + "GROW_CURVE_ATTACK_205": 6.233, + "GROW_CURVE_CRITICAL_201": 4.594, + "GROW_CURVE_ATTACK_301": 9.37, + "GROW_CURVE_ATTACK_302": 10.485, + "GROW_CURVE_ATTACK_303": 11.527, + "GROW_CURVE_ATTACK_304": 8.174, + "GROW_CURVE_ATTACK_305": 6.89, + "GROW_CURVE_CRITICAL_301": 4.594, + } + }, + "93": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.552, + "GROW_CURVE_ATTACK_102": 8.561, + "GROW_CURVE_ATTACK_103": 9.513, + "GROW_CURVE_ATTACK_104": 6.483, + "GROW_CURVE_ATTACK_105": 5.347, + "GROW_CURVE_CRITICAL_101": 4.594, + "GROW_CURVE_ATTACK_201": 8.596, + "GROW_CURVE_ATTACK_202": 9.646, + "GROW_CURVE_ATTACK_203": 10.634, + "GROW_CURVE_ATTACK_204": 7.478, + "GROW_CURVE_ATTACK_205": 6.285, + "GROW_CURVE_CRITICAL_201": 4.594, + "GROW_CURVE_ATTACK_301": 9.468, + "GROW_CURVE_ATTACK_302": 10.598, + "GROW_CURVE_ATTACK_303": 11.654, + "GROW_CURVE_ATTACK_304": 8.257, + "GROW_CURVE_ATTACK_305": 6.955, + "GROW_CURVE_CRITICAL_301": 4.594, + } + }, + "94": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.621, + "GROW_CURVE_ATTACK_102": 8.643, + "GROW_CURVE_ATTACK_103": 9.608, + "GROW_CURVE_ATTACK_104": 6.537, + "GROW_CURVE_ATTACK_105": 5.386, + "GROW_CURVE_CRITICAL_101": 4.594, + "GROW_CURVE_ATTACK_201": 8.679, + "GROW_CURVE_ATTACK_202": 9.743, + "GROW_CURVE_ATTACK_203": 10.744, + "GROW_CURVE_ATTACK_204": 7.546, + "GROW_CURVE_ATTACK_205": 6.336, + "GROW_CURVE_CRITICAL_201": 4.594, + "GROW_CURVE_ATTACK_301": 9.567, + "GROW_CURVE_ATTACK_302": 10.712, + "GROW_CURVE_ATTACK_303": 11.782, + "GROW_CURVE_ATTACK_304": 8.339, + "GROW_CURVE_ATTACK_305": 7.02, + "GROW_CURVE_CRITICAL_301": 4.594, + } + }, + "95": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.689, + "GROW_CURVE_ATTACK_102": 8.725, + "GROW_CURVE_ATTACK_103": 9.704, + "GROW_CURVE_ATTACK_104": 6.591, + "GROW_CURVE_ATTACK_105": 5.425, + "GROW_CURVE_CRITICAL_101": 4.796, + "GROW_CURVE_ATTACK_201": 8.761, + "GROW_CURVE_ATTACK_202": 9.84, + "GROW_CURVE_ATTACK_203": 10.854, + "GROW_CURVE_ATTACK_204": 7.613, + "GROW_CURVE_ATTACK_205": 6.388, + "GROW_CURVE_CRITICAL_201": 4.796, + "GROW_CURVE_ATTACK_301": 9.666, + "GROW_CURVE_ATTACK_302": 10.826, + "GROW_CURVE_ATTACK_303": 11.91, + "GROW_CURVE_ATTACK_304": 8.422, + "GROW_CURVE_ATTACK_305": 7.085, + "GROW_CURVE_CRITICAL_301": 4.796, + } + }, + "96": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.758, + "GROW_CURVE_ATTACK_102": 8.807, + "GROW_CURVE_ATTACK_103": 9.799, + "GROW_CURVE_ATTACK_104": 6.646, + "GROW_CURVE_ATTACK_105": 5.464, + "GROW_CURVE_CRITICAL_101": 4.796, + "GROW_CURVE_ATTACK_201": 8.844, + "GROW_CURVE_ATTACK_202": 9.936, + "GROW_CURVE_ATTACK_203": 10.964, + "GROW_CURVE_ATTACK_204": 7.681, + "GROW_CURVE_ATTACK_205": 6.439, + "GROW_CURVE_CRITICAL_201": 4.796, + "GROW_CURVE_ATTACK_301": 9.765, + "GROW_CURVE_ATTACK_302": 10.94, + "GROW_CURVE_ATTACK_303": 12.038, + "GROW_CURVE_ATTACK_304": 8.505, + "GROW_CURVE_ATTACK_305": 7.151, + "GROW_CURVE_CRITICAL_301": 4.796, + } + }, + "97": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.827, + "GROW_CURVE_ATTACK_102": 8.89, + "GROW_CURVE_ATTACK_103": 9.894, + "GROW_CURVE_ATTACK_104": 6.7, + "GROW_CURVE_ATTACK_105": 5.503, + "GROW_CURVE_CRITICAL_101": 4.796, + "GROW_CURVE_ATTACK_201": 8.927, + "GROW_CURVE_ATTACK_202": 10.033, + "GROW_CURVE_ATTACK_203": 11.074, + "GROW_CURVE_ATTACK_204": 7.748, + "GROW_CURVE_ATTACK_205": 6.491, + "GROW_CURVE_CRITICAL_201": 4.796, + "GROW_CURVE_ATTACK_301": 9.864, + "GROW_CURVE_ATTACK_302": 11.054, + "GROW_CURVE_ATTACK_303": 12.166, + "GROW_CURVE_ATTACK_304": 8.588, + "GROW_CURVE_ATTACK_305": 7.216, + "GROW_CURVE_CRITICAL_301": 4.796, + } + }, + "98": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.895, + "GROW_CURVE_ATTACK_102": 8.972, + "GROW_CURVE_ATTACK_103": 9.989, + "GROW_CURVE_ATTACK_104": 6.754, + "GROW_CURVE_ATTACK_105": 5.542, + "GROW_CURVE_CRITICAL_101": 4.796, + "GROW_CURVE_ATTACK_201": 9.009, + "GROW_CURVE_ATTACK_202": 10.13, + "GROW_CURVE_ATTACK_203": 11.184, + "GROW_CURVE_ATTACK_204": 7.816, + "GROW_CURVE_ATTACK_205": 6.542, + "GROW_CURVE_CRITICAL_201": 4.796, + "GROW_CURVE_ATTACK_301": 9.963, + "GROW_CURVE_ATTACK_302": 11.168, + "GROW_CURVE_ATTACK_303": 12.295, + "GROW_CURVE_ATTACK_304": 8.671, + "GROW_CURVE_ATTACK_305": 7.282, + "GROW_CURVE_CRITICAL_301": 4.796, + } + }, + "99": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 7.964, + "GROW_CURVE_ATTACK_102": 9.054, + "GROW_CURVE_ATTACK_103": 10.084, + "GROW_CURVE_ATTACK_104": 6.808, + "GROW_CURVE_ATTACK_105": 5.58, + "GROW_CURVE_CRITICAL_101": 4.796, + "GROW_CURVE_ATTACK_201": 9.092, + "GROW_CURVE_ATTACK_202": 10.227, + "GROW_CURVE_ATTACK_203": 11.295, + "GROW_CURVE_ATTACK_204": 7.883, + "GROW_CURVE_ATTACK_205": 6.593, + "GROW_CURVE_CRITICAL_201": 4.796, + "GROW_CURVE_ATTACK_301": 10.062, + "GROW_CURVE_ATTACK_302": 11.283, + "GROW_CURVE_ATTACK_303": 12.424, + "GROW_CURVE_ATTACK_304": 8.754, + "GROW_CURVE_ATTACK_305": 7.347, + "GROW_CURVE_CRITICAL_301": 4.796, + } + }, + "100": { + "curveInfos": { + "GROW_CURVE_ATTACK_101": 8.033, + "GROW_CURVE_ATTACK_102": 9.137, + "GROW_CURVE_ATTACK_103": 10.18, + "GROW_CURVE_ATTACK_104": 6.862, + "GROW_CURVE_ATTACK_105": 5.619, + "GROW_CURVE_CRITICAL_101": 4.998, + "GROW_CURVE_ATTACK_201": 9.174, + "GROW_CURVE_ATTACK_202": 10.324, + "GROW_CURVE_ATTACK_203": 11.405, + "GROW_CURVE_ATTACK_204": 7.95, + "GROW_CURVE_ATTACK_205": 6.644, + "GROW_CURVE_CRITICAL_201": 4.998, + "GROW_CURVE_ATTACK_301": 10.162, + "GROW_CURVE_ATTACK_302": 11.397, + "GROW_CURVE_ATTACK_303": 12.552, + "GROW_CURVE_ATTACK_304": 8.837, + "GROW_CURVE_ATTACK_305": 7.413, + "GROW_CURVE_CRITICAL_301": 4.998, + } + }, +} diff --git a/GenshinUID/utils/map/name_covert.py b/GenshinUID/utils/map/name_covert.py new file mode 100644 index 00000000..35eadc3d --- /dev/null +++ b/GenshinUID/utils/map/name_covert.py @@ -0,0 +1,45 @@ +from .GS_MAP_PATH import ( + alias_data, + avatarId2Name, + avatarId2Star_data, + enName_to_avatarId_data, +) + + +async def avatar_id_to_name(avatar_id: str) -> str: + char_name = avatarId2Name[avatar_id] + return char_name + + +async def name_to_avatar_id(name: str) -> str: + avatar_id = '' + for i in avatarId2Name: + if avatarId2Name[i] == name: + avatar_id = i + break + return avatar_id + + +async def avatar_id_to_char_star(char_id: str) -> str: + char_star = avatarId2Star_data[str(char_id)] + return char_star + + +async def alias_to_char_name(char_name: str) -> str: + for i in alias_data: + if (char_name in i) or (char_name in alias_data[i]): + return i + return char_name + + +async def enName_to_avatarId(en_name: str) -> str: + avatar_id = enName_to_avatarId_data[en_name] + return avatar_id + + +async def avatarId_to_enName(avatarId: str) -> str: + for name in enName_to_avatarId_data: + if enName_to_avatarId_data[name] == avatarId: + return name + else: + return 'Ayaka' diff --git a/GenshinUID/utils/message.py b/GenshinUID/utils/message.py new file mode 100644 index 00000000..e20f1004 --- /dev/null +++ b/GenshinUID/utils/message.py @@ -0,0 +1,9 @@ +from typing import Any, Dict + +from gsuid_core.bot import Bot + + +async def send_diff_msg(bot: Bot, code: Any, data: Dict): + for retcode in data: + if code == retcode: + return await bot.send(data[retcode]) diff --git a/GenshinUID/utils/mys_api.py b/GenshinUID/utils/mys_api.py new file mode 100644 index 00000000..8ffdd916 --- /dev/null +++ b/GenshinUID/utils/mys_api.py @@ -0,0 +1,67 @@ +from typing import Dict, Literal, Optional + +from .database import active_sqla +from ..gsuid_utils.api.mys import MysApi +from ..genshinuid_config.gs_config import gsconfig + + +class _MysApi(MysApi): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + async def _pass(self, gt: str, ch: str, header: Dict): + # 警告:使用该服务(例如某RR等)需要注意风险问题 + # 本项目不以任何形式提供相关接口 + # 代码来源:GITHUB项目MIT开源 + _pass_api = gsconfig.get_config('_pass_API') + if _pass_api: + data = await self._mys_request( + url=f'{_pass_api}>={gt}&challenge={ch}', + method='GET', + header=header, + ) + if isinstance(data, int): + return None, None + else: + validate = data['data']['validate'] + ch = data['data']['challenge'] + else: + validate = None + + return validate, ch + + async def _upass(self, header: Dict): + raw_data = await self.get_upass_link(header) + if isinstance(raw_data, int): + return False + gt = raw_data['data']['gt'] + ch = raw_data['data']['challenge'] + + vl, ch = await self._pass(gt, ch, header) + + if vl: + await self.get_header_and_vl(header, ch, vl) + else: + return True + + async def get_ck( + self, uid: str, mode: Literal['OWNER', 'RANDOM'] = 'RANDOM' + ) -> Optional[str]: + for bot_id in active_sqla: + sqla = active_sqla[bot_id] + if mode == 'RANDOM': + return await sqla.get_random_cookie(uid) + else: + return await sqla.get_user_cookie(uid) + else: + return None + + async def get_stoken(self, uid: str) -> Optional[str]: + for bot_id in active_sqla: + sqla = active_sqla[bot_id] + return await sqla.get_user_stoken(uid) + else: + return None + + +mys_api = _MysApi() diff --git a/GenshinUID/utils/resource/RESOURCE_PATH.py b/GenshinUID/utils/resource/RESOURCE_PATH.py new file mode 100644 index 00000000..71f8836d --- /dev/null +++ b/GenshinUID/utils/resource/RESOURCE_PATH.py @@ -0,0 +1,52 @@ +import sys +from pathlib import Path + +MAIN_PATH = Path() / 'data' / 'GenshinUID' +sys.path.append(str(MAIN_PATH)) +CONFIG_PATH = MAIN_PATH / 'config.json' +RESOURCE_PATH = MAIN_PATH / 'resource' +WIKI_PATH = MAIN_PATH / 'wiki' +CU_BG_PATH = MAIN_PATH / 'bg' +CU_CHBG_PATH = MAIN_PATH / 'chbg' +WEAPON_PATH = RESOURCE_PATH / 'weapon' +GACHA_IMG_PATH = RESOURCE_PATH / 'gacha_img' +CHAR_PATH = RESOURCE_PATH / 'chars' +CHAR_STAND_PATH = RESOURCE_PATH / 'char_stand' +CHAR_SIDE_PATH = RESOURCE_PATH / 'char_side' +CHAR_NAMECARD_PATH = RESOURCE_PATH / 'char_namecard' +REL_PATH = RESOURCE_PATH / 'reliquaries' +ICON_PATH = RESOURCE_PATH / 'icon' +TEMP_PATH = RESOURCE_PATH / 'temp' +CARD_PATH = RESOURCE_PATH / 'card' +GUIDE_PATH = WIKI_PATH / 'guide' +REF_PATH = WIKI_PATH / 'ref' +TEXT2D_PATH = Path(__file__).parent / 'texture2d' + +PLAYER_PATH = MAIN_PATH / 'players' + + +def init_dir(): + for i in [ + MAIN_PATH, + RESOURCE_PATH, + WIKI_PATH, + WEAPON_PATH, + GACHA_IMG_PATH, + CHAR_PATH, + CHAR_STAND_PATH, + CHAR_SIDE_PATH, + CHAR_NAMECARD_PATH, + REL_PATH, + ICON_PATH, + TEXT2D_PATH, + PLAYER_PATH, + TEMP_PATH, + CARD_PATH, + GUIDE_PATH, + CU_BG_PATH, + CU_CHBG_PATH, + ]: + i.mkdir(parents=True, exist_ok=True) + + +init_dir() diff --git a/GenshinUID/utils/resource/download_all_resource.py b/GenshinUID/utils/resource/download_all_resource.py new file mode 100644 index 00000000..7341df8c --- /dev/null +++ b/GenshinUID/utils/resource/download_all_resource.py @@ -0,0 +1,11 @@ +import asyncio + +from .download_from_miniggicu import download_all_file_from_miniggicu + + +async def download_all_resource(): + ret = await asyncio.gather(download_all_file_from_miniggicu()) + ret = [str(x) for x in ret if x] + if ret: + return '\n'.join(ret) + return '全部资源下载完成!' diff --git a/GenshinUID/utils/resource/download_from_miniggicu.py b/GenshinUID/utils/resource/download_from_miniggicu.py new file mode 100644 index 00000000..7468483a --- /dev/null +++ b/GenshinUID/utils/resource/download_from_miniggicu.py @@ -0,0 +1,136 @@ +import os +import asyncio +from pathlib import Path +from typing import List, Tuple + +from bs4 import BeautifulSoup +from nonebot.log import logger +from aiohttp.client import ClientSession + +from .download_url import PATH_MAP, download_file + +MINIGG_FILE = 'https://file.microgg.cn/KimigaiiWuyi/resource/' +NAMECARD_FILE = MINIGG_FILE + 'char_namecard' +SIDE_FILE = MINIGG_FILE + 'char_side' +STAND_FILE = MINIGG_FILE + 'char_stand' +CHARS_FILE = MINIGG_FILE + 'chars' +GACHA_FILE = MINIGG_FILE + 'gacha_img' +ICON_FILE = MINIGG_FILE + 'icon' +REL_FILE = MINIGG_FILE + 'reliquaries' +WEAPON_FILE = MINIGG_FILE + 'weapon' +GUIDE_FILE = MINIGG_FILE + 'guide' + +FILE_TO_PATH = { + NAMECARD_FILE: 6, + SIDE_FILE: 3, + STAND_FILE: 2, + CHARS_FILE: 1, + GACHA_FILE: 4, + ICON_FILE: 8, + REL_FILE: 7, + WEAPON_FILE: 5, + GUIDE_FILE: 10, +} + +FILE_TO_NAME = { + NAMECARD_FILE: '角色名片', + SIDE_FILE: '角色侧视图', + STAND_FILE: '角色半身照', + CHARS_FILE: '角色头像', + GACHA_FILE: '角色立绘', + ICON_FILE: '图标', + REL_FILE: '圣遗物', + WEAPON_FILE: '武器', + GUIDE_FILE: '攻略', +} + + +async def _get_url(url: str, sess: ClientSession): + req = await sess.get(url=url) + return await req.read() + + +async def download_all_file_from_miniggicu(): + async def _download(tasks: List[asyncio.Task]): + failed_list.extend( + list(filter(lambda x: x is not None, await asyncio.gather(*tasks))) + ) + tasks.clear() + logger.info('[minigg.icu]下载完成!') + + failed_list: List[Tuple[str, int, str]] = [] + TASKS = [] + async with ClientSession() as sess: + for file in [ + NAMECARD_FILE, + SIDE_FILE, + STAND_FILE, + CHARS_FILE, + GACHA_FILE, + ICON_FILE, + REL_FILE, + WEAPON_FILE, + GUIDE_FILE, + ]: + base_data = await _get_url(file, sess) + content_bs = BeautifulSoup(base_data, 'lxml') + pre_data = content_bs.find_all('pre')[0] + data_list = pre_data.find_all('a') + size_list = [i for i in content_bs.strings] + logger.info( + f'[minigg.icu]数据库[{FILE_TO_NAME[file]}]中存在{len(data_list)}个内容!' + ) + temp_num = 0 + for index, data in enumerate(data_list): + if data['href'] == '../': + continue + url = f'{file}/{data["href"]}' + name = data.text + size = size_list[index * 2 + 6].split(' ')[-1] + size = size.replace('\r\n', '') + path = Path(PATH_MAP[FILE_TO_PATH[file]] / name) + if path.exists(): + is_diff = size == str(os.stat(path).st_size) + else: + is_diff = True + if ( + not path.exists() + or not os.stat(path).st_size + or not is_diff + ): + logger.info( + f'[minigg.icu]开始下载[{FILE_TO_NAME[file]}]_[{name}]...' + ) + temp_num += 1 + TASKS.append( + asyncio.wait_for( + download_file(url, FILE_TO_PATH[file], name, sess), + timeout=60, + ) + ) + # await download_file(url, FILE_TO_PATH[file], name) + if len(TASKS) >= 10: + await _download(TASKS) + else: + await _download(TASKS) + if temp_num == 0: + im = f'[minigg.icu]数据库[{FILE_TO_NAME[file]}]无需下载!' + else: + im = f'[minigg.icu]数据库[{FILE_TO_NAME[file]}]已下载{temp_num}个内容!' + temp_num = 0 + logger.info(im) + if failed_list: + logger.info(f'[minigg.icu]开始重新下载失败的{len(failed_list)}个文件...') + for url, file, name in failed_list: + TASKS.append( + asyncio.wait_for( + download_file(url, file, name, sess), + timeout=60, + ) + ) + if len(TASKS) >= 10: + await _download(TASKS) + else: + await _download(TASKS) + if count := len(failed_list): + logger.error(f'[minigg.icu]仍有{count}个文件未下载,请使用命令 `下载全部资源` 重新下载') diff --git a/GenshinUID/utils/resource/download_url.py b/GenshinUID/utils/resource/download_url.py new file mode 100644 index 00000000..6d97ee1d --- /dev/null +++ b/GenshinUID/utils/resource/download_url.py @@ -0,0 +1,89 @@ +from typing import Tuple, Optional + +import aiofiles +from nonebot.log import logger +from aiohttp.client import ClientSession +from aiohttp.client_exceptions import ClientConnectorError + +from .RESOURCE_PATH import ( + REL_PATH, + CARD_PATH, + CHAR_PATH, + ICON_PATH, + WIKI_PATH, + GUIDE_PATH, + WEAPON_PATH, + CHAR_SIDE_PATH, + GACHA_IMG_PATH, + CHAR_STAND_PATH, + CHAR_NAMECARD_PATH, +) + +PATH_MAP = { + 1: CHAR_PATH, + 2: CHAR_STAND_PATH, + 3: CHAR_SIDE_PATH, + 4: GACHA_IMG_PATH, + 5: WEAPON_PATH, + 6: CHAR_NAMECARD_PATH, + 7: REL_PATH, + 8: ICON_PATH, + 9: CARD_PATH, + 10: GUIDE_PATH, + 11: WIKI_PATH, +} + + +async def download( + url: str, + path: int, + name: str, +) -> Optional[Tuple[str, int, str]]: + """ + :说明: + 下载URL保存入目录 + :参数: + * url: `str` + 资源下载地址。 + * path: `int` + 资源保存路径 + ''' + 1: CHAR_PATH, + 2: CHAR_STAND_PATH, + 3: CHAR_SIDE_PATH, + 4: GACHA_IMG_PATH, + 5: WEAPON_PATH, + 6: CHAR_NAMECARD_PATH, + 7: REL_PATH, + 8: ICON_PATH, + 9: CARD_PATH, + 10: GUIDE_PATH, + 11: WIKI_PATH, + ''' + * name: `str` + 资源保存名称 + :返回(失败才会有返回值): + url: `str` + path: `int` + name: `str` + """ + async with ClientSession() as sess: + return await download_file(url, path, name, sess) + + +async def download_file( + url: str, + path: int, + name: str, + sess: Optional[ClientSession] = None, +) -> Optional[Tuple[str, int, str]]: + if sess is None: + sess = ClientSession() + try: + async with sess.get(url) as res: + content = await res.read() + except ClientConnectorError: + logger.warning(f"[minigg.icu]{name}下载失败") + return url, path, name + async with aiofiles.open(PATH_MAP[path] / name, "wb") as f: + await f.write(content) diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_0.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_0.png new file mode 100644 index 00000000..e61e71bb Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_0.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_1.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_1.png new file mode 100644 index 00000000..a57a0c12 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_1.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_10.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_10.png new file mode 100644 index 00000000..012c0acc Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_10.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_2.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_2.png new file mode 100644 index 00000000..2a46c95f Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_2.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_3.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_3.png new file mode 100644 index 00000000..02a1453c Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_3.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_4.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_4.png new file mode 100644 index 00000000..8d89a72e Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_4.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_5.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_5.png new file mode 100644 index 00000000..e37c107f Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_5.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_6.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_6.png new file mode 100644 index 00000000..af9c67dd Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_6.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_7.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_7.png new file mode 100644 index 00000000..1c1a0ab6 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_7.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_8.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_8.png new file mode 100644 index 00000000..57760c3a Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_8.png differ diff --git a/GenshinUID/utils/resource/texture2d/fetter/fetter_9.png b/GenshinUID/utils/resource/texture2d/fetter/fetter_9.png new file mode 100644 index 00000000..b3044545 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/fetter/fetter_9.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_0.png b/GenshinUID/utils/resource/texture2d/level/level_0.png new file mode 100644 index 00000000..2306607d Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_0.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_1.png b/GenshinUID/utils/resource/texture2d/level/level_1.png new file mode 100644 index 00000000..fa4ab71a Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_1.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_10.png b/GenshinUID/utils/resource/texture2d/level/level_10.png new file mode 100644 index 00000000..48f1f518 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_10.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_11.png b/GenshinUID/utils/resource/texture2d/level/level_11.png new file mode 100644 index 00000000..9c8e5d11 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_11.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_12.png b/GenshinUID/utils/resource/texture2d/level/level_12.png new file mode 100644 index 00000000..76186cf6 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_12.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_2.png b/GenshinUID/utils/resource/texture2d/level/level_2.png new file mode 100644 index 00000000..f1a485bb Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_2.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_3.png b/GenshinUID/utils/resource/texture2d/level/level_3.png new file mode 100644 index 00000000..868b82d4 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_3.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_4.png b/GenshinUID/utils/resource/texture2d/level/level_4.png new file mode 100644 index 00000000..3093bbd7 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_4.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_5.png b/GenshinUID/utils/resource/texture2d/level/level_5.png new file mode 100644 index 00000000..949d3f21 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_5.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_6.png b/GenshinUID/utils/resource/texture2d/level/level_6.png new file mode 100644 index 00000000..afd4dc20 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_6.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_7.png b/GenshinUID/utils/resource/texture2d/level/level_7.png new file mode 100644 index 00000000..0a45cfb6 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_7.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_8.png b/GenshinUID/utils/resource/texture2d/level/level_8.png new file mode 100644 index 00000000..e4f083a7 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_8.png differ diff --git a/GenshinUID/utils/resource/texture2d/level/level_9.png b/GenshinUID/utils/resource/texture2d/level/level_9.png new file mode 100644 index 00000000..c5d38766 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/level/level_9.png differ diff --git a/GenshinUID/utils/resource/texture2d/mask.png b/GenshinUID/utils/resource/texture2d/mask.png new file mode 100644 index 00000000..d4258285 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/mask.png differ diff --git a/GenshinUID/utils/resource/texture2d/slider_bar.png b/GenshinUID/utils/resource/texture2d/slider_bar.png new file mode 100644 index 00000000..6e633246 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/slider_bar.png differ diff --git a/GenshinUID/utils/resource/texture2d/talent/talent_0.png b/GenshinUID/utils/resource/texture2d/talent/talent_0.png new file mode 100644 index 00000000..ee8647e2 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/talent/talent_0.png differ diff --git a/GenshinUID/utils/resource/texture2d/talent/talent_1.png b/GenshinUID/utils/resource/texture2d/talent/talent_1.png new file mode 100644 index 00000000..d294d7c6 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/talent/talent_1.png differ diff --git a/GenshinUID/utils/resource/texture2d/talent/talent_2.png b/GenshinUID/utils/resource/texture2d/talent/talent_2.png new file mode 100644 index 00000000..ea2f826c Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/talent/talent_2.png differ diff --git a/GenshinUID/utils/resource/texture2d/talent/talent_3.png b/GenshinUID/utils/resource/texture2d/talent/talent_3.png new file mode 100644 index 00000000..79d3f728 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/talent/talent_3.png differ diff --git a/GenshinUID/utils/resource/texture2d/talent/talent_4.png b/GenshinUID/utils/resource/texture2d/talent/talent_4.png new file mode 100644 index 00000000..f35b063a Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/talent/talent_4.png differ diff --git a/GenshinUID/utils/resource/texture2d/talent/talent_5.png b/GenshinUID/utils/resource/texture2d/talent/talent_5.png new file mode 100644 index 00000000..11c1fe3f Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/talent/talent_5.png differ diff --git a/GenshinUID/utils/resource/texture2d/talent/talent_6.png b/GenshinUID/utils/resource/texture2d/talent/talent_6.png new file mode 100644 index 00000000..e2bd5233 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/talent/talent_6.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon/weapon_bg1.png b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg1.png new file mode 100644 index 00000000..44fd173d Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg1.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon/weapon_bg2.png b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg2.png new file mode 100644 index 00000000..78d10a32 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg2.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon/weapon_bg3.png b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg3.png new file mode 100644 index 00000000..8887b5c4 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg3.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon/weapon_bg4.png b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg4.png new file mode 100644 index 00000000..0e46152d Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg4.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon/weapon_bg5.png b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg5.png new file mode 100644 index 00000000..22a5d634 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon/weapon_bg5.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_1.png b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_1.png new file mode 100644 index 00000000..fb9fb36b Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_1.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_2.png b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_2.png new file mode 100644 index 00000000..092eee5e Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_2.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_3.png b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_3.png new file mode 100644 index 00000000..9f74b4a7 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_3.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_4.png b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_4.png new file mode 100644 index 00000000..eec6c977 Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_4.png differ diff --git a/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_5.png b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_5.png new file mode 100644 index 00000000..76cff79d Binary files /dev/null and b/GenshinUID/utils/resource/texture2d/weapon_affix/weapon_affix_5.png differ diff --git a/GenshinUID/version.py b/GenshinUID/version.py new file mode 100644 index 00000000..47be3ce1 --- /dev/null +++ b/GenshinUID/version.py @@ -0,0 +1,2 @@ +GenshinUID_version = '3.1.0' +Genshin_version = '3.4.0' diff --git a/__init__.py b/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/__nest__.py b/__nest__.py new file mode 100644 index 00000000..e69de29b diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..5aea6020 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2425 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + +[[package]] +name = "aiofiles" +version = "23.1.0" +description = "File support for asyncio." +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "aiofiles-23.1.0-py3-none-any.whl", hash = "sha256:9312414ae06472eb6f1d163f555e466a23aed1c8f60c30cccf7121dba2e53eb2"}, + {file = "aiofiles-23.1.0.tar.gz", hash = "sha256:edd247df9a19e0db16534d4baaf536d6609a43e1de5401d7a4c1c148753a1635"}, +] + +[[package]] +name = "aiohttp" +version = "3.8.4" +description = "Async http client/server framework (asyncio)" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1"}, + {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a"}, + {file = "aiohttp-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea"}, + {file = "aiohttp-3.8.4-cp310-cp310-win32.whl", hash = "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1"}, + {file = "aiohttp-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f"}, + {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4"}, + {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4"}, + {file = "aiohttp-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24"}, + {file = "aiohttp-3.8.4-cp311-cp311-win32.whl", hash = "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d"}, + {file = "aiohttp-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc"}, + {file = "aiohttp-3.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff"}, + {file = "aiohttp-3.8.4-cp36-cp36m-win32.whl", hash = "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777"}, + {file = "aiohttp-3.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e"}, + {file = "aiohttp-3.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241"}, + {file = "aiohttp-3.8.4-cp37-cp37m-win32.whl", hash = "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a"}, + {file = "aiohttp-3.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480"}, + {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f"}, + {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15"}, + {file = "aiohttp-3.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d"}, + {file = "aiohttp-3.8.4-cp38-cp38-win32.whl", hash = "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54"}, + {file = "aiohttp-3.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f"}, + {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed"}, + {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567"}, + {file = "aiohttp-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4"}, + {file = "aiohttp-3.8.4-cp39-cp39-win32.whl", hash = "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a"}, + {file = "aiohttp-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04"}, + {file = "aiohttp-3.8.4.tar.gz", hash = "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<4.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "cchardet"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "aiosqlite" +version = "0.18.0" +description = "asyncio bridge to the standard sqlite3 module" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosqlite-0.18.0-py3-none-any.whl", hash = "sha256:c3511b841e3a2c5614900ba1d179f366826857586f78abd75e7cbeb88e75a557"}, + {file = "aiosqlite-0.18.0.tar.gz", hash = "sha256:faa843ef5fb08bafe9a9b3859012d3d9d6f77ce3637899de20606b7fc39aa213"}, +] + +[[package]] +name = "anyio" +version = "3.6.2" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" +optional = false +python-versions = ">=3.6.2" +files = [ + {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, + {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] +trio = ["trio (>=0.16,<0.22)"] + +[[package]] +name = "apscheduler" +version = "3.10.0" +description = "In-process task scheduler with Cron-like capabilities" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "APScheduler-3.10.0-py3-none-any.whl", hash = "sha256:575299f20073c60a2cc9d4fa5906024cdde33c5c0ce6087c4e3c14be3b50fdd4"}, + {file = "APScheduler-3.10.0.tar.gz", hash = "sha256:a49fc23269218416f0e41890eea7a75ed6b284f10630dcfe866ab659621a3696"}, +] + +[package.dependencies] +pytz = "*" +setuptools = ">=0.7" +six = ">=1.4.0" +tzlocal = ">=2.0,<3.0.0 || >=4.0.0" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +gevent = ["gevent"] +mongodb = ["pymongo (>=3.0)"] +redis = ["redis (>=3.0)"] +rethinkdb = ["rethinkdb (>=2.4.0)"] +sqlalchemy = ["sqlalchemy (>=1.4)"] +testing = ["pytest", "pytest-asyncio", "pytest-cov", "pytest-tornado5"] +tornado = ["tornado (>=4.3)"] +twisted = ["twisted"] +zookeeper = ["kazoo"] + +[[package]] +name = "asgiref" +version = "3.6.0" +description = "ASGI specs, helper code, and adapters" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "asgiref-3.6.0-py3-none-any.whl", hash = "sha256:71e68008da809b957b7ee4b43dbccff33d1b23519fb8344e33f049897077afac"}, + {file = "asgiref-3.6.0.tar.gz", hash = "sha256:9567dfe7bd8d3c8c892227827c41cce860b368104c3431da67a0c5a65a949506"}, +] + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + +[[package]] +name = "async-asgi-testclient" +version = "1.4.11" +description = "Async client for testing ASGI web applications" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "async-asgi-testclient-1.4.11.tar.gz", hash = "sha256:4449ac85d512d661998ec61f91c9ae01851639611d748d81ae7f816736551792"}, +] + +[package.dependencies] +multidict = ">=4.0,<7.0" +requests = ">=2.21,<3.0" + +[[package]] +name = "async-timeout" +version = "4.0.2" +description = "Timeout context manager for asyncio programs" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, + {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, +] + +[[package]] +name = "attrs" +version = "22.2.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] + +[[package]] +name = "backports-zoneinfo" +version = "0.2.1" +description = "Backport of the standard library zoneinfo module" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, + {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, +] + +[package.extras] +tzdata = ["tzdata"] + +[[package]] +name = "bcrypt" +version = "4.0.1" +description = "Modern password hashing for your software and your servers" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e"}, + {file = "bcrypt-4.0.1-cp36-abi3-win32.whl", hash = "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab"}, + {file = "bcrypt-4.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71"}, + {file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + +[[package]] +name = "beautifulsoup4" +version = "4.11.2" +description = "Screen-scraping library" +category = "main" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, + {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "black" +version = "22.12.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, + {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, + {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, + {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, + {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, + {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, + {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, + {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, + {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, + {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, + {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, + {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2022.12.7" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.0.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, + {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, + {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, + {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, + {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, + {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, + {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, + {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, +] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "distlib" +version = "0.3.6" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, +] + +[[package]] +name = "dnspython" +version = "2.3.0" +description = "DNS toolkit" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"}, + {file = "dnspython-2.3.0.tar.gz", hash = "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9"}, +] + +[package.extras] +curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] +dnssec = ["cryptography (>=2.6,<40.0)"] +doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.11.0)"] +doq = ["aioquic (>=0.9.20)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.23)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + +[[package]] +name = "email-validator" +version = "1.3.1" +description = "A robust email address syntax and deliverability validation library." +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "email_validator-1.3.1-py2.py3-none-any.whl", hash = "sha256:49a72f5fa6ed26be1c964f0567d931d10bf3fdeeacdf97bc26ef1cd2a44e0bda"}, + {file = "email_validator-1.3.1.tar.gz", hash = "sha256:d178c5c6fa6c6824e9b04f199cf23e79ac15756786573c190d2ad13089411ad2"}, +] + +[package.dependencies] +dnspython = ">=1.15.0" +idna = ">=2.0.0" + +[[package]] +name = "et-xmlfile" +version = "1.1.0" +description = "An implementation of lxml.xmlfile for the standard library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, + {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.0" +description = "Backport of PEP 654 (exception groups)" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, + {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.92.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi-0.92.0-py3-none-any.whl", hash = "sha256:ae7b97c778e2f2ec3fb3cb4fb14162129411d99907fb71920f6d69a524340ebf"}, + {file = "fastapi-0.92.0.tar.gz", hash = "sha256:023a0f5bd2c8b2609014d3bba1e14a1d7df96c6abea0a73070621c9862b9a4de"}, +] + +[package.dependencies] +pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" +starlette = ">=0.25.0,<0.26.0" + +[package.extras] +all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"] +doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer[all] (>=0.6.1,<0.8.0)"] +test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.10.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.6.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] + +[[package]] +name = "fastapi-amis-admin" +version = "0.4.3" +description = "FastAPI-Amis-Admin is a high-performance, efficient and easily extensible FastAPI admin framework. Inspired by Django-admin, and has as many powerful functions as Django-admin. " +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi_amis_admin-0.4.3-py3-none-any.whl", hash = "sha256:0f244020bb79971253054908267c7f59e6fe3ecdfe73d99fecf9d0e99cc2be52"}, + {file = "fastapi_amis_admin-0.4.3.tar.gz", hash = "sha256:914b82abb653d1fda318b59451ed88d9740cce1d5915cc05c06b1d8fee98d9d1"}, +] + +[package.dependencies] +aiofiles = ">=0.17.0" +fastapi = ">=0.68.0" +python-multipart = ">=0.0.5" +sqlalchemy-database = ">=0.1.0,<0.2.0" +sqlmodel = ">=0.0.7" + +[package.extras] +all = ["fastapi-amis-admin[dev]"] +cli = ["fastapi-amis-admin-cli (>=0.1.0,<0.2.0)"] +dev = ["fastapi-amis-admin[test]", "pre-commit (>=2.20.0)"] +standard = ["fastapi-amis-admin-cli (>=0.1.0,<0.2.0)", "uvicorn[standard] (>=0.19.0,<1.0)"] +test = ["aiosqlite (>=0.15.0)", "fastapi-amis-admin[standard]", "httpx (>=0.23.0,<1.0)", "jinja2 (>=2.11.2,<4.0.0)", "pytest (>=6.2.4,<7.0.0)", "pytest-asyncio (>=0.17)", "requests (>=2.28.1)", "ujson (>=4.0.1)"] + +[[package]] +name = "fastapi-user-auth" +version = "0.4.3" +description = "FastAPI-User-Auth is a simple and powerful FastAPI user RBAC authentication and authorization library. Based on FastAPI-Amis-Admin and provides a freely extensible visual management interface." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi_user_auth-0.4.3-py3-none-any.whl", hash = "sha256:4c8dae90e64e00d9a8b2a5caf47c6174d5313c9fee3b61c17e532049fbca4c9e"}, + {file = "fastapi_user_auth-0.4.3.tar.gz", hash = "sha256:63cd2430b88cc158244206150b313da2fa5a97f8f8cebb3477d93a7e92b5975f"}, +] + +[package.dependencies] +bcrypt = ">=4.0.0" +email-validator = "*" +fastapi-amis-admin = ">=0.4.0,<0.5.0" +passlib = ">=1.7.4" +pydantic = ">=1.9" +sqlmodelx = ">=0.0.2" + +[package.extras] +all = ["fastapi-user-auth[dev]"] +dev = ["fastapi-user-auth[test]", "pre-commit (>=2.20.0)"] +jwt = ["python-jose (==3.3.0)"] +redis = ["aioredis"] +test = ["aiosqlite (>=0.15.0)", "jinja2 (>=2.11.2,<4.0.0)", "pytest (>=6.2.4)", "pytest-asyncio (>=0.17)", "python-jose (==3.3.0)", "requests (>=2.28.1)", "ujson (>=5.5.0)", "uvicorn[standard] (>=0.19.0,<1.0)"] + +[[package]] +name = "filelock" +version = "3.9.0" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, + {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, +] + +[package.extras] +docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] +testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "flake8" +version = "6.0.0" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, + {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.10.0,<2.11.0" +pyflakes = ">=3.0.0,<3.1.0" + +[[package]] +name = "frozenlist" +version = "1.3.3" +description = "A list-like structure which implements collections.abc.MutableSequence" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"}, + {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"}, + {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"}, + {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"}, + {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"}, + {file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"}, + {file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"}, + {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"}, + {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"}, + {file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"}, + {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"}, + {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"}, + {file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"}, + {file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"}, + {file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"}, + {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"}, + {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"}, + {file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"}, + {file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"}, + {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"}, + {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"}, + {file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"}, + {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"}, + {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"}, + {file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"}, + {file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"}, + {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"}, + {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"}, + {file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"}, + {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"}, + {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"}, + {file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"}, + {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, + {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, +] + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[[package]] +name = "greenlet" +version = "2.0.2" +description = "Lightweight in-process concurrent programming" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, + {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, + {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, + {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, + {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, + {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, + {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, + {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, + {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, + {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, + {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, + {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, + {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, + {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, + {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, + {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, + {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, + {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, + {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, + {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, + {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, + {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, + {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, + {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, + {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, + {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, + {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, + {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, + {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, + {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, + {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, + {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, + {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, + {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, + {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, + {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, + {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, + {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, +] + +[package.extras] +docs = ["Sphinx", "docutils (<0.18)"] +test = ["objgraph", "psutil"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "0.16.3" +description = "A minimal low-level HTTP client." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"}, + {file = "httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"}, +] + +[package.dependencies] +anyio = ">=3.0,<5.0" +certifi = "*" +h11 = ">=0.13,<0.15" +sniffio = ">=1.0.0,<2.0.0" + +[package.extras] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] + +[[package]] +name = "httpx" +version = "0.23.3" +description = "The next generation HTTP client." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "httpx-0.23.3-py3-none-any.whl", hash = "sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6"}, + {file = "httpx-0.23.3.tar.gz", hash = "sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9"}, +] + +[package.dependencies] +certifi = "*" +httpcore = ">=0.15.0,<0.17.0" +rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<13)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] + +[[package]] +name = "identify" +version = "2.5.18" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"}, + {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "libcst" +version = "0.4.9" +description = "A concrete syntax tree with AST-like properties for Python 3.5, 3.6, 3.7, 3.8, 3.9, and 3.10 programs." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "libcst-0.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f9e42085c403e22201e5c41e707ef73e4ea910ad9fc67983ceee2368097f54e"}, + {file = "libcst-0.4.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1266530bf840cc40633a04feb578bb4cac1aa3aea058cc3729e24eab09a8e996"}, + {file = "libcst-0.4.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9679177391ccb9b0cdde3185c22bf366cb672457c4b7f4031fcb3b5e739fbd6"}, + {file = "libcst-0.4.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d67bc87e0d8db9434f2ea063734938a320f541f4c6da1074001e372f840f385d"}, + {file = "libcst-0.4.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e316da5a126f2a9e1d7680f95f907b575f082a35e2f8bd5620c59b2aaaebfe0a"}, + {file = "libcst-0.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:7415569ab998a85b0fc9af3a204611ea7fadb2d719a12532c448f8fc98f5aca4"}, + {file = "libcst-0.4.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:15ded11ff7f4572f91635e02b519ae959f782689fdb4445bbebb7a3cc5c71d75"}, + {file = "libcst-0.4.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b266867b712a120fad93983de432ddb2ccb062eb5fd2bea748c9a94cb200c36"}, + {file = "libcst-0.4.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045b3b0b06413cdae6e9751b5f417f789ffa410f2cb2815e3e0e0ea6bef10ec0"}, + {file = "libcst-0.4.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e799add8fba4976628b9c1a6768d73178bf898f0ed1bd1322930c2d3db9063ba"}, + {file = "libcst-0.4.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10479371d04ee8dc978c889c1774bbf6a83df88fa055fcb0159a606f6679c565"}, + {file = "libcst-0.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:7a98286cbbfa90a42d376900c875161ad02a5a2a6b7c94c0f7afd9075e329ce4"}, + {file = "libcst-0.4.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:400166fc4efb9aa06ce44498d443aa78519082695b1894202dd73cd507d2d712"}, + {file = "libcst-0.4.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46123863fba35cc84f7b54dd68826419cabfd9504d8a101c7fe3313ea03776f9"}, + {file = "libcst-0.4.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27be8db54c0e5fe440021a771a38b81a7dbc23cd630eb8b0e9828b7717f9b702"}, + {file = "libcst-0.4.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:132bec627b064bd567e7e4cd6c89524d02842151eb0d8f5f3f7ffd2579ec1b09"}, + {file = "libcst-0.4.9-cp37-cp37m-win_amd64.whl", hash = "sha256:596860090aeed3ee6ad1e59c35c6c4110a57e4e896abf51b91cae003ec720a11"}, + {file = "libcst-0.4.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4487608258109f774300466d4ca97353df29ae6ac23d1502e13e5509423c9d5"}, + {file = "libcst-0.4.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa53993e9a2853efb3ed3605da39f2e7125df6430f613eb67ef886c1ce4f94b5"}, + {file = "libcst-0.4.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6ce794483d4c605ef0f5b199a49fb6996f9586ca938b7bfef213bd13858d7ab"}, + {file = "libcst-0.4.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:786e562b54bbcd17a060d1244deeef466b7ee07fe544074c252c4a169e38f1ee"}, + {file = "libcst-0.4.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:794250d2359edd518fb698e5d21c38a5bdfc5e4a75d0407b4c19818271ce6742"}, + {file = "libcst-0.4.9-cp38-cp38-win_amd64.whl", hash = "sha256:76491f67431318c3145442e97dddcead7075b074c59eac51be7cc9e3fffec6ee"}, + {file = "libcst-0.4.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3cf48d7aec6dc54b02aec0b1bb413c5bb3b02d852fd6facf1f05c7213e61a176"}, + {file = "libcst-0.4.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b3348c6b7711a5235b133bd8e11d22e903c388db42485b8ceb5f2aa0fae9b9f"}, + {file = "libcst-0.4.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e33b66762efaa014c38819efae5d8f726dd823e32d5d691035484411d2a2a69"}, + {file = "libcst-0.4.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1350d375d3fb9b20a6cf10c09b2964baca9be753a033dde7c1aced49d8e58387"}, + {file = "libcst-0.4.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3822056dc13326082362db35b3f649e0f4a97e36ddb4e487441da8e0fb9db7b3"}, + {file = "libcst-0.4.9-cp39-cp39-win_amd64.whl", hash = "sha256:183636141b839aa35b639e100883813744523bc7c12528906621121731b28443"}, + {file = "libcst-0.4.9.tar.gz", hash = "sha256:01786c403348f76f274dbaf3888ae237ffb73e6ed6973e65eba5c1fc389861dd"}, +] + +[package.dependencies] +pyyaml = ">=5.2" +typing-extensions = ">=3.7.4.2" +typing-inspect = ">=0.4.0" + +[package.extras] +dev = ["Sphinx (>=5.1.1)", "black (==22.10.0)", "coverage (>=4.5.4)", "fixit (==0.1.1)", "flake8 (>=3.7.8,<5)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.2)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<0.14)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.9)", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.0.1)", "usort (==1.0.5)"] + +[[package]] +name = "loguru" +version = "0.6.0" +description = "Python logging made (stupidly) simple" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, + {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "isort (>=5.1.1)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.9.0)"] + +[[package]] +name = "lxml" +version = "4.9.2" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +files = [ + {file = "lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"}, + {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"}, + {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"}, + {file = "lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"}, + {file = "lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"}, + {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"}, + {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"}, + {file = "lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"}, + {file = "lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"}, + {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"}, + {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"}, + {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"}, + {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"}, + {file = "lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, + {file = "lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"}, + {file = "lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"}, + {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"}, + {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"}, + {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"}, + {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, + {file = "lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"}, + {file = "lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"}, + {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"}, + {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"}, + {file = "lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"}, + {file = "lxml-4.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5"}, + {file = "lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"}, + {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"}, + {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"}, + {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"}, + {file = "lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"}, + {file = "lxml-4.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3"}, + {file = "lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"}, + {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"}, + {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"}, + {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"}, + {file = "lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"}, + {file = "lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"}, + {file = "lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"}, + {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"}, + {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"}, + {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"}, + {file = "lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"}, + {file = "lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"}, + {file = "lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"}, + {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"}, + {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"}, + {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"}, + {file = "lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"}, + {file = "lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"}, + {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"}, + {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"}, + {file = "lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"}, + {file = "lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"}, + {file = "lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=0.29.7)"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "msgspec" +version = "0.13.1" +description = "A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "msgspec-0.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a07a50afb119728e4969ab58602985549b8b9af6cf565873fad28365eb7dbf7b"}, + {file = "msgspec-0.13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:014e6e0b01946528f609102c5624749501f63ebdeba386855948185288bc299d"}, + {file = "msgspec-0.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1d6de944dd2d369186ce9f3d98119980427fd8fba0788d819d775fe0440442"}, + {file = "msgspec-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:037ff80d956bb13fc8c221a386f7ba97f6e55d0dc84f4bfe92226df570140802"}, + {file = "msgspec-0.13.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8f0679fbafb889e4165bf49c2afd342716dcee2fe13de3777f1613c09740f304"}, + {file = "msgspec-0.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:99d239343d2b78ad139277067e727ad573445eec6b7ba113e4b987e15728d9d4"}, + {file = "msgspec-0.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:88466f804b817151cbff9e53d698f86a9280b0d00896302abb528be01c46701a"}, + {file = "msgspec-0.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:494de96dc6ad90c2f3ba96130591ade518dfd019be767e6030c73ea3e9eb6df9"}, + {file = "msgspec-0.13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b8853fdf1c44cb874c786133ce1062b6d9a484e0fa48f7174035eb506f462042"}, + {file = "msgspec-0.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac902ccdfa4574498342d06f4c49bfa60317724737985b2fc954e8c8eb009910"}, + {file = "msgspec-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0e594996a042fb6dcd9839094b6ef8768e7707bf1567e4d61cbf07c1d12f24"}, + {file = "msgspec-0.13.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2d32dedfeb5646ac339eb4602886861756f050c6307e2177b7c68f5084519069"}, + {file = "msgspec-0.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:de920ff863aceef8304a1c5c3855f089782429f6fdbfea1321061f37e4ba418a"}, + {file = "msgspec-0.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:36b919dad8cbf98d1e2b3d829bf26fbe64205a08ee1caa6988581e5850bcb6b1"}, + {file = "msgspec-0.13.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:30c80380bfe3a03b2e968f08bdbec8a9fc1619cd2555cc8334774c475296faaa"}, + {file = "msgspec-0.13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0e12db829b670159780d4483248c5099b99cc487f3c134f2d3e6ce59fa18ce67"}, + {file = "msgspec-0.13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa7febe37689642a1a2ccdeecf3a8b820ea043cd142438bd0a88714c982555a0"}, + {file = "msgspec-0.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:317ec8e80cf919c42b6defb375e12ad49af649238327d0abaed980c4d72a7bea"}, + {file = "msgspec-0.13.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d51cdd579b632e3686c14eee9948aeba056ea969b85b60e09aa9811cea3524cd"}, + {file = "msgspec-0.13.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:348415004e907c856e22884485c9f91dc8f39317ce365b0881a08ac35f234afe"}, + {file = "msgspec-0.13.1-cp38-cp38-win_amd64.whl", hash = "sha256:b80b58d8fa70f881701a3bff50661327b4f5a50441d33386fac95a94eb3cad1d"}, + {file = "msgspec-0.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:96f7898b4433a2570636cf0659ac7cedd1b753f0a108fa0ff82a813a830c5a98"}, + {file = "msgspec-0.13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fae7c7e6f7715cebc34ce616b078dc2c021651115915d0c2ea507d9c9074e34d"}, + {file = "msgspec-0.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050af5e263eece6a16c07ba651ab83208acccfccc5ab8b47fa6cf99c135f01a9"}, + {file = "msgspec-0.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e143da1561b6a766c2fccdb9c487dfcf1d56c8c1b9c8c8c5c3e322f02fbb8c11"}, + {file = "msgspec-0.13.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:59e572b78da8264b2ce3dbb65bec6a4a65cb355046b0d5fc16df24626e889947"}, + {file = "msgspec-0.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bf92cbef573127966cccce71eb9368a6ce36c847ee128e048c7c04724daae855"}, + {file = "msgspec-0.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:358da53e870d8bdb890b27c2cd9a670bc17c1d4330908d3fb6e00dcdc8d9c54c"}, + {file = "msgspec-0.13.1.tar.gz", hash = "sha256:b252174d33c7d7885e5efe8009147f09da4bf6655b86dba9128a2a4d4c1fb6ee"}, +] + +[package.extras] +dev = ["coverage", "furo", "gcovr", "ipython", "msgpack", "mypy", "pre-commit", "pyright", "pytest", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "tomli", "tomli-w"] +doc = ["furo", "ipython", "sphinx", "sphinx-copybutton", "sphinx-design"] +test = ["msgpack", "mypy", "pyright", "pytest", "pyyaml", "tomli", "tomli-w"] +toml = ["tomli", "tomli-w"] +yaml = ["pyyaml"] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.7.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, + {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "nonebot-plugin-apscheduler" +version = "0.2.0" +description = "APScheduler Support for NoneBot2" +category = "main" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "nonebot-plugin-apscheduler-0.2.0.tar.gz", hash = "sha256:7b63e99a611b657533b48fcf1f8c6627c18c2eb3fa820a906cd4ec4666c0ceb0"}, + {file = "nonebot_plugin_apscheduler-0.2.0-py3-none-any.whl", hash = "sha256:9285ee84ca1cfa4db73c86cedb5911bbbd25a21ec0cd5f22447cd12f89e48fb4"}, +] + +[package.dependencies] +apscheduler = ">=3.7.0,<4.0.0" +nonebot2 = ">=2.0.0-rc.1,<3.0.0" + +[[package]] +name = "nonebot2" +version = "2.0.0rc3" +description = "An asynchronous python bot framework." +category = "main" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "nonebot2-2.0.0rc3-py3-none-any.whl", hash = "sha256:6596e9837e95e99a6cfa7c4e21d75a54a5f3529d34f30454136ebfef6aa374f4"}, + {file = "nonebot2-2.0.0rc3.tar.gz", hash = "sha256:a16da07b7c764d536cbdf9bcb86eb7cc21b1d254c966552ec5d20e0cb303cec2"}, +] + +[package.dependencies] +loguru = ">=0.6.0,<0.7.0" +pydantic = {version = ">=1.10.0,<2.0.0", extras = ["dotenv"]} +pygtrie = ">=2.4.1,<3.0.0" +tomlkit = ">=0.10.0,<1.0.0" +typing-extensions = ">=3.10.0,<5.0.0" +yarl = ">=1.7.2,<2.0.0" + +[package.extras] +aiohttp = ["aiohttp[speedups] (>=3.7.4,<4.0.0)"] +all = ["Quart (>=0.18.0,<1.0.0)", "aiohttp[speedups] (>=3.7.4,<4.0.0)", "fastapi (>=0.87.0,!=0.89.0,<1.0.0)", "httpx[http2] (>=0.20.0,<1.0.0)", "uvicorn[standard] (>=0.20.0,<1.0.0)", "websockets (>=10.0,<11.0)"] +fastapi = ["fastapi (>=0.87.0,!=0.89.0,<1.0.0)", "uvicorn[standard] (>=0.20.0,<1.0.0)"] +httpx = ["httpx[http2] (>=0.20.0,<1.0.0)"] +quart = ["Quart (>=0.18.0,<1.0.0)", "uvicorn[standard] (>=0.20.0,<1.0.0)"] +websockets = ["websockets (>=10.0,<11.0)"] + +[[package]] +name = "nonebug" +version = "0.3.1" +description = "nonebot2 test framework" +category = "dev" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "nonebug-0.3.1-py3-none-any.whl", hash = "sha256:b33e93d486e3f187e890a516ad8d9432ea736e50b0270341ddc78fecfe080d5f"}, + {file = "nonebug-0.3.1.tar.gz", hash = "sha256:96637bbdc406e7673e625492fbe928a9db467cd630d6fd04cfde0999f58f9a7a"}, +] + +[package.dependencies] +asgiref = ">=3.4.0,<4.0.0" +async-asgi-testclient = ">=1.4.8,<2.0.0" +nonebot2 = ">=2.0.0-rc.2,<3.0.0" +pytest = ">=7.0.0,<8.0.0" +typing-extensions = ">=4.0.0,<5.0.0" + +[[package]] +name = "openpyxl" +version = "3.1.1" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "openpyxl-3.1.1-py2.py3-none-any.whl", hash = "sha256:a0266e033e65f33ee697254b66116a5793c15fc92daf64711080000df4cfe0a8"}, + {file = "openpyxl-3.1.1.tar.gz", hash = "sha256:f06d44e2c973781068bce5ecf860a09bcdb1c7f5ce1facd5e9aa82c92c93ae72"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "packaging" +version = "23.0" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] + +[[package]] +name = "passlib" +version = "1.7.4" +description = "comprehensive password hashing framework supporting over 30 schemes" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "passlib-1.7.4-py2.py3-none-any.whl", hash = "sha256:aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1"}, + {file = "passlib-1.7.4.tar.gz", hash = "sha256:defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04"}, +] + +[package.extras] +argon2 = ["argon2-cffi (>=18.2.0)"] +bcrypt = ["bcrypt (>=3.1.0)"] +build-docs = ["cloud-sptheme (>=1.10.1)", "sphinx (>=1.6)", "sphinxcontrib-fulltoc (>=1.2.0)"] +totp = ["cryptography"] + +[[package]] +name = "pathspec" +version = "0.10.3" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.10.3-py3-none-any.whl", hash = "sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6"}, + {file = "pathspec-0.10.3.tar.gz", hash = "sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6"}, +] + +[[package]] +name = "pillow" +version = "9.4.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pillow-9.4.0-1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b4b4e9dda4f4e4c4e6896f93e84a8f0bcca3b059de9ddf67dac3c334b1195e1"}, + {file = "Pillow-9.4.0-1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fb5c1ad6bad98c57482236a21bf985ab0ef42bd51f7ad4e4538e89a997624e12"}, + {file = "Pillow-9.4.0-1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f0caf4a5dcf610d96c3bd32932bfac8aee61c96e60481c2a0ea58da435e25acd"}, + {file = "Pillow-9.4.0-1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3f4cc516e0b264c8d4ccd6b6cbc69a07c6d582d8337df79be1e15a5056b258c9"}, + {file = "Pillow-9.4.0-1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b8c2f6eb0df979ee99433d8b3f6d193d9590f735cf12274c108bd954e30ca858"}, + {file = "Pillow-9.4.0-1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b70756ec9417c34e097f987b4d8c510975216ad26ba6e57ccb53bc758f490dab"}, + {file = "Pillow-9.4.0-1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:43521ce2c4b865d385e78579a082b6ad1166ebed2b1a2293c3be1d68dd7ca3b9"}, + {file = "Pillow-9.4.0-2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:9d9a62576b68cd90f7075876f4e8444487db5eeea0e4df3ba298ee38a8d067b0"}, + {file = "Pillow-9.4.0-2-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:87708d78a14d56a990fbf4f9cb350b7d89ee8988705e58e39bdf4d82c149210f"}, + {file = "Pillow-9.4.0-2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8a2b5874d17e72dfb80d917213abd55d7e1ed2479f38f001f264f7ce7bae757c"}, + {file = "Pillow-9.4.0-2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:83125753a60cfc8c412de5896d10a0a405e0bd88d0470ad82e0869ddf0cb3848"}, + {file = "Pillow-9.4.0-2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9e5f94742033898bfe84c93c831a6f552bb629448d4072dd312306bab3bd96f1"}, + {file = "Pillow-9.4.0-2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:013016af6b3a12a2f40b704677f8b51f72cb007dac785a9933d5c86a72a7fe33"}, + {file = "Pillow-9.4.0-2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:99d92d148dd03fd19d16175b6d355cc1b01faf80dae93c6c3eb4163709edc0a9"}, + {file = "Pillow-9.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157"}, + {file = "Pillow-9.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5"}, + {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070"}, + {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28"}, + {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35"}, + {file = "Pillow-9.4.0-cp310-cp310-win32.whl", hash = "sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a"}, + {file = "Pillow-9.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391"}, + {file = "Pillow-9.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133"}, + {file = "Pillow-9.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4"}, + {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d"}, + {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8"}, + {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a"}, + {file = "Pillow-9.4.0-cp311-cp311-win32.whl", hash = "sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c"}, + {file = "Pillow-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee"}, + {file = "Pillow-9.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4"}, + {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5"}, + {file = "Pillow-9.4.0-cp37-cp37m-win32.whl", hash = "sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e"}, + {file = "Pillow-9.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6"}, + {file = "Pillow-9.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9"}, + {file = "Pillow-9.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d"}, + {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b"}, + {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f"}, + {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628"}, + {file = "Pillow-9.4.0-cp38-cp38-win32.whl", hash = "sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d"}, + {file = "Pillow-9.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a"}, + {file = "Pillow-9.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569"}, + {file = "Pillow-9.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503"}, + {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6"}, + {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2"}, + {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153"}, + {file = "Pillow-9.4.0-cp39-cp39-win32.whl", hash = "sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c"}, + {file = "Pillow-9.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df"}, + {file = "Pillow-9.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a"}, + {file = "Pillow-9.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9"}, + {file = "Pillow-9.4.0.tar.gz", hash = "sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "platformdirs" +version = "3.0.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, + {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, +] + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.21.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "pycln" +version = "2.1.3" +description = "A formatter for finding and removing unused import statements." +category = "dev" +optional = false +python-versions = ">=3.6.2,<4" +files = [ + {file = "pycln-2.1.3-py3-none-any.whl", hash = "sha256:161142502e4ff9853cd462a38401e29eb56235919856df2cb7fa4c84e463717f"}, + {file = "pycln-2.1.3.tar.gz", hash = "sha256:a33bfc64ded74a623b7cf49eca38b58db4348facc60c35af26d45de149b256f5"}, +] + +[package.dependencies] +libcst = {version = ">=0.3.10,<0.5.0", markers = "python_version >= \"3.7\""} +pathspec = ">=0.9.0,<0.11.0" +pyyaml = ">=5.3.1,<7.0.0" +tomlkit = ">=0.11.1,<0.12.0" +typer = ">=0.4.1,<0.8.0" + +[[package]] +name = "pycodestyle" +version = "2.10.0" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, + {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, +] + +[[package]] +name = "pydantic" +version = "1.10.5" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb"}, + {file = "pydantic-1.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2"}, + {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2"}, + {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9"}, + {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee"}, + {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a"}, + {file = "pydantic-1.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e"}, + {file = "pydantic-1.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984"}, + {file = "pydantic-1.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d"}, + {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b"}, + {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73"}, + {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8"}, + {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a"}, + {file = "pydantic-1.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449"}, + {file = "pydantic-1.10.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87"}, + {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc"}, + {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c"}, + {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6"}, + {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15"}, + {file = "pydantic-1.10.5-cp37-cp37m-win_amd64.whl", hash = "sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419"}, + {file = "pydantic-1.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760"}, + {file = "pydantic-1.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb"}, + {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642"}, + {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab"}, + {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19"}, + {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718"}, + {file = "pydantic-1.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e"}, + {file = "pydantic-1.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3"}, + {file = "pydantic-1.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf"}, + {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb"}, + {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325"}, + {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31"}, + {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e"}, + {file = "pydantic-1.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594"}, + {file = "pydantic-1.10.5-py3-none-any.whl", hash = "sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28"}, + {file = "pydantic-1.10.5.tar.gz", hash = "sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a"}, +] + +[package.dependencies] +python-dotenv = {version = ">=0.10.4", optional = true, markers = "extra == \"dotenv\""} +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pyflakes" +version = "3.0.1" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, + {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, +] + +[[package]] +name = "pygtrie" +version = "2.5.0" +description = "A pure Python trie data structure implementation." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pygtrie-2.5.0-py3-none-any.whl", hash = "sha256:8795cda8105493d5ae159a5bef313ff13156c5d4d72feddefacaad59f8c8ce16"}, + {file = "pygtrie-2.5.0.tar.gz", hash = "sha256:203514ad826eb403dab1d2e2ddd034e0d1534bbe4dbe0213bb0593f66beba4e2"}, +] + +[[package]] +name = "pypng" +version = "0.20220715.0" +description = "Pure Python library for saving and loading PNG images" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, + {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, +] + +[[package]] +name = "pytest" +version = "7.2.1" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, + {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, +] + +[package.dependencies] +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.20.3" +description = "Pytest support for asyncio" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-asyncio-0.20.3.tar.gz", hash = "sha256:83cbf01169ce3e8eb71c6c278ccb0574d1a7a3bb8eaaf5e50e0ad342afb33b36"}, + {file = "pytest_asyncio-0.20.3-py3-none-any.whl", hash = "sha256:f129998b209d04fcc65c96fc85c11e5316738358909a8399e93be553d7656442"}, +] + +[package.dependencies] +pytest = ">=6.1.0" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.6" +description = "A streaming multipart parser for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, + {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, +] + +[package.extras] +dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] + +[[package]] +name = "pytz" +version = "2022.7.1" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, + {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, +] + +[[package]] +name = "pytz-deprecation-shim" +version = "0.1.0.post0" +description = "Shims to make deprecation of pytz easier" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, + {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"}, +] + +[package.dependencies] +"backports.zoneinfo" = {version = "*", markers = "python_version >= \"3.6\" and python_version < \"3.9\""} +tzdata = {version = "*", markers = "python_version >= \"3.6\""} + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "qrcode" +version = "7.4.2" +description = "QR Code image generator" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, + {file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +pillow = {version = ">=9.1.0", optional = true, markers = "extra == \"pil\""} +pypng = "*" +typing-extensions = "*" + +[package.extras] +all = ["pillow (>=9.1.0)", "pytest", "pytest-cov", "tox", "zest.releaser[recommended]"] +dev = ["pytest", "pytest-cov", "tox"] +maintainer = ["zest.releaser[recommended]"] +pil = ["pillow (>=9.1.0)"] +test = ["coverage", "pytest"] + +[[package]] +name = "requests" +version = "2.28.2" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3986" +version = "1.5.0" +description = "Validating URI References per RFC 3986" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, + {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, +] + +[package.dependencies] +idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} + +[package.extras] +idna2008 = ["idna"] + +[[package]] +name = "setuptools" +version = "67.4.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.4.0-py3-none-any.whl", hash = "sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251"}, + {file = "setuptools-67.4.0.tar.gz", hash = "sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "soupsieve" +version = "2.4" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4-py3-none-any.whl", hash = "sha256:49e5368c2cda80ee7e84da9dbe3e110b70a4575f196efb74e51b94549d921955"}, + {file = "soupsieve-2.4.tar.gz", hash = "sha256:e28dba9ca6c7c00173e34e4ba57448f0688bb681b7c5e8bf4971daafc093d69a"}, +] + +[[package]] +name = "sqlalchemy" +version = "1.4.41" +description = "Database Abstraction Library" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "SQLAlchemy-1.4.41-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:13e397a9371ecd25573a7b90bd037db604331cf403f5318038c46ee44908c44d"}, + {file = "SQLAlchemy-1.4.41-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2d6495f84c4fd11584f34e62f9feec81bf373787b3942270487074e35cbe5330"}, + {file = "SQLAlchemy-1.4.41-cp27-cp27m-win32.whl", hash = "sha256:e570cfc40a29d6ad46c9aeaddbdcee687880940a3a327f2c668dd0e4ef0a441d"}, + {file = "SQLAlchemy-1.4.41-cp27-cp27m-win_amd64.whl", hash = "sha256:5facb7fd6fa8a7353bbe88b95695e555338fb038ad19ceb29c82d94f62775a05"}, + {file = "SQLAlchemy-1.4.41-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f37fa70d95658763254941ddd30ecb23fc4ec0c5a788a7c21034fc2305dab7cc"}, + {file = "SQLAlchemy-1.4.41-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:361f6b5e3f659e3c56ea3518cf85fbdae1b9e788ade0219a67eeaaea8a4e4d2a"}, + {file = "SQLAlchemy-1.4.41-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0990932f7cca97fece8017414f57fdd80db506a045869d7ddf2dda1d7cf69ecc"}, + {file = "SQLAlchemy-1.4.41-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd767cf5d7252b1c88fcfb58426a32d7bd14a7e4942497e15b68ff5d822b41ad"}, + {file = "SQLAlchemy-1.4.41-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5102fb9ee2c258a2218281adcb3e1918b793c51d6c2b4666ce38c35101bb940e"}, + {file = "SQLAlchemy-1.4.41-cp310-cp310-win32.whl", hash = "sha256:2082a2d2fca363a3ce21cfa3d068c5a1ce4bf720cf6497fb3a9fc643a8ee4ddd"}, + {file = "SQLAlchemy-1.4.41-cp310-cp310-win_amd64.whl", hash = "sha256:e4b12e3d88a8fffd0b4ca559f6d4957ed91bd4c0613a4e13846ab8729dc5c251"}, + {file = "SQLAlchemy-1.4.41-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:90484a2b00baedad361402c257895b13faa3f01780f18f4a104a2f5c413e4536"}, + {file = "SQLAlchemy-1.4.41-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67fc780cfe2b306180e56daaa411dd3186bf979d50a6a7c2a5b5036575cbdbb"}, + {file = "SQLAlchemy-1.4.41-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ad2b727fc41c7f8757098903f85fafb4bf587ca6605f82d9bf5604bd9c7cded"}, + {file = "SQLAlchemy-1.4.41-cp311-cp311-win32.whl", hash = "sha256:59bdc291165b6119fc6cdbc287c36f7f2859e6051dd923bdf47b4c55fd2f8bd0"}, + {file = "SQLAlchemy-1.4.41-cp311-cp311-win_amd64.whl", hash = "sha256:d2e054aed4645f9b755db85bc69fc4ed2c9020c19c8027976f66576b906a74f1"}, + {file = "SQLAlchemy-1.4.41-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:4ba7e122510bbc07258dc42be6ed45997efdf38129bde3e3f12649be70683546"}, + {file = "SQLAlchemy-1.4.41-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0dcf127bb99458a9d211e6e1f0f3edb96c874dd12f2503d4d8e4f1fd103790b"}, + {file = "SQLAlchemy-1.4.41-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e16c2be5cb19e2c08da7bd3a87fed2a0d4e90065ee553a940c4fc1a0fb1ab72b"}, + {file = "SQLAlchemy-1.4.41-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5ebeeec5c14533221eb30bad716bc1fd32f509196318fb9caa7002c4a364e4c"}, + {file = "SQLAlchemy-1.4.41-cp36-cp36m-win32.whl", hash = "sha256:3e2ef592ac3693c65210f8b53d0edcf9f4405925adcfc031ff495e8d18169682"}, + {file = "SQLAlchemy-1.4.41-cp36-cp36m-win_amd64.whl", hash = "sha256:eb30cf008850c0a26b72bd1b9be6730830165ce049d239cfdccd906f2685f892"}, + {file = "SQLAlchemy-1.4.41-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:c23d64a0b28fc78c96289ffbd0d9d1abd48d267269b27f2d34e430ea73ce4b26"}, + {file = "SQLAlchemy-1.4.41-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8eb8897367a21b578b26f5713833836f886817ee2ffba1177d446fa3f77e67c8"}, + {file = "SQLAlchemy-1.4.41-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14576238a5f89bcf504c5f0a388d0ca78df61fb42cb2af0efe239dc965d4f5c9"}, + {file = "SQLAlchemy-1.4.41-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:639e1ae8d48b3c86ffe59c0daa9a02e2bfe17ca3d2b41611b30a0073937d4497"}, + {file = "SQLAlchemy-1.4.41-cp37-cp37m-win32.whl", hash = "sha256:0005bd73026cd239fc1e8ccdf54db58b6193be9a02b3f0c5983808f84862c767"}, + {file = "SQLAlchemy-1.4.41-cp37-cp37m-win_amd64.whl", hash = "sha256:5323252be2bd261e0aa3f33cb3a64c45d76829989fa3ce90652838397d84197d"}, + {file = "SQLAlchemy-1.4.41-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:05f0de3a1dc3810a776275763764bb0015a02ae0f698a794646ebc5fb06fad33"}, + {file = "SQLAlchemy-1.4.41-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0002e829142b2af00b4eaa26c51728f3ea68235f232a2e72a9508a3116bd6ed0"}, + {file = "SQLAlchemy-1.4.41-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22ff16cedab5b16a0db79f1bc99e46a6ddececb60c396562e50aab58ddb2871c"}, + {file = "SQLAlchemy-1.4.41-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccfd238f766a5bb5ee5545a62dd03f316ac67966a6a658efb63eeff8158a4bbf"}, + {file = "SQLAlchemy-1.4.41-cp38-cp38-win32.whl", hash = "sha256:58bb65b3274b0c8a02cea9f91d6f44d0da79abc993b33bdedbfec98c8440175a"}, + {file = "SQLAlchemy-1.4.41-cp38-cp38-win_amd64.whl", hash = "sha256:ce8feaa52c1640de9541eeaaa8b5fb632d9d66249c947bb0d89dd01f87c7c288"}, + {file = "SQLAlchemy-1.4.41-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:199a73c31ac8ea59937cc0bf3dfc04392e81afe2ec8a74f26f489d268867846c"}, + {file = "SQLAlchemy-1.4.41-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676d51c9f6f6226ae8f26dc83ec291c088fe7633269757d333978df78d931ab"}, + {file = "SQLAlchemy-1.4.41-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:036d8472356e1d5f096c5e0e1a7e0f9182140ada3602f8fff6b7329e9e7cfbcd"}, + {file = "SQLAlchemy-1.4.41-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2307495d9e0ea00d0c726be97a5b96615035854972cc538f6e7eaed23a35886c"}, + {file = "SQLAlchemy-1.4.41-cp39-cp39-win32.whl", hash = "sha256:9c56e19780cd1344fcd362fd6265a15f48aa8d365996a37fab1495cae8fcd97d"}, + {file = "SQLAlchemy-1.4.41-cp39-cp39-win_amd64.whl", hash = "sha256:f5fa526d027d804b1f85cdda1eb091f70bde6fb7d87892f6dd5a48925bc88898"}, + {file = "SQLAlchemy-1.4.41.tar.gz", hash = "sha256:0292f70d1797e3c54e862e6f30ae474014648bc9c723e14a2fda730adb0a9791"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} + +[package.extras] +aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] +mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx-oracle (>=7)", "cx-oracle (>=7,<8)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql", "pymysql (<1)"] +sqlcipher = ["sqlcipher3-binary"] + +[[package]] +name = "sqlalchemy-database" +version = "0.1.0" +description = "SQLAlchemy-Database provides shortcut functions to common database operations for SQLAlchemy ORM." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sqlalchemy_database-0.1.0-py3-none-any.whl", hash = "sha256:f12b06f7d4ff6bfbb4272f7f271b7f63ccdc3e6a5c1709ea297de5d54d9aca67"}, + {file = "sqlalchemy_database-0.1.0.tar.gz", hash = "sha256:629d1f0d04979a147075b8136854e50a15a83aad754bdd8ad61b320da13f3f7a"}, +] + +[package.dependencies] +sqlalchemy = "*" +sqlalchemy2-stubs = ">=0.0.2a29" + +[package.extras] +docs = ["mkdocs-material (>=8.3.8)", "mkdocstrings[python] (>=0.19.0)"] +test = ["aiosqlite", "fastapi", "httpx", "pytest (>=6.2.4,<7.0.0)", "pytest-asyncio (>=0.17)", "pytest-cov", "sqlmodel"] + +[[package]] +name = "sqlalchemy2-stubs" +version = "0.0.2a32" +description = "Typing Stubs for SQLAlchemy 1.4" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "sqlalchemy2-stubs-0.0.2a32.tar.gz", hash = "sha256:2a2cfab71d35ac63bf21ad841d8610cd93a3bd4c6562848c538fa975585c2739"}, + {file = "sqlalchemy2_stubs-0.0.2a32-py3-none-any.whl", hash = "sha256:7f5fb30b0cf7c6b74c50c1d94df77ff32007afee8d80499752eb3fedffdbdfb8"}, +] + +[package.dependencies] +typing-extensions = ">=3.7.4" + +[[package]] +name = "sqlmodel" +version = "0.0.8" +description = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness." +category = "main" +optional = false +python-versions = ">=3.6.1,<4.0.0" +files = [ + {file = "sqlmodel-0.0.8-py3-none-any.whl", hash = "sha256:0fd805719e0c5d4f22be32eb3ffc856eca3f7f20e8c7aa3e117ad91684b518ee"}, + {file = "sqlmodel-0.0.8.tar.gz", hash = "sha256:3371b4d1ad59d2ffd0c530582c2140b6c06b090b32af9b9c6412986d7b117036"}, +] + +[package.dependencies] +pydantic = ">=1.8.2,<2.0.0" +SQLAlchemy = ">=1.4.17,<=1.4.41" +sqlalchemy2-stubs = "*" + +[[package]] +name = "sqlmodelx" +version = "0.0.4" +description = "SQLModelX is an extension of the SQLModel library." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sqlmodelx-0.0.4-py3-none-any.whl", hash = "sha256:c4e84ac41fa8a4852b603543dfcfac752f50e46fcf50422aff4f1384369964de"}, + {file = "sqlmodelx-0.0.4.tar.gz", hash = "sha256:b0f0517409ad894145fcacfc85325a634835a8098976b729fead6ccffa78bc60"}, +] + +[package.dependencies] +sqlmodel = ">=0.0.7" + +[package.extras] +test = ["pytest (>=7.1.3)"] + +[[package]] +name = "starlette" +version = "0.25.0" +description = "The little ASGI library that shines." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "starlette-0.25.0-py3-none-any.whl", hash = "sha256:774f1df1983fd594b9b6fb3ded39c2aa1979d10ac45caac0f4255cbe2acb8628"}, + {file = "starlette-0.25.0.tar.gz", hash = "sha256:854c71e73736c429c2bdb07801f2c76c9cba497e7c3cf4988fde5e95fe4cdb3c"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tomlkit" +version = "0.11.6" +description = "Style preserving TOML library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, + {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, +] + +[[package]] +name = "typer" +version = "0.7.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "typer-0.7.0-py3-none-any.whl", hash = "sha256:b5e704f4e48ec263de1c0b3a2387cd405a13767d2f907f44c1a08cbad96f606d"}, + {file = "typer-0.7.0.tar.gz", hash = "sha256:ff797846578a9f2a201b53442aedeb543319466870fbe1c701eab66dd7681165"}, +] + +[package.dependencies] +click = ">=7.1.1,<9.0.0" + +[package.extras] +all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] +doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] +test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.5.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, +] + +[[package]] +name = "typing-inspect" +version = "0.8.0" +description = "Runtime inspection utilities for typing module." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "typing_inspect-0.8.0-py3-none-any.whl", hash = "sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188"}, + {file = "typing_inspect-0.8.0.tar.gz", hash = "sha256:8b1ff0c400943b6145df8119c41c244ca8207f1f10c9c057aeed1560e4806e3d"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "tzdata" +version = "2022.7" +description = "Provider of IANA time zone data" +category = "main" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2022.7-py2.py3-none-any.whl", hash = "sha256:2b88858b0e3120792a3c0635c23daf36a7d7eeeca657c323da299d2094402a0d"}, + {file = "tzdata-2022.7.tar.gz", hash = "sha256:fe5f866eddd8b96e9fcba978f8e503c909b19ea7efda11e52e39494bad3a7bfa"}, +] + +[[package]] +name = "tzlocal" +version = "4.2" +description = "tzinfo object for the local timezone" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, + {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"}, +] + +[package.dependencies] +"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} +pytz-deprecation-shim = "*" +tzdata = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"] +test = ["pytest (>=4.3)", "pytest-mock (>=3.3)"] + +[[package]] +name = "urllib3" +version = "1.26.14" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.20.0" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.20.0-py3-none-any.whl", hash = "sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45"}, + {file = "virtualenv-20.20.0.tar.gz", hash = "sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4"}, +] + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.4.1,<4" +platformdirs = ">=2.4,<4" + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] +test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[[package]] +name = "yarl" +version = "1.8.2" +description = "Yet another URL library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"}, + {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"}, + {file = "yarl-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8"}, + {file = "yarl-1.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3"}, + {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80"}, + {file = "yarl-1.8.2-cp310-cp310-win32.whl", hash = "sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42"}, + {file = "yarl-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574"}, + {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634"}, + {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd"}, + {file = "yarl-1.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76"}, + {file = "yarl-1.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c"}, + {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2"}, + {file = "yarl-1.8.2-cp311-cp311-win32.whl", hash = "sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b"}, + {file = "yarl-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c"}, + {file = "yarl-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89"}, + {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7"}, + {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37"}, + {file = "yarl-1.8.2-cp37-cp37m-win32.whl", hash = "sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89"}, + {file = "yarl-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5"}, + {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1"}, + {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918"}, + {file = "yarl-1.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3"}, + {file = "yarl-1.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c"}, + {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946"}, + {file = "yarl-1.8.2-cp38-cp38-win32.whl", hash = "sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165"}, + {file = "yarl-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f"}, + {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8"}, + {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf"}, + {file = "yarl-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08"}, + {file = "yarl-1.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516"}, + {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588"}, + {file = "yarl-1.8.2-cp39-cp39-win32.whl", hash = "sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83"}, + {file = "yarl-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778"}, + {file = "yarl-1.8.2.tar.gz", hash = "sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[metadata] +lock-version = "2.0" +python-versions = "^3.8.1" +content-hash = "75de7e46ad78d2a8ec6a544d29a427b8080dd27c8da55c320115f9332b25c29f" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..b6d0e76b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,78 @@ +[tool.black] +line-length = 79 +target-version = ["py38", "py39", "py310"] +include = '\.pyi?$' +skip-string-normalization = true +extend-exclude = ''' +''' + +[tool.isort] +profile = "black" +line_length = 79 +length_sort = true +skip_gitignore = true +force_sort_within_sections = true +extra_standard_library = ["typing_extensions"] + +[tool.pytest.ini_options] +asyncio_mode = "auto" + +[build-system] +requires = ["poetry-core>=1.2.0"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry] +name = "GenshinUID" +version = "4.0.0" +description = "基于HoshinoBot/NoneBot2/QQ官方频道/微信Bot的原神面板查询/原神Wiki/米社签到/树脂提醒插件" +authors = ["KimigaiiWuyi <444835641@qq.com>"] +license = "GPL-3.0-or-later" +readme = "README.md" +homepage = "https://github.com/KimigaiiWuyi/GenshinUID/tree/v4" +repository = "https://github.com/KimigaiiWuyi/GenshinUID" +documentation = "https://github.com/KimigaiiWuyi/GenshinUID/wiki" +packages = [ + { include = "GenshinUID" } +] +exclude = ["tests", "deploy"] + +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/KimigaiiWuyi/GenshinUID/issues" + +[tool.poetry.dependencies] +python = "^3.8.1" +httpx = ">=0.23.0" +beautifulsoup4 = ">=4.11.1" +lxml = ">=4.9.2" +openpyxl = ">=3.0.10" +aiohttp = ">=3.8.1" +sqlalchemy = ">=1.4.39" +pillow = ">=9.2.0" +aiosqlite = ">=0.17.0" +nonebot-plugin-apscheduler = ">=0.1.4" +aiofiles = ">=0.8.0" +sqlmodel = ">=0.0.8" +gitpython = ">=3.1.27" +fastapi-amis-admin = ">=0.2.1" +fastapi = ">=0.87.0,!=0.89.0,<1.0.0" +msgspec = ">=0.13.1" +fastapi-user-auth = ">=0.2.1" +qrcode = {extras = ["pil"], version = "^7.3.1"} + +[[tool.poetry.source]] +name = "USTC" +url = "https://pypi.mirrors.ustc.edu.cn/simple" +default = false +secondary = true + +[tool.poetry.group.dev.dependencies] +flake8 = "^6.0.0" +black = "^22.12.0" +isort = "^5.11.5" +pre-commit = "^2.21.0" +pycln = "^2.1.2" + +[tool.poetry.group.test.dependencies] +nonebug = "^0.3.0" +pytest = "^7.2.0" +pytest-asyncio = "^0.20.3" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..718faee9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,64 @@ +aiofiles==23.1.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +aiohttp==3.8.4 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +aiosignal==1.3.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +aiosqlite==0.18.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +anyio==3.6.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +apscheduler==3.10.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +async-timeout==4.0.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +attrs==22.2.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +backports-zoneinfo==0.2.1 ; python_full_version >= "3.8.1" and python_version < "3.9" +bcrypt==4.0.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +beautifulsoup4==4.11.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +certifi==2022.12.7 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +charset-normalizer==3.0.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +colorama==0.4.6 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" and platform_system == "Windows" or python_full_version >= "3.8.1" and python_version < "4.0" and sys_platform == "win32" +dnspython==2.3.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +email-validator==1.3.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +et-xmlfile==1.1.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +fastapi-amis-admin==0.4.3 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +fastapi-user-auth==0.4.3 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +fastapi==0.92.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +frozenlist==1.3.3 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +gitdb==4.0.10 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +gitpython==3.1.31 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +greenlet==2.0.2 ; python_full_version >= "3.8.1" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_full_version < "4.0.0" +h11==0.14.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +httpcore==0.16.3 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +httpx==0.23.3 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +idna==3.4 ; python_full_version >= "3.8.1" and python_version < "4.0" +loguru==0.6.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +lxml==4.9.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +msgspec==0.13.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +multidict==6.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0" +nonebot-plugin-apscheduler==0.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +nonebot2==2.0.0rc3 ; python_full_version >= "3.8.1" and python_version < "4.0" +openpyxl==3.1.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +passlib==1.7.4 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +pillow==9.4.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +pydantic==1.10.5 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +pydantic[dotenv]==1.10.5 ; python_full_version >= "3.8.1" and python_version < "4.0" +pygtrie==2.5.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +pypng==0.20220715.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +python-dotenv==1.0.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +python-multipart==0.0.6 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +pytz-deprecation-shim==0.1.0.post0 ; python_full_version >= "3.8.1" and python_version < "4.0" +pytz==2022.7.1 ; python_full_version >= "3.8.1" and python_version < "4.0" +qrcode[pil]==7.4.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +rfc3986[idna2008]==1.5.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +setuptools==67.4.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +six==1.16.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +smmap==5.0.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +sniffio==1.3.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +soupsieve==2.4 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +sqlalchemy-database==0.1.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +sqlalchemy2-stubs==0.0.2a32 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +sqlalchemy==1.4.41 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +sqlmodel==0.0.8 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +sqlmodelx==0.0.4 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +starlette==0.25.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0" +tomlkit==0.11.6 ; python_full_version >= "3.8.1" and python_version < "4.0" +typing-extensions==4.5.0 ; python_full_version >= "3.8.1" and python_version < "4.0" +tzdata==2022.7 ; python_full_version >= "3.8.1" and python_version < "4.0" +tzlocal==4.2 ; python_full_version >= "3.8.1" and python_version < "4.0" +win32-setctime==1.1.0 ; python_full_version >= "3.8.1" and python_version < "4.0" and sys_platform == "win32" +yarl==1.8.2 ; python_full_version >= "3.8.1" and python_version < "4.0"