From dcd8ac8c9b06daa7195daffa95a6bee783d333b7 Mon Sep 17 00:00:00 2001 From: M-307 Date: Thu, 16 Feb 2023 18:03:33 +0000 Subject: [PATCH 01/10] Add base `Cache` (Issues #30) --- enkanetwork/cache.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/enkanetwork/cache.py b/enkanetwork/cache.py index 911f1f4..acc70e6 100644 --- a/enkanetwork/cache.py +++ b/enkanetwork/cache.py @@ -1,11 +1,18 @@ import json -from typing import Any, Dict +from typing import Any, Dict, Optional from cachetools import TTLCache -__all__ = ('Cache',) +__all__ = ('StaticCache','Cache') class Cache: + async def get(self, key: str) -> Optional[Dict[str, Any]]: + pass + + async def set(self, key: str, value: Dict[str, Any]) -> None: + pass + +class StaticCache: def __init__(self, maxsize: int, ttl: int) -> None: self.cache = TTLCache(maxsize, ttl) From 2d35e4c29a3213ca75b814c9047f376738a34c96 Mon Sep 17 00:00:00 2001 From: M-307 Date: Thu, 16 Feb 2023 18:04:58 +0000 Subject: [PATCH 02/10] Update client - Fix `RuntimeWarning` - Move `merge_raw_data` to `tools.py` --- enkanetwork/client.py | 211 +++++++++++++++++++++++++----------------- enkanetwork/tools.py | 43 +++++++++ 2 files changed, 167 insertions(+), 87 deletions(-) create mode 100644 enkanetwork/tools.py diff --git a/enkanetwork/client.py b/enkanetwork/client.py index cf37dcc..6994ab4 100644 --- a/enkanetwork/client.py +++ b/enkanetwork/client.py @@ -4,6 +4,8 @@ import os import json import logging +from typing import Union, Optional, Type, TYPE_CHECKING, List, Any, Dict + from .http import HTTPClient from .model.base import ( EnkaNetworkResponse, @@ -16,8 +18,9 @@ from .assets import Assets from .enum import Language from .cache import Cache from .config import Config - -from typing import Union, Optional, Type, TYPE_CHECKING, List, Any, Callable, Dict +from .tools import ( + merge_raw_data +) if TYPE_CHECKING: from typing_extensions import Self @@ -72,7 +75,16 @@ class EnkaNetworkAPI: """ LOGGER = logging.getLogger(__name__) - def __init__(self, *, lang: str = "en", debug: bool = False, key: str = "", cache: bool = True, user_agent: str = "", timeout: int = 10) -> None: # noqa: E501 + def __init__( + self, + *, + lang: str = "en", + debug: bool = False, + key: str = "", + cache: bool = True, + user_agent: str = "", + timeout: int = 1 + ) -> None: # noqa: E501 # Logging logging.basicConfig() logging.getLogger("enkanetwork").setLevel(logging.DEBUG if debug else logging.ERROR) # noqa: E501 @@ -98,8 +110,8 @@ class EnkaNetworkAPI: exc_value: Optional[BaseException], traceback: Optional[TracebackType], ) -> None: - self._close = True - if self._close: + self._closed = True + if self._closed: await self.__http.close() def is_closed(self) -> bool: @@ -162,10 +174,21 @@ class EnkaNetworkAPI: :class:`EnkaNetworkResponse` The response player data """ - func = self.__http.fetch_user_by_uid(uid, info=info) - data = await self.request_enka(func, uid) + + # Loda cache + cache = await self.__get_cache(uid) + if cache: + return EnkaNetworkResponse.parse_obj(cache) + + data = await self.__http.fetch_user_by_uid(uid, info=info) + data = self.__format_json(data) + # Return data self.LOGGER.debug("Parsing data...") + + # Store cache + await self.__store_cache(uid,data) + if "owner" in data: data["owner"] = { **data["owner"], @@ -206,14 +229,26 @@ class EnkaNetworkAPI: :class:`EnkaNetworkProfileResponse` The response profile / hoyos and builds data """ - func = self.__http.fetch_user_by_username(profile_id) - data = await self.request_enka(func, profile_id) + # Loda cache + cache = await self.__get_cache(profile_id) + if cache: + return EnkaNetworkProfileResponse.parse_obj(cache) + + data = await self.__http.fetch_user_by_username(profile_id) + data = self.__format_json(data) + self.LOGGER.debug("Parsing data...") - return EnkaNetworkProfileResponse.parse_obj({ + # Store cache + await self.__store_cache(profile_id,data) + + # Fetch hoyos and build(s) + data = { **data, "hoyos": await self.fetch_hoyos_by_username(profile_id) - }) + } + + return EnkaNetworkProfileResponse.parse_obj(data) async def fetch_hoyos_by_username( self, @@ -241,14 +276,23 @@ class EnkaNetworkAPI: Returns ------------ - List[:class:`PlayerHoyos` + List[:class:`PlayerHoyos`] A response hoyos player data """ key = profile_id + ":hoyos" - func = self.__http.fetch_hoyos_by_username(profile_id) - data = await self.request_enka(func, key) + + # Loda cache + cache = await self.__get_cache(key) + if cache: + return self.__format_hoyos(profile_id, cache) + + data = await self.__http.fetch_hoyos_by_username(profile_id) + data = self.__format_json(data) self.LOGGER.debug("Parsing data...") + # Store cache + await self.__store_cache(key, data) + return await self.__format_hoyos(profile_id, data) async def fetch_builds( @@ -285,37 +329,57 @@ class EnkaNetworkAPI: A response builds data """ key = profile_id + ":hoyos:" + metaname + ":builds" - func = self.__http.fetch_hoyos_by_username(profile_id, metaname, True) - data = await self.request_enka(func, key) + # Loda cache + cache = await self.__get_cache(key) + if cache: + return Builds.parse_obj(cache) + + data = await self.__http.fetch_hoyos_by_username(profile_id, metaname, True) + data = self.__format_json(data) self.LOGGER.debug("Parsing data...") + # Store cache + await self.__store_cache(key, data) + return Builds.parse_obj(data) - async def request_enka( - self, - func: Callable, - cache_key: str, - ): - key = cache_key - # Check config - if Config.CACHE_ENABLED: - self.LOGGER.warning(f"Getting data {key} from cache...") - data = await Config.CACHE.get(key) + async def fetch_raw_data(self, uid: Union[str, int], *, info: bool = False) -> Dict[str, Any]: + """Fetches raw data for a user with the given UID. - if data is not None: - self.LOGGER.debug("Parsing data...") - return data + c + """ - user = await func - data = user["content"] - data = json.loads(data) + # Loda cache + cache = await self.__get_cache(uid) + if cache: + return EnkaNetworkResponse.parse_obj(cache) + + data = await self.__http.fetch_user_by_uid(uid, info=info) + data = self.__format_json(data) - if Config.CACHE_ENABLED: - self.LOGGER.debug(f"Caching data {key}...") - await Config.CACHE.set(key, data) + # Store cache + await self.__store_cache(uid,data, cache=cache) return data + async def update_build(self, uid: Union[str, int], old_data: Dict[str, Any]) -> Dict[str, Any]: + """ Update build (Sync build character data) + + Parameters + ---------- + uid: Union[:class:`str`,:class:`int`] + The UID of the user to fetch data for. + old_data: Dict[:class:`str`, Any] + The build old data. + + Returns + ------ + A dictionary containing the merged data. + """ + + new_data = self.fetch_raw_data(uid) + return await merge_raw_data(new_data, old_data) + async def update_assets(self) -> None: print("Updating assets...") self.LOGGER.debug("Downloading new content...") @@ -343,62 +407,35 @@ class EnkaNetworkAPI: **data[key] }) for key in data] - async def fetch_raw_data(self, uid: int) -> Dict[str, Any]: - """Fetches raw data for a user with the given UID. + def __format_json(self, data: Any): + data = data["content"] + return json.loads(data) + + async def __get_cache( + self, + cache_key: str, + ): + key = cache_key + # Check config + if Config.CACHE_ENABLED: + self.LOGGER.warning(f"Getting data {key} from cache...") + data = await Config.CACHE.get(key) + + if data is not None: + self.LOGGER.debug("Parsing data...") + return data - Parameters - ---------- - uid: The UID of the user to fetch data for. - - Returns - ------ - A dictionary containing the raw data for the user. - """ - func = self.__http.fetch_user_by_uid(uid) - data = await self.request_enka(func, uid) return data - @staticmethod - async def merge_raw_data( - new_data: Dict[str, Any], cache_data: Dict[str, Any] - ) -> Dict[str, Any]: - """ - Merge cached data into newly fetched data. - - Parameters - ---------- - new_data: The newly fetched data as a dictionary. - cache_data: The cached data as a dictionary. - - Returns - ------- - A dictionary containing the merged data. - """ - - async def combine_lists( - new_list: List[Dict[str, Any]], cache_list: List[Dict[str, Any]] - ): - new_ids = {item["avatarId"] for item in new_list} - unique_cache_items = [ - item for item in cache_list if item["avatarId"] not in new_ids - ] - new_list.extend(unique_cache_items) - - if "showAvatarInfoList" in cache_data["playerInfo"]: - new_data.setdefault("playerInfo", {}).setdefault("showAvatarInfoList", []) - await combine_lists( - new_data["playerInfo"]["showAvatarInfoList"], - cache_data["playerInfo"]["showAvatarInfoList"], - ) - - if "avatarInfoList" in cache_data: - new_data.setdefault("avatarInfoList", []) - await combine_lists( - new_data["avatarInfoList"], cache_data["avatarInfoList"] - ) - - return new_data + async def __store_cache(self, key: str, data: Any, *, cache: Any = None): + if Config.CACHE_ENABLED: + self.LOGGER.debug(f"Caching data {key}...") + if cache is None: + await Config.CACHE.set(key, data) + else: + await Config.CACHE.set(key, await self.merge_raw_data(data, cache_data=cache)) # Concept by genshin.py python library fetch_user = fetch_user_by_uid fetch_profile = fetch_user_by_username + merge_raw_data = merge_raw_data diff --git a/enkanetwork/tools.py b/enkanetwork/tools.py new file mode 100644 index 0000000..e5251aa --- /dev/null +++ b/enkanetwork/tools.py @@ -0,0 +1,43 @@ +from typing import List, Any, Dict + +async def merge_raw_data( + new_data: Dict[str, Any], + cache_data: Dict[str, Any] +) -> Dict[str, Any]: + """ + Merge cached data into newly fetched data. + + Parameters + ---------- + new_data: The newly fetched data as a dictionary. + cache_data: The cached data as a dictionary. + + Returns + ------- + A dictionary containing the merged data. + """ + + async def combine_lists( + new_list: List[Dict[str, Any]], cache_list: List[Dict[str, Any]] + ): + new_ids = {item["avatarId"] for item in new_list} + unique_cache_items = [ + item for item in cache_list if item["avatarId"] not in new_ids + ] + new_list.extend(unique_cache_items) + + if "showAvatarInfoList" in cache_data["playerInfo"]: + new_data.setdefault("playerInfo", {}).setdefault( + "showAvatarInfoList", []) + await combine_lists( + new_data["playerInfo"]["showAvatarInfoList"], + cache_data["playerInfo"]["showAvatarInfoList"], + ) + + if "avatarInfoList" in cache_data: + new_data.setdefault("avatarInfoList", []) + await combine_lists( + new_data["avatarInfoList"], cache_data["avatarInfoList"] + ) + + return new_data \ No newline at end of file From c8d7e3544901a55ce64fd53752b77b205d9bafab Mon Sep 17 00:00:00 2001 From: M-307 Date: Thu, 16 Feb 2023 18:05:15 +0000 Subject: [PATCH 03/10] Update cache to staticCache --- enkanetwork/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enkanetwork/config.py b/enkanetwork/config.py index 6c7f5af..201ed26 100644 --- a/enkanetwork/config.py +++ b/enkanetwork/config.py @@ -2,7 +2,7 @@ from typing import ( ClassVar ) from .utils import get_user_agent -from .cache import Cache +from .cache import Cache, StaticCache class Config: # HTTP Config @@ -15,7 +15,7 @@ class Config: USER_AGENT: ClassVar[str] = get_user_agent() # Client config CACHE_ENABLED: ClassVar[bool] = True - CACHE: ClassVar[Cache] = Cache(1024, 60 * 3) + CACHE: ClassVar[Cache] = StaticCache(1024, 60 * 3) @classmethod def init_cache( From e7b76bc58de54ed32e661d54917fd9ce0fb60be3 Mon Sep 17 00:00:00 2001 From: M-307 Date: Thu, 16 Feb 2023 18:05:24 +0000 Subject: [PATCH 04/10] Remove async --- enkanetwork/http.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/enkanetwork/http.py b/enkanetwork/http.py index 437f568..c81fad7 100644 --- a/enkanetwork/http.py +++ b/enkanetwork/http.py @@ -159,7 +159,7 @@ class HTTPClient: raise RuntimeError('Unreachable code in HTTP handling') - async def fetch_user_by_uid( + def fetch_user_by_uid( self, uid: Union[str, int], *, @@ -174,9 +174,9 @@ class HTTPClient: endpoint='enka', username=uid ) - return await self.request(r) + return self.request(r) - async def fetch_user_by_username( + def fetch_user_by_username( self, username: Union[str, int] ) -> Response[EnkaNetworkPayload]: @@ -186,9 +186,9 @@ class HTTPClient: endpoint='enka', username=username ) - return await self.request(r) + return self.request(r) - async def fetch_hoyos_by_username( + def fetch_hoyos_by_username( self, username: Union[str, int], metaname: str = "", @@ -202,16 +202,16 @@ class HTTPClient: endpoint='enka', username=username ) - return await self.request(r) + return self.request(r) - async def fetch_asset(self, folder: str, filename: str) -> Response[DefaultPayload]: + def fetch_asset(self, folder: str, filename: str) -> Response[DefaultPayload]: r = Route( 'GET', f'/mrwan200/enkanetwork.py-data/master/exports/{folder}/{filename}', endpoint='assets' ) - return await self.request(r) + return self.request(r) async def read_from_url(self, url: str) -> bytes: async with self.__session.get(url) as resp: From e8a04e3f5180efd71f924f0ef57f03dac8780cb8 Mon Sep 17 00:00:00 2001 From: "M307 (Mac)" Date: Fri, 17 Feb 2023 01:25:34 +0700 Subject: [PATCH 05/10] Fix syntax --- enkanetwork/tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enkanetwork/tools.py b/enkanetwork/tools.py index e5251aa..ffdc97d 100644 --- a/enkanetwork/tools.py +++ b/enkanetwork/tools.py @@ -34,7 +34,7 @@ async def merge_raw_data( cache_data["playerInfo"]["showAvatarInfoList"], ) - if "avatarInfoList" in cache_data: + if "avatarInfoList" in cache_data: new_data.setdefault("avatarInfoList", []) await combine_lists( new_data["avatarInfoList"], cache_data["avatarInfoList"] From 1878c04df94237a4ad93d6821bec2e1be844468e Mon Sep 17 00:00:00 2001 From: "M307 (Mac)" Date: Fri, 17 Feb 2023 01:25:44 +0700 Subject: [PATCH 06/10] Add .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1f54850..ba7225d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ test/*.test.py .pytest_cache .idea git-story_media -env \ No newline at end of file +env +export.json \ No newline at end of file From 2b7daddc373ade17d757962a417c7bc3de73826b Mon Sep 17 00:00:00 2001 From: "M307 (Mac)" Date: Fri, 17 Feb 2023 01:26:14 +0700 Subject: [PATCH 07/10] Update catch --- enkanetwork/client.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/enkanetwork/client.py b/enkanetwork/client.py index 6994ab4..eaf8f82 100644 --- a/enkanetwork/client.py +++ b/enkanetwork/client.py @@ -16,7 +16,7 @@ from .model.build import Builds from .assets import Assets from .enum import Language -from .cache import Cache +from .cache import Cache, StaticCache from .config import Config from .tools import ( merge_raw_data @@ -83,7 +83,7 @@ class EnkaNetworkAPI: key: str = "", cache: bool = True, user_agent: str = "", - timeout: int = 1 + timeout: int = 10 ) -> None: # noqa: E501 # Logging logging.basicConfig() @@ -95,7 +95,7 @@ class EnkaNetworkAPI: # Cache self._enable_cache = cache if self._enable_cache: - Config.init_cache(Cache(1024, 60 * 1)) + Config.init_cache(StaticCache(1024, 60 * 1)) # http client self.__http = HTTPClient(key=key, agent=user_agent, timeout=timeout) @@ -362,8 +362,8 @@ class EnkaNetworkAPI: return data - async def update_build(self, uid: Union[str, int], old_data: Dict[str, Any]) -> Dict[str, Any]: - """ Update build (Sync build character data) + async def sync_build(self, uid: Union[str, int], old_data: Dict[str, Any]) -> Dict[str, Any]: + """ Sync build data Parameters ---------- @@ -377,7 +377,7 @@ class EnkaNetworkAPI: A dictionary containing the merged data. """ - new_data = self.fetch_raw_data(uid) + new_data = await self.fetch_raw_data(uid) return await merge_raw_data(new_data, old_data) async def update_assets(self) -> None: From 88057efbc262a22e540dcb69379774df19b9fb78 Mon Sep 17 00:00:00 2001 From: "M307 (Mac)" Date: Fri, 17 Feb 2023 01:26:24 +0700 Subject: [PATCH 08/10] Add new example --- example/sync/main.py | 18 + example/sync/raw.json | 3963 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 3981 insertions(+) create mode 100644 example/sync/main.py create mode 100644 example/sync/raw.json diff --git a/example/sync/main.py b/example/sync/main.py new file mode 100644 index 0000000..f080839 --- /dev/null +++ b/example/sync/main.py @@ -0,0 +1,18 @@ +import asyncio +import json + +from enkanetwork import EnkaNetworkAPI + +client = EnkaNetworkAPI(lang="th") + +async def main(): + async with client: + # Load old data build + with open("./raw.json", "r") as f: + old = json.load(f) + export = await client.sync_build(old["uid"], old) + # Export new data + with open("./export.json", "w", encoding="utf-8") as w: + json.dump(export, w, indent=4) + +asyncio.run(main()) \ No newline at end of file diff --git a/example/sync/raw.json b/example/sync/raw.json new file mode 100644 index 0000000..0fbce15 --- /dev/null +++ b/example/sync/raw.json @@ -0,0 +1,3963 @@ +{ + "playerInfo": { + "nickname": "Jaurav", + "level": 59, + "signature": "Yoimiya Supremacy", + "worldLevel": 8, + "nameCardId": 210082, + "finishAchievementNum": 597, + "towerFloorIndex": 12, + "towerLevelIndex": 3, + "showAvatarInfoList": [ + { + "avatarId": 10000049, + "level": 90 + }, + { + "avatarId": 10000063, + "level": 90 + }, + { + "avatarId": 10000002, + "level": 90 + }, + { + "avatarId": 10000052, + "level": 90 + }, + { + "avatarId": 10000030, + "level": 90 + }, + { + "avatarId": 10000016, + "level": 90 + }, + { + "avatarId": 10000022, + "level": 90 + }, + { + "avatarId": 10000047, + "level": 90 + }, + { + "avatarId": 10000032, + "level": 90 + }, + { + "avatarId": 10000064, + "level": 90 + }, + { + "avatarId": 10000025, + "level": 90 + } + ], + "showNameCardIdList": [ + 210050, + 210107, + 210088, + 210084, + 210079, + 210056, + 210100, + 210025, + 210018 + ], + "profilePicture": { + "avatarId": 10000049 + } + }, + "avatarInfoList": [ + { + "avatarId": 10000049, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "fightPropMap": { + "1": 10164.1064453125, + "2": 5078.75, + "3": 0.10490000247955322, + "4": 930.9654541015625, + "5": 326.55999755859375, + "6": 1.0734000205993652, + "7": 614.843505859375, + "8": 37.040000915527344, + "9": 0.13850000500679016, + "20": 0.8834999799728394, + "21": 0, + "22": 2.2106359004974365, + "23": 1.1424000263214111, + "25": 0, + "26": 0, + "27": 0, + "28": 55.94999694824219, + "29": 0, + "30": 0, + "40": 0.4659999907016754, + "41": 0, + "42": 0, + "43": 0, + "44": 0, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "70": 60, + "81": 0, + "1000": 60, + "1010": 16309.0712890625, + "2000": 16309.0712890625, + "2001": 2256.82373046875, + "2002": 737.039306640625, + "2003": 0, + "3008": 0, + "3023": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 4901, + "inherentProudSkillList": [ + 492101, + 492201, + 492301 + ], + "skillLevelMap": { + "10491": 10, + "10492": 10, + "10495": 10 + }, + "equipList": [ + { + "itemId": 93544, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501203, + 501064, + 501241, + 501221, + 501224, + 501223, + 501202, + 501241, + 501201 + ] + }, + "flat": { + "nameTextMapHash": "2293242820", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 9.3 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 33 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 20.2 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 93524, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501094, + 501064, + 501203, + 501221, + 501093, + 501224, + 501224, + 501222, + 501221 + ] + }, + "flat": { + "nameTextMapHash": "2458975932", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 13.9 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 3.5 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 32.6 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 93554, + "reliquary": { + "level": 21, + "mainPropId": 10004, + "appendPropIdList": [ + 501052, + 501201, + 501082, + 501224, + 501222, + 501201, + 501203, + 501224, + 501082 + ] + }, + "flat": { + "nameTextMapHash": "658212884", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 16 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 8.9 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 37 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 21.8 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 94513, + "reliquary": { + "level": 21, + "mainPropId": 15008, + "appendPropIdList": [ + 501063, + 501204, + 501221, + 501024, + 501204, + 501064, + 501221, + 501203 + ] + }, + "flat": { + "nameTextMapHash": "3102891332", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_FIRE_ADD_HURT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 11.1 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 11.3 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 10.9 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 299 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 93534, + "reliquary": { + "level": 21, + "mainPropId": 13007, + "appendPropIdList": [ + 501244, + 501231, + 501224, + 501032, + 501232, + 501221, + 501231, + 501034, + 501222 + ] + }, + "flat": { + "nameTextMapHash": "259640420", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_CRITICAL", + "statValue": 31.1 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 23 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 14.2 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 19.4 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 10.5 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 15509, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "115509": 0 + } + }, + "flat": { + "nameTextMapHash": "2918525947", + "rankLevel": 5, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 608 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 66.2 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Bow_Narukami" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000063, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "fightPropMap": { + "1": 12992.912109375, + "2": 5317.759765625, + "4": 868.540283203125, + "5": 344.07000732421875, + "6": 2.383999824523926, + "7": 830.0386962890625, + "8": 115.72999572753906, + "9": 0.050999999046325684, + "20": 0.3377000093460083, + "21": 0, + "22": 0.9973000288009644, + "23": 1.6688681840896606, + "26": 0, + "27": 0, + "28": 0, + "29": 0, + "30": 0, + "40": 0, + "41": 0, + "42": 0, + "43": 0, + "44": 0, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "75": 80, + "1005": 80, + "1010": 16058.029296875, + "2000": 18310.671875, + "2001": 3283.210205078125, + "2002": 988.1006469726562, + "2003": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 6301, + "inherentProudSkillList": [ + 632101, + 632201, + 632301 + ], + "skillLevelMap": { + "10631": 10, + "10632": 10, + "10635": 10 + }, + "equipList": [ + { + "itemId": 93543, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501062, + 501091, + 501202, + 501224, + 501062, + 501064, + 501201, + 501222 + ] + }, + "flat": { + "nameTextMapHash": "2007346252", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 15.2 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 5.1 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 14 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 75524, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501082, + 501232, + 501201, + 501064, + 501062, + 501083, + 501081, + 501061, + 501061 + ] + }, + "flat": { + "nameTextMapHash": "1359349548", + "setNameTextMapHash": "1212345779", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 56 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 5.2 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 2.7 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 18.7 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15001_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 75554, + "reliquary": { + "level": 21, + "mainPropId": 10004, + "appendPropIdList": [ + 501202, + 501221, + 501233, + 501023, + 501223, + 501221, + 501023, + 501221, + 501231 + ] + }, + "flat": { + "nameTextMapHash": "1021872964", + "setNameTextMapHash": "1212345779", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 3.1 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 23.3 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 10.4 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 538 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15001_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 93513, + "reliquary": { + "level": 21, + "mainPropId": 15004, + "appendPropIdList": [ + 501081, + 501231, + 501203, + 501223, + 501221, + 501202, + 501232, + 501202 + ] + }, + "flat": { + "nameTextMapHash": "2718771884", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 16 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 9.7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 9.7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 12.4 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 90533, + "reliquary": { + "level": 21, + "mainPropId": 13004, + "appendPropIdList": [ + 501203, + 501231, + 501051, + 501084, + 501204, + 501234, + 501083, + 501054 + ] + }, + "flat": { + "nameTextMapHash": "3319039212", + "setNameTextMapHash": "156294403", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 7.4 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 11 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 33 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 44 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15016_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 13407, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "113407": 4 + } + }, + "flat": { + "nameTextMapHash": "3755004051", + "rankLevel": 4, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 565 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 30.6 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Pole_Zephyrus" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000002, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "fightPropMap": { + "1": 12858.20703125, + "2": 5078.75, + "4": 1016.359619140625, + "5": 311, + "6": 0.7400000095367432, + "7": 783.9254760742188, + "8": 67.12999725341797, + "9": 0.13850000500679016, + "20": 0.5126999616622925, + "21": 0, + "22": 2.5453240871429443, + "23": 1.1424000263214111, + "26": 0, + "27": 0, + "28": 79.25999450683594, + "29": 0, + "30": 0, + "40": 0.11999999731779099, + "41": 0.11999999731779099, + "42": 0.11999999731779099, + "43": 0.11999999731779099, + "44": 0.11999999731779099, + "45": 0.11999999731779099, + "46": 0.7360000014305115, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "75": 80, + "1005": 80, + "1010": 7304.2568359375, + "2000": 17936.95703125, + "2001": 2079.4658203125, + "2002": 959.629150390625, + "2003": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 201, + "inherentProudSkillList": [ + 22101, + 22201, + 22301 + ], + "skillLevelMap": { + "10013": 1, + "10018": 10, + "10019": 10, + "10024": 10 + }, + "equipList": [ + { + "itemId": 71544, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501223, + 501084, + 501062, + 501201, + 501202, + 501202, + 501063, + 501064, + 501222 + ] + }, + "flat": { + "nameTextMapHash": "3732361788", + "setNameTextMapHash": "933076627", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 13.2 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 23 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 15.7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 8.9 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_14001_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 71523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501204, + 501231, + 501064, + 501221, + 501222, + 501201, + 501221, + 501223 + ] + }, + "flat": { + "nameTextMapHash": "2833295244", + "setNameTextMapHash": "933076627", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 6.6 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 4.5 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 24.1 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_14001_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 71553, + "reliquary": { + "level": 21, + "mainPropId": 10004, + "appendPropIdList": [ + 501204, + 501024, + 501224, + 501244, + 501224, + 501242, + 501241, + 501202 + ] + }, + "flat": { + "nameTextMapHash": "1436920276", + "setNameTextMapHash": "933076627", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 7 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 299 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 15.5 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 58 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_14001_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 71513, + "reliquary": { + "level": 21, + "mainPropId": 15010, + "appendPropIdList": [ + 501232, + 501223, + 501202, + 501094, + 501231, + 501204, + 501202, + 501093 + ] + }, + "flat": { + "nameTextMapHash": "3716289628", + "setNameTextMapHash": "933076627", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ICE_ADD_HURT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 9.7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 10.1 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 13.9 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_14001_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 75533, + "reliquary": { + "level": 21, + "mainPropId": 13008, + "appendPropIdList": [ + 501084, + 501243, + 501064, + 501202, + 501204, + 501083, + 501202, + 501203 + ] + }, + "flat": { + "nameTextMapHash": "852890244", + "setNameTextMapHash": "1212345779", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 62.2 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 44 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 21 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 13.6 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15001_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 11509, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "111509": 0 + } + }, + "flat": { + "nameTextMapHash": "4124851547", + "rankLevel": 5, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 674 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 44.1 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Sword_Narukami" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000052, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "fightPropMap": { + "1": 12907.1904296875, + "2": 5287.8798828125, + "3": 0.39820000529289246, + "4": 945.316162109375, + "5": 311, + "6": 0.7283999919891357, + "7": 789.305419921875, + "8": 76.38999938964844, + "9": 0.07289999723434448, + "20": 0.6060000061988831, + "21": 0, + "22": 1.8530359268188477, + "23": 2.4460999965667725, + "26": 0, + "27": 0, + "28": 62.939998626708984, + "29": 0, + "30": 0, + "40": 0, + "41": 0.5784400105476379, + "42": 0, + "43": 0, + "44": 0, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "71": 90, + "1001": 90, + "1010": 17865.9375, + "2000": 23334.71484375, + "2001": 2131.56201171875, + "2002": 923.23583984375, + "2003": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 5201, + "inherentProudSkillList": [ + 522101, + 522201, + 522301, + 522501 + ], + "skillLevelMap": { + "10521": 8, + "10522": 10, + "10525": 10 + }, + "equipList": [ + { + "itemId": 94544, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501201, + 501233, + 501064, + 501224, + 501061, + 501232, + 501233, + 501224, + 501063 + ] + }, + "flat": { + "nameTextMapHash": "600966780", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 2.7 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 16.8 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 15.2 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 15.5 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 94523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501063, + 501222, + 501204, + 501022, + 501221, + 501064, + 501202, + 501224 + ] + }, + "flat": { + "nameTextMapHash": "2543687540", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 11.1 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 19.4 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 7 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 239 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 94554, + "reliquary": { + "level": 21, + "mainPropId": 10007, + "appendPropIdList": [ + 501081, + 501033, + 501204, + 501023, + 501203, + 501033, + 501032, + 501082, + 501032 + ] + }, + "flat": { + "nameTextMapHash": "3518357892", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 51.8 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 35 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 19.8 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 7.4 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 269 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 94513, + "reliquary": { + "level": 21, + "mainPropId": 15004, + "appendPropIdList": [ + 501221, + 501243, + 501094, + 501204, + 501203, + 501223, + 501224, + 501223 + ] + }, + "flat": { + "nameTextMapHash": "3102891332", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 27.2 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 21 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 7.3 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 7.4 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 71534, + "reliquary": { + "level": 21, + "mainPropId": 13007, + "appendPropIdList": [ + 501233, + 501244, + 501223, + 501084, + 501242, + 501234, + 501234, + 501232, + 501082 + ] + }, + "flat": { + "nameTextMapHash": "2853313156", + "setNameTextMapHash": "933076627", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_CRITICAL", + "statValue": 31.1 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 24 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 42 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 7 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 42 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_14001_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 13501, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "113501": 0 + } + }, + "flat": { + "nameTextMapHash": "3235324891", + "rankLevel": 5, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 608 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 66.2 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Pole_Homa" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000030, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "talentIdList": [ + 301 + ], + "fightPropMap": { + "1": 14695.09375, + "2": 5825.6298828125, + "3": 0.6991000175476074, + "4": 815.9210205078125, + "5": 346.0199890136719, + "6": 0.3148000240325928, + "7": 737.8121948242188, + "8": 60.18000030517578, + "20": 0.5593000054359436, + "21": 0, + "22": 0.8884999752044678, + "23": 1.862368106842041, + "25": 0, + "26": 0, + "27": 0, + "28": 37.29999923706055, + "29": 0, + "30": 0, + "40": 0, + "41": 0, + "42": 0, + "43": 0, + "44": 0, + "45": 0.7539999485015869, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "76": 40, + "81": 0, + "1006": 40, + "1010": 30794.0625, + "2000": 30794.0625, + "2001": 1418.79296875, + "2002": 797.9921875, + "2003": 0, + "3023": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 3001, + "inherentProudSkillList": [ + 302101, + 302201, + 302301 + ], + "skillLevelMap": { + "10301": 6, + "10302": 9, + "10303": 10 + }, + "equipList": [ + { + "itemId": 94543, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501053, + 501032, + 501204, + 501222, + 501201, + 501223, + 501053, + 501223 + ] + }, + "flat": { + "nameTextMapHash": "2246743908", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 35 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 4.7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 6.6 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 20.2 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 94523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501201, + 501023, + 501081, + 501232, + 501204, + 501231, + 501232, + 501204 + ] + }, + "flat": { + "nameTextMapHash": "2543687540", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 10.5 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 269 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 16 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 14.9 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 94554, + "reliquary": { + "level": 21, + "mainPropId": 10002, + "appendPropIdList": [ + 501062, + 501243, + 501201, + 501232, + 501232, + 501064, + 501064, + 501241, + 501064 + ] + }, + "flat": { + "nameTextMapHash": "3518357892", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 22.2 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 37 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 2.7 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 10.4 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 94513, + "reliquary": { + "level": 21, + "mainPropId": 15013, + "appendPropIdList": [ + 501032, + 501221, + 501063, + 501231, + 501032, + 501031, + 501233, + 501033 + ] + }, + "flat": { + "nameTextMapHash": "3102891332", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ROCK_ADD_HURT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 18.7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 5.4 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 5.3 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 10.4 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 75533, + "reliquary": { + "level": 21, + "mainPropId": 13007, + "appendPropIdList": [ + 501224, + 501083, + 501024, + 501061, + 501084, + 501022, + 501221, + 501022 + ] + }, + "flat": { + "nameTextMapHash": "852890244", + "setNameTextMapHash": "1212345779", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_CRITICAL", + "statValue": 31.1 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 13.2 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 44 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 777 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 4.1 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15001_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 13407, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "113407": 4 + } + }, + "flat": { + "nameTextMapHash": "3755004051", + "rankLevel": 4, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 565 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 30.6 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Pole_Zephyrus" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000016, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "talentIdList": [ + 161, + 162 + ], + "fightPropMap": { + "1": 12980.666015625, + "2": 5497.009765625, + "3": 0.09909999370574951, + "4": 942.9243774414062, + "5": 431.6100158691406, + "6": 2.018052101135254, + "7": 783.9254760742188, + "9": 0.05829999968409538, + "20": 0.2809000015258789, + "21": 0, + "22": 1.1993000507354736, + "23": 1.1749000549316406, + "26": 0, + "27": 0, + "28": 0, + "29": 0, + "30": 0, + "40": 0.15000000596046448, + "41": 0, + "42": 0, + "43": 0, + "44": 0, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "70": 40, + "1010": 19764.05859375, + "2000": 19764.05859375, + "2001": 3277.405029296875, + "2002": 829.6283569335938, + "2003": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 1601, + "inherentProudSkillList": [ + 162101, + 162201, + 162301 + ], + "skillLevelMap": { + "10160": 6, + "10161": 7, + "10165": 8 + }, + "equipList": [ + { + "itemId": 80543, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501204, + 501054, + 501221, + 501064, + 501224, + 501221, + 501221, + 501063 + ] + }, + "flat": { + "nameTextMapHash": "1149648428", + "setNameTextMapHash": "1524173875", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 3.9 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 19 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 24.1 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 11.1 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15006_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 93523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501223, + 501234, + 501062, + 501024, + 501223, + 501222, + 501021, + 501063 + ] + }, + "flat": { + "nameTextMapHash": "1815350452", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 20.2 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 6.5 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 9.9 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 508 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 93553, + "reliquary": { + "level": 21, + "mainPropId": 10004, + "appendPropIdList": [ + 501053, + 501223, + 501033, + 501021, + 501224, + 501221, + 501032, + 501054 + ] + }, + "flat": { + "nameTextMapHash": "2767946268", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 37 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 20.2 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 9.9 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 209 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 80513, + "reliquary": { + "level": 21, + "mainPropId": 15004, + "appendPropIdList": [ + 501221, + 501232, + 501051, + 501092, + 501051, + 501233, + 501054, + 501053 + ] + }, + "flat": { + "nameTextMapHash": "1107654620", + "setNameTextMapHash": "1524173875", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 5.4 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 11 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 64 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 5.8 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15006_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 12502, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "112502": 0 + } + }, + "flat": { + "nameTextMapHash": "3995710363", + "rankLevel": 5, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 608 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 49.6 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Claymore_Wolfmound" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000022, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "fightPropMap": { + "1": 10531.4833984375, + "2": 5885.39013671875, + "3": 0.33230000734329224, + "4": 772.7021484375, + "5": 355.75, + "6": 0.08740000426769257, + "7": 668.642333984375, + "8": 97.22000122070312, + "9": 0.10930000245571136, + "20": 0.18219999969005585, + "21": 0, + "22": 0.76419997215271, + "23": 1.6179999113082886, + "26": 0, + "27": 0, + "28": 853.10400390625, + "29": 0, + "30": 0, + "40": 0, + "41": 0, + "42": 0, + "43": 0, + "44": 0.15000000596046448, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "74": 60, + "81": 0, + "1004": 60, + "1010": 13854.7041015625, + "2000": 19916.484375, + "2001": 1195.986328125, + "2002": 838.9449462890625, + "2003": 0, + "3023": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 2201, + "inherentProudSkillList": [ + 222101, + 222201, + 222301 + ], + "skillLevelMap": { + "10221": 1, + "10224": 8, + "10225": 8 + }, + "equipList": [ + { + "itemId": 76544, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501241, + 501051, + 501202, + 501234, + 501242, + 501241, + 501242, + 501201, + 501204 + ] + }, + "flat": { + "nameTextMapHash": "2411209276", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 70 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 14 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 9.7 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 6.5 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 76523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501024, + 501242, + 501083, + 501061, + 501243, + 501242, + 501082, + 501084 + ] + }, + "flat": { + "nameTextMapHash": "2718260116", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 299 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 58 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 63 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 4.1 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 76553, + "reliquary": { + "level": 21, + "mainPropId": 10008, + "appendPropIdList": [ + 501051, + 501203, + 501023, + 501082, + 501053, + 501081, + 501023, + 501023 + ] + }, + "flat": { + "nameTextMapHash": "3520684620", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 187 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 31 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 3.5 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 807 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 35 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 75514, + "reliquary": { + "level": 21, + "mainPropId": 15007, + "appendPropIdList": [ + 501221, + 501033, + 501231, + 501091, + 501221, + 501224, + 501224, + 501234, + 501034 + ] + }, + "flat": { + "nameTextMapHash": "3804138820", + "setNameTextMapHash": "1212345779", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 187 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 26.4 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 11.1 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 11 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 5.1 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15001_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 76534, + "reliquary": { + "level": 21, + "mainPropId": 13010, + "appendPropIdList": [ + 501032, + 501233, + 501092, + 501062, + 501031, + 501031, + 501031, + 501234, + 501033 + ] + }, + "flat": { + "nameTextMapHash": "893403708", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 187 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 22.2 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 12.3 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 4.7 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 15402, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "115402": 0 + } + }, + "flat": { + "nameTextMapHash": "2556914683", + "rankLevel": 4, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 510 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 165 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Bow_Troupe" + } + } + ], + "fetterInfo": { + "expLevel": 7 + } + }, + { + "avatarId": 10000047, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "talentIdList": [ + 471 + ], + "fightPropMap": { + "1": 13348.04296875, + "2": 4989.1298828125, + "3": 0.1573999971151352, + "4": 806.1871337890625, + "5": 408.27001953125, + "7": 806.9820556640625, + "8": 157.39999389648438, + "9": 0.23320001363754272, + "20": 0.12389999628067017, + "21": 0, + "22": 0.5544000267982483, + "23": 1.5700000524520874, + "26": 0, + "27": 0, + "28": 968.3040161132812, + "29": 0, + "30": 0, + "40": 0, + "41": 0, + "42": 0, + "43": 0, + "44": 0.15000000596046448, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "74": 60, + "1004": 60, + "1010": 11015.78125, + "2000": 20438.15625, + "2001": 1214.4571533203125, + "2002": 1152.5703125, + "2003": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 4701, + "inherentProudSkillList": [ + 472101, + 472201, + 472301 + ], + "skillLevelMap": { + "10471": 9, + "10472": 9, + "10475": 9 + }, + "equipList": [ + { + "itemId": 76543, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501221, + 501232, + 501242, + 501093, + 501243, + 501241, + 501241, + 501231 + ] + }, + "flat": { + "nameTextMapHash": "49554644", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 5.4 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 9.7 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 72 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 6.6 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 76524, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501241, + 501021, + 501084, + 501233, + 501244, + 501241, + 501234, + 501083, + 501234 + ] + }, + "flat": { + "nameTextMapHash": "2620540004", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 56 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 209 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 44 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 18.8 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 76553, + "reliquary": { + "level": 21, + "mainPropId": 10008, + "appendPropIdList": [ + 501232, + 501034, + 501203, + 501082, + 501083, + 501082, + 501204, + 501082 + ] + }, + "flat": { + "nameTextMapHash": "3520684620", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 187 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 5.2 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 7.4 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 76 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 94514, + "reliquary": { + "level": 21, + "mainPropId": 15007, + "appendPropIdList": [ + 501083, + 501052, + 501234, + 501093, + 501053, + 501233, + 501053, + 501091, + 501091 + ] + }, + "flat": { + "nameTextMapHash": "14296500", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 187 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 21 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 51 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 12.3 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 16.8 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 76533, + "reliquary": { + "level": 21, + "mainPropId": 13010, + "appendPropIdList": [ + 501081, + 501234, + 501033, + 501052, + 501051, + 501032, + 501053, + 501231 + ] + }, + "flat": { + "nameTextMapHash": "2442374844", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 187 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 16 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 11 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 9.9 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 47 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 11407, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "111407": 4 + } + }, + "flat": { + "nameTextMapHash": "4103022435", + "rankLevel": 4, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 510 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 165 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Sword_Exotic" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000032, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "talentIdList": [ + 321, + 322, + 323, + 324, + 325, + 326 + ], + "fightPropMap": { + "1": 12397.404296875, + "2": 5765.8798828125, + "3": 0.9319999814033508, + "4": 811.1904296875, + "5": 375.20001220703125, + "6": 0.2565000057220459, + "7": 771.2493286132812, + "8": 41.66999816894531, + "9": 0.3061000108718872, + "20": 0.1160999983549118, + "21": 0, + "22": 0.7487000226974487, + "23": 2.4000000953674316, + "26": 0, + "27": 0, + "28": 113.40794372558594, + "29": 0, + "30": 0, + "40": 0, + "41": 0, + "42": 0, + "43": 0, + "44": 0, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "70": 60, + "1000": 60, + "1010": 24258.791015625, + "2000": 29717.6640625, + "2001": 1394.4608154296875, + "2002": 1048.998779296875, + "2003": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 3201, + "inherentProudSkillList": [ + 322101, + 322201, + 322301 + ], + "skillLevelMap": { + "10321": 3, + "10322": 7, + "10323": 10 + }, + "proudSkillExtraLevelMap": { + "3232": 3, + "3239": 3 + }, + "equipList": [ + { + "itemId": 81543, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501053, + 501222, + 501094, + 501234, + 501233, + 501051, + 501221, + 501221 + ] + }, + "flat": { + "nameTextMapHash": "3120588556", + "setNameTextMapHash": "1751039235", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 31 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 17.1 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 7.3 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 12.3 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15007_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 81523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501064, + 501224, + 501203, + 501233, + 501233, + 501061, + 501231, + 501202 + ] + }, + "flat": { + "nameTextMapHash": "815154916", + "setNameTextMapHash": "1751039235", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 9.9 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 7.8 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 6.6 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 16.2 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15007_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 81553, + "reliquary": { + "level": 21, + "mainPropId": 10007, + "appendPropIdList": [ + 501241, + 501052, + 501024, + 501091, + 501094, + 501091, + 501242, + 501092 + ] + }, + "flat": { + "nameTextMapHash": "514109556", + "setNameTextMapHash": "1751039235", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 51.8 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 35 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 16 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 299 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 23.3 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15007_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 76513, + "reliquary": { + "level": 21, + "mainPropId": 15002, + "appendPropIdList": [ + 501234, + 501053, + 501062, + 501084, + 501233, + 501233, + 501082, + 501231 + ] + }, + "flat": { + "nameTextMapHash": "2114829356", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 22.7 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 18 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 4.7 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 42 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 81533, + "reliquary": { + "level": 21, + "mainPropId": 13002, + "appendPropIdList": [ + 501233, + 501064, + 501022, + 501244, + 501231, + 501063, + 501021, + 501022 + ] + }, + "flat": { + "nameTextMapHash": "73409068", + "setNameTextMapHash": "1751039235", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 10.4 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 11.1 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 687 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 23 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15007_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 11410, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "111410": 0 + } + }, + "flat": { + "nameTextMapHash": "2947140987", + "rankLevel": 4, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 620 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 55 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Sword_Outlaw" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000064, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "talentIdList": [ + 641, + 642, + 643, + 644 + ], + "fightPropMap": { + "1": 10657.416015625, + "2": 4989.1298828125, + "3": 0.2624000012874603, + "4": 700.763427734375, + "5": 346.010009765625, + "6": 0, + "7": 734.3931884765625, + "8": 178.239990234375, + "9": 2.35509991645813, + "20": 0.10830000042915344, + "21": 0, + "22": 0.5622000098228455, + "23": 2.586699962615967, + "26": 0, + "27": 0, + "28": 60.6099967956543, + "29": 0, + "30": 0, + "40": 0, + "41": 0, + "42": 0, + "43": 0, + "44": 0, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "76": 60, + "81": 0, + "1006": 60, + "1010": 9784.892578125, + "2000": 18443.05078125, + "2001": 1046.7734375, + "2002": 2642.20263671875, + "2003": 0, + "3023": 0, + "3045": 0, + "3046": 1 + }, + "skillDepotId": 6401, + "inherentProudSkillList": [ + 642101, + 642201, + 642301 + ], + "skillLevelMap": { + "10641": 2, + "10642": 9, + "10643": 10 + }, + "proudSkillExtraLevelMap": { + "6439": 3 + }, + "equipList": [ + { + "itemId": 94543, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501093, + 501083, + 501233, + 501052, + 501094, + 501231, + 501054, + 501084 + ] + }, + "flat": { + "nameTextMapHash": "2246743908", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 13.9 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 44 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 10.4 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 35 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 95523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501232, + 501091, + 501082, + 501032, + 501093, + 501233, + 501084, + 501091 + ] + }, + "flat": { + "nameTextMapHash": "3214733804", + "setNameTextMapHash": "2546254811", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 11 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 16.8 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 42 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 4.7 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15021_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 95553, + "reliquary": { + "level": 21, + "mainPropId": 10006, + "appendPropIdList": [ + 501231, + 501201, + 501021, + 501034, + 501202, + 501232, + 501033, + 501033 + ] + }, + "flat": { + "nameTextMapHash": "781886340", + "setNameTextMapHash": "2546254811", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 58.3 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 9.7 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 5.8 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 209 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 16.3 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15021_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 94513, + "reliquary": { + "level": 21, + "mainPropId": 15006, + "appendPropIdList": [ + 501232, + 501243, + 501082, + 501033, + 501233, + 501081, + 501082, + 501084 + ] + }, + "flat": { + "nameTextMapHash": "3102891332", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 58.3 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 11 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 21 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 76 + }, + { + "appendPropId": "FIGHT_PROP_HP_PERCENT", + "statValue": 5.3 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 93533, + "reliquary": { + "level": 21, + "mainPropId": 13006, + "appendPropIdList": [ + 501233, + 501081, + 501241, + 501222, + 501232, + 501244, + 501234, + 501234 + ] + }, + "flat": { + "nameTextMapHash": "2650209148", + "setNameTextMapHash": "4144069251", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 58.3 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 24 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 16 + }, + { + "appendPropId": "FIGHT_PROP_ELEMENT_MASTERY", + "statValue": 40 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 6.2 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15019_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 13402, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "113402": 0 + } + }, + "flat": { + "nameTextMapHash": "1154009435", + "rankLevel": 4, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 510 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 45.9 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Pole_Proto" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + }, + { + "avatarId": 10000025, + "propMap": { + "1001": { + "type": 1001, + "ival": "0" + }, + "1002": { + "type": 1002, + "ival": "6", + "val": "6" + }, + "1003": { + "type": 1003, + "ival": "0" + }, + "1004": { + "type": 1004, + "ival": "0" + }, + "4001": { + "type": 4001, + "ival": "90", + "val": "90" + }, + "10010": { + "type": 10010, + "ival": "24000", + "val": "24000" + } + }, + "talentIdList": [ + 251, + 252, + 253, + 254 + ], + "fightPropMap": { + "1": 10222.419921875, + "2": 5317.75, + "4": 656.1405029296875, + "5": 388.82000732421875, + "6": 0.9040999412536621, + "7": 757.598876953125, + "8": 152.77999877929688, + "9": 0.18950000405311584, + "20": 0.5593000054359436, + "21": 0, + "22": 1.1371999979019165, + "23": 1.9614317417144775, + "26": 0, + "27": 0, + "28": 0, + "29": 0, + "30": 0, + "40": 0, + "41": 0, + "42": 0.6660000085830688, + "43": 0, + "44": 0, + "45": 0, + "46": 0, + "50": 0, + "51": 0, + "52": 0, + "53": 0, + "54": 0, + "55": 0, + "56": 0, + "72": 80, + "1002": 20.006603240966797, + "1010": 15540.169921875, + "2000": 15540.169921875, + "2001": 1638.177001953125, + "2002": 1053.94384765625, + "2003": 0 + }, + "skillDepotId": 2501, + "inherentProudSkillList": [ + 252101, + 252201, + 252301 + ], + "skillLevelMap": { + "10381": 2, + "10382": 9, + "10385": 9 + }, + "proudSkillExtraLevelMap": { + "2539": 3 + }, + "equipList": [ + { + "itemId": 94543, + "reliquary": { + "level": 21, + "mainPropId": 14001, + "appendPropIdList": [ + 501231, + 501202, + 501222, + 501082, + 501223, + 501223, + 501084, + 501221 + ] + }, + "flat": { + "nameTextMapHash": "2246743908", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_HP", + "statValue": 4780 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 4.5 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 3.1 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 25.6 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 42 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_4", + "equipType": "EQUIP_BRACER" + } + }, + { + "itemId": 94523, + "reliquary": { + "level": 21, + "mainPropId": 12001, + "appendPropIdList": [ + 501202, + 501062, + 501081, + 501222, + 501203, + 501082, + 501064, + 501084 + ] + }, + "flat": { + "nameTextMapHash": "2543687540", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK", + "statValue": 311 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 6.6 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 10.5 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 58 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 6.2 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_2", + "equipType": "EQUIP_NECKLACE" + } + }, + { + "itemId": 94554, + "reliquary": { + "level": 21, + "mainPropId": 10004, + "appendPropIdList": [ + 501223, + 501082, + 501051, + 501232, + 501051, + 501221, + 501223, + 501232, + 501053 + ] + }, + "flat": { + "nameTextMapHash": "3518357892", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 19.4 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 19 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 45 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 10.4 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_5", + "equipType": "EQUIP_SHOES" + } + }, + { + "itemId": 76513, + "reliquary": { + "level": 21, + "mainPropId": 15011, + "appendPropIdList": [ + 501062, + 501203, + 501022, + 501051, + 501024, + 501062, + 501201, + 501204 + ] + }, + "flat": { + "nameTextMapHash": "2114829356", + "setNameTextMapHash": "1562601179", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_WATER_ADD_HURT", + "statValue": 46.6 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_ATTACK_PERCENT", + "statValue": 9.3 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL", + "statValue": 10.1 + }, + { + "appendPropId": "FIGHT_PROP_HP", + "statValue": 538 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 14 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15002_1", + "equipType": "EQUIP_RING" + } + }, + { + "itemId": 94533, + "reliquary": { + "level": 21, + "mainPropId": 13007, + "appendPropIdList": [ + 501082, + 501054, + 501222, + 501091, + 501222, + 501093, + 501094, + 501081 + ] + }, + "flat": { + "nameTextMapHash": "1804680132", + "setNameTextMapHash": "2276480763", + "rankLevel": 5, + "reliquaryMainstat": { + "mainPropId": "FIGHT_PROP_CRITICAL", + "statValue": 31.1 + }, + "reliquarySubstats": [ + { + "appendPropId": "FIGHT_PROP_DEFENSE", + "statValue": 35 + }, + { + "appendPropId": "FIGHT_PROP_ATTACK", + "statValue": 19 + }, + { + "appendPropId": "FIGHT_PROP_CRITICAL_HURT", + "statValue": 12.4 + }, + { + "appendPropId": "FIGHT_PROP_DEFENSE_PERCENT", + "statValue": 19 + } + ], + "itemType": "ITEM_RELIQUARY", + "icon": "UI_RelicIcon_15020_3", + "equipType": "EQUIP_DRESS" + } + }, + { + "itemId": 11403, + "weapon": { + "level": 90, + "promoteLevel": 6, + "affixMap": { + "111403": 4 + } + }, + "flat": { + "nameTextMapHash": "1990641987", + "rankLevel": 4, + "weaponStats": [ + { + "appendPropId": "FIGHT_PROP_BASE_ATTACK", + "statValue": 454 + }, + { + "appendPropId": "FIGHT_PROP_CHARGE_EFFICIENCY", + "statValue": 61.3 + } + ], + "itemType": "ITEM_WEAPON", + "icon": "UI_EquipIcon_Sword_Fossil" + } + } + ], + "fetterInfo": { + "expLevel": 10 + } + } + ], + "ttl": 120, + "uid": "829702635", + "timestamp": 1668598657 +} \ No newline at end of file From 8a7684ac9ef9459bad82e5131eb766d9998b1e2e Mon Sep 17 00:00:00 2001 From: "M307 (Mac)" Date: Fri, 17 Feb 2023 01:29:19 +0700 Subject: [PATCH 09/10] 1.4.0 --> 1.4.1 --- enkanetwork/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enkanetwork/__init__.py b/enkanetwork/__init__.py index 9094e0e..d1fa28b 100644 --- a/enkanetwork/__init__.py +++ b/enkanetwork/__init__.py @@ -24,7 +24,7 @@ DEALINGS IN THE SOFTWARE.""" __title__ = 'enkanetwork.py' __author__ = 'M-307' -__version__ = '1.4.0' +__version__ = '1.4.1' __license__ = 'MIT' __copyright__ = 'Copyright 2022-present M-307' From 80442f1ec4b91c9b80ea69624ae149a0302a941b Mon Sep 17 00:00:00 2001 From: "M307 (Mac)" Date: Fri, 17 Feb 2023 01:38:37 +0700 Subject: [PATCH 10/10] Update sync - Add export & import build example --- .gitignore | 5 +++-- example/build/export_build.py | 16 ++++++++++++++++ example/build/import_build.py | 9 +++++++++ example/{ => build}/sync/main.py | 0 example/{ => build}/sync/raw.json | 0 5 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 example/build/export_build.py create mode 100644 example/build/import_build.py rename example/{ => build}/sync/main.py (100%) rename example/{ => build}/sync/raw.json (100%) diff --git a/.gitignore b/.gitignore index ba7225d..4d28163 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ __pycache__ enkanetwork.egg-info -build +./build enkanetwork.py.egg-info dist test/*.test.py @@ -8,4 +8,5 @@ test/*.test.py .idea git-story_media env -export.json \ No newline at end of file +export.json +843715177.json \ No newline at end of file diff --git a/example/build/export_build.py b/example/build/export_build.py new file mode 100644 index 0000000..a633fab --- /dev/null +++ b/example/build/export_build.py @@ -0,0 +1,16 @@ +import asyncio +import json + +from enkanetwork import EnkaNetworkAPI + +client = EnkaNetworkAPI(lang="th") + +async def main(): + async with client: + # Fetch data + raw = await client.fetch_raw_data(843715177) + # Write JSON file + with open(f"./{raw['uid']}.json", "w", encoding="utf-8") as w: + json.dump(raw, w, indent=4) + +asyncio.run(main()) \ No newline at end of file diff --git a/example/build/import_build.py b/example/build/import_build.py new file mode 100644 index 0000000..db6e3d9 --- /dev/null +++ b/example/build/import_build.py @@ -0,0 +1,9 @@ +import json + +from enkanetwork.model.base import EnkaNetworkResponse + +UID = "843715177" + +with open(f"./{UID}.json" , "r", encoding="utf-8") as f: + response = EnkaNetworkResponse.parse_obj(json.load(f)) + print(response) \ No newline at end of file diff --git a/example/sync/main.py b/example/build/sync/main.py similarity index 100% rename from example/sync/main.py rename to example/build/sync/main.py diff --git a/example/sync/raw.json b/example/build/sync/raw.json similarity index 100% rename from example/sync/raw.json rename to example/build/sync/raw.json