From 0cbe460e49e082d6508974b87785e69eba234d30 Mon Sep 17 00:00:00 2001 From: CAtlas0784 Date: Wed, 28 Oct 2026 18:54:43 +0700 Subject: [PATCH] Update GaCy-GO --- .gitignore | 1 + README.md | 70 +- assets_default.go | 18 + assets_ship.go | 95 + assets_ship_test.go | 47 + cmd/gameserver/main.go | 5 + cmd/sdkserver/main.go | 5 + docs/FFGO-CW-REFERENCE-20261026.md | 101 + docs/GACHA-NATIVE-ADAPTER.md | 142 + docs/GLM-BETA-DATA.md | 136 + docs/GLM-BETA-EVENTS.md | 225 + docs/GLM-GACHA-GUIDE.md | 301 + docs/UI-RECOVERY-20261024.md | 35 + docs/ZCODE-HANDOFF.md | 549 + docs/aa-round-sync.md | 32 + docs/aa-scene-npc-recovery.md | 74 + docs/comic-dessert-current-contract.md | 64 + docs/currency-wars-6900-audit.md | 60 + docs/currency-wars-coverage.md | 87 + docs/currency-wars-current-consumer-notes.md | 114 + docs/currency-wars-ffgo-orbs.md | 88 + docs/currency-wars-ffgo-workflow-20261026.md | 119 + docs/currency-wars-investigation.md | 56 +- docs/currency-wars-response-boundary.md | 43 + docs/currency-wars-route-factory.md | 63 + docs/cw-bonfire-phase-contract.md | 39 + docs/cw-book-entry-recovery.md | 93 + docs/cw-route-continuation-audit.md | 40 + docs/ffgo-cw-resource-reference.md | 94 + docs/offline-gameplay-continuation.md | 198 + docs/ping-colors.md | 34 + docs/prydwen-endgame-recommendations.md | 10 +- docs/ungrouped-proto-guide.md | 290 + freesr-data.json | 116247 +++++---------- internal/common/aa_round_selection.go | 111 + internal/common/activity_preview.go | 159 + internal/common/aha_help.go | 93 + internal/common/aha_help_test.go | 78 + internal/common/comic_dessert.go | 89 + .../currency_wars_activity_conditions.go | 115 + internal/common/currency_wars_bonfire.go | 118 + internal/common/currency_wars_catalog.go | 5 + internal/common/currency_wars_commands.go | 20 +- internal/common/currency_wars_crafts.go | 47 + internal/common/currency_wars_monsters.go | 54 + internal/common/currency_wars_orb_recipes.go | 120 + .../common/currency_wars_reference_nodes.go | 76 + .../currency_wars_reference_penalties.go | 51 + internal/common/currency_wars_rewards.go | 95 + .../currency_wars_role_compatibility.go | 95 + internal/common/currency_wars_roles.go | 1 + internal/common/currency_wars_spotlights.go | 7 +- internal/common/currency_wars_store.go | 111 +- internal/common/currency_wars_trials.go | 60 + internal/common/currency_wars_variants.go | 1 + internal/common/facecam.go | 56 + internal/common/gacha_catalog.go | 284 + internal/common/gacha_catalog_test.go | 99 + internal/common/inventory_material_patch.go | 52 + internal/common/limited_gacha.go | 410 + internal/common/models.go | 13 +- internal/common/monster_settings_catalog.go | 279 + internal/common/nanoka_monster_metadata.go | 249 + internal/common/persistent_patch.go | 34 + internal/common/res.go | 58 +- internal/common/runtime_assets_ship_test.go | 37 + internal/common/stella_jump.go | 179 + internal/common/stella_jump_test.go | 95 + internal/gameserver/aa_round_sync.go | 54 + internal/gameserver/aa_round_sync.lua | 50 + internal/gameserver/aha_help.go | 71 + internal/gameserver/challenge_run.go | 4 +- internal/gameserver/currency_wars_battle.go | 48 +- internal/gameserver/currency_wars_bonfire.go | 469 + internal/gameserver/currency_wars_commands.go | 27 +- internal/gameserver/currency_wars_craft.go | 150 + internal/gameserver/currency_wars_dispatch.go | 64 + .../gameserver/currency_wars_encounter.go | 64 + .../currency_wars_encounter_camp.go | 106 + internal/gameserver/currency_wars_enemy.go | 40 +- .../gameserver/currency_wars_entry_choice.go | 59 +- .../gameserver/currency_wars_equipment.go | 227 + .../gameserver/currency_wars_experience.go | 5 +- internal/gameserver/currency_wars_forge.go | 146 + internal/gameserver/currency_wars_grants.go | 223 + internal/gameserver/currency_wars_merge.go | 8 + internal/gameserver/currency_wars_node.go | 6 +- internal/gameserver/currency_wars_orb.go | 382 + .../gameserver/currency_wars_preparation.go | 50 +- internal/gameserver/currency_wars_quit.go | 172 + .../gameserver/currency_wars_quit_test.go | 87 + .../currency_wars_reference_enemy.go | 364 + .../currency_wars_role_projection.go | 48 + .../gameserver/currency_wars_route_factory.go | 119 + internal/gameserver/currency_wars_save.go | 30 +- .../gameserver/currency_wars_settlement.go | 118 +- .../gameserver/currency_wars_spotlight.go | 40 +- internal/gameserver/currency_wars_supply.go | 187 + .../gameserver/currency_wars_supply_layer.go | 55 + internal/gameserver/currency_wars_test.go | 108 +- internal/gameserver/currency_wars_tracking.go | 8 +- .../gameserver/currency_wars_transactions.go | 25 +- internal/gameserver/currency_wars_trial.go | 28 + internal/gameserver/gacha_presentation.go | 104 + internal/gameserver/gacha_presentation.lua | 651 + .../gameserver/handlers_activity_preview.go | 44 + internal/gameserver/handlers_battle.go | 30 +- internal/gameserver/handlers_challenge.go | 83 +- .../gameserver/handlers_challenge_flow.go | 8 +- .../gameserver/handlers_challenge_scene.go | 56 +- internal/gameserver/handlers_comic_dessert.go | 35 + internal/gameserver/handlers_currency_wars.go | 22 +- internal/gameserver/handlers_gacha.go | 302 + internal/gameserver/handlers_misc.go | 45 +- internal/gameserver/handlers_mission.go | 41 +- internal/gameserver/handlers_player.go | 47 +- internal/gameserver/handlers_recommend.go | 294 +- .../gameserver/handlers_recommend_test.go | 56 + internal/gameserver/handlers_stella_jump.go | 113 + internal/gameserver/handlers_tutorial_ids.go | 8 +- internal/gameserver/limited_gacha.go | 99 + internal/gameserver/peak_scene_overrides.go | 91 + internal/gameserver/session.go | 9 + internal/gameserver/technique.go | 4 + internal/gameserver/world_battle.go | 6 +- internal/sdkserver/api.go | 55 +- internal/sdkserver/api_aa_round_selection.go | 45 + internal/sdkserver/api_aha_help.go | 47 + internal/sdkserver/api_camera.go | 34 + internal/sdkserver/api_client_unstuck.go | 82 +- internal/sdkserver/api_currency_wars.go | 157 +- internal/sdkserver/api_inventory_test.go | 4 + internal/sdkserver/api_monster_settings.go | 47 + persistent | 42 +- protocol/proto/ungrouped.pb.go | 4269 + protocol/proto/ungrouped.proto | 388 + resources/ActivityPreviewPolicy.json | 89 + resources/AhaHelpConfig.json | 8 + resources/ChallengePeakSceneOverrides.json | 287 + resources/ComicDessertCatalog.json | 267 + resources/CurrencyWarsActivityConditions.json | 38 + resources/CurrencyWarsBonfire.json | 1321 + resources/CurrencyWarsCrafts.json | 829 + resources/CurrencyWarsCurrentRoles.json | 149 + resources/CurrencyWarsEnemyPlans.json | 64 +- resources/CurrencyWarsMonsters.json | 346 + resources/CurrencyWarsNodeTransitions.json | 31 +- resources/CurrencyWarsOrbRecipes.json | 8976 ++ resources/CurrencyWarsReferenceEnemies.json | 390 + resources/CurrencyWarsReferenceNodes.json | 4862 + resources/CurrencyWarsReferencePenalties.json | 809 + resources/CurrencyWarsRewards.json | 13828 ++ resources/CurrencyWarsRoleCompatibility.json | 297 + resources/CurrencyWarsSettlementRules.json | 49 +- resources/CurrencyWarsTrialAvatars.json | 50 + resources/EidolonConfig.json | 311 +- resources/GachaBannerMapping.json | 602 + resources/GachaLootCatalog.json | 688 + resources/GachaSandboxPolicy.json | 41 + resources/MissionCompatibility.json | 246 +- resources/PreviewAssetAvailability.json | 305 + resources/PreviewGameplayCatalog.json | 577 + resources/PrydwenEndgameTeams.json | 204 +- resources/StellaJumpConfig.json | 24 + run.ps1 | 26 +- scripts/facecam_probe_temp.lua | 20 + scripts/freecam.lua | 100 +- scripts/ping_rainbow.lua | 190 + tools/AI TOOLBOX/skills/SKILL.md | 2 +- ...pare_cw_reference_protocol.cpython-314.pyc | Bin 0 -> 9092 bytes .../dump_embedded_proto.cpython-314.pyc | Bin 0 -> 5297 bytes .../dump_go_workflow.cpython-314.pyc | Bin 0 -> 8587 bytes .../export_cw_enemy_plan.cpython-314.pyc | Bin 0 -> 7546 bytes ...rt_ffgo_embedded_resources.cpython-314.pyc | Bin 0 -> 5881 bytes .../inspect_luau_v4.cpython-314.pyc | Bin 0 -> 5273 bytes tools/aa_npc_config_metadata.lua | 50 + tools/aa_round_refresh_metadata.lua | 15 + tools/adventure_final_readiness.lua | 34 + tools/adventure_global_dependencies.lua | 29 + tools/build_cw_role_compatibility.py | 18 + tools/build_gacha_banner_mapping.py | 110 + tools/build_gacha_presentation_probe.py | 94 + tools/build_glm_beta_handoff.py | 494 + tools/build_mission_config_audit.py | 67 + tools/capture_named_baked_modules.js | 32 + tools/check_preview_assets.py | 24 + tools/comic_dessert_services_metadata.lua | 31 + tools/comic_flat_tables_capture.js | 41 + tools/comic_level_start_metadata.lua | 48 + tools/comic_progress_metadata.lua | 16 + tools/comic_repository_hierarchy.lua | 31 + tools/comic_stella_config_capture.lua | 80 + tools/comic_stella_schema_capture.lua | 65 + tools/comic_table_metadata.lua | 18 + tools/compare_cw_reference_protocol.py | 71 + tools/cw_active_encounter_capture.lua | 69 + tools/cw_active_node_context.lua | 105 + tools/cw_active_table_rows.lua | 70 + tools/cw_active_wave_table_methods.lua | 26 + tools/cw_battle_avatar_schema.lua | 21 + tools/cw_battle_spotlight_wire.lua | 23 + tools/cw_bonfire_context.lua | 16 + tools/cw_bonfire_dialog_contract.lua | 25 + tools/cw_bonfire_live_pending.lua | 40 + tools/cw_bonfire_phase_contract.lua | 32 + tools/cw_bonfire_schema.lua | 19 + tools/cw_bonfire_sync_metadata.lua | 12 + tools/cw_book_activity_metadata.lua | 30 + tools/cw_book_baked_request.lua | 9 + tools/cw_book_condition_row.lua | 22 + tools/cw_book_entry_capture.lua | 39 + tools/cw_book_panel_after_guide.lua | 31 + tools/cw_book_panel_state.lua | 30 + tools/cw_common_baked_request.lua | 7 + tools/cw_config_cache_export.lua | 25 + tools/cw_current_defaults.lua | 23 + tools/cw_current_penalty_capture.lua | 20 + tools/cw_current_replacement.lua | 27 + tools/cw_current_response_consumers.lua | 33 + tools/cw_equipment_parameters.lua | 12 + tools/cw_formation_capture_trigger.lua | 7 + tools/cw_inventory_consumers.lua | 17 + tools/cw_inventory_wire_handles.lua | 18 + tools/cw_isolated_craft_wire.js | 20 + tools/cw_monster_capture_trigger.lua | 6 + tools/cw_monster_handles.lua | 12 + tools/cw_monster_table_schema.lua | 18 + tools/cw_native_craft_capture.js | 20 + tools/cw_native_formation_capture.js | 14 + tools/cw_native_monster_capture.js | 13 + tools/cw_native_reward_tables.js | 14 + tools/cw_network_upvalue.lua | 14 + tools/cw_orb_bonfire_callbacks.lua | 34 + tools/cw_orb_nested_callbacks.lua | 44 + tools/cw_orb_runtime_metadata.lua | 33 + tools/cw_orb_wire_fields.lua | 16 + tools/cw_preparation_bytecode.lua | 15 + tools/cw_preparation_callbacks.lua | 25 + tools/cw_preparation_lua_methods.lua | 18 + tools/cw_protobuf_serializer_handle.lua | 7 + tools/cw_reward_capture_trigger.lua | 10 + tools/cw_reward_inventory_schema.lua | 30 + tools/cw_reward_pool_current_metadata.lua | 30 + tools/cw_reward_row_handles.lua | 26 + tools/cw_spotlight_battle_schema.lua | 19 + tools/cw_spotlight_binding_handles.lua | 19 + tools/cw_teabreak_current_consumer.lua | 66 + tools/cw_teabreak_runtime.lua | 118 + tools/cw_trait_rows_export.lua | 32 + tools/cw_trial_export.lua | 27 + tools/cw_trial_table_schema.lua | 19 + tools/cw_wave_config_identity.lua | 23 + tools/cw_wave_consumer_schema.lua | 29 + tools/cw_wave_conversion_schema.lua | 16 + tools/cw_wave_info_schema.lua | 22 + tools/cw_wave_param_identity.lua | 14 + tools/cw_wave_ref_schema.lua | 13 + tools/dump_embedded_proto.py | 70 + tools/dump_go_workflow.py | 91 + tools/event_asset_presence.lua | 15 + tools/event_stella_targeted_capture.lua | 49 + tools/export_comic_dessert_catalog.py | 129 + tools/export_cw_monsters.py | 32 + tools/export_cw_trials.py | 37 + tools/export_ffgo_bonfire.py | 58 + tools/export_ffgo_embedded_resources.py | 113 + tools/export_ffgo_orb_recipes.py | 22 + tools/export_ffgo_penalties.py | 31 + tools/export_gacha_loot_catalog.py | 36 + tools/find_pe_direct_calls.py | 21 + tools/find_pe_displacement.py | 37 + tools/find_pe_immediate_context.py | 81 + tools/find_pe_rip_references.py | 26 + tools/fivedim_config_metadata.lua | 20 + tools/fivedim_minigame_config.lua | 19 + tools/gacha_active_tab_metadata.lua | 17 + tools/gacha_asset_exists.lua | 21 + tools/gacha_asset_index_metadata.lua | 21 + tools/gacha_asset_metadata.lua | 19 + tools/gacha_asset_services.lua | 20 + tools/gacha_clone_registration.lua | 56 + tools/gacha_function_constants.lua | 15 + tools/gacha_group_validity.lua | 19 + tools/gacha_image_constructor_probe.lua | 16 + tools/gacha_item_data_probe.lua | 42 + tools/gacha_live_clone_probe.lua | 92 + tools/gacha_load_only.lua | 14 + tools/gacha_loot_rarity_capture.lua | 20 + tools/gacha_lua_metadata.lua | 12 + tools/gacha_native_adapter_metadata.lua | 30 + tools/gacha_owned_prefab_tree.lua | 37 + tools/gacha_page_bytecode.lua | 18 + tools/gacha_page_creation_trace.lua | 19 + tools/gacha_presentation_metadata.lua | 18 + tools/gacha_rank_cost_capture.lua | 22 + tools/gacha_rank_item_capture.lua | 23 + tools/gacha_rank_table_metadata.lua | 28 + tools/gacha_reddot_metadata.lua | 25 + tools/gacha_refresh_owned_card.lua | 17 + tools/gacha_registered_state.lua | 20 + tools/gacha_sidebar_geometry.lua | 17 + tools/gacha_tab_button_metadata.lua | 19 + tools/gacha_tab_control_source.lua | 15 + tools/gameplay_loader_metadata.lua | 16 + tools/gameplay_lua_bindings.lua | 19 + tools/gameplay_lua_upvalues.lua | 22 + tools/gameplay_regression_metadata.lua | 17 + tools/gameplay_regression_roles.lua | 18 + tools/glm_beta_gacha_group_trigger.lua | 19 + tools/glm_beta_gacha_groups.js | 46 + tools/glm_beta_targeted_metadata.lua | 27 + tools/glm_beta_textid_metadata.lua | 15 + tools/go-toolchain.ps1 | 5 + tools/inspect_luau_v4.py | 92 + tools/inspect_saved_cw.go | 76 + tools/inventory_cw.py | 38 +- tools/merge_captured_eidolon.py | 97 + tools/mission_config_access.lua | 21 + tools/mission_config_function_pointers.lua | 14 + tools/mission_config_keys.lua | 34 + tools/mission_row_readiness.lua | 16 + tools/mission_table_metadata.lua | 26 + tools/ping_colors_verify.lua | 14 + tools/ping_glyph_capture.lua | 12 + tools/ping_sprite_capture.lua | 14 + tools/ping_widget_capture.lua | 30 + tools/preview_capture_trigger.lua | 11 + tools/preview_catalog_metadata.lua | 29 + tools/preview_flat_tables.js | 26 + tools/preview_gameboy_metadata.lua | 17 + tools/preview_gameboy_tables.js | 26 + tools/preview_minigame_metadata.lua | 18 + tools/preview_module_fields.lua | 12 + tools/preview_module_metadata.lua | 19 + tools/request_cw_baked_modules.lua | 17 + tools/request_cw_bonfire_modules.lua | 14 + tools/request_cw_book_modules.lua | 14 + tools/request_gacha_main_capture.lua | 11 + tools/request_gacha_tab_control_capture.lua | 10 + tools/request_named_baked_modules.lua | 10 + tools/resolve_captured_method_handles.js | 17 + tools/restore_missing_persistent.py | 121 + tools/trainparty_readiness_metadata.lua | 23 + tools/update_prydwen_endgame_teams.py | 133 +- versions.json | 42 +- 345 files changed, 98202 insertions(+), 77559 deletions(-) create mode 100644 assets_default.go create mode 100644 assets_ship.go create mode 100644 assets_ship_test.go create mode 100644 docs/FFGO-CW-REFERENCE-20261026.md create mode 100644 docs/GACHA-NATIVE-ADAPTER.md create mode 100644 docs/GLM-BETA-DATA.md create mode 100644 docs/GLM-BETA-EVENTS.md create mode 100644 docs/GLM-GACHA-GUIDE.md create mode 100644 docs/UI-RECOVERY-20261024.md create mode 100644 docs/ZCODE-HANDOFF.md create mode 100644 docs/aa-round-sync.md create mode 100644 docs/aa-scene-npc-recovery.md create mode 100644 docs/comic-dessert-current-contract.md create mode 100644 docs/currency-wars-6900-audit.md create mode 100644 docs/currency-wars-coverage.md create mode 100644 docs/currency-wars-current-consumer-notes.md create mode 100644 docs/currency-wars-ffgo-orbs.md create mode 100644 docs/currency-wars-ffgo-workflow-20261026.md create mode 100644 docs/currency-wars-response-boundary.md create mode 100644 docs/currency-wars-route-factory.md create mode 100644 docs/cw-bonfire-phase-contract.md create mode 100644 docs/cw-book-entry-recovery.md create mode 100644 docs/cw-route-continuation-audit.md create mode 100644 docs/ffgo-cw-resource-reference.md create mode 100644 docs/offline-gameplay-continuation.md create mode 100644 docs/ping-colors.md create mode 100644 docs/ungrouped-proto-guide.md create mode 100644 internal/common/aa_round_selection.go create mode 100644 internal/common/activity_preview.go create mode 100644 internal/common/aha_help.go create mode 100644 internal/common/aha_help_test.go create mode 100644 internal/common/comic_dessert.go create mode 100644 internal/common/currency_wars_activity_conditions.go create mode 100644 internal/common/currency_wars_bonfire.go create mode 100644 internal/common/currency_wars_crafts.go create mode 100644 internal/common/currency_wars_monsters.go create mode 100644 internal/common/currency_wars_orb_recipes.go create mode 100644 internal/common/currency_wars_reference_nodes.go create mode 100644 internal/common/currency_wars_reference_penalties.go create mode 100644 internal/common/currency_wars_rewards.go create mode 100644 internal/common/currency_wars_role_compatibility.go create mode 100644 internal/common/currency_wars_trials.go create mode 100644 internal/common/facecam.go create mode 100644 internal/common/gacha_catalog.go create mode 100644 internal/common/gacha_catalog_test.go create mode 100644 internal/common/inventory_material_patch.go create mode 100644 internal/common/limited_gacha.go create mode 100644 internal/common/monster_settings_catalog.go create mode 100644 internal/common/nanoka_monster_metadata.go create mode 100644 internal/common/persistent_patch.go create mode 100644 internal/common/runtime_assets_ship_test.go create mode 100644 internal/common/stella_jump.go create mode 100644 internal/common/stella_jump_test.go create mode 100644 internal/gameserver/aa_round_sync.go create mode 100644 internal/gameserver/aa_round_sync.lua create mode 100644 internal/gameserver/aha_help.go create mode 100644 internal/gameserver/currency_wars_bonfire.go create mode 100644 internal/gameserver/currency_wars_craft.go create mode 100644 internal/gameserver/currency_wars_dispatch.go create mode 100644 internal/gameserver/currency_wars_encounter.go create mode 100644 internal/gameserver/currency_wars_encounter_camp.go create mode 100644 internal/gameserver/currency_wars_equipment.go create mode 100644 internal/gameserver/currency_wars_forge.go create mode 100644 internal/gameserver/currency_wars_grants.go create mode 100644 internal/gameserver/currency_wars_orb.go create mode 100644 internal/gameserver/currency_wars_quit.go create mode 100644 internal/gameserver/currency_wars_quit_test.go create mode 100644 internal/gameserver/currency_wars_reference_enemy.go create mode 100644 internal/gameserver/currency_wars_role_projection.go create mode 100644 internal/gameserver/currency_wars_route_factory.go create mode 100644 internal/gameserver/currency_wars_supply.go create mode 100644 internal/gameserver/currency_wars_supply_layer.go create mode 100644 internal/gameserver/currency_wars_trial.go create mode 100644 internal/gameserver/gacha_presentation.go create mode 100644 internal/gameserver/gacha_presentation.lua create mode 100644 internal/gameserver/handlers_activity_preview.go create mode 100644 internal/gameserver/handlers_comic_dessert.go create mode 100644 internal/gameserver/handlers_gacha.go create mode 100644 internal/gameserver/handlers_stella_jump.go create mode 100644 internal/gameserver/limited_gacha.go create mode 100644 internal/gameserver/peak_scene_overrides.go create mode 100644 internal/sdkserver/api_aa_round_selection.go create mode 100644 internal/sdkserver/api_aha_help.go create mode 100644 internal/sdkserver/api_camera.go create mode 100644 internal/sdkserver/api_monster_settings.go create mode 100644 protocol/proto/ungrouped.pb.go create mode 100644 protocol/proto/ungrouped.proto create mode 100644 resources/ActivityPreviewPolicy.json create mode 100644 resources/AhaHelpConfig.json create mode 100644 resources/ChallengePeakSceneOverrides.json create mode 100644 resources/ComicDessertCatalog.json create mode 100644 resources/CurrencyWarsActivityConditions.json create mode 100644 resources/CurrencyWarsBonfire.json create mode 100644 resources/CurrencyWarsCrafts.json create mode 100644 resources/CurrencyWarsCurrentRoles.json create mode 100644 resources/CurrencyWarsMonsters.json create mode 100644 resources/CurrencyWarsOrbRecipes.json create mode 100644 resources/CurrencyWarsReferenceEnemies.json create mode 100644 resources/CurrencyWarsReferenceNodes.json create mode 100644 resources/CurrencyWarsReferencePenalties.json create mode 100644 resources/CurrencyWarsRewards.json create mode 100644 resources/CurrencyWarsRoleCompatibility.json create mode 100644 resources/CurrencyWarsTrialAvatars.json create mode 100644 resources/GachaBannerMapping.json create mode 100644 resources/GachaLootCatalog.json create mode 100644 resources/GachaSandboxPolicy.json create mode 100644 resources/PreviewAssetAvailability.json create mode 100644 resources/PreviewGameplayCatalog.json create mode 100644 resources/StellaJumpConfig.json create mode 100644 scripts/facecam_probe_temp.lua create mode 100644 scripts/ping_rainbow.lua create mode 100644 tools/__pycache__/compare_cw_reference_protocol.cpython-314.pyc create mode 100644 tools/__pycache__/dump_embedded_proto.cpython-314.pyc create mode 100644 tools/__pycache__/dump_go_workflow.cpython-314.pyc create mode 100644 tools/__pycache__/export_cw_enemy_plan.cpython-314.pyc create mode 100644 tools/__pycache__/export_ffgo_embedded_resources.cpython-314.pyc create mode 100644 tools/__pycache__/inspect_luau_v4.cpython-314.pyc create mode 100644 tools/aa_npc_config_metadata.lua create mode 100644 tools/aa_round_refresh_metadata.lua create mode 100644 tools/adventure_final_readiness.lua create mode 100644 tools/adventure_global_dependencies.lua create mode 100644 tools/build_cw_role_compatibility.py create mode 100644 tools/build_gacha_banner_mapping.py create mode 100644 tools/build_gacha_presentation_probe.py create mode 100644 tools/build_glm_beta_handoff.py create mode 100644 tools/build_mission_config_audit.py create mode 100644 tools/capture_named_baked_modules.js create mode 100644 tools/check_preview_assets.py create mode 100644 tools/comic_dessert_services_metadata.lua create mode 100644 tools/comic_flat_tables_capture.js create mode 100644 tools/comic_level_start_metadata.lua create mode 100644 tools/comic_progress_metadata.lua create mode 100644 tools/comic_repository_hierarchy.lua create mode 100644 tools/comic_stella_config_capture.lua create mode 100644 tools/comic_stella_schema_capture.lua create mode 100644 tools/comic_table_metadata.lua create mode 100644 tools/compare_cw_reference_protocol.py create mode 100644 tools/cw_active_encounter_capture.lua create mode 100644 tools/cw_active_node_context.lua create mode 100644 tools/cw_active_table_rows.lua create mode 100644 tools/cw_active_wave_table_methods.lua create mode 100644 tools/cw_battle_avatar_schema.lua create mode 100644 tools/cw_battle_spotlight_wire.lua create mode 100644 tools/cw_bonfire_context.lua create mode 100644 tools/cw_bonfire_dialog_contract.lua create mode 100644 tools/cw_bonfire_live_pending.lua create mode 100644 tools/cw_bonfire_phase_contract.lua create mode 100644 tools/cw_bonfire_schema.lua create mode 100644 tools/cw_bonfire_sync_metadata.lua create mode 100644 tools/cw_book_activity_metadata.lua create mode 100644 tools/cw_book_baked_request.lua create mode 100644 tools/cw_book_condition_row.lua create mode 100644 tools/cw_book_entry_capture.lua create mode 100644 tools/cw_book_panel_after_guide.lua create mode 100644 tools/cw_book_panel_state.lua create mode 100644 tools/cw_common_baked_request.lua create mode 100644 tools/cw_config_cache_export.lua create mode 100644 tools/cw_current_defaults.lua create mode 100644 tools/cw_current_penalty_capture.lua create mode 100644 tools/cw_current_replacement.lua create mode 100644 tools/cw_current_response_consumers.lua create mode 100644 tools/cw_equipment_parameters.lua create mode 100644 tools/cw_formation_capture_trigger.lua create mode 100644 tools/cw_inventory_consumers.lua create mode 100644 tools/cw_inventory_wire_handles.lua create mode 100644 tools/cw_isolated_craft_wire.js create mode 100644 tools/cw_monster_capture_trigger.lua create mode 100644 tools/cw_monster_handles.lua create mode 100644 tools/cw_monster_table_schema.lua create mode 100644 tools/cw_native_craft_capture.js create mode 100644 tools/cw_native_formation_capture.js create mode 100644 tools/cw_native_monster_capture.js create mode 100644 tools/cw_native_reward_tables.js create mode 100644 tools/cw_network_upvalue.lua create mode 100644 tools/cw_orb_bonfire_callbacks.lua create mode 100644 tools/cw_orb_nested_callbacks.lua create mode 100644 tools/cw_orb_runtime_metadata.lua create mode 100644 tools/cw_orb_wire_fields.lua create mode 100644 tools/cw_preparation_bytecode.lua create mode 100644 tools/cw_preparation_callbacks.lua create mode 100644 tools/cw_preparation_lua_methods.lua create mode 100644 tools/cw_protobuf_serializer_handle.lua create mode 100644 tools/cw_reward_capture_trigger.lua create mode 100644 tools/cw_reward_inventory_schema.lua create mode 100644 tools/cw_reward_pool_current_metadata.lua create mode 100644 tools/cw_reward_row_handles.lua create mode 100644 tools/cw_spotlight_battle_schema.lua create mode 100644 tools/cw_spotlight_binding_handles.lua create mode 100644 tools/cw_teabreak_current_consumer.lua create mode 100644 tools/cw_teabreak_runtime.lua create mode 100644 tools/cw_trait_rows_export.lua create mode 100644 tools/cw_trial_export.lua create mode 100644 tools/cw_trial_table_schema.lua create mode 100644 tools/cw_wave_config_identity.lua create mode 100644 tools/cw_wave_consumer_schema.lua create mode 100644 tools/cw_wave_conversion_schema.lua create mode 100644 tools/cw_wave_info_schema.lua create mode 100644 tools/cw_wave_param_identity.lua create mode 100644 tools/cw_wave_ref_schema.lua create mode 100644 tools/dump_embedded_proto.py create mode 100644 tools/dump_go_workflow.py create mode 100644 tools/event_asset_presence.lua create mode 100644 tools/event_stella_targeted_capture.lua create mode 100644 tools/export_comic_dessert_catalog.py create mode 100644 tools/export_cw_monsters.py create mode 100644 tools/export_cw_trials.py create mode 100644 tools/export_ffgo_bonfire.py create mode 100644 tools/export_ffgo_embedded_resources.py create mode 100644 tools/export_ffgo_orb_recipes.py create mode 100644 tools/export_ffgo_penalties.py create mode 100644 tools/export_gacha_loot_catalog.py create mode 100644 tools/find_pe_direct_calls.py create mode 100644 tools/find_pe_displacement.py create mode 100644 tools/find_pe_immediate_context.py create mode 100644 tools/find_pe_rip_references.py create mode 100644 tools/fivedim_config_metadata.lua create mode 100644 tools/fivedim_minigame_config.lua create mode 100644 tools/gacha_active_tab_metadata.lua create mode 100644 tools/gacha_asset_exists.lua create mode 100644 tools/gacha_asset_index_metadata.lua create mode 100644 tools/gacha_asset_metadata.lua create mode 100644 tools/gacha_asset_services.lua create mode 100644 tools/gacha_clone_registration.lua create mode 100644 tools/gacha_function_constants.lua create mode 100644 tools/gacha_group_validity.lua create mode 100644 tools/gacha_image_constructor_probe.lua create mode 100644 tools/gacha_item_data_probe.lua create mode 100644 tools/gacha_live_clone_probe.lua create mode 100644 tools/gacha_load_only.lua create mode 100644 tools/gacha_loot_rarity_capture.lua create mode 100644 tools/gacha_lua_metadata.lua create mode 100644 tools/gacha_native_adapter_metadata.lua create mode 100644 tools/gacha_owned_prefab_tree.lua create mode 100644 tools/gacha_page_bytecode.lua create mode 100644 tools/gacha_page_creation_trace.lua create mode 100644 tools/gacha_presentation_metadata.lua create mode 100644 tools/gacha_rank_cost_capture.lua create mode 100644 tools/gacha_rank_item_capture.lua create mode 100644 tools/gacha_rank_table_metadata.lua create mode 100644 tools/gacha_reddot_metadata.lua create mode 100644 tools/gacha_refresh_owned_card.lua create mode 100644 tools/gacha_registered_state.lua create mode 100644 tools/gacha_sidebar_geometry.lua create mode 100644 tools/gacha_tab_button_metadata.lua create mode 100644 tools/gacha_tab_control_source.lua create mode 100644 tools/gameplay_loader_metadata.lua create mode 100644 tools/gameplay_lua_bindings.lua create mode 100644 tools/gameplay_lua_upvalues.lua create mode 100644 tools/gameplay_regression_metadata.lua create mode 100644 tools/gameplay_regression_roles.lua create mode 100644 tools/glm_beta_gacha_group_trigger.lua create mode 100644 tools/glm_beta_gacha_groups.js create mode 100644 tools/glm_beta_targeted_metadata.lua create mode 100644 tools/glm_beta_textid_metadata.lua create mode 100644 tools/inspect_luau_v4.py create mode 100644 tools/inspect_saved_cw.go create mode 100644 tools/merge_captured_eidolon.py create mode 100644 tools/mission_config_access.lua create mode 100644 tools/mission_config_function_pointers.lua create mode 100644 tools/mission_config_keys.lua create mode 100644 tools/mission_row_readiness.lua create mode 100644 tools/mission_table_metadata.lua create mode 100644 tools/ping_colors_verify.lua create mode 100644 tools/ping_glyph_capture.lua create mode 100644 tools/ping_sprite_capture.lua create mode 100644 tools/ping_widget_capture.lua create mode 100644 tools/preview_capture_trigger.lua create mode 100644 tools/preview_catalog_metadata.lua create mode 100644 tools/preview_flat_tables.js create mode 100644 tools/preview_gameboy_metadata.lua create mode 100644 tools/preview_gameboy_tables.js create mode 100644 tools/preview_minigame_metadata.lua create mode 100644 tools/preview_module_fields.lua create mode 100644 tools/preview_module_metadata.lua create mode 100644 tools/request_cw_baked_modules.lua create mode 100644 tools/request_cw_bonfire_modules.lua create mode 100644 tools/request_cw_book_modules.lua create mode 100644 tools/request_gacha_main_capture.lua create mode 100644 tools/request_gacha_tab_control_capture.lua create mode 100644 tools/request_named_baked_modules.lua create mode 100644 tools/resolve_captured_method_handles.js create mode 100644 tools/restore_missing_persistent.py create mode 100644 tools/trainparty_readiness_metadata.lua diff --git a/.gitignore b/.gitignore index 725c29b..64f96d0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,6 @@ battle_report.json .local-checkpoints/ .runtime/ +/for ship/ /scripts/client_unstuck_request.lua /scripts/.client-unstuck-*.tmp diff --git a/README.md b/README.md index 65aa4a9..d99af99 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,9 @@ Catalog มีตารางเส้นทางจาก Client ครบช `POST /api/freesr/data` รวมเฉพาะฟิลด์ที่ส่งมาและรวมรายการ avatar ตามรหัส ส่วน `PUT` ใช้แทนข้อมูลทั้งชุดและต้องมี `avatars`, `lightcones`, `relics`, `battle_config` ครบ การบันทึกตรวจ roster/ทีมก่อนเขียนแบบ atomic และไม่เขียน `persistent` กลับจากการอ่านข้อมูล ใช้ SDK และ Game server build ที่มีการป้องกันนี้ทั้งคู่ -1. ใช้ Windows กับ PowerShell และอินเทอร์เน็ตสำหรับ build ครั้งแรก Launcher ตรวจ Go ตามเวอร์ชันขั้นต่ำใน `go.mod`; ถ้าไม่มีหรือเก่าเกินไป จะดาวน์โหลด ZIP จากรายการรุ่นทางการ ตรวจ SHA-256 แล้วติดตั้งใน `launcher.go_install.directory` โดยไม่ต้องใช้สิทธิ์ผู้ดูแล ดู [การติดตั้ง Go](https://go.dev/doc/install) และ [รายการไฟล์ทางการ](https://go.dev/dl/?mode=json) +1. ใช้ Windows กับ PowerShell และอินเทอร์เน็ตสำหรับ build ครั้งแรก Launcher ตรวจ Go ตามเวอร์ชันขั้นต่ำใน `go.mod`; ถ้าไม่มีหรือเก่าเกินไป จะถามก่อนดาวน์โหลด ZIP จากรายการรุ่นทางการ ตรวจ SHA-256 แล้วติดตั้งใน `launcher.go_install.directory` โดยไม่ต้องใช้สิทธิ์ผู้ดูแล ดู [การติดตั้ง Go](https://go.dev/doc/install) และ [รายการไฟล์ทางการ](https://go.dev/dl/?mode=json) 2. เตรียม Client, launcher/proxy และการ redirect dispatch ให้เชื่อมต่อเซิร์ฟเวอร์ที่กำหนดใน `server.json` -3. เก็บไฟล์ข้อมูลและโฟลเดอร์ `resources` ไว้ใน root ของโปรเจกต์ และตั้งค่า launcher ตามหัวข้อ config ด้านล่าง +3. สำหรับ binary ปกติ ให้เก็บไฟล์ข้อมูลและโฟลเดอร์ `resources` ไว้ใน root ของโปรเจกต์; ถ้าต้องการแพ็กส่ง ให้ใช้ binary ใน `for ship` ซึ่งฝัง runtime resources ไว้แล้ว 4. เปิด `run.bat` แล้วเลือกเมนูที่ต้องการ | เมนู | การทำงาน | @@ -54,6 +54,7 @@ Catalog มีตารางเส้นทางจาก Client ครบช | `6` | Build ทั้งสอง `.exe` อย่างเดียว | | `7` | ออก | | `8` หรือ `stop` | หยุดเซิร์ฟเวอร์ของโปรเจกต์นี้ | +| `9` หรือ `requirements` | ตรวจ Go สำหรับ build และถามก่อนติดตั้งเมื่อไม่พบรุ่นที่รองรับ | เมนู 1 และ 6 หยุดเมื่อ build ไม่ผ่าน ส่วนเมนู 2–5 ใช้ binary ที่มีอยู่ หลังแก้ซอร์สจึงต้อง build ใหม่ก่อนใช้เมนูเหล่านั้น @@ -88,7 +89,7 @@ SDK และ game server เปิดหน้าต่างคอนโซล เปลี่ยน username และ UID ได้ที่เดียวใน `server.json`: `account_name` คือชื่อทั้งบัญชีและในเกม ส่วน `player_uid` คือ UID (ปัจจุบัน `52022`) ถ้าต้องการค่าเฉพาะเครื่อง ให้ใส่สองคีย์นี้ใน `server.local.json` แทน หลังแก้ให้รีสตาร์ตทั้ง SDK และ game server แล้วออกจากบัญชีและ login ใหม่เพื่ออัปเดตชื่อที่ Client cache ไว้ ไม่ต้องแก้ซอร์สหรือไฟล์เซฟเพื่อเปลี่ยนสองค่านี้ -`run.bat requirements` เตรียม Go อย่างเดียว ส่วนเมนู build เรียกขั้นตอนนี้อัตโนมัติ การรัน executable ที่ build แล้วไม่ต้องมี Go ติดตั้งในเครื่อง ตั้ง `launcher.go_install.enabled=false` เพื่อใช้ Go ที่ติดตั้งเองเท่านั้น URL ของ manifest/ดาวน์โหลดและโฟลเดอร์ติดตั้งอยู่ใน `server.json` และ override ผ่านไฟล์ local ได้ ไม่มี path โปรแกรมเฉพาะเครื่องฝังใน launcher โฟลเดอร์ `.runtime/` และ receipt ของ toolchain ไม่ถูก commit +`run.bat requirements` ตรวจ Go และถามก่อนดาวน์โหลด/ติดตั้งเมื่อไม่พบรุ่นที่รองรับ ส่วนเมนู build เรียกตรวจสอบนี้อัตโนมัติ การรัน executable ที่ build แล้วไม่ต้องมี Go ติดตั้งในเครื่อง ตั้ง `launcher.go_install.enabled=false` เพื่อใช้ Go ที่ติดตั้งเองเท่านั้น URL ของ manifest/ดาวน์โหลดและโฟลเดอร์ติดตั้งอยู่ใน `server.json` และ override ผ่านไฟล์ local ได้ ไม่มี path โปรแกรมเฉพาะเครื่องฝังใน launcher โฟลเดอร์ `.runtime/` และ receipt ของ toolchain ไม่ถูก commit เมื่อเปลี่ยนเครือข่ายให้ตั้งทั้ง bind และค่าที่ประกาศให้ Client เข้าถึงได้ โดยเฉพาะ port ใน `public_sdk_url` เมื่อ SDK รับการเชื่อมต่อโดยตรง ค่าเหล่านี้มีค่าเริ่มต้นอยู่ในไฟล์ config และไม่มี fallback เครือข่ายในโค้ด ต้องรีสตาร์ตเซิร์ฟเวอร์หลังเปลี่ยน config การเปลี่ยน `client_version` ไม่ได้แปลง protocol หรือทรัพยากรของเกมให้อัตโนมัติ @@ -103,13 +104,18 @@ SDK และ game server เปิดหน้าต่างคอนโซล - เมื่อไม่ได้เชื่อมต่อ GaC-Srtool เซิร์ฟเวอร์จับคู่ EventID ของมอนในฉากกับ PlaneEvent ของ Client แล้วใช้ StageConfig ของด่านนั้น ทั้งตอนโจมตีมอนและตอนมอนโจมตีผู้เล่น ไม่มีการใช้รายการมอน Custom จากไฟล์เก่าเป็น fallback หากไม่มีข้อมูลตรงรุ่นจะคืน error พร้อม log - `resources/WorldBattleConfig.json` เก็บ PlaneEvent/Cocoon ที่อ่านจาก Client พร้อมเวอร์ชันและ hash ของ assembly; `world_level` เป็นระดับบัญชีที่ใช้งานร่วมกันใน login/ฉาก/Battle ตารางนี้ต้องส่งออกใหม่เมื่อเปลี่ยน Client หรือชุด resource - GaC-Srtool ส่ง `POST /api/tool-session` พร้อม `client: "GaC-Srtool"` และ `connected: true` แล้วต่ออายุตาม `srtool.lease_seconds` จึงเปิดใช้ Custom monsters ได้ การปิดเว็บ/ขาดการเชื่อมต่อทำให้ lease หมดอายุ โดยเก็บไฟล์ชั่วคราวตาม `srtool.lease_file` ต้องใช้เว็บฉบับที่รองรับการต่ออายุนี้และ reload เว็บหลังอัปเดต -- Challenge ที่กำลังเล่นใช้ config ของโหมดและห้องนั้น มีลำดับเหนือ Custom monsters +- หน้า Monster Setting แสดงชื่อกลุ่ม/มอนสเตอร์และรูปจาก Nanoka โดยดึงข้อมูลตาม `client_version` ใน runtime config พร้อม stage และ wave จาก `challenge_data.json`/`resources/StageConfig.json`; metadata จะรีเฟรชเป็นระยะและไม่สลับไปใช้ข้อมูล Client เวอร์ชันอื่นเมื่อแหล่งข้อมูลไม่พร้อม +- รายการ Monster Setting เป็นแบบอ่านอย่างเดียวสำหรับ Memory of Chaos, Pure Fiction, Apocalyptic Shadow และ Anomaly Arbitration; Aha's Help ตั้งค่าผ่าน API แยกในแท็บของตัวเอง ไม่ใช้ custom monster waves +- ตัวเลือกรอบ AA เก็บกลุ่มที่เลือกไว้ใน `persistent.aa_round_selection` จนกว่าจะเลือกกลุ่มอื่นหรือล้างค่า; heartbeat ขอข้อมูล Anomaly Arbitration ใหม่ผ่าน `ChallengePeakModule.SendGetChallengePeakDataRequest()` ของ Client เมื่ออยู่นอก Battle/รอบที่เล่นค้างไว้ และรอให้ `CurrentPeakGroupID` ตรงก่อนถือว่าซิงก์แล้ว ห้อง/บอสภายในรอบยังเลือกจาก UI ในเกม โดยไม่เปลี่ยน PeakID ของคำขอเก่าไปเป็นห้องอื่น +- `battle_config.monsters` จาก Srtool ใช้ได้เมื่อ tool-session lease ยัง active และ request เป็น CocoonType Calyx (Golden/Crimson) เท่านั้น Stagnant Shadow, Cavern of Corrosion, weekly bosses และ challenge stages ใช้ stage resources ของ Client ตามปกติ - Quick Cocoon ที่ส่งจำนวน wave เป็นศูนย์ตีความเป็นหนึ่งชุดด่านตามพฤติกรรม request ที่เก็บได้ ยังต้องตรวจผลใน Client สำหรับ Calyx แต่ละประเภทหลังปรับเส้นทางนี้ `resources/PropInteractionConfig.json` ระบุวัตถุทำลายได้จาก Prop ของ Client ส่วนก้อนฟื้น Technique MP ใช้นโยบายเพิ่ม 2 จาก reference server ที่ระบุในไฟล์และจำกัดไม่เกินเพดานทีม ระบบฟื้น HP/สุ่ม buff จากวัตถุยังรอข้อมูลกราฟของ Client จึงยังไม่อ้างว่ารองรับครบ Hide UI ใช้ปุ่ม Backslash เพื่อซ่อน HUD รวม CanvasGroup ย่อยใน Battle และเก็บชื่อเซิร์ฟเวอร์/UID ไว้ หน้าต่าง Eidolon ซ่อน controls โดยไม่ปิดกล้องหรือภาพประกอบ การเปลี่ยน Lua มีผลผ่าน heartbeat; ผลใน Battle และหน้าต่าง EX ต้องตรวจจาก Client อีกครั้ง +Ping colors อยู่ใน `scripts/ping_rainbow.lua` เปลี่ยนสีทั้งแท่งสัญญาณและตัวเลขโดยใช้ค่า ping จริง ภาพหลอดใช้ alpha จาก sprite เดิมและสีพื้นขาวเพื่อไม่ให้สีเพี้ยน ส่วนตัวเลขลงสีที่ glyph โดยไม่เขียนข้อความทับ จึงไม่กะพริบเมื่อค่าเปลี่ยน ผู้ใช้ยืนยันผลหน้าเดินแล้ว รายละเอียดและขอบเขตอยู่ใน `docs/ping-colors.md` + `resources/PlayerCosmetics.json` ใช้รายการ PlayerOutfit และ AvatarSkin ที่อ่านจาก Client การปลดของแต่งผู้บุกเบิกส่งไอเท็มเป็นเจ้าของครั้งละหนึ่งชิ้นใน GetBag ส่วนชุดที่เลือกผ่าน SetPlayerOutfit เก็บใน `persistent.player_outfits` และส่งกลับเมื่อ login ใหม่ ค่า Outfit ID ที่สวมรับจาก selector ของ Client โดยตรงและ sync ตามโครงสร้าง PearlSR; ยังไม่ได้ export ตารางจับคู่ OutfitID/ItemID จึงไม่แปลงเลขด้วยสูตร ข้อมูลฉากที่ปรับรอบนี้จำกัดที่ Starfroster กับ Moment of Joy ใน `resources/SceneMetadata.json`: อัปเดตกลุ่ม/prop ที่ยังมีอยู่และเป็นของ Server พร้อม SavedValues จาก `RuntimeDimension.DefaultValue` จึงไม่ใช้ MaxValue เป็นค่าเริ่มต้นของสองแมพนี้ กลไกรถไฟเป็น prop ฝั่ง Client และมีตัวแปร FSV_Coaster ในตารางปัจจุบัน ผลการแสดงฉากและปุ่มรถไฟยังต้องยืนยันในเกม ส่วนแมพอื่นยังใช้ข้อมูลเดิม ไม่ได้อ้างว่าอัปเดตทั้ง resource แล้ว @@ -125,7 +131,7 @@ Hide UI ใช้ปุ่ม Backslash เพื่อซ่อน HUD รว | `gameserver-go.exe` | รับการเชื่อมต่อเกมผ่าน KCP และจัดการผู้เล่น ฉาก และ battle | UDP ตาม `game_port` | | `sdkserver-go.exe` | Dispatch, login, ข้อมูล hotfix และ REST API | HTTP ตาม `sdk_port` | -การเปิดระบบครบต้องรันทั้งสองตัว `.exe` ที่ build เสร็จจะอยู่ใน root ของโปรเจกต์ ให้เปิดจาก root เพื่อให้เซิร์ฟเวอร์หาไฟล์ข้อมูลและบันทึก log ได้ถูกตำแหน่ง +การเปิดระบบครบต้องรันทั้งสองตัว `.exe` ปกติจะอยู่ใน root ของโปรเจกต์และอ่านไฟล์จาก root นั้น ## Build และรันเอง @@ -136,6 +142,16 @@ go build -o gameserver-go.exe ./cmd/gameserver go build -o sdkserver-go.exe ./cmd/sdkserver ``` +การ build ผ่าน `run.bat` จะสร้าง binary ปกติไว้ที่ root และ binary แบบแพ็กส่งไว้ที่ `for ship/` ทุกครั้ง ส่วน build แบบแพ็กส่งด้วยมือใช้ `-tags ship`: + +```powershell +New-Item -ItemType Directory -Force 'for ship' | Out-Null +go build -tags ship -o 'for ship/gameserver-go.exe' ./cmd/gameserver +go build -tags ship -o 'for ship/sdkserver-go.exe' ./cmd/sdkserver +``` + +โฟลเดอร์ `for ship` มีเฉพาะ `.exe` หลัง build; resource, Lua ที่ดูแลในโปรเจกต์ และไฟล์ตั้งต้น `server.json`, `freesr-data.json`, `persistent`, `hotfix.json`, `versions.json` ถูกฝังไว้ใน binary เมื่อเปิด executable จะใช้โฟลเดอร์ที่วาง executable เป็น working directory และสร้างไฟล์ตั้งต้นที่ยังไม่มี โดยไม่เขียนทับ config หรือเซฟที่มีอยู่แล้ว `server.local.json` ไม่ได้ฝังและยังใช้ override เฉพาะเครื่องได้ ไฟล์ resource ที่วางข้าง executable มีสิทธิ์ override ข้อมูลที่ฝังไว้ การตั้งค่าใน `server.json` ที่สร้างขึ้นมาจะยังเป็นค่าเริ่มต้นของโปรเจกต์ ให้แก้ host ที่ Client ต้องเชื่อมต่อก่อนเปิดให้เครื่องอื่นใช้ + เปิดคนละ terminal: ```powershell @@ -163,7 +179,7 @@ go test ./... | `freesr-data.json` | ตัวละคร, lightcone, relic และ `battle_config` | | `persistent` | ทีม, ตำแหน่ง, ฉาก และค่าผู้เล่นที่บันทึกไว้ | | `res.json` | ข้อมูลฉากหลักในรูปแบบที่ Go loader ใช้ | -| `resources/` | ข้อมูลฉากและตารางประกอบ เช่น MapEntrance, MazePlane, Anchor และ StageConfig | +| `resources/` | ข้อมูลฉากและตารางประกอบ เช่น MapEntrance, MazePlane, Anchor และ StageConfig; ship build ฝังชุดนี้ไว้ | | `teleports.json` | ตำแหน่ง teleport แยกตาม floor | | `challenge_data.json` | ข้อมูล challenge | | `mission_unlocks.json` | ข้อมูลภารกิจและการปลดล็อก | @@ -242,7 +258,7 @@ Damage Analyst รับ snapshot ระหว่างสู้จาก `Battl - `SceneCastSkill` อ่านทั้ง hit targets, assist IDs และ assist groups และตอบ `MonsterBattleType=TRIGGER_BATTLE` ตาม enum ของต้นฉบับ; ค่าเริ่มต้นศูนย์หมายถึง `NONE` - โหลดธาตุตัวละครจาก `resources/AvatarConfig.json` เพิ่มเติม เพราะ `avatarConfigs` ใน `res.json` อาจว่าง -- กฎบัฟเฉพาะตัวละคร, global passive, entry attack และ invasion อยู่ใน `resources/BattleRules.json` พร้อม upstream revision ต้องนำไฟล์นี้ไปด้วยเมื่อแจก binary; ไม่มีการฝัง ID ของกฎเหล่านี้เป็น fallback ในตัว executable +- กฎบัฟเฉพาะตัวละคร, global passive, entry attack และ invasion อยู่ใน `resources/BattleRules.json` พร้อม upstream revision; ship build ฝัง resource นี้ทั้งไฟล์ ไม่ได้ฝัง ID ของกฎเหล่านี้เป็น fallback ใน source - Battle SP แปลงจากอัตราส่วนในข้อมูลที่นำเข้าเป็นสเกล 10000 และ HP มอนที่เป็นศูนย์คงศูนย์ตามรูปแบบ upstream - Invasion ใช้สถานะ challenge ที่โหลดจริง `battle_config.enable_invasion_support` เปิดบัฟ support เพิ่มได้ (ค่าเริ่มต้น false) - เลิกสร้าง Material ID ด้วยสูตร `130000 + AvatarID` ซึ่ง Client หาไม่พบ และไม่ตอบข้อมูลว่างให้โมดูล RogueTourn/ChenLing ที่ยังไม่รองรับ @@ -300,7 +316,7 @@ scripts/ Client Lua ```powershell python tools/sync_protocol_commands.py "" -protoc --go_out=. --go_opt=paths=source_relative protocol/proto/StarRail.proto protocol/proto/current_handlers.proto +protoc --go_out=. --go_opt=paths=source_relative protocol/proto/StarRail.proto protocol/proto/current_handlers.proto protocol/proto/ungrouped.proto python tools/audit_protocol_handlers.py "" ``` @@ -396,7 +412,7 @@ Damage Analyst ใช้ `StatisticsComponent` ของ Battle ปัจจุ AA cycle: แยกเวลาจำกัดของ Peak ออกจากตาราง MoC แล้ว โดยใช้ค่าที่ capture จาก Client ใน `resources/PeakBattleConfig.json` ทั้ง Start และ Restart; เก็บแพ็กเก็ตผลเต็มเพื่อจับคู่ตัวนับ AA เพิ่มเติม การแก้เลข cycle/ดาวในหน้าผลยังรอตรวจ Client รอบใหม่ ดู [docs/peak-cycle-investigation.md](docs/peak-cycle-investigation.md) -`GetFriendRecommendLineup` ส่งทีม Prydwen สำหรับ MoC floor 12 ลงใน response ของหน้าแนะนำทีม โดย resolve AvatarID จาก `resources/AvatarConfig.json` ของ Client ปัจจุบัน ข้อมูล snapshot/แหล่งที่มาและข้อจำกัดของ enum ที่ยัง obfuscate อยู่ระบุใน [docs/prydwen-endgame-recommendations.md](docs/prydwen-endgame-recommendations.md) อัปเดต snapshot ได้ด้วย `python tools/update_prydwen_endgame_teams.py --floor 12 --stage-count 3`; ต้องตรวจหน้าใน Client จริงก่อนยืนยันผล +`GetFriendRecommendLineup` ส่งทีม Prydwen สำหรับ MoC, Pure Fiction, Apocalyptic Shadow และ Anomaly Arbitration โดย resolve AvatarID จาก `resources/AvatarConfig.json` ของ Client ปัจจุบัน และอ่าน Peak IDs ของ AA จาก `ChallengePeakGroupConfig.json` ข้อมูล snapshot แหล่งที่มา และข้อจำกัดของ enum ที่ยัง obfuscate อยู่ระบุใน [docs/prydwen-endgame-recommendations.md](docs/prydwen-endgame-recommendations.md) อัปเดตทุกโหมดด้วย `python tools/update_prydwen_endgame_teams.py` หรือเลือกโหมดด้วย `--mode` ต้องตรวจ route กับหน้าใน Client จริงก่อนยืนยันผล ### CW Preparation และคำสั่งจัดการรอบ (2026-10-20) @@ -407,6 +423,36 @@ Client ยืนยันแล้วว่าเริ่มรอบ เปิ - `/cw status` อ่านรอบ เงิน HP และเลเวลที่เซฟอยู่ - `/cw gold <จำนวนรวม>` ตั้งเงิน CW เช่น `/cw gold 1000` - `/cw hp <จำนวนรวม>` ตั้ง HP ภายในค่าสูงสุดของรอบ +- `/cw exp ` adds EXP and applies captured level/capacity/shop-weight rules. +- `/cw list role` lists captured RoleID, AvatarID and supported stars. +- `/cw role [count]` adds bench roles with existing star merges; a full bench cancels the whole transaction. +- `/cw list equip` lists captured equipment IDs. +- `/cw equip [count]` adds equipment to the CW bag. +- `/cw help` shows command syntax. + +Grant and queue acknowledgement commit together with the snapshot CAS and atomic file replacement, preventing duplicate grants after a disconnect. Rejected commands log `CW_GM rejected` without saving partial grants. These lists cover captured data, not every item in the Client. + +- `/cw list orb|consumable|forge` lists captured reward IDs. +- `/cw orb|consumable|forge [count]` grants those items during Preparation. +- Forge currently supports equipment offers only. Role/Expert forges are rejected until their pending actions are implemented. +- Orb opening, automatic combat Orb drops and consumable effects are still incomplete. Granting an item does not establish that its use works in the Client. + +### Aha's Help + +GaC-Srtool's Persistent settings include an independent Aha's Help selector. Levels come from `resources/AhaHelpConfig.json`, based on the supplied buff table. `GET /api/aha-help` returns available levels; `POST /api/aha-help` accepts `{"level":1}`, zero to disable, or null to use the existing FreeSR invasion-support setting. The setting is stored atomically in `persistent.aha_help_level`, preserving CW and EX state. + +The selected buff applies at the start of the next battle containing an actual Corruption buff from `BattleRules.json`'s invasion mapping. This includes srtool custom battles with imported Corruption buffs. Official challenges continue to resolve their Corruption from `StageInvasionConfig.json`; reusing a stage ID alone does not inject Corruption into a custom battle. The selected level replaces other Aha support levels; explicit zero removes support for that Corruption battle. Null follows FreeSR's `enable_invasion_support`; the web selector shows whether that legacy switch is enabled. This setting is separate from Aha Global and does not change an ongoing battle. `AHA_HELP` in `server_debug.log` records the corruption and support IDs sent. The table's `BuffLevel` selects the distinct buff ID; the existing protocol buff-level encoding is retained. Progress thresholds are metadata, not an invented dynamic key. Client behavior and animations still require gameplay verification. + +### Stella Jump, event previews and featured gacha + +`resources/StellaJumpConfig.json` contains the 16 ChenLing GameBoy cases captured from the current Client. The sandbox exposes each case's challenge packs and saves actual best times/completions under `persistent.stella_jump`. Opening a menu is read-only. Cheats have separate saved flags; their obfuscated request/response names remain tied to the checked-in command revision and require Client verification. + +`resources/ActivityPreviewPolicy.json` selects event-panel prefabs from `PreviewGameplayCatalog.json`. Additional previews are currently withheld: Client logs showed missing reward assets and invalid item lookups in ActiveActivity. Re-enable individual panels only after validating their installed assets, module identity and reward dependencies. Event-specific battles and reward claims remain incomplete. + +Featured gacha candidates come from captured character-banner prefab rows. The current capture has two candidates, but the installed Client could not load the Seele prefab and left the UI transition incomplete. Runtime `AssetMgr.Exists` checks confirmed Standard and Beginner assets, but none of the four captured limited assets. `GachaSandboxPolicy.json` currently exposes only the verified Standard panel for browsing; draws return `RET_GACHA_NOT_SUPPORT` until usable featured assets are verified. An empty verified list rejects entry as well. A table row alone is insufficient evidence of an installed asset; verify the Client bundle before adding a path to that list. The grant implementation returns the pictured character and configured duplicate Eidolon material, preserving rank/EX/Traces; it is not yet verified in the Client. An avatar absent from the imported roster is rejected. The sandbox policy uses free draws and does not reproduce official rates or conversion rules. + +Runtime table captures and current verification limits are recorded in `docs/offline-gameplay-continuation.md`. Compiling these handlers does not confirm the corresponding Client screens or gameplay. + คำสั่งเปลี่ยนค่าถูกคิวไว้ตาม UID/รอบ และนำเข้าใน heartbeat ตอนอยู่หน้า Preparation ไม่แก้เงิน/กระเป๋า Adventure และไม่แทรกตอน Battle ข้อความ queued ยังไม่แปลว่าเกมใช้ค่าแล้ว; ตรวจ log `CW_GM applied` หรือ `/cw status` อีกครั้ง @@ -419,3 +465,9 @@ Client ยืนยันแล้วว่าเริ่มรอบ เปิ เพิ่มการรวมตัวชื่อเดียวกันและดาวเท่ากันครบ 3 ตัว โดยใช้แถวดาวของ Client ที่ตรวจ identity แล้ว สร้าง UID ใหม่และเก็บตำแหน่ง/อุปกรณ์ของตัวที่คงไว้ ตัวครบชุดที่ค้างจาก build เก่าจะรวมเมื่อกด Continue; การอ่านเซฟอย่างเดียวไม่แก้ไฟล์ ระบบพื้นฐานนี้ยังไม่ครอบคลุมตัวสลับร่างและข้อยกเว้น Spotlight/trait ที่เปลี่ยนกฎรวมดาว เพิ่มการเซฟ/ซิงก์ติดตามอุปกรณ์และลำดับติดตามจากหน้า Preparation แล้ว ใช้ข้อมูลอุปกรณ์ตรงรุ่น ทั้งการรวมดาวและการติดตามอุปกรณ์ยังรอผลยืนยันจาก Client หลังเปลี่ยน build + + เพิ่มทางเข้า Plot Armor/Spotlight: ส่งรายการให้เลือกเป็น pending action, ตรวจตัวละครที่มีและความเข้ากันได้, เซฟผลกับ UID ตัวในรอบ และปิดจุดเลือกของโหนดหลังเลือกสำเร็จ การรวมดาวย้าย binding ไปตัวใหม่ นโยบายสุ่มทางเลือกอยู่ใน `resources/CurrencyWarsSpotlightPolicy.json` เป็นนโยบายเซิร์ฟเวอร์ที่ระบุไว้ชัดเจน ยังไม่ได้ยืนยันน้ำหนักสุ่ม/ค่า reroll ของต้นฉบับ ส่วนผล Spotlight ใน Battle และ progression ห้องถัดไปยังทำต่ออยู่ + + ผู้ใช้ยืนยันว่าเลือก Protagonist ได้แล้ว ส่วน 6900 ตอน Battle ที่ตามมาพบว่าเป็นตัวพิเศษ CW ซึ่งไม่มีใน Adventure roster เพิ่ม resolver ตาม `SpecialAvatarID` และแถว SpecialAvatar ตรงรุ่นแล้ว ขณะนี้ capture ครอบคลุม fake-avatar trial ที่ world level ตาม resource ที่ใช้ โดยยังรอผล Battle จาก Client การปลดตัวใน Adventure ไม่ใช่เงื่อนไขของตัวพิเศษนี้ + +CW ล่าสุด: ผู้ใช้ยืนยัน Battle ห้อง 1-2 หลังเลือก Protagonist ผ่านแล้ว เพิ่ม handler เลือก Supply แจกตัว/อุปกรณ์จาก offer จริงพร้อมรวมดาวและเซฟก่อน sync; ยังรอผล Supply ใน Client ส่วน EliteBranch/การสร้างศัตรูตาม camp และโหมดตลอดรอบยังทำไม่ครบ diff --git a/assets_default.go b/assets_default.go new file mode 100644 index 0000000..e4d8029 --- /dev/null +++ b/assets_default.go @@ -0,0 +1,18 @@ +//go:build !ship + +package runtimeassets + +import ( + "io/fs" +) + +// ReadFile returns ErrNotExist in ordinary builds, which continue to use the +// editable files in the project directory. +func ReadFile(name string) ([]byte, error) { return nil, fs.ErrNotExist } + +// ReadDir returns ErrNotExist in ordinary builds, which continue to use the +// editable files in the project directory. +func ReadDir(name string) ([]fs.DirEntry, error) { return nil, fs.ErrNotExist } + +// Bootstrap is intentionally a no-op outside shipping builds. +func Bootstrap() error { return nil } diff --git a/assets_ship.go b/assets_ship.go new file mode 100644 index 0000000..dddceb9 --- /dev/null +++ b/assets_ship.go @@ -0,0 +1,95 @@ +//go:build ship + +package runtimeassets + +import ( + "embed" + "errors" + "fmt" + "io/fs" + "os" + "path/filepath" +) + +// Keep the ship build self-contained. Probes and generated Lua files are +// deliberately excluded; only the maintained client scripts are embedded. +// +//go:embed resources res.json teleports.json challenge_data.json mission_unlocks.json server.json freesr-data.json persistent hotfix.json versions.json scripts/damage_analyst_live.lua scripts/freecam.lua scripts/hide_ui.lua scripts/navigation_profiles.lua scripts/ping_rainbow.lua +var embedded embed.FS + +var seedFiles = []string{"server.json", "freesr-data.json", "persistent", "hotfix.json", "versions.json"} + +func ReadFile(name string) ([]byte, error) { + return fs.ReadFile(embedded, filepath.ToSlash(name)) +} + +func ReadDir(name string) ([]fs.DirEntry, error) { + return fs.ReadDir(embedded, filepath.ToSlash(name)) +} + +// Bootstrap places mutable defaults beside the executable, so each pair of +// shipped binaries can run without the source checkout or a resource folder. +// Existing operator settings and saves are never replaced. +func Bootstrap() error { + executable, err := os.Executable() + if err != nil { + return fmt.Errorf("locate shipping executable: %w", err) + } + if configPath := os.Getenv("GAC_CONFIG"); configPath != "" && !filepath.IsAbs(configPath) { + absolute, err := filepath.Abs(configPath) + if err != nil { + return fmt.Errorf("resolve GAC_CONFIG before starting: %w", err) + } + if err := os.Setenv("GAC_CONFIG", absolute); err != nil { + return fmt.Errorf("preserve GAC_CONFIG: %w", err) + } + } + workingDirectory := filepath.Dir(executable) + if err := os.Chdir(workingDirectory); err != nil { + return fmt.Errorf("use executable directory %s: %w", workingDirectory, err) + } + return seedMissingFiles(workingDirectory) +} + +func seedMissingFiles(directory string) error { + for _, name := range seedFiles { + target := filepath.Join(directory, filepath.FromSlash(name)) + if _, err := os.Stat(target); err == nil { + continue + } else if !errors.Is(err, os.ErrNotExist) { + return fmt.Errorf("check %s: %w", name, err) + } + data, err := fs.ReadFile(embedded, name) + if err != nil { + return fmt.Errorf("read embedded startup file %s: %w", name, err) + } + if err := writeIfMissing(target, data); err != nil { + return fmt.Errorf("create startup file %s: %w", name, err) + } + } + return nil +} + +func writeIfMissing(target string, data []byte) error { + directory := filepath.Dir(target) + temp, err := os.CreateTemp(directory, ".gac-bootstrap-*.tmp") + if err != nil { + return err + } + tempName := temp.Name() + defer os.Remove(tempName) + if _, err := temp.Write(data); err != nil { + _ = temp.Close() + return err + } + if err := temp.Close(); err != nil { + return err + } + if err := os.Link(tempName, target); err != nil { + if _, statErr := os.Stat(target); statErr == nil { + return nil + } + return err + } + return nil +} diff --git a/assets_ship_test.go b/assets_ship_test.go new file mode 100644 index 0000000..c6ea172 --- /dev/null +++ b/assets_ship_test.go @@ -0,0 +1,47 @@ +//go:build ship + +package runtimeassets + +import ( + "bytes" + "os" + "path/filepath" + "testing" +) + +func TestShipBundleSeedsOnlyMissingMutableFiles(t *testing.T) { + for _, name := range []string{"resources/TechniqueRules.json", "res.json", "challenge_data.json", "scripts/hide_ui.lua"} { + data, err := ReadFile(name) + if err != nil || len(data) == 0 { + t.Fatalf("embedded runtime file %s: bytes=%d err=%v", name, len(data), err) + } + } + + directory := t.TempDir() + customConfig := []byte(`{"operator":"keep"}`) + if err := os.WriteFile(filepath.Join(directory, "server.json"), customConfig, 0o600); err != nil { + t.Fatal(err) + } + if err := seedMissingFiles(directory); err != nil { + t.Fatal(err) + } + for _, name := range seedFiles { + actual, err := os.ReadFile(filepath.Join(directory, name)) + if err != nil { + t.Fatalf("seeded file %s: %v", name, err) + } + if name == "server.json" { + if !bytes.Equal(actual, customConfig) { + t.Fatal("existing operator config was replaced") + } + continue + } + expected, err := ReadFile(name) + if err != nil { + t.Fatalf("embedded seed %s: %v", name, err) + } + if !bytes.Equal(actual, expected) { + t.Fatalf("seeded file %s differs from embedded version", name) + } + } +} diff --git a/cmd/gameserver/main.go b/cmd/gameserver/main.go index b14816e..f806667 100644 --- a/cmd/gameserver/main.go +++ b/cmd/gameserver/main.go @@ -4,11 +4,16 @@ import ( "fmt" "os" + "gac-hkrpg-go" "gac-hkrpg-go/internal/common" "gac-hkrpg-go/internal/gameserver" ) func main() { + if err := runtimeassets.Bootstrap(); err != nil { + fmt.Fprintln(os.Stderr, "shipping files:", err) + os.Exit(1) + } cfg, err := common.LoadRuntimeConfig() if err != nil { fmt.Fprintln(os.Stderr, err) diff --git a/cmd/sdkserver/main.go b/cmd/sdkserver/main.go index 9fe7ff7..c82b283 100644 --- a/cmd/sdkserver/main.go +++ b/cmd/sdkserver/main.go @@ -4,10 +4,15 @@ import ( "fmt" "os" + "gac-hkrpg-go" "gac-hkrpg-go/internal/sdkserver" ) func main() { + if err := runtimeassets.Bootstrap(); err != nil { + fmt.Fprintln(os.Stderr, "shipping files:", err) + os.Exit(1) + } fmt.Println("============================================================") fmt.Println(" [GaC hkrpg GO] SDK/Dispatch server - ONLINE") fmt.Println("============================================================") diff --git a/docs/FFGO-CW-REFERENCE-20261026.md b/docs/FFGO-CW-REFERENCE-20261026.md new file mode 100644 index 0000000..f8663de --- /dev/null +++ b/docs/FFGO-CW-REFERENCE-20261026.md @@ -0,0 +1,101 @@ +# FFGO CW reference inspection — 2026-10-26 + +## Artifact identity and scope + +The explicitly selected updated FFGO executable was inspected as a local, +read-only reference. It was not started, connected to the game, or allowed to +modify a player save. + +- SHA-256: `235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`. +- Embedded revision: `440df54730ba64935e9ad7ecae9147e55ad279a9`. +- Embedded build time: `2026-10-26T02:49:04Z`; Go build metadata: `go1.27.3`. +- Embedded metadata is reference evidence, not proof of official Client data + or runtime feature completeness. + +## Reproducible dumps + +All paths below are relative to the repository. Machine-specific installation +paths are supplied to tools as arguments and are not built into source. + +`battle_diagnostics/ffgo-20261026/` contains: + +| Artifact | Contents | +|---|---| +| `cmdids.json` | 2,860 named command enum entries extracted from the complete embedded protocol descriptor | +| `starrail.descriptor.pb` / `.json` | 4,939 top-level messages and 472 enums, including field numbers, types and oneofs | +| `gridfight_excel.descriptor.pb` / `.json` | 75 generated Excel schema messages | +| `functions.json` | 78,891 compiled Go function names, addresses and sizes recovered from pclntab | +| `gridfight-workflow.json` | Selected compiled functions, disassembly and direct-call references; includes generated protobuf/resource functions | +| `cw-handlers.json` | 37 named CW entry handlers and their direct calls; the service contains 1,469 compiled functions | +| `cw-command-comparison.json` | 109 CW commands compared with the repository command-name table and compiled message schemas | +| `cw-message-mapping.json` | Exact recursive wire-shape matches, with explicit limitations | +| `gridfight-excel-data.json` | Complete extracted CW tables; reward pools, basic bonuses, bonfire events/options, routes and Orbs | +| `gridfight-custom-data.json` | FFGO-authored declarative rules; these are implementation recipes, not original Client JSON | +| `resource-manifest.json` | Embedded blob offsets, compressed/uncompressed hashes and extraction provenance | +| `challenge_peak_extra_data.json` | Explicit adventure NPC/entrance/group mappings for 44 AA stages | + +Tools: + +```powershell +python tools/dump_go_workflow.py --binary --output +python tools/dump_embedded_proto.py --binary --descriptor proto/starrail.proto --output +python tools/dump_embedded_proto.py --binary --descriptor proto/gridfight_excel.proto --output +python tools/export_ffgo_embedded_resources.py --binary --output +protoc --proto_path=. --descriptor_set_out= protocol/proto/StarRail.proto protocol/proto/current_handlers.proto +python tools/compare_cw_reference_protocol.py --reference --current --commands protocol/proto/upstream_cmdids.go --output +``` + +## Protocol compatibility + +Of the 109 CW command entries, 60 have the same current name. The remaining +49 include renamed and obfuscated messages; numerical agreement alone does +not establish compatibility. Recursive comparison finds 83 exact message +wire shapes and 26 differences. In particular, large GetData, PendingAction, +SyncUpdate and battle messages must not be copied wholesale from FFGO. + +Matching checks field numbers, scalar/message types, repeated cardinality and +oneof partitions recursively. It does not establish enum meanings, business +semantics or Client success. No numeric aliases or extra response IDs are +registered by these dump tools. + +Confirmed Orb comparison leads: + +- FFGO `GridFightUseOrbCsReq` corresponds to current `IKMOCJBMGOJ`, with + repeated UID field 4 and `is_get_all` field 9. +- FFGO `GridFightUseOrbScRsp` corresponds to current `PNHDGCBLPGD`, uint32 + retcode field 3. +- The notification's nested drop structure differs. Do not forward the FFGO + notification bytes to the current Client without translating that structure. + +## Workflow findings + +The updated reference contains real EnterBonfire implementation, unlike the +previously inspected reference. `OnGridFightEnterBonfireCsReq` at RVA +`0xc697e0` calls `gfBonfireEnter` (`0xc69940`), sends the state update before +acknowledgement, and saves the changed state. The pending queue can resend an +existing bonfire action or construct a type-11 action from the node's event +list. Event options, reward resolution and subsequent selection are separate +operations; retcode-only success cannot create the menu by itself. + +Current route 2801's event `10200601` has an FFGO custom option involving the +`PetPalStarDown` rule. A working implementation must retain and apply the +effect; consuming the choice as a no-op would be incorrect. + +The extracted reference player is on route 1800. Its node list, positions, +inventory and progress are not imported into this server's route-2801 save. + +## AA recovery + +The embedded mapping identifies Peak 204 as NPC `4015010`, entrance `3013701`, +maze group `10`. Our old configuration used NPC `4015011`, entrance `3013501`, +group `8`, and the actual Client rejected that NPC during scene creation. +The explicit mapping is now preserved in an editable resource with reference +provenance. See `aa-scene-npc-recovery.md` for validation and Client acceptance +status. Battle wave IDs and buffs are not replaced with adventure NPC IDs. + +## Completion boundary + +Extraction and source compilation do not prove CW, AA or a newly ported rule +works in the Client. FFGO itself declares partial/unimplemented/battle-only +recipes. Newly extracted schemas and recipes are leads to implement and +verify, not a claim that all modes are now complete. diff --git a/docs/GACHA-NATIVE-ADAPTER.md b/docs/GACHA-NATIVE-ADAPTER.md new file mode 100644 index 0000000..d3f199d --- /dev/null +++ b/docs/GACHA-NATIVE-ADAPTER.md @@ -0,0 +1,142 @@ +# Native per-character Warp adapter + +## Current Client observation + +The enabled presentation configures 76 five-star banners, including collaboration characters. Sending all synthetic IDs in the native `GetGachaInfo` response caused `GachaModule._CmdGetGachaInfoScRsp` to throw in the running Client. The server now respects `mapped_banner_preview_count` (currently zero) even when presentation is enabled; the adapter registers mapped pools separately. The user confirmed Warp opens again, and the Client logged `PAGE_BIND ready=76 configured=76`. This confirms pool binding, not successful draws or a finished visual layout. Earlier release-gate notes below describe historical checkpoints, not current policy. + +## Incremental projection, 2026-10-27 + +Early opening could previously freeze the native collections after only a few +of the configured banners had registered, leaving the remainder invisible until +the page closed. The adapter now registers at most two configured models per +tick and adds at most one missing tab per tick while Warp is open. It checks the +page's existing group objects before appending and does not call the native +`_refresh` or select another tab. The latter resets selection. + +The append sequence follows the single-pool branch of the current Client's +`GachaMainPage._create_pools_panel`: load prefab, create/bind panel, set its pool +and timeout callback, add it to TabControl, then set up its group button. The +new content root is inactive until selected. The exact current baked modules +were captured read-only; `Ui.Component.TabControl.add_item_created` does not +reference the current selection field. Existing page arrays track the panel for +normal disposal. If the native add operation partially fails, there is no proven +individual-button removal API; `PAGE_APPEND_ERROR` reports the tracked failure, +and normal page disposal cleans it. Failure to load one supporting four-star +portrait leaves the other content visible. Registration failures retry on a +later bounded pass rather than permanently suppressing a banner. + +This does not replace the native page's initial `_create_pools_panel` lifecycle: +if all pools are already registered before the page opens, that native function +may still instantiate those panels synchronously. The new incremental path, +its rollback behavior, selection preservation and performance need Client +confirmation; Lua parsing alone does not establish those outcomes. Experimental +loader scripts have been removed from `scripts/` and Frida detached. + +## Client rank/item coverage — 2026-10-27 + +The captured `AvatarConfig.json` and current imported roster contain 76 +five-star avatars. Five had previously been excluded because the older external +Eidolon resource did not contain their rank rows. Read-only, bounded lookups of +the exact `AvatarRankConfigExcelTable.GetData` rows for those avatars' captured +`RankIDList` yielded 30/30 rows and their `UnlockCost`; the five distinct cost +items were independently retrieved from the current Client's `ItemHelper` and +their ItemRows verified. The companion asset audit also found each avatar's head +icon, draw-card splash and result image, and a matching avatar ItemData. + +`tools/merge_captured_eidolon.py` joins the captured IDs to AvatarConfig, checks +all six ranks and cost ItemRows, records capture hashes and preserves existing +Eidolon entries. The stable-ID generator then retained all 94 earlier identities +and added five; all 76 imported five-star avatars now have an active mapping. +The custom IDs remain sandbox identifiers, not official banner IDs. These +changes did not alter a player's save, inventory, rank, EX state or pity. + +Evidence is retained in private `battle_diagnostics/` capture logs; the SHA256 +digests and captured Client identity are recorded in `EidolonConfig.json`. +The five added banner entries still need native Client registration and draw +confirmation after the integrated build is deployed. First acquisition of an +avatar absent from the imported roster remains outside this sandbox flow. + +## Current status — supersedes historical gate notes below + +The enabled implementation was built and deployed on 2026-10-25. The Client +registered all 71 eligible rarity-five character banners. The user confirmed +the prototype's splash art and native panel placement after the opaque overlay +was removed. The implementation reuses the generic installed prefab and changes +only its owned content; these are custom banners, not restored official assets. + +The latest source adds three featured four-star portraits, saved pity labels +and the user's requested hard guarantees: featured five-star by 80 pulls and +four-star-or-higher by 10 pulls. Shared limited pity and inventory awards commit +atomically. Three-star Light Cones come from the captured rarity catalog. +The three four-star companions rotate over the imported rarity-four roster; +they are sandbox lineups, not captured official banner companions. Base rates +are configurable sandbox defaults and are not represented as captured Beta odds. + +The 94 stable mappings consist of 71 advertised rarity-five banners and 23 +reserved rarity-four mappings. Five avatars lack the required Eidolon +conversion config. Registration is confirmed in Client logs; latest portrait +layout, draw results/pity persistence, and entering/exiting every new banner +have not been confirmed after the latest deployment. AA loading repair is the +current gameplay blocker. No tests were added or run for this continuation. + +The sections below retain earlier audit checkpoints. Their OFF gate and +unproven ItemHelper notes describe those earlier states, not the current policy. + +## Confirmed foundation + +The previous uninitialized-pool approach is superseded. On 2026-10-25 the initialized `StandardGachaPoolData` / Row / SingleDrawData / MultiDrawData clone was registered through `_GachaPoolDatasThisVersion` and the native `_AddGachaPoolDataToGroupDict` using the five-argument reflection Invoke overload with boxed BindingFlags. The Client reported `pool=900001 pools=3 groups=3`. + +Evidence: `battle_diagnostics/runtime-continuation-metadata-20261025.log`, `[GAC_GACHA_CLONE_REGISTER]`. Registration proves native lookup/group creation, not correct artwork or draws. + +## Implementation + +- `internal/gameserver/gacha_presentation.go` validates a policy-selected installed generic template and builds the presentation payload from the stable banner mapping and `AvatarConfig.json`. +- `internal/gameserver/gacha_presentation.lua` is embedded behind the policy, outside `scripts/`. It clones initialized models, assigns the mapped avatar's runtime `AvatarName`, uses the configured avatar icon, registers native single-pool groups, and hooks only the custom tab's content rendering. +- The new card uses `AvatarCutinFrontImgPath`. `AvatarCutinImgPath` denotes a different asset family; do not derive a DrawCard path from that field. +- Art loading uses the native BasePanel `_async_load_sprite_to` helper captured in `.runtime/named-baked-capture/gacha-avatar-panel.json`. +- The opaque card is local to the mapped tab's known `node_content` binder. It does not hide a global Canvas, world camera, phone menu or HUD. +- Registration and installed-asset checks are bounded to two entries per render interval. Actual native group keys are retained for rollback; no group-ID arithmetic or invented enum is used. +- Turning the policy off removes owned clone references after Warp closes. A currently open custom card is not removed mid-draw. +- The same mapping is accepted by `DoGacha`; when native presentation is enabled, `GetGachaInfo` advertises the full active mapping as well. + +## Current release gate + +`resources/GachaSandboxPolicy.json` has `native_presentation.enabled=false`. Do not turn it on solely because the Go binary compiles. Verify the single-banner card's constructor/binder, displayed avatar art/name and draw 1/10 behavior in the Client first. No tests were added or run. + +There are 94 mapped avatars. Five imported avatars have no configured first Eidolon conversion and remain outside this sandbox mapping. First acquisition of an absent imported avatar is still rejected. This is a custom featured sandbox presentation, not restored official limited prefabs. + +## Controlled runtime tools + +`tools/build_gacha_presentation_probe.py --output ` renders one banner by default. It never stages a script, changes policy, or writes a save. `--limit 94 --assets-only` emits only a bounded AssetMgr.Exists capture under a separate global configuration name; it does not register pools or UI. + +`tools/gacha_item_data_probe.lua` reads exact ItemData constructor and ItemHelper.GetItem metadata. The ItemHelper return type needs confirmation before relying on it as a native ItemData array element. The adapter now resolves the exact static `GetItem(UInt32)` reflection overload and rejects a return type that is not assignable to the captured native ItemData array element. It then checks the actual returned instance and ConfigID before mutating native pool collections. This is a runtime guard, not evidence that the current Client has that overload. + +The staged one-banner adapter is a runtime adapter with an onBeforeRender callback. When finished, close Warp and send `_G.__GAC_GACHA_PRESENTATION={enabled=false}` to remove owned clones, then remove the staged file. A production heartbeat with the disabled policy supplies the same cleanup signal. + +## Integration + +The caller appends `loadGachaPresentationLua()` to PlayerHeartBeat.DownloadData, logging a presentation error without failing unrelated heartbeat callbacks. The function reads external resource policy, so an operator can disable it without replacing saves or executables. + +Unknown at this checkpoint: the new card has not yet been Client-confirmed; callback failure must not be described as a working banner. Native registration is confirmed separately from presentation, asset availability, and successful draws. + +## Offline adapter audit, 2026-10-25 + +These source changes were made without staging a probe, changing policy, running tests, rebuilding or restarting servers: + +- Rendering now destroys the newly created opaque card if a later binding or sprite-request call throws. The previous path logged the exception but retained an untracked overlay. This covers synchronous setup failure; it does not prove the later asynchronous sprite request succeeds. +- Disposal explicitly destroys the owned card. No global Canvas, camera or unrelated page object is touched. +- Rendering hooks match the exact owned pool instance as well as its configured ID. A foreign extension's pool with the same ID must not be repainted as this adapter's character. +- Each hook captures its original callback locally. Replacing the mutable originals table on a later policy revision can no longer make a retained older wrapper delegate recursively into a newer wrapper. +- Native pool/group collections are frozen while the Warp page is open. Configuration changes, disabling, and registration reconciliation wait for the page to close; the selected pool is not removed during a draw. +- A new configuration digest removes the previous owned projection before installing a replacement. Cleanup also removes the exact owned group from the native cached group list and clears a selected-pool cache only when it refers to the removed clone. It does not remove unrelated groups or derive native group keys. +- Re-registration after a native GetInfo refresh removes that banner's stale owned references before creating its replacement. Registration rollback also removes newly created cached group entries. +- The Go payload and controlled-probe builder include the adapter source in the digest. A new server executable with unchanged banner data can therefore replace its older owned hooks after Warp closes, instead of keeping old closures for the whole Client process. + +The release gate remains **OFF**. Still required before enabling: + +1. Current-process evidence for `ItemHelper.GetItem(UInt32)` and the actual returned ItemData; old MethodHandles and native addresses are invalid after a Client restart. +2. One-banner card proof for `node_content`, text cloning/SafeSetTextID and the `_async_load_sprite_to(image,path)` call, including successful asynchronous art completion. A bytecode call site or `ART_REQUESTED` log alone does not prove the image appeared. +3. Native response/refresh lifecycle proof: synthetic IDs can be skipped before original pool construction, and the custom registration must remain consistent when GetGachaInfo refreshes the module. Merely registering an initialized clone once is not evidence for every refresh. +4. Draw 1/10 result/display behavior with the mapped avatar and configured duplicate materials, plus close/reopen behavior. No assertion of Client success should be made from compilation or native registration alone. + +Current source has not been compiled or Client-exercised after this offline audit. All custom banner IDs remain the explicit resource-backed sandbox mapping; no additional game IDs, asset paths or group enum values were invented. diff --git a/docs/GLM-BETA-DATA.md b/docs/GLM-BETA-DATA.md new file mode 100644 index 0000000..13c3ada --- /dev/null +++ b/docs/GLM-BETA-DATA.md @@ -0,0 +1,136 @@ +# ชุดข้อมูล Client Beta สำหรับ GLM + +อัปเดต 24 ตุลาคม 2026 (Asia/Bangkok) + +## เริ่มอ่านตรงนี้ + +ผู้ใช้ขอให้ช่วยหา event ของ Beta ที่ใช้จริง และส่งข้อมูลที่มีพร้อมวิธีเพิ่มตู้กาชาให้ GLM งานนี้จึงจัดทำ **ดัชนีและชุดส่งต่อข้อมูล** ไม่ได้เปิด event เพิ่ม เปลี่ยน backend หรือรีสตาร์ตเซิร์ฟเวอร์ + +- [ข้อมูลกิจกรรมและวิธีเชื่อม schedule](GLM-BETA-EVENTS.md) +- [ข้อมูลและวิธีเพิ่มตู้กาชา](GLM-GACHA-GUIDE.md) +- [งานค้าง/ข้อกำหนดเดิม](ZCODE-HANDOFF.md) + +### ไฟล์ชุดส่งต่อ + +- โฟลเดอร์: [glm-beta-handoff-20261024](../.runtime/glm-beta-handoff-20261024/) +- ZIP: [glm-beta-handoff-20261024.zip](../.runtime/glm-beta-handoff-20261024.zip) +- [manifest.json](../.runtime/glm-beta-handoff-20261024/manifest.json): รายการทุกไฟล์ในชุด พร้อม SHA-256 ขนาด ที่มา และขอบเขตการยืนยัน +- [event-index.json](../.runtime/glm-beta-handoff-20261024/derived/event-index.json) / [CSV](../.runtime/glm-beta-handoff-20261024/derived/event-index.csv) +- [preview-schedules.json](../.runtime/glm-beta-handoff-20261024/derived/preview-schedules.json) +- [gacha-index.json](../.runtime/glm-beta-handoff-20261024/derived/gacha-index.json) + +`.runtime/` ถูก ignore ถ้า GLM อยู่คนละเครื่องต้องส่ง ZIP ให้ด้วย การส่งเฉพาะ Git diff จะไม่มีชุดข้อมูลและ evidence เหล่านี้ + +## 1. รุ่นและขอบเขต + +ตรวจโปรเซสที่รันจริงและ hash `GameAssembly.dll` ซ้ำในรอบนี้แล้ว Client ปัจจุบันเป็น Beta .54: + +```text +4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6 +``` + +ข้อมูล CW เดิมหลายชุดมาจาก Beta .53: + +```text +c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144 +``` + +**ชุดนี้รวมข้อมูลที่มีอยู่ในโปรเจกต์และ capture ที่ระบุที่มาได้ ไม่ใช่การ dump ทุกตาราง/ทุก asset/ทุก script จาก Beta ทั้งเกมครบแล้ว** ไฟล์ที่ไม่มี provenance ไม่ถูกเปลี่ยนชื่อหรือรับรองเป็น .54 เนื่องจากวางอยู่ในโปรเจกต์เดียวกัน + +ข้อมูลดิบถูกคัดลอกเป็น bytes เดิม Python ใช้ integer ที่ไม่เสียความละเอียดในการสร้างดัชนี จึงเก็บ `hash64` ได้ตรง ห้าม parse/re-serialize TextID hash64 ผ่าน JavaScript `Number` โดยไม่ใช้วิธีรักษาเลข 64-bit + +## 2. ข้อมูลที่ตรงกับ capture ของ Client .54 + +| ชุด | จำนวน/ขอบเขต | ไฟล์ต้นทาง | +| --- | --- | --- | +| ActivityPanelRow | 181 หน้า รวม condition, prefab, icon, TextID และ display items | `resources/PreviewGameplayCatalog.json` → `tables.panels` | +| ActivityConfigRow | 361 รายการ รวม module/resident/panel/early-access mapping | ไฟล์เดียวกัน → `tables.activities` | +| GachaBasicInfoConfigRow | 6 แถวของตารางปัจจุบัน | ไฟล์เดียวกัน → `tables.gacha` | +| ParkourLevelConfigRow | 13 แถว; ไม่ใช่ Stella Jump ด้านข้าง | ไฟล์เดียวกัน → `tables.parkour` | +| ChenLingGameBoyCaseRow | 16 cases | `resources/StellaJumpConfig.json` | +| CW role flat config | 140 rows; ไม่ใช่ทุกตารางของ CW | `resources/CurrencyWarsCurrentRoles.json` | +| Event asset observations | 290 prefab/icon paths; 146/181 panels มีทั้งสอง path | `resources/PreviewAssetAvailability.json` | +| GachaGroupDataRow | ดึง flat GetAll จบครบ **0 แถว** ในรอบนี้ | `battle_diagnostics/glm-gacha-groups-current.json` | +| Group presentation asset observations | 3 path จาก Lua จริง ตรวจแล้วไม่มีทั้ง 3 | `battle_diagnostics/glm-gacha-group-assets.json` | + +CW role compatibility .53→.54 แยกอยู่ใน `resources/CurrencyWarsRoleCompatibility.json` เป็น overlay หนึ่ง family/สาม star variants ไม่ใช่การ recapture CW ทั้งหมด + +### ระวัง ActivityConfig ชื่อคล้ายกัน + +`resources/ActivityConfig.json` เดิมมี 360 รายการและไม่มี provenance .54 ของตัวเอง ส่วน `PreviewGameplayCatalog.json.tables.activities` มี 361 รายการที่ capture ตรงรุ่น + +เปรียบเทียบ key ได้ว่าใน capture ปัจจุบันมี ActivityID `10196`, `50157` เพิ่ม และไม่มี `50136` ที่อยู่ในไฟล์เดิม ใน ID ร่วมกัน main/resident module lists ตรงกันจากการเทียบครั้งนี้ แต่ไม่ได้ทำให้ไฟล์เก่ากลายเป็น current native dump + +ให้เริ่มหา event ใหม่จาก **PreviewGameplayCatalog** อย่ายึดเฉพาะ ActivityConfig เดิมหรือค้น type ที่เดาชื่อแล้วสรุปว่าไม่มีข้อมูล + +## 3. Event ที่หาเจอแล้ว + +ตัวอย่างด้านล่างใช้ **ชื่อเทคนิคจาก prefab** ยังไม่ใช่ localized title ที่ถอดแล้ว และไม่ได้พิสูจน์ว่าเป็น official active schedule ของวันนี้ + +| Panel | ระบบ/Prefab | Main modules | Resident modules | Prefab + icon | +| ---: | --- | --- | --- | --- | +| 50132 | QuestMechCraftPanel | 5013201 | 5013202 | มี | +| 50142 | QuestComicDessertPanel | 5014201 | 5014202 | มี | +| 50143 | QuestRealityShowPanel | 5014301–5014305 | 5014311–5014315 | มี | +| 50125 | QuestFinalityBattlePanel | 5012501–5012505 | — | มี | +| 50114 | QuestTeamTowerPanel | 5011401 | 5011402 | มี | +| 50112 | QuestPixAirPanel | 5011201 | 5011202 | มี | +| 50111 | QuestB51RacingPanel | 5011101 | 5011102 | มี | +| 50107 | QuestChenLingFesPanel | 5010701 | — | มี | +| 50092 | QuestChenLingBattlePanel | 5009201 | 5009202 | มี | +| 50134 | QuestBlindBoxPanel | ดู raw mapping | ดู raw mapping | prefab ไม่มี | + +Source ปัจจุบันเปิดเพียง policy-selected families และตัดหน้าที่มี dependencies/handler ยังไม่ครบ จึงต่างจาก “Beta ไม่มี event” รายละเอียดและแนวทางต่อ callback อยู่ใน `GLM-BETA-EVENTS.md` + +จุดเชื่อมสำคัญ: ใน wire `ActivityScheduleData.ActivityId` ใช้ **moduleID** ส่วน `PanelId` ใช้ **panelID** ห้ามนำ ActivityConfig.ActivityID ใส่แทน moduleID โดยไม่ตรวจ + +## 4. ข้อมูลเก่าและข้อมูลที่ยังไม่ยืนยัน revision + +ชุด ZIP รวม resources ทั้งหมดที่มีและไฟล์ข้อมูล root ที่เกี่ยวข้อง โดยแยก provenance ไว้ใน manifest: + +- CW .53/reference: divisions/routes/role defaults/variants/camps/levels/equipment/spotlights/monster recipes/rewards/craft/initial runs/node transitions/trials +- .53-identified scene, navigation, cosmetics, technique/world-battle resources +- External data: Eidolon/Inventory จาก Dimbreath, BattleRules/Profile จาก PearlSR, ทีม Prydwen, AhaHelp จากภาพที่ผู้ใช้ให้ ไม่ใช่ native .54 dump +- Unversioned/server data: Avatar/SkillTree/Quest/MainMission/Stage/Map/Tutorial ฯลฯ ซึ่งห้ามรับรองว่าทุก ID ใช้ได้กับ .54 +- Root `res.json` กับ `resources/res.json` เป็นคนละ schema และคนละชุด ห้ามทับหรือย้ายแทนกันเพราะชื่อเหมือนกัน +- `mission_unlocks.json` เป็นรายการที่ server เปิดให้ ไม่ใช่หลักฐานว่า Client มี config ทุก ID; ดู MissionCompatibility และ missing-config evidence ประกอบ + +## 5. Protocol และเครื่องมือ + +รวม `.proto`, named command maps/pairs และ source revision ไว้ใน bundle โดยไม่รวม `.pb.go` ซ้ำทั้งชุด + +Command source revision ที่ใช้อยู่: + +```text +005d2c12db4781071f4b5b68e8f364587886a710 +``` + +นี่ไม่ใช่ full native protocol dump ของ .54 ทุก packet บางคำสั่งถูกตรวจซ้ำกับ Client แล้ว แต่ส่วนที่ยัง obfuscated/ไม่ตรวจต้องเก็บข้อจำกัดไว้ ใช้ name resolver ของ repository อย่าฝัง CmdID หรือส่งหลาย aliases เพื่อเดา callback + +เครื่องมือที่รวมเป็น source สำหรับอ่านต่อ **ไม่ได้ถูกรันโดย packaging helper**: + +- `preview_flat_tables.js`: สี่ named flat tables; ตรวจ prologue/ขอบเขต; 16 rows ต่อ managed marker +- `preview_gameboy_tables.js`: ChenLing GameBoy flat table +- `glm_beta_gacha_groups.js`: named gacha group GetAll; 8 rows ต่อ marker; เก็บกรณีตารางว่างอย่างชัดเจน +- named metadata probes และ bounded trigger ที่พักเมื่ออยู่ Battle +- `inspect_luau_v4.py` และ GachaMainPage bytecode/parsed prototypes +- static PE range/call-reference readers และ protocol tooling ที่เกี่ยวข้อง + +ก่อนใช้ native tools ต้องตรวจ **process path/hash ใหม่** เพราะ PID, MethodHandle และ base address เปลี่ยนหลัง restart การอ่าน metadata ครั้งนี้พบว่า `RPG.Client.TextID` อยู่ใน assembly **RPG.GameCore.Foundation** ไม่ใช่ Assembly-CSharp; lookup ใน assembly ผิดแล้วได้ nil ไม่ได้แปลว่า type หาย + +## 6. ส่งต่อให้ GLM ทำต่อ + +ข้อความพร้อมใช้: + +> อ่าน `docs/GLM-BETA-DATA.md`, `docs/GLM-BETA-EVENTS.md` และ `docs/GLM-GACHA-GUIDE.md` ก่อน ข้อมูล event ของ Beta มีแล้ว 181 panels/361 activities ใน PreviewGameplayCatalog ไม่ใช่ไม่มี event ให้ใช้ event-index เชื่อม panel/module/conditions/assets และต่อ named data handlers ตามแต่ละระบบ กาชามีตารางจริง 6 แถว แต่ limited 4 prefab และ generic group 3 prefab ไม่มีใน manifest; flat GachaGroupDataRow ดึงครบได้ 0 แถว จึงยังไม่มี GroupIDs ให้ใช้ อย่าเดาตัวเลขหรือเปิด path ที่ไม่มีเพื่อกลบอาการ ต้องสร้าง compatible custom presentation จาก asset ที่มีจริงและให้ผลสุ่มตรงภาพตู้ รักษาเซฟ/rank/EX/Traces และอย่ารบกวน Battle ที่กำลังเล่น อ่าน manifest เพื่อแยก .54, .53/reference, external policy และ unversioned ห้ามอ้างว่าชุดนี้เป็น dump ทุกอย่างของ Beta ครบแล้ว + +สิ่งที่ยังต้องหาเพิ่ม: localized title text, config/asset dependencies และ data/proxy callbacks ของ event ใหม่, ตารางอื่นของ Client ที่ยังไม่ได้ capture, gacha presentation/binding และ semantics ของ grouping fields ที่ยัง obfuscated + +## 7. ขอบเขตการทำงานรอบนี้ + +- อ่าน source/resource และวิเคราะห์ config/capture เพื่อส่งต่อ +- ตรวจ hash ของ module จริง และอ่าน named gacha group table/metadata กับ asset existence เฉพาะ path ที่มีหลักฐานจาก Lua +- ถอด probe ที่เพิ่มในรอบนี้แล้ว และปิด Frida sessions ของรอบนี้ +- ไม่แตะ probes ของ GLM ที่มีอยู่ ไม่แก้ gameplay backend ไม่เปลี่ยนเซฟ ไม่ build/deploy/restart และไม่รัน tests +- ชุดข้อมูลไม่รวม `persistent`, `freesr-data.json`, `server.local.json`, บัญชี/token logs หรือ game binaries ของผู้ใช้ +- Snapshot เป็นการอ่านไฟล์ทีละไฟล์ขณะที่มีงานอื่นทำอยู่ ไม่ใช่ atomic snapshot ของ repository ทุกไฟล์ ณ nanosecond เดียว ค่า SHA ใน manifest อ้างอิง bytes ที่คัดลอกเข้าชุดจริง diff --git a/docs/GLM-BETA-EVENTS.md b/docs/GLM-BETA-EVENTS.md new file mode 100644 index 0000000..54acf93 --- /dev/null +++ b/docs/GLM-BETA-EVENTS.md @@ -0,0 +1,225 @@ +# ข้อมูลกิจกรรม Client Beta สำหรับ GLM + +อัปเดต 24 ตุลาคม 2026 (Asia/Bangkok) — ตรวจจาก resource/capture ที่มีอยู่เท่านั้น ไม่ได้แก้ production code ไม่ส่ง probe ไม่รัน tests และไม่รีสตาร์ตเกมหรือเซิร์ฟเวอร์ในงานจัดทำเอกสารนี้ + +ตำแหน่งชุดข้อมูลรวมและ manifest ของไฟล์ให้ดู [GLM-BETA-DATA.md](GLM-BETA-DATA.md) ภายใน package มี: + +- `derived/event-index.json` — join panel/activity/modules พร้อมเงื่อนไขและสถานะ asset/policy +- `derived/event-index.csv` — รายการสำหรับค้น/กรองได้สะดวก +- `derived/preview-schedules.json` — schedules ที่ source/policy ปัจจุบันเลือกได้ +- raw `PreviewGameplayCatalog.json`, `PreviewAssetAvailability.json` และ policy ที่ใช้ทำ index + +## 1. สรุปสิ่งที่พบ + +**ข้อมูลกิจกรรมมีอยู่ใน Beta นี้แล้ว** การหา type ชื่อหนึ่งไม่พบ หรือหน้ากิจกรรมยังไม่แสดง ไม่ได้แปลว่าไม่มีตารางกิจกรรมใน Client + +ไฟล์หลักคือ `resources/PreviewGameplayCatalog.json`: + +- Client assembly SHA-256: `4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6` +- Evidence: `ev_9ea0f171c212f18ef6442f116c0bd14dd3ba08a3c583141c9bad58a5d2c7bd27` +- `panels`: **181 แถว** ของ `RPG.GameCore.ActivityPanelRow` +- `activities`: **361 แถว** ของ `RPG.GameCore.ActivityConfigRow` +- ในไฟล์เดียวกันมี Gacha 6 แถว และ Parkour 13 แถว ซึ่งเป็นคนละระบบ + +นี่เป็นข้อมูลทั้งหมดของ **สี่ตารางที่ capture ชุดนั้นอ่านได้** ไม่ใช่การ extract ทุกตาราง/ทุก asset/ทุก script ของเกมทั้งชุด และไม่ใช่รายการ event ที่เปิดจริงในวันหนึ่งโดยอัตโนมัติ Client เก็บ historical/future rows ร่วมกันได้ + +ตารางที่ยืนยันว่ามีชื่อดังนี้: + +```text +RPG.GameCore.ActivityPanelRow +RPG.GameCore.ActivityConfigRow +RPG.Client.ActivityModule +``` + +การ probe `RPG.GameCore.ActivityModuleRow` เคยได้ nil เพราะเป็นชื่อที่ลองหา ข้อนี้ไม่ใช่หลักฐานว่า ActivityModuleIDList หรือระบบกิจกรรมหายไป + +## 2. เหตุที่กิจกรรมยังไม่แสดง + +`internal/common/activity_preview.go` ปัจจุบันกรองตาม `ActivityPreviewPolicy.json` ไม่ได้ส่งทุกแถวใน Client กลับไปเสมอ + +เงื่อนไขก่อนประกาศ preview คือ: + +1. UIPrefab ต้องอยู่ใน policy-listed family และมี handler ที่รองรับ +2. `PreviewAssetAvailability.json` ต้องระบุว่า UIPrefab และ TabIcon มีจริงทั้งคู่ +3. `DisplayItemList` ต้องว่าง เพื่อไม่กลับไป trigger missing-item/invalid-item errors ที่เคยพบ +4. module ที่ถูกอ้างโดยหลายกิจกรรมต้อง resolve เป็น prefab/handler ที่ตรงกัน ไม่มี first-match เงียบ ๆ + +ผลนับจาก resource และ source ปัจจุบัน: + +| รายการ | จำนวน | +| --- | ---: | +| Panel rows ทั้งหมด | 181 | +| Activity rows ทั้งหมด | 361 | +| Unique prefab/icon paths ที่เคยตรวจ | 290 | +| Panels ที่ prefab และ icon มีทั้งคู่ | 146 | +| Panels ที่ไม่มี prefab | 27 | +| Panels ที่ไม่มี icon | 30 | +| Prefab families ที่ policy อนุญาต | 19 | +| Panels ที่ผ่าน policy + assets + no display items | 56 | +| Unique preview module schedules | 121 | +| QuestState schedules | 111 | +| GetMultipleDropInfo schedules | 10 | +| Conflicting module-to-panel mappings ใน selected set | 0 | +| Activity rows ที่ไม่พบ effective panel row ใน capture นี้ | 99 | + +จำนวนไม่มี prefab/ไม่มี icon มีบางแถวซ้ำกัน จึงห้ามนำ 27 กับ 30 มาบวกแล้วลบจาก 181 ตรง ๆ + +146 panels ที่มี asset ครบ **ไม่ได้แปลว่าเปิดเล่นได้ 146 กิจกรรม** ยังมี reward dependencies, data proxies, entry handlers, unlock/finish checks และ state machine ของแต่ละระบบที่ต้องต่อ + +## 3. รายการที่หาเจอและควรใช้เริ่มไล่ Beta features + +ชื่อด้านล่างเป็น **ชื่อเทคนิคจาก UIPrefab** ไม่ใช่ชื่อภาษาอังกฤษ/ไทยที่ยืนยันแล้วจาก TextMap และเลข ID สูงไม่ได้พิสูจน์เองว่า event นั้นเปิดจริงใน Beta รอบปัจจุบัน + +ทุกแถวในตารางยกเว้น BlindBox ตรวจพบทั้ง prefab และ icon ใน installed asset index แล้ว: + +| Activity / Panel ID | Technical panel | ActivityModuleIDList | ResidentModuleList | EarlyAccessContentID | Asset | +| --- | --- | --- | --- | ---: | --- | +| 50132 | QuestMechCraftPanel | 5013201 | 5013202 | 150132 | prefab + icon มี | +| 50142 | QuestComicDessertPanel | 5014201 | 5014202 | 150135 | prefab + icon มี | +| 50143 | QuestRealityShowPanel | 5014301–5014305 | 5014311–5014315 | 0 | prefab + icon มี | +| 50125 | QuestFinalityBattlePanel | 5012501–5012505 | ว่าง | 0 | prefab + icon มี | +| 50114 | QuestTeamTowerPanel | 5011401 | 5011402 | 150078 | prefab + icon มี | +| 50112 | QuestPixAirPanel | 5011201 | 5011202 | 150076 | prefab + icon มี | +| 50111 | QuestB51RacingPanel | 5011101 | 5011102 | 150079 | prefab + icon มี | +| 50107 | QuestChenLingFesPanel | 5010701 | ว่าง | 150077 | prefab + icon มี | +| 50092 | QuestChenLingBattlePanel | 5009201 | 5009202 | 150074 | prefab + icon มี | +| 50134 | QuestBlindBoxPanel | 5013401 | 5013402 | 150134 | prefab ไม่มี / icon มี | + +รายการนี้ยังไม่อยู่ใน selected preview families ปัจจุบัน กลุ่มที่ assets มีถูกกันไว้เพราะ DisplayItemList และ event-specific data handlers ยังไม่ครบ จึงต้องแยกจากกรณี asset ไม่มีจริง + +Exact paths ของสามรายการที่มีข้อมูลใหม่ชัดเจน: + +```text +UI/Quest/Widget/QuestMechCraftPanel.prefab +UI/Quest/Widget/QuestComicDessertPanel.prefab +UI/Quest/Widget/QuestRealityShowPanel.prefab +``` + +BlindBox แถวที่ capture ได้เก็บ path `Assets/AsbRes/UI/Quest/Widget/QuestBlindBoxPanel.prefab` ซึ่ง `AssetMgr.Exists` ให้ false อย่าเดาว่าถอด prefix หรือเปลี่ยน case แล้วจะใช้งานได้ ต้องตรวจ canonical loader/path ก่อน + +### เงื่อนไขที่อยู่ในแถวจริง + +| Panel | UnlockConditions | FinishConditions ที่ต้องตามต่อ | +| --- | --- | --- | +| 50132 MechCraft | `[PlayerLevel:21]` | QuestClose ของ 6088098–6088120 ทุก ID ในช่วง | +| 50142 ComicDessert | `[PlayerLevel:21]` | QuestClose ของ 6090001–6090005 และ 6090014 | +| 50143 RealityShow | `[PlayerLevel:21]` | QuestClose ของ 6091004, 6091008, 6091012, 6091016, 6091020, 6091001, 6091005, 6091009, 6091013, 6091017 | +| 50134 BlindBox | `[PlayerLevel:4]` | `[QuestClose:6089009]` | + +อย่า complete quest เหล่านี้ทั้งหมดเพื่อให้หน้าเปิด เพราะบางตัวเป็น **FinishConditions** ซึ่งอาจทำให้หน้าถูกถือว่าจบหรือหายไปแทน ต้องอ่าน semantic ของ condition checker และตรงกับ state จริงก่อน + +### TextID สำหรับ resolve ชื่อหน้าจอแบบ targeted + +| Panel | TabName.hash | TabName.hash64 | +| --- | ---: | ---: | +| 50132 | 1880458566 | 6958762709850968366 | +| 50142 | -2011224203 | 143653261616862737 | +| 50143 | -2011224202 | 14823125606058724992 | +| 50134 | 1880458564 | 7162233255424057948 | + +raw capture รักษา integer strings เดิมไว้ เลข hash64 หลายตัวเกิน exact integer range ของ JavaScript Number ห้าม parse แล้ว serialize ด้วย Number จนค่าเปลี่ยน ใช้ parser ที่รักษา int64/uint64 หรือเก็บเป็น string สำหรับ derived exports + +## 4. ID mapping ของ schedule ต้องไม่สลับ + +ใน `internal/gameserver/handlers_challenge.go` handler `GetActivityScheduleConfig` ส่ง: + +```text +ActivityScheduleData.ActivityId = ActivityModuleID +ActivityScheduleData.PanelId = ActivityPanelID +``` + +ตัวอย่าง MechCraft ตาม association ที่ capture มา: + +```text +ActivityConfig.ActivityID = 50132 +ActivityConfig.ActivityPanelID = 50132 +ActivityConfig.ActivityModuleIDList = [5013201] +ActivityConfig.ResidentModuleList = [5013202] +``` + +อย่าเอา `50132` ไปส่งเป็น module schedule แทน `5013201` เพียงเพราะ field ใน wire ชื่อ ActivityId การมี resident module ก็ไม่ได้พิสูจน์ว่าใช้เป็น active preview แบบเดียวกับ main module ได้ ต้องตรวจ proxy/phase behavior ของกิจกรรมนั้น + +`ActivityPanelID=0` บางแถวต้อง resolve ตาม Client behavior ที่ตรวจไว้ โดย loader ปัจจุบันใช้ fallback ActivityID แต่มี 99 activities ที่ยังไม่มี panel row ให้ match ใน capture นี้ อย่าส่งทุกแถวพร้อม panel 0 หรือสร้าง panel ID ขึ้นเอง + +หลาย rerun activities อ้าง module เดียวกัน เช่น module 1002101 ถูกใช้กับ panel 10021/10113 ซึ่งเป็น prefab/handler เดียวกัน ปัจจุบันรวมเหลือรายการเดียวแบบ deterministic ถ้าเปลี่ยน policy แล้วพบต่าง prefab/handler loader จะ error แทนการเลือกแถวแรก + +## 5. คำตอบ/data handlers ที่มีจริง กับที่ยังไม่มี + +`internal/gameserver/handlers_activity_preview.go` มี: + +- `GetMultipleDropInfo`: สร้าง explicit panel entries แต่ counter เป็นศูนย์ เป็น preview ไม่ใช่แจก quota/reward เพิ่ม +- `GetActiveActivityData`: มี handler แต่ policy ปัจจุบันไม่เปิด family ที่เคยเกิด invalid-item error กลับมา +- `GetFiveDimMiniGameData`: ยังตอบ list ว่าง ไม่ใช่ implementation ของ Stella Jump/gameplay +- `QuestState`: เป็นชื่อ policy grouping ที่อาศัย quest/mission handlers เดิม ไม่ใช่ generic handler ที่ทำ MechCraft/RealityShow ทุกระบบได้ + +ปัจจุบันยังไม่มีการพิสูจน์ event-specific data/entry callbacks ครบสำหรับ MechCraft, ComicDessert และ RealityShow อย่าส่ง null success response หรือ advertise ก่อนรู้ว่า Client จะขอ state อะไรต่อ + +ตาราง CmdID ใน `protocol/proto/upstream_cmdids.go` ระบุ: + +```text +Source: https://git.xeondev.com/HonkaiSlopRail/pearl-sr protocol/src/root.zig +Revision: 005d2c12db4781071f4b5b68e8f364587886a710 +``` + +มีชื่อชัดเจนบางระบบ เช่น `PixAirGetData`, `GetChenLingFesData`, `StartFinalityBattleLevel`, `BlindBoxGetData` แต่การมีชื่อในตารางยังไม่ใช่หลักฐานว่า handler ใช้งานครบ และ MechCraft/ComicDessert/RealityShow ยังไม่พบชื่อชัดเจนจากการค้นนี้ อาจยังใช้ obfuscated names ต้องผูกจาก sender/callback schema จริง ห้ามเดา aliases หรือใช้เลขหลาย revision + +## 6. ไปหาต่อจากไหนโดยไม่สแกนทั้ง assembly + +### หลักฐาน named tables ที่มีแล้ว + +`tools/preview_catalog_metadata.lua` ตรวจเฉพาะชื่อ type และ `FromBinary` ของ ActivityPanelRow/ActivityConfigRow แล้วนำไปตาม flat dictionary chain + +`tools/preview_flat_tables.js` มี exact getter chain ของ assembly hash ข้างต้น: + +| ตาราง | GetAll RVA สำหรับ hash ที่ระบุเท่านั้น | +| --- | --- | +| ActivityPanelRow | `0x1e4ca860` | +| ActivityConfigRow | `0x1dfbc4d0` | + +getter traces อยู่ใน `battle_diagnostics/preview-activity-getter.asm`, `preview-panels-getter.asm` พร้อม `preview-activity-{loader,add}.asm` และ `preview-activity-panel-{loader,add}.asm` + +Capture อ่านครั้งละ 16 แถวต่อ managed marker และตรวจ bounds ก่อน serialize ไม่ต้องเรียก scene/level factory `tools/preview_capture_trigger.lua` ส่ง marker `GAC_PREVIEW_TICK` แบบจำกัดครั้งและ pause ใน Battle + +**ข้อมูลถูก capture แล้ว ไม่จำเป็นต้องติด probe ซ้ำเพียงเพื่อเปิดดูตารางเดิม** หากต้องอ่านใหม่ต้องตรวจ process/module hash ใหม่ก่อน RVA เป็นของ shipped binary เฉพาะรุ่น ไม่ใช่ production constants และ MethodHandle/pointer เก่าห้ามใช้ข้าม process + +### จุดเริ่ม event page/proxy + +จาก named metadata ของ `RPG.Client.ActivityModule` พบ: + +```text +ActivityDataDict +ActivityPanelDataContainer +CustomizedPanelDataContainer +_PanelDataProxyFactory +_PanelID2TemplateIndexLUT +_PanelTemplates +_AvailablePanelDatas +_phaseMap / _phaseList +GetActivityData(UInt32) +_OnScheduleConfigRefresh(System.Object) +``` + +ข้อมูลนี้ใช้เลือก inspect object/proxy ของ **panel ID เป้าหมาย** ได้ ไม่ต้อง enumerate ทุก type ใน assembly + +สำหรับ panel UI ให้ตาม prefab/binder registration ของ technical name ที่ระบุข้างบน เพื่อหา exact loaded Lua module/controller ก่อน เมื่อมี module name ที่ยืนยันแล้วค่อยอ่าน named functions/upvalues หรือ loader bytes ไม่สมมติ callback ชื่อ `_refresh`/`GetData` ว่าแต่ละ panel เหมือนกันหมด + +มีตัวอย่างวิธีอ่าน Luau โดยไม่ execute closure ใน `tools/gacha_load_only.lua` และ bytecode reader `tools/inspect_luau_v4.py` สำหรับ GachaMainPage ที่ทำไว้ก่อน **ใช้เป็นรูปแบบการวิเคราะห์เท่านั้น** อย่า require/reload event controller หรือใช้ package loader ของชื่อที่เดาขึ้นเองระหว่าง gameplay + +## 7. ลำดับงานที่แนะนำ + +1. เปิด `derived/event-index.json`/CSV แล้วค้น panel 50132/50142/50143 ก่อน จะเห็น association, reward item IDs และ conditions โดยไม่ต้อง extract ใหม่ +2. Resolve TabName/TitleName/IntroDesc จาก TextID ที่เจาะจง เพื่อบอกผู้ใช้ได้ว่า technical event นี้ตรงกับชื่อใดจริง +3. อ่าน exact UI controller/data proxy ของ panel หนึ่งระบบให้ครบ entry → data request → initialization → close/return map โดยไม่ execute action ระหว่างสำรวจ +4. ตรวจ display-item dependencies ทุก ID กับ current Client item assets/config และดูว่า reward preview สร้าง ItemData ได้จริงก่อนแสดงหน้า +5. ผูก main/resident modules และ early access state จาก schema ปัจจุบัน ไม่ตีความทุก module เป็น active event ชนิดเดียวกัน +6. Implement data/entry path ของระบบนั้นแล้วค่อยขยาย policy และ schedule อย่าเปิดทุก prefab ที่มีแล้วตอบว่าง +7. อัปเดตสถานะแยก asset present / source implemented / deployed / Client confirmed คำว่า “หาเจอ” ไม่ใช่คำว่า “เล่นได้แล้ว” + +### ข้อจำกัดที่ยังเหลือ + +- ยังไม่มี export official per-event active schedule ชุดปัจจุบันจาก Client/service ต้นทาง เวลาใน server ใช้ operator `cfg.ActivitySchedule` ร่วมกับ Endgame +- ยังไม่มี localized titles ที่ resolve ครบทุก panel +- raw catalog นี้ไม่รวมทุก event gameplay table, Lua/controller, stage/reward graph หรือ asset bundle ทั้งเกม +- เอกสารนี้ไม่ยืนยันว่า UI ใหม่เปิดได้หรือจอดำหาย ผู้ใช้ไม่ต้องถูกวนให้ลองทีละ handler ตามคำสั่งล่าสุด + +ดังนั้นให้ใช้รายการนี้ช่วย GLM หา event และต่อข้อมูลที่ยังขาด แทนการสรุปว่า Beta นี้ไม่มี event เพราะชื่อ type หนึ่งหาไม่เจอ diff --git a/docs/GLM-GACHA-GUIDE.md b/docs/GLM-GACHA-GUIDE.md new file mode 100644 index 0000000..33d1314 --- /dev/null +++ b/docs/GLM-GACHA-GUIDE.md @@ -0,0 +1,301 @@ +# ข้อมูลและวิธีเพิ่มตู้กาชาให้ GLM — Client Beta ปัจจุบัน + +อัปเดต: 24 ตุลาคม 2026 (Asia/Bangkok) + +อ่านคู่กับ [GLM-BETA-DATA.md](GLM-BETA-DATA.md) และ [ZCODE-HANDOFF.md](ZCODE-HANDOFF.md) + +## 1. เป้าหมายผู้ใช้และสถานะจริง + +ผู้ใช้ต้องการเลือกตู้ตัวละคร โดยแต่ละตู้มีตัวเด่นหนึ่งตัว และผลสุ่มตรงกับตัวที่แสดงบนตู้ ไม่ได้ต้องการแค่หน้า Standard ที่เปิดดูได้แต่สุ่มไม่ได้ + +ตอนนี้ backend มีโค้ด featured-only sandbox สำหรับสุ่ม 1/10 ครั้ง และจัดการ duplicate material แต่ **ยังไม่มี featured banner ที่เปิดใช้งานจริง** Policy เปิดเพียง Standard เพื่อหลีกเลี่ยง Client crash จึงยังไม่ตรงคำขอ + +เอกสารนี้ให้ข้อมูลที่ตรวจแล้วและลำดับพัฒนาต่อ ไม่ได้อ้างว่าการเพิ่ม path ใน JSON จะทำให้ตู้ใช้งานได้ หรือว่าดึง asset ที่หายกลับมาแล้ว + +Client ที่อ้างอิงใน capture นี้: `GameAssembly.dll` SHA-256 + +```text +4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6 +``` + +เป็น Client Beta .54 ที่ตรวจ runtime จริง ไม่ใช้ hash/RVA ของ CW capture .53 แทน + +## 2. ตารางตู้จริงที่ดึงไว้แล้ว + +`resources/PreviewGameplayCatalog.json` → `tables.gacha` มี `GachaBasicInfoConfigRow` ครบ 6 แถวของ capture นี้: + +| GachaID | GachaType | SortID | PrefabPath | ผลตรวจ asset | +| ---: | ---: | ---: | --- | --- | +| 1001 | 1 | 99 | `UI/Drawcard/GachaPanel/StandardGacha_1001.prefab` | มี | +| 4001 | 2 | 1 | `UI/Drawcard/GachaPanel/NoviceGacha_4001.prefab` | มี | +| 2001 | 11 | 2 | `UI/Drawcard/GachaPanelLimited/AvatarGacha_1102.prefab` | ไม่มี | +| 2002 | 11 | 3 | `UI/Drawcard/GachaPanelLimited/AvatarGacha_1204.prefab` | ไม่มี | +| 3001 | 12 | 4 | `UI/Drawcard/GachaPanelLimited/LightConeGacha_23001.prefab` | ไม่มี | +| 3002 | 12 | 5 | `UI/Drawcard/GachaPanelLimited/LightConeGacha_23010.prefab` | ไม่มี | + +ชื่อ enum ที่พบใน Lua คือ `Normal`, `Newbie`, `AvatarUp`, `WeaponUp` การจับคู่เลขข้างบนมาจาก captured rows ไม่ใช่การสร้างเลขเพิ่ม + +แถวเหล่านี้ยังเก็บ `PoolLabelIcon`, `PoolLabelIconSelected`, `PoolName`, `PoolDesc`, `TypeTitle` และ TextID/hash64 ให้ใช้ original numbers ห้ามอ่านผ่านเครื่องมือที่ทำ uint64 เกิน 2^53 สูญเสีย precision + +**ข้อจำกัด:** แถวในตารางไม่ได้พิสูจน์ว่ามี bundle ใน installation ผล `AssetMgr.Exists` ยืนยันแล้วว่า limited ทั้ง 4 path ข้างบนไม่มี + +หลักฐาน: `battle_diagnostics/gacha-asset-exists-20261024.log` มีผลครบ 6 path และ `END` Policy เก็บผลพร้อม hash ไว้ใน `resources/GachaSandboxPolicy.json` + +Seele prefab ที่ไม่มีเคยทำ `UIPrefabLoader._HandleLoadResult` ArgumentNullException ระหว่าง `GachaMainPage._create_pools_panel` แล้วออกกลับโลกจอดำ ห้ามเพิ่มกลับ allowlist เพื่อให้หน้าตู้ดูเยอะขึ้นทั้งที่ asset ยังไม่มี + +## 3. Generic/group prefab ที่พบใหม่ — ตรวจแล้วไม่มีเช่นกัน + +ถอดจาก bytecode ของ GachaMainPage ปัจจุบัน พบ group presentation ที่มี path จริงดังนี้: + +| Group enum และค่าที่ capture จริง | Path ที่อ้างถึง | ผลตรวจใน Client ปัจจุบัน | +| --- | --- | --- | +| `MultiAvatarUp=1` / `MultiWeaponUp=2` | `UI/Drawcard/GachaPanel/MultiAvatarGacha.prefab` | ไม่มี | +| `Collaboration=3` | `UI/Drawcard/CollaborationGacha/CollaborationGacha.prefab` | ไม่มี | +| `CollaborationMerge=4` | `UI/Drawcard/CollaborationGacha0440/CollaborationGacha0440.prefab` | ไม่มี | + +หลักฐานรอบล่าสุด: `battle_diagnostics/glm-beta-targeted-metadata.log` + +```text +ASSET UI/Drawcard/GachaPanel/MultiAvatarGacha.prefab true false +ASSET UI/Drawcard/CollaborationGacha/CollaborationGacha.prefab true false +ASSET UI/Drawcard/CollaborationGacha0440/CollaborationGacha0440.prefab true false +END +``` + +ใน log นี้ boolean แรกคือการเรียกตรวจสำเร็จ ส่วน boolean ที่สองคือผล Exists จึงหมายถึง **ตรวจสำเร็จและไม่มี asset** ไม่ใช่พบ asset แล้ว + +Group path เป็นข้อมูลสำหรับเข้าใจโครงสร้าง UI ไม่ใช่ fallback ที่พร้อมเปิดใช้ อย่าเสนอว่าเปลี่ยนมาใช้ MultiAvatarGacha แล้วจะหายทันที + +ผลตรวจ paths แยกเป็น machine-readable data ใน `battle_diagnostics/glm-gacha-group-assets.json` ส่วนผลอ่าน **ตาราง group จริง** ล่าสุดอยู่ใน `battle_diagnostics/glm-gacha-groups-current.json`: `BEGIN count=0` จน `END count=0` จึงเป็นตารางว่างที่อ่านจบแล้ว ไม่ใช่ยังไม่ได้ capture ห้ามสร้าง GroupID หรือ pool-to-group mapping โดยเอาค่า enum 1–4 มาใช้เป็น IDs + +## 4. การเพิ่มตู้มีสองกรณี + +### กรณี A: มี config และ asset ของตู้จริงครบใน Client + +1. ใช้แถว `GachaBasicInfoConfigRow` และ group/type ที่มี provenance ตรงรุ่น ปัจจุบัน group table อ่านครบแล้วเป็น 0 แถว จึงไม่มี original group mapping ให้เปิดใช้ และยังต้องอ่าน type data ที่จำเป็นให้ครบ +2. ตรวจ prefab, tab icon ทั้งสองสถานะ และ dependency ที่ controller ใช้ ให้มีจริงใน installation +3. ประกาศตู้ผ่าน resource catalog และ verified policy ไม่ใส่ game ID/path เจาะจงลง handler +4. ส่ง GetGachaInfo ให้ใช้ ID เดียวกับแถวที่ Client resolve ได้ และ prize/detail data ตรงกับตัวที่หน้าตู้แสดง +5. ให้ DoGacha ใช้ banner mapping เดียวกัน ตรวจ request/count และจัดการ grant/sync/persistence ให้ครบ +6. ตรวจ entry/exit และ animation state จาก callback จริง ไม่แก้ด้วยการปิด Canvas หรือกล้องทุกตัว + +**กรณีนี้ยังทำไม่ได้กับ limited 4 แถวปัจจุบัน เพราะผลตรวจยืนยันว่า prefab ไม่มี** + +### กรณี B: ไม่มี original banner asset — ต้องทำ custom presentation + +นี่เป็นทางพัฒนาที่ตรงคำขอได้ แต่ยังไม่มี implementation สำเร็จใน source ปัจจุบัน: + +1. กำหนด extension catalog แยกจาก raw captured tables โดยระบุว่าเป็น custom presentation ไม่ปลอมว่าเป็น original Client data +2. ใช้ avatar/item metadata และภาพที่ตรวจว่ามีจริงเป็นรายตัว ต้องแสดงชื่อ/ภาพตรงกับผล draw ห้ามใช้ภาพ Standard ค้างไว้แต่สุ่มเป็นตัวอื่น +3. ทำ UI/controller/binder ที่ใช้ asset ที่มีจริง อาจประกอบจากส่วนย่อยที่ตรวจแล้ว หรือทำ presentation ใหม่ที่เข้ากับระบบ UI; ไม่ใช่เพียงเปลี่ยน `Row.PrefabPath` เป็น Standard แล้วคาดว่า limited binder จะทำงาน +4. ต่อ pool/group/tab data และ selection state เข้ากับ Client โดยใช้ชนิด/enum/schema ที่ยืนยันแล้ว เก็บ custom ID mapping ใน resource ที่ตรวจความถูกต้องได้ +5. ให้ Client และ server resolve ตู้เดียวกันจาก catalog เดียวกัน ก่อนรับการสุ่ม +6. ส่งผล Item/GachaItem/duplicate materials ให้ครบ และคืน transition กลับโลกเมื่อปิด + +การส่ง GachaID ใหม่ที่ Client ไม่มี config **ไม่พอ**: Client ต้องสร้าง/resolve pool, type และ group ได้ด้วย การส่ง GachaID 1001 ซ้ำหลายแถวจะชน key ไม่ได้กลายเป็นตู้แยกทุกตัวละคร + +ห้ามใช้สูตร `bannerID = avatarID + ค่าคงที่` หรือเดา path ของทุกตัวละครขึ้นเอง แล้วอ้างว่าเป็นตาราง Beta ให้กำหนด custom extension อย่างชัดเจนถ้าจำเป็นต้องสร้าง namespace ใหม่ + +## 5. สิ่งที่ Client ใช้สร้างหน้า — มีหลักฐานแล้ว + +`battle_diagnostics/gacha-main-page.json` เป็นผลอ่าน bytecode ที่ไม่ execute ของ: + +```text +@BakedLua/Ui/Gacha/GachaMainPage.bytes +``` + +### `_create_pools_panel` — prototype 26 / source line 308 + +ลำดับชื่อที่พบใน bytecode: + +```text +GetSortedGachaGroupDatas +IsValid / IsFeatureClosed / IsSinglePoolGachaGroup +DefaultGachaPoolData.PrefabPath +sync_load_prefab +_gachaType2tabItem +create_panel / set_tab_data +``` + +แยกสองเส้นทาง: + +- Single-pool group: โหลด `DefaultGachaPoolData.PrefabPath` แล้วสร้าง tab item ด้วย panel/binder ตาม `GachaType` +- Group: เลือกจาก `_groupID2GroupPrefab` / `_groupType2GroupPrefab` และ `_groupID2TabItem` / `_groupType2TabItem` พร้อม binder ของ group + +ไม่ควรดูเพียง GetGachaInfoScRsp แล้วมองข้าม group data ที่หน้า UI ใช้จริง + +### ฟังก์ชันสำคัญอื่น + +- `_init_type2tab_table` prototype 8: ผูก `Normal`, `AvatarUp`, `WeaponUp`, `Newbie` กับ tab item/binder +- `_init_group_tab_prefab` prototype 9: กำหนด group prefab/controller/binder maps +- `_get_group_tab_prefab_config` prototype 10: เลือก override ด้วย GroupID แล้วจึง GroupType +- `_on_group_tab_change` prototype 31 และ `_on_tab_change` prototype 32: cache selected pool และ setup main page +- `_setup_main_page` prototype 33: setup draw/decide/top bar และ `Row.PoolName` ผ่าน `SafeSetTextID` + +### Native/data types ที่ตรวจพบ + +`BaseGachaPoolData` มี: + +- `Row` getter/setter ชนิด `GachaBasicInfoConfigRow` +- `TypeBasicInfoRow`, `PrizeItemDatas`, `DetailItemDatas` +- `SingleDrawData`, `MultiDrawData`, `GachaTokenData`, `DecideData` +- `SyncGachaPoolData`, `_InitPrizeItemsRow`, `_InitDetailItemsRow`, `IsValid`, `IsFeatureClosed`, `PrefabPath` + +`BaseGachaGroupData` มี: + +- `_GachaGroupDataRow`, `_GachaPoolDataList`, `GroupID`, `GroupType` +- `AddGachaPoolData`, `GetSortedGachaPoolData`, `Sort`, `IsValid`, `IsFeatureClosed`, `HasGachaPool` + +Capture ล่าสุดยืนยัน **shape** ของ `RPG.GameCore.GachaGroupDataRow`: + +```text +PoolLabelIcon System.String +PoolLabelIconSelected System.String +GachaIDList System.UInt32[] +GroupType RPG.GameCore.GachaGroupType +GroupID System.UInt32 +FromBinary(reader, GachaGroupDataRow byref) +``` + +ต่อจาก metadata ได้ตาม native chain และอ่าน flat GetAll ของตารางนี้ครบแล้ว: + +```text +GachaGroupDataRow.FromBinary RVA 0x1e853750 + -> wrapper RVA 0x1e853700 + -> Add dictionary RVA 0x1e853950 + -> flat GetAll RVA 0x1e852f20 +BEGIN count=0 +END count=0 +``` + +หลักฐาน `ev_551674df9f28f4fc92485a8b8f3490795a8296564ee586fe356b16bca00e0b8b`, ข้อมูล `battle_diagnostics/glm-gacha-groups-current.json` และ assembler files `glm-gacha-group-add.asm`, `glm-gacha-group-dictionary.asm`, `glm-gacha-group-flat-getall.asm` ผูกกับ SHA ปัจจุบัน + +**ตาราง group ที่ตรวจนี้ว่างจริง ณ capture** ไม่ได้แปลว่า Lua/UI ไม่มีโค้ดรองรับ groups แต่ไม่มี GroupIDs หรือ GachaIDList ให้ใช้เป็น original mapping อย่าอ่านค่า enum เป็น GroupID หรือเอาข้อมูลของ reference รุ่นเก่ามาเติมแล้วเรียกว่า Beta ปัจจุบัน + +RVAs ข้างบนใช้บันทึกเส้นทางหลักฐานของ assembly hash นี้เท่านั้น ไม่ใช่ค่าที่ให้ฝังใน production MethodHandle/addresses ใน log ใช้ได้เฉพาะโปรเซสที่ capture ห้ามนำ pointer เดิมกลับไปใช้หลังเปิดเกมใหม่ + +`GachaTypeBasicInfoRow` มี `GachaTypeID`, `GachaBar`, `DiamondID`, `ItemPrice`, `ItemCosume`, `UpPropability`, `BuyPos` ต้องอ่านค่าจริงของ type ที่ใช้ ไม่เดาค่า currency/token หรือราคา + +### Lua modules ที่ควรอ่านต่อแบบเจาะจง + +- `Ui.Gacha.GachaPool.DefaultGachaPoolTabItem` และ binder +- `Ui.Gacha.GachaPool.DefaultGachaAvatarGroupTabItem` และ binder +- `Ui.Gacha.GachaPool.GachaSubAvatarGroupPanel` +- `Ui.Gacha.GachaPool.GachaSubAvatarItemIconPanel` +- `Ui.Gacha.GachaPool.DefaultGachaAvatarPanel` +- `Ui.Gacha.GachaPool.DefaultGachaUpAvatarPanel` + +UpAvatarPanel มี `_init_imgs`, `_setup_up_avatar_img`, `setup_view`, `_on_load` แต่การมีชื่อ module ไม่ได้พิสูจน์ว่ามี prefab ที่ใช้งานได้ + +## 6. Protocol fields ที่ใช้อ้างอิงได้ + +ต้นฉบับ `protocol/proto/StarRail.proto` แถวประมาณ 20415 เป็นต้นไป: + +| Message | Field ที่มีชื่อชัด | Wire tag | +| --- | --- | ---: | +| GachaInfo | end_time / gacha_id / gacha_ceiling / begin_time | 1 / 2 / 3 / 5 | +| GachaInfo | prize_item_list / item_detail_list | 10 / 11 | +| GetGachaInfoScRsp | retcode / gacha_info_list | 1 / 15 | +| DoGachaCsReq | gacha_id / gacha_num | 4 / 15 | +| DoGachaScRsp | retcode / gacha_item_list / gacha_num / gacha_id | 1 / 2 / 6 / 13 | +| GachaItem | transfer_item_list / is_new / token_item / gacha_item | 5 / 7 / 10 / 15 | + +`GachaInfo` ยังมี fields obfuscated และ GetGachaInfoScRsp มี `AKMDBPNEHDE` ชนิด `NEIMLKNMDBM` อย่าอ้างว่าเป็น group payload แน่นอนหรือเติม tag ตามการคาดเดา ต้องตาม native consumer ก่อน + +ตาราง command ที่เช็กใน source อยู่ที่ `protocol/proto/upstream_cmdids.go`: + +```text +CommandSourceRevision = 005d2c12db4781071f4b5b68e8f364587886a710 +GetGachaInfoCsReq 1974 -> GetGachaInfoScRsp 1919 +DoGachaCsReq 1931 -> DoGachaScRsp 1987 +``` + +เลขนี้ให้เป็นหลักฐานอ้างอิงในเอกสารเท่านั้น implementation ต้องใช้ named resolver ของโปรเจกต์ ห้ามฝังตัวเลขแทนชื่อหรือรับ aliases หลายรุ่น และ source revision ไม่ใช่หลักฐานว่า native schema .54 ทุก field ยืนยันครบแล้ว + +## 7. โค้ด backend ปัจจุบันและการแก้ต่อ + +### จุดอ่าน catalog + +`internal/common/gacha_catalog.go`: + +- `LoadBrowsableGachaBanners` ใช้ verified prefabs สำหรับ GetInfo +- `LoadFeaturedGachaBanners` ยอมรับเฉพาะ basename `AvatarGacha_.prefab` ที่อยู่ใน policy +- ไม่สร้าง GachaID หรือ prefab paths เพิ่มเอง +- ปัจจุบันพบ Standard ได้ แต่มี `AvatarID=0` จึงไม่เปิด featured draw + +ข้อควรระวังสำหรับ custom presentation: logic ที่อนุมาน avatar จาก basename ใช้กับ extension catalog ใหม่ไม่ได้เสมอไป ต้องออกแบบ explicit mapping พร้อมตรวจ provenance/asset availability แทนการเปลี่ยน regex ให้รับทุกชื่อ + +### จุดตอบ GetInfo/Draw + +`internal/gameserver/handlers_gacha.go`: + +- GetInfo ใช้ activity schedule จาก runtime config ส่ง non-null `GachaCeiling` +- ถ้ามี featured avatar จึงส่ง prize/detail lists +- DoGacha ตรวจ banner/count และ reject ระหว่าง Battle +- ต้องมี avatar ใน imported roster และมี Eidolon resource ที่ตรง +- duplicate ให้ material ตาม configured first Eidolon cost ไม่ใช่ตัวละคร/ไอเท็มสลับมั่ว +- ส่ง material delta ใน PlayerSync และ GachaItem ตามจำนวน draws + +### Persistence ที่ต้องรักษา + +`GrantGachaDuplicate` อ่าน latest `freesr-data.json` ใต้ shared process/file locks แล้ว merge เฉพาะ materials ไม่สร้าง avatar ใหม่ ไม่เปลี่ยน rank/EX/Traces ไม่เขียน inventory ทับทั้งก้อน + +Sandbox policy ปัจจุบัน: + +```text +allowed_draw_counts: 1, 10 +charge_currency: false +duplicate_reward: configured_first_eidolon_cost +``` + +นี่ไม่ใช่ official probability/price model หากจะเปิด acquisition ของ avatar ที่ยังไม่มี ต้องทำ valid avatar/item sync และ targeted persistence เพิ่ม ยังไม่มีเส้นทางนั้นในโค้ดนี้ + +ไม่ควรเปลี่ยน DoGacha ให้ตอบ success พร้อมผลว่างเพื่อให้ spinner หยุด เพราะจะไม่ตรงจำนวน draws และ state ของ Client + +## 8. อ่าน bytecode ต่ออย่างไร + +Client นี้ใช้ `xluau.dll` มี Luau v4/type1 bytecode ไม่ใช่ LuaJIT: + +- `string.dump` ไม่มี และ `jit.util` ใช้ไม่ได้ +- มี `debug.getupvalue`, `debug.getinfo`, `debug.info`, `package.loaders` +- รอบที่เก็บ GachaMainPage ใช้ package loader เพื่อรับ closure โดย **ไม่ execute closure และไม่แทน package.loaded** แล้ว passive hook `xluaL_loadbuffer` เก็บ bytes +- อย่าเอา callback/module execution ไปปนกับการอ่านข้อมูล หรือ reload หน้าขณะผู้ใช้สู้ + +เก็บไว้แล้ว: + +```text +battle_diagnostics/gacha-main-page.luau +battle_diagnostics/gacha-main-page.hex +battle_diagnostics/gacha-main-page.json +tools/inspect_luau_v4.py +``` + +ตัวอย่างอ่านไฟล์ capture offline จาก root โปรเจกต์: + +```text +python tools/inspect_luau_v4.py battle_diagnostics/gacha-main-page.luau --output battle_diagnostics/gacha-main-page.json +``` + +Parser อ่าน version/type ที่รองรับเท่านั้น และตรวจว่าใช้ bytes ครบ ไม่ execute chunk เป็นเครื่องมือวิเคราะห์ ไม่ใช่ gameplay test และไม่ใช่ decompiler ที่ยืนยันความหมายทุกคำสั่ง + +Layout reference: Luau upstream `VM/src/lvmload.cpp`, `Common/include/Luau/Bytecode.h` สำเนาอยู่ใน diagnostics ประกอบการตรวจ format + +REA evidence ของ capture: `ev_57f147cb094af2060be82f5110e378d25ff2179f0390c56348368a855e7658b8` ขนาด GachaMainPage 23630 bytes ไม่มี message truncation ใน capture นี้ + +ทุก `.lua` ใน `scripts/` ถูกส่งเข้า Client อัตโนมัติ temporary probes ต้องอยู่ใน `tools/` เมื่อไม่ได้ใช้งาน จำกัดเฉพาะ types/functions ที่ระบุและ pause ระหว่าง Battle ห้ามสแกนทุก assembly type/method บน main thread + +ณ จุดส่งต่อ probes ที่ใช้รอบนี้ถูกถอดจาก `scripts/` และ Frida sessions ปิด/detach แล้ว ไม่ได้ kill Client + +## 9. เช็กลิสต์รับงานต่อ + +- [ ] อ่าน package/manifest คู่กับ GLM-BETA-DATA เพื่อไม่ปน .53 และ .54 +- [ ] ตัดสินทาง custom presentation โดยยอมรับว่า limited และ generic group prefabs ที่เช็กทั้งหมดไม่มีใน installation นี้ +- [ ] ใช้ผล group table ที่อ่านจบแล้ว 0 แถวเป็นข้อจำกัดของ original config; อ่าน type data และ consumer ของ fields obfuscated ที่ยังจำเป็น ก่อนออกแบบ custom mapping +- [ ] ทำ explicit banner/avatar/presentation mapping ให้ Client และ backend ตรงกัน +- [ ] ตรวจ selected portrait/tab/icon/material dependencies เป็นราย resource ไม่เดาชื่อไฟล์ +- [ ] รองรับ 1/10 draws และ duplicate/acquisition ตามขอบเขตที่ประกาศ +- [ ] รักษา progression/EX false/material delta และป้องกัน stale session ทับ API +- [ ] ทำ close/exit ให้คืน world/UI transition ไม่ค้างดำ +- [ ] ตามคำสั่งผู้ใช้ล่าสุด: ไม่เพิ่มหรือรัน tests และไม่วนให้ผู้ใช้ลองทีละ handler; ระบุส่วนที่ยังไม่มี Client confirmation ตามจริง + +**จุดสรุปให้ GLM:** Backend ส่วนหนึ่งพร้อมแล้ว แต่การเปิดตู้ตัวละครจริงใน Beta นี้ติด presentation/config mapping และ assets ที่ไม่อยู่ใน installation การมี GachaInfo response หรือเพิ่ม allowlist อย่างเดียวไม่ใช่การทำฟีเจอร์เสร็จ diff --git a/docs/UI-RECOVERY-20261024.md b/docs/UI-RECOVERY-20261024.md new file mode 100644 index 0000000..51536f7 --- /dev/null +++ b/docs/UI-RECOVERY-20261024.md @@ -0,0 +1,35 @@ +# Recovery checkpoint — 2026-10-24 + +## Confirmed findings + +- No tracked files were deleted at the initial audit. Missing menus alone do not prove missing assets. +- Latest captured Player.log reports missing sub-mission `104020220`, followed by `MainMissionData.AddSubMission` / `_OnCmdGetMissionDataScRsp` sorting failure. Mission initialization failure is a plausible cause of incomplete unlock/menu state; Client recovery is not yet confirmed. +- Added only this observed exclusion to MissionCompatibility.json for the existing client revision entries, retaining previous exclusions. Copied the resource to `for ship/resources/` as well. No executable was rebuilt or replaced. +- The current persistent file had lost whole sections. Restored only absent sections; comparison against the checkpoint confirms every preexisting field is semantically unchanged. + +## Restored sections + +`team_presets` (8 saved teams), `active_team_preset`, `tierce_progress`, `player_outfits`, `scene_group_properties`, `profile`, and `currency_wars` (configured account only). + +Source: `.runtime/before-cw-grants-25691022-130022/persistent`, dated 2026-10-22. CW envelope revision 529, route 2801, chapter 1, section 5. This is the best located backup, not proof of the latest state before loss. + +Source SHA256: `0a2c9cc2d065f1a5f5f42142e6c28136e0fe92da7d25de4f45fc0fab35d383d0` + +Recovered persistent SHA256: `eee9771994ef931d4710b6c0b6f7dad241c7d0f556fec76b67ebf21aeab34398` + +Current lineup, position, scene, EX values, food stock and existing flags were preserved. No queued grants were restored. Missing Aha Help level was not guessed: no exact saved value was located in the inspected backups. + +## Private rollback checkpoint + +`.local-checkpoints/restore-ui-20261024T124147Z/before-recovery.zip` contains the pre-recovery persistent, local configuration, changed files, executable copies and Player.log evidence. It contains private local data; do not publish it. The adjacent manifest records hashes. + +## Unresolved + +- The writer responsible for dropping persistent sections is not established. Do not attribute it to one command without evidence. +- Further missing mission configs may surface after the current failure is removed. Do not claim the entire mission catalog is compatible from this single correction. +- Two AA source paths disappeared during the audit while replacement round-selection files were present. Both original paths are preserved in the checkpoint; do not blindly restore them over concurrent work. +- No gameplay tests, build, server restart or runtime probe was performed for this recovery. Client/menu behavior remains unverified. Existing executables read the external corrected resource on a fresh launch. + +## Next check + +Open the normal walking screen and phone menu on a fresh launch, then inspect the new Player.log for mission initialization errors. Stabilize restored menus and saves before continuing gacha or event injection. Avoid simultaneous writers from another coding session. diff --git a/docs/ZCODE-HANDOFF.md b/docs/ZCODE-HANDOFF.md new file mode 100644 index 0000000..7c2ba72 --- /dev/null +++ b/docs/ZCODE-HANDOFF.md @@ -0,0 +1,549 @@ +# ส่งต่องาน GaC-hkrpg-go ให้ Zcode + +> Boss continuation: live logs confirm Tea Break take and preparation now pass, +> saved run is 1-6 revision545. Boss request was blocked by requiring nonzero +> Level/HardLevelGroup from an envelope that legitimately omits both. Corrected +> helper preserves proven wire zeros, validates formation and all saved enemy +> identities. See `currency-wars-route-factory.md` current Boss correction. + +> 2026-10-26 late correction: the current Client's Bonfire selected phase is 2, +> not FFGO's 1. Native `_UpdateHasSelected` proves phase>=2. Earlier 22:49 build +> still failed because it used phase1. New build includes read-only legacy phase +> projection from same-node effect evidence and idempotent matching choice sync. +> See `cw-bonfire-phase-contract.md`. No rewards or saves changed by research. + +> Latest CW deployment — 2026-10-26 22:49 Bangkok: Tea Break take-drop/heal, +> generated Boss/CampMonster layers and preparation/settlement integration are +> now built and deployed. This supersedes historical “take-drop unsupported”. +> Root Game/SDK visible consoles restarted; no Client take/Boss result observed +> yet. Existing run remains revision531,1-5,phase1 until user resumes; no save +> migration/reward was performed outside an actual request. See +> `currency-wars-ffgo-workflow-20261026.md` and `currency-wars-route-factory.md`. +> Pending: full augment effects, ordinary Monster/EliteBranch/nonenemy factories, +> finalization, companion synthesis, extra difficulty and weighted Orb offers. +> Both standard and shipping binaries compiled; no tests run. Maintained Lua +> scripts count is five, including ping_rainbow.lua; no probe is staged. + +> อ่านหัวข้อ **Latest continuation — 2026-10-26** ท้ายไฟล์ก่อน: +> สถานะกาชา/AA/CW และ dump FFGO ใหม่ในหัวข้อนั้นแทนสถานะเก่าด้านล่าง + +อัปเดต: 24 ตุลาคม 2026 (Asia/Bangkok) + +## 1. เป้าหมายและคำสั่งล่าสุดจากผู้ใช้ + +ผู้ใช้ต้องการให้แก้ปัญหาที่แจ้งทั้งหมด งานล่าสุดที่ยังค้างคือ: + +1. กาชา: เลือกตู้ตัวละครได้ โดยแต่ละตู้มีตัวเด่นหนึ่งตัว และสุ่มได้ตรงกับตัวที่แสดงบนตู้ +2. กิจกรรม: เพิ่มรายการในหน้ากิจกรรม และเข้าไปดู/เล่นบางส่วนได้ ไม่จำเป็นต้องจำลองครบ 100% +3. Stella Jump: มินิเกมกระโดดด้านข้าง ต้องเข้าเล่นและเลือกด่านที่ยังล็อกได้ +4. CW: แก้ปุ่มหน้าเข้าโหมดที่ทับกัน และออกจากโหมดแล้วโลกจอดำแต่ยังกดควบคุมได้ +5. แต้มเทคนิคก่อนเข้าสู้ Endgame: ต้องเริ่มเต็มตามเพดานของทีม ไม่ติดอยู่ที่ 5 +6. เมื่อส่วนข้างบนเรียบร้อย จึงกลับไปต่อ CW ให้เล่นต่อเนื่องได้ทั้งโหมด รวม Tea Break, Orb และคำสั่งเสก + +ผู้ใช้บอกแล้วว่า **ไม่ต้องเทส/ไม่ต้องให้ลองซ้ำ ให้ทำงานต่อ** อย่ารันหรือเพิ่ม tests และอย่าให้ผู้ใช้ลองใหม่ทีละ handler โดยไม่มีเหตุจำเป็น หากต้องตรวจ gameplay เพิ่มจริง ให้ระบุว่าขาดหลักฐานอะไร การ compile ผ่านไม่ใช่หลักฐานว่าเล่นได้ + +คำขอปัจจุบันคือทำเอกสารส่งต่อ ยังไม่ได้สั่ง commit/push รอบนี้ และยังไม่ได้ส่งข้อความหาแชต Zcode + +## 2. อ่านก่อนเริ่มทำงาน + +- อ่าน `AGENTS.md` ที่ root; กฎมีผลกับทุกงานด้านล่าง +- ใช้ checkout ปัจจุบันต่อ มีงานแก้และไฟล์ใหม่จำนวนมากจากหลายรอบ **ห้าม reset/clean/ทับงานเดิม** +- อ่าน `git status --short` และ diff ก่อนแก้ อย่าเหมารวมว่าทุก diff เป็นงานของรอบล่าสุด +- เอกสารเก่าบางส่วนเป็นบันทึกตามเวลาและมีสถานะที่ถูกแทนที่แล้ว เอกสารนี้สรุปสถานะล่าสุดเพื่อส่งต่อ โดยเฉพาะ Aha, กาชา, กิจกรรม และ Client revision +- งานก่อนหน้าหลายส่วนยังไม่ยืนยันกับ Client ต้องแยกคำว่า “มีโค้ด”, “build แล้ว”, “วางไฟล์แล้ว” และ “ผู้ใช้ยืนยันแล้ว” +- อย่ารีสตาร์ต Game server ขณะผู้ใช้สู้ ผู้ใช้เคยอนุญาต rebuild/restart แล้ว แต่ต้องตรวจสถานะรอบปัจจุบันก่อน +- อย่าสั่งปิดคอมตามข้อความเก่า ผู้ใช้กลับมาใช้งานต่อแล้ว + +### กฎสำคัญจาก repository + +- ค่าตั้งระบบต้องมาจาก `server.json` + `server.local.json`/environment ห้ามฝัง path/IP/port/เวอร์ชัน Client ของเครื่องนี้ใน source หรือ startup scripts +- Game ID, floor, group, buff, level, unlock และกฎต่าง ๆ ต้องมี resource/Client evidence รองรับ ห้ามเดาตัวเลขเพื่อให้ผ่าน +- Resolve CmdID ด้วยชื่อจากตาราง protocol ที่ระบุ revision ห้ามส่งหลายเลขเพื่อเดา callback +- ถ้า schema obfuscated ให้บันทึก tag/ชนิดข้อมูล/สิ่งที่ยืนยันได้และสิ่งที่ยังไม่ทราบ +- ตัวอ่าน persistent ห้ามเขียนกลับ เซฟจาก session เก่าห้ามทับ API update; เก็บ EX false ได้ และ sync เฉพาะ avatar/material ที่เปลี่ยน +- ห้ามโหลด/สแกนทั้ง assembly บน main thread ระหว่างเล่น ใช้ named types และจำกัดงานต่อ heartbeat/frame +- ทุก `.lua` ใน `scripts/` ถูกส่งเข้า Client อัตโนมัติ Temporary probes ต้องเก็บที่ `tools/` และถอดจาก `scripts/` เมื่อเสร็จ +- SDK/Game server ต้องมีคอนโซลกับ log ให้เห็น + +## 3. สถานะ build และ Client ณ จุดส่งต่อ + +### Executables + +อัปเดต 24 ต.ค. 2026 ~16:00: **rebuild + deploy + restart รอบสุดท้ายแล้ว** (root + `for ship`) ชุดนี้รวม: CW role compatibility, Endgame technique เริ่มเต็ม (`handlers_challenge_flow.go:287` Mp=MaxMp ยืนยันใน source), activity preview ขยาย 121 schedules, Srtool custom monsters ใน AA, MissionCompatibility 4 IDs, GetCurBattleInfo ไม่ null, และ probe scripts 3 ตัว ผู้ใช้ relogin กลับมาเองหลังแต่ละรอบ (ไม่ใช่การยืนยันระบบอื่น) **ยังไม่มี Client ยืนยันชุดแก้ใหม่นี้** + +### กลไก probe ที่ตรวจสอบแล้ว (สำคัญต่องานต่อ) + +- ไฟล์ใน `scripts/` ถูกแนบไปกับ **PlayerHeartBeat ทุกครั้ง** (`handlers_player.go`) และ Client **re-parse + execute ต่อ heartbeat จริง** (ยืนยัน 24 ต.ค. ~15:40: probe จิ๋วที่เขียนหลัง Client boot ก็รัน) — แต่ blob หนัก (เช่น probe ที่ฝัง ID หลายพันตัว ทำ 500 reflection calls/beat) จะกิน main thread จนโหลดฉากหมุนค้าง ใช้ chunk ไม่เกิน ~50/beat +- ตรวจ syntax ทุกสคริปต์ด้วย `pip install luaparser; ast.parse(...)` ก่อนวาง — สคริปต์พังทำ blob ทั้งก้อนเงียบหมด +- อ่าน output จาก Player.log ต้องใช้ `grep -a` (log มี byte ผสม binary) +- กับดัก xLua: `typeof(CS.RPG.Client[tn])` แบบ string index คืน lazy placeholder ไม่ใช่ type — เช็ค type ต้องใช้ `CS.System.Type.GetType('RPG.Client.Name, Assembly-CSharp')` +- ผล probe 24 ต.ค.: `FiveDimModule` มี `EnterChenLingGameBoy(UInt32,KFELGAIGHAP×4,GameEntity,Transform,Transform)`, `RequireChenLingGameBoyData(UInt32)` และ **ไม่มี** `_OnGetChenLingDataScRsp` (ChenLingGetData 9612 ถูกจัดการโดย module อื่น) `GridFightModule` มีแค่ `_ClearBonfireShownEventIds()` + `_OnGridFightHandlePendingActionScRsp` — ไม่มี bonfire page/ส่ง request ในตัว module และ `GlobalVars` ไม่มี field mission/gridfight — MissionModule/GridFightModule singleton ยังหา access path ไม่เจอ (รอบถัดไป: ไล่ static fields ของ MissionModule เอง หรือจับ page class จริงจาก stack trace ตอนผู้ใช้กด Tea Break) +- ชื่อ `GridFightBonfirePage`/`GridFightTeaBreakPage`/`GridFightBackstageTeaBreakPage` ฯลฯ **ไม่มีจริง** ใน Assembly-CSharp (ตรวจด้วย Type.GetType แล้ว) — ห้ามใช้ชื่อพวกนี้อ้างอีก +- Probe ทั้งหมดถอดจาก `scripts/` แล้วเมื่อจบรอบ สภาพปัจจุบันคือไฟล์ runtime ปกติ 5 ตัว + +### ชุดข้อมูล GLM handoff (24 ต.ค. เย็น) + +ผู้ใช้ส่ง `.runtime/glm-beta-handoff-20261024.zip` พร้อมเอกสาร `docs/GLM-BETA-DATA.md`, `GLM-BETA-EVENTS.md`, `GLM-GACHA-GUIDE.md` — ชุดข้อมูล event (181 panels/361 activities + derived index) และกาชา (6 แถวจริง, group table ว่าง 0 แถว, limited/group prefab ไม่มีใน installation) พร้อมกติกา: ห้ามเดา ID/สร้าง namespace ปลอม แยก provenance ทุกชั้น + +ผลงานเพิ่มเติมจากชุดนี้ (24 ต.ค. ค่ำ, ยังไม่แก้ production code): + +- ตรวจ schema ของ 4 event ที่มีชื่อ command ชัด: `PixAirGetData`(9812), `GetChenLingFesData`(9942), `StartFinalityBattleLevel`(10027), `BlindBoxGetData`(10052) — ทุกตัวต้องมี config table ของระบบตัวเองก่อนตอบได้ปลอดภัย (ตอบว่าง = ผิดกฎ) และ ChenLingFes อยู่ใน danger family ปัจจุบัน +- โพรบ TextID (ถอดออกแล้ว): `TextID` มี ctor `(String)` ที่**แฮช key เอง** และ `()`; field `hash` เซ็ตตรงผ่าน xLua ได้ (ยืนยัน hash ตรงเป้าครบ 10 panel) แต่ `ToString()` ไม่ resolve ข้อความ `LocalizationManager` เป็นแค่ language config; text-table lookup service ยังไม่พบ (รอบหน้า: enumerate TextID instance methods, หา UiText service ต่อ หรือแกะ DesignData pack) — localized ชื่อ event ใหม่ทั้ง 10 ยังไม่ได้ +- กับดัก xLua เพิ่มเติม: string→ตัวเลขใหญ่ถูก coerce ผ่าน double เสียค่า; byte-array SetValue ติด widening; C# property (เช่น `IsStatic`) อ่านแบบ field ไม่ใช่ call; state ของ probe ต้องเปลี่ยนชื่อ variable ทุกครั้งที่แก้เพื่อบังคับรอบใหม่ + +### กาชา sandbox draw — ใช้ได้จริงแล้วใน build 24 ต.ค. ~16:4x + +`GachaSandboxPolicy.json` เปิด `sandbox_draw_pool.source = "imported_roster"` และเพิ่ม `NoviceGacha_4001.prefab` เข้า verified prefabs (ผลตรวจ asset เช้านั้นยืนยัน novice = true อยู่แล้ว) `handlers_gacha.go` เพิ่มเส้นทาง `drawSandboxPool`: DoGacha บน banner ที่มี asset จริง (1001/4001) สุ่ม uniform จาก roster ใน freesr-data.json ณ ตอน draw (ไม่ฝังรายชื่อ) ตัดตัวที่ไม่มี first-rank Eidolon cost ออก แล้ว grant เป็น duplicate material ตาม first Eidolon cost ต่อ avatar (กลไก `GrantGachaDuplicate` เดิม) พร้อม PlayerSync ฝั่ง materials และ GachaItem ต่อครั้งที่สุ่ม + +**ขอบเขตจริง:** ทุกผลสุ่มเป็นตัวละครที่มีใน roster แล้วเสมอ (duplicate) — การได้ตัวใหม่ที่ยังไม่มี (first acquisition) ยังไม่รองรับและยังถูก reject นี่คือ sandbox pool เพื่อให้ตู้ที่มี asset กดได้จริง ไม่ใช่ official probability/price และไม่ใช่ตู้เลือกตัวละคร (ยังติด custom presentation ตาม GLM-GACHA-GUIDE กรณี B) ยังไม่มี Client ยืนยันการกดสุ่มจริง + +### ตู้ต่อตัวละคร — ผล RE รอบถอด handler (24 ต.ค. ดึก) + +ตามคำสั่ง "ถอด `_CmdGetGachaInfoScRsp`": ยืนยัน binary hash ตรง .54 แล้ว disassemble สอง RVA ที่ dumper ผูกกับ `GetGachaInfoScRsp` (`0xCFDC1C0` 1515 instructions, `0xCFD46B0` 107) ลง `battle_diagnostics/gacha-info-handler-{1,2}.asm` + +ผลที่ยืนยันเพิ่ม: +- **Concrete pool type จริง = `RPG.Client.StandardGachaPoolData`** (subclass ของ BaseGachaPoolData) — อ่านจาก live pool ด้วย `GetType().FullName` (แก้ตามข้อเสนอ: หยุดเดา BaseGachaPoolData ตรง ๆ) ไม่มี constructor ใด ๆ (รวม non-public) +- `DefaultGachaPoolData` ที่ bytecode หน้าอ้าง **ไม่ใช่ C# type ที่ xLua เห็น** (lazy placeholder) — อย่าใช้ชื่อนี้อ้างอีก +- เขียน `Row` บน derived pool ต้องใช้ reflection บน **BASE type**: `BaseGachaPoolData.GetField('k__BackingField', Instance|NonPublic)` (derived-type lookup เจอ nil) +- `_AddGachaPoolDataToGroupDict` โยน `InvalidCastException (BindingFlags)` ทั้งกับ Base และ Standard uninitialized instance — ยังไม่ระบุสาเหตุชั้นใน (การอ่าน asm ต้อง resolve metadata slot → type name ซึ่ง dumper static ไม่มี: slot `0x963af58` อยู่นอกช่วง method RVA ของ cs-type-infos) + +**ขั้นต่อไปที่เจาะจง (รอบ RE ใหม่):** +1. Resolve metadata slots ใน handler-1 ด้วย runtime symbolication (Frida อ่าน type-info จากโปรเซสจริง ตามแบบ asm capture เดิม) เพื่อชี้จุด: โรงงานสร้าง pool, จุด lookup config, และ branch ที่ข้าม ID ไม่รู้จัก +2. ทางเลือกขนาน: hook ที่ `0xCFDC1C0` ตอน Client ประมวลผล response จริง เพื่อดู arg/return ของ pool construction สด ๆ +3. เมื่อเจอ factory/projection แล้ว ออกแบบตามหลัก "config projection ก่อนประมวลผล response" (ตามข้อเสนอ) — Row ที่เติมทีหลังไม่มีทางช่วยเพราะ Client ข้าม ID ตั้งแต่ก่อนสร้าง pool (พิสูจน์แล้ว) + +**ตรวจ asset art:** `AvatarCutinImgPath = SpriteOutput/AvatarDrawCard/.png` เป็น path จริงจาก config แต่ **ยังไม่ได้ตรวจ existence รายตัว** — ต้องผ่าน AssetMgr.Exists probe ก่อนใช้เป็นภาพตู้ (ตามข้อเสนอ: path จาก config อย่างเดียวไม่พอ) + +ผลพิสูจน์สะสมจากเส้นทาง `_gacha_module` upvalue (หลักฐาน `gameplay-lua-upvalues.log`): module method surface ครบ (`GetSortedGachaPoolDatas/GetGachaPoolData(id)/_CmdGetGachaInfoScRsp/_AddGachaPoolDataToGroupDict/GetGachaNormalPoolID=1001`); pools สร้างจาก server response rows join local config (ID ไม่รู้จักถูกข้ามเงียบ — server ส่ง 3 ได้ pool 2 ไม่ crash); `GachaBasicInfoConfigRow()` สร้างใหม่ + เขียน field ได้ครบ; proto response class ไม่ถูก bridge เข้า xLua (baked Lua ส่ง request ผ่าน C# sender ทั้งหมด) + + +### UI regression 18 ต.ค. ช่วงเย็น — กู้ก่อนต่องานกาชา (24 ต.ค. 18:16) + +ผู้ใช้รายงาน: เมนูโทรศัพท์เหลือ 4 ปุ่ม (Navigation/Missions/Bookshelf/Account Settings) และแถบด้านบนตอนเดินหาย พร้อมแก้ข้อสรุป: (ก) `DefaultGachaPoolData.PrefabPath` ใน bytecode เป็นการเข้าถึง property ไม่พิสูจน์ชื่อ C# class (ข) InvalidCastException ไม่พิสูจน์ว่าขาด field — ต้องอ่านชนิดจริงกับ stack (ทำแล้วบางส่วน: concrete type จริงคือ `StandardGachaPoolData` จาก GetType() ไม่ใช่การเดาชื่อ) + +**การย้อนที่ทำแล้ว (bisect step 1):** ถอน ComicDessert (50142) ออกจาก ActivityPreviewPolicy ทั้ง panel entry และ allow_display_item_panels (จาก 163 schedules เหลือตามเดิม) เพราะเป็น delta ก่อนอาการรายงาน การ publish กิจกรรมที่ยังไม่มี handler คือการละเมิดกฎตัวเอง — ต้องมี data path ก่อน publish เสมอ + +**ตรวจแล้วว่าไม่ใช่:** โปรไฟล์ถูกต้อง (server.json player_uid=52022 ไม่มีการสลับ), mission data ส่งครบตามดีไซน์ (14779 sent / 5 excluded), ไม่มี incomplete object ค้างใน Client (ทุก insertion ของ probe ล้มเหลวก่อนถูกเก็บ — POOL_COUNT ยังเป็น 2 ก่อน/หลัง, SETTEST เขียนค่าเดิมใส่ตัวเอง, relogin หลัง deploy สร้าง module state ใหม่จาก server response แล้ว) + +**จุดตรวจถัดไป (ถ้าเมนูยังไม่กลับ):** bisect ถัดไปคือถอน mission exclusion 5 IDs (ยอมให้ NRE กลับมาชั่วคราวเพื่อพิสูจน์สาเหตุ) แล้วจึงตรวจ function unlock ที่อ้าง sub-mission เหล่านั้น — ห้ามสรุปแทนการทดสอบแบบมีจุดตรวจ + +**สถานะงานกาชา (รายงานตรง):** ตู้ใหม่ยังไม่ขึ้นในหน้า Warp, การสุ่มผ่าน UI ยังไม่ผ่าน, การออกหน้าไม่จอดำหลังเพิ่มตู้ยังไม่ยืนยัน — งาน pool creation พักตามลำดับใหม่จนกว่า UI เดิมจะกลับมา + +### สรุปสถานะงานกาชา ณ 24 ต.ค. ดึก + +| รายการ | โค้ด | build+deploy | Client ยืนยัน | +| --- | --- | --- | --- | +| Standard (1001) / Novice (4001) สุ่ม sandbox roster | ✅ | ✅ | รอผู้ใช้กด | +| Mapped per-character banners (mapping 94 → ต้อง regenerate แบบ ID คงที่ด้วย tools/build_gacha_banner_mapping.py ที่แก้ให้ preserve) | ✅ backend | ✅ (GetGachaInfo ปิด preview ไว้) | ❌ ค้างที่ pool creation | +| ตู้ limited ดั้งเดิม | ❌ | ❌ | asset ไม่มี 12 path | + +**หมายเหตุ mapping (ตามข้อเสนอแก้ไข):** `tools/build_gacha_banner_mapping.py` ปัจจุบัน regenerate ตามลำดับ roster แล้ว **ยังไม่ได้แก้ให้ preserve ID เดิม** — ต้องแก้ก่อนใช้จริง: อ่าน mapping เดิม คง (gacha_id → avatar_id) เดิม จัดสรรเฉพาะ avatar ใหม่ด้วย ID สูงสุด+1 และแยกรายงาน limited/standard/ขาด config (ปัจจุบัน 94 = ทุกตัวใน roster ที่มี Eidolon cost ไม่ได้แปลว่า limited ครบ) + +### สิ่งที่แก้แล้ว (deployed, มีหลักฐาน log) vs ข้อสันนิษฐาน + +**แก้แล้ว + หลักฐาน:** +- Mission NRE: `GetMissionDataScRsp` มี sub-mission ที่ Client .54 ไม่มี config ทำ `MainMissionData.AddSubMission` NRE ตอน sort — พบ 4 IDs (103380210, 104010267, 104010268, 104020209→216) ใส่ exclusion ครบใน `MissionCompatibility.json` พร้อม provenance หลัง relogin 15:09 ยังเจอตัวใหม่ (104020216) แสดงว่ายังไม่ครบจนกว่า probe จะไล่ครบ — **ยังไม่ประกาศว่าหาย** +- GetCurBattleInfo NRE: ตอบ `SceneBattleInfo{}` ว่างแต่ไม่ null ตามแบบ reference (Player.log NRE หายใน login 15:09) + +**มี source ใน build แต่ยังไม่มี Client ยืนยัน:** +- Srtool custom monsters ใน AA: `setChallengeBattleConfigWithLimit` รับมอนจาก tool เมื่อ lease active และ `BattleConfig.Monsters` ถูกแก้จากค่า default เท่านั้น เฉพาะ `BattleTypeAS` โหมดอื่น/เล่นปกติยังใช้มอน resource จริง กฎโหมด/รอบ/คะแนนไม่ถูกแตะ +- Activity preview ขยาย: policy เพิ่ม 11 family (RoleTrial 32 panels รวม) → **121 schedules** (จาก 12) ทุกตัวมี prefab+icon จริงและไม่มี DisplayItemList dependency ตรวจ conflict แล้วเป็นศูนย์ กลไก QuestState คือกลไกเดียวกับ 8 family ที่ผู้ใช้เห็นแล้ว +- CW role compatibility + projection, Endgame technique เต็มเพดาน, Aha, Stella handlers + +**ข้อสันนิษฐาน/ยังขาดหลักฐาน — ห้ามรายงานว่าเสร็จ:** +- CW Tea Break (EnterBonfire): โครงสร้าง reference (node types: None/Monster/CampMonster/EliteBranch/Boss/Supply) **ไม่มี TeaBreak node และไม่มี EnterBonfire handler เลย** จึงห้ามเดา pending arm ต้องรอ `[GAC_TEA_PROBE]` จาก Client boot ถัดไป +- Stella Jump toast: ยังไม่รู้ condition จริง, warning GroupProperty ยังไม่ใช่หลักฐาน — รอ `[GAC_STELLA_PROBE]` +- Aha ไม่มีอนิเมชั่น/Cyrene ไม่มีโดม: server รับ cast ถูกต้องแล้ว (log) แต่เป็น config ฝั่ง Client ของ custom avatar — ยังไม่มี probe; ต้องหา avatar ID ของ Aha/Cyrene จาก Client ก่อน (roster ฝั่ง server ไม่มีตัวนี้) +- ชุด sub-mission ที่หายยังไม่ครบจนกว่า `[GAC_MISSION_PROBE]` จะรายงาน END +- กาชา custom presentation: ยังไม่เริ่มทำรอบนี้ Standard อย่างเดียวยังไม่ใช่เสร็จ; อาการออกแล้วแมพดำยังเป็นเหตุ prefab หาย (index=-1) + +### Revision และ provenance + +Client ที่ตรวจ runtime ล่าสุดเป็น 4.6.54 และ `GameAssembly.dll` SHA-256: + +```text +4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6 +``` + +CW base capture/เซฟเดิมมาจาก 4.6.53: + +```text +c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144 +``` + +ห้ามเปลี่ยน label ให้ทั้ง catalog กลายเป็น .54 เพราะ recapture แค่บางตาราง และห้ามใช้ native RVA/MethodHandle ของ .53 กับ .54 หรือใช้ pointer เก่าหลังปิดเปิดเกม + +`server.local.json` ยังมี launcher client_path ชี้ installation เก่า ขณะที่โปรเซสจริงล่าสุดเป็น installation .54 ให้ตรวจ path ของโปรเซสจริงใหม่ก่อนผูกเครื่องมือ อย่าเดาจากชื่อโฟลเดอร์ และอย่า commit path เครื่องนี้ + +`battle_diagnostics/` และ `.runtime/` ถูก ignore หลักฐานส่วนมากอยู่เฉพาะเครื่อง ถ้าจะส่งให้ Zcode บนอีกเครื่องต้องแนบไฟล์หลักฐานที่อ้างถึงด้วย ไม่ใช่ส่งแต่ Git diff + +### Cleanup ที่ทำแล้ว + +- ถอด temporary probes จาก `scripts/` แล้ว +- Frida session ที่ใช้ดึง GachaMainPage ปิด/detach แล้ว ไม่ได้ kill เกม +- รายการ script ณ จุดส่งต่อ: `client_unstuck_request.lua`, `damage_analyst_live.lua`, `freecam.lua`, `hide_ui.lua`, `navigation_profiles.lua` +- `client_unstuck_request.lua` เป็นไฟล์ runtime ที่ถูก ignore อย่าสับสนว่าเป็น probe ที่ควรถอดเอง + +## 4. งานด่วน A — CW ปุ่มทับและออกแล้วจอดำ + +### หลักฐานที่พบ + +Player.log มี NRE ตามลำดับ: + +```text +GridFightRoleConfig..ctor(GridFightRoleConfigRow) +GridFightModule.GetRoleConfig +GridFightRole.set_ID / Team.AddRole / Team.Initialize +GridFightGameSession._SyncInternal +GridFightModule._OnGridFightGetDataScRsp +GridFightGuideBook.get_CompletedChapterCnt +GridFightS2EntrancePage._refresh_big_guide_book_btn / _refresh_all_status +UITransition GridFightDivisionStartPage -> GridFightS2EntrancePage +``` + +เซฟเดิมมี role `151102` (avatar 1511) แต่ flat role table ปัจจุบันไม่มี ID นี้ จาก 140 แถวที่อ่านครบ พบ family ใหม่ และ Client handbook default ของ avatar นี้คือ `151112` ไม่ใช่การเลือกจากเลข ID ต่ำสุด + +การ init ที่ล้มกลางทางเป็นเหตุที่มีหลักฐานรองรับสำหรับหน้า CW ผิดสถานะ ส่วนความสัมพันธ์กับจอดำหลังออก **ยังเป็นข้อสันนิษฐานที่ต้องแยกตรวจ** อย่ารายงานว่าจอดำหายแล้วจากแค่แก้ role + +### โค้ดที่ทำแล้ว แต่ยังไม่ได้ deploy ล่าสุด + +- `internal/common/currency_wars_role_compatibility.go` +- เชื่อม loader ใน `currency_wars_catalog.go`, `currency_wars_roles.go`, `currency_wars_variants.go` +- `internal/gameserver/currency_wars_role_projection.go` +- ใช้ projection ใน `currency_wars_save.go` และส่ง CW response/notify บางกลุ่มใน `session.go` +- `resources/CurrencyWarsCurrentRoles.json`: flat role table ปัจจุบัน 140 แถว +- `resources/CurrencyWarsRoleCompatibility.json`: overlay มี provenance แยกจาก base catalog +- `tools/build_cw_role_compatibility.py`: สร้าง overlay จาก capture + +Projection แปลงเฉพาะ field ที่ยืนยันว่าเป็น role reference ได้แก่ `role_id`, `CDEAABODKCP.id`, `JJOBHGFOGHP.BGFFICLCKHE` ใน nested messages ไม่เปลี่ยน matching integers ทั้งก้อน และข้าม protobuf maps + +รักษา UID/star/equipment/position/run progress เดิม ตัวอ่านเซฟเปลี่ยนเฉพาะ detached message ไม่เขียน persistent กลับ การเซฟเกิดในเส้นทาง transaction ปกติ + +### ต้องทำต่อ + +- [x] ตรวจทุกเส้นทาง role reference (audit 24 ต.ค.): ไม่มี map ใดใน proto บรรจุ role-reference message แม้ transitive จึงข้าม maps ได้ปลอดภัย `GridFightEnterBattleStageScRsp`, `GridFightEndBattleStageNotify`, `GridFightGetArchiveScRsp` เข้าถึง role refs ผ่าน SceneBattleInfo/BHBAILHMCOI แต่เดิมไม่อยู่ใน Send switch ของ projection แล้วเพิ่มแล้ว (no-op ตอนนี้เพราะ in-memory run ถูก project ตอนอ่านเซฟแล้ว) `GridFightGetArchiveScRsp` ยังไม่มี handler ส่งจริง เพิ่มไว้เป็นเกราะ ข้อสรุปใน `session.go` Send switch +- [ ] ตรวจ scope เปิดใช้ overlay ให้สัมพันธ์กับ target Client/provenance จริง อย่าใช้เพียงเปลี่ยนข้อความเวอร์ชัน +- [ ] ปัจจุบัน replacement star variants มี `SaleQuoteKnown:false` โค้ดปัจจุบัน reject การขายถูกต้องแล้ว (`CapturedSalePrice` คืน error ไม่เดาราคา) ต้อง capture ราคาขายจาก Client จึงจะปลดขายตัวนี้ได้ ห้ามเติมราคาเดา +- [x] Rebuild Game/SDK แล้ว deploy 14:07 ขณะไม่มีโปรเซสใดรัน (ดู §3) — ยังรอ Client ยืนยัน +- [ ] ถ้ายังมี GuideBook NRE หลัง role ถูกต้อง ให้ตรวจ book/chapter config แยก ไม่ซ่อนปุ่มเพื่อกลบ exception +- [ ] ตรวจเส้นทาง exit และ UI transition/camera restoration จากต้นเหตุ อย่าเปิด/ปิดกล้องหรือ Canvas ทุกตัวแบบ blanket +- [ ] `GridFightQuitLeaveGamePlay` ปัจจุบันเพียงตั้ง `currencyWarsOpen=false` และตอบกลับ โดยรักษา run ให้ Resume; อย่าเพิ่ม abandon run/teleport โดยไม่มี callback evidence + +หลักฐาน: `cw54-current-defaults.log`, `cw54-role-replacement.log`, `cw54-role-constructor.asm`, `cw54-get-role.asm`, `cw54-role-flat-get.asm`, `cw54-guide-count.asm`, `cw54-guide-sync.asm` ใน `battle_diagnostics/` + +### Tea Break ที่จบรอบไม่ได้ — สถานะ 24 ต.ค. บ่าย + +ผู้ใช้ติดที่ Tea Break (route 2801 chapter 1 section 5) ตั้งแต่ rev 512: ack round-begin 22 → return-prep 23 → preparing แล้ว run ไม่มี pending แต่ยืนอยู่ที่โหนด Tea Break กด Continue แล้ว Client ส่ง `GridFightEnterBonfireCsReq` ×3 (14:19) server ตอบ retcode 0 ตาม schema (retcode-only) แต่ไม่มีอะไรตามมา Client จึง retry แล้วผู้ใช้กดออก + +สิ่งที่ capture ได้จาก reference (`.runtime/march_cw_teabreak_capture.go`, `march_cw_next_after_teabreak.go`, ไฟล์ `march-cw-teabreak*`/`march-cw-next-*` ใน battle_diagnostics): + +- Queue ของ pending เป็น cursor ต่อ run ที่เพิ่มทีละ action (16→17, 17→18, 19→20) และ Client รับค่า jump ไม่ต่อเนื่องได้ (เคย 16→20 ผ่าน) +- Entry ใน CurrencyWarsNodeTransitions หมายถึง transition FROM section N TO N+1: next_pending_wire = round-begin ของ N+1, round_pending_wire = pending หลัง ack round-begin ที่ N+1 ปัจจุบันมี 1-4 ห้ามตีความว่าครอบคลุม route +- section 6 (1-6) มี round-begin 19 → ack → return-prep 20 → preparing แต่ยังไม่มี level wire (IMPNAHBCADN) ของ 6 ใน sync ที่ capture ได้ จึงยังสร้าง entry 5→6 ไม่ได้ + +**ข้อจำกัดสำคัญ:** โค้ดอ้างอิง March7 (`.runtime/march-source`) **ไม่มี handler ของ GridFightEnterBonfire เลย** และมี state machine เต็มรูป (GridFightSession Phase/PrepareCurrentNode/AdvanceToNextNode/GetNextNode จาก route config) แต่ไม่ implement Tea Break การ capture จาก reference จึงผลิต choice arm ของ Tea Break ไม่ได้ สิ่งที่ขาดคือหลักฐานว่า Client คาดหวัง pending arm ใดหลัง EnterBonfire ต้องโพรบฝั่ง Client (bounded, named types) หรือหา reference ที่ implement ห้องนี้ **ห้ามเดา arm/เติม pending มั่ว** + +งานต่อไปที่ชัด: โพรบ Client หา expected arm หลัง EnterBonfire; ศึกษา GridFightSession ของ March7 เป็นแบบแผน implement node advance จริง (แทน captured wires) เพื่อจบ route; หรือ reset บัญชีอ้างอิง (admin gameplay/reset) แล้ว replay ทั้ง route เพื่อ capture level wire ของ section ถัด ๆ ไป + +## 5. งานด่วน B — กาชาเลือกตัวละครได้จริง + +### สถานะจริง + +- ผู้ใช้เห็นเฉพาะ Stellar Warp/Standard จึงยังไม่ตรงคำขอ +- `AssetMgr.Exists` ยืนยัน Standard และ Novice prefab มีจริง แต่ limited character/lightcone ทั้ง 4 path ใน captured table ไม่มีจริง +- การส่ง Seele limited prefab เคยทำให้ `UIPrefabLoader` ArgumentNullException ระหว่าง `GachaMainPage._create_pools_panel` แล้วกลับแมพดำ +- ปัจจุบัน policy เปิดแค่ Standard สำหรับดูหน้า ส่วน `DoGacha` ของ Standard ตอบ NOT_SUPPORT นี่เป็น mitigation ไม่ใช่ฟีเจอร์เสร็จ +- Captured GachaBasicInfo มี 6 แถวและ character candidates 2 แถว ไม่ใช่ตู้ครบทุกตัวละคร +- ห้ามนำ limited paths กลับมา enable เพียงเพราะมีแถวในตาราง + +### ไฟล์หลัก + +- `internal/common/gacha_catalog.go` +- `internal/gameserver/handlers_gacha.go` +- `resources/GachaSandboxPolicy.json` +- `resources/PreviewGameplayCatalog.json` +- หลักฐาน `battle_diagnostics/gacha-asset-exists-20261024.log` + +Backend grant ที่เตรียมไว้ให้ตัวเด่นของ banner และ duplicate material ตาม first Eidolon cost จริง โดย merge latest import ใต้ shared lock ไม่เปลี่ยน rank/EX/Traces และยัง reject first acquisition ของ avatar ที่ไม่มีใน imported roster ต้องทำ acquisition ให้ครบถ้าจะรองรับกรณีนั้น + +### จุดที่เพิ่งอ่านได้ เพื่อไม่ต้องเริ่มใหม่ + +Client ใช้ **Luau** (`xluau.dll`) ไม่ใช่ LuaJIT: + +- `string.dump` ถูกถอด ไม่มี `jit.util` +- มี `debug.getupvalue`, `debug.getinfo`, `debug.info` และ `package.loaders` +- ใช้ `package.loaders[3]('Ui.Gacha.GachaMainPage')` อ่าน loader closure ได้ **โดยไม่ execute closure และไม่แทน package.loaded** +- Passive hook ที่ `xluaL_loadbuffer` ได้ bytecode ของ `@BakedLua/Ui/Gacha/GachaMainPage.bytes` ขนาด 23630 bytes +- REA evidence: `ev_57f147cb094af2060be82f5110e378d25ff2179f0390c56348368a855e7658b8` +- เก็บ `gacha-main-page.luau`, `gacha-main-page.hex`, `gacha-main-page.json` ใน `battle_diagnostics/` +- `tools/inspect_luau_v4.py` อ่าน Luau v4/type1 และ export prototypes/constants/locals โดยไม่ execute bytecode +- Layout reference คือ upstream Luau `VM/src/lvmload.cpp` และ `Common/include/Luau/Bytecode.h`; สำเนาอยู่ใน diagnostics การ parse สำเร็จไม่เท่ากับถอดความ behavior ทุก opcode แล้ว + +`_create_pools_panel` prototype 26 / line 308 อ่าน group data ผ่าน `GetSortedGachaGroupDatas` แล้วใช้ `DefaultGachaPoolData.PrefabPath`, `sync_load_prefab`, `_gachaType2tabItem`, `create_panel`, `set_tab_data` มีแยก single-pool/group path + +`BaseGachaPoolData.Row` มี getter/setter และ `GachaModule.GetGachaPoolData` / `GetSortedGachaPoolDatas` มีจริง แต่ **ยังไม่มี production patch เปลี่ยน prefab/สร้างตู้เพิ่ม** การใช้ Standard prefab แทน limited ยังไม่ได้พิสูจน์ binder/controller compatibility อย่าเปลี่ยนแบบสุ่ม + +Loaded presentation modules มี `DefaultGachaAvatarPanel`, `DefaultGachaUpAvatarPanel`, `DefaultGachaPoolTabItem` โดย UpAvatarPanel มี `_init_imgs`, `_setup_up_avatar_img`, `setup_view` อาจเป็นทางต่อ generic presentation ที่ต้องอ่านเพิ่ม + +### ต้องทำต่อ + +- [ ] หาวิธีแสดงตู้ตามตัวละครด้วย asset ที่มีจริง และ bind controller ได้ถูกต้อง +- [ ] ถ้าทำ custom presentation ต้องมีตัวละคร/ชื่อ/ภาพตรงกับผล draw และแยกจากการอ้างว่า official prefab ใช้งานได้ +- [ ] ให้ catalog ที่ UI แสดงกับ catalog ที่ backend รับ draw เป็นชุดเดียวกัน +- [ ] รองรับ 1/10 draws ตาม policy และ duplicate/material persistence โดยไม่ทำลาย progression +- [ ] ตรวจ acquisition ถ้า avatar ยังไม่มีใน import +- [ ] แก้ entry/exit ให้คืนโลกปกติ ไม่ทิ้ง pending transition +- [x] แก้ note ใน GachaSandboxPolicy แล้ว (24 ต.ค.): asset_verification_note ปัจจุบันระบุว่าตรวจครบ 6 path แล้ว ตามหลักฐาน `gacha-asset-exists-20261024.log` + +## 6. งานด่วน C — กิจกรรมกลับมาและเข้าไปดูได้ + +### สถานะ + +ผู้ใช้เห็นแค่ CW กับ Anomaly Arbitration กิจกรรมที่เคยเพิ่มหายไป เพราะปิด policy หลังพบ ActiveActivity invalid item และ RaidCollection missing reward icon + +ล่าสุดอ่าน `AssetMgr.Exists` ครบ 290 panel/icon paths โดยไม่ load asset แล้ว เก็บผลใน `resources/PreviewAssetAvailability.json` ใช้ source/provenance ปัจจุบัน + +### ทำแล้วใน source / ยังไม่ deploy + +- `ActivityPreviewPolicy.json` เพิ่ม 8 prefab families ที่มี asset หน้าและ TabIcon และไม่มี explicit DisplayItemList dependency +- `activity_preview.go` ตรวจ availability ก่อนประกาศ schedule +- กลุ่ม `QuestState` ใช้ handlers quest/mission เดิม +- เพิ่ม `GetMultipleDropInfo` typed response มี panel entries และ zero counters เป็น preview ไม่ใช่สิทธิ์ double/triple drop ที่แต่งขึ้น +- ActiveActivity/RaidCollection ที่มี error ยังไม่เปิดกลับ +- `GetFiveDimMiniGameData` ยังตอบ empty list ไม่ใช่การทำมินิเกมสำเร็จ + +### ต้องทำต่อ + +- [x] ตรวจ module-ID/panel-ID association และ dedup (24 ต.ค.): พบ conflict จริงตามข้อสันนิษฐานเดิม โมดูล `1002101` ถูกอ้างใน 14 กิจกรรมรีรัน ข้าม panel 10021 และ 10113 แต่ทั้งคู่เป็น prefab เดียวกัน (`QuestFarmMultipleDropPanel`) และ handler เดียวกัน จึงเผยแพร่รายการเดียวถูกต้องอยู่แล้ว `activity_preview.go` ถูกแก้จาก first-match เงียบ ๆ เป็น: รวม candidate panels ต่อโมดูล เรียง deterministic แล้ว error ทันทีถ้า panels ใด handler/prefab ไม่ตรงกัน ผลลัพธ์กับข้อมูลปัจจุบันเหมือนเดิม 12 schedules (10 drop + 2 quest) fallback `PanelID==0 -> ActivityID` มีใช้จริงเฉพาะกิจกรรม 10054 และสอดคล้อง pattern module = panelID*100+1 ของทุกแถว explicit +- [ ] เลือกกิจกรรมที่มี dependencies ครบและ handler entry/data จริง เพิ่มเป็นรายระบบ ไม่ publish ทุกแถวพร้อม success ว่าง +- [ ] ตรวจเวลาตาม activity schedule config ไม่ hardcode deployment time (ตอนนี้ schedules ใช้ `cfg.ActivitySchedule` ร่วมกับ Endgame แล้ว แต่ยังไม่ได้ตรวจว่าตรง schedule config ของกิจกรรมแต่ละตัว) +- [ ] แยก preview/reward/gameplay support ในเอกสารให้ชัด +- [x] Rebuild/deploy ทั้งคู่จาก source ล่าสุดแล้ว 14:07 (ดู §3) — README ที่บอก previews withheld ยังต้องอัปเดตเมื่อมี Client ยืนยัน +- [ ] ยังไม่มี Client confirmation ว่ากิจกรรม 8 families ชุดนี้แสดง/เข้าได้จริง + +## 7. งานด่วน D — Stella Jump ด้านข้าง + +### สิ่งที่ผู้ใช้เห็น + +หน้าเดิน Starfroster ตรง gateway รูปโดนัท/เครื่องเล่น กด F Investigate แล้วขึ้น **There's still more to do…** ยังไม่เข้าเกม การมี GetCase handler จึงยังไม่แก้จุดเข้าที่ถูกปฏิเสธอยู่ก่อน + +### ส่วนที่มีแล้ว + +- `resources/StellaJumpConfig.json`: ChenLingGameBoyCaseRow ปัจจุบันครบ 16 แถว มี group/instance/entity/challenge/cheat quest ตาม capture +- `internal/common/stella_jump.go`: separate persistent records; read-only reads และ targeted locked writes +- `handlers_stella_jump.go`: GetData, Finish, Ranking, Settings และ cheat requests ที่ยังเป็น obfuscated names +- response มี case payload ไม่ null และ expose challenge packs โดยไม่เก็บเวลาปลอมเพื่อปลดล็อก +- Handler path และข้อมูล GameBoy ไม่ได้พิสูจน์ว่า gateway ในภาพใช้ GameBoy entry เดียวกัน ต้องตรวจ actual caller + +### ต้องทำต่อ + +- [ ] ระบุ condition/scene task ที่ gateway ตรวจแล้วแสดง toast จากข้อมูลจริง อย่า complete ทุก mission/ตั้งทุก condition เป็น true — **audit จาก gameserver.log/server_debug.log 24 ต.ค.:** การ Investigate ที่ขึ้น toast คือ prop entity 1035 และ 1012 ด้วย interact_id2=1100 (server ตอบ real prop state=1 ถูกต้องแล้ว) มีรอบหนึ่ง Client เปิด UI GameBoy เองโดยไม่ผ่าน InteractProp (SetClientPaused + `GetChenLingGameBoyDataCsReq` case 16) แล้วปิดเอง ไม่มี request เริ่มเกมตามมา toast จึงเป็นเงื่อนไขฝั่ง Client ที่ยังไม่ถูก capture **สิ่งที่ขาด:** โครงสร้าง `ChenLingGetDataScRsp` (CmdID 9612) ที่มีข้อมูลจริง — Client ส่ง `ChenLingGetDataCsReq` ทุกครั้งโหลด floor และ server ปล่อย drop (danger family "ChenLing" + ไม่มี typed handler, log ขึ้น "Unknown command ID: 9612") GameBoy อยู่ในระบบ ChenLing Fes และ `BDOEDOEBFAJ` เป็น Fes board state เต็มรูป (stage/hp/entity_list/pending) การตอบว่างเคยทำ NRE จึงต้องมี capture จากเซิร์ฟเวอร์ทางการหรือ runtime ก่อน ห้ามเดาโครงสร้าง ที่ `.runtime/march-source/.../sc-packet-handlers.json` มีแค่ RVA ของ client callbacks ไม่ใช่ตัวอย่างข้อมูล +- [ ] Player.log 24 ต.ค. มี warning `[FiveDim] Group 12 的GroupProperty LG_110001__262_MapIconState_Auto 不存在!` ตอน CartographyFiveDim init จาก GetSceneMapInfoScRsp — เป็น warning ฝั่ง config ของ FiveDim instance 110001 (Stella Jump case 1) ยังไม่พิสูจน์ว่าเกี่ยวกับทางเข้าล็อคโดยตรง ต้องแยกตรวจก่อนอ้าง +- [ ] แยก ordinary FiveDim entrance/transfer/minigame กับ ChenLingGameBoy ให้ถูก ไม่เอา Parkour/รถแข่งมาปน +- [ ] อ่าน FiveDim enter/transfer/leave/update schema consumers และต่อ state/position callbacks ให้ครบสำหรับทางเข้าเป้าหมาย +- [ ] ปลด stage/challenge ตาม case/config ที่ตรง Client และเปิดเข้าเล่นได้จริง +- [ ] บันทึกผล/เวลา/challenge จริง รักษาเซฟ CW และส่วนอื่น +- [ ] cheat response extra boolean ยังมี label ไม่ยืนยัน ต้องเก็บข้อจำกัดไว้ + +### ข้อมูลสำหรับวิเคราะห์ต่อ + +`FiveDimModule` ปัจจุบันมี `RequestEnterGame`, `RequestTransfer`, `RequestLeaveGame`, `RequireChenLingGameBoyData`, `EnterChenLingGameBoy`, `FinishFiveDimMiniGame`, `_OnGetFiveDimMiniGameDataScRsp` และ `_GameConfig` + +`GetFiveDimGameDataScRsp` callback ที่อ่าน native ล่าสุด sync jump-energy scalar ไม่ได้ sync nested state ทุก field จึงอย่าเพิ่ม nested payload โดยหวังว่าจะปลดทางเข้าเอง + +`_GameConfig` มี Scroll/Player/Camera/Physics/Avatar/Level/Audio/MiniGameCollection/Achievement/Misc config การ Serialize PlayerConfig ทั้งก้อนเคยติด self-referencing vector.normalized loop ต้องอ่านเฉพาะ primitive/named fields + +Starfroster floor 20571001 มี scene entry Town/Story แยกกัน `res.json.scene_config` เป็น list ใช้ key `entryID` ไม่ใช่ map/entry_id มี props 151 ตัวต่อ entry เก็บ Prop ID/JsonPath เดิมไว้ใน `battle_diagnostics/prop-source-rows.json` แต่ capture นี้เป็น revision เก่า ต้องตรวจความตรงรุ่น + +**ห้ามใช้ broad LoadRtLevelFloorInfo probe เดิมเพื่อไล่ graph ใหม่** เคยทำ Client crash แล้ว ใช้ข้อมูลที่โหลดอยู่หรือ exact named config ที่รู้วิธีอ่านปลอดภัย + +เครื่องมือที่เตรียม: `tools/preview_minigame_metadata.lua`, `preview_gameboy_metadata.lua`, `fivedim_config_metadata.lua`, `fivedim_minigame_config.lua` และ logs `preview-gameboy-current.log`, `preview-minigame-current.log`, `gameplay-regression-metadata.log` + +## 8. แต้มเทคนิค Endgame และ Aha's Help + +### แต้มเทคนิค — แก้ source แล้ว ยังไม่ยืนยัน/ยังไม่ deploy ล่าสุด + +- ผู้ใช้หมายถึง **แต้มเทคนิคปุ่ม E ตอนเดินก่อนสู้** ไม่ใช่ skill points ใน Battle +- `lineupInfoFromAvatars` สร้าง Endgame lineup เริ่ม Mp ตาม MaxMp +- `Session.techniqueLineup` ใช้ MaxMp เป็นค่าเริ่ม session เมื่อมี ChallengeRun; overworld และหักแต้มต่อ cast ยังคงเดิม +- เพดานทีมที่ตรวจจาก resource เป็น 7 ขณะที่ผู้ใช้บอก 8 ไม่ได้เพิ่มเลข 8 ตายตัว ต้องรองรับเพดานที่ rule/team คำนวณได้จริง +- ไฟล์หลัก `handlers_challenge.go`, `technique.go` + +### Aha — ผู้ใช้ยืนยันแล้วว่าแสดงใน combat + +- Frontend envelope เคยอ่าน `/api/persistent` ผิด field; แก้เป็น `persistent` และโหลด selector แยกจาก character cache +- เลือก LV 1–3, explicit off และ FreeSR fallback ได้ +- custom Corruption battle เดิมไม่เข้า branch ที่ผูก ChallengeStageID; เปลี่ยนให้ตรวจ Corruption buffs ใน outgoing battle จริง +- บันทึกระดับที่เลือกมีผลตอนสร้าง Battle ถัดไป ไม่แก้ battle ที่กำลังเล่น +- ผู้ใช้ยืนยัน “ขึ้นแล้ว” ห้ามรายงานว่ายังรอเลือก LV ตามเอกสารเก่า +- หลักฐาน `AHA_HELP ... selected=3 ... support=3034013 level=3` และ `battle_diagnostics/aha-help-web-20261024.png` +- ไฟล์ `aha_help.go` ทั้ง common/gameserver, SDK `api_aha_help.go`, `AhaHelpConfig.json` และ GaC-srtool ฝั่ง Save Manager + +## 9. หลังแก้ regressions: ทำ CW ต่อให้ครบ + +### ผู้ใช้ยืนยันผ่านมาก่อนแล้ว (เฉพาะเส้นทางที่ลอง) + +- Standard เข้าเกม/ซื้อหนึ่งตัว/จัดตัว/เริ่ม Battle ห้องแรก +- ซื้อ EXP และขายตัวที่ไม่ได้ติดอุปกรณ์ +- รวมตัว 3 ตัวอัปดาว และติดตามอุปกรณ์ +- Plot Armor เลือก Protagonist และ Battle หลังเลือก +- Encounter combat/settlement ไปห้อง 1-5 + +การยืนยันเหล่านี้เกิดก่อนพบ Client revision เปลี่ยน จึงต้องรักษาเส้นทางเดิมและระวัง schema/config ต่างรุ่น ไม่ใช่หลักฐานว่าห้องทุกแบบและ Overclock ครบแล้ว + +### ยังต้องทำ + +- [ ] Backstage Tea Break: choices/effects/queue acknowledgement/next room +- [ ] Automatic Orb drops ตาม killed instance/node/talent rule จริง ไม่ให้ Orb ทุก Battle แบบตายตัว +- [ ] เปิด Orb และ resolve reward ด้วยตาราง combination/basic bonus ที่ตรงรุ่น +- [ ] Consumable effects/stack/use/consume quantity ให้ครบ +- [ ] Forge/equipment crafting/dressing และ returned equipment state ให้ตรง Client +- [ ] Supply, Encounter alternate branches, Spotlight, Trial, Boss และ transition ต่อห้องสำหรับ Standard/Overclock +- [ ] Completion/settlement/rank/weekly/season rewards ตามข้อมูลจริง ไม่แต่งคะแนน +- [ ] Pending-action oneof ทุก arm ที่ผู้ใช้เข้าได้ ต้อง mutation + notify + ack ถูกต้อง ไม่ตอบ null success เพื่อดับ spinner +- [ ] เติม commands/handlers ที่ยังไม่รองรับจาก inventory โดยดู semantics ไม่ใช่นับ registration ว่าครบแล้ว +- [ ] Resume/leave/abandon/unstuck ไม่ทำ run หาย ไม่หัก/แจกซ้ำเมื่อ resend และไม่ทำ stale session ทับ API command + +### คำสั่งเสกที่มีแล้ว + +```text +/cw status +/cw list role|equip|orb|consumable|forge +/cw gold +/cw hp +/cw exp +/cw equip|orb|consumable|forge [count] +/cw role [count] +``` + +ผ่าน SDK command queue, ผูก UID/run และ apply ใน Preparation เท่านั้น คิวกับ snapshot ใช้ revision/atomic persistence สิ่งที่ยังไม่มีจริงอย่าแสดงว่าคำสั่งรองรับครบแล้ว แยกการ “เสกเข้ากระเป๋า” จาก “กดใช้แล้ว effect สำเร็จ” + +### เอกสารและ reference + +- `docs/currency-wars-coverage.md`: request registration และ pending arms ที่ยัง missing เป็น snapshot ไม่ใช่หลักฐาน gameplay +- `docs/currency-wars-6900-audit.md`: 6900 คือ RET_GRID_FIGHT_CONF_MISS ไม่ใช่ CmdID; อ่านส่วน Subsequent recovery ที่แก้ blocker เก่าแล้ว +- `docs/currency-wars-investigation.md` +- Reference ที่ผู้ใช้ให้คือ March7 PS ใต้ `E:\beta hsr\server` (ตำแหน่งเฉพาะเครื่องสำหรับงานวิเคราะห์ ไม่ใส่ลง source/startup) +- มี isolated reference/captures ใต้ `.runtime/` เทียบได้ แต่ห้าม promote ทุกค่าจาก reference เก่าเป็น Client ปัจจุบัน +- Orb data: current capture 529 Orb, 18 consumable, 11 Forge, 478 combination; เทียบ reference ได้ตรงแค่บางส่วน (347/478 combination, 276/529 Orb มี direct basic-row match) + +## 10. Backlog เก่าที่ต้อง audit สถานะ ห้ามบอกว่าเสร็จหมดจากความทรงจำ + +รายการนี้เก็บจากคำขอในแชต มีบางส่วนเคยแก้แล้ว แต่ไม่ครบทุกเรื่องที่มีผลยืนยันล่าสุด ให้ตรวจ code/evidence ก่อนเปิดงานซ้ำ: + +- [ ] ทุก Endgame: เซฟทีม/คะแนน/เลือกห้องต่อโดยไม่เริ่มห้องแรกทุกครั้ง และ PF/Starward/MoC/AA/AS ไม่ค้างเปลี่ยนห้อง +- [ ] Traces แสดงระดับใน Client และ GaC-Srtool ตั้ง/เซฟได้ +- [ ] บัฟ/แต้มเทคนิคจากตัวละครก่อนสู้, อาหารเติมแต้มและ auto-use +- [ ] Acheron E ฆ่ามอนข้างทางได้ตามกฎ, debuff technique ไม่ fail to use ability +- [ ] มอนข้างทางใช้ monster/stage/version ตรงตัวที่ตีหรือถูกตี Custom monster เฉพาะเมื่อใช้ Srtool ตามคำขอ +- [ ] prop ข้างทางที่ตีแตกให้แต้ม/บัฟตามชนิดจริง +- [ ] animation/effect E ของ Aha และโดม Cyrene ผู้ใช้บอกว่าไม่เกี่ยวกับ Freecam +- [ ] Freecam หันด้วยเมาส์ได้ แต่ขณะต่อสู้ mouse click ไม่ trigger attack/เปลี่ยนสกิล; Q/E ใน Battle ไม่ขยับกล้องขึ้นลง ใช้ PageUp/PageDown แทน และคืน input เมื่อปิด +- [ ] Hide UI: ซ่อน UI ตัวละคร/หลอดอัลติ/action bar ใน Battle และ character/EX Eidolon UI แต่ไม่ซ่อนภาพ EX/ทำพื้นหลังเบลอ; **ต้องรักษาชื่อเซิร์ฟเวอร์ ชื่อ PS และ UID** +- [ ] Preset ทีม 20 slots/การนำทีมที่เคยจัดมาใช้ และการเซฟหลังสลับ +- [ ] UID 52010, ชื่อ login AFN -> GaCy และบอกผู้ใช้ว่าแก้ตรงไหน; ห้าม hardcode user identity เพิ่มเพื่อกลบ config +- [ ] ของแต่งตัวผู้บุกเบิกต้องปลดตามตาราง +- [ ] run.bat/startup เช็ค Go/requirements ดาวน์โหลดตาม config, SDK/Game/launcher ใช้ค่าเดียวกัน และ consoles มองเห็น +- [ ] ก้อน Eidolon ยังคงอยู่ในกระเป๋าแม้ E6/EX เต็มแล้ว ตามคำยืนยันผู้ใช้ +- [ ] Unstuck ใน GaC-Srtool ใช้ได้โดยไม่ต้องออกเข้าเกม ไม่ลบ run/progression +- [ ] Story/Town ในหน้า M: ผู้ใช้ยืนยันแล้วว่าแยกปลายทางและภาพฉากได้ รักษา `navigation_profiles.lua` กับ entry override; ยังต้อง audit เสาวาร์ป/ห้องภายใน/รถไฟ Starfroster ตามข้อร้องเรียนเก่า +- [ ] มีคำขอ git ในอดีต แต่รอบส่งต่อนี้ยังมีงานค้างจำนวนมากและไม่ได้อนุญาตให้ commit/push งานปัจจุบันโดยอัตโนมัติ + +## 11. วิธีรับงานต่อที่แนะนำ + +1. อ่าน AGENTS, git diff และเอกสารนี้ ตรวจ process/module/config ที่เป็นปัจจุบันอีกครั้ง +2. แยก source-ready fixes จาก deployed fixes อย่าขอให้ผู้ใช้ลอง build ที่ยังไม่ได้วาง +3. ทำกาชา/กิจกรรม/Stella กับ regressions CW ตาม sections 4–8 โดยใช้หลักฐานที่เก็บแล้ว +4. ถ้าใช้ REA หรือ runtime probe ให้ตรวจ identity ใหม่ ใช้เฉพาะ target ที่ระบุ จำกัดงานต่อ frame และ cleanup เสมอ +5. Rebuild ทั้ง Game และ SDK หลังแก้ source/resource ครั้งสุดท้าย สำรองและ deploy ตอนนอก Battle เมื่อจำเป็น (build/deploy รอบ 14:07 24 ต.ค. ทำแล้ว แต่ถ้าแก้ต่อต้อง rebuild ใหม่) +6. ไม่รัน tests/ไม่วนขอ gameplay retry ตามคำสั่งล่าสุด รายงานสิ่งที่ยังไม่มี Client confirmation ตรง ๆ +7. อัปเดตเอกสารสถานะให้ตามจริง แล้วจึงเดิน CW progression ต่อ ไม่บอก “ครบทุก handler/ทุกกิจกรรม” จากการมี success response หรือ build ผ่าน + +### ขอบเขตที่ยังไม่ได้เสร็จ ณ จุดส่งต่อ + +**ตู้ตัวละครที่เลือกสุ่มได้, Stella Jump gateway, การเล่นกิจกรรมทุกตัวที่ต้องการ, CW exit black-screen confirmation และ CW เต็มโหมด ยังไม่เสร็จ** + +CW role compatibility, event preview families, Endgame technique initialization และงาน audit รอบ 24 ต.ค. (projection ชื่อเพิ่มเติม, activity loader, policy note) รวมอยู่ใน build/deploy 14:07 แล้ว แต่ **ไม่มี gameplay confirmation สำหรับทั้งชุด** เซิร์ฟเวอร์ยังไม่ได้สตาร์ตหลัง deploy ไม่ควรเริ่มใหม่จากศูนย์หรืออ้างว่าวางครบแล้ว +# Latest continuation — 2026-10-26 + +### Ping colors and CW Go follow-up + +Ping colors is now user-confirmed: all bars and real latency digits animate, +colors match, and digit changes do not flicker. `scripts/ping_rainbow.lua` +uses white-RGB/original-alpha masks for the single-sprite signal icon and +colors the native TextGenerator glyph mesh at the canvas boundary. No rich +text is written over the native ping value. Current `10ms` capture contains +16 populated vertices, without an extra unused quad. See `docs/ping-colors.md`. + +CW Go's current captured panel exists (71101) but is PreGuide2. Its actual +ActivityPanelConditionRow requires FinishMainMission8047206; the old initial +mission response omitted it. Common Go consequently chooses GuideGoto6417 +instead of ActivityGoto6418. `resources/CurrencyWarsActivityConditions.json` +retains that exact current row/provenance; `LoadCurrencyWarsGuideMissions` +validates it and adds only its declared guide missions to the shared mission +unlock view. Expected GetMissionData main count:149 instead of148. It does not +finish all2205 imported main missions or force Lua state. See +`docs/cw-book-entry-recovery.md`. + +The combined standard/shipping Game+SDK build passed and both root servers +were restarted after this fix. All temporary probes were removed from scripts/ +and the passive Frida capture session was detached. Fresh GetMissionData +logged149 main missions; actual EnterScene resolved CW entry2032202, and the +user confirmed teleport works after relogin. This closes the reported silent +Go entry failure, not the still-incomplete gameplay inside the CW run. + +This section supersedes older deployment/feature status below; historical +investigation details are retained. + +- The overworld loading recovery was confirmed by the user. A separate AA + entry failure then reported `CreateNPCMonster Invalid ID 4015011`. +- The updated FFGO reference was inspected offline, never executed. Complete + CmdID/protobuf/function/direct-call/resource dumps are under + `battle_diagnostics/ffgo-20261026/`; reproducible tools and interpretation are + documented in `docs/FFGO-CW-REFERENCE-20261026.md` and + `docs/ffgo-cw-resource-reference.md`. +- AA scene correction now uses an explicit provenance-backed 44-row resource. + Peak 204 maps to NPC 4015010 / entry 3013701 / group 10. All 44 NPCs also + occur in the reference's extracted NPC Excel table. The last eight scene + placements still require supplementary data or reject before EnterScene. + Actual current Client acceptance remains unverified until the new build is + exercised. See `docs/aa-scene-npc-recovery.md`. +- Gacha: enabled native registration of 71 eligible five-star banners is + confirmed by Client logs. The user confirmed the prototype art/panel fix. + Latest 80/10 pity, three four-star portraits and atomic reward persistence + were deployed previously but not Client-confirmed after that change. The + old OFF gate in historical notes no longer describes current policy. See + the current-status section of `docs/GACHA-NATIVE-ADAPTER.md`. +- ComicDessert GetData preview now has a real four-cycle/fifteen-level catalog + and sends initial cycle 1. Starting/finishing cooking remains unfinished. +- CW reference extraction closes the old missing-table gap: 72 tables, + including bonus pools, basic bonuses and bonfire options. Reference custom + recipes are labelled implementation evidence, not original Client JSON. + The current route's Tea Break can be a PetPal override of a static Monster + node; never replace the active run with the reference route/player save. +- Active source work in this continuation: Tea Break creation/selection and + persistent PetPalStarDown effect; scoped real Orb payout and current packet + translation. Pending-next-node construction still needs a broader port; + existing captured transitions cover only the first four nodes. Do not claim + CW complete from menu success or a successful compile. +- Still carry forward: Stella Jump portal/condition unlock, missing activity + gameplay and previews, CW remaining route/reward/effect progression and exit + black-screen confirmation, Aha/Cyrene presentation issues, and earlier UI/ + cosmetics/interaction reports where no Client confirmation exists. + +Deployment: `run.ps1 -Action build` completed for standard and self-contained +Game/SDK binaries, then `run.ps1 -Action servers` started both root servers in +visible consoles. A private predeployment checkpoint retains saves, local +settings and previous root executables. No research probe was staged; scripts/ +contains only the four maintained scripts. No tests were run. The new AA scene, +Tea Break and Orb paths have not yet been confirmed in the Client. + +Integrated Tea Break scope: resource-backed menu and option selection, phase-1 +sync, atomic saved PetPalStarDown rule and one-time future-layer star reduction. +Heal and take-drop/advance remain explicit unsupported operations. Integrated +Orb scope: current named handler, atomic removal/rewards, native notification +and grouped context for supported fixed/declarative recipes. Ordinary Orb100's +weighted bonus pool and general effect hooks remain unfinished. See +`docs/currency-wars-ffgo-workflow-20261026.md` and +`docs/currency-wars-ffgo-orbs.md` before claiming broader completion. + diff --git a/docs/aa-round-sync.md b/docs/aa-round-sync.md new file mode 100644 index 0000000..840bfe9 --- /dev/null +++ b/docs/aa-round-sync.md @@ -0,0 +1,32 @@ +# AA round selection sync — 2026-10-25 + +## Confirmed path and defect + +The Srtool AA dropdown posts `peak_group_id` to `/api/monster-settings/aa-round`; the SDK writes `persistent.aa_round_selection`. A read-only check returned group 2 with the configured Client version. The running Game executable contains the selection reader. + +Before this change, the selected group affected only `GetChallengePeakDataScRsp.CurrentPeakGroupId` when the Client happened to request AA data. Saving from Srtool did not invalidate cached Client module state. `StartChallengePeak` continues to consume the actual requested PeakID; it does not consult the UI selector and must not silently substitute a different room. + +The protocol's `ChallengePeakGroupDataUpdateScNotify` contains one `ChallengePeakGroup`, with no current-group field. Sending that notification is not proof that the selected current group changed. No numeric command alias or unsolicited response was added. + +## Source changes + +- `internal/gameserver/aa_round_sync.go` builds a resource-validated desired group and selected-group/version digest. The default comes from the same loaded Peak groups as the data handler. It reads selection without writing saves. +- `aa_round_sync.lua` uses the actual current Client's `ChallengePeakModule.SendGetChallengePeakDataRequest()` and observes `CurrentPeakGroupID`. It sends one outstanding request and waits for the native value to match. It does not fabricate a response, alter private state, close a page, change scene, start a Battle, or remap a PeakID. +- Server gating defers while `CURRENT_BATTLE`, `ChallengeRun`, or CW is active; the Client also checks `BattleGamePhase`. Existing native login initialization (`CurrentPeakGroupID == 0`) is allowed to finish without issuing a duplicate request. +- `GetChallengePeakData` retains the existing Peak run's group until that run is left. It logs the actual selected group, number of groups and active-run state. Missing Peak resources now produce a typed error rather than a fabricated group/room list. +- Server README and Thai/English Srtool copy describe deferred native refresh rather than claiming that reopening the page necessarily causes a data request. + +## Evidence and validation boundaries + +The current process metadata in Player.log, `[GAC_AA_ROUND_META]`, reports: + +``` +UInt32 get_CurrentPeakGroupID() +Void SendGetChallengePeakDataRequest() +``` + +This evidence establishes the named native API, not its successful execution or UI refresh. Runtime pointers in the log are process-local and are not shipped or reused. + +`go build ./internal/gameserver` and `node --check ../GaC-srtool/js/i18n.js` passed. No tests, save mutations, executable replacement, restart or Lua staging were performed for this source change. Root must wire `loadAARoundRefreshLua(s)` into heartbeat, build/deploy, and confirm the real request/reply plus `[GAC_AA_ROUND_SYNC] applied` and the displayed round before reporting Client success. + +There is intentionally no timeout retry while an in-flight request cannot be distinguished from an unchanged result. A changed native group proves completion; new desired choices can then be requested. Reconnect/module replacement resets local request tracking. All activity schedules and resource room/boss definitions remain intact. diff --git a/docs/aa-scene-npc-recovery.md b/docs/aa-scene-npc-recovery.md new file mode 100644 index 0000000..e79560f --- /dev/null +++ b/docs/aa-scene-npc-recovery.md @@ -0,0 +1,74 @@ +# AA scene NPC recovery + +## Observed loading failure + +The current Client reports `CreateNPCMonster Invalid ID 4015011` while entering +Peak 204 from selected group 2. The source resource row supplies entrance +3013501, maze group 8, event 30502021 and NPC 4015011. This is a scene actor +creation failure, separate from refreshing the selected AA group. + +`loadPeakResources` in `handlers_challenge.go` copies `NpcMonsterIDList` into +`PeakStageData.MonsterID`. `loadChallengeScene` in +`handlers_challenge_scene.go` forwards that value directly into +`SceneNpcMonsterInfo.MonsterId`; no current Client config lookup validates it. +The battle wave monster is a different identifier namespace and cannot be +converted into an adventure NPC by truncating digits. + +## Evidence boundary + +The existing `WorldBattleConfig.json` NPC catalog is a partial capture of 153 +NPCs, from assembly SHA-256 +`c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144`. +An offline comparison finds that 42 of the 44 Peak rows refer to at least one +NPC outside that partial catalog. Absence from it is therefore insufficient +to declare an AA room invalid. Using it as a mandatory allow-list would disable +most AA rooms, including ones not demonstrated to fail. + +The reported Client error establishes that this particular NPC failed in the +actual session. It does not establish a replacement NPC or prove that all +other Peak rows are invalid. No replacement ID, arbitrary fallback monster, +save migration was justified by the old partial catalog alone. + +## Reference-backed correction prepared + +The FFGO update inspected on 2026-10-26 contains an explicit +`challenge_peak_extra_data` JSON object at binary file offset `0x114c212`, +decoded length 9101 bytes, binary SHA-256 +`235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`. +Its Peak 204 mapping is NPC **4015010**, entrance **3013701**, maze group +**10**. These values come from the reference object, not ID arithmetic. +The full reference extraction is retained in +`battle_diagnostics/ffgo-20261026/challenge_peak_extra_data.json`. + +`resources/ChallengePeakSceneOverrides.json` retains all 44 explicit mappings +and their provenance. `peak_scene_overrides.go` applies only the scene NPC, +entrance and maze group after loading canonical Peak group memberships. +Battle event IDs, waves, buffs, targets and saved/active runs are unchanged. +The loader validates provenance, duplicate/unknown IDs, group membership and +merged resource scene placements. A missing mapping or unusable placement +is stored as a configuration error. `StartChallengePeak` rejects it before +creating battle/run state or sending EnterScene; unknown Peak IDs also now +return the existing typed challenge-not-exist error instead of empty success. + +The first 36 reference mappings have monster placements in raw `res.json`. +The last eight (Peak 1001–1104) require supplementary placements or further +capture; no placement is invented when the merged loader cannot supply one. +The resource is labeled reference evidence, not a captured Client table. +`go build ./internal/gameserver` succeeded; no tests were run, no deployment +was performed by this subtask, and actual Client NPC/scene acceptance remains +unverified. + +## Next bounded capture + +`tools/aa_npc_config_metadata.lua` is prepared outside `scripts/` and passes +Lua syntax parsing. It inspects only six named candidate types, at eight +members per heartbeat, to locate `NPCManager.CreateNPCMonster` and the +NPC/Peak flat config entry points. Missing candidate types are logged rather +than treated as proof that config is absent. It does not enumerate assembly +types, call getters, create actors, load scene graphs or send gameplay packets. + +The Client process was not open during this offline inspection, so this probe +has not been staged or run. Once current native/config lookup evidence is +available, capture the relevant Peak row and each referenced NPC config to +verify or supersede the reference mapping. Client battle/scene success remains +unverified. diff --git a/docs/comic-dessert-current-contract.md b/docs/comic-dessert-current-contract.md new file mode 100644 index 0000000..6e51346 --- /dev/null +++ b/docs/comic-dessert-current-contract.md @@ -0,0 +1,64 @@ +# ComicDessert current Client contract + +## Proven data and preview entry + +`ComicDessertCatalog.json` retains all four Cycle rows and fifteen Level rows +captured from the current Client assembly. The catalog preserves 64-bit TextID +hashes, requires a complete two-table capture, rejects duplicate IDs, and checks +that each cycle references existing levels. It includes the ordinary cycle +levels and the Greedy Feast and Long Tail configuration paths; those paths alone +do not prove that their gameplay is implemented. + +Current assembly SHA256: +`4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6`. + +The native GetData consumer at `0xd4dbc60` reads response offset `+0x3c` into +`_SetUpProgress` (`0xd4dbcf0`). The protobuf getter for `FNIAAEAFGDE` reads that +same offset (`0x1fc3dcd0`). Progress synchronization at `0x16c8dab0` writes the +cycle ID at `+0x18`; the actual `CurrentCycleId` getter (`0x16c8d980`) reads +`+0x18`. `HNOCFELOAFJ` supplies the completed-level collection. + +The root implementation responds to GetData with the resource's first cycle, +without fabricated completed levels, upgrades, currency or rewards. This is +preview state, not a working cooking-run implementation. A zero cycle ID led to +the Date dialog view-model failure observed before this response existed. + +## Request family + +These are the actual current command-table names, paired from the live concrete +NetworkService method signatures. Numeric IDs are documentation of the current +table, not aliases to register in source. + +| Operation | Request | Response | Current IDs | +|---|---|---|---| +| GetData | `MGCJKEEOPEC` | `LPLCFFGANFC` | 10215 → 10208 | +| StartLevel | `MECNLNGKDHA` | `CIDKLLMAIGP` | 10204 → 10220 | +| FinishLevel | `CBMLONMBLNE` | `PEFBGOANFHP` | 10216 → 10209 | +| UpgradeDevice | `DONCOCHMEBC` | `NLJOCMODADF` | 10207 → 10206 | +| ChangeCycle | `JLBJPLGJBFF` | `NBIBDLLLCLH` | 10213 → 10212 | +| StartLongTail | `FHJMEFOOOAB` | `PIGILFCALBA` | 10211 → 10218 | +| FinishLongTail | `CGHKNHAJBGL` | `CMHFBLDNPGB` | 10219 → 10210 | + +The concrete NetworkService has `OFHMHPKEECI(UInt32)` returning +`IPromise` and `b__2_0(CIDKLLMAIGP)`. +`StartLevel` request carries `level_id` at tag 4. Its response additionally has +`HOGEMAHFFEF` (uint32, tag 1) and `NLMEEEKBPKO` (string, tag 2), plus retcode at +tag 12. The purpose and required values of the uint/string have **not** been +proven. A retcode-only success must not be advertised as working gameplay. + +## Next bounded capture + +`tools/comic_level_start_metadata.lua` is inactive outside `scripts/`. It reads +the already constructed NetworkService and LevelStartFlowService, plus the +actual Start response type obtained from the NetworkService return type. It +records at most eight methods/properties per non-battle heartbeat and invokes +no gameplay or scene methods. + +After capture, resolve current-process MethodHandles through record `+8`, verify +the resulting entry lies inside the current GameAssembly, and disassemble the +StartLevel consumer and response getters. Handles from an exited Client cannot +be reused. Map the string/uint consumers before implementing a successful Start +response or persistent cooking run. + +No Start/Finish/Upgrade/ChangeCycle/LongTail implementation, deployment, runtime +draw, save mutation or gameplay confirmation was performed by the entry audit. diff --git a/docs/currency-wars-6900-audit.md b/docs/currency-wars-6900-audit.md new file mode 100644 index 0000000..5d768f3 --- /dev/null +++ b/docs/currency-wars-6900-audit.md @@ -0,0 +1,60 @@ +# Currency Wars `RET_GRID_FIGHT_CONF_MISS` audit + +In the current checked-in protocol, `RET_GRID_FIGHT_CONF_MISS` is retcode `6900`. It is a configuration/state failure response, not a command ID. This audit covers all current source references found by searching `internal/gameserver` on 2026-10-22. It does not claim that every CW flow is implemented or Client-verified. + +## Client provenance correction (2026-10-22) + +The target Client is the Beta 4.6.53 OS installation explicitly identified by the user. Its root `GameAssembly.dll` SHA-256 is `c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144`, matching the active-CW capture/resource identity. An earlier static lookup against the D: main-game installation was the wrong source and is excluded from this audit. The saved `[GAC_CW_ACTIVE_TABLE_ROWS]` runtime capture is the Beta run at route 2801 / section 4 / stage 70000006. The live process path was verified with `QueryFullProcessImageName` and resolves to the user's Beta installation. The attempted `GridFightStageRouteConfigExcelTable.GetData` and `GridFightEnemyDifficultyLvConfigExcelTable.GetData` lookups returned an empty row and `No such type`, respectively; this only shows those exact Lua type/API lookups did not resolve the expected data in this Beta runtime, not that the underlying game data is absent. + +| Handler | Condition returning 6900 | Current status | +| --- | --- | --- | +| `GridFightStartGamePlay` — `handlers_currency_wars.go` | CW catalog or saved snapshot cannot be read, or initial run data cannot be built | Fails closed; log includes the setup failure. | +| `GridFightHandlePendingActionScRsp` — `currency_wars_entry_choice.go` | Pending oneof is unsupported, does not match the active queue, or action processing fails | Known missing pending arms remain incomplete; current handler logs unsupported arms and validation errors. | +| `GridFightEnterBattleStage` — `currency_wars_battle.go` | Preparation state or battle envelope is invalid, or the selected node has no matching captured enemy recipe | This is the user's current failure. The branch is now selected from the saved one-based choice, but stage 70000006 / penalties 91113 and 91114 have no captured recipes. | +| `GridFightBuyExp` — `currency_wars_experience.go` | Required `GridFight_LevelUpExp` catalog rule is missing or outside the supported range | Returns 6900; catalog rule is required for a safe purchase. | +| `GridFightSpotLightEnter` — `currency_wars_spotlight.go` | Preparation/config is missing or a Spotlight offer cannot be built | Returns 6900 with a diagnostic log. | +| `GridFightRecycleRole` — `currency_wars_transactions.go` | No captured sale quote exists for the selected role/star | Returns 6900 and logs the missing quote. | +| `GridFightBuyGoods` — `currency_wars_transactions.go` | Party property scales disagree or the offered role/star variant is absent from captured resources | Returns 6900; no transaction is committed. | +| `PVEBattleResult` CW settlement — `handlers_battle.go` | Settlement validation or persistence fails | Returns 6900 and logs the settlement error. | +| `GridFightQuitSettle` — `currency_wars_quit.go` | Saving the abandoned-run state fails | Returns 6900 and logs the save error. | + +## Encounter blocker + +The active saved run is Standard Gambit, route 2801, chapter 1, section 4, stage 70000006. A read-only capture from the running Client 4.6.53 confirms stage level 90, HardLevelGroup 1, StageExcel EliteGroup 0, and base/current/all difficulty deltas 0. The two branch records are: + +| Branch | Option | Penalty | Wave | Monsters as `id:role_star` | +| --- | ---: | --- | --- | --- | +| 1 (selected) | 11303 | 91113 | 1 | `200203009:1, 200201014:1, 202302016:2, 200201014:1, 201201013:1, 200201014:1, 200201014:1, 201201013:1, 200203009:1, 201301103:3, 200201014:1, 201302014:2` | +| 2 | 11304 | 91114 | 1 | `201201013:1, 200203009:1, 200201014:1, 200201014:1, 201302014:2, 201201013:1, 201201013:1, 200201014:1, 200203009:1, 200201014:1, 201302014:3, 201301103:2` | + +The only saved recipe in `CurrencyWarsEnemyPlans.json` still covers stage 70000003 / penalty 92013. The builder correctly resolves the chosen branch and fails closed when its recipe is absent. The new capture does not prove the `SceneMonsterWaveParam.EliteGroup` or `CPHIINKIDEB` formation value: StageExcel has no monster list, and the saved branch message contains wave ID, monsters, stars, option and penalty but no formation-wave ID. The direct Lua API lookup for the expected formation/elite tables was unavailable. Therefore stage 70000006 is still not safe to add to the recipe resource; no battle values were guessed. + +### Subsequent Encounter entry recovery + +The preceding missing-recipe finding describes the state before recovery. A typed MemoryPack BattlePlan was subsequently recovered from the isolated reference run for route 2801 / chapter 1 / section 4 / penalty 91114: elite group 1802, difficulty 0, one wave, formation 5, twelve monsters. The reference BuildEncounterBattlePlan chooses elite group and formation at node scope, independently of option quality. This supports the same wave parameters for saved option 91113; its penalty and monsters remain those from the player's selected branch. + +The matching Beta formation consumer at RVA f0c9d50 calls the flat getter at RVA 1e33bb30 with the selector carried by SceneMonsterWaveParam tag 6. A bounded read on a managed handbook callback verified row 5: MaxTeammateCount 5, empty ParamList/Ability, ClearPreviousAbility false. Evidence: ev_ac0ddf4c7244887fe99edcde069382c076d0f5f96f887bbc44a4bb34b2ab85fc. The active StageRow was captured again for level 90 / hard group 1. These values are now resource entries with per-entry provenance; no game-value literals were added to the battle builder. The saved branch supplies every monster ID and star. + +The staged Game server compiled and was copied to the root, hash-checked, and restarted visibly. The user confirmed Encounter combat now works. Own logs confirm stage 70000006 Battle 357 entered and PVEBattleResult arrived; settlement then rejected the absent next-node recipe, producing a blank Client result popup. + +The selected penalty row 91113 was subsequently read from the active Beta node. The isolated reference was moved from Encounter 1-4 to the next ordered route node 1-5 and RoundBegin was captured. Only its next layer/action were imported, with queue counters rebased after existing captured actions using sequential-counter semantics. The selected-penalty settlement fix and these resource rows were built/deployed. The user's team/balances are preserved. Settlement/room-1-5 Client verification is pending; alternate option 91114 settlement and subsequent combat recipes remain incomplete. This is not complete CW progression. + +`tools/cw_active_encounter_capture.lua` contains the bounded read-only capture used for the current encounter. `tools/cw_active_wave_table_methods.lua` inspects only the named 4.6.53 wave and elite table types. Both are kept in `tools/`; temporary copies were removed from `scripts/` after collection. The probe reads reflected fields observed from this Client and depends on the current client schema; it is not a general Client-independent decoder. + +The other 6900 sites are also fail-closed guards. Returning success while omitting their purchase, settlement or saved-state changes would leave the Client and server inconsistent. Unimplemented CW commands and pending arms are inventoried separately in `currency-wars-coverage.md`. + + +## Combined handler and grant continuation + +- User confirmed selected Encounter Battle and settlement proceed to room 1-5; this supersedes the earlier pending Client check for that path only. +- Added Tea Break entry response, equipment dressing/crafting and battle equipment forwarding. Compilation is confirmed; Client gameplay for these additions remains unverified. +- Current Client `_ProcessUpdateInfo` dispatch evidence establishes equipment Add/Update/Remove as LMOLELDIKMA/DDBKEOPKPFI/PENGEDECBNF. Supply now sends Add instead of Remove. +- `/cw role`, `/cw equip`, `/cw exp` and read-only catalog commands use captured resources and the existing Preparation transaction path. Additive grants and queue acknowledgement share the snapshot CAS/atomic file replacement. No adventure inventory is replaced. +- Reference `GridFightSession.AddKilledMonsterOrbs` awards configured Orb drops for verified killed monster instances in Monster nodes; Boss talent Orb rewards have a separate path. This is evidence for comparison, not proof that the current Beta always gives an Orb after every fight. Current Go automatic Orb grant/opening is still missing, as are current-revision Orb/Consumable/Forge catalog captures. +- Dispatcher inventory now contains 22 registration names, including equipment Forge use. Neither this count nor compilation proves a complete CW run; see the missing request/action arms in `currency-wars-coverage.md`. + +Current-revision reward captures now include 529 Orb, 18 consumable, 11 Forge and +478 combination rows. Grant commands are implemented; opening Orbs and applying +consumable effects remain incomplete. Offline comparison found only 347 matching +combination rows in the older reference, so its entire bonus table cannot be +treated as current Client data. diff --git a/docs/currency-wars-coverage.md b/docs/currency-wars-coverage.md new file mode 100644 index 0000000..11c6821 --- /dev/null +++ b/docs/currency-wars-coverage.md @@ -0,0 +1,87 @@ +# CW dispatcher and source comparison + +Generated by `tools/inventory_cw.py` from the current revision table and source registrations. +**Registration is not gameplay verification.** A registered pending dispatcher still needs each action implemented. +Reference source names are evidence for comparison only; they are not protocol aliases. + +| Current request | Go registration | Reference same name | +| --- | --- | --- | +| `GridFightBuyExpCsReq` | `internal/gameserver/currency_wars_experience.go:47` (handle) | Yes | +| `GridFightBuyGoodsCsReq` | `internal/gameserver/currency_wars_transactions.go:127` (handleNamed) | Yes | +| `GridFightDestroyWeeklyRewardCsReq` | Missing | Not matched | +| `GridFightEnterBattleStageCsReq` | `internal/gameserver/currency_wars_battle.go:210` (handle) | Yes | +| `GridFightEnterBonfireCsReq` | `internal/gameserver/currency_wars_bonfire.go:13` (handle) | Not matched | +| `GridFightEquipCraftCsReq` | `internal/gameserver/currency_wars_craft.go:120` (handle) | Yes | +| `GridFightEquipDressCsReq` | `internal/gameserver/currency_wars_equipment.go:113` (handle) | Yes | +| `GridFightFinishTutorialCsReq` | Missing | Yes | +| `GridFightGetArchiveCsReq` | Missing | Not matched | +| `GridFightGetDataCsReq` | `internal/gameserver/handlers_currency_wars.go:181` (handle) | Yes | +| `GridFightHandleBonfireHealHpCsReq` | `internal/gameserver/currency_wars_entry_choice.go:131` (handleNamed) | Not matched | +| `GridFightLockShopCsReq` | `internal/gameserver/currency_wars_transactions.go:255` (handle) | Not matched | +| `GridFightPermanentTalentEnableCsReq` | Missing | Not matched | +| `GridFightPermanentTalentResetCsReq` | Missing | Not matched | +| `GridFightQuitLeaveGamePlayCsReq` | `internal/gameserver/handlers_currency_wars.go:161` (handle) | Yes | +| `GridFightQuitSettleCsReq` | `internal/gameserver/currency_wars_quit.go:119` (handle) | Yes | +| `GridFightRecycleItemCsReq` | Missing | Not matched | +| `GridFightRecycleRoleCsReq` | `internal/gameserver/currency_wars_transactions.go:71` (handle) | Yes | +| `GridFightRefreshShopCsReq` | `internal/gameserver/currency_wars_transactions.go:275` (handle) | Yes | +| `GridFightResumeGamePlayCsReq` | `internal/gameserver/handlers_currency_wars.go:102` (handle) | Yes | +| `GridFightSeasonTalentEnableCsReq` | Missing | Not matched | +| `GridFightSeasonTalentResetCsReq` | Missing | Not matched | +| `GridFightSpotLightEnterCsReq` | `internal/gameserver/currency_wars_spotlight.go:169` (handle) | Not matched | +| `GridFightSpotLightReplaceCsReq` | Missing | Not matched | +| `GridFightStartGamePlayCsReq` | `internal/gameserver/handlers_currency_wars.go:45` (handle) | Yes | +| `GridFightSummonProjectionCsReq` | Missing | Not matched | +| `GridFightTakeWeeklyRewardCsReq` | Missing | Not matched | +| `GridFightTraitUpdateCsReq` | Missing | Not matched | +| `GridFightUpdateEliteBranchSelectCsReq` | `internal/gameserver/currency_wars_encounter.go:44` (handle) | Yes | +| `GridFightUpdateEquipTrackCsReq` | `internal/gameserver/currency_wars_tracking.go:19` (handle) | Not matched | +| `GridFightUpdateEquipTrackPriorityCsReq` | `internal/gameserver/currency_wars_tracking.go:83` (handle) | Not matched | +| `GridFightUpdatePosCsReq` | `internal/gameserver/currency_wars_preparation.go:273` (handle) | Yes | +| `GridFightUpdateSpotLightTrackCsReq` | Missing | Not matched | +| `GridFightUseForgeCsReq` | `internal/gameserver/currency_wars_forge.go:101` (handle) | Yes | + +## Pending action arms + +“Referenced” means the dispatcher inspects the field; it does not prove the entire action/effect works. + +| Schema arm | Dispatcher | +| --- | --- | +| `MFFCPLBNHCF` | Referenced | +| `OKPMJOCEKBC` | Missing | +| `JACEOLDFKDD` | Missing | +| `DKDFDGJGIHM` | Referenced | +| `HOKCPPPLJIO` | Missing | +| `IOHJGOENAPF` | Missing | +| `LFIDNOAECMN` | Missing | +| `DCPHLHNLNKF` | Missing | +| `KEBDKGKEJDD` | Missing | +| `BAKAKODKECM` | Referenced | +| `IACBCOBMGJB` | Missing | +| `JLPOPEAJHMF` | Missing | +| `FIKAGBAEOAP` | Referenced | +| `PLJBPFHFAHL` | Missing | +| `HHNHGJMOGDD` | Missing | +| `MHBGJCOIMPA` | Missing | +| `DAJDBBEPMMA` | Missing | +| `NNDGEJFLGGF` | Referenced | +| `EMMPHLKJAJN` | Missing | +| `KDGAJCHDFOK` | Missing | +| `GEPGMIEPBMB` | Missing | +| `PKHJLKNGCGH` | Missing | +| `IBCHMBNIPLK` | Referenced | +| `DPKFJEEJABC` | Missing | +| `EJHBPFJOBKB` | Missing | +| `LAJGNNBOLDG` | Missing | +| `JMJOAOCJAAG` | Missing | +| `HHNPEHMBDKD` | Missing | +| `PFEBKFJOGKO` | Missing | +| `IIDBLCFAAPC` | Missing | +| `LGNPHHBGKFH` | Referenced | +| `FKEAHOKGDPO` | Missing | +| `DPBFGOMKGMB` | Missing | +| `ENMJFJGIOEM` | Missing | +| `FMHPKKDEHNC` | Missing | +| `NFBJINKLLLK` | Missing | +| `CFDIPFKBFJB` | Missing | +| `PBEJCFAJLGE` | Missing | diff --git a/docs/currency-wars-current-consumer-notes.md b/docs/currency-wars-current-consumer-notes.md new file mode 100644 index 0000000..7daddd1 --- /dev/null +++ b/docs/currency-wars-current-consumer-notes.md @@ -0,0 +1,114 @@ +# CW current consumer evidence — 2026-10-25 + +Target assembly SHA256: +`4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6`. +These observations belong to this target; the older base catalog/reference has +not thereby been recaptured in full. + +## Tea Break + +The bounded read-only `tools/cw_teabreak_runtime.lua` capture confirms that the +current Client session sees route 2801, chapter 1, section 5 as a Bonfire node. +Its `BonfireEventIds` contains 10200601. The live node parameter itself already +contains this list. Thus missing Bonfire flags/event IDs are not the blocker at +this particular node. Do not add guessed node data to fix it. + +`GridFightGameEventData` is a set of change collectors, not the Bonfire choice +processor. Its captured methods are Reset/Dispatch/GetCollector/RegisterCollector +and initialization; no missing game-event protobuf component was established. + +Focused native disassembly of `_RefreshBonfireEventIds` at RVA `0xdc635b0` +(AMD64 exception-table bounds) copies the event list from the node parameter into +the cached list. It does not resolve event configuration. The direct caller at +`0xdc631f0` copies the Bonfire flag from the node parameter. Leaf getters at +`0xdc64be0` and `0xdc64c00` independently read the cached flag/list; those two +artifacts use explicit ranges because leaf getters have no unique unwind entry. + +Artifacts: `battle_diagnostics/cw54-teabreak-runtime-20261025.log`, +`cw54-bonfire-refresh.asm`, `cw54-bonfire-refresh-caller.asm`, +`cw54-is-bonfire.asm`, and `cw54-bonfire-ids.asm`. + +The unresolved step is the actual EnterBonfire caller/callback and its expected +choice/action/effect state. The reference has no EnterBonfire implementation. +The existing retcode-only success does not establish functioning Tea Break. + +## Entrance and exit + +Passive exact-name loadbuffer capture, requested through package loader closures +without executing those closures, produced the current S2 entrance and season +router chunks under `.runtime/named-baked-capture/`. + +The S2 entrance's `_on_btn_start` names the actual next module: +`Ui.GridFight.Division.Start.GridFightDivisionStartPage`. +Its `_on_dispose` only stops the CW menu audio state; no blanket camera/Canvas +restoration is justified by that function. The button-overlap screenshot belongs +to the Division Start screen, so its status/continue/end callbacks are the next +required consumer, not a reason to move arbitrary buttons. + +The season router selects Legacy/Latest presentation using +`GridFightModule.Instance.IsCurSessionLatest`. It supplies real prefab paths, +not a Bonfire event module path. No invented Bonfire page names were loaded. + +## Orb boundary + +Grant/list commands already cover captured Orb IDs, consumables and Forge items. +That is separate from dropping/opening Orbs. Current resources retain 529 Orb +display rows and 478 combination rows, but lack a complete matching basic bonus +pool plus the current open-Orb sender/callback mapping. The older reference's +custom basic-Orb rewards are not a complete current-revision reward table. + +The current runtime capture now includes MethodHandle values for +`GridFightOrbServerData`. Resolving the native entry at MethodHandle + 8 and +disassembling against the assembly hash above establishes the following: + +- `GetOrb(List, bool)`, RVA `0xdbe3c50`, forwards to the network sender + at `0xe3ff8f0`. That sender puts the list at request offset `0x18`, the bool + at `0x20`, and sends command `0x21af` (8623). +- The current protocol table names 8623 `IKMOCJBMGOJ`; its current schema is + repeated uint32 field 4 plus `is_get_all` field 9. This agrees with the native + argument layout. Historical reference names for its response/notification + are leads only: no new response pair is registered from historical IDs. +- The nested `<>c__DisplayClass11_0` is a count/filter closure, **not** the + GetOrb response callback. Its method is `b__0` and its + captured field is `GridFightOrbType`. +- The actual nested `OrbSummarizer` consumes the sync update context. At RVA + `0xdbe5370`, `IsConcernedWith` accepts enum value 1. At `0xdbe5520`, + `UpdateBefore` requires the same value and uses the first context uint as the + Orb UID; it looks up or creates the result for that UID. `UpdateRemoveOrb` + at `0xdbe58a0` records removed UIDs. `PreUpdateDone` at `0xdbe5bb0` dispatches + accumulated results only for UIDs included in the removed set. + +Accordingly, an eventual proven Orb payout must use one +`ABPLALCHNFA` group per Orb UID, with `grid_update_src` enum value 1, +`OOEOCGLLHFO = [orbUID]`, and the actual removal/loot updates in +`JKPJFKCBIEM`. Sending ungrouped updates under the default context cannot +construct the Client's Orb result through this consumer. This establishes the +consumer context, not the missing reward rolls or the response callback. + +The live session's `Bonus` is `RPG.Client.GridFightBonusServerData`, a bonus +distributor with trait/initial-supply results and a distributor queue. It is +not evidence for a random bonus-pool config repository. Four previously +recorded candidate row names are absent from the inspected current config +assembly; this is not proof that the data itself is absent or cannot be +resolved under other names. + +Artifacts: `cw54-get-orb-sender.asm`, `cw54-get-orb-network-sender.asm`, +`cw54-orb-consumer-rvas-20261025.json`, and `cw54-orb-context-{filter,before, +remove,complete}.asm` under `battle_diagnostics/`. Native resolution was a +read-only, bounded Frida attachment, with the current process and module range +checked first; no hooks, native gameplay calls, or memory writes were used. + +## Pending current consumer capture + +`tools/cw_teabreak_current_consumer.lua` is prepared outside `scripts/`. It +exports only three established live Preparation callback functions, their +source/upvalue names, and eight fields per heartbeat from the actual session +and Stage types. It skips Battle and sends no gameplay requests. It has not +yet been staged or captured. This can identify the real loader/service path +before attempting any Tea Break pending action implementation. + +The captured Division Start `_setup_btn_state` already uses mutually exclusive +start/continue visibility: continue follows `_is_in_game`, start follows its +negation. The settle button uses `_should_show_settle_btn`. The overlap report +therefore requires observing the live visibility/state application; moving +buttons arbitrarily would not fix the proven state consumer. diff --git a/docs/currency-wars-ffgo-orbs.md b/docs/currency-wars-ffgo-orbs.md new file mode 100644 index 0000000..696d947 --- /dev/null +++ b/docs/currency-wars-ffgo-orbs.md @@ -0,0 +1,88 @@ +# CW Orb implementation from the updated reference + +The reference binary SHA-256 is +`235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`. +The original binary was read without execution. Its embedded protobuf +descriptor, Excel tables and authored declarative configs were extracted under +`battle_diagnostics/ffgo-20261026/`. + +`tools/export_ffgo_orb_recipes.py` reproducibly creates +`resources/CurrencyWarsOrbRecipes.json` from the explicitly selected extracted +Excel/custom JSON files and reference binary digest. The resource retains both +input JSON hashes and separates native table identities from the reference's +authored reward recipes. It does not claim captured official reward odds. + +## Proven protocol contract + +The current Client sender and reference descriptor agree on the request: + +| Current name | Reference name | CmdID | Fields | +|---|---|---:|---| +| IKMOCJBMGOJ | GridFightUseOrbCsReq | 8623 | repeated UID tag4, get-all bool tag9 | +| PNHDGCBLPGD | GridFightUseOrbScRsp | 8659 | retcode tag3 | +| GDHFMHKFEAL | GridFightUseOrbNotify | 8745 | UID tag14, DropList tag5 | + +The implementation registers only the current named request. It introduces no +numeric alias or fallback response. The reference handler at RVA `0xca4740` +replies through 8659; the called `gfItemUseOrbs` (`0xca2a40`) sends 8745 before +the reward sync. The reference's `gfRewardDropProto` (`0xcd3640`) does not set a +drop ID for coin/EXP/refresh drops. It writes a role/item ID for those types. +Role-star presentation maps exactly to `AOHKKFHDALO.role_star` tag101; the other +ChooseParam arm is unused. + +The current native OrbSummarizer proof in +`currency-wars-current-consumer-notes.md` establishes source enum1 and the first +context uint equal to the opened Orb UID. Each opened Orb has its own grouped +sync containing the actual reward changes and the remove-Orb arm tag1503 +(`GOHHJLAPMBB`). + +## Implemented scope + +Opening one or all selected owned Orbs uses a detached snapshot and saves the +removal and actual rewards in one revision-checked transaction. Duplicate or +unowned UIDs, stale revisions, malformed recipes, exhausted pools and unsupported +bonuses do not consume an Orb. Network errors after a committed payout are +reported as send failures; reconnect restores the saved result. + +Sixteen reference recipes are identified among 532 native Orb rows: +102, 103, 197, 199, 203–208, 120031, 200001, 200005, 200013, 200015 and 200027. +The effect dispatcher supports gold, EXP, free refresh, lineup HP, captured +equipment/consumable/forge items, random captured equipment categories and +random available captured role rarities/stars. Random role rewards reserve +owned copies and unsold shop cards using captured merge rules, reject disabled +full-star roles, and use existing acquisition/merge/property projection paths. +Equipment categories require all reference category entries to exist in the +captured equipment catalog; no silently reduced category pool is substituted. +Inventory/effect prerequisites can still reject a particular identified recipe. + +Orb opening is currently restricted to Preparation without another pending +action or active Battle, using the same revision guard as purchases. Native +bonus-pool budget/weighted recursion, role modifiers and general `OnOrbOpened` +trait/effect hooks remain separate work. For example ordinary Orb100's bonus +20001 has no supported fixed recipe yet, and returns a configuration error +without removal. The handler must not be described as complete coverage of all +532 Orbs or original game odds. + +No unit tests, live probes or deployment were performed for this change. +`go build ./internal/gameserver` passed; Client Orb presentation and gameplay +acceptance remain unverified. + +## Post-battle drops audit + +The reference workflow includes `gfRouteRewardNodeOrbs` (RVA `0xce0c00`), +which calls `gfRouteRandomCreepOrbs` (`0xcdf4a0`) and `gfPoolRandomOrb` +(`0xccaec0`). Its `gfBattleTraitDrops` also calls `gfBattleDropReward` +(`0xc63e80`), which checks the configured Orb row before processing an Orb +drop. These are separate paths; the reference dump does not itself establish +the current Client's complete wire or success behavior. + +The current settlement reads progress and damage but does not generate +post-battle Orb drops. `MGMJOPHJCNL.ODMCMPIDJNH` is a repeated drop-shaped +field in the current protocol; its relationship to a server-issued battle's +drop list and the matching reference fields has not been demonstrated. +Accepting it as a grant without that validation would trust unverified Client +input. Likewise, restricting random rewards to the small set of implemented +recipes would change the reference distribution. A complete implementation +still needs the current Client's battle drop contract, the reference pool +membership and selection parameters, and usable implementations for the +resulting Orb recipes. The audited save and server were not modified. diff --git a/docs/currency-wars-ffgo-workflow-20261026.md b/docs/currency-wars-ffgo-workflow-20261026.md new file mode 100644 index 0000000..cd3ca6b --- /dev/null +++ b/docs/currency-wars-ffgo-workflow-20261026.md @@ -0,0 +1,119 @@ +# FFGO CW workflow comparison, 2026-10-26 + +Reference binary SHA256: `235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`. +Embedded revision: `440df54730ba64935e9ad7ecae9147e55ad279a9`. +This is compiled implementation evidence, not recovered original source or proof +that every reference handler succeeds in the current Client. + +## Tea Break entry and selection + +The recovered Go pclntab contains a complete Bonfire entry path, closing the +earlier reference's missing-handler gap. Direct calls agree with coherent +disassembly boundaries and Go runtime helpers; the PE pclntab's zero on-disk +textStart is resolved to the `.text` section virtual address. + +| Reference function | RVA | Observed behavior | +|---|---:|---| +| OnGridFightEnterBonfireCsReq | `c697e0` | Current run, Bonfire entry, sync notification, persistence, response | +| gfBonfireEnter | `c69940` | Resync current pending type 11, or create a new Bonfire pending action from the current node's event list | +| gfPendingAddBonfire | `cbc3c0` | Roll options for every event; capture basic/interest/streak income and node Orb rewards; sync queue head | +| gfPendingBonfireProto | `cb1760` | Convert offered options, income, drops and selected phase to the pending payload | +| gfPendingHandleBonfire | `cbb740` | Select option or heal first; separate take-drop step grants income/EXP/rewards, finishes pending, advances node | +| gfPendingMarkBonfireSelected | `cbc0a0` | Mark selected, serialize the same pending action, sync it again | +| gfRouteLowerEnemyStars | `cde100` | For every enemy above one star: roll integer 1..100; at configured threshold decrement one star | + +`OnGridFightEnterBonfireCsReq` sends reference command 8582 after its sync. The +implementation here resolves `GridFightEnterBonfireScRsp` by the repository's +named protocol table, rather than importing a numeric alias. + +The specific Bonfire subset agrees with our existing schema: + +| Reference meaning | Current generated field | Wire tag | +|---|---|---:| +| Bonfire pending arm | CHCHAJIANIM.IIDBLCFAAPC | 1920 | +| Bonfire request arm | GridFightHandleBonfireHealHpCsReq.IIDBLCFAAPC | 1659 | +| Pending queue identifier | CHCHAJIANIM.QueuePosition | 6 | +| Coin basic / interest / streak | NCEPOLNLNKH.EIFICNFGGHI / AHJJJNBOMPG / DANCNIMJOLE | 14 / 11 / 5 | +| Options / phase / drops | NCEPOLNLNKH.KFNMIEMBJGD / Phase / DJOBNPIAEJP | 13 / 9 / 6 | +| Option event / selected option | MHCOIBONODA.EventId / HAFOKMHCGFM | 11 / 13 | +| Select event / option request | LDJOCEMPFBJ.EventId / HAFOKMHCGFM | 1 / 14 | + +The full reference sync/pending messages contain additional arms absent from +our revision. Only this scoped verified subset is used; reference response +bytes are never copied directly into current packets. + +## Imported implementation reference and current scope + +`tools/export_ffgo_bonfire.py` reproducibly projects the extracted reference +tables into `resources/CurrencyWarsBonfire.json`: 38 events, 72 options, three +chapter heal rows and 17 declarative TeaBreakOption recipes. The resource +records binary and extraction hashes. Its target identity is a compatibility +gate against our existing catalog, explicitly **not** a claim of a new Client +capture. The selected event must also occur in the active Client node. + +Current event 10200601, option 1, uses reference recipe +`petpal/bonfire/GridFightBonfire102006011.json`: SetRule `PetPalStarDown`, +parameter `#1 = 40` from the Excel option. The native reference's string +cross-reference proves this rule lowers **enemy stars**, not shop stars. + +Implemented source now creates and persists the real menu before acknowledging +entry, resumes an existing Bonfire pending action, and validates the selected +event/option against the saved offer. Selecting this supported option persists +the rule with phase 1 and syncs the updated pending action. Future enemy layers +created through pending-action transitions apply the rule once per node; +the changed enemy stars and the application marker commit atomically. + +Server rule state lives beside the protocol payload under snapshot `runtime`, +scoped by run ID. Normal same-run writes inherit it under the existing revision +CAS and file lock; new runs cannot inherit old rules. Unknown envelope/runtime +fields and unknown protobuf fields remain intact. Snapshot readers never write. + +Only supported effects execute. Opening/selecting does not pay income. The +later continuation below supersedes the initial healing/take-drop boundary; +unsupported option effects still preserve the active offer. + +## Remaining node-factory boundary + +Our transition resource contains captured steps 1-1 through 1-4; it has no +current 1-5 -> 1-6 LevelWire/next pending/enemy recipe. The reference's static +route 2801 section 5 is a Monster node, while the active Client node is a +dynamic Tea Break. Its PetPal effect can replace that static node type. Copying +the static reference route or a saved reference run would therefore be wrong. + +Continue from reference `gfPendingAdvanceNode`, `gfRouteCreateNode`, +`gfRouteFillEliteBranch`, and the PetPal dynamic-node override. The factory must +resolve the active route section, dynamic Tea Break replacements, layer-specific +parameters, actual enemy waves/camp, penalty, queue, shop and reward updates. +The generated factory described below now supplies the current next Boss node. + +Validation performed: Go compilation and a read-only catalog load confirming +38/72/17/3 rows and supported event 10200601/1 -> PetPalStarDown 40. No unit tests +were added or run, no saves were changed by the checks, and no Client menu or +selection success is claimed until observed after deployment. + +## Take-drop continuation (2026-10-26) + +The saved live run was inspected without writing it: revision 531, route 2801, +chapter 1 section 5, pending queue 530, Bonfire phase 1. Its offer contains basic +gold 10, interest 5, streak gold 2 and no Orb drops. The old phase-0-only guard +rejected take-drop before reaching its branch, explaining the repeated 6900. + +`cwSelectBonfire` now distinguishes selection/healing from take-drop. Healing +uses the chapter row and caps at maximum HP. Take requires phase 1, pays the +saved income and resource-defined wave EXP, applies any already-offered Orb +items, and constructs the next saved route node. The caller commits the entire +detached result using the existing revision CAS before sending notifications. +Failure leaves income/inventory/coordinates unchanged; retrying a completed +queue cannot award again. It does not invent missing Orb rewards for the legacy +offer. Weighted generation of ordinary node Orb offers remains separate work. + +New enemy rounds use typed RoundBegin -> ReturnPreparation instead of replaying +the initial shop capture. Battle settlement retains proven captured transitions +and otherwise calls the generated node factory with a monotonic revision-based +queue. Reference penalty rows (114) are stored separately with provenance; +current-Client captured rules take precedence. Enemy-star rules and their +once-per-node markers commit with the newly generated layer. + +See `currency-wars-route-factory.md` for destination-family limits. This change +does not claim complete CW finalization, all augment effects or all node types. +Compilation is distinct from live Client acceptance. diff --git a/docs/currency-wars-investigation.md b/docs/currency-wars-investigation.md index 4a3f289..bedc461 100644 --- a/docs/currency-wars-investigation.md +++ b/docs/currency-wars-investigation.md @@ -288,7 +288,7 @@ An isolated native administrative move to the next route node followed by RoundB The user reports that this node presents the Protagonist button, not ordinary Battle. Requests include `GridFightSpotLightEnterCsReq` and `GridFightUpdateSpotLightTrackCsReq`, both previously unhandled. The old reference lacks this current Spotlight implementation. The reconstructed normal second-battle path above is not verified as the appropriate current route. Moreover, the imported old layer's camp must not be treated as a generated member of the current run's active camps. Selection, actual effects and the appropriate enemy layer remain unfinished. -Bounded current Client captures now contain 84 initialized Spotlight rows, exported by `tools/export_cw_spotlights.py` to `resources/CurrencyWarsSpotlights.json`. These are real configurations and suitable-role lists, not evidence of selection weights, offer count, costs or grant policy. Do not substitute arbitrary offers or a success-only response for those missing rules. +Bounded current Client captures now contain 84 initialized Spotlight rows, exported by `tools/export_cw_spotlights.py` to `resources/CurrencyWarsSpotlights.json`. These are real configurations and suitable-role lists, not evidence of original-server selection weights, offer count, costs or grant policy. `CurrencyWarsSpotlightPolicy.json` explicitly defines the current server's uniform compatible selection policy (three options, no rerolls); it must not be described as captured original weighting. No success-only response replaces selection state. Named MethodHandle +8 reads and bounded PE disassembly establish `GridFightSpotLightSelectAction._SyncFromProto` at RVA `0xdc00cd0`. Isolated protobuf setters encoded to bytes establish the field tags independently. Assembly SHA256 is `c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144`. Evidence is retained in `battle_diagnostics/cw-spotlight-selection.asm`, `cw-getter-native.json`, `cw-spotlight-wire.log` and `cw-spotlight-getters.log` (ignored diagnostics). @@ -305,6 +305,10 @@ Named MethodHandle +8 reads and bounded PE disassembly establish `GridFightSpotL ActionID comes from the enclosing pending QueuePosition. The protobuf arm is EEKMIAMGHFL (1817), not the ordinary Battle arm. `SelectCandidate` dispatches role and selected Spotlight ID through `Select`; this still needs a server-owned offered-choice/role validation path. FMBACDOFCAL mappings independently encoded: IHHNLLAJAGB (1) SpotlightID, UniqueId (2), MDNAGANGNKK (9), ELBPNDIENDL (11), RoleId (13). Meanings of fields 9/11 and special effects are not inferred merely from their types. +Further named native inspection resolves fields 9/11: AddOrUpdate at RVA `0xdbfb3f0` shuffles the proto scalars into its ACNDKIFJLJC record. GetActiveSpotLightBindingByRoleId at `0xdbfb9a0` and binding constructor at `0xdbf6380` place that record into RoleUniqueID/RoleID/SpotLightID/UniqueID/IsLoss. Thus MDNAGANGNKK is RoleUniqueID and ELBPNDIENDL is IsLoss. New grants bind an owned role UID and use IsLoss=false; merges move the UID binding when the selected card is consumed. See `cw-spotlight-add.asm`, `cw-spotlight-binding-get.asm`, `cw-spotlight-binding-ctor.asm` in ignored diagnostics. + +The implemented Enter handler validates preparation and the current node flag, persists an offered pending choice, then sends pending sync before the typed response. Selection validates the saved offer, suitability, ownership and duplicate binding; it saves a run-owned Spotlight, updates the route node, finishes the pending action and unlocks preparation. Start/entry transitions preserve an empty Spotlight component, and explicit Resume migrates old runs so Client Sync marks the manager valid. Snapshot reads remain read-only. The build compiles; UI selection/resume is still awaiting current Client proof. Battle projection/effect execution and subsequent route fidelity are unfinished; do not claim the complete mode works yet. + ### Basic merges and equipment tracking `CurrencyWarsCatalog.json` now contains 219 actual native star rows, identity checked against the requested role/star (no clamped rows accepted). `tools/import_cw_role_stars.py` preserves earlier configurations and imports only observed rows. Ordinary sale quotes use the current rarity table only when the captured default quote agrees with that table; unestablished special quotes are rejected. @@ -314,3 +318,53 @@ ActionID comes from the enclosing pending QueuePosition. The protobuf arm is EEK Current tracking handlers bind names from the current command table: GridFightUpdateEquipTrack and GridFightUpdateEquipTrackPriority. Tracks persist in the player component MIIDIMOCPEB; KFNCAIHIHCM.BMGFDIKDOBE carries the complete updated list. Native `CreateServerTrackUpdateInfo` at RVA `0xda5afa0`, `RemoveEquipTrack` at `0xda63a30` and `_AddTrackToLastAndSend` at `0xda628d0` prove BJDOINAHDLN is **enabled**: add passes true, removal false. It is not a deletion flag. Priority is NALMBOOCCIN; the source protocol comparison also names it priority, but old source tags/opcodes are not used. Equipment IDs are checked against the 142 current initialized handbook equipment rows. This implements tracking persistence/display, not equipping, crafting or combat item effects. The merge/tracking build compiles; no automated tests were added or run. Client confirmation of these new changes remains pending. Finished research scripts have been removed from scripts/; their source remains under tools/. + +### Protagonist selection confirmed; CW trial blocker found + +The user confirms selection works. Current logs prove Enter offered three choices at queue 215/revision 215 and DKDFDGJGIHM selection finished at revision 216 with preparation restored. An initial validation error was our incorrect requirement that every native Spotlight row contain JsonPath; fifteen real rows have an empty path and must be retained, not replaced with guessed paths. The validator now accepts their native shape. + +The subsequent EnterBattle failure is distinct: `CW role avatar 6042 not owned; trial resolver required`. The captured role row marks this as a fake CW avatar and supplies SpecialAvatarID. The current native flat SpecialAvatar table supplies its identity, world level, level, promotion, rank, enhancement and equipment values. `CurrencyWarsTrialAvatars.json` retains this complete native row and capture hash; `cwTrialBattleAvatar` builds an isolated trial battle avatar with the special ID and Trial enum. It never adds the fake avatar or trial gear to Adventure/persistent inventory. The native reference's ResolveBattleAvatar / SpecialAvatarInfo.ToBattleProto corroborate this special-ID serialization and do not create relics for this fake avatar. Only captured trial profiles/world levels are supported; others still fail explicitly. + +Native `BattleGridFightAvatarData.get_SpotLightID` at RVA `0xefae920` reads BattleExtInfo +0x18 then that object's +0x18. Isolated ABJGLPCOMMK setters encode tag 2 as `10-01`, whose accessor at `0x1eea9f00` reads +0x18; tag 1 reads +0x1c. The old captured role envelope independently has tag 1 Mode=2. Runtime retains that mode and injects only the selected run binding's SpotlightID at tag 2. It does not inherit the reference avatar's Spotlight. Server-side economic/difficulty/trait-specific Spotlight effects remain unfinished; the presence of this projection is not proof of all effects. + +Current trial/Spotlight projection build compiles and is deployed at root. Actual node-1-2 combat after the trial fix is awaiting Client confirmation. No automated tests were added or run. Research captures are outside scripts/ after completion. Future probes should wrap their whole body in a local function: a top-level return in one concatenated script can skip later scripts in the same heartbeat. + +### Supply selection and second-node Client confirmation (2026-10-21) + +The user now confirms node 1-2 Battle works after the fake-avatar resolver. The server records battle 247, a completed settlement with progress 100, followed by Supply queue 16 at revision 248. This supersedes earlier pending-verification statements for this particular fight only. + +The Supply 6900 was a missing FIKAGBAEOAP request branch. The new handler validates the saved queue, exact selection count, one-based indices, offered role/star and item identities against current resources. It grants the selected equipment and role with fresh run-owned UIDs, merges eligible triplets, and saves once before sending equipment/role/merge groups and the pending acknowledgement. A rejected transaction sends no grants and writes no partial changes. Paid selections and rerolls remain unimplemented rather than inventing prices. The acquisition Source=9 discriminator is corroborated by the native Supply selection captures and the reference SupplyEquipmentSource definition. + +The captured Standard Supply transition advances the existing party to section 1-4. It imports only the next level/pending recipe from march-cw-supply-next stage 17/18/19, never another account's balances or inventory. The later EliteBranch action and current-camp procedural encounter generation are unfinished; the captured branch layer is a reference recipe, not proof of correctly generated encounters for every selected camp. Do not claim a complete CW run or use it as proof of later Battle fidelity. Current Supply selection still awaits Client confirmation. Build only; no automated tests added or run. + +### CW flow audit and staged Encounter work (2026-10-21) + +The current Client/server trace confirms Supply queue 16 succeeds, advances to RoundBegin 20 and Encounter 21 (revision 250). The next 6900 is the unimplemented BAKAKODKECM arm, not a Supply failure. The user explicitly requests completing connected CW flows in batches instead of repeatedly requesting one-button Client checks. + +`tools/inventory_cw.py --reference-root --markdown ` now compares all current command names, Go registrations and reference source handlers, plus every pending-action arm. `docs/currency-wars-coverage.md` is the current static audit. Registration is deliberately not labeled gameplay success, and old reference names are not registered as aliases. Missing equipment, consumable, progression and pending actions remain visible. + +A staged Encounter implementation validates the offered one-based branch, saves SelectedEliteBranchId, emits the mapped FGODNPLCECH selection sync, and queues ReturnPreparation; it also implements changing the selected branch during preparation. It compiles but has not replaced the root Supply build. It must not be presented as a complete Encounter combat/settlement implementation: wave recipes, difficulty, penalties, rewards and the following transition still require the connected work. + +Native Create(UInt32,...) method handles identify RVA 0xdb7d780. Its bounded PE disassembly calls the monster row getter at 0x1dee0820 before constructing MonsterData; the capture invokes only that flat getter and the previously established serializer at 0x1d3efb60, on the initialized handbook getter thread, four rows per call. Current assembly hash matches the catalog. REA observations ev_6de4d1e2da5ceaf24244fb3effc43b0a9ed5122a6edc252a912fd7397b051311, ev_a5ea1ccc45442bcd8550983f294080ecb6cca0ea2d39f28828f17094433fe8ce and ev_2e7d90ac354eaf31406ddb077b68e18b2dccc0b1dbefb3d5f764136de324219d plus the retained getter disassembly establish 42 identity-checked monster rows covering this run's camps and the imported branch camp. No monster/scene/level-graph constructor executes. Finished probes are outside scripts/. + +`CurrencyWarsMonsters.json` retains native tiers and all four star elite-group fields, with a complete plan/capture digest. Its coverage is partial, not the complete game table. The staged compatibility sampler selects a compatible active camp uniformly and replaces imported branch monsters with current native monsters of the same tier while preserving stars, wave layout, penalties and rewards. This is an explicit server compatibility policy, not a claim about original-server random weights. Explicit Resume reconciles an old pending Encounter once and saves before GetData; readers remain read-only. No Adventure inventory or party is changed. The root build is still cw-supply-gameserver; do not request another Client retry until the connected Encounter flow is ready. + +### Quit/abandon active run request (2026-10-21) + +The first handler only cleared the saved run and returned `GridFightQuitSettleScRsp`. The screenshot's “Currently unable to manually end and finalize” showed that was insufficient: the Client also expects `GridFightSyncKeepWinCntNotify` followed by `GridFightSettleNotify` before the success response. The handler now builds those notifications from the active run and current catalog, commits only the removal of `DHFOFLFCLAH`, sends the notifications in that order, then lets the dispatcher send the typed response. It does not award victory rewards or change Adventure inventory. + +The packet names and wire layout come from the checked-in current protocol; the older reference is used only to confirm the required packet order and Quit reason, not its old CmdIDs or field tags. Settlement rank and completed-battle count are not present in the saved run/catalog mapping yet, so their protobuf defaults remain unset. The UI flow still needs confirmation in a connected Client after rebuilding/restarting the server. + +### Encounter battle returns 6900 (2026-10-22) + +`RET_GRID_FIGHT_CONF_MISS` is protocol retcode 6900. The current log attributes the Encounter failure to a missing enemy plan. The saved run is Standard, route 2801, chapter 1, section 4, stage 70000006. The Encounter layer offers two branches, with branch 1 selected; its saved enemy payload has one wave containing 12 monsters and penalty 91113. The second offer has penalty 91114. These live saved values do not include the battle's level, hard-level group, elite group, formation wave or complete difficulty modifiers. + +`CurrencyWarsEnemyPlans.json` has a captured recipe only for stage 70000003 / penalty 92013, so it cannot construct either current Encounter branch. The builder previously also rejected every multi-branch layer and looked up a recipe using the node's penalty instead of the chosen branch's penalty. It now resolves the saved one-based selected branch, looks up that branch's penalty and logs the route/section/stage/selection when no recipe exists. Unit tests verify first/second branch selection and reject absent, empty or out-of-range choices. This avoids starting the wrong branch once its exact recipe is available. + +The connected Client 4.6.53 capture confirms stage level 90, HardLevelGroup 1 and zero difficulty deltas. It records both one-wave branches, their 12 monster IDs and stars, and penalties 91113/91114. StageExcel's EliteGroup is 0; a separate monster row reports EliteGroup 1, but the current capture does not establish which value belongs in `SceneMonsterWaveParam.EliteGroup`. The saved branch message has no formation-wave ID, and the expected formation/elite table classes were not resolved through the direct Lua API. Do not fill these fields from the older reference or infer them from monster identities. The Encounter still fails closed until the current Client's exact formation and elite configuration values are captured. `tools/cw_active_encounter_capture.lua` is the bounded read-only probe; it uses reflected fields from this current Client, so it is not a general decoder. The full retcode audit is in `docs/currency-wars-6900-audit.md`. + +Current 6900 paths elsewhere include missing gameplay catalog/snapshot, unsupported pending-action arms or failed action validation, missing EXP/Spotlight config, unavailable sale/role variants, mismatched party property scales on purchase, battle settlement validation, and save failure during quit. These are reported in their handlers; they do not justify returning success without state changes. CW equipment/forge, many pending-action arms, talents and later route recipes remain incomplete as listed in `docs/currency-wars-coverage.md`. + +### Beta scan source correction (2026-10-22) + +The user clarified that the target is the Beta 4.6.53 OS installation. The previous static lookup using the D: main-game assets was invalid and must not inform this Encounter. The retained runtime capture has the Beta `GameAssembly.dll` SHA-256 `c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144` and records the current run as route 2801 / section 4 / stage 70000006. The live process path was independently verified with `QueryFullProcessImageName` and resolves to the user's Beta installation. `GridFightStageRouteConfigExcelTable.GetData` returned an empty row for the attempted key, while `GridFightEnemyDifficultyLvConfigExcelTable.GetData` failed to resolve that exact type; these are incomplete lookups, not proof that the data is missing. Continue only against this Beta runtime and its matching assets. diff --git a/docs/currency-wars-response-boundary.md b/docs/currency-wars-response-boundary.md new file mode 100644 index 0000000..94b4d98 --- /dev/null +++ b/docs/currency-wars-response-boundary.md @@ -0,0 +1,43 @@ +# CW typed response boundary + +## Source correction, 2026-10-25 + +The shared typed dispatcher sends its response only when the registered function +returns nil (or the handler has already sent the response explicitly). Several CW +paths returned resource, validation or save errors directly. Those paths therefore +left the Client waiting instead of receiving the revision's typed error response. + +CW registrations now use `cwHandle` / `cwHandleNamed`, which still resolve request +and response IDs by their names through the existing protocol table. When a CW +operation returns an application error, the wrapper preserves a nonzero retcode +already selected by that handler, or assigns `RET_GRID_FIGHT_CONF_MISS` if it was +still zero. It logs the error and returns control to the dispatcher to send exactly +one typed response. It never converts an unsupported operation into success or +replays a failed transaction. + +Every explicit packet send within these registered handlers uses `cwSend` to mark +any send error, including serialization or projection failures. The wrapper +propagates that error, network/EOF/closed-connection errors, and +`errResponseAlreadySent` unchanged. It does not attempt an additional packet in +those cases. The former pending-action-specific error defer was removed because +it swallowed send errors as though they were application failures. + +`GridFightUpdatePos` also rejects position changes while `CURRENT_BATTLE` is +active, matching the existing Preparation-only mutation boundary used by shop, +equipment and grants. This does not remove or settle the active battle. + +## Validation and limits + +- `go build ./internal/gameserver` succeeded. No tests were run. +- No executable was replaced, no server restarted, no live save changed and no + probe was staged by this change. +- This closes a source-level missing-response path. Client behavior is not yet + verified, and Tea Break choices, automatic Orb drops/opening and later route + recipes are still incomplete. +- The existing `GridFightEnterBonfire` handler's success-only navigation response + is not proof of a working Tea Break. Its game-event consumer and the associated + current revision's choices/effects still need runtime evidence before new + pending state can be implemented. + +The static inventory scanner recognizes both CW wrappers, so registration reports +continue to distinguish present handlers from actual gameplay support. diff --git a/docs/currency-wars-route-factory.md b/docs/currency-wars-route-factory.md new file mode 100644 index 0000000..5f99a62 --- /dev/null +++ b/docs/currency-wars-route-factory.md @@ -0,0 +1,63 @@ +# Currency Wars generated route continuation + +The route continuation uses the extracted FFGO `gfPendingAdvanceNode` -> +`gfFxHEnterNode` flow and `gfRouteCreateNode` configuration. Reference executable +and Excel-dump hashes are recorded in `CurrencyWarsReferenceNodes.json`; its 493 +normalized templates are data, not snapshots of another player's run. + +`cwAdvanceRouteNode` operates only on the caller's detached run. It finds the +next ordered chapter/section in the catalog, retains the run's existing route +display (including dynamic Tea Break replacements), and asks the reference +enemy factory to construct the destination layer using that run's saved +chapter boss/camp. It validates the destination before changing the source. +It then emits finish-old-queue, level change, and typed RoundBegin updates. +It neither awards rewards nor writes a save. The caller commits rewards and +continuation together with its existing revision/CAS check. + +`cwNextRound` keeps the existing captured transitions and uses typed generated +pending actions when a new enemy node has no captured RoundWire. It refreshes +the finite-pool shop and creates ReturnPreparation, Spotlight, or Encounter +selection through the existing handlers. Queue values increase from the +active queue; battle settlement must seed that queue from its persisted +revision before calling the factory when no pending action remains. + +Current integration target is the dynamic Tea Break at 1-5 followed by the +saved route's Boss at 1-6. General augment effects, non-enemy layer creation, +and end-of-route finalization require their own state handlers; this module +does not claim to implement all run effects or replace those handlers. + +Validation: Go compilation only. No unit tests, live probes, deployment or +player-save writes were performed by this implementation task. Client +continuation and combat remain to be checked after the parent integration. + +## Current Boss entry correction + +Live logs now confirm take-drop, RoundBegin and ReturnPreparation succeeded: +the user's run reached 1-6, revision 545, without resetting the run. Boss start +was rejected by the new helper's `CW validated battle scalar parameters missing`. +That guard incorrectly required Level and HardLevelGroup to be nonzero. Decoding +the proven first-node BattleTemplates wire shows both are omitted/zero, while +formation is 5. Updated FFGO `gfBattleMonsterWave` (RVA 0xc62b00) initializes its +wave param with formation and elite only, independently confirming omission. + +The helper now preserves those captured zero values and validates the required +formation. It does not replace them with older recipes' explicit 90/1 constants. +Saved boss/camp, wave ordinals, stars, penalty and mode identity still validate. +No claim of live Boss entry is made until the patched request is observed. + +## Monster and EliteBranch battle projection + +The reference battle projection also accepts a previously created Monster or +EliteBranch layer: it validates the saved camp membership and wave ordering, +and EliteBranch's selected penalty against the extracted penalty table. This +does not generate those layers or establish that the Client accepts the fight. + +The reference `gfRouteCreateNode` uses a run-specific neutral camp for Monster +nodes. `gfRoutePlanForRun` reads that camp from an internal FFGO run field; it +is not represented by the saved Client stage's boss camp list. The captured +first battle's monster IDs match more than one native season camp, so they do +not uniquely recover the saved run's neutral camp. The reference uses one wave +of three monsters for the first Monster node and five thereafter, filtering by +the captured maximum tier; determining the run camp is still required before +constructing that layer. EliteBranch generation additionally needs its option, +difficulty and reward contract. No player save was modified by this audit. diff --git a/docs/cw-bonfire-phase-contract.md b/docs/cw-bonfire-phase-contract.md new file mode 100644 index 0000000..7788897 --- /dev/null +++ b/docs/cw-bonfire-phase-contract.md @@ -0,0 +1,39 @@ +# Bonfire phase correction — 2026-10-26 + +The deployed FFGO-derived selected phase was wrong for the current Client. +The user's video showed the initial option cards after resume, despite the +server rejecting both option and heal requests as already selected. Saved +revision 531 has phase 1 and the already-applied same-node PetPal rule marker. + +Read-only runtime evidence from the active Client: + +- Exact type: `RPG.Client.GridFightBonfirePendingAction`. +- `HasSelected=false` with the server's phase 1; queue 530, income 10/5/2. +- `GridFightBonfireDialog._setup_view` reads `HasSelected` to choose between + initial option cards and final rewards. Its current baked closure was captured + without executing that closure. +- `_UpdateHasSelected(KMJMHDPPAKH)` resolves to RVA `0xda53360`. +- Native instructions `cmp esi,2; setge byte ptr [rdi+0x6c]` prove selected + means phase >= 2. See private `cw54-bonfire-hasselected.asm`. +- GameAssembly SHA256: + `4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6`. + +The FFGO factory writes selected=1. Matching scalar wire layout did not prove +matching enum semantics. The earlier Tea Break integration incorrectly assumed +that semantic match; this document supersedes its phase-1-selected statements. + +The server now sends choosing=1, selected=2, and accepts old phase-0 offers for +selection. A read-only projection repairs legacy selected=1 only when the +same-run/same-node effect marker and exactly one offered option's saved rule +values prove the old selection. A bare phase 1 is never automatically selected. +Readers do not write persistent or replay effects. The actual next transaction +persists the repaired phase together with its ordinary revision CAS. + +New selections record the event/option (or heal) in the same-run sidecar. A +duplicate matching request resynchronizes the selected action without applying +the effect/heal again; changing a completed selection is rejected. Take-drop +still grants and advances once in the existing single commit. + +Probes remain under tools/. All temporary script copies were removed and both +Frida sessions were detached. Compilation is not Client acceptance; the patched +resume/take flow still needs observation after deployment. diff --git a/docs/cw-book-entry-recovery.md b/docs/cw-book-entry-recovery.md new file mode 100644 index 0000000..d24bacb --- /dev/null +++ b/docs/cw-book-entry-recovery.md @@ -0,0 +1,93 @@ +# CW Go button recovery — 2026-10-26 + +## Current evidence + +The user reports Go from both the handbook and activity page does nothing, +with no outgoing teleport command. Current Client identity is assembly SHA256 +`4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6`. + +Two exact named baked modules were captured passively without executing their +returned loader closures: + +- `Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem` +- `Ui.DailyMission.Rogue.HandbookRogueGotoBtnBehaviour` + +The common superclass was also captured: +`Ui.Activity.CommonComponents.CommonActivityGotoBtnBehaviour`. +Raw chunks and parsed Luau v4 representations are in +`.runtime/named-baked-capture/cw-{handbook,handbook-goto,common-goto}-current.*`. +`string.dump` is absent in this Client; that failed probe is not evidence that +the named callbacks are missing. `debug.getupvalue` is available. + +The handbook's `_on_click_go` calls +`ActivityModule:GetPanelData(_GRID_FIGHT_CONSTANTS.ActivityID)`, passes the +result to its behaviour and calls `on_btn_go`. Read-only current observations: + +- ActivityID and PanelID: 71101. +- ContentID: 171002. +- Panel type: `RPG.Client.GridFightActivityData`; panel/state are present. +- `IsSkipSwitchStoryLine=false`. +- `StateData.CurState=PreGuide` (enum value 2). + +This disproves the earlier-session nil-panel explanation for the present +failure. The unrelated missing Tourn Rogue resident-panel warning is not used +as proof of the CW cause. + +## Missing native guide prerequisite + +The exact live `ActivityPanelConditionRow` is retained in +`battle_diagnostics/cw-book-entry-20261026/condition-row.json`: + +- PreConditions: level 21 and FinishMainMission 1034109. +- GuideConditions: FinishMainMission 8047206. +- GuideGoto: 6417; ActivityGoto: 6418; GuideTakeMission: 0. + +The current common Go behaviour dispatches a PreGuide panel through its guide +path, rather than its InProgress ActivityGoto path. This server's initial +GetMissionData advertises the 148 function-unlock missions from the older +export. Its list contains 1034109 and the older CW introduction 8037100, but +omits 8047206. The latter is present in `resources/MainMission.json`. Publishing +all 2,205 imported main missions is unnecessary and is not part of the fix. + +## Source correction + +`resources/CurrencyWarsActivityConditions.json` retains the captured condition +row, named condition enum mapping, capture digest and the explicit older-base +to-current-activity-capture provenance. It declares the scoped freeplay policy +`complete_declared_guide_finish_main_missions`. + +`LoadCurrencyWarsGuideMissions` reads this resource without modifying a save. +It validates source/target identity, active CW panel membership, supported +condition kind and mission existence. `getMissionUnlocks` appends only these +validated guide prerequisites, deduplicated, to its existing function-unlock +view. GetMissionData and GetMissionStatus therefore agree. The expected initial +finished-main count becomes 149. No Client CurState field is forced, no scene +or callback is invoked, and unrelated missions/inventory/progression are not +rewritten. + +`go build ./internal/gameserver` passed. No tests or deployment were performed +by this subtask. Actual native transition to InProgress and successful Go +teleport require confirmation after the updated mission view reaches the +Client. + +## Integrated validation + +The parent built and deployed standard/shipping Game and SDK binaries and +restarted the root servers. Fresh GetMissionData logged 149 finished main +missions, with the existing 14,716 sub-missions and 68 exclusions preserved. +The user then confirmed Go teleport works. Server evidence records an actual +EnterScene request and resolved CW entry 2032202, rather than a success-only +button response. This confirms the tested entry path; it does not establish +completion of CW's remaining Tea Break/route/reward gameplay. + +All temporary probe copies were removed from scripts/ and the passive Frida +session was detached. Ping colors was also independently user-confirmed in +this build: matching bar/digit colors and no flashing on digit changes. + +## Diagnostic cleanup notes + +Research tools remain under `tools/`. The parent owns removal of intentionally +staged `cw_book_condition_row.lua` and the metadata/panel-state probe copies +from `scripts/`. A finished top-level Lua probe must never use a bare `return` +inside an outer `do` block: that returns from the entire concatenated heartbeat +chunk. Use a local function/tick boundary for early returns instead. diff --git a/docs/cw-route-continuation-audit.md b/docs/cw-route-continuation-audit.md new file mode 100644 index 0000000..e7dbc7f --- /dev/null +++ b/docs/cw-route-continuation-audit.md @@ -0,0 +1,40 @@ +# Currency Wars route continuation audit + +The captured route 2801 contains these node types after the first boss: + +| Chapter | Sections in order | +| --- | --- | +| 2 | CampMonster, Supply, EliteBranch, Monster, Boss | +| 3 | CampMonster, Supply, EliteBranch, Monster, Boss | + +These names are joined from `CurrencyWarsCatalog.json` stage routes and +`CurrencyWarsReferenceNodes.json` templates. They describe the template, not +necessarily a run's dynamically substituted node display. + +`cwAdvanceRouteNode` currently calls `cwGenerateReferenceEnemyLayer` for every +destination. That factory accepts only Boss and CampMonster; it rejects Supply, +EliteBranch, and Monster. `cwSelectSupply` also requires an exact captured +transition. Consequently a successful 2-1 battle does not establish that 2-2 +or later rooms can be played. Constructing the remaining node layers, pending +actions and rewards needs their corresponding native/reference rules and a +current-Client check; copying the first Supply's randomized inventory would not +prove the later rooms correct. + +`cwCapturedSupplyLayer` derives the empty Supply node container from the +revision-bound transition capture and validates that it has no camp or enemy +branches. It neither copies the captured option list nor modifies a run. It is +not yet connected to route advancement: FFGO's `gfPendingSupplyOf` and +`gfPendingFillSupplyOptions` also choose a chapter/state-dependent offer, +including distinct roles and random equipment. That pending offer remains +unmapped; advancing without it would strand the player in Supply. + +After the final node, `cwAdvanceRouteNode` returns `CW route has no next node`. +At zero HP, `finishCurrencyWarsBattle` returns `CW defeat settlement requires +terminal-run handler`. Neither path currently settles the run. FFGO's extracted +descriptor names settlement reasons Quit=1, HpZero=2, and Finish=3; the current +Client's obfuscated enum has matching numeric slots, but only Quit=1 has been +confirmed for the current implementation. The reference `gfSettleSend` builds +and archives a settlement record before sending the settlement notification. +The names and fields of its rank/reward/archive components must be mapped to +the current Client before a completion handler can safely persist rewards and +clear the active run. No saved run has been modified by this audit. diff --git a/docs/ffgo-cw-resource-reference.md b/docs/ffgo-cw-resource-reference.md new file mode 100644 index 0000000..237a92d --- /dev/null +++ b/docs/ffgo-cw-resource-reference.md @@ -0,0 +1,94 @@ +# FFGO CW resource reference, 2026-10-26 + +The updated reference executable was inspected offline. It was not launched, +and its saves/configuration were not modified. Its SHA256 is +`235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`. + +## Reproducible extraction + +`tools/export_ffgo_embedded_resources.py --binary +--output ` extracts bounded gzip members and decodes the +Excel resource through the executable's own generated protobuf descriptors. +It requires Python protobuf and the sibling `dump_embedded_proto.py`. +No executable code from the reference is run. + +Evidence is retained under `battle_diagnostics/ffgo-20261026/`: + +- `resource-manifest.json`: binary identity, descriptor identities, exact gzip + offsets/lengths, compressed and uncompressed hashes. +- `excel-data.json`: full decoded `excel.ExcelData`, including NPC monsters, + challenge/Peak data, activities, shops and CW tables. +- `gridfight-excel-data.json`: CW-only subset, 72 tables. +- `gridfight-custom-data.json`: 1,253 reference-authored config files and two + action schemas. These are **not original Client level JSON**. +- `resource-inventory.json`: table counts and the exact currently blocked Tea + Break event/options/custom rule. +- `challenge_peak_extra_data.json`: separate embedded JSON supplement, + 11 groups/44 Peak entries, file offset `0x114c212`, 9,101 decoded bytes. +- `load-excel.asm`: static loader evidence. `LoadExcel` at RVA `0xb79160` + reads embedded `resources/excel.gz`, creates a gzip reader, reads all bytes, + and unmarshals the protobuf into the global Excel data object. + +The Excel gzip member starts at file offset `0x11c9fef`, compressed size +962,600 bytes, uncompressed size 6,008,625. The CW custom JSON gzip member +starts at `0x1153105`, compressed size 25,684, uncompressed size 267,251. +The extractor preserves protobuf int64 values as decimal strings in JSON. + +## New usable CW evidence + +The extracted tables include 38 Bonfire events, 72 Bonfire options, 3 Bonfire +heal rows, 110 bonus pools, 1,120 basic bonuses, 480 combination bonuses, +532 Orbs, 493 node templates/routes, 629 special avatars and 411 augments. +This supplies the previously missing reference bonus-pool recipes. It does +not by itself establish current Client response bindings or packet order. + +For the blocked event `10200601`, the reference Excel row states PetPalID 2 +and DialogID `1020060101`. Its option 1 states: + +- JsonPath: `Config/Level/GridFight/petpal/bonfire/GridFightBonfire102006011.json` +- DialogID: `1020060102` +- EffectParamList: `[40]` +- OptionShowType: `None` + +The corresponding reference-authored custom rule is +`petpal/bonfire/GridFightBonfire102006011.json`: `TeaBreakOption`, immediate +`SetRule` action, rule name `PetPalStarDown`, value `#1` (the parameter 40). +It must not be replaced with a generic healing reward. Separate Bonfire heal +rows specify 20 for each of chapters 1, 2 and 3. + +Basic bonus, random pool and combination bonus IDs are separate lookup +namespaces. For example basic BonusID 1 is Gold with amount parameter 1; +there is no random pool row with RandomBonusID 1. The existing captured Orb +197 points to BonusID 1, so trying to resolve every Orb through the random +pool table would fail for this legitimate direct basic bonus. + +## Saved state is supporting evidence, not reusable configuration + +The reference's external `data-in-game.json` contains an active season 2, +route 1800 run at node 1-2, 23 pregenerated nodes and one completed battle. +Its first two nodes retain per-monster `drop_orb_ids`, and its saved effect +state contains `OrbsOpened = 5`. This shows the reference persists those +concepts, but does not capture the packets that awarded/opened them. +That run must not replace this project's route 2801 run or player save. +No avatar snapshots or player inventory from the reference were imported. + +The reference's static route 2801 chapter 1 section 5 points to node template +280115, whose row is `Monster`, StageID 70000008, ParamList `[902]`, penalty +92204 and basic gold 10. The captured live Client run is instead a Tea Break +with event 10200601 at that position. A PetPal/dynamic node override may explain +this; static route data must not overwrite the active run. The reference does +explicitly link PetPal 2 to effect 102006, whose parameter is event 10200601. + +## Compatibility and limits + +The reference supports multiple Client revision dispatches; a table's presence +in its embedded Excel is not independent proof that it matches the connected +Client's revision. Compare relevant rows with captured Client data and retain +this binary's provenance before importing a compatible subset. Resolve CmdIDs +through the current named command table; never transplant historical numbers. + +The custom files label 822 entries `Implemented`, 42 `Partial`, 116 +`NotImplemented`, 93 `BattleOnly`, 129 `Code` and 51 `Excel`. These are labels +inside the reference's own authored data, **not verification that those +features work in this project or even a runtime verification of the reference**. +Gameplay integration and Client verification remain separate work. diff --git a/docs/offline-gameplay-continuation.md b/docs/offline-gameplay-continuation.md new file mode 100644 index 0000000..39c2562 --- /dev/null +++ b/docs/offline-gameplay-continuation.md @@ -0,0 +1,198 @@ +# Offline continuation and acceptance requirements + +> Latest handoff: [ZCODE-HANDOFF.md](ZCODE-HANDOFF.md), 2026-10-24. This file +> retains chronological findings; some statuses below are superseded, including +> the user's confirmation of Aha Help, newly staged event previews and the CW +> role compatibility overlay. Use the handoff for current priorities/deployment. + +The full CW objective remains active. Additional requests do not replace it. + +The user subsequently specified that Stella Jump, activities, gacha and Aha's +Help must be handled before returning to CW. Preserve that order. + +## Offline audit round, 2026-10-24 afternoon + +With no server or game process running, both servers were rebuilt from the +latest source and deployed at 14:07 (root and `for ship`), then documented in +[ZCODE-HANDOFF.md](ZCODE-HANDOFF.md). Three source/resource changes went into +that build: the CW role-ID projection in `session.go` now also covers +`GridFightEnterBattleStageScRsp`, `GridFightEndBattleStageNotify` and +`GridFightGetArchiveScRsp` (the proto audit found no map transitively carrying +role references, and in-memory run state was already projected, so this is +defense in depth); `activity_preview.go` replaced silent first-match module +dedup with verified panel equivalence (module 1002101 legitimately spans +rerun panels 10021/10113 with an identical prefab; the published schedules are +unchanged at 12); and the stale `asset_verification_note` in +`GachaSandboxPolicy.json` now states all six captured prefab paths were +checked. No Client confirmation exists for any of this. + +Stella Jump gateway analysis from `gameserver.log`/`server_debug.log`: the +"There's still more to do…" toast attempts are InteractProp on prop entities +1035/1012 with interact_id2=1100, answered with the real prop state; the +GameBoy UI itself opened once without an interaction (case 16 data request) +and closed without a start request, so the block is a client-side condition. +`ChenLingGetDataCsReq` (9612) is sent every floor load and still dropped by +the ChenLing danger family; a populated `ChenLingGetDataScRsp` capture is the +missing evidence before it can be answered safely. + +## Latest steering and staged technique fix + +The user confirmed Aha Help appears in combat. Their next report concerned +technique points before combat, not combat skill points: Endgame rooms start +with only five usable points despite a larger team capacity. Both the initial +Endgame lineup projection and session initialization used overworld initial_mp. +Endgame lineup construction now starts at its resource-derived MaxMp, and a new +room's session technique counter uses that same capacity. Overworld initialization +and per-cast deductions are unchanged. The inspected team's existing resource cap +is seven; the reported eight-point capacity has not been independently established, +and no new cap was invented. gameserver-go.next.exe compiled with this change. +It has not replaced the live Game server, whose last log still showed an active +Battle. The user explicitly said not to run more tests or ask for another gameplay +retry, and to continue the remaining work. Do not interrupt their active Battle +to deploy this staged binary. + +## Aha Help follow-up, 2026-10-24 + +The user reported missing support in combat and a stuck web selector. Browser +inspection confirmed the open tab still ran the earlier JavaScript, and its +local static server was no longer listening. The existing local page service was +restarted, the tab reloaded, and its live Save Manager now shows enabled LV 1–3 +options. The selector now explicitly shows `FreeSR (off)` when the legacy +`enable_invasion_support` is false; the API previously returned level null, and +no override had been saved. Aha Global is a separate passive setting. + +The imported custom battle contains a Corruption buff matching the resource +invasion mapping, but the old support branch required ChallengeStageID. Support +selection now checks the outgoing battle's actual Corruption buffs after the +existing official-challenge injection. It does not inject Corruption from a +custom stage ID. Selecting a level removes other support levels before adding +one selected buff; explicit zero removes support for that Corruption battle. +Null follows the existing FreeSR switch. Selection is read afresh at battle +creation, and AHA_HELP diagnostics record the decision and sent IDs. Game and +SDK compiled and were restarted with visible consoles. The new web state is +confirmed; the user still needs to choose a level and verify the next battle. + +## Current Client capture and staged work + +### Client regression after deployment, 2026-10-24 + +After the user reopened the Client, its assembly hash was rechecked and a +bounded `AssetMgr.Exists` query checked all six captured prefab paths, without +loading them. Standard and novice returned true; all four limited character and +lightcone paths returned false. The research scripts were removed from scripts/ +after capture. Evidence is retained in +`battle_diagnostics/gacha-asset-exists-20261024.log`. Standard is now the sole +verified browsable entry in the resource policy. It has no invented featured +avatar or prize list, and its draw request returns NOT_SUPPORT. Featured draws +remain unavailable pending real installed presentation assets. The rebuilt Game +server was restarted; actual Standard page entry/exit still awaits Client retry. + +The user reported an empty Warp page followed by a black map on exit. Player.log +proves the captured Seele prefab is absent from the installed asset manifest +(`index=-1`), followed by `UIPrefabLoader._HandleLoadResult` ArgumentNullException +inside `GachaMainPage._create_pools_panel`. The earlier statement that two +captured paths represented usable banners was too strong: they are candidates, +not verified installed assets. Gacha entry now returns `RET_GACHA_NOT_SUPPORT` +when the resource policy has no verified banner prefab; DoGacha uses the same +verified set. No alternative prefab path or banner ID was invented. + +The same log contains repeated ActiveActivity ItemFactory null references and +missing RaidCollection reward icons. Additional preview schedules are withheld +through their resource policy until each dependency is validated. Existing +non-preview schedules and saves were not changed. The guarded Game executable +was built and deployed; SDK was started with its visible console as well. +Recovering a Client already stuck in the failed UI transition requires a fresh +login. The user was asked to open the Client at the normal walking screen to +check available assets; no game process was present during this repair. Neither +safe rejection in the Client nor replacement banners have been verified yet. + +The running Client was verified at runtime as a different assembly from the old +CW capture: SHA-256 `4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6`. +The module path identified the user's current installation as 4.6.54. No old +native RVAs were reused against it. Exact named FromBinary methods, their flat +dictionary consumers, and bounded getters were traced and captured separately. +`PreviewGameplayCatalog.json` contains 6 gacha basic rows, 13 Parkour rows, 181 +activity panels and 361 activity configurations. Original JSON number strings +were retained when exporting so 64-bit text hashes are not rounded. + +Stella Jump is the side-view ChenLing GameBoy game, not Parkour. All 16 case rows +are retained in `StellaJumpConfig.json`. New handlers respond with a non-null +case payload, expose its configured challenge packs, and save actual best times +and submitted completions under a separate persistent key. No synthetic best +time is stored to unlock the menu. The request CmdID for RequireChenLingGameBoyData +was independently checked in current Client native code and matches the named +revision-tagged command table. The two cheat requests still have obfuscated table +names: ANDPLLAKCLE/CDJKLJDMJHO and EMDKLICDPKK/JHEHACPKKBL. Their case-ID and +case-ID/boolean shapes are mapped to the named Client sender methods; the exact +meaning of the extra response boolean still needs Client verification. + +The gacha implementation now derives featured characters from actual captured +avatar-prefab basenames and returns that same character for each draw. The +captured basic table currently provides two character banners. This does not +establish support for a banner for every avatar. Sandbox draw counts/pricing and +duplicate handling are explicit resource policy. For the existing fully owned +roster, duplicate materials use the avatar's configured first Eidolon cost and +merge into the latest import under the common file lock. Rank, EX and Traces are +preserved. First-time acquisition for an avatar absent from the imported roster +is still rejected rather than constructing an incomplete avatar. + +Activity preview policy currently exposes two captured panel types, minigames +and ActiveActivity, with their typed data callbacks. Mini-game scores are empty +unless provided by a dedicated subsystem; this does not claim full event gameplay. +ActiveActivity's module-ID to data-ID association is an initial mapping requiring +Client confirmation. Remaining event-specific actions/rewards are incomplete. + +Aha's Help's loading bug was a frontend envelope mismatch: `/api/persistent` +returns `persistent`, but the page read `data` and returned before loading levels. +The level loader now runs independently, shows offline/API errors explicitly, +and reloads on a connection change. The actual API was observed returning LV 1–3. +The regression check exercises the real envelope, empty character cache, explicit +off and API failure; it passes. Frontend script/style cache keys were updated. + +On 2026-10-24 the user explicitly authorized rebuilding and restarting both +servers. Both builds succeeded, previous root executables were backed up under +`.runtime/before-preview-*`, and the new root Game/SDK executables were started +with visible consoles. Both processes remained running and the SDK Aha endpoint +returned LV 1–3. Focused store tests for Aha, Stella Jump and duplicate gacha +grants pass. Client unlocks, event screens and gacha animations remain unverified. + +## Implemented, awaiting Client verification + +Aha's Help has a resource-backed level selector, independent persistent setting, +SDK endpoint and GaC-Srtool control. Values are from the user's supplied screenshot, +not a claim of a freshly captured Client table. Existing stage-invasion detection +gates the buff. Explicit off and resetting to the FreeSR setting are supported. +Reads do not write, and targeted writes preserve other persistent sections. + +The focused persistence test passes, both executables compile, and srtool JavaScript +passes syntax checking. The broader common and SDK test packages pass. The game +server package has failures resolving resources in relic, scene and smoke tests; +there is no claim that the whole test suite passes or that Client gameplay works. + +CW equipment Forge use and grants for Orb/consumable/Forge are implemented. +Automatic Orb drops, opening Orbs, consumable effects, Tea Break choices and full +later-room progression remain incomplete. + +## Offline findings and remaining requests + +- Reward comparison: 347 of 478 captured Client combination rows match the older + reference by ID and both arrays. The reference has 372 combination rows and 966 + basic bonus rows; only 276 of 529 captured Orbs point directly to those basic + rows. Do not promote the entire older reward table as current Client data. +- Stella Jump: all stages should be selectable and playable. No current stage + catalog was located in this repository. Parkour request schemas exist, but that + alone does not prove Stella Jump uses that subsystem or identify unlock fields. +- Activities: expose event pages and enough entry/data handlers for preview; + complete reward/gameplay simulation was not requested. The current schedule + handler deliberately exposes only Endgame/CW, and there is no generic event + data implementation. Avoid publishing every ActivityConfig row with empty + replies that leave the Client waiting. +- Gacha: one character per selectable banner, with each draw matching the displayed + character. Current code hardcodes a standard banner and alternates unrelated + result IDs. A matching Client banner-to-character table is still required; + the older reference's Banners.json is not proof of current banner assets. +- Aha's Help: verify LV 1/2/3, off, legacy fallback, challenge-only application, + and that changing the setting during battle affects the next battle only. + +Keep all research probes outside scripts while the game is not being inspected. +No Client gameplay confirmation has been requested during this offline work. diff --git a/docs/ping-colors.md b/docs/ping-colors.md new file mode 100644 index 0000000..6fbc9e9 --- /dev/null +++ b/docs/ping-colors.md @@ -0,0 +1,34 @@ +# Ping colors + +Maintained script: `scripts/ping_rainbow.lua`; included in the self-contained +Game/SDK builds through `assets_ship.go`. Root servers read the external script +on heartbeat, so a live fix does not require restarting the server or game. + +## Current behavior and confirmation + +The user confirmed on 2026-10-26 that signal/text colors now match and changing +ping digits no longer flicker. The initial three-slice version was confirmed +to show all signal bars, but its original tinted texture darkened the colors +and writing rich text caused a flash whenever native latency changed. + +The maintained version uses a tiny white-RGB mask with the signal sprite's +original alpha. It crops only the named NetStatusPanel signal icon from its +atlas once on creation, not the whole UI. Three UV slices color each bar +independently. The background and native connectivity state remain unchanged. + +Text keeps the real Client latency string. The canvas callback colors the +native TextGenerator glyph vertices instead of replacing the string with +color tags. This removes the native-setter/rich-text race. Current Client +capture proves `10ms` has sixteen populated vertices; no presumed trailing +quad is discarded. CanvasRenderer.GetMesh is unavailable in this engine, so +the current path uses the retained native generator and SetMesh. + +Only the named walking/Battle latency widgets are targeted. No global Canvas, +world camera, server-name watermark or unrelated UI is modified. Lifecycle +cleanup restores owned components and disposes generated textures/meshes. +Research capture scripts stay in `tools/`, not `scripts/`. + +Runtime evidence is retained under `battle_diagnostics/ping-colors-20261026/`. +The walking widget is Client-confirmed; Battle has the existing exact path +but was not separately exercised during this confirmation. Lua syntax checking +and shipping compilation are separate from that visual confirmation. diff --git a/docs/prydwen-endgame-recommendations.md b/docs/prydwen-endgame-recommendations.md index 3fc74a4..239f03f 100644 --- a/docs/prydwen-endgame-recommendations.md +++ b/docs/prydwen-endgame-recommendations.md @@ -1,9 +1,11 @@ # Endgame team recommendations -`GetFriendRecommendLineup` (CmdID 2985 from the checked-in 4.6.53 command table) now returns three recommended teams for the current MoC floor-12 snapshot. The response uses the `OJJJDPNOKHG.lineup_list` shape because its repeated `ChallengeLineupList` entries match the three stage rows in the referenced Client page. Each external character slug is resolved through the current `resources/AvatarConfig.json`; the server does not embed AvatarIDs in its handler. +`GetFriendRecommendLineup` (CmdID 2985 in the checked-in Client 4.6.53 command table) serves current Prydwen team snapshots for Memory of Chaos, Pure Fiction, Apocalyptic Shadow, and Anomaly Arbitration. Each source slug is resolved through this Client's `resources/AvatarConfig.json`, with source-name aliases kept beside the snapshot. The AA response uses the Peak-lineup protocol variant and obtains Peak IDs from `ChallengePeakGroupConfig.json`; it does not embed the current game's IDs in the handler. -The bundled snapshot is dataset revision 4.6.2, collected 2026-10-14, for MoC cycle 4.6.1 “Crossing the Afterlife”. The files identify the first-ranked Prydwen team for stages 12-1, 12-2, and 12-3. The dataset repository declares MIT and asks users to credit LvlUrArti; its README says it contains processed data shown on Prydwen. Attribution and source metadata are kept in `resources/PrydwenEndgameTeams.json`. +The bundled data is revision 4.6.2, collected 2026-10-14. Each mode retains its own challenge version/name because their cycles do not necessarily advance together. Data is processed from the MIT-licensed [LvlUrArti/MocDataProcessed dataset](https://huggingface.co/datasets/LvlUrArti/MocDataProcessed), which describes its contents as processed Prydwen data and requests credit to LvlUrArti. -To refresh for another floor and the newest published snapshot, run `python tools/update_prydwen_endgame_teams.py --floor 12 --stage-count 3`. The updater validates every slug against this Client's AvatarConfig before replacing the snapshot; add a source-slug-to-AvatarVOTag alias in the resource if a name differs. +Refresh all modes from the latest dataset snapshot with `python tools/update_prydwen_endgame_teams.py`. To refresh only one mode, use `--mode moc`, `--mode pf`, `--mode as`, or `--mode aa`. The updater selects the highest-ranked team whose four character slugs resolve against this Client's `AvatarConfig`; this avoids emitting avatar IDs that the running Client does not define. -Protocol limitation: the current proto retains an obfuscated `JFNJKAPPNOF` enum and obfuscated response oneof names. The handler echoes the request `type` and `key`, and uses the lineup-list variant based on the visible three-row MoC UI and the message's repeated lineup schema. The exact numeric type-to-mode relationship and the meaning of response field `ALDBIIIGLOM` are not established. This first implementation does not discriminate modes using `type` or `key`, so it is limited to the illustrated MoC page and needs in-Client verification before claiming support for other Endgame modes or the friend-cleared tab. +Protocol limitation: `GetFriendRecommendLineupCsReq.type` is the obfuscated `JFNJKAPPNOF` enum in this Client's protobuf. The mapping 2=MoC, 3=PF, 4=AS, and 5=AA is an explicit implementation assumption; the checked-in schema does not reveal the enum names, and we do not have packet captures from each Client page to confirm those values. The mapping is centralized in `resources/PrydwenEndgameTeams.json`, and unknown values receive an empty response with the request context preserved instead of MoC data. The handler logs the received type/key to support Client-side verification. AA `key` matching also remains an assumption: known Peak resource IDs are matched directly, and otherwise the latest configured group is paired with the bundled current AA snapshot. + +The response shapes follow the checked-in protobuf: the current three-stage MoC/PF/AS pages use `OJJJDPNOKHG.lineup_list`; AA uses `MJMGDLJAJCM` entries with `peak_id` and avatar lists. These server tests verify resource conversion and protobuf round trips; a successful build does not confirm the live Client accepted every mode's obfuscated route or UI response. diff --git a/docs/ungrouped-proto-guide.md b/docs/ungrouped-proto-guide.md new file mode 100644 index 0000000..5c33206 --- /dev/null +++ b/docs/ungrouped-proto-guide.md @@ -0,0 +1,290 @@ +# Ungrouped.proto — คู่มือจัดกลุ่ม message + +## อ่านไฟล์นี้อย่างไร + +นี่คือ schema ของ Protobuf ที่ใช้กำหนดรูปแบบข้อมูลระหว่าง Client กับ Server ไม่ใช่ไฟล์ config และไม่ได้บอกวิธีทำงานของ handler เอง + +- `CsReq` คือคำขอจาก Client, `ScRsp` คือคำตอบจาก Server, `ScNotify` คือข้อความแจ้งจาก Server; `Rsp` คือ response เช่นกัน +- เลขหลัง `=` คือ Protobuf field tag; คอมเมนต์ `offset:` เป็น metadata จาก dump ไม่ใช่ CmdID +- `Ungrouped.proto` ไม่มี CmdID และไม่มีป้าย protocol revision จึงห้ามใช้ไฟล์นี้เดาเลข route/handler + +## ผลเทียบกับ GaC + +- ไฟล์ต้นทางมี 203 top-level messages และ 5 enums +- ชื่อ message 141 รายการมีอยู่แล้วใน `StarRail.proto`; เพิ่ม schema ที่ขาด 62 รายการกับ enum ที่ขาด 1 รายการไว้ใน `protocol/proto/ungrouped.proto` +- เพิ่ม `KVP` (uint32 value (tag 3), uint32 key (tag 9)) ซึ่งไฟล์ต้นทางอ้างผ่าน `Common.proto` แต่ dependency นั้นไม่ได้แนบมา +- schema ที่เพิ่มไม่มี CmdID comment และยังไม่ได้ผูก packet handler; การเทียบกับ source อื่นพบว่า body/field tags ใช้ตรวจโครงสร้างได้ แต่ CmdID ต่างกันได้ + +ตรวจ signature ของ 203 message กับ `AstralOS/crates/morax/src/StarRail.proto` ที่ checkout revision `abf2fd8fc07711432bac878d44f151f041311f24` แล้ว field types/tags ตรงกันทั้งหมด อย่างไรก็ตาม revision ของไฟล์ต้นทางที่แนบมาไม่ระบุ จึงใช้ reference นี้ยืนยันรูปร่าง schema เท่านั้น ไม่ใช้ย้าย CmdID + +ตัวอย่างความต่างของ CmdID: `B51RacingGetDataCsReq` ในตาราง GaC ปัจจุบันเป็น 9995 แต่ source AstralOS revision ข้างต้นระบุ 9990 จึงไม่คัดลอก ID ข้ามตาราง + +## กลุ่มที่อ่านความหมายได้จากชื่อ + +### B51 Racing (37 messages) + +ชุดข้อมูลและคำสั่งของกิจกรรมแข่งรถ: รถ/ลายรถ/คนขับ/ชิ้นส่วน/การพัฒนา/รอบแข่ง. + +- `B51RacingAgendaInfo` — เพิ่ม schema แล้ว +- `B51RacingCarDisplay` — เพิ่ม schema แล้ว +- `B51RacingCarLivery` — เพิ่ม schema แล้ว +- `B51RacingCarLiveryCsReq` — เพิ่ม schema แล้ว +- `B51RacingCarLiveryScRsp` — เพิ่ม schema แล้ว +- `B51RacingChallengeCarData` — เพิ่ม schema แล้ว +- `B51RacingChallengeData` — เพิ่ม schema แล้ว +- `B51RacingChallengeEndMatchCsReq` — เพิ่ม schema แล้ว +- `B51RacingChallengeEndMatchScRsp` — เพิ่ม schema แล้ว +- `B51RacingChallengeStartMatchCsReq` — เพิ่ม schema แล้ว +- `B51RacingChallengeStartMatchScRsp` — เพิ่ม schema แล้ว +- `B51RacingChallengeUpdateCarCsReq` — เพิ่ม schema แล้ว +- `B51RacingChallengeUpdateCarScRsp` — เพิ่ม schema แล้ว +- `B51RacingCycleData` — เพิ่ม schema แล้ว +- `B51RacingDevelopmentInfo` — เพิ่ม schema แล้ว +- `B51RacingDriverUnlockScNotify` — เพิ่ม schema แล้ว +- `B51RacingEndMatchCsReq` — เพิ่ม schema แล้ว +- `B51RacingEndMatchScRsp` — เพิ่ม schema แล้ว +- `B51RacingGetDataCsReq` — มี schema เดิมใน `StarRail.proto` +- `B51RacingGetDataScRsp` — มี schema เดิมใน `StarRail.proto` +- `B51RacingMatchInfo` — เพิ่ม schema แล้ว +- `B51RacingMatchStats` — เพิ่ม schema แล้ว +- `B51RacingMissionChangeAgendaScNotify` — เพิ่ม schema แล้ว +- `B51RacingPartInfo` — เพิ่ม schema แล้ว +- `B51RacingPreMatchTrackInfo` — เพิ่ม schema แล้ว +- `B51RacingReplacePartScRsp` — เพิ่ม schema แล้ว +- `B51RacingSelectDevelopActionCsReq` — เพิ่ม schema แล้ว +- `B51RacingSelectDevelopActionScRsp` — เพิ่ม schema แล้ว +- `B51RacingSelectDevelopPartCsReq` — เพิ่ม schema แล้ว +- `B51RacingSelectDevelopPartScRsp` — เพิ่ม schema แล้ว +- `B51RacingSetDriverCsReq` — เพิ่ม schema แล้ว +- `B51RacingSetDriverScRsp` — เพิ่ม schema แล้ว +- `B51RacingStartCycleCsReq` — เพิ่ม schema แล้ว +- `B51RacingStartCycleScRsp` — เพิ่ม schema แล้ว +- `B51RacingStartMatchCsReq` — เพิ่ม schema แล้ว +- `B51RacingStartMatchScRsp` — เพิ่ม schema แล้ว +- `B51RacingStatInfo` — เพิ่ม schema แล้ว + +### Expedition Battle (16 messages) + +ข้อมูลแผนที่ เส้นทาง ทีม เริ่มต่อสู้ และสรุปผลของ Expedition Battle. + +- `ExpeditionBattleAvatarDamage` — เพิ่ม schema แล้ว +- `ExpeditionBattleAvatarInfo` — เพิ่ม schema แล้ว +- `ExpeditionBattleEndScNotify` — เพิ่ม schema แล้ว +- `ExpeditionBattleFunRecord` — เพิ่ม schema แล้ว +- `ExpeditionBattleLevelRecord` — เพิ่ม schema แล้ว +- `ExpeditionBattleLineup` — เพิ่ม schema แล้ว +- `ExpeditionBattleMapData` — เพิ่ม schema แล้ว +- `ExpeditionBattleRouteRecord` — เพิ่ม schema แล้ว +- `ExpeditionBattleRouteSettleInfo` — เพิ่ม schema แล้ว +- `ExpeditionBattleSetLineupCsReq` — เพิ่ม schema แล้ว +- `ExpeditionBattleSetLineupScRsp` — เพิ่ม schema แล้ว +- `ExpeditionBattleSettleScNotify` — เพิ่ม schema แล้ว +- `ExpeditionBattleStartCsReq` — เพิ่ม schema แล้ว +- `ExpeditionBattleStartScRsp` — เพิ่ม schema แล้ว +- `GetExpeditionBattleDataCsReq` — เพิ่ม schema แล้ว +- `GetExpeditionBattleDataScRsp` — เพิ่ม schema แล้ว + +### Blind Box (7 messages) + +อ่าน/เปิด/รีเซ็ตตำแหน่งกล่อง และการแจ้งการแลกเปลี่ยน. + +- `BlindBoxGetDataCsReq` — มี schema เดิมใน `StarRail.proto` +- `BlindBoxGetDataScRsp` — มี schema เดิมใน `StarRail.proto` +- `BlindBoxOpenBoxCsReq` — มี schema เดิมใน `StarRail.proto` +- `BlindBoxOpenBoxScRsp` — มี schema เดิมใน `StarRail.proto` +- `BlindBoxResetPoolPositionCsReq` — เพิ่ม schema แล้ว +- `BlindBoxResetPoolPositionScRsp` — เพิ่ม schema แล้ว +- `BlindBoxTradeChangeScNotify` — มี schema เดิมใน `StarRail.proto` + +### Badge (2 messages) + +ข้อมูลและการแจ้งเปลี่ยน Badge. + +- `BadgeInfoScNotify` — มี schema เดิมใน `StarRail.proto` +- `GetBadgeInfoScRsp` — มี schema เดิมใน `StarRail.proto` + +### Social Play (15 messages) + +ข้อมูลห้อง เจ้าของห้อง ผู้เยี่ยมชม แชต การเคลื่อนไหว และ operation ในห้อง. + +- `SocialPlayGameplayOperationScNotify` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayGetDataCsReq` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayGetDataScRsp` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayGetOnlineRoomDataCsReq` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayGetOnlineRoomDataScRsp` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayGetOwnerRoomDataCsReq` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayGetOwnerRoomDataScRsp` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayPreCheckEnterRoomCsReq` — เพิ่ม schema แล้ว +- `SocialPlayPreCheckEnterRoomScRsp` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayQueryRecentVisitorsCsReq` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayQueryRecentVisitorsScRsp` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayRoomPlayerMoveScNotify` — มี schema เดิมใน `StarRail.proto` +- `SocialPlaySettingInfoScNotify` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayTalkCsReq` — มี schema เดิมใน `StarRail.proto` +- `SocialPlayTalkScRsp` — มี schema เดิมใน `StarRail.proto` + +### Pet Marble (6 messages) + +ข้อมูลเกม Pet Marble, trial และเริ่ม/ซิงก์ด่าน. + +- `PetMarbleGetCycleTrialPetsCsReq` — มี schema เดิมใน `StarRail.proto` +- `PetMarbleGetCycleTrialPetsScRsp` — มี schema เดิมใน `StarRail.proto` +- `PetMarbleGetDataCsReq` — มี schema เดิมใน `StarRail.proto` +- `PetMarbleGetDataScRsp` — มี schema เดิมใน `StarRail.proto` +- `PetMarbleLevelBeginScRsp` — มี schema เดิมใน `StarRail.proto` +- `PetMarbleSyncDataScNotify` — มี schema เดิมใน `StarRail.proto` + +### Pet Park (2 messages) + +คำขอปรับแต่ง Pet Park. + +- `PetParkDiyCsReq` — มี schema เดิมใน `StarRail.proto` +- `PetParkDiyScRsp` — มี schema เดิมใน `StarRail.proto` + +### Finality Battle (2 messages) + +คำขอเริ่มด่านต่อสู้ Finality และผลตอบกลับ. + +- `StartFinalityBattleLevelCsReq` — มี schema เดิมใน `StarRail.proto` +- `StartFinalityBattleLevelScRsp` — มี schema เดิมใน `StarRail.proto` + +### Voracity Invasion (3 messages) + +อ่านข้อมูลและรับ notification ของ Voracity Invasion. + +- `GetVoracityInvasionDataScRsp` — มี schema เดิมใน `StarRail.proto` +- `VoracityInvasionChangeScNotify` — มี schema เดิมใน `StarRail.proto` +- `VoracityInvasionGetDataCsReq` — เพิ่ม schema แล้ว + +### Private Order (2 messages) + +คำขอประกาศ private order และผลตอบกลับ. + +- `PublishPrivateOrderCsReq` — มี schema เดิมใน `StarRail.proto` +- `PublishPrivateOrderRsp` — มี schema เดิมใน `StarRail.proto` + +### Enum ที่เพิ่ม + +- `GGLMGBPOCOP`: ค่า `GGLMGBPOCOP_BMKFIMEJPOM=0`, `GGLMGBPOCOP_MLOGJAKGHHD=1`, `GGLMGBPOCOP_ILMKHLENPNI=2`; ชื่อสมาชิกยัง obfuscated จึงยังบอกความหมายเชิงเกมไม่ได้ + +## ข้อความที่ยัง obfuscated + +เหลือ 111 message ที่ชื่อเป็นรหัส ไม่มีชื่อ feature ที่ยืนยันได้ใน schema จึงไม่ตั้งชื่อความหมายเอง รายการด้านล่างบอกเฉพาะโครงสร้างและชนิดที่ message อื่นอ้างถึง: + +- `AAOAEMOHCEP` — fields: OHMBEPHEBDJ:uint32#2, progress:uint32#8; ถูกอ้างจาก: `FOEPMKFEJMK` +- `ABGMGHNOONM` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `ADDMKOIFOEF` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `AFAIGBNOCJB` — fields: info:FOEPMKFEJMK#12; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `AFKFJCPELEM` — fields: NGPBPFKGNLI:uint32#4, retcode:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `AHBLKPAJDPI` — fields: CHILKFNAINA:uint32#13, LBMGKCMHKLN:uint32#14, HEMOHFJJMJG:uint32#15; ถูกอ้างจาก: `BlindBoxOpenBoxCsReq` +- `ALAMOHABJIP` — fields: ILBFMJKABFO:uint32#4, JPPMEKJGJFD:uint32#10, LLNNOPDLLED:uint32#11, GNFDFIIKJHI:uint32#14; ถูกอ้างจาก: `HPJONNDENCB`, `PPFAMGCOOFP` +- `AOBDHCFGGBH` — fields: design_level:uint32#3, DLDELBKOMDK:uint32#4, retcode:uint32#7, AFMDPIAFPNF:uint32#8, EIFICNFGGHI:uint32#9, LAOPAGMAAHD:uint32#11, OOIMHIJFHDI:uint32#12, PDNHGNDAHBA:uint32#14, FDGKBOIEHBD:uint32#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `BACPIBIJPPH` — fields: retcode:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `BDOBLDOOICE` — fields: EPENKGKBOAP:uint32#7, end_time:int64#8; ถูกอ้างจาก: `PetMarbleGetCycleTrialPetsScRsp` +- `BHJEBMOOJED` — fields: KJPFENPNFBP:ItemList#12; ถูกอ้างจาก: `BlindBoxOpenBoxScRsp` +- `BMJHNDBOPLC` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `BNKDEHGIJMH` — fields: LLCHGCNFOJJ:JCAHAPMBCOC#15, IKMADODLNJD:PACMGHKKGKN#2, EPLGOGFAHDM:ONJIANLPDBE#9, PPNNPIGCHOL:FJEMMEGKKHE#11; ถูกอ้างจาก: `HMLFGDFLIBP` +- `BODEMOLDHAA` — fields: teleport_id:uint32#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `BPMFHIHNEHH` — fields: ENGHMIAMPLG:ItemList#9, retcode:uint32#12, info:FOEPMKFEJMK#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `CCLIGKFAHJI` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `CDLFFHOHAIH` — fields: FIEOPKNBHKJ:uint64#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `CEAPCHBBOFN` — fields: MBIAIMKHNDB:bool#2, uid:uint32#11; ถูกอ้างจาก: `MIECIEKKIMJ` +- `CHNMJPLALEC` — fields: retcode:uint32#3, MJNENEAAOAE:uint64#5; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `CJIFMPGCOOC` — fields: AALLJKILLKM:DLDPJEILCDB#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `COPLCPBANMD` — fields: FODBOPBEALE:PDFEPMMIKDF#13; ถูกอ้างจาก: `PetMarbleGetDataScRsp`, `PetMarbleSyncDataScNotify` +- `CPCHHBHCGOO` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `DCNIDBKPPCK` — fields: IKJOGIDIBPK:uint64#1, retcode:uint32#6, order_list:NMEGIPHFFDA#9; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `DJIHNCHDFED` — fields: retcode:uint32#5; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `DLDPJEILCDB` — fields: HJAMPKPCKEB:string#1, KMGONPNDONA:string#2, DHPIFLNBLNM:string#3, ACLHGDDNNLK:string#4, CAGPHEEGOAC:string#5, DNDHBFOKAEA:string#6, ACMLHNNMBBN:string#7, FFCDKLBFKJM:string#8, DALMLLPIFNP:string#9, EFGMHCEIJGO:string#10, PFDNBIDFDMH:string#11, BLBAIBEBIAL:string#12, KNAKEKLCFDH:string#13, GECJPIMLHIM:string#14, JHKJKKGLAHE:string#15, GOOLPABLPBF:string#1297, LOKOLODKAAM:string#1369; ถูกอ้างจาก: `CJIFMPGCOOC` +- `DNHFLGJJKHN` — fields: order_list:NMEGIPHFFDA#10, IKJOGIDIBPK:uint64#11; ถูกอ้างจาก: `OIJOHMLIEII` +- `DPOGMNFCMNN` — fields: order_list:NMEGIPHFFDA#5, retcode:uint32#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `EBGAMBKHDBO` — fields: IAJHCHOJHNN:uint32#14, type:uint32#3, NLIHHAKFEDB:bool#607, GGBGEJIIKFN:BEGIDCPIPBG.MDNMHBPMJFD#155; ถูกอ้างจาก: `GetVoracityInvasionDataScRsp` +- `ELNAIJEFGMK` — fields: NMELIDCDKAK:uint32#5; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `FAKNKCAOHON` — fields: FIEOPKNBHKJ:uint64#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `FDCJIIKHHHB` — fields: retcode:uint32#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `FGLAJHMCJLL` — fields: expire_time:int64#10, EIKLMFPMJJD:uint32#12; ถูกอ้างจาก: `JEGMGPOFHGG` +- `FIJJHJADLLM` — fields: retcode:uint32#5, DODHMIDBNHC:NPLMMCGAJDF#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `FJEMMEGKKHE` — fields: KIEBAPFGCCN:uint32#7; ถูกอ้างจาก: `BNKDEHGIJMH` +- `FJKEGMEPLDI` — fields: CPPBNJLABGE:HKHKEMHCHEB#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `FKPKLHICPFO` — fields: LENMCGCGBOA:uint32#7, retcode:uint32#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `FMOEINGLFGG` — fields: FLKIEILIBJA:PGLBKDELHJK#4, OGOCOFPHIIK:FODAGGODIJM#1; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `FODAGGODIJM` — fields: FLBOPEJIGJF:uint32#5, DGONPFLCOMO:uint32#7; ถูกอ้างจาก: `FMOEINGLFGG` +- `FOEPMKFEJMK` — fields: LNLDJDODOIL:uint32#5, available_count:uint32#7, CLGMOPPOGGC:uint32#8, OMNDNGDEEGL:AAOAEMOHCEP#11; ถูกอ้างจาก: `AFAIGBNOCJB`, `BPMFHIHNEHH`, `OMEAEOLPGGM` +- `GNBOBLNFEHI` — fields: FIEOPKNBHKJ:uint64#9; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `HAHEOGIBNHL` — fields: MJNENEAAOAE:uint64#10, retcode:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `HAIFIDAHGJG` — fields: JIPPNPILKDJ:HHCNMGNAIBG#14; ถูกอ้างจาก: `SocialPlayGetDataScRsp` +- `HFHGPMCHDGL` — fields: BHBJFFMACFD:uint32#1, OLGCOBHGDCD:HIMPJFMPEPA#2; ถูกอ้างจาก: `HHCNMGNAIBG` +- `HHCNMGNAIBG` — fields: DANNIDIPFAL:HFHGPMCHDGL#1; ถูกอ้างจาก: `HAIFIDAHGJG`, `LLKIFBFCMLK`, `PetParkDiyScRsp`, `SocialPlayGameplayOperationScNotify` +- `HHJLCGGEHPB` — fields: PLPPPCEPBDO:uint32#1, KFACPOBAAGM:int64#7, CILGIDDHODG:PlayerSimpleInfo#14; ถูกอ้างจาก: `SocialPlayQueryRecentVisitorsScRsp` +- `HKHKEMHCHEB` — fields: NECCJMBJNEN:uint32#4, HECCOBFBJFI:uint32#5; ถูกอ้างจาก: `FJKEGMEPLDI` +- `HLJINHODOPP` — fields: order_list:NMEGIPHFFDA#3, retcode:uint32#6; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `HMACEHDGGHB` — fields: BJPHDKEBOBK:IKAHKMNCFDN#1, HBKEPFKDAMI:uint32#2, CMHKFNFKGOI:int64#3; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify` +- `HMLFGDFLIBP` — fields: DGNGMJMPFGK:BNKDEHGIJMH#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `HPJONNDENCB` — fields: EEFLBHGIAAN:ALAMOHABJIP#4, OFNDFACDNOC:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `IAKKHBENIOL` — fields: retcode:uint32#9; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `IFEEMEAJMEJ` — fields: ODNGMIJLKKA:uint32#1, ENGJIMIHCHJ:PFNJCDINMLA#2, EGECDHIHFHF:OELLEKNNEMK#3; ถูกอ้างจาก: `JBJNJPAOCDA` +- `IKBDJLNEPBH` — fields: HFLOPHNBKGN:PEEEEGAPCOK#1; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify` +- `ILBLJAFMBBK` — fields: FIEOPKNBHKJ:uint64#6; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `IMDEBPDKCAJ` — fields: MJNENEAAOAE:uint64#5, retcode:uint32#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `IOPNJIOPAFI` — fields: filter:MMBIBKFEFNG#13, ADPEKIOPFKG:GGLMGBPOCOP#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `JBJNJPAOCDA` — fields: uid:uint32#1, OJPDDAOJJKC:bool#2, NJDCPMENIFG:JOLAHHGIFHA#3, AIMNJIMDIKM:int64#4, AJIPBLCIONL:PlayerSimpleInfo#5, DCFKJCMODKJ:IFEEMEAJMEJ#6, LHLKJIDFLIN:CBPDACMBHGL#7; ถูกอ้างจาก: `POBLGKIGINE`, `SocialPlayGameplayOperationScNotify`, `SocialPlayGetDataScRsp` +- `JCAHAPMBCOC` — fields: EJHKAHEGCDC:uint32#8; ถูกอ้างจาก: `BNKDEHGIJMH` +- `JCIPKHCJLBM` — fields: retcode:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `JDNHIMDLIHH` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `JEGMGPOFHGG` — fields: CPMCCCODGAB:FGLAJHMCJLL#3; ถูกอ้างจาก: `BadgeInfoScNotify`, `GetBadgeInfoScRsp` +- `JGAMELLGLGE` — fields: NJDCPMENIFG:JOLAHHGIFHA#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `JKILAALMFIB` — fields: retcode:uint32#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `JLMKPMCDOKC` — fields: CLGMOPPOGGC:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `JNDBILOGFAF` — fields: FBDIGGDLDCP:MNGADDFICJF#1, FLBOPEJIGJF:uint32#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `JOLAHHGIFHA` — fields: pos:Vector#1, rot:Vector#2, ICNANKMDJIC:float#3, GHMKFMBDKNE:Vector#4, GHEMGLKGKLC:float#5, FPHBEHJJBIA:uint32#6, MGIOLDGHPMA:bool#7, time_stamp:int64#8; ถูกอ้างจาก: `JBJNJPAOCDA`, `JGAMELLGLGE`, `MHNNEFBOPIE` +- `JPAOIPLDKHB` — fields: BJPHDKEBOBK:IKAHKMNCFDN#1, NLJBJMDPBGN:BFAKMCIJFCB#2, DBIKJPDBMOE:int64#3, CMHKFNFKGOI:int64#4, HBKEPFKDAMI:uint32#5, GAEKEFEKCBD:uint32#6; ถูกอ้างจาก: `PBMDEBCGNMD` +- `JPPCNOGIMFD` — fields: DHAKONBPFMC:uint32#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `KKACLNNMMAM` — fields: EIHOECKBDOH:uint32#7, BPAOGJPLENJ:uint32#14, JMAODNEONPF:bool#15; ถูกอ้างจาก: `KPBCIIFIAGI` +- `KPBCIIFIAGI` — fields: CMHKFNFKGOI:int64#1, KABGCGENKLK:CGLJLBDFNBK#2, NIELDCLPOLA:JOFHMCJPBCE#4, BJPHDKEBOBK:IKAHKMNCFDN#5, NLJBJMDPBGN:BFAKMCIJFCB#6, CEMFBJPOLNP:PJFIMFJPMCN#7, NAIFOMCLGLN:ONAADAJBLEB#8, JIELLGELABA:KKACLNNMMAM#9, KBEGMPBAJIL:uint32#11; ถูกอ้างจาก: `SocialPlayGetDataScRsp` +- `LLKIFBFCMLK` — fields: JIPPNPILKDJ:HHCNMGNAIBG#1; ถูกอ้างจาก: `POBLGKIGINE` +- `LMOILOPJKCB` — fields: retcode:uint32#2; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `LNAAACICHPG` — fields: pet_id:uint32#1, NDMHOKEGOAP:uint32#11, ONMDDKGCEHK:uint64#13; ถูกอ้างจาก: `NMEGIPHFFDA` +- `LPJFNJAJIGM` — fields: FIEOPKNBHKJ:uint64#13, ONMDDKGCEHK:uint64#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `MENCBJMOEML` — fields: FIEOPKNBHKJ:uint64#12; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `MFCCCIMGMFL` — fields: pool_id:uint32#1, POONFMJAFDH:uint32#3, end_time:int64#7, GOJBGCEEEHK:string#11, JPLIJJFCAOO:int64#14; ถูกอ้างจาก: `BlindBoxGetDataScRsp` +- `MGFJDLIBABO` — fields: JPPKLEIPKAN:BattleEndStatus#6, PLAPNCJJAOP:NPLMMCGAJDF#11, ELHJAMKKKLH:bool#12; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `MHNNEFBOPIE` — fields: op_uid:uint32#1, JENKGODEIOM:JOLAHHGIFHA#2; ถูกอ้างจาก: `SocialPlayRoomPlayerMoveScNotify` +- `MIECIEKKIMJ` — fields: retcode:uint32#2, CAFBDEDFBOL:CEAPCHBBOFN#3; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `MIKGMGBHLEN` — fields: message_text:string#1, extra_id:uint32#2; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify`, `SocialPlayTalkCsReq`, `SocialPlayTalkScRsp` +- `MKGODFLGEAM` — fields: level:uint32#2, LLKGDLAFODJ:string#5, head_icon:uint32#6, AGABADPIGGK:bool#8, uid:uint32#15; ถูกอ้างจาก: `NMEGIPHFFDA` +- `MLNNHJKKMNC` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `MMBIBKFEFNG` — fields: FMHBALCGMFF:bool#3, PODLFMBEKEG:uint32#9; ถูกอ้างจาก: `IOPNJIOPAFI` +- `MNGADDFICJF` — fields: ENPNDBIBPLE:uint32#1, PANMEBACIBF:bool#2, rotation:uint32#3, x:uint32#8, y:uint32#11; ถูกอ้างจาก: `JNDBILOGFAF`, `NPMOBJOCIAF`, `PGLBKDELHJK` +- `MNGELOJBJGC` — fields: retcode:uint32#7, FMACGJBHLPF:uint32#10, order_list:NMEGIPHFFDA#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `MNLLCNFNKKP` — fields: IMGDMDDKHDL:uint32#1, LALKFADHJJL:uint32#5, FMCCHBBIJKF:ODLEEMAALIP#6, GBJEALNCMJC:uint32#7, HCMKEFPFEDH:bool#8, IIIAGPNGPJM:ODLEEMAALIP#9, mode:uint32#12, OFNINJLHHDE:ODLEEMAALIP#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `NLBAOLFBEGB` — fields: retcode:uint32#3, LLLOIIKOCEN:PPELMHMMCHP#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `NMEGIPHFFDA` — fields: AMGLECMANAH:LNAAACICHPG#1, LFOIKMFLNKJ:PEHEBABHPBH#2, EFKJFADLLIA:MKGODFLGEAM#6, FIEOPKNBHKJ:uint64#7, expire_time:uint64#8, NDHBAFMMFBC:OHAPBJANBDE#10, KDBMGCMEOFL:uint64#11, DCKKGALHFNO:uint64#12, DAMCKNHKDOA:LNAAACICHPG#13, DFAACJDIFBL:MKGODFLGEAM#15; ถูกอ้างจาก: `DCNIDBKPPCK`, `DNHFLGJJKHN`, `DPOGMNFCMNN`, `HLJINHODOPP`, `MNGELOJBJGC` +- `NPLMMCGAJDF` — fields: DFFPHJJIHFJ:uint32#2, LAPLGJOBGAN:uint32#4, remaining_round:uint32#12, level_id:uint32#14; ถูกอ้างจาก: `FIJJHJADLLM`, `MGFJDLIBABO` +- `NPMOBJOCIAF` — fields: DGONPFLCOMO:uint32#11, FBDIGGDLDCP:MNGADDFICJF#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `OAOONIMHKLA` — fields: retcode:uint32#1; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `ODHFCEALPFN` — fields: IIIAGPNGPJM:ODLEEMAALIP#1, JJPLIMAENEB:uint32#3, JNBIALMKFCL:uint32#5, FMCCHBBIJKF:ODLEEMAALIP#7, OFNINJLHHDE:ODLEEMAALIP#9, LLMLOGNFFCD:bool#10, mode:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `ODLEEMAALIP` — fields: AOLIEDBCNBN:uint32#1, hp:sint32#4, KNDIIBJEIDG:uint32#6, NDMHOKEGOAP:uint32#7, OLANKLPCBEG:uint32#9, atk:uint32#10, AGKNBANFLIB:KVP#11, MDKFLGDEJCN:uint32#12; ถูกอ้างจาก: `MNLLCNFNKKP`, `ODHFCEALPFN` +- `OELLEKNNEMK` — fields: OLGCOBHGDCD:HIMPJFMPEPA#1, CGBJOAJEMKN:uint32#2; ถูกอ้างจาก: `IFEEMEAJMEJ` +- `OIJOHMLIEII` — fields: EPHIIBNCCJG:DNHFLGJJKHN#15; ถูกอ้างจาก: `BlindBoxTradeChangeScNotify` +- `OKCAJHKCJDE` — fields: JDFJJOKDIKC:uint32#2, OBLOEMJOFEE:uint32#4, AFFLDMFBGEH:uint64#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `OMEAEOLPGGM` — fields: HNFFFDEGOEB:FOEPMKFEJMK#8, retcode:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `ONAADAJBLEB` — fields: DBIKJPDBMOE:int64#11, ONOHPMDGNNH:uint32#14; ถูกอ้างจาก: `KPBCIIFIAGI` +- `ONJIANLPDBE` — fields: LEJEBBCKPCI:uint32#9; ถูกอ้างจาก: `BNKDEHGIJMH` +- `PACMGHKKGKN` — fields: IEOAHLNBBBB:uint32#13; ถูกอ้างจาก: `BNKDEHGIJMH` +- `PBMDEBCGNMD` — fields: IKJNIKIGFLF:MNCBEDBDDHL#1, PKHFMJDNKOE:JPAOIPLDKHB#2, KABGCGENKLK:CGLJLBDFNBK#4; ถูกอ้างจาก: `POBLGKIGINE` +- `PDFEPMMIKDF` — fields: KOMOGINENAC:uint32#1, AIJPKJICFDJ:uint32#6, mode:uint32#8; ถูกอ้างจาก: `COPLCPBANMD` +- `PEEEEGAPCOK` — fields: PLPPPCEPBDO:uint32#1, op_uid:uint32#2, OOCPKIGPEHP:uint32#3, CMIEOOODDIA:int64#4, AALDPOAKJBK:string#5; ถูกอ้างจาก: `IKBDJLNEPBH` +- `PEMMJHDFOLM` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `PGLBKDELHJK` — fields: FLBOPEJIGJF:uint32#1, status:uint32#5, DGONPFLCOMO:uint32#7, FBDIGGDLDCP:MNGADDFICJF#9; ถูกอ้างจาก: `FMOEINGLFGG` +- `PHIMNIFMBMI` — fields: MJNENEAAOAE:uint64#2, retcode:uint32#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `PMBMFHMKBNC` — fields: retcode:uint32#4; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `POBLGKIGINE` — fields: room_owner_uid:uint32#1, player_info:JBJNJPAOCDA#2, DLKOEIANIMK:uint32#3, LNMGOFCOMED:PBMDEBCGNMD#100, MAGDHGMLLKG:LLKIFBFCMLK#101; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify`, `SocialPlayGetOnlineRoomDataScRsp`, `SocialPlayGetOwnerRoomDataScRsp` +- `PPELMHMMCHP` — fields: KLOJONBEJKJ:uint32#1, ONMDDKGCEHK:uint64#4; ถูกอ้างจาก: `NLBAOLFBEGB` +- `PPFAMGCOOFP` — fields: GALBOLNODBB:uint32#1, LENMCGCGBOA:uint32#2, EEFLBHGIAAN:ALAMOHABJIP#3, NGPBPFKGNLI:uint32#4, IEOAHLNBBBB:uint32#5, EJHKAHEGCDC:uint32#6, LEJEBBCKPCI:uint32#8, design_level:uint32#9, OOIMHIJFHDI:uint32#10, DEJOLCEPDCF:uint32#11, retcode:uint32#12, OFNDFACDNOC:uint32#13, KIEBAPFGCCN:uint32#14, LAOPAGMAAHD:uint32#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ +- `PPOPABLIHNI` — fields: count:uint32#10, offset:uint32#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้ + +## ข้อจำกัดก่อนใช้ทำ handler + +- การมี Go message type ไม่ได้แปลว่ามี CmdID, request/response pairing หรือ handler แล้ว +- ใช้ `protocol/proto/cmdid.go`/ตารางที่อ้าง revision ตรงกันเท่านั้น; ถ้าชื่อยัง obfuscated ให้บันทึกความไม่แน่นอนแทนการเดา +- schema ที่เพิ่มครั้งนี้เป็นการเติม definitions ที่ไม่มีใน `StarRail.proto` เท่านั้น ไม่ได้ยืนยันว่า Client รุ่นใดส่ง message เหล่านี้หรือว่า feature เล่นได้ครบ diff --git a/freesr-data.json b/freesr-data.json index 6052bbf..ceb7cb5 100644 --- a/freesr-data.json +++ b/freesr-data.json @@ -1,76297 +1,4 @@ { - "lightcones": [ - { - "level": 80, - "item_id": 23064, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 1 - }, - { - "level": 80, - "item_id": 23063, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 2 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 3 - }, - { - "level": 1, - "item_id": 21046, - "equip_avatar": 0, - "rank": 2, - "promotion": 0, - "internal_uid": 4 - }, - { - "level": 80, - "item_id": 22006, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 5 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 6 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 7 - }, - { - "level": 80, - "item_id": 23042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 8 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 9 - }, - { - "level": 80, - "item_id": 23037, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 10 - }, - { - "level": 80, - "item_id": 23013, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 11 - }, - { - "level": 80, - "item_id": 21039, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 12 - }, - { - "level": 80, - "item_id": 21015, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 13 - }, - { - "level": 80, - "item_id": 20000, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 14 - }, - { - "level": 80, - "item_id": 20013, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 15 - }, - { - "level": 80, - "item_id": 21010, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 16 - }, - { - "level": 80, - "item_id": 23005, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 17 - }, - { - "level": 80, - "item_id": 21007, - "equip_avatar": 1301, - "rank": 5, - "promotion": 6, - "internal_uid": 18 - }, - { - "level": 80, - "item_id": 21021, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 19 - }, - { - "level": 80, - "item_id": 22006, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 20 - }, - { - "level": 80, - "item_id": 20012, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 21 - }, - { - "level": 80, - "item_id": 20002, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 22 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 23 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 24 - }, - { - "level": 80, - "item_id": 23051, - "equip_avatar": 1414, - "rank": 1, - "promotion": 6, - "internal_uid": 25 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 26 - }, - { - "level": 80, - "item_id": 23038, - "equip_avatar": 1403, - "rank": 1, - "promotion": 6, - "internal_uid": 27 - }, - { - "level": 80, - "item_id": 23042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 28 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 29 - }, - { - "level": 80, - "item_id": 23037, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 30 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 31 - }, - { - "level": 80, - "item_id": 22004, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 32 - }, - { - "level": 80, - "item_id": 23034, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 33 - }, - { - "level": 80, - "item_id": 23026, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 34 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 1009, - "rank": 3, - "promotion": 6, - "internal_uid": 35 - }, - { - "level": 80, - "item_id": 23019, - "equip_avatar": 1303, - "rank": 1, - "promotion": 6, - "internal_uid": 36 - }, - { - "level": 80, - "item_id": 21035, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 37 - }, - { - "level": 80, - "item_id": 21046, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 38 - }, - { - "level": 80, - "item_id": 21042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 39 - }, - { - "level": 80, - "item_id": 23009, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 40 - }, - { - "level": 80, - "item_id": 23016, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 41 - }, - { - "level": 80, - "item_id": 21001, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 42 - }, - { - "level": 80, - "item_id": 23046, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 43 - }, - { - "level": 80, - "item_id": 23003, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 44 - }, - { - "level": 80, - "item_id": 24001, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 45 - }, - { - "level": 80, - "item_id": 21002, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 46 - }, - { - "level": 80, - "item_id": 23016, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 47 - }, - { - "level": 80, - "item_id": 23016, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 48 - }, - { - "level": 80, - "item_id": 23013, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 49 - }, - { - "level": 80, - "item_id": 21039, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 50 - }, - { - "level": 80, - "item_id": 21015, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 51 - }, - { - "level": 80, - "item_id": 20000, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 52 - }, - { - "level": 80, - "item_id": 20013, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 53 - }, - { - "level": 80, - "item_id": 21010, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 54 - }, - { - "level": 80, - "item_id": 23005, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 55 - }, - { - "level": 80, - "item_id": 21007, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 56 - }, - { - "level": 80, - "item_id": 21021, - "equip_avatar": 1110, - "rank": 2, - "promotion": 6, - "internal_uid": 57 - }, - { - "level": 80, - "item_id": 22006, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 58 - }, - { - "level": 80, - "item_id": 20012, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 59 - }, - { - "level": 80, - "item_id": 20002, - "equip_avatar": 8002, - "rank": 1, - "promotion": 6, - "internal_uid": 60 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 61 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 62 - }, - { - "level": 80, - "item_id": 23051, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 63 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 64 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 3, - "promotion": 6, - "internal_uid": 65 - }, - { - "level": 80, - "item_id": 23042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 66 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 67 - }, - { - "level": 80, - "item_id": 23037, - "equip_avatar": 1401, - "rank": 1, - "promotion": 6, - "internal_uid": 68 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 69 - }, - { - "level": 80, - "item_id": 22004, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 70 - }, - { - "level": 80, - "item_id": 23034, - "equip_avatar": 1313, - "rank": 1, - "promotion": 6, - "internal_uid": 71 - }, - { - "level": 80, - "item_id": 23026, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 72 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 8006, - "rank": 1, - "promotion": 6, - "internal_uid": 73 - }, - { - "level": 80, - "item_id": 23019, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 74 - }, - { - "level": 80, - "item_id": 21035, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 75 - }, - { - "level": 80, - "item_id": 21046, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 76 - }, - { - "level": 80, - "item_id": 21042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 77 - }, - { - "level": 80, - "item_id": 23009, - "equip_avatar": 1205, - "rank": 1, - "promotion": 6, - "internal_uid": 78 - }, - { - "level": 80, - "item_id": 23016, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 79 - }, - { - "level": 80, - "item_id": 21001, - "equip_avatar": 1106, - "rank": 5, - "promotion": 6, - "internal_uid": 80 - }, - { - "level": 80, - "item_id": 24001, - "equip_avatar": 0, - "rank": 4, - "promotion": 6, - "internal_uid": 81 - }, - { - "level": 80, - "item_id": 23003, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 82 - }, - { - "level": 80, - "item_id": 23046, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 83 - }, - { - "level": 80, - "item_id": 21002, - "equip_avatar": 0, - "rank": 2, - "promotion": 6, - "internal_uid": 84 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 85 - }, - { - "level": 80, - "item_id": 24006, - "equip_avatar": 8009, - "rank": 1, - "promotion": 6, - "internal_uid": 86 - }, - { - "level": 80, - "item_id": 21064, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 87 - }, - { - "level": 80, - "item_id": 21065, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 88 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 89 - }, - { - "level": 80, - "item_id": 21007, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 90 - }, - { - "level": 80, - "item_id": 23054, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 91 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 8008, - "rank": 5, - "promotion": 6, - "internal_uid": 92 - }, - { - "level": 80, - "item_id": 23058, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 93 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 94 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 95 - }, - { - "level": 80, - "item_id": 23044, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 96 - }, - { - "level": 80, - "item_id": 23024, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 97 - }, - { - "level": 80, - "item_id": 23050, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 98 - }, - { - "level": 80, - "item_id": 23060, - "equip_avatar": 1510, - "rank": 1, - "promotion": 6, - "internal_uid": 99 - }, - { - "level": 80, - "item_id": 23058, - "equip_avatar": 1505, - "rank": 1, - "promotion": 6, - "internal_uid": 100 - }, - { - "level": 80, - "item_id": 23054, - "equip_avatar": 1502, - "rank": 1, - "promotion": 6, - "internal_uid": 101 - }, - { - "level": 80, - "item_id": 23047, - "equip_avatar": 1410, - "rank": 1, - "promotion": 6, - "internal_uid": 102 - }, - { - "level": 80, - "item_id": 24000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 103 - }, - { - "level": 80, - "item_id": 23036, - "equip_avatar": 1402, - "rank": 1, - "promotion": 6, - "internal_uid": 104 - }, - { - "level": 80, - "item_id": 23050, - "equip_avatar": 1321, - "rank": 1, - "promotion": 6, - "internal_uid": 105 - }, - { - "level": 80, - "item_id": 23044, - "equip_avatar": 1408, - "rank": 1, - "promotion": 6, - "internal_uid": 106 - }, - { - "level": 80, - "item_id": 23024, - "equip_avatar": 1308, - "rank": 1, - "promotion": 6, - "internal_uid": 107 - }, - { - "level": 80, - "item_id": 23043, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 108 - }, - { - "level": 80, - "item_id": 21007, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 109 - }, - { - "level": 80, - "item_id": 23004, - "equip_avatar": 1005, - "rank": 1, - "promotion": 6, - "internal_uid": 110 - }, - { - "level": 80, - "item_id": 21035, - "equip_avatar": 0, - "rank": 3, - "promotion": 6, - "internal_uid": 111 - }, - { - "level": 80, - "item_id": 23016, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 112 - }, - { - "level": 80, - "item_id": 23014, - "equip_avatar": 1212, - "rank": 1, - "promotion": 6, - "internal_uid": 113 - }, - { - "level": 80, - "item_id": 23054, - "equip_avatar": 8010, - "rank": 1, - "promotion": 6, - "internal_uid": 114 - }, - { - "level": 80, - "item_id": 23013, - "equip_avatar": 1211, - "rank": 3, - "promotion": 6, - "internal_uid": 115 - }, - { - "level": 80, - "item_id": 21013, - "equip_avatar": 1008, - "rank": 1, - "promotion": 6, - "internal_uid": 116 - }, - { - "level": 80, - "item_id": 23000, - "equip_avatar": 1003, - "rank": 4, - "promotion": 6, - "internal_uid": 117 - }, - { - "level": 80, - "item_id": 20018, - "equip_avatar": 1210, - "rank": 5, - "promotion": 6, - "internal_uid": 118 - }, - { - "level": 80, - "item_id": 21046, - "equip_avatar": 1202, - "rank": 5, - "promotion": 6, - "internal_uid": 119 - }, - { - "level": 80, - "item_id": 21039, - "equip_avatar": 1104, - "rank": 1, - "promotion": 6, - "internal_uid": 120 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 1004, - "rank": 5, - "promotion": 6, - "internal_uid": 121 - }, - { - "level": 80, - "item_id": 20014, - "equip_avatar": 1002, - "rank": 1, - "promotion": 6, - "internal_uid": 122 - }, - { - "level": 80, - "item_id": 21006, - "equip_avatar": 1013, - "rank": 5, - "promotion": 6, - "internal_uid": 123 - }, - { - "level": 80, - "item_id": 23001, - "equip_avatar": 1102, - "rank": 1, - "promotion": 6, - "internal_uid": 124 - }, - { - "level": 80, - "item_id": 21024, - "equip_avatar": 1209, - "rank": 1, - "promotion": 6, - "internal_uid": 125 - }, - { - "level": 80, - "item_id": 23011, - "equip_avatar": 1208, - "rank": 1, - "promotion": 6, - "internal_uid": 126 - }, - { - "level": 80, - "item_id": 21001, - "equip_avatar": 1108, - "rank": 5, - "promotion": 6, - "internal_uid": 127 - }, - { - "level": 80, - "item_id": 20015, - "equip_avatar": 1105, - "rank": 5, - "promotion": 6, - "internal_uid": 128 - }, - { - "level": 80, - "item_id": 21013, - "equip_avatar": 1103, - "rank": 1, - "promotion": 6, - "internal_uid": 129 - }, - { - "level": 80, - "item_id": 23052, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 130 - }, - { - "level": 80, - "item_id": 23034, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 131 - }, - { - "level": 80, - "item_id": 21043, - "equip_avatar": 8004, - "rank": 5, - "promotion": 6, - "internal_uid": 132 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 133 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 134 - }, - { - "level": 80, - "item_id": 23051, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 135 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 136 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 3, - "promotion": 6, - "internal_uid": 137 - }, - { - "level": 80, - "item_id": 23042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 138 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 139 - }, - { - "level": 80, - "item_id": 22004, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 140 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 3, - "promotion": 6, - "internal_uid": 141 - }, - { - "level": 80, - "item_id": 22004, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 142 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 143 - }, - { - "level": 80, - "item_id": 23026, - "equip_avatar": 1309, - "rank": 1, - "promotion": 6, - "internal_uid": 144 - }, - { - "level": 80, - "item_id": 21018, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 145 - }, - { - "level": 80, - "item_id": 21056, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 146 - }, - { - "level": 80, - "item_id": 21010, - "equip_avatar": 1224, - "rank": 1, - "promotion": 6, - "internal_uid": 147 - }, - { - "level": 80, - "item_id": 21019, - "equip_avatar": 1214, - "rank": 5, - "promotion": 6, - "internal_uid": 148 - }, - { - "level": 80, - "item_id": 21012, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 149 - }, - { - "level": 80, - "item_id": 23016, - "equip_avatar": 1112, - "rank": 2, - "promotion": 6, - "internal_uid": 150 - }, - { - "level": 80, - "item_id": 24001, - "equip_avatar": 1223, - "rank": 4, - "promotion": 6, - "internal_uid": 151 - }, - { - "level": 80, - "item_id": 23003, - "equip_avatar": 1101, - "rank": 2, - "promotion": 6, - "internal_uid": 152 - }, - { - "level": 80, - "item_id": 23046, - "equip_avatar": 1015, - "rank": 1, - "promotion": 6, - "internal_uid": 153 - }, - { - "level": 80, - "item_id": 20003, - "equip_avatar": 1001, - "rank": 1, - "promotion": 6, - "internal_uid": 154 - }, - { - "level": 80, - "item_id": 23055, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 155 - }, - { - "level": 80, - "item_id": 23065, - "equip_avatar": 1511, - "rank": 1, - "promotion": 6, - "internal_uid": 156 - }, - { - "level": 80, - "item_id": 23064, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 157 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 158 - }, - { - "level": 80, - "item_id": 23016, - "equip_avatar": 0, - "rank": 3, - "promotion": 6, - "internal_uid": 159 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 160 - }, - { - "level": 80, - "item_id": 23063, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 161 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 162 - }, - { - "level": 80, - "item_id": 23042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 163 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 164 - }, - { - "level": 80, - "item_id": 23064, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 165 - }, - { - "level": 80, - "item_id": 24001, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 166 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 167 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 168 - }, - { - "level": 80, - "item_id": 23063, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 169 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 0, - "rank": 5, - "promotion": 6, - "internal_uid": 170 - }, - { - "level": 80, - "item_id": 23042, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 171 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 172 - }, - { - "level": 80, - "item_id": 23062, - "equip_avatar": 1509, - "rank": 1, - "promotion": 6, - "internal_uid": 173 - }, - { - "level": 80, - "item_id": 23062, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 174 - }, - { - "level": 80, - "item_id": 23061, - "equip_avatar": 1508, - "rank": 1, - "promotion": 6, - "internal_uid": 175 - }, - { - "level": 80, - "item_id": 23059, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 176 - }, - { - "level": 80, - "item_id": 23057, - "equip_avatar": 1506, - "rank": 1, - "promotion": 6, - "internal_uid": 177 - }, - { - "level": 80, - "item_id": 23056, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 178 - }, - { - "level": 80, - "item_id": 23055, - "equip_avatar": 1503, - "rank": 1, - "promotion": 6, - "internal_uid": 179 - }, - { - "level": 80, - "item_id": 23053, - "equip_avatar": 1501, - "rank": 1, - "promotion": 6, - "internal_uid": 180 - }, - { - "level": 80, - "item_id": 23052, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 181 - }, - { - "level": 80, - "item_id": 23048, - "equip_avatar": 1412, - "rank": 1, - "promotion": 6, - "internal_uid": 182 - }, - { - "level": 80, - "item_id": 23043, - "equip_avatar": 1406, - "rank": 1, - "promotion": 6, - "internal_uid": 183 - }, - { - "level": 80, - "item_id": 23041, - "equip_avatar": 1405, - "rank": 1, - "promotion": 6, - "internal_uid": 184 - }, - { - "level": 80, - "item_id": 23039, - "equip_avatar": 1404, - "rank": 1, - "promotion": 6, - "internal_uid": 185 - }, - { - "level": 80, - "item_id": 23038, - "equip_avatar": 0, - "rank": 1, - "promotion": 6, - "internal_uid": 186 - }, - { - "level": 80, - "item_id": 23033, - "equip_avatar": 1317, - "rank": 1, - "promotion": 6, - "internal_uid": 187 - }, - { - "level": 80, - "item_id": 23027, - "equip_avatar": 1315, - "rank": 1, - "promotion": 6, - "internal_uid": 188 - }, - { - "level": 80, - "item_id": 23028, - "equip_avatar": 1314, - "rank": 1, - "promotion": 6, - "internal_uid": 189 - }, - { - "level": 80, - "item_id": 23025, - "equip_avatar": 1310, - "rank": 1, - "promotion": 6, - "internal_uid": 190 - }, - { - "level": 80, - "item_id": 23022, - "equip_avatar": 1307, - "rank": 1, - "promotion": 6, - "internal_uid": 191 - }, - { - "level": 80, - "item_id": 23021, - "equip_avatar": 1306, - "rank": 1, - "promotion": 6, - "internal_uid": 192 - }, - { - "level": 80, - "item_id": 23020, - "equip_avatar": 1305, - "rank": 1, - "promotion": 6, - "internal_uid": 193 - }, - { - "level": 80, - "item_id": 23023, - "equip_avatar": 1304, - "rank": 1, - "promotion": 6, - "internal_uid": 194 - }, - { - "level": 80, - "item_id": 23018, - "equip_avatar": 1302, - "rank": 1, - "promotion": 6, - "internal_uid": 195 - }, - { - "level": 80, - "item_id": 23035, - "equip_avatar": 1225, - "rank": 1, - "promotion": 6, - "internal_uid": 196 - }, - { - "level": 80, - "item_id": 23032, - "equip_avatar": 1222, - "rank": 1, - "promotion": 6, - "internal_uid": 197 - }, - { - "level": 80, - "item_id": 23030, - "equip_avatar": 1221, - "rank": 1, - "promotion": 6, - "internal_uid": 198 - }, - { - "level": 80, - "item_id": 23031, - "equip_avatar": 1220, - "rank": 1, - "promotion": 6, - "internal_uid": 199 - }, - { - "level": 80, - "item_id": 23029, - "equip_avatar": 1218, - "rank": 1, - "promotion": 6, - "internal_uid": 200 - }, - { - "level": 80, - "item_id": 23017, - "equip_avatar": 1217, - "rank": 1, - "promotion": 6, - "internal_uid": 201 - }, - { - "level": 80, - "item_id": 23015, - "equip_avatar": 1213, - "rank": 1, - "promotion": 6, - "internal_uid": 202 - }, - { - "level": 80, - "item_id": 23010, - "equip_avatar": 1204, - "rank": 1, - "promotion": 6, - "internal_uid": 203 - }, - { - "level": 80, - "item_id": 23008, - "equip_avatar": 1203, - "rank": 1, - "promotion": 6, - "internal_uid": 204 - }, - { - "level": 80, - "item_id": 23002, - "equip_avatar": 1107, - "rank": 1, - "promotion": 6, - "internal_uid": 205 - }, - { - "level": 80, - "item_id": 23045, - "equip_avatar": 1014, - "rank": 1, - "promotion": 6, - "internal_uid": 206 - }, - { - "level": 80, - "item_id": 23007, - "equip_avatar": 1006, - "rank": 1, - "promotion": 6, - "internal_uid": 207 - }, - { - "level": 80, - "item_id": 23064, - "equip_avatar": 1513, - "rank": 1, - "promotion": 6, - "internal_uid": 208 - }, - { - "level": 80, - "item_id": 24001, - "equip_avatar": 1504, - "rank": 5, - "promotion": 6, - "internal_uid": 209 - }, - { - "level": 80, - "item_id": 22000, - "equip_avatar": 1507, - "rank": 5, - "promotion": 6, - "internal_uid": 210 - }, - { - "level": 80, - "item_id": 23049, - "equip_avatar": 1413, - "rank": 1, - "promotion": 6, - "internal_uid": 211 - }, - { - "level": 80, - "item_id": 23063, - "equip_avatar": 1512, - "rank": 1, - "promotion": 6, - "internal_uid": 212 - }, - { - "level": 80, - "item_id": 24005, - "equip_avatar": 1415, - "rank": 5, - "promotion": 6, - "internal_uid": 213 - }, - { - "level": 80, - "item_id": 23042, - "equip_avatar": 1409, - "rank": 1, - "promotion": 6, - "internal_uid": 214 - }, - { - "level": 80, - "item_id": 23040, - "equip_avatar": 1407, - "rank": 1, - "promotion": 6, - "internal_uid": 215 - }, - { - "level": 1, - "item_id": 20001, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 216 - }, - { - "level": 1, - "item_id": 20004, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 217 - }, - { - "level": 1, - "item_id": 20005, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 218 - }, - { - "level": 1, - "item_id": 20006, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 219 - }, - { - "level": 1, - "item_id": 20007, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 220 - }, - { - "level": 1, - "item_id": 20008, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 221 - }, - { - "level": 1, - "item_id": 20009, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 222 - }, - { - "level": 1, - "item_id": 20010, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 223 - }, - { - "level": 1, - "item_id": 20011, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 224 - }, - { - "level": 1, - "item_id": 20016, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 225 - }, - { - "level": 1, - "item_id": 20017, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 226 - }, - { - "level": 1, - "item_id": 20019, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 227 - }, - { - "level": 1, - "item_id": 20020, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 228 - }, - { - "level": 1, - "item_id": 20021, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 229 - }, - { - "level": 1, - "item_id": 20022, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 230 - }, - { - "level": 1, - "item_id": 20023, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 231 - }, - { - "level": 1, - "item_id": 20024, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 232 - }, - { - "level": 1, - "item_id": 21000, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 233 - }, - { - "level": 1, - "item_id": 21003, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 234 - }, - { - "level": 1, - "item_id": 21004, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 235 - }, - { - "level": 1, - "item_id": 21005, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 236 - }, - { - "level": 1, - "item_id": 21008, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 237 - }, - { - "level": 1, - "item_id": 21009, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 238 - }, - { - "level": 1, - "item_id": 21011, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 239 - }, - { - "level": 1, - "item_id": 21014, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 240 - }, - { - "level": 1, - "item_id": 21016, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 241 - }, - { - "level": 1, - "item_id": 21017, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 242 - }, - { - "level": 1, - "item_id": 21020, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 243 - }, - { - "level": 1, - "item_id": 21022, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 244 - }, - { - "level": 1, - "item_id": 21023, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 245 - }, - { - "level": 1, - "item_id": 21025, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 246 - }, - { - "level": 1, - "item_id": 21026, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 247 - }, - { - "level": 1, - "item_id": 21027, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 248 - }, - { - "level": 1, - "item_id": 21028, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 249 - }, - { - "level": 1, - "item_id": 21029, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 250 - }, - { - "level": 1, - "item_id": 21030, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 251 - }, - { - "level": 1, - "item_id": 21031, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 252 - }, - { - "level": 1, - "item_id": 21032, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 253 - }, - { - "level": 1, - "item_id": 21033, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 254 - }, - { - "level": 1, - "item_id": 21034, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 255 - }, - { - "level": 1, - "item_id": 21036, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 256 - }, - { - "level": 1, - "item_id": 21037, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 257 - }, - { - "level": 1, - "item_id": 21038, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 258 - }, - { - "level": 1, - "item_id": 21040, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 259 - }, - { - "level": 1, - "item_id": 21041, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 260 - }, - { - "level": 1, - "item_id": 21044, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 261 - }, - { - "level": 1, - "item_id": 21045, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 262 - }, - { - "level": 1, - "item_id": 21047, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 263 - }, - { - "level": 1, - "item_id": 21048, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 264 - }, - { - "level": 1, - "item_id": 21050, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 265 - }, - { - "level": 1, - "item_id": 21051, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 266 - }, - { - "level": 1, - "item_id": 21052, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 267 - }, - { - "level": 1, - "item_id": 21053, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 268 - }, - { - "level": 1, - "item_id": 21054, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 269 - }, - { - "level": 1, - "item_id": 21055, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 270 - }, - { - "level": 1, - "item_id": 21057, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 271 - }, - { - "level": 1, - "item_id": 21058, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 272 - }, - { - "level": 1, - "item_id": 21060, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 273 - }, - { - "level": 1, - "item_id": 21061, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 274 - }, - { - "level": 1, - "item_id": 21062, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 275 - }, - { - "level": 1, - "item_id": 21066, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 276 - }, - { - "level": 1, - "item_id": 22001, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 277 - }, - { - "level": 1, - "item_id": 22002, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 278 - }, - { - "level": 1, - "item_id": 22003, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 279 - }, - { - "level": 1, - "item_id": 22005, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 280 - }, - { - "level": 1, - "item_id": 22007, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 281 - }, - { - "level": 1, - "item_id": 22008, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 282 - }, - { - "level": 1, - "item_id": 23006, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 283 - }, - { - "level": 1, - "item_id": 23012, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 284 - }, - { - "level": 1, - "item_id": 24002, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 285 - }, - { - "level": 1, - "item_id": 24003, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 286 - }, - { - "level": 1, - "item_id": 24004, - "equip_avatar": 0, - "rank": 1, - "promotion": 0, - "internal_uid": 287 - } - ], - "relics": [ - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 5, - "equip_avatar": 1501 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - } - ], - "internal_uid": 6, - "equip_avatar": 1506 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 4, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - } - ], - "internal_uid": 7, - "equip_avatar": 1506 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - } - ], - "internal_uid": 8, - "equip_avatar": 1506 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 1, - "count": 3, - "step": 0 - } - ], - "internal_uid": 9, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 11, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 12, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 13, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 14, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 0 - } - ], - "internal_uid": 15, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 16, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - } - ], - "internal_uid": 17, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 18, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 0 - } - ], - "internal_uid": 19, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - } - ], - "internal_uid": 20, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - } - ], - "internal_uid": 21, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - } - ], - "internal_uid": 22, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 5, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - } - ], - "internal_uid": 23, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - } - ], - "internal_uid": 24, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - } - ], - "internal_uid": 25, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 26, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 27, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - } - ], - "internal_uid": 28, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 29, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 30, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 1 - } - ], - "internal_uid": 31, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - } - ], - "internal_uid": 32, - "equip_avatar": 8009 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 33, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 34, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 35, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - } - ], - "internal_uid": 36, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 37, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - } - ], - "internal_uid": 38, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 39, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 40, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - } - ], - "internal_uid": 41, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 42, - "equip_avatar": 1404 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 43, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 44, - "equip_avatar": 1404 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 45, - "equip_avatar": 1211 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 46, - "equip_avatar": 1211 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 47, - "equip_avatar": 1211 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 48, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 2 - } - ], - "internal_uid": 49, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63206, - "relic_set_id": 320, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 5 - } - ], - "internal_uid": 50, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 51, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 52, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 53, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - } - ], - "internal_uid": 54, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 7 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 55, - "equip_avatar": 1404 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 56, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 57, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 58, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 59, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 60, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 61, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 62, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 63, - "equip_avatar": 1506 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - } - ], - "internal_uid": 64, - "equip_avatar": 1501 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 65, - "equip_avatar": 1501 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - } - ], - "internal_uid": 66, - "equip_avatar": 1501 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - } - ], - "internal_uid": 67, - "equip_avatar": 1209 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 68, - "equip_avatar": 1209 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 69, - "equip_avatar": 1509 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 70, - "equip_avatar": 1509 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 71, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63035, - "relic_set_id": 303, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 72, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - } - ], - "internal_uid": 73, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 74, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 75, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 76, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - } - ], - "internal_uid": 77, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 78, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 79, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61234, - "relic_set_id": 123, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 80, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 81, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 82, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 4 - } - ], - "internal_uid": 83, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 84, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - } - ], - "internal_uid": 85, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 2 - } - ], - "internal_uid": 86, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63206, - "relic_set_id": 320, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 87, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 88, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 89, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 4 - } - ], - "internal_uid": 90, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 0 - } - ], - "internal_uid": 91, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 92, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 93, - "equip_avatar": 1404 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 94, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 95, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - } - ], - "internal_uid": 96, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 97, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 98, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 4, - "step": 1 - } - ], - "internal_uid": 99, - "equip_avatar": 1101 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - } - ], - "internal_uid": 100, - "equip_avatar": 1306 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 101, - "equip_avatar": 1509 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 102, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 103, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 104, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 105, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63206, - "relic_set_id": 320, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 5 - } - ], - "internal_uid": 106, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 107, - "equip_avatar": 1509 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 108, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 109, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - } - ], - "internal_uid": 110, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 111, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 112, - "equip_avatar": 1213 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 113, - "equip_avatar": 1204 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 114, - "equip_avatar": 1306 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 115, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 1 - } - ], - "internal_uid": 116, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 117, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61233, - "relic_set_id": 123, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 118, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 119, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - } - ], - "internal_uid": 120, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 121, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - } - ], - "internal_uid": 122, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - } - ], - "internal_uid": 123, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 124, - "equip_avatar": 0 - }, - { - "level": 3, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 125, - "equip_avatar": 0 - }, - { - "level": 6, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 126, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 127, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 128, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 129, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - } - ], - "internal_uid": 130, - "equip_avatar": 8009 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - } - ], - "internal_uid": 131, - "equip_avatar": 1009 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 132, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 133, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 134, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 135, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 136, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 137, - "equip_avatar": 1304 - }, - { - "level": 0, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 138, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - } - ], - "internal_uid": 139, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 140, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - } - ], - "internal_uid": 141, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 142, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 143, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 144, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 145, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 146, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 147, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 148, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63216, - "relic_set_id": 321, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 149, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63216, - "relic_set_id": 321, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 150, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 151, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 152, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 153, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 154, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 155, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 156, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - } - ], - "internal_uid": 157, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 158, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 159, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 160, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - } - ], - "internal_uid": 161, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 162, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 163, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61023, - "relic_set_id": 102, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 4, - "step": 4 - } - ], - "internal_uid": 164, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61024, - "relic_set_id": 102, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 165, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 166, - "equip_avatar": 1302 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 167, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 168, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - } - ], - "internal_uid": 169, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 170, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 171, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63106, - "relic_set_id": 310, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 172, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63106, - "relic_set_id": 310, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 173, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 174, - "equip_avatar": 1509 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - } - ], - "internal_uid": 175, - "equip_avatar": 1101 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 1 - } - ], - "internal_uid": 176, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 177, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 178, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 179, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 180, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 181, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 182, - "equip_avatar": 1009 - }, - { - "level": 0, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 183, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 184, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 185, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 186, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 187, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - } - ], - "internal_uid": 188, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 189, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 190, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 4 - } - ], - "internal_uid": 191, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 192, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 193, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 194, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - } - ], - "internal_uid": 195, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 196, - "equip_avatar": 1006 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - } - ], - "internal_uid": 197, - "equip_avatar": 1006 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - } - ], - "internal_uid": 198, - "equip_avatar": 1314 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 199, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 7 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 200, - "equip_avatar": 1314 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 2, - "count": 3, - "step": 5 - } - ], - "internal_uid": 201, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 202, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 203, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - } - ], - "internal_uid": 204, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - } - ], - "internal_uid": 205, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 206, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 207, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 208, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - } - ], - "internal_uid": 209, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 210, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 211, - "equip_avatar": 1102 - }, - { - "level": 0, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 212, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 213, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 214, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 215, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 216, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - } - ], - "internal_uid": 217, - "equip_avatar": 1218 - }, - { - "level": 15, - "relic_id": 61161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 218, - "equip_avatar": 1218 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 219, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 220, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 221, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - } - ], - "internal_uid": 222, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 223, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - } - ], - "internal_uid": 224, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 225, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 226, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 227, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 228, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 229, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 230, - "equip_avatar": 1509 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 231, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 232, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 233, - "equip_avatar": 1102 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - } - ], - "internal_uid": 234, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 235, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 236, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 237, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 238, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 239, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 1, - "count": 3, - "step": 1 - } - ], - "internal_uid": 240, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 241, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 242, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 243, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 244, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 245, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 246, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 247, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 248, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 249, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - } - ], - "internal_uid": 250, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 251, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 252, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 253, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - } - ], - "internal_uid": 254, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 255, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - } - ], - "internal_uid": 256, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 257, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 258, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 259, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 260, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 261, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 3 - } - ], - "internal_uid": 262, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 263, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 264, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 265, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 266, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 267, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 268, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 269, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 270, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 271, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 272, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 273, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - } - ], - "internal_uid": 274, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - } - ], - "internal_uid": 275, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 276, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 277, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 278, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 279, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - } - ], - "internal_uid": 280, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63156, - "relic_set_id": 315, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 281, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63155, - "relic_set_id": 315, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 282, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - } - ], - "internal_uid": 283, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 5, - "step": 5 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 284, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 285, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 286, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 10, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 287, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 288, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 289, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 290, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - } - ], - "internal_uid": 291, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - } - ], - "internal_uid": 292, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - } - ], - "internal_uid": 293, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 294, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 295, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 296, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 5 - } - ], - "internal_uid": 297, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 298, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 299, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 300, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61153, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 301, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - } - ], - "internal_uid": 302, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 303, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 304, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 305, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 306, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 307, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 308, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 309, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 310, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 311, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - } - ], - "internal_uid": 312, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 313, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 314, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - } - ], - "internal_uid": 315, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 316, - "equip_avatar": 1224 - }, - { - "level": 0, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 317, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 318, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 319, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 320, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 321, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 322, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 323, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 324, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 325, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 326, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 327, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 328, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 329, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 330, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 331, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 332, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 333, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 334, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - } - ], - "internal_uid": 335, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 336, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 337, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 338, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - } - ], - "internal_uid": 339, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 340, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 341, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 342, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - } - ], - "internal_uid": 343, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 344, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 345, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 346, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 347, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 348, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 349, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - } - ], - "internal_uid": 350, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 351, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - } - ], - "internal_uid": 352, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 353, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 354, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 355, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 356, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 357, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - } - ], - "internal_uid": 358, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 359, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 360, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 361, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 362, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 363, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 364, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 365, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - } - ], - "internal_uid": 366, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 367, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 368, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 369, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 370, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 371, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 372, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 373, - "equip_avatar": 1305 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 374, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61153, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 375, - "equip_avatar": 1224 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - } - ], - "internal_uid": 376, - "equip_avatar": 1224 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - } - ], - "internal_uid": 377, - "equip_avatar": 1224 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 378, - "equip_avatar": 1224 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - } - ], - "internal_uid": 379, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 380, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 381, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 382, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - } - ], - "internal_uid": 383, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 384, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - } - ], - "internal_uid": 385, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 386, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 387, - "equip_avatar": 1305 - }, - { - "level": 15, - "relic_id": 61153, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 388, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - } - ], - "internal_uid": 389, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 390, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 391, - "equip_avatar": 1221 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 392, - "equip_avatar": 1221 - }, - { - "level": 15, - "relic_id": 61153, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 393, - "equip_avatar": 1305 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 394, - "equip_avatar": 1221 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 395, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - } - ], - "internal_uid": 396, - "equip_avatar": 1221 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 397, - "equip_avatar": 1221 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 398, - "equip_avatar": 1401 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 399, - "equip_avatar": 1508 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 400, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63035, - "relic_set_id": 303, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 401, - "equip_avatar": 1106 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - } - ], - "internal_uid": 402, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 403, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 404, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 405, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - } - ], - "internal_uid": 406, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 407, - "equip_avatar": 1404 - }, - { - "level": 15, - "relic_id": 61232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 408, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61234, - "relic_set_id": 123, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 409, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 410, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 411, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 4 - } - ], - "internal_uid": 412, - "equip_avatar": 1401 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 413, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - } - ], - "internal_uid": 414, - "equip_avatar": 1306 - }, - { - "level": 15, - "relic_id": 63205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 2 - } - ], - "internal_uid": 415, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63206, - "relic_set_id": 320, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 416, - "equip_avatar": 1301 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 417, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 418, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 4 - } - ], - "internal_uid": 419, - "equip_avatar": 1301 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 0 - } - ], - "internal_uid": 420, - "equip_avatar": 1301 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 421, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 422, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 423, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - } - ], - "internal_uid": 424, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 425, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 426, - "equip_avatar": 1412 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 4, - "step": 1 - } - ], - "internal_uid": 427, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - } - ], - "internal_uid": 428, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 429, - "equip_avatar": 1508 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 430, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 431, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 432, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 433, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63206, - "relic_set_id": 320, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 5 - } - ], - "internal_uid": 434, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 435, - "equip_avatar": 1508 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 436, - "equip_avatar": 1301 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - } - ], - "internal_uid": 437, - "equip_avatar": 1401 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 438, - "equip_avatar": 1301 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 439, - "equip_avatar": 1401 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 440, - "equip_avatar": 1508 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 441, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 442, - "equip_avatar": 1306 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 1 - } - ], - "internal_uid": 443, - "equip_avatar": 8008 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 444, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61233, - "relic_set_id": 123, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 445, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 446, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - } - ], - "internal_uid": 447, - "equip_avatar": 1212 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 448, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - } - ], - "internal_uid": 449, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - } - ], - "internal_uid": 450, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 451, - "equip_avatar": 8008 - }, - { - "level": 3, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 452, - "equip_avatar": 1002 - }, - { - "level": 6, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 453, - "equip_avatar": 1002 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 454, - "equip_avatar": 1414 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 455, - "equip_avatar": 1009 - }, - { - "level": 15, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 456, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - } - ], - "internal_uid": 457, - "equip_avatar": 1414 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - } - ], - "internal_uid": 458, - "equip_avatar": 8008 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 459, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 460, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 461, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 462, - "equip_avatar": 8008 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 463, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 464, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 465, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - } - ], - "internal_uid": 466, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 467, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - } - ], - "internal_uid": 468, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 469, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 470, - "equip_avatar": 8008 - }, - { - "level": 15, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 471, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 472, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 473, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 474, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 475, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63216, - "relic_set_id": 321, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 476, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63216, - "relic_set_id": 321, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 477, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 478, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 479, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 480, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 481, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 482, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 483, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - } - ], - "internal_uid": 484, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 485, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 486, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 487, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - } - ], - "internal_uid": 488, - "equip_avatar": 8008 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 489, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 490, - "equip_avatar": 1309 - }, - { - "level": 15, - "relic_id": 61023, - "relic_set_id": 102, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 4, - "step": 4 - } - ], - "internal_uid": 491, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61024, - "relic_set_id": 102, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 492, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 493, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 494, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 495, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - } - ], - "internal_uid": 496, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 497, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 498, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63106, - "relic_set_id": 310, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 499, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63106, - "relic_set_id": 310, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 500, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 501, - "equip_avatar": 1508 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - } - ], - "internal_uid": 502, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 1 - } - ], - "internal_uid": 503, - "equip_avatar": 1101 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 504, - "equip_avatar": 1412 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 505, - "equip_avatar": 1412 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 506, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 507, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 508, - "equip_avatar": 1306 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 509, - "equip_avatar": 1306 - }, - { - "level": 0, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 510, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 511, - "equip_avatar": 1412 - }, - { - "level": 0, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 512, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 513, - "equip_avatar": 1412 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 514, - "equip_avatar": 1101 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - } - ], - "internal_uid": 515, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 516, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 517, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 4 - } - ], - "internal_uid": 518, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 519, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 520, - "equip_avatar": 1205 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 521, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - } - ], - "internal_uid": 522, - "equip_avatar": 1102 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 523, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - } - ], - "internal_uid": 524, - "equip_avatar": 1102 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - } - ], - "internal_uid": 525, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 526, - "equip_avatar": 1006 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 7 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 527, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 2, - "count": 3, - "step": 5 - } - ], - "internal_uid": 528, - "equip_avatar": 1215 - }, - { - "level": 0, - "relic_id": 61021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 529, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 530, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - } - ], - "internal_uid": 531, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - } - ], - "internal_uid": 532, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 533, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 534, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 535, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - } - ], - "internal_uid": 536, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 537, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 538, - "equip_avatar": 1405 - }, - { - "level": 0, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 539, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 540, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 541, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 542, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 543, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - } - ], - "internal_uid": 544, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 545, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 546, - "equip_avatar": 1309 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 547, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 548, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - } - ], - "internal_uid": 549, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 550, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - } - ], - "internal_uid": 551, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 552, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 553, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 554, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 555, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 556, - "equip_avatar": 1405 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 557, - "equip_avatar": 1405 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 558, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 559, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 560, - "equip_avatar": 1405 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - } - ], - "internal_uid": 561, - "equip_avatar": 1405 - }, - { - "level": 0, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 562, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 563, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 564, - "equip_avatar": 1405 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 565, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 566, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 1, - "count": 3, - "step": 1 - } - ], - "internal_uid": 567, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 568, - "equip_avatar": 1412 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 569, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 570, - "equip_avatar": 1508 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 571, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 572, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 573, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 574, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 575, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 576, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - } - ], - "internal_uid": 577, - "equip_avatar": 1102 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 578, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 579, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 580, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - } - ], - "internal_uid": 581, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 582, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 583, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 584, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 585, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 3 - } - ], - "internal_uid": 586, - "equip_avatar": 1205 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 587, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 588, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 589, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 590, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 591, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61063, - "relic_set_id": 106, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 592, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 593, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 594, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 595, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 596, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - } - ], - "internal_uid": 597, - "equip_avatar": 1301 - }, - { - "level": 15, - "relic_id": 61261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - } - ], - "internal_uid": 598, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 599, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 600, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - } - ], - "internal_uid": 601, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63156, - "relic_set_id": 315, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 602, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63155, - "relic_set_id": 315, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 603, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - } - ], - "internal_uid": 604, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 5, - "step": 5 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 605, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 606, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 607, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 10, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 608, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 609, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 610, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 611, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - } - ], - "internal_uid": 612, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 613, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 614, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 615, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 5 - } - ], - "internal_uid": 616, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 617, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 618, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 619, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61153, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 620, - "equip_avatar": 1112 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - } - ], - "internal_uid": 621, - "equip_avatar": 1112 - }, - { - "level": 0, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 622, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 623, - "equip_avatar": 1112 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 624, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 625, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 626, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 627, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 628, - "equip_avatar": 1112 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 629, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 630, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - } - ], - "internal_uid": 631, - "equip_avatar": 1112 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 632, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 633, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - } - ], - "internal_uid": 634, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 635, - "equip_avatar": 1112 - }, - { - "level": 0, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 636, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 637, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 638, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 639, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 640, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 641, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 642, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 643, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 644, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 645, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 646, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 647, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 648, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 649, - "equip_avatar": 0 - }, - { - "level": 6, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 650, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 651, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 652, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - } - ], - "internal_uid": 653, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 654, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 655, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - } - ], - "internal_uid": 656, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - } - ], - "internal_uid": 657, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 658, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 659, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 660, - "equip_avatar": 1209 - }, - { - "level": 0, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 661, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 662, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - } - ], - "internal_uid": 663, - "equip_avatar": 1209 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - } - ], - "internal_uid": 664, - "equip_avatar": 1209 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 665, - "equip_avatar": 1209 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 666, - "equip_avatar": 0 - }, - { - "level": 6, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 667, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - } - ], - "internal_uid": 668, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 669, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - } - ], - "internal_uid": 670, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63246, - "relic_set_id": 324, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 671, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63245, - "relic_set_id": 324, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 672, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63246, - "relic_set_id": 324, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 673, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - } - ], - "internal_uid": 674, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 675, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 676, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 677, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 678, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 679, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - } - ], - "internal_uid": 680, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 681, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 682, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 683, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 684, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 685, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - } - ], - "internal_uid": 686, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 687, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 688, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 689, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 690, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 691, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 692, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - } - ], - "internal_uid": 693, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 694, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 695, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 696, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 697, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 698, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 699, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 700, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 701, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 702, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 703, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - } - ], - "internal_uid": 704, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - } - ], - "internal_uid": 705, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - } - ], - "internal_uid": 706, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 707, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 708, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 709, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 710, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 711, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 712, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 713, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 714, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 715, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - } - ], - "internal_uid": 716, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 717, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 718, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 719, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 720, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 721, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 722, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 723, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 724, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - } - ], - "internal_uid": 725, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 726, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 727, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 728, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 729, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 730, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 731, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 732, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 733, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 734, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - } - ], - "internal_uid": 735, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 736, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 737, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 738, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - } - ], - "internal_uid": 739, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 740, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 741, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 742, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - } - ], - "internal_uid": 743, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51283, - "relic_set_id": 128, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 744, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 745, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 746, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 747, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 748, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 749, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - } - ], - "internal_uid": 750, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 751, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 752, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51283, - "relic_set_id": 128, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 753, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 754, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 755, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51283, - "relic_set_id": 128, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 756, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 757, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 758, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51283, - "relic_set_id": 128, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 759, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 760, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 761, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 762, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 763, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 764, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 765, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - } - ], - "internal_uid": 766, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 767, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 768, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 769, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 770, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 771, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 772, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 773, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51283, - "relic_set_id": 128, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 774, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 775, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 776, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 777, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 778, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51274, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 779, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51284, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - } - ], - "internal_uid": 780, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51274, - "relic_set_id": 127, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 781, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 782, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 783, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 784, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 785, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51273, - "relic_set_id": 127, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - } - ], - "internal_uid": 786, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 787, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 788, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 789, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - } - ], - "internal_uid": 790, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 791, - "equip_avatar": 1224 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 792, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - } - ], - "internal_uid": 793, - "equip_avatar": 1009 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 794, - "equip_avatar": 1009 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - } - ], - "internal_uid": 795, - "equip_avatar": 1009 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 796, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 797, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 798, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - } - ], - "internal_uid": 799, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - } - ], - "internal_uid": 800, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 0, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - } - ], - "internal_uid": 801, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - } - ], - "internal_uid": 802, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 803, - "equip_avatar": 8009 - }, - { - "level": 15, - "relic_id": 61302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 804, - "equip_avatar": 8009 - }, - { - "level": 15, - "relic_id": 61303, - "relic_set_id": 130, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 805, - "equip_avatar": 8009 - }, - { - "level": 15, - "relic_id": 61304, - "relic_set_id": 130, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - } - ], - "internal_uid": 806, - "equip_avatar": 8009 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 807, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 808, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - } - ], - "internal_uid": 809, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 810, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - } - ], - "internal_uid": 811, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 812, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 813, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 814, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 815, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 4 - } - ], - "internal_uid": 816, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - } - ], - "internal_uid": 817, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 818, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - } - ], - "internal_uid": 819, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 820, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - } - ], - "internal_uid": 821, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - } - ], - "internal_uid": 822, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 823, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 0 - } - ], - "internal_uid": 824, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 825, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 826, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 827, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 1 - } - ], - "internal_uid": 828, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 0 - } - ], - "internal_uid": 829, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 830, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 831, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 832, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 833, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 1 - } - ], - "internal_uid": 834, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 2 - } - ], - "internal_uid": 835, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 836, - "equip_avatar": 1315 - }, - { - "level": 15, - "relic_id": 63165, - "relic_set_id": 316, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 837, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 838, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 839, - "equip_avatar": 1406 - }, - { - "level": 15, - "relic_id": 61172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 0 - } - ], - "internal_uid": 840, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61173, - "relic_set_id": 117, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - } - ], - "internal_uid": 841, - "equip_avatar": 1406 - }, - { - "level": 15, - "relic_id": 61174, - "relic_set_id": 117, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 842, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - } - ], - "internal_uid": 843, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 844, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 845, - "equip_avatar": 1315 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 5 - } - ], - "internal_uid": 846, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 847, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 4 - } - ], - "internal_uid": 848, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 10, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 849, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 3 - } - ], - "internal_uid": 850, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61174, - "relic_set_id": 117, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 851, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63145, - "relic_set_id": 314, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - } - ], - "internal_uid": 852, - "equip_avatar": 1308 - }, - { - "level": 15, - "relic_id": 63146, - "relic_set_id": 314, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 853, - "equip_avatar": 1308 - }, - { - "level": 15, - "relic_id": 61172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 854, - "equip_avatar": 1406 - }, - { - "level": 15, - "relic_id": 61173, - "relic_set_id": 117, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - } - ], - "internal_uid": 855, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 856, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 857, - "equip_avatar": 1402 - }, - { - "level": 15, - "relic_id": 61233, - "relic_set_id": 123, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 858, - "equip_avatar": 1402 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 859, - "equip_avatar": 1313 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 2 - } - ], - "internal_uid": 860, - "equip_avatar": 1313 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 861, - "equip_avatar": 1313 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 862, - "equip_avatar": 1313 - }, - { - "level": 15, - "relic_id": 61144, - "relic_set_id": 114, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 863, - "equip_avatar": 1303 - }, - { - "level": 15, - "relic_id": 61231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 864, - "equip_avatar": 1402 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - } - ], - "internal_uid": 865, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 866, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 867, - "equip_avatar": 1403 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 868, - "equip_avatar": 1403 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 869, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 1 - } - ], - "internal_uid": 870, - "equip_avatar": 1403 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 10, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 871, - "equip_avatar": 1321 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 872, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 873, - "equip_avatar": 1313 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 5 - } - ], - "internal_uid": 874, - "equip_avatar": 1403 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - } - ], - "internal_uid": 875, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63165, - "relic_set_id": 316, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 876, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 2 - } - ], - "internal_uid": 877, - "equip_avatar": 1310 - }, - { - "level": 15, - "relic_id": 61142, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 878, - "equip_avatar": 1303 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 4 - } - ], - "internal_uid": 879, - "equip_avatar": 1321 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 6 - } - ], - "internal_uid": 880, - "equip_avatar": 1225 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 881, - "equip_avatar": 1217 - }, - { - "level": 15, - "relic_id": 63205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 882, - "equip_avatar": 1211 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - } - ], - "internal_uid": 883, - "equip_avatar": 1217 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 884, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63206, - "relic_set_id": 320, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - } - ], - "internal_uid": 885, - "equip_avatar": 1211 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 886, - "equip_avatar": 1217 - }, - { - "level": 15, - "relic_id": 61212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 887, - "equip_avatar": 1313 - }, - { - "level": 15, - "relic_id": 61234, - "relic_set_id": 123, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 888, - "equip_avatar": 1402 - }, - { - "level": 15, - "relic_id": 61141, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 889, - "equip_avatar": 1303 - }, - { - "level": 15, - "relic_id": 61143, - "relic_set_id": 114, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 890, - "equip_avatar": 1303 - }, - { - "level": 15, - "relic_id": 61263, - "relic_set_id": 126, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 891, - "equip_avatar": 1408 - }, - { - "level": 15, - "relic_id": 61264, - "relic_set_id": 126, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 892, - "equip_avatar": 1408 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 893, - "equip_avatar": 1303 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 894, - "equip_avatar": 1303 - }, - { - "level": 15, - "relic_id": 61261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - } - ], - "internal_uid": 895, - "equip_avatar": 1408 - }, - { - "level": 15, - "relic_id": 63216, - "relic_set_id": 321, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 6 - } - ], - "internal_uid": 896, - "equip_avatar": 1408 - }, - { - "level": 15, - "relic_id": 63215, - "relic_set_id": 321, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 897, - "equip_avatar": 1408 - }, - { - "level": 15, - "relic_id": 61262, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - } - ], - "internal_uid": 898, - "equip_avatar": 1408 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 899, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63226, - "relic_set_id": 322, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 900, - "equip_avatar": 1410 - }, - { - "level": 15, - "relic_id": 63226, - "relic_set_id": 322, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 901, - "equip_avatar": 1005 - }, - { - "level": 15, - "relic_id": 61162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - } - ], - "internal_uid": 902, - "equip_avatar": 1410 - }, - { - "level": 15, - "relic_id": 61161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 903, - "equip_avatar": 1410 - }, - { - "level": 15, - "relic_id": 61162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 904, - "equip_avatar": 1005 - }, - { - "level": 15, - "relic_id": 61161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 905, - "equip_avatar": 1005 - }, - { - "level": 15, - "relic_id": 61163, - "relic_set_id": 116, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 906, - "equip_avatar": 1410 - }, - { - "level": 15, - "relic_id": 61164, - "relic_set_id": 116, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 907, - "equip_avatar": 1005 - }, - { - "level": 15, - "relic_id": 63225, - "relic_set_id": 322, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - } - ], - "internal_uid": 908, - "equip_avatar": 1005 - }, - { - "level": 15, - "relic_id": 61164, - "relic_set_id": 116, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 909, - "equip_avatar": 1410 - }, - { - "level": 15, - "relic_id": 61163, - "relic_set_id": 116, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 910, - "equip_avatar": 1005 - }, - { - "level": 15, - "relic_id": 63225, - "relic_set_id": 322, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - } - ], - "internal_uid": 911, - "equip_avatar": 1410 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 912, - "equip_avatar": 1502 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 1 - } - ], - "internal_uid": 913, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 914, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - } - ], - "internal_uid": 915, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - } - ], - "internal_uid": 916, - "equip_avatar": 1414 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 3 - } - ], - "internal_uid": 917, - "equip_avatar": 1321 - }, - { - "level": 15, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - } - ], - "internal_uid": 918, - "equip_avatar": 1414 - }, - { - "level": 15, - "relic_id": 61281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 5 - } - ], - "internal_uid": 919, - "equip_avatar": 1414 - }, - { - "level": 15, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 920, - "equip_avatar": 1414 - }, - { - "level": 15, - "relic_id": 63185, - "relic_set_id": 318, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 921, - "equip_avatar": 1402 - }, - { - "level": 15, - "relic_id": 63186, - "relic_set_id": 318, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - } - ], - "internal_uid": 922, - "equip_avatar": 1402 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 923, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 924, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 925, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - } - ], - "internal_uid": 926, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - } - ], - "internal_uid": 927, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 928, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 929, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 930, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 5 - } - ], - "internal_uid": 931, - "equip_avatar": 1403 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - } - ], - "internal_uid": 932, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 933, - "equip_avatar": 8010 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 5 - } - ], - "internal_uid": 934, - "equip_avatar": 1321 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 1 - } - ], - "internal_uid": 935, - "equip_avatar": 1225 - }, - { - "level": 15, - "relic_id": 63166, - "relic_set_id": 316, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 4, - "step": 6 - } - ], - "internal_uid": 936, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 1 - } - ], - "internal_uid": 937, - "equip_avatar": 1310 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 938, - "equip_avatar": 8010 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 939, - "equip_avatar": 1004 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 940, - "equip_avatar": 1321 - }, - { - "level": 15, - "relic_id": 63166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 941, - "equip_avatar": 1310 - }, - { - "level": 15, - "relic_id": 63166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 942, - "equip_avatar": 1225 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 2 - } - ], - "internal_uid": 943, - "equip_avatar": 1004 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 944, - "equip_avatar": 1225 - }, - { - "level": 15, - "relic_id": 61191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 945, - "equip_avatar": 1310 - }, - { - "level": 15, - "relic_id": 61191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 946, - "equip_avatar": 1321 - }, - { - "level": 15, - "relic_id": 63165, - "relic_set_id": 316, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 947, - "equip_avatar": 1225 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 948, - "equip_avatar": 1310 - }, - { - "level": 15, - "relic_id": 63165, - "relic_set_id": 316, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 949, - "equip_avatar": 1310 - }, - { - "level": 15, - "relic_id": 61191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 950, - "equip_avatar": 1225 - }, - { - "level": 14, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 951, - "equip_avatar": 1403 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 4 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - } - ], - "internal_uid": 952, - "equip_avatar": 1505 - }, - { - "level": 15, - "relic_id": 61301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 953, - "equip_avatar": 1502 - }, - { - "level": 15, - "relic_id": 61302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - } - ], - "internal_uid": 954, - "equip_avatar": 1502 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 955, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 956, - "equip_avatar": 1502 - }, - { - "level": 15, - "relic_id": 61303, - "relic_set_id": 130, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 957, - "equip_avatar": 1502 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 958, - "equip_avatar": 1505 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 959, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 960, - "equip_avatar": 1004 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 961, - "equip_avatar": 1004 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 962, - "equip_avatar": 1004 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 963, - "equip_avatar": 1004 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 8 - } - ], - "internal_uid": 964, - "equip_avatar": 8010 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 4 - } - ], - "internal_uid": 965, - "equip_avatar": 8010 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 966, - "equip_avatar": 1505 - }, - { - "level": 15, - "relic_id": 61021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 2 - } - ], - "internal_uid": 967, - "equip_avatar": 1309 - }, - { - "level": 15, - "relic_id": 61023, - "relic_set_id": 102, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - } - ], - "internal_uid": 968, - "equip_avatar": 1309 - }, - { - "level": 15, - "relic_id": 61162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - } - ], - "internal_uid": 969, - "equip_avatar": 1309 - }, - { - "level": 15, - "relic_id": 61164, - "relic_set_id": 116, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - } - ], - "internal_uid": 970, - "equip_avatar": 1309 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 4, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - } - ], - "internal_uid": 971, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - } - ], - "internal_uid": 972, - "equip_avatar": 1217 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - } - ], - "internal_uid": 973, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 974, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - } - ], - "internal_uid": 975, - "equip_avatar": 1505 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - } - ], - "internal_uid": 976, - "equip_avatar": 1505 - }, - { - "level": 15, - "relic_id": 63106, - "relic_set_id": 310, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 977, - "equip_avatar": 1217 - }, - { - "level": 15, - "relic_id": 63105, - "relic_set_id": 310, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - } - ], - "internal_uid": 978, - "equip_avatar": 1217 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - } - ], - "internal_uid": 979, - "equip_avatar": 8010 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 2, - "count": 3, - "step": 5 - } - ], - "internal_uid": 980, - "equip_avatar": 8010 - }, - { - "level": 15, - "relic_id": 61304, - "relic_set_id": 130, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 981, - "equip_avatar": 1502 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - } - ], - "internal_uid": 982, - "equip_avatar": 1505 - }, - { - "level": 15, - "relic_id": 61313, - "relic_set_id": 131, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 983, - "equip_avatar": 1510 - }, - { - "level": 15, - "relic_id": 61314, - "relic_set_id": 131, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 984, - "equip_avatar": 1510 - }, - { - "level": 15, - "relic_id": 63276, - "relic_set_id": 327, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 985, - "equip_avatar": 1510 - }, - { - "level": 15, - "relic_id": 63275, - "relic_set_id": 327, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 986, - "equip_avatar": 1510 - }, - { - "level": 15, - "relic_id": 61312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 5 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 987, - "equip_avatar": 1510 - }, - { - "level": 15, - "relic_id": 61311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - } - ], - "internal_uid": 988, - "equip_avatar": 1510 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 989, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 990, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 991, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 992, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61313, - "relic_set_id": 131, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 993, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - } - ], - "internal_uid": 994, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61314, - "relic_set_id": 131, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 995, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61313, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 996, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 997, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63276, - "relic_set_id": 327, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 998, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63275, - "relic_set_id": 327, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 999, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63286, - "relic_set_id": 328, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1000, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63275, - "relic_set_id": 327, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1001, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63286, - "relic_set_id": 328, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1002, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63276, - "relic_set_id": 327, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1003, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63286, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1004, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63285, - "relic_set_id": 328, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1005, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63276, - "relic_set_id": 327, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1006, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63286, - "relic_set_id": 328, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1007, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63276, - "relic_set_id": 327, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1008, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63286, - "relic_set_id": 328, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1009, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1010, - "equip_avatar": 1503 - }, - { - "level": 15, - "relic_id": 61332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1011, - "equip_avatar": 1503 - }, - { - "level": 15, - "relic_id": 61333, - "relic_set_id": 133, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1012, - "equip_avatar": 1503 - }, - { - "level": 15, - "relic_id": 61334, - "relic_set_id": 133, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1013, - "equip_avatar": 1503 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1014, - "equip_avatar": 1503 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1015, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1016, - "equip_avatar": 1503 - }, - { - "level": 15, - "relic_id": 61331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1017, - "equip_avatar": 1511 - }, - { - "level": 15, - "relic_id": 61332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1018, - "equip_avatar": 1511 - }, - { - "level": 15, - "relic_id": 61333, - "relic_set_id": 133, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1019, - "equip_avatar": 1511 - }, - { - "level": 15, - "relic_id": 61333, - "relic_set_id": 133, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1020, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61334, - "relic_set_id": 133, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 12, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1021, - "equip_avatar": 1511 - }, - { - "level": 15, - "relic_id": 63295, - "relic_set_id": 329, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1022, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63296, - "relic_set_id": 329, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1023, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63296, - "relic_set_id": 329, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1024, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1025, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1026, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1027, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - } - ], - "internal_uid": 1028, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - } - ], - "internal_uid": 1029, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1030, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 5 - } - ], - "internal_uid": 1031, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1032, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1033, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1034, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 7 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1035, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1036, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1037, - "equip_avatar": 1308 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1038, - "equip_avatar": 1308 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1039, - "equip_avatar": 1221 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1040, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1041, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1042, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1043, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 1044, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - } - ], - "internal_uid": 1045, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1046, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 1047, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1048, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1049, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1050, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1051, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1052, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 0 - } - ], - "internal_uid": 1053, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1054, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1055, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1056, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1057, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1058, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1059, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1060, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1061, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1062, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1063, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1064, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1065, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1066, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1067, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1068, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1069, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1070, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1071, - "equip_avatar": 1212 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1072, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1073, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1074, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1075, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1076, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1077, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1078, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63296, - "relic_set_id": 329, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - } - ], - "internal_uid": 1079, - "equip_avatar": 1511 - }, - { - "level": 15, - "relic_id": 63295, - "relic_set_id": 329, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 0 - } - ], - "internal_uid": 1080, - "equip_avatar": 1511 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1081, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1082, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1083, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1084, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1085, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1086, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - } - ], - "internal_uid": 1087, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - } - ], - "internal_uid": 1088, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1089, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1090, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1091, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61153, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1092, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1093, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1094, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1095, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1096, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1097, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1098, - "equip_avatar": 1507 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1099, - "equip_avatar": 1507 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 7 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1100, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1101, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1102, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 1103, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - } - ], - "internal_uid": 1104, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1105, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 1106, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1107, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1108, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1109, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1110, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1111, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 0 - } - ], - "internal_uid": 1112, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1113, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1114, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1115, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1116, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1117, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1118, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1119, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1120, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1121, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1122, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1123, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1124, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1125, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1126, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1127, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1128, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1129, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1130, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1131, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 10, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1132, - "equip_avatar": 1506 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1133, - "equip_avatar": 1506 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1134, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 4, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1135, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1136, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1137, - "equip_avatar": 1501 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1138, - "equip_avatar": 1501 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1139, - "equip_avatar": 1401 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1140, - "equip_avatar": 1401 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1141, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1142, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61174, - "relic_set_id": 117, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1143, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61174, - "relic_set_id": 117, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1144, - "equip_avatar": 1406 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1145, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1146, - "equip_avatar": 1406 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1147, - "equip_avatar": 1406 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 5, - "step": 6 - } - ], - "internal_uid": 1148, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1149, - "equip_avatar": 1404 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1150, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 1 - } - ], - "internal_uid": 1151, - "equip_avatar": 1315 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1152, - "equip_avatar": 1315 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1153, - "equip_avatar": 1317 - }, - { - "level": 15, - "relic_id": 63165, - "relic_set_id": 316, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1154, - "equip_avatar": 1315 - }, - { - "level": 15, - "relic_id": 63166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1155, - "equip_avatar": 1315 - }, - { - "level": 15, - "relic_id": 61191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1156, - "equip_avatar": 1317 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 1 - } - ], - "internal_uid": 1157, - "equip_avatar": 1317 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1158, - "equip_avatar": 1317 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1159, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63165, - "relic_set_id": 316, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1160, - "equip_avatar": 1317 - }, - { - "level": 15, - "relic_id": 63166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1161, - "equip_avatar": 1317 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1162, - "equip_avatar": 1015 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1163, - "equip_avatar": 1014 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1164, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1165, - "equip_avatar": 1102 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1166, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1167, - "equip_avatar": 1314 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1168, - "equip_avatar": 1314 - }, - { - "level": 15, - "relic_id": 63135, - "relic_set_id": 313, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1169, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63135, - "relic_set_id": 313, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1170, - "equip_avatar": 1314 - }, - { - "level": 15, - "relic_id": 63136, - "relic_set_id": 313, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1171, - "equip_avatar": 1314 - }, - { - "level": 15, - "relic_id": 61172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1172, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1173, - "equip_avatar": 1307 - }, - { - "level": 15, - "relic_id": 61162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1174, - "equip_avatar": 1307 - }, - { - "level": 15, - "relic_id": 61163, - "relic_set_id": 116, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1175, - "equip_avatar": 1307 - }, - { - "level": 15, - "relic_id": 61164, - "relic_set_id": 116, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 1 - } - ], - "internal_uid": 1176, - "equip_avatar": 1307 - }, - { - "level": 15, - "relic_id": 63035, - "relic_set_id": 303, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 6 - } - ], - "internal_uid": 1177, - "equip_avatar": 1307 - }, - { - "level": 15, - "relic_id": 63036, - "relic_set_id": 303, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 6 - } - ], - "internal_uid": 1178, - "equip_avatar": 1307 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 8 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1179, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1180, - "equip_avatar": 1305 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1181, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1182, - "equip_avatar": 1305 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 10, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1183, - "equip_avatar": 1305 - }, - { - "level": 15, - "relic_id": 61282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1184, - "equip_avatar": 1304 - }, - { - "level": 15, - "relic_id": 61283, - "relic_set_id": 128, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1185, - "equip_avatar": 1304 - }, - { - "level": 15, - "relic_id": 61284, - "relic_set_id": 128, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1186, - "equip_avatar": 1304 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1187, - "equip_avatar": 1304 - }, - { - "level": 15, - "relic_id": 63176, - "relic_set_id": 317, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1188, - "equip_avatar": 1304 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1189, - "equip_avatar": 1302 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1190, - "equip_avatar": 1302 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1191, - "equip_avatar": 1302 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1192, - "equip_avatar": 1302 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1193, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1194, - "equip_avatar": 1302 - }, - { - "level": 15, - "relic_id": 61191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1195, - "equip_avatar": 1222 - }, - { - "level": 15, - "relic_id": 61192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 8 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 4, - "step": 5 - } - ], - "internal_uid": 1196, - "equip_avatar": 1222 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1197, - "equip_avatar": 1222 - }, - { - "level": 15, - "relic_id": 61193, - "relic_set_id": 119, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1198, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61194, - "relic_set_id": 119, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1199, - "equip_avatar": 1222 - }, - { - "level": 15, - "relic_id": 63165, - "relic_set_id": 316, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1200, - "equip_avatar": 1222 - }, - { - "level": 15, - "relic_id": 63166, - "relic_set_id": 316, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1201, - "equip_avatar": 1222 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1202, - "equip_avatar": 1507 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1203, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1204, - "equip_avatar": 1507 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1205, - "equip_avatar": 1220 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 1, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1206, - "equip_avatar": 1220 - }, - { - "level": 15, - "relic_id": 63155, - "relic_set_id": 315, - "main_affix_id": 8, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 2, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1207, - "equip_avatar": 1220 - }, - { - "level": 15, - "relic_id": 63156, - "relic_set_id": 315, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 3, - "step": 5 - } - ], - "internal_uid": 1208, - "equip_avatar": 1220 - }, - { - "level": 15, - "relic_id": 61162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1209, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61163, - "relic_set_id": 116, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 8 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1210, - "equip_avatar": 1218 - }, - { - "level": 15, - "relic_id": 61164, - "relic_set_id": 116, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1211, - "equip_avatar": 1218 - }, - { - "level": 15, - "relic_id": 63035, - "relic_set_id": 303, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1212, - "equip_avatar": 1218 - }, - { - "level": 15, - "relic_id": 63036, - "relic_set_id": 303, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1213, - "equip_avatar": 1218 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1214, - "equip_avatar": 1205 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1215, - "equip_avatar": 1205 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1216, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1217, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1218, - "equip_avatar": 1205 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1219, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 6 - } - ], - "internal_uid": 1220, - "equip_avatar": 1205 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1221, - "equip_avatar": 1006 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1222, - "equip_avatar": 1006 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1223, - "equip_avatar": 1006 - }, - { - "level": 15, - "relic_id": 61081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1224, - "equip_avatar": 1015 - }, - { - "level": 15, - "relic_id": 61082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1225, - "equip_avatar": 1015 - }, - { - "level": 15, - "relic_id": 61083, - "relic_set_id": 108, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1226, - "equip_avatar": 1015 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1227, - "equip_avatar": 1015 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1228, - "equip_avatar": 1015 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1229, - "equip_avatar": 1014 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1230, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1231, - "equip_avatar": 1014 - }, - { - "level": 15, - "relic_id": 61084, - "relic_set_id": 108, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1232, - "equip_avatar": 1014 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1233, - "equip_avatar": 1014 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1234, - "equip_avatar": 1014 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1235, - "equip_avatar": 1213 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1236, - "equip_avatar": 1212 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1237, - "equip_avatar": 1213 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1238, - "equip_avatar": 1213 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1239, - "equip_avatar": 1213 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1240, - "equip_avatar": 1213 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 8 - } - ], - "internal_uid": 1241, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1242, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1243, - "equip_avatar": 1212 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1244, - "equip_avatar": 1212 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1245, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1246, - "equip_avatar": 1212 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1247, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1248, - "equip_avatar": 1208 - }, - { - "level": 15, - "relic_id": 61131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1249, - "equip_avatar": 1208 - }, - { - "level": 15, - "relic_id": 61133, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1250, - "equip_avatar": 1208 - }, - { - "level": 15, - "relic_id": 61134, - "relic_set_id": 113, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1251, - "equip_avatar": 1208 - }, - { - "level": 15, - "relic_id": 63025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 4, - "step": 8 - } - ], - "internal_uid": 1252, - "equip_avatar": 1208 - }, - { - "level": 15, - "relic_id": 63026, - "relic_set_id": 302, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1253, - "equip_avatar": 1208 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 0 - } - ], - "internal_uid": 1254, - "equip_avatar": 1211 - }, - { - "level": 15, - "relic_id": 61014, - "relic_set_id": 101, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1255, - "equip_avatar": 1203 - }, - { - "level": 15, - "relic_id": 61013, - "relic_set_id": 101, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 1, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1256, - "equip_avatar": 1203 - }, - { - "level": 15, - "relic_id": 61012, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 4, - "step": 7 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1257, - "equip_avatar": 1203 - }, - { - "level": 15, - "relic_id": 61011, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1258, - "equip_avatar": 1203 - }, - { - "level": 15, - "relic_id": 63025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 4, - "step": 8 - } - ], - "internal_uid": 1259, - "equip_avatar": 1203 - }, - { - "level": 15, - "relic_id": 63026, - "relic_set_id": 302, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1260, - "equip_avatar": 1203 - }, - { - "level": 15, - "relic_id": 61214, - "relic_set_id": 121, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 10, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1261, - "equip_avatar": 1101 - }, - { - "level": 15, - "relic_id": 63175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1262, - "equip_avatar": 1101 - }, - { - "level": 15, - "relic_id": 61221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - } - ], - "internal_uid": 1263, - "equip_avatar": 1204 - }, - { - "level": 15, - "relic_id": 61222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1264, - "equip_avatar": 1204 - }, - { - "level": 15, - "relic_id": 61223, - "relic_set_id": 122, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1265, - "equip_avatar": 1204 - }, - { - "level": 15, - "relic_id": 63095, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1266, - "equip_avatar": 1204 - }, - { - "level": 15, - "relic_id": 63096, - "relic_set_id": 309, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1267, - "equip_avatar": 1204 - }, - { - "level": 15, - "relic_id": 61131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1268, - "equip_avatar": 1107 - }, - { - "level": 15, - "relic_id": 61132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 12, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1269, - "equip_avatar": 1107 - }, - { - "level": 15, - "relic_id": 61133, - "relic_set_id": 113, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1270, - "equip_avatar": 1107 - }, - { - "level": 15, - "relic_id": 61134, - "relic_set_id": 113, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1271, - "equip_avatar": 1107 - }, - { - "level": 15, - "relic_id": 63155, - "relic_set_id": 315, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 12, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1272, - "equip_avatar": 1107 - }, - { - "level": 15, - "relic_id": 63156, - "relic_set_id": 315, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1273, - "equip_avatar": 1107 - }, - { - "level": 15, - "relic_id": 61291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1274, - "equip_avatar": 1513 - }, - { - "level": 15, - "relic_id": 61292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1275, - "equip_avatar": 1513 - }, - { - "level": 15, - "relic_id": 61293, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 7, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1276, - "equip_avatar": 1513 - }, - { - "level": 15, - "relic_id": 61294, - "relic_set_id": 129, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 1 - } - ], - "internal_uid": 1277, - "equip_avatar": 1513 - }, - { - "level": 15, - "relic_id": 63255, - "relic_set_id": 325, - "main_affix_id": 9, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - } - ], - "internal_uid": 1278, - "equip_avatar": 1513 - }, - { - "level": 15, - "relic_id": 63256, - "relic_set_id": 325, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1279, - "equip_avatar": 1513 - }, - { - "level": 15, - "relic_id": 61151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - } - ], - "internal_uid": 1280, - "equip_avatar": 1504 - }, - { - "level": 15, - "relic_id": 61152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1281, - "equip_avatar": 1504 - }, - { - "level": 15, - "relic_id": 61153, - "relic_set_id": 115, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1282, - "equip_avatar": 1504 - }, - { - "level": 15, - "relic_id": 61154, - "relic_set_id": 115, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1283, - "equip_avatar": 1504 - }, - { - "level": 15, - "relic_id": 63265, - "relic_set_id": 326, - "main_affix_id": 7, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1284, - "equip_avatar": 1504 - }, - { - "level": 15, - "relic_id": 63266, - "relic_set_id": 326, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1285, - "equip_avatar": 1504 - }, - { - "level": 15, - "relic_id": 61321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 5, - "step": 7 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1286, - "equip_avatar": 1220 - }, - { - "level": 15, - "relic_id": 61322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1287, - "equip_avatar": 1220 - }, - { - "level": 15, - "relic_id": 61323, - "relic_set_id": 132, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 5 - } - ], - "internal_uid": 1288, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1289, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 7 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1290, - "equip_avatar": 1507 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1291, - "equip_avatar": 1507 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1292, - "equip_avatar": 1413 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 5 - } - ], - "internal_uid": 1293, - "equip_avatar": 1413 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 6 - } - ], - "internal_uid": 1294, - "equip_avatar": 1413 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1295, - "equip_avatar": 1413 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 4 - } - ], - "internal_uid": 1296, - "equip_avatar": 1413 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1297, - "equip_avatar": 1413 - }, - { - "level": 15, - "relic_id": 61271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1298, - "equip_avatar": 1512 - }, - { - "level": 15, - "relic_id": 61272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1299, - "equip_avatar": 1512 - }, - { - "level": 15, - "relic_id": 61273, - "relic_set_id": 127, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1300, - "equip_avatar": 1512 - }, - { - "level": 15, - "relic_id": 61274, - "relic_set_id": 127, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1301, - "equip_avatar": 1512 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 0 - } - ], - "internal_uid": 1302, - "equip_avatar": 1512 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1303, - "equip_avatar": 1512 - }, - { - "level": 15, - "relic_id": 61211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1304, - "equip_avatar": 1415 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 7, - "count": 5, - "step": 6 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1305, - "equip_avatar": 1415 - }, - { - "level": 15, - "relic_id": 61213, - "relic_set_id": 121, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 6, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 3 - } - ], - "internal_uid": 1306, - "equip_avatar": 1415 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 0 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 3, - "step": 4 - } - ], - "internal_uid": 1307, - "equip_avatar": 1415 - }, - { - "level": 15, - "relic_id": 63085, - "relic_set_id": 308, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1308, - "equip_avatar": 1415 - }, - { - "level": 15, - "relic_id": 63086, - "relic_set_id": 308, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1309, - "equip_avatar": 1415 - }, - { - "level": 15, - "relic_id": 61251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1310, - "equip_avatar": 1409 - }, - { - "level": 15, - "relic_id": 61252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1311, - "equip_avatar": 1409 - }, - { - "level": 15, - "relic_id": 61253, - "relic_set_id": 125, - "main_affix_id": 6, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 3, - "step": 3 - } - ], - "internal_uid": 1312, - "equip_avatar": 1409 - }, - { - "level": 15, - "relic_id": 61254, - "relic_set_id": 125, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 4 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1313, - "equip_avatar": 1409 - }, - { - "level": 15, - "relic_id": 63235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 7, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1314, - "equip_avatar": 1409 - }, - { - "level": 15, - "relic_id": 63236, - "relic_set_id": 323, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 7, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1315, - "equip_avatar": 1409 - }, - { - "level": 15, - "relic_id": 61241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1316, - "equip_avatar": 1407 - }, - { - "level": 15, - "relic_id": 61242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 8, - "count": 3, - "step": 1 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 10, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 12, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1317, - "equip_avatar": 1407 - }, - { - "level": 15, - "relic_id": 61243, - "relic_set_id": 124, - "main_affix_id": 5, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 3, - "count": 2, - "step": 2 - }, - { - "sub_affix_id": 4, - "count": 2, - "step": 2 - } - ], - "internal_uid": 1318, - "equip_avatar": 1407 - }, - { - "level": 15, - "relic_id": 61244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 0 - }, - { - "sub_affix_id": 10, - "count": 3, - "step": 2 - } - ], - "internal_uid": 1319, - "equip_avatar": 1407 - }, - { - "level": 15, - "relic_id": 63195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 2, - "step": 3 - } - ], - "internal_uid": 1320, - "equip_avatar": 1407 - }, - { - "level": 15, - "relic_id": 63196, - "relic_set_id": 319, - "main_affix_id": 3, - "sub_affixes": [ - { - "sub_affix_id": 3, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 2 - }, - { - "sub_affix_id": 9, - "count": 3, - "step": 4 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1321, - "equip_avatar": 1407 - }, - { - "level": 15, - "relic_id": 61101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 4, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 5, - "count": 2, - "step": 1 - }, - { - "sub_affix_id": 8, - "count": 3, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1322, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 2, - "step": 3 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 5 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 2 - }, - { - "sub_affix_id": 10, - "count": 1, - "step": 2 - } - ], - "internal_uid": 1323, - "equip_avatar": 0 - }, - { - "level": 15, - "relic_id": 61103, - "relic_set_id": 110, - "main_affix_id": 4, - "sub_affixes": [ - { - "sub_affix_id": 5, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 6, - "count": 3, - "step": 3 - }, - { - "sub_affix_id": 9, - "count": 1, - "step": 1 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 1 - } - ], - "internal_uid": 1324, - "equip_avatar": 1308 - }, - { - "level": 15, - "relic_id": 61104, - "relic_set_id": 110, - "main_affix_id": 2, - "sub_affixes": [ - { - "sub_affix_id": 6, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 11, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 8, - "count": 4, - "step": 6 - }, - { - "sub_affix_id": 12, - "count": 2, - "step": 0 - } - ], - "internal_uid": 1325, - "equip_avatar": 1308 - }, - { - "level": 0, - "relic_id": 61031, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1326, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61032, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1327, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61033, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1328, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61034, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1329, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61041, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1330, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61042, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1331, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61043, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1332, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61044, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1333, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61051, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1334, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61052, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1335, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61053, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1336, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61054, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1337, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61071, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1338, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61072, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1339, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61073, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1340, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61074, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1341, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61091, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1342, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61092, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1343, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61093, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1344, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61094, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1345, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61111, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1346, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61112, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1347, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61113, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1348, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61114, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1349, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61121, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1350, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61122, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1351, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61123, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1352, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61124, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1353, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61181, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1354, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61182, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1355, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61183, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1356, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61184, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1357, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61201, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1358, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61202, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1359, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61203, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1360, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61204, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1361, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61341, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1362, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61342, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1363, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61343, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1364, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 61344, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1365, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63015, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1366, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63016, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1367, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63045, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1368, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63046, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1369, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63055, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1370, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63056, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1371, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63065, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1372, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63066, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1373, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63075, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1374, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63076, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1375, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63115, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1376, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63116, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1377, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63125, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1378, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 63126, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1379, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71011, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1380, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71012, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1381, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71013, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1382, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71014, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1383, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1384, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1385, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71023, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1386, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71024, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1387, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71031, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1388, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71032, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1389, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71033, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1390, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71034, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1391, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71041, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1392, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71042, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1393, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71043, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1394, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71044, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1395, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71051, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1396, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71052, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1397, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71053, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1398, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71054, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1399, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1400, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1401, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71063, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1402, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1403, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71071, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1404, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71072, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1405, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71073, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1406, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71074, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1407, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1408, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1409, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71083, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1410, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1411, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71091, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1412, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71092, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1413, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71093, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1414, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71094, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1415, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1416, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1417, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71103, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1418, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1419, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71111, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1420, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71112, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1421, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71113, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1422, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71114, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1423, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71121, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1424, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71122, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1425, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71123, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1426, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71124, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1427, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1428, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1429, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71133, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1430, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71134, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1431, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71141, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1432, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71142, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1433, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71143, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1434, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71144, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1435, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1436, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1437, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71153, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1438, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1439, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1440, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1441, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71163, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1442, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71164, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1443, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1444, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1445, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71173, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1446, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71174, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1447, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71181, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1448, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71182, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1449, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71183, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1450, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71184, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1451, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1452, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1453, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1454, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71194, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1455, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71201, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1456, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71202, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1457, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71203, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1458, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71204, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1459, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1460, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1461, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71213, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1462, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1463, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1464, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1465, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71223, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1466, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1467, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1468, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1469, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71233, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1470, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71234, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1471, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1472, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1473, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71243, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1474, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1475, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1476, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1477, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71253, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1478, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71254, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1479, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1480, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71262, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1481, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1482, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71264, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1483, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1484, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1485, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1486, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1487, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1488, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1489, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71283, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1490, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1491, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1492, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1493, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71293, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1494, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1495, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1496, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1497, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71303, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1498, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71304, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1499, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1500, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1501, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71313, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1502, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71314, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1503, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1504, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1505, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71323, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1506, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1507, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1508, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1509, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71333, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1510, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71334, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1511, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71341, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1512, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71342, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1513, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71343, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1514, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 71344, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1515, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73015, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1516, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73016, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1517, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1518, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73026, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1519, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73035, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1520, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73036, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1521, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73045, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1522, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73046, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1523, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73055, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1524, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73056, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1525, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73065, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1526, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73066, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1527, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73075, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1528, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73076, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1529, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1530, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73086, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1531, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73095, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1532, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73096, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1533, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73105, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1534, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73106, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1535, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73115, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1536, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73116, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1537, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73125, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1538, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73126, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1539, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73135, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1540, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73136, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1541, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73145, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1542, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73146, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1543, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73155, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1544, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73156, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1545, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73165, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1546, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1547, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1548, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73176, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1549, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73185, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1550, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73186, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1551, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1552, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73196, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1553, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1554, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73206, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1555, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1556, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73216, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1557, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73225, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1558, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73226, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1559, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1560, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73236, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1561, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73245, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1562, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73246, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1563, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73255, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1564, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73256, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1565, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73265, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1566, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73266, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1567, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73275, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1568, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73276, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1569, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73285, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1570, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 73286, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1571, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81011, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1572, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81012, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1573, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81013, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1574, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81014, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1575, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1576, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1577, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81023, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1578, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81024, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1579, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81031, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1580, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81032, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1581, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81033, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1582, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81034, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1583, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81041, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1584, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81042, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1585, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81043, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1586, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81044, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1587, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81051, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1588, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81052, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1589, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81053, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1590, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81054, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1591, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1592, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1593, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81063, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1594, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1595, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81071, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1596, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81072, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1597, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81073, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1598, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81074, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1599, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1600, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1601, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81083, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1602, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1603, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81091, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1604, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81092, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1605, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81093, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1606, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81094, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1607, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1608, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1609, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81103, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1610, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1611, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81111, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1612, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81112, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1613, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81113, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1614, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81114, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1615, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81121, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1616, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81122, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1617, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81123, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1618, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81124, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1619, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1620, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1621, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81133, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1622, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81134, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1623, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81141, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1624, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81142, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1625, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81143, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1626, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81144, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1627, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1628, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1629, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81153, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1630, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1631, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1632, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1633, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81163, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1634, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81164, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1635, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1636, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1637, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81173, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1638, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81174, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1639, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81181, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1640, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81182, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1641, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81183, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1642, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81184, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1643, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1644, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1645, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1646, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81194, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1647, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81201, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1648, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81202, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1649, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81203, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1650, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81204, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1651, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1652, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1653, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81213, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1654, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1655, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1656, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1657, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81223, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1658, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1659, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1660, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1661, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81233, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1662, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81234, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1663, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1664, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1665, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81243, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1666, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1667, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1668, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1669, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81253, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1670, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81254, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1671, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1672, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81262, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1673, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1674, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81264, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1675, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1676, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1677, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1678, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1679, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1680, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1681, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81283, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1682, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1683, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1684, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1685, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81293, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1686, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1687, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1688, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1689, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81303, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1690, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81304, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1691, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1692, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1693, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81313, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1694, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81314, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1695, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1696, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1697, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81323, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1698, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1699, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1700, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1701, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81333, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1702, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81334, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1703, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81341, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1704, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81342, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1705, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81343, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1706, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 81344, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1707, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83015, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1708, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83016, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1709, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1710, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83026, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1711, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83035, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1712, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83036, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1713, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83045, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1714, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83046, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1715, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83055, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1716, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83056, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1717, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83065, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1718, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83066, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1719, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83075, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1720, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83076, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1721, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1722, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83086, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1723, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83095, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1724, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83096, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1725, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83105, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1726, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83106, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1727, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83115, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1728, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83116, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1729, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83125, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1730, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83126, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1731, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83135, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1732, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83136, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1733, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83145, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1734, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83146, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1735, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83155, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1736, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83156, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1737, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83165, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1738, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1739, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1740, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83176, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1741, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83185, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1742, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83186, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1743, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1744, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83196, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1745, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1746, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83206, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1747, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1748, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83216, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1749, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83225, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1750, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83226, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1751, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1752, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83236, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1753, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83245, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1754, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83246, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1755, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83255, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1756, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83256, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1757, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83265, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1758, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83266, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1759, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83275, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1760, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83276, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1761, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83285, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1762, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 83286, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1763, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 85001, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1764, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 85002, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1765, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 85003, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1766, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 85004, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1767, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 85005, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1768, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 85006, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1769, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91011, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1770, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91012, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1771, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91013, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1772, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91014, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1773, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1774, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1775, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91023, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1776, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91024, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1777, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91031, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1778, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91032, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1779, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91033, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1780, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91034, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1781, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91041, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1782, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91042, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1783, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91043, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1784, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91044, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1785, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91051, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1786, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91052, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1787, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91053, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1788, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91054, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1789, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1790, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1791, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91063, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1792, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1793, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91071, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1794, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91072, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1795, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91073, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1796, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91074, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1797, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1798, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1799, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91083, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1800, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1801, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91091, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1802, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91092, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1803, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91093, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1804, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91094, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1805, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1806, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1807, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91103, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1808, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1809, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91111, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1810, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91112, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1811, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91113, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1812, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91114, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1813, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91121, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1814, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91122, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1815, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91123, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1816, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91124, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1817, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1818, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1819, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91133, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1820, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91134, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1821, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91141, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1822, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91142, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1823, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91143, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1824, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91144, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1825, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1826, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1827, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91153, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1828, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1829, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1830, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1831, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91163, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1832, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91164, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1833, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1834, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1835, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91173, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1836, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91174, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1837, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91181, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1838, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91182, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1839, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91183, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1840, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91184, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1841, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1842, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1843, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1844, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91194, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1845, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91201, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1846, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91202, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1847, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91203, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1848, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91204, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1849, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1850, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1851, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91213, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1852, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1853, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1854, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1855, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91223, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1856, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1857, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1858, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1859, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91233, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1860, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91234, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1861, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1862, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1863, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91243, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1864, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1865, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1866, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1867, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91253, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1868, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91254, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1869, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1870, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91262, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1871, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1872, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91264, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1873, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1874, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1875, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1876, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1877, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1878, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1879, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91283, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1880, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1881, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1882, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1883, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91293, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1884, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1885, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1886, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1887, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91303, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1888, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91304, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1889, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1890, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1891, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91313, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1892, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91314, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1893, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1894, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1895, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91323, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1896, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1897, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1898, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1899, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91333, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1900, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91334, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1901, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91341, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1902, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91342, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1903, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91343, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1904, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 91344, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1905, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93015, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1906, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93016, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1907, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1908, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93026, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1909, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93035, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1910, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93036, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1911, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93045, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1912, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93046, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1913, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93055, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1914, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93056, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1915, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93065, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1916, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93066, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1917, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93075, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1918, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93076, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1919, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1920, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93086, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1921, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93095, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1922, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93096, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1923, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93105, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1924, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93106, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1925, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93115, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1926, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93116, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1927, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93125, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1928, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93126, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1929, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93135, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1930, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93136, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1931, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93145, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1932, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93146, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1933, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93155, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1934, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93156, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1935, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93165, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1936, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1937, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1938, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93176, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1939, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93185, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1940, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93186, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1941, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1942, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93196, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1943, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1944, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93206, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1945, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1946, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93216, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1947, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93225, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1948, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93226, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1949, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1950, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93236, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1951, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93245, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1952, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93246, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1953, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93255, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1954, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93256, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1955, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93265, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1956, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93266, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1957, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93275, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1958, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93276, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1959, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93285, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1960, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 93286, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1961, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31011, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1962, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31012, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1963, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31013, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1964, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31014, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1965, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1966, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1967, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31023, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1968, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31024, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1969, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31031, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1970, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31032, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1971, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31033, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1972, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31034, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1973, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31041, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1974, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31042, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1975, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31043, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1976, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31044, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1977, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31051, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1978, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31052, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1979, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31053, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1980, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31054, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1981, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1982, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1983, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31063, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1984, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1985, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31071, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1986, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31072, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1987, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31073, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1988, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31074, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1989, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1990, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1991, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31083, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1992, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1993, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31091, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1994, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31092, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1995, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31093, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1996, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31094, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1997, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1998, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 1999, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31103, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2000, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2001, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31111, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2002, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31112, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2003, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31113, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2004, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31114, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2005, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31121, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2006, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31122, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2007, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31123, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2008, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31124, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2009, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2010, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2011, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31133, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2012, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31134, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2013, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31141, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2014, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31142, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2015, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31143, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2016, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31144, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2017, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2018, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2019, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31153, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2020, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2021, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2022, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2023, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31163, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2024, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31164, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2025, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2026, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2027, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31173, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2028, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31174, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2029, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31181, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2030, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31182, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2031, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31183, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2032, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31184, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2033, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2034, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2035, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2036, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31194, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2037, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31201, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2038, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31202, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2039, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31203, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2040, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31204, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2041, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2042, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2043, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31213, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2044, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2045, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2046, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2047, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31223, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2048, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2049, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2050, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2051, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31233, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2052, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31234, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2053, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2054, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2055, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31243, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2056, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2057, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2058, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2059, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31253, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2060, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31254, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2061, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2062, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31262, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2063, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2064, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31264, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2065, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2066, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2067, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2068, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2069, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2070, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2071, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31283, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2072, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2073, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2074, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2075, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31293, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2076, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2077, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2078, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2079, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31303, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2080, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31304, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2081, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2082, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2083, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31313, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2084, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31314, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2085, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2086, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2087, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31323, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2088, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2089, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2090, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2091, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31333, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2092, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31334, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2093, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31341, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2094, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31342, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2095, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31343, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2096, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 31344, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2097, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33015, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2098, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33016, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2099, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2100, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33026, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2101, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33035, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2102, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33036, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2103, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33045, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2104, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33046, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2105, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33055, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2106, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33056, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2107, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33065, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2108, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33066, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2109, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33075, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2110, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33076, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2111, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2112, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33086, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2113, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33095, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2114, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33096, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2115, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33105, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2116, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33106, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2117, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33115, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2118, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33116, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2119, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33125, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2120, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33126, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2121, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33135, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2122, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33136, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2123, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33145, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2124, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33146, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2125, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33155, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2126, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33156, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2127, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33165, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2128, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2129, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2130, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33176, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2131, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33185, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2132, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33186, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2133, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2134, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33196, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2135, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2136, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33206, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2137, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2138, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33216, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2139, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33225, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2140, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33226, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2141, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2142, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33236, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2143, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33245, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2144, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33246, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2145, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33255, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2146, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33256, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2147, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33265, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2148, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33266, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2149, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33275, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2150, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33276, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2151, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33285, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2152, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 33286, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2153, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41011, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2154, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41012, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2155, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41013, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2156, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41014, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2157, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2158, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2159, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41023, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2160, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41024, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2161, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41031, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2162, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41032, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2163, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41033, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2164, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41034, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2165, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41041, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2166, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41042, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2167, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41043, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2168, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41044, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2169, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41051, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2170, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41052, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2171, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41053, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2172, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41054, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2173, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2174, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2175, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41063, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2176, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2177, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41071, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2178, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41072, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2179, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41073, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2180, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41074, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2181, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2182, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2183, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41083, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2184, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2185, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41091, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2186, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41092, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2187, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41093, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2188, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41094, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2189, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2190, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2191, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41103, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2192, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2193, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41111, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2194, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41112, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2195, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41113, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2196, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41114, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2197, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41121, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2198, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41122, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2199, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41123, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2200, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41124, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2201, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2202, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2203, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41133, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2204, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41134, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2205, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41141, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2206, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41142, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2207, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41143, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2208, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41144, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2209, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2210, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2211, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41153, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2212, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2213, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2214, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2215, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41163, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2216, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41164, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2217, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2218, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2219, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41173, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2220, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41174, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2221, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41181, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2222, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41182, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2223, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41183, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2224, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41184, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2225, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2226, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2227, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2228, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41194, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2229, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41201, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2230, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41202, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2231, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41203, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2232, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41204, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2233, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2234, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2235, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41213, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2236, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2237, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2238, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2239, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41223, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2240, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2241, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2242, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2243, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41233, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2244, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41234, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2245, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2246, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2247, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41243, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2248, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2249, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2250, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2251, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41253, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2252, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41254, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2253, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2254, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41262, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2255, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2256, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41264, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2257, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41271, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2258, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41272, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2259, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41273, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2260, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41274, - "relic_set_id": 127, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2261, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41281, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2262, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41282, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2263, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41283, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2264, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41284, - "relic_set_id": 128, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2265, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2266, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2267, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41293, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2268, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2269, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2270, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2271, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41303, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2272, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41304, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2273, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2274, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2275, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41313, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2276, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41314, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2277, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2278, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2279, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41323, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2280, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2281, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2282, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2283, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41333, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2284, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41334, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2285, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41341, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2286, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41342, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2287, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41343, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2288, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 41344, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2289, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43015, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2290, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43016, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2291, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2292, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43026, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2293, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43035, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2294, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43036, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2295, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43045, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2296, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43046, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2297, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43055, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2298, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43056, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2299, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43065, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2300, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43066, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2301, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43075, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2302, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43076, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2303, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2304, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43086, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2305, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43095, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2306, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43096, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2307, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43105, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2308, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43106, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2309, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43115, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2310, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43116, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2311, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43125, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2312, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43126, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2313, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43135, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2314, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43136, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2315, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43145, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2316, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43146, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2317, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43155, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2318, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43156, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2319, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43165, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2320, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2321, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2322, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43176, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2323, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43185, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2324, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43186, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2325, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2326, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43196, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2327, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2328, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43206, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2329, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2330, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43216, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2331, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43225, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2332, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43226, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2333, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2334, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43236, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2335, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43245, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2336, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43246, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2337, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43255, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2338, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43256, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2339, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43265, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2340, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43266, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2341, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43275, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2342, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43276, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2343, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43285, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2344, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 43286, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2345, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51011, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2346, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51012, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2347, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51013, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2348, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51014, - "relic_set_id": 101, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2349, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51021, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2350, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51022, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2351, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51023, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2352, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51024, - "relic_set_id": 102, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2353, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51031, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2354, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51032, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2355, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51033, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2356, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51034, - "relic_set_id": 103, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2357, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51041, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2358, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51042, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2359, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51043, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2360, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51044, - "relic_set_id": 104, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2361, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51051, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2362, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51052, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2363, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51053, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2364, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51054, - "relic_set_id": 105, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2365, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51061, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2366, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51062, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2367, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51063, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2368, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51064, - "relic_set_id": 106, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2369, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51071, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2370, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51072, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2371, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51073, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2372, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51074, - "relic_set_id": 107, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2373, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51081, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2374, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51082, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2375, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51083, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2376, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51084, - "relic_set_id": 108, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2377, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51091, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2378, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51092, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2379, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51093, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2380, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51094, - "relic_set_id": 109, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2381, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51101, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2382, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51102, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2383, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51103, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2384, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51104, - "relic_set_id": 110, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2385, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51111, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2386, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51112, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2387, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51113, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2388, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51114, - "relic_set_id": 111, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2389, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51121, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2390, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51122, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2391, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51123, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2392, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51124, - "relic_set_id": 112, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2393, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51131, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2394, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51132, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2395, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51133, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2396, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51134, - "relic_set_id": 113, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2397, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51141, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2398, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51142, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2399, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51143, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2400, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51144, - "relic_set_id": 114, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2401, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51151, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2402, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51152, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2403, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51153, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2404, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51154, - "relic_set_id": 115, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2405, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51161, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2406, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51162, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2407, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51163, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2408, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51164, - "relic_set_id": 116, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2409, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51171, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2410, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51172, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2411, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51173, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2412, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51174, - "relic_set_id": 117, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2413, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51181, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2414, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51182, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2415, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51183, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2416, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51184, - "relic_set_id": 118, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2417, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51191, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2418, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51192, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2419, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51193, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2420, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51194, - "relic_set_id": 119, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2421, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51201, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2422, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51202, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2423, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51203, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2424, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51204, - "relic_set_id": 120, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2425, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51211, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2426, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51212, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2427, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51213, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2428, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51214, - "relic_set_id": 121, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2429, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51221, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2430, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51222, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2431, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51223, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2432, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51224, - "relic_set_id": 122, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2433, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51231, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2434, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51232, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2435, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51233, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2436, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51234, - "relic_set_id": 123, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2437, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51241, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2438, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51242, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2439, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51243, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2440, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51244, - "relic_set_id": 124, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2441, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51251, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2442, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51252, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2443, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51253, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2444, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51254, - "relic_set_id": 125, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2445, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51261, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2446, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51262, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2447, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51263, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2448, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51264, - "relic_set_id": 126, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2449, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51291, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2450, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51292, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2451, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51293, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2452, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51294, - "relic_set_id": 129, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2453, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51301, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2454, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51302, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2455, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51303, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2456, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51304, - "relic_set_id": 130, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2457, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51311, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2458, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51312, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2459, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51313, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2460, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51314, - "relic_set_id": 131, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2461, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51321, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2462, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51322, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2463, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51323, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2464, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51324, - "relic_set_id": 132, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2465, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51331, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2466, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51332, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2467, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51333, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2468, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51334, - "relic_set_id": 133, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2469, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51341, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2470, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51342, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2471, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51343, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2472, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 51344, - "relic_set_id": 134, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2473, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53015, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2474, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53016, - "relic_set_id": 301, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2475, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53025, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2476, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53026, - "relic_set_id": 302, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2477, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53035, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2478, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53036, - "relic_set_id": 303, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2479, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53045, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2480, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53046, - "relic_set_id": 304, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2481, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53055, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2482, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53056, - "relic_set_id": 305, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2483, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53065, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2484, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53066, - "relic_set_id": 306, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2485, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53075, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2486, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53076, - "relic_set_id": 307, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2487, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53085, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2488, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53086, - "relic_set_id": 308, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2489, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53095, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2490, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53096, - "relic_set_id": 309, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2491, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53105, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2492, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53106, - "relic_set_id": 310, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2493, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53115, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2494, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53116, - "relic_set_id": 311, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2495, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53125, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2496, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53126, - "relic_set_id": 312, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2497, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53135, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2498, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53136, - "relic_set_id": 313, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2499, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53145, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2500, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53146, - "relic_set_id": 314, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2501, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53155, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2502, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53156, - "relic_set_id": 315, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2503, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53165, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2504, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53166, - "relic_set_id": 316, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2505, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53175, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2506, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53176, - "relic_set_id": 317, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2507, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53185, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2508, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53186, - "relic_set_id": 318, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2509, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53195, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2510, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53196, - "relic_set_id": 319, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2511, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53205, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2512, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53206, - "relic_set_id": 320, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2513, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53215, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2514, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53216, - "relic_set_id": 321, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2515, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53225, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2516, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53226, - "relic_set_id": 322, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2517, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53235, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2518, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53236, - "relic_set_id": 323, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2519, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53245, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2520, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53246, - "relic_set_id": 324, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2521, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53255, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2522, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53256, - "relic_set_id": 325, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2523, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53265, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2524, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53266, - "relic_set_id": 326, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2525, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53275, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2526, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53276, - "relic_set_id": 327, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2527, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53285, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 5, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2528, - "equip_avatar": 0 - }, - { - "level": 0, - "relic_id": 53286, - "relic_set_id": 328, - "main_affix_id": 1, - "sub_affixes": [ - { - "sub_affix_id": 1, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 2, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 3, - "count": 1, - "step": 0 - }, - { - "sub_affix_id": 4, - "count": 1, - "step": 0 - } - ], - "internal_uid": 2529, - "equip_avatar": 0 - } - ], - "materials": { - "11204": 6, - "11213": 6, - "11308": 6, - "131204": 1, - "131213": 1, - "131308": 1 - }, "avatars": { "1001": { "avatar_id": 1001, @@ -76339,13 +46,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 100101 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1002": { "avatar_id": 1002, @@ -76393,18 +98,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 100201 - ], - "sp_value": 0, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1003": { "avatar_id": 1003, "data": { - "rank": 6, + "rank": 5, "skills": { "1003001": 6, "1003002": 10, @@ -76447,13 +150,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 100301 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1004": { "avatar_id": 1004, @@ -76501,13 +202,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 100401 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1005": { "avatar_id": 1005, @@ -76555,18 +254,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 100501 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1006": { "avatar_id": 1006, "data": { - "rank": 6, + "rank": 0, "skills": { "1006001": 6, "1006002": 10, @@ -76609,13 +306,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 100601 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1008": { "avatar_id": 1008, @@ -76662,14 +357,12 @@ "9": 1 } }, - "level": 80, - "promotion": 6, - "techniques": [ - 100801 - ], - "sp_value": 55, + "level": 50, + "owner_uid": 0, + "promotion": 3, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1009": { "avatar_id": 1009, @@ -76717,13 +410,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 100901 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1013": { "avatar_id": 1013, @@ -76771,18 +462,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 101301 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1014": { "avatar_id": 1014, "data": { - "rank": 6, + "rank": 0, "skills": { "1014001": 6, "1014002": 10, @@ -76825,18 +514,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 101401 - ], - "sp_value": 180, "sp_max": 360, - "enhanced_id": null + "sp_value": 180, + "techniques": [] }, "1015": { "avatar_id": 1015, "data": { - "rank": 6, + "rank": 0, "skills": { "1015001": 6, "1015002": 10, @@ -76879,18 +566,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 101501 - ], - "sp_value": 110, "sp_max": 220, - "enhanced_id": null + "sp_value": 110, + "techniques": [] }, "1101": { "avatar_id": 1101, "data": { - "rank": 6, + "rank": 0, "skills": { "1101001": 6, "1101002": 10, @@ -76933,37 +618,35 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110101 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1102": { "avatar_id": 1102, "data": { - "rank": 6, + "rank": 0, "skills": { - "1102001": 6, - "1102002": 10, - "1102003": 10, - "1102004": 10, - "1102007": 1, - "1102101": 1, - "1102102": 1, - "1102103": 1, - "1102201": 1, - "1102202": 1, - "1102203": 1, - "1102204": 1, - "1102205": 1, - "1102206": 1, - "1102207": 1, - "1102208": 1, - "1102209": 1, - "1102210": 1 + "11102001": 6, + "11102002": 10, + "11102003": 10, + "11102004": 10, + "11102007": 1, + "11102101": 1, + "11102102": 1, + "11102103": 1, + "11102201": 1, + "11102202": 1, + "11102203": 1, + "11102204": 1, + "11102205": 1, + "11102206": 1, + "11102207": 1, + "11102208": 1, + "11102209": 1, + "11102210": 1 }, "skills_by_anchor_type": { "1": 6, @@ -76986,14 +669,13 @@ "9": 1 } }, + "enhanced_id": 1, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110201 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1103": { "avatar_id": 1103, @@ -77041,18 +723,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110301 - ], - "sp_value": 50, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1104": { "avatar_id": 1104, "data": { - "rank": 6, + "rank": 0, "skills": { "1104001": 6, "1104002": 10, @@ -77095,13 +775,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110401 - ], - "sp_value": 50, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1105": { "avatar_id": 1105, @@ -77149,13 +827,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110501 - ], - "sp_value": 45, "sp_max": 90, - "enhanced_id": null + "sp_value": 45, + "techniques": [] }, "1106": { "avatar_id": 1106, @@ -77203,18 +879,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110601 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1107": { "avatar_id": 1107, "data": { - "rank": 6, + "rank": 0, "skills": { "1107001": 6, "1107002": 10, @@ -77257,13 +931,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110701 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1108": { "avatar_id": 1108, @@ -77311,13 +983,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110801 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1109": { "avatar_id": 1109, @@ -77365,13 +1035,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 110901 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1110": { "avatar_id": 1110, @@ -77419,13 +1087,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 111001 - ], - "sp_value": 50, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1111": { "avatar_id": 1111, @@ -77473,13 +1139,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 111101 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1112": { "avatar_id": 1112, @@ -77527,13 +1191,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 111201 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1201": { "avatar_id": 1201, @@ -77581,13 +1243,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120101 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1202": { "avatar_id": 1202, @@ -77635,16 +1295,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1203": { "avatar_id": 1203, "data": { - "rank": 6, + "rank": 0, "skills": { "1203001": 6, "1203002": 10, @@ -77687,18 +1347,19 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120301 - ], - "sp_value": 50, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1204": { "avatar_id": 1204, "data": { - "rank": 6, + "ex_rank_id_list": [ + 120401 + ], + "rank": 0, "skills": { "1204001": 6, "1204002": 10, @@ -77741,14 +1402,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120401 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null, - "ex_rank_unlocked": true + "sp_value": 65, + "techniques": [] }, "1205": { "avatar_id": 1205, @@ -77796,13 +1454,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120501 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1206": { "avatar_id": 1206, @@ -77850,13 +1506,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120601 - ], - "sp_value": 0, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1207": { "avatar_id": 1207, @@ -77904,18 +1558,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120701 - ], - "sp_value": 0, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1208": { "avatar_id": 1208, "data": { - "rank": 6, + "rank": 0, "skills": { "1208001": 6, "1208002": 10, @@ -77958,18 +1610,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120802 - ], - "sp_value": 68, "sp_max": 135, - "enhanced_id": null + "sp_value": 68, + "techniques": [] }, "1209": { "avatar_id": 1209, "data": { - "rank": 6, + "rank": 0, "skills": { "1209001": 6, "1209002": 10, @@ -78012,13 +1662,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 120901 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1210": { "avatar_id": 1210, @@ -78066,18 +1714,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121001 - ], - "sp_value": 0, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1211": { "avatar_id": 1211, "data": { - "rank": 6, + "rank": 0, "skills": { "1211001": 6, "1211002": 10, @@ -78120,13 +1766,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121101 - ], - "sp_value": 50, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1212": { "avatar_id": 1212, @@ -78174,18 +1818,19 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121201 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1213": { "avatar_id": 1213, "data": { - "rank": 6, + "ex_rank_id_list": [ + 121301 + ], + "rank": 0, "skills": { "1213001": 6, "1213002": 10, @@ -78228,14 +1873,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121301 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null, - "ex_rank_unlocked": true + "sp_value": 70, + "techniques": [] }, "1214": { "avatar_id": 1214, @@ -78283,13 +1925,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121401 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1215": { "avatar_id": 1215, @@ -78337,37 +1977,17 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121501 - ], - "sp_value": 0, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1217": { "avatar_id": 1217, "data": { "rank": 6, "skills": { - "11217001": 6, - "11217002": 10, - "11217003": 10, - "11217004": 10, - "11217007": 1, - "11217101": 1, - "11217102": 1, - "11217103": 1, - "11217201": 1, - "11217202": 1, - "11217203": 1, - "11217204": 1, - "11217205": 1, - "11217206": 1, - "11217207": 1, - "11217208": 1, - "11217209": 1, - "11217210": 1, "1217001": 6, "1217002": 10, "1217003": 10, @@ -78409,13 +2029,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121701 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": 1 + "sp_value": 70, + "techniques": [] }, "1218": { "avatar_id": 1218, @@ -78463,13 +2081,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 121801 - ], - "sp_value": 50, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1220": { "avatar_id": 1220, @@ -78517,14 +2133,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 122001, - 122002 - ], - "sp_value": 6, "sp_max": 12, - "enhanced_id": null + "sp_value": 6, + "techniques": [] }, "1221": { "avatar_id": 1221, @@ -78572,23 +2185,21 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 122101 - ], - "sp_value": 120, "sp_max": 240, - "enhanced_id": null + "sp_value": 120, + "techniques": [] }, "1222": { "avatar_id": 1222, "data": { "rank": 6, "skills": { - "1222001": 6, - "1222002": 10, + "1222001": 1, + "1222002": 8, "1222003": 10, - "1222004": 10, + "1222004": 8, "1222007": 1, "1222101": 1, "1222102": 1, @@ -78605,7 +2216,7 @@ "1222210": 1 }, "skills_by_anchor_type": { - "1": 6, + "1": 1, "10": 1, "11": 1, "12": 1, @@ -78615,9 +2226,9 @@ "16": 1, "17": 1, "18": 1, - "2": 10, + "2": 8, "3": 10, - "4": 10, + "4": 8, "5": 1, "6": 1, "7": 1, @@ -78626,13 +2237,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 122201 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1223": { "avatar_id": 1223, @@ -78680,14 +2289,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 122301, - 122304 - ], - "sp_value": 0, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1224": { "avatar_id": 1224, @@ -78735,16 +2341,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 122401, - 122401, - 122401, - 122402 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1225": { "avatar_id": 1225, @@ -78792,13 +2393,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 122501 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1301": { "avatar_id": 1301, @@ -78846,18 +2445,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130101 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1302": { "avatar_id": 1302, "data": { - "rank": 6, + "rank": 0, "skills": { "1302001": 6, "1302002": 10, @@ -78900,20 +2497,18 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130201 - ], - "sp_value": 90, "sp_max": 180, - "enhanced_id": null + "sp_value": 90, + "techniques": [] }, "1303": { "avatar_id": 1303, "data": { "rank": 6, "skills": { - "1303001": 6, + "1303001": 4, "1303002": 10, "1303003": 10, "1303004": 10, @@ -78933,7 +2528,7 @@ "1303210": 1 }, "skills_by_anchor_type": { - "1": 6, + "1": 4, "10": 1, "11": 1, "12": 1, @@ -78954,14 +2549,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130301, - 130303 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1304": { "avatar_id": 1304, @@ -79009,20 +2601,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130401, - 130402, - 130403 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1305": { "avatar_id": 1305, "data": { - "rank": 6, + "rank": 0, "skills": { "1305001": 6, "1305002": 10, @@ -79065,18 +2653,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130501 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1306": { "avatar_id": 1306, "data": { - "rank": 6, + "rank": 0, "skills": { "1306001": 6, "1306002": 10, @@ -79119,13 +2705,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130602 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1307": { "avatar_id": 1307, @@ -79173,17 +2757,18 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130701 - ], - "sp_value": 60, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "1308": { "avatar_id": 1308, "data": { + "ex_rank_id_list": [ + 130801 + ], "rank": 6, "skills": { "1308001": 6, @@ -79227,14 +2812,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130803 - ], - "sp_value": 70, - "sp_max": 140, - "enhanced_id": null, - "ex_rank_unlocked": true + "sp_max": 9, + "sp_value": 5, + "techniques": [] }, "1309": { "avatar_id": 1309, @@ -79282,13 +2864,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 130902 - ], - "sp_value": 80, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] }, "1310": { "avatar_id": 1310, @@ -79336,14 +2916,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 131001, - 131002 - ], - "sp_value": 120, "sp_max": 240, - "enhanced_id": null + "sp_value": 120, + "techniques": [] }, "1312": { "avatar_id": 1312, @@ -79391,13 +2968,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 131201 - ], - "sp_value": 50, "sp_max": 100, - "enhanced_id": null + "sp_value": 50, + "techniques": [] }, "1313": { "avatar_id": 1313, @@ -79445,13 +3020,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 131301 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1314": { "avatar_id": 1314, @@ -79499,18 +3072,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 131401 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1315": { "avatar_id": 1315, "data": { - "rank": 6, + "rank": 0, "skills": { "1315001": 6, "1315002": 10, @@ -79553,21 +3124,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 131501, - 131502, - 131502, - 131502 - ], - "sp_value": 58, "sp_max": 115, - "enhanced_id": null + "sp_value": 58, + "techniques": [] }, "1317": { "avatar_id": 1317, "data": { - "rank": 6, + "rank": 0, "skills": { "1317001": 6, "1317002": 10, @@ -79610,13 +3176,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 131701 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1321": { "avatar_id": 1321, @@ -79664,13 +3228,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 132101 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1401": { "avatar_id": 1401, @@ -79718,14 +3280,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140101, - 140102 - ], - "sp_value": 110, "sp_max": 220, - "enhanced_id": null + "sp_value": 110, + "techniques": [] }, "1402": { "avatar_id": 1402, @@ -79777,13 +3336,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140201 - ], - "sp_value": 175, "sp_max": 350, - "enhanced_id": null + "sp_value": 175, + "techniques": [] }, "1403": { "avatar_id": 1403, @@ -79831,13 +3388,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140301 - ], - "sp_value": 70, - "sp_max": 140, - "enhanced_id": null + "sp_max": 120, + "sp_value": 60, + "techniques": [] }, "1404": { "avatar_id": 1404, @@ -79885,13 +3440,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140401 - ], - "sp_value": 80, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] }, "1405": { "avatar_id": 1405, @@ -79939,13 +3492,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140501 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1406": { "avatar_id": 1406, @@ -79993,13 +3544,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140601 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1407": { "avatar_id": 1407, @@ -80051,14 +3600,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140701, - 140703 - ], - "sp_value": 0, "sp_max": 100, - "enhanced_id": null + "sp_value": 0, + "techniques": [] }, "1408": { "avatar_id": 1408, @@ -80106,20 +3652,18 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140801 - ], - "sp_value": 6, "sp_max": 12, - "enhanced_id": null + "sp_value": 6, + "techniques": [] }, "1409": { "avatar_id": 1409, "data": { "rank": 6, "skills": { - "1409001": 3, + "1409001": 6, "1409002": 10, "1409003": 10, "1409004": 10, @@ -80141,7 +3685,7 @@ "1409302": 6 }, "skills_by_anchor_type": { - "1": 3, + "1": 6, "10": 1, "11": 1, "12": 1, @@ -80164,13 +3708,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 140901 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1410": { "avatar_id": 1410, @@ -80218,13 +3760,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 141001 - ], - "sp_value": 55, "sp_max": 110, - "enhanced_id": null + "sp_value": 55, + "techniques": [] }, "1412": { "avatar_id": 1412, @@ -80272,13 +3812,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 141201 - ], - "sp_value": 65, "sp_max": 130, - "enhanced_id": null + "sp_value": 65, + "techniques": [] }, "1413": { "avatar_id": 1413, @@ -80330,13 +3868,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 141301 - ], - "sp_value": 120, "sp_max": 240, - "enhanced_id": null + "sp_value": 120, + "techniques": [] }, "1414": { "avatar_id": 1414, @@ -80384,14 +3920,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 141401, - 141402 - ], - "sp_value": 70, - "sp_max": 140, - "enhanced_id": null + "sp_max": 135, + "sp_value": 68, + "techniques": [] }, "1415": { "avatar_id": 1415, @@ -80443,15 +3976,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 141501, - 141502, - 141503 - ], - "sp_value": 12, "sp_max": 24, - "enhanced_id": null + "sp_value": 12, + "techniques": [] }, "1501": { "avatar_id": 1501, @@ -80501,18 +4030,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150101 - ], - "sp_value": 80, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] }, "1502": { "avatar_id": 1502, "data": { - "rank": 6, + "rank": 1, "skills": { "1502001": 6, "1502002": 10, @@ -80557,18 +4084,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150201 - ], - "sp_value": 90, "sp_max": 180, - "enhanced_id": null + "sp_value": 90, + "techniques": [] }, "1503": { "avatar_id": 1503, "data": { - "rank": 6, + "rank": 1, "skills": { "1503001": 6, "1503002": 10, @@ -80613,13 +4138,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150301 - ], - "sp_value": 90, "sp_max": 180, - "enhanced_id": null + "sp_value": 90, + "techniques": [] }, "1504": { "avatar_id": 1504, @@ -80667,13 +4190,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150401 - ], - "sp_value": 75, "sp_max": 150, - "enhanced_id": null + "sp_value": 75, + "techniques": [] }, "1505": { "avatar_id": 1505, @@ -80723,13 +4244,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150501 - ], - "sp_value": 240, "sp_max": 480, - "enhanced_id": null + "sp_value": 240, + "techniques": [] }, "1506": { "avatar_id": 1506, @@ -80779,14 +4298,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150601, - 150602 - ], - "sp_value": 30, "sp_max": 60, - "enhanced_id": null + "sp_value": 30, + "techniques": [] }, "1507": { "avatar_id": 1507, @@ -80834,13 +4350,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150701 - ], - "sp_value": 70, - "sp_max": 140, - "enhanced_id": null + "sp_max": 80, + "sp_value": 40, + "techniques": [] }, "1508": { "avatar_id": 1508, @@ -80888,13 +4402,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150801 - ], - "sp_value": 80, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] }, "1509": { "avatar_id": 1509, @@ -80942,13 +4454,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 150901 - ], - "sp_value": 180, - "sp_max": 360, - "enhanced_id": null + "sp_max": 600, + "sp_value": 300, + "techniques": [] }, "1510": { "avatar_id": 1510, @@ -80996,18 +4506,16 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 151002 - ], - "sp_value": 75, - "sp_max": 150, - "enhanced_id": null + "sp_max": 140, + "sp_value": 70, + "techniques": [] }, "1511": { "avatar_id": 1511, "data": { - "rank": 6, + "rank": 2, "skills": { "1511001": 6, "1511002": 10, @@ -81054,14 +4562,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 151101, - 151104 - ], - "sp_value": 4, "sp_max": 8, - "enhanced_id": null + "sp_value": 4, + "techniques": [] }, "1512": { "avatar_id": 1512, @@ -81113,13 +4618,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 151201 - ], - "sp_value": 70, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "1513": { "avatar_id": 1513, @@ -81169,23 +4672,21 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 151301 - ], - "sp_value": 65, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "8001": { "avatar_id": 8001, "data": { "rank": 6, "skills": { - "8001001": 1, - "8001002": 1, - "8001003": 1, - "8001004": 1, + "8001001": 6, + "8001002": 10, + "8001003": 10, + "8001004": 10, "8001007": 1, "8001101": 1, "8001102": 1, @@ -81202,7 +4703,7 @@ "8001210": 1 }, "skills_by_anchor_type": { - "1": 1, + "1": 6, "10": 1, "11": 1, "12": 1, @@ -81212,9 +4713,9 @@ "16": 1, "17": 1, "18": 1, - "2": 1, - "3": 1, - "4": 1, + "2": 10, + "3": 10, + "4": 10, "5": 1, "6": 1, "7": 1, @@ -81223,11 +4724,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [], - "sp_value": 0, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "8002": { "avatar_id": 8002, @@ -81275,21 +4776,21 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [], - "sp_value": 0, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "8003": { "avatar_id": 8003, "data": { "rank": 6, "skills": { - "8003001": 1, - "8003002": 1, - "8003003": 1, - "8003004": 1, + "8003001": 6, + "8003002": 10, + "8003003": 10, + "8003004": 10, "8003007": 1, "8003101": 1, "8003102": 1, @@ -81306,7 +4807,7 @@ "8003210": 1 }, "skills_by_anchor_type": { - "1": 1, + "1": 6, "10": 1, "11": 1, "12": 1, @@ -81316,9 +4817,9 @@ "16": 1, "17": 1, "18": 1, - "2": 1, - "3": 1, - "4": 1, + "2": 10, + "3": 10, + "4": 10, "5": 1, "6": 1, "7": 1, @@ -81327,13 +4828,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800301 - ], - "sp_value": 0, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "8004": { "avatar_id": 8004, @@ -81381,13 +4880,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800301 - ], - "sp_value": 0, "sp_max": 120, - "enhanced_id": null + "sp_value": 60, + "techniques": [] }, "8005": { "avatar_id": 8005, @@ -81435,13 +4932,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800501 - ], - "sp_value": 0, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "8006": { "avatar_id": 8006, @@ -81489,23 +4984,21 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800501 - ], - "sp_value": 0, "sp_max": 140, - "enhanced_id": null + "sp_value": 70, + "techniques": [] }, "8007": { "avatar_id": 8007, "data": { "rank": 6, "skills": { - "8007001": 1, - "8007002": 1, - "8007003": 1, - "8007004": 1, + "8007001": 6, + "8007002": 10, + "8007003": 10, + "8007004": 10, "8007007": 1, "8007101": 1, "8007102": 1, @@ -81520,12 +5013,12 @@ "8007208": 1, "8007209": 1, "8007210": 1, - "8007301": 1, - "8007302": 1, + "8007301": 6, + "8007302": 6, "8007501": 1 }, "skills_by_anchor_type": { - "1": 1, + "1": 6, "10": 1, "11": 1, "12": 1, @@ -81535,12 +5028,12 @@ "16": 1, "17": 1, "18": 1, - "19": 1, - "2": 1, - "20": 1, + "19": 6, + "2": 10, + "20": 6, "21": 1, - "3": 1, - "4": 1, + "3": 10, + "4": 10, "5": 1, "6": 1, "7": 1, @@ -81549,13 +5042,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800701 - ], - "sp_value": 0, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] }, "8008": { "avatar_id": 8008, @@ -81609,13 +5100,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800701 - ], - "sp_value": 80, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] }, "8009": { "avatar_id": 8009, @@ -81665,14 +5154,11 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800901, - 800902 - ], - "sp_value": 0, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] }, "8010": { "avatar_id": 8010, @@ -81722,59 +5208,38928 @@ } }, "level": 80, + "owner_uid": 0, "promotion": 6, - "techniques": [ - 800901, - 800902 - ], - "sp_value": 80, "sp_max": 160, - "enhanced_id": null + "sp_value": 80, + "techniques": [] } }, "battle_config": { - "enable_invasion_support": false, "battle_type": "DEFAULT", + "blessings": [ + { + "id": 3033094, + "level": 1 + }, + { + "id": 3033026, + "level": 1 + }, + { + "id": 3033095, + "level": 1 + }, + { + "id": 3034004, + "level": 1 + } + ], + "custom_stats": [], + "cycle_count": 6, "monsters": [ [ { - "level": 100, - "monster_id": 801503006, - "max_hp": 0 + "amount": 1, + "level": 120, + "monster_id": 801503006 } ] ], - "blessings": [ - { - "level": 1, - "id": 3033056, - "dynamic_key": null, - "dynamic_values": null - }, - { - "level": 1, - "id": 3033093, - "dynamic_key": null, - "dynamic_values": null - }, - { - "level": 1, - "id": 3033025, - "dynamic_key": null, - "dynamic_values": null - }, - { - "level": 1, - "id": 3033095, - "dynamic_key": null, - "dynamic_values": null - } - ], - "stage_id": 30511021, - "cycle_count": 0, "path_resonance_id": 0, - "custom_stats": [], - "scepters": null, - "custom_battle_lineup": null - } + "stage_id": 30511022 + }, + "gacha_limited": { + "since_five_star": 0, + "since_four_star": 0, + "total_draws": 160 + }, + "lightcones": [ + { + "equip_avatar": 1001, + "internal_uid": 0, + "item_id": 21002, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1002, + "internal_uid": 1, + "item_id": 24001, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1003, + "internal_uid": 2, + "item_id": 23000, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1004, + "internal_uid": 3, + "item_id": 23043, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1005, + "internal_uid": 4, + "item_id": 23006, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1006, + "internal_uid": 5, + "item_id": 23007, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1008, + "internal_uid": 6, + "item_id": 24000, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1009, + "internal_uid": 7, + "item_id": 21004, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1013, + "internal_uid": 8, + "item_id": 21020, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1014, + "internal_uid": 9, + "item_id": 23045, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1015, + "internal_uid": 10, + "item_id": 23046, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1101, + "internal_uid": 11, + "item_id": 23003, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1102, + "internal_uid": 12, + "item_id": 23001, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1103, + "internal_uid": 13, + "item_id": 24004, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1104, + "internal_uid": 14, + "item_id": 23005, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1105, + "internal_uid": 15, + "item_id": 21000, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1106, + "internal_uid": 16, + "item_id": 21015, + "level": 70, + "promotion": 5, + "rank": 2 + }, + { + "equip_avatar": 1107, + "internal_uid": 17, + "item_id": 23002, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1108, + "internal_uid": 18, + "item_id": 21001, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1109, + "internal_uid": 19, + "item_id": 21005, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1110, + "internal_uid": 20, + "item_id": 21000, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1111, + "internal_uid": 21, + "item_id": 21001, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1112, + "internal_uid": 22, + "item_id": 23016, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1201, + "internal_uid": 23, + "item_id": 24004, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1202, + "internal_uid": 24, + "item_id": 21018, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1203, + "internal_uid": 25, + "item_id": 23008, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1204, + "internal_uid": 26, + "item_id": 23010, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1205, + "internal_uid": 27, + "item_id": 23009, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1206, + "internal_uid": 28, + "item_id": 24001, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1207, + "internal_uid": 29, + "item_id": 21018, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1208, + "internal_uid": 30, + "item_id": 23011, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1209, + "internal_uid": 31, + "item_id": 23012, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1210, + "internal_uid": 32, + "item_id": 21015, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1211, + "internal_uid": 33, + "item_id": 23013, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1212, + "internal_uid": 34, + "item_id": 23014, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1213, + "internal_uid": 35, + "item_id": 23015, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1214, + "internal_uid": 36, + "item_id": 24000, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1215, + "internal_uid": 37, + "item_id": 21004, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1217, + "internal_uid": 38, + "item_id": 23017, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1218, + "internal_uid": 39, + "item_id": 23029, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1220, + "internal_uid": 40, + "item_id": 23031, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1221, + "internal_uid": 41, + "item_id": 23030, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1222, + "internal_uid": 42, + "item_id": 23032, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1223, + "internal_uid": 43, + "item_id": 21010, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1224, + "internal_uid": 44, + "item_id": 24001, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1225, + "internal_uid": 45, + "item_id": 23035, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1301, + "internal_uid": 46, + "item_id": 21021, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1302, + "internal_uid": 47, + "item_id": 23018, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1303, + "internal_uid": 48, + "item_id": 23019, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1304, + "internal_uid": 49, + "item_id": 23023, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1305, + "internal_uid": 50, + "item_id": 23020, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1306, + "internal_uid": 51, + "item_id": 23003, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1307, + "internal_uid": 52, + "item_id": 23022, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1308, + "internal_uid": 53, + "item_id": 23024, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1309, + "internal_uid": 54, + "item_id": 23026, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1310, + "internal_uid": 55, + "item_id": 23025, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1312, + "internal_uid": 56, + "item_id": 21042, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1313, + "internal_uid": 57, + "item_id": 23034, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1314, + "internal_uid": 58, + "item_id": 23028, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1315, + "internal_uid": 59, + "item_id": 23027, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1317, + "internal_uid": 60, + "item_id": 23033, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1321, + "internal_uid": 61, + "item_id": 23050, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1401, + "internal_uid": 62, + "item_id": 23037, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1402, + "internal_uid": 63, + "item_id": 23036, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1403, + "internal_uid": 64, + "item_id": 21018, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1404, + "internal_uid": 65, + "item_id": 23039, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1405, + "internal_uid": 66, + "item_id": 23041, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1406, + "internal_uid": 67, + "item_id": 23043, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1407, + "internal_uid": 68, + "item_id": 23040, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1408, + "internal_uid": 69, + "item_id": 23044, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1409, + "internal_uid": 70, + "item_id": 23042, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1410, + "internal_uid": 71, + "item_id": 23047, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1412, + "internal_uid": 72, + "item_id": 23048, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1413, + "internal_uid": 73, + "item_id": 23049, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1414, + "internal_uid": 74, + "item_id": 23051, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1415, + "internal_uid": 75, + "item_id": 23052, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1501, + "internal_uid": 76, + "item_id": 23053, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1502, + "internal_uid": 77, + "item_id": 23054, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1503, + "internal_uid": 78, + "item_id": 21064, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1504, + "internal_uid": 79, + "item_id": 23056, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1505, + "internal_uid": 80, + "item_id": 23058, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1506, + "internal_uid": 81, + "item_id": 23057, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1507, + "internal_uid": 82, + "item_id": 23059, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1508, + "internal_uid": 83, + "item_id": 23061, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1509, + "internal_uid": 84, + "item_id": 23062, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1510, + "internal_uid": 85, + "item_id": 23060, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1511, + "internal_uid": 86, + "item_id": 23065, + "level": 80, + "promotion": 6, + "rank": 1 + }, + { + "equip_avatar": 1512, + "internal_uid": 87, + "item_id": 23063, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 1513, + "internal_uid": 88, + "item_id": 23064, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8001, + "internal_uid": 89, + "item_id": 24000, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8002, + "internal_uid": 90, + "item_id": 24000, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8003, + "internal_uid": 91, + "item_id": 21009, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8004, + "internal_uid": 92, + "item_id": 21009, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8005, + "internal_uid": 93, + "item_id": 21004, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8006, + "internal_uid": 94, + "item_id": 21004, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8007, + "internal_uid": 95, + "item_id": 22006, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8008, + "internal_uid": 96, + "item_id": 22006, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8009, + "internal_uid": 97, + "item_id": 24006, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "equip_avatar": 8010, + "internal_uid": 98, + "item_id": 24006, + "level": 80, + "promotion": 6, + "rank": 5 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 99 + }, + { + "level": 1, + "item_id": 20001, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 100 + }, + { + "level": 1, + "item_id": 20002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 101 + }, + { + "level": 1, + "item_id": 20003, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 102 + }, + { + "level": 1, + "item_id": 20004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 103 + }, + { + "level": 1, + "item_id": 20005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 104 + }, + { + "level": 1, + "item_id": 20006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 105 + }, + { + "level": 1, + "item_id": 20007, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 106 + }, + { + "level": 1, + "item_id": 20008, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 107 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 108 + }, + { + "level": 1, + "item_id": 20010, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 109 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 110 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 111 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 112 + }, + { + "level": 1, + "item_id": 20014, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 113 + }, + { + "level": 1, + "item_id": 20015, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 114 + }, + { + "level": 1, + "item_id": 20016, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 115 + }, + { + "level": 1, + "item_id": 20017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 116 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 117 + }, + { + "level": 1, + "item_id": 20019, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 118 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 119 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 120 + }, + { + "level": 1, + "item_id": 20022, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 121 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 122 + }, + { + "level": 1, + "item_id": 20024, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 123 + }, + { + "level": 1, + "item_id": 21003, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 124 + }, + { + "level": 1, + "item_id": 21006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 125 + }, + { + "level": 1, + "item_id": 21007, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 126 + }, + { + "level": 1, + "item_id": 21008, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 127 + }, + { + "level": 1, + "item_id": 21011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 128 + }, + { + "level": 1, + "item_id": 21012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 129 + }, + { + "level": 1, + "item_id": 21013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 130 + }, + { + "level": 1, + "item_id": 21014, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 131 + }, + { + "level": 1, + "item_id": 21016, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 132 + }, + { + "level": 1, + "item_id": 21017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 133 + }, + { + "level": 1, + "item_id": 21019, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 134 + }, + { + "level": 1, + "item_id": 21022, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 135 + }, + { + "level": 1, + "item_id": 21023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 136 + }, + { + "level": 1, + "item_id": 21024, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 137 + }, + { + "level": 1, + "item_id": 21025, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 138 + }, + { + "level": 1, + "item_id": 21026, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 139 + }, + { + "level": 1, + "item_id": 21027, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 140 + }, + { + "level": 1, + "item_id": 21028, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 141 + }, + { + "level": 1, + "item_id": 21029, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 142 + }, + { + "level": 1, + "item_id": 21030, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 143 + }, + { + "level": 1, + "item_id": 21031, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 144 + }, + { + "level": 1, + "item_id": 21032, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 145 + }, + { + "level": 1, + "item_id": 21033, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 146 + }, + { + "level": 1, + "item_id": 21034, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 147 + }, + { + "level": 1, + "item_id": 21035, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 148 + }, + { + "level": 1, + "item_id": 21036, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 149 + }, + { + "level": 1, + "item_id": 21037, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 150 + }, + { + "level": 1, + "item_id": 21038, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 151 + }, + { + "level": 1, + "item_id": 21039, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 152 + }, + { + "level": 1, + "item_id": 21040, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 153 + }, + { + "level": 1, + "item_id": 21041, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 154 + }, + { + "level": 1, + "item_id": 21043, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 155 + }, + { + "level": 1, + "item_id": 21044, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 156 + }, + { + "level": 1, + "item_id": 21045, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 157 + }, + { + "level": 1, + "item_id": 21046, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 158 + }, + { + "level": 1, + "item_id": 21047, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 159 + }, + { + "level": 1, + "item_id": 21048, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 160 + }, + { + "level": 1, + "item_id": 21050, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 161 + }, + { + "level": 1, + "item_id": 21051, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 162 + }, + { + "level": 1, + "item_id": 21052, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 163 + }, + { + "level": 1, + "item_id": 21053, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 164 + }, + { + "level": 1, + "item_id": 21054, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 165 + }, + { + "level": 1, + "item_id": 21055, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 166 + }, + { + "level": 1, + "item_id": 21056, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 167 + }, + { + "level": 1, + "item_id": 21057, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 168 + }, + { + "level": 1, + "item_id": 21058, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 169 + }, + { + "level": 1, + "item_id": 21060, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 170 + }, + { + "level": 1, + "item_id": 21061, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 171 + }, + { + "level": 1, + "item_id": 21062, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 172 + }, + { + "level": 1, + "item_id": 21065, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 173 + }, + { + "level": 1, + "item_id": 21066, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 174 + }, + { + "level": 1, + "item_id": 22000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 175 + }, + { + "level": 1, + "item_id": 22001, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 176 + }, + { + "level": 1, + "item_id": 22002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 177 + }, + { + "level": 1, + "item_id": 22003, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 178 + }, + { + "level": 1, + "item_id": 22004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 179 + }, + { + "level": 1, + "item_id": 22005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 180 + }, + { + "level": 1, + "item_id": 22007, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 181 + }, + { + "level": 1, + "item_id": 22008, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 182 + }, + { + "level": 1, + "item_id": 23004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 183 + }, + { + "level": 1, + "item_id": 23021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 184 + }, + { + "level": 1, + "item_id": 23038, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 185 + }, + { + "level": 1, + "item_id": 23055, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 186 + }, + { + "level": 1, + "item_id": 24002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 187 + }, + { + "level": 1, + "item_id": 24003, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 188 + }, + { + "level": 1, + "item_id": 24005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 189 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 190 + }, + { + "level": 1, + "item_id": 20010, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 191 + }, + { + "level": 1, + "item_id": 20016, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 192 + }, + { + "level": 1, + "item_id": 20014, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 193 + }, + { + "level": 1, + "item_id": 20015, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 194 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 195 + }, + { + "level": 1, + "item_id": 20004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 196 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 197 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 198 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 199 + }, + { + "level": 1, + "item_id": 20010, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 200 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 201 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 202 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 203 + }, + { + "level": 1, + "item_id": 20005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 204 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 205 + }, + { + "level": 1, + "item_id": 20005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 206 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 207 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 208 + }, + { + "level": 1, + "item_id": 20006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 209 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 210 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 211 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 212 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 213 + }, + { + "level": 1, + "item_id": 20015, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 214 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 215 + }, + { + "level": 1, + "item_id": 20003, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 216 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 217 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 218 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 219 + }, + { + "level": 1, + "item_id": 20002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 220 + }, + { + "level": 1, + "item_id": 20001, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 221 + }, + { + "level": 1, + "item_id": 20004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 222 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 223 + }, + { + "level": 1, + "item_id": 20015, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 224 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 225 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 226 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 227 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 228 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 229 + }, + { + "level": 1, + "item_id": 20001, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 230 + }, + { + "level": 1, + "item_id": 20003, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 231 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 232 + }, + { + "level": 1, + "item_id": 20006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 233 + }, + { + "level": 1, + "item_id": 20007, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 234 + }, + { + "level": 1, + "item_id": 20017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 235 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 236 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 237 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 238 + }, + { + "level": 1, + "item_id": 20017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 239 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 240 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 241 + }, + { + "level": 1, + "item_id": 20019, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 242 + }, + { + "level": 1, + "item_id": 20017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 243 + }, + { + "level": 1, + "item_id": 20024, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 244 + }, + { + "level": 1, + "item_id": 20002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 245 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 246 + }, + { + "level": 1, + "item_id": 20016, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 247 + }, + { + "level": 1, + "item_id": 20004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 248 + }, + { + "level": 1, + "item_id": 20017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 249 + }, + { + "level": 1, + "item_id": 20003, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 250 + }, + { + "level": 1, + "item_id": 20016, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 251 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 252 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 253 + }, + { + "level": 1, + "item_id": 20004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 254 + }, + { + "level": 1, + "item_id": 20002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 255 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 256 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 257 + }, + { + "level": 1, + "item_id": 20002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 258 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 259 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 260 + }, + { + "level": 1, + "item_id": 20017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 261 + }, + { + "level": 1, + "item_id": 20008, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 262 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 263 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 264 + }, + { + "level": 1, + "item_id": 20006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 265 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 266 + }, + { + "level": 1, + "item_id": 20024, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 267 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 268 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 269 + }, + { + "level": 1, + "item_id": 20008, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 270 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 271 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 272 + }, + { + "level": 1, + "item_id": 20015, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 273 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 274 + }, + { + "level": 1, + "item_id": 20019, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 275 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 276 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 277 + }, + { + "level": 1, + "item_id": 20023, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 278 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 279 + }, + { + "level": 1, + "item_id": 20007, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 280 + }, + { + "level": 1, + "item_id": 20014, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 281 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 282 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 283 + }, + { + "level": 1, + "item_id": 20005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 284 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 285 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 286 + }, + { + "level": 1, + "item_id": 20002, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 287 + }, + { + "level": 1, + "item_id": 20006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 288 + }, + { + "level": 1, + "item_id": 20005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 289 + }, + { + "level": 1, + "item_id": 20014, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 290 + }, + { + "level": 1, + "item_id": 20017, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 291 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 292 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 293 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 294 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 295 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 296 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 297 + }, + { + "level": 1, + "item_id": 20020, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 298 + }, + { + "level": 1, + "item_id": 20021, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 299 + }, + { + "level": 1, + "item_id": 20007, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 300 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 301 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 302 + }, + { + "level": 1, + "item_id": 20005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 303 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 304 + }, + { + "level": 1, + "item_id": 20019, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 305 + }, + { + "level": 1, + "item_id": 20024, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 306 + }, + { + "level": 1, + "item_id": 20001, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 307 + }, + { + "level": 1, + "item_id": 20007, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 308 + }, + { + "level": 1, + "item_id": 20015, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 309 + }, + { + "level": 1, + "item_id": 20022, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 310 + }, + { + "level": 1, + "item_id": 20009, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 311 + }, + { + "level": 1, + "item_id": 20012, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 312 + }, + { + "level": 1, + "item_id": 20015, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 313 + }, + { + "level": 1, + "item_id": 20001, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 314 + }, + { + "level": 1, + "item_id": 20011, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 315 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 316 + }, + { + "level": 1, + "item_id": 20004, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 317 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 318 + }, + { + "level": 1, + "item_id": 20006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 319 + }, + { + "level": 1, + "item_id": 20013, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 320 + }, + { + "level": 1, + "item_id": 20010, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 321 + }, + { + "level": 1, + "item_id": 20018, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 322 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 323 + }, + { + "level": 1, + "item_id": 20016, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 324 + }, + { + "level": 1, + "item_id": 20000, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 325 + }, + { + "level": 1, + "item_id": 20006, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 326 + }, + { + "level": 1, + "item_id": 20010, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 327 + }, + { + "level": 1, + "item_id": 20005, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 328 + }, + { + "level": 1, + "item_id": 20001, + "equip_avatar": 0, + "rank": 1, + "promotion": 0, + "internal_uid": 329 + } + ], + "materials": { + "11001": 53, + "11002": 1, + "11009": 2, + "11013": 2, + "11101": 8, + "11102": 7, + "11104": 7, + "11105": 5, + "11106": 2, + "11108": 2, + "11109": 1, + "11110": 2, + "11111": 2, + "11202": 1, + "11203": 7, + "11206": 4, + "11207": 5, + "11210": 5, + "11211": 7, + "11212": 2, + "11213": 7, + "11214": 1, + "11217": 2, + "11220": 1, + "11222": 1, + "11223": 1, + "11224": 2, + "11225": 1, + "11302": 7, + "11303": 2, + "11304": 4, + "11308": 1, + "11309": 1, + "11310": 1, + "11312": 1, + "11315": 7, + "11403": 1, + "11405": 1, + "11407": 2, + "11409": 1, + "11410": 1, + "11412": 1, + "11413": 1, + "11501": 1, + "11507": 2, + "11510": 2, + "11511": 5, + "11512": 3, + "11513": 1, + "18001": 2, + "18003": 2, + "18009": 1 + }, + "relics": [ + { + "equip_avatar": 1001, + "internal_uid": 0, + "level": 15, + "main_affix_id": 1, + "relic_id": 61031, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1001, + "internal_uid": 1, + "level": 15, + "main_affix_id": 1, + "relic_id": 61032, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1001, + "internal_uid": 2, + "level": 15, + "main_affix_id": 3, + "relic_id": 61033, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1001, + "internal_uid": 3, + "level": 15, + "main_affix_id": 4, + "relic_id": 61034, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1001, + "internal_uid": 4, + "level": 15, + "main_affix_id": 3, + "relic_id": 63045, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1001, + "internal_uid": 5, + "level": 15, + "main_affix_id": 2, + "relic_id": 63046, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 4, + "step": 8, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1002, + "internal_uid": 6, + "level": 15, + "main_affix_id": 1, + "relic_id": 61171, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1002, + "internal_uid": 7, + "level": 15, + "main_affix_id": 1, + "relic_id": 61172, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1002, + "internal_uid": 8, + "level": 15, + "main_affix_id": 5, + "relic_id": 61173, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1002, + "internal_uid": 9, + "level": 15, + "main_affix_id": 4, + "relic_id": 61174, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1002, + "internal_uid": 10, + "level": 15, + "main_affix_id": 8, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1002, + "internal_uid": 11, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1003, + "internal_uid": 12, + "level": 15, + "main_affix_id": 1, + "relic_id": 61151, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1003, + "internal_uid": 13, + "level": 15, + "main_affix_id": 1, + "relic_id": 61152, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1003, + "internal_uid": 14, + "level": 15, + "main_affix_id": 5, + "relic_id": 61153, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1003, + "internal_uid": 15, + "level": 15, + "main_affix_id": 4, + "relic_id": 61154, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1003, + "internal_uid": 16, + "level": 15, + "main_affix_id": 5, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 5, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1003, + "internal_uid": 17, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1004, + "internal_uid": 18, + "level": 15, + "main_affix_id": 1, + "relic_id": 61171, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1004, + "internal_uid": 19, + "level": 15, + "main_affix_id": 1, + "relic_id": 61172, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1004, + "internal_uid": 20, + "level": 15, + "main_affix_id": 4, + "relic_id": 61173, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1004, + "internal_uid": 21, + "level": 15, + "main_affix_id": 4, + "relic_id": 61174, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1004, + "internal_uid": 22, + "level": 15, + "main_affix_id": 10, + "relic_id": 63035, + "relic_set_id": 303, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1004, + "internal_uid": 23, + "level": 15, + "main_affix_id": 4, + "relic_id": 63036, + "relic_set_id": 303, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1005, + "internal_uid": 24, + "level": 15, + "main_affix_id": 1, + "relic_id": 61161, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1005, + "internal_uid": 25, + "level": 15, + "main_affix_id": 1, + "relic_id": 61162, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1005, + "internal_uid": 26, + "level": 15, + "main_affix_id": 2, + "relic_id": 61163, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 12 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1005, + "internal_uid": 27, + "level": 15, + "main_affix_id": 4, + "relic_id": 61164, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1005, + "internal_uid": 28, + "level": 15, + "main_affix_id": 7, + "relic_id": 63225, + "relic_set_id": 322, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1005, + "internal_uid": 29, + "level": 15, + "main_affix_id": 4, + "relic_id": 63226, + "relic_set_id": 322, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1006, + "internal_uid": 30, + "level": 15, + "main_affix_id": 1, + "relic_id": 61101, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1006, + "internal_uid": 31, + "level": 15, + "main_affix_id": 1, + "relic_id": 61102, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1006, + "internal_uid": 32, + "level": 15, + "main_affix_id": 7, + "relic_id": 61103, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1006, + "internal_uid": 33, + "level": 15, + "main_affix_id": 4, + "relic_id": 61104, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1006, + "internal_uid": 34, + "level": 15, + "main_affix_id": 9, + "relic_id": 63085, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1006, + "internal_uid": 35, + "level": 15, + "main_affix_id": 2, + "relic_id": 63086, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1008, + "internal_uid": 36, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1008, + "internal_uid": 37, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1008, + "internal_uid": 38, + "level": 15, + "main_affix_id": 5, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1008, + "internal_uid": 39, + "level": 15, + "main_affix_id": 2, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1008, + "internal_uid": 40, + "level": 15, + "main_affix_id": 7, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1008, + "internal_uid": 41, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1009, + "internal_uid": 42, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1009, + "internal_uid": 43, + "level": 15, + "main_affix_id": 1, + "relic_id": 61142, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1009, + "internal_uid": 44, + "level": 15, + "main_affix_id": 1, + "relic_id": 61143, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1009, + "internal_uid": 45, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1009, + "internal_uid": 46, + "level": 15, + "main_affix_id": 1, + "relic_id": 63025, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1009, + "internal_uid": 47, + "level": 15, + "main_affix_id": 2, + "relic_id": 63026, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1013, + "internal_uid": 48, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1013, + "internal_uid": 49, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1013, + "internal_uid": 50, + "level": 15, + "main_affix_id": 4, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1013, + "internal_uid": 51, + "level": 15, + "main_affix_id": 2, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1013, + "internal_uid": 52, + "level": 15, + "main_affix_id": 6, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1013, + "internal_uid": 53, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1014, + "internal_uid": 54, + "level": 15, + "main_affix_id": 1, + "relic_id": 61261, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1014, + "internal_uid": 55, + "level": 15, + "main_affix_id": 1, + "relic_id": 61262, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1014, + "internal_uid": 56, + "level": 15, + "main_affix_id": 4, + "relic_id": 61263, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1014, + "internal_uid": 57, + "level": 15, + "main_affix_id": 2, + "relic_id": 61264, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1014, + "internal_uid": 58, + "level": 15, + "main_affix_id": 8, + "relic_id": 63065, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1014, + "internal_uid": 59, + "level": 15, + "main_affix_id": 4, + "relic_id": 63066, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1015, + "internal_uid": 60, + "level": 15, + "main_affix_id": 1, + "relic_id": 61081, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1015, + "internal_uid": 61, + "level": 15, + "main_affix_id": 1, + "relic_id": 61082, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1015, + "internal_uid": 62, + "level": 15, + "main_affix_id": 4, + "relic_id": 61083, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 6 + } + ] + }, + { + "equip_avatar": 1015, + "internal_uid": 63, + "level": 15, + "main_affix_id": 2, + "relic_id": 61084, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1015, + "internal_uid": 64, + "level": 15, + "main_affix_id": 9, + "relic_id": 63245, + "relic_set_id": 324, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1015, + "internal_uid": 65, + "level": 15, + "main_affix_id": 4, + "relic_id": 63246, + "relic_set_id": 324, + "sub_affixes": [ + { + "count": 3, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1101, + "internal_uid": 66, + "level": 15, + "main_affix_id": 1, + "relic_id": 61211, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1101, + "internal_uid": 67, + "level": 15, + "main_affix_id": 1, + "relic_id": 61212, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1101, + "internal_uid": 68, + "level": 15, + "main_affix_id": 5, + "relic_id": 61213, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1101, + "internal_uid": 69, + "level": 15, + "main_affix_id": 4, + "relic_id": 61214, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1101, + "internal_uid": 70, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1101, + "internal_uid": 71, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1102, + "internal_uid": 72, + "level": 15, + "main_affix_id": 1, + "relic_id": 61081, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1102, + "internal_uid": 73, + "level": 15, + "main_affix_id": 1, + "relic_id": 61082, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1102, + "internal_uid": 74, + "level": 15, + "main_affix_id": 5, + "relic_id": 61083, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1102, + "internal_uid": 75, + "level": 15, + "main_affix_id": 2, + "relic_id": 61084, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1102, + "internal_uid": 76, + "level": 15, + "main_affix_id": 9, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1102, + "internal_uid": 77, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1103, + "internal_uid": 78, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1103, + "internal_uid": 79, + "level": 15, + "main_affix_id": 1, + "relic_id": 61142, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1103, + "internal_uid": 80, + "level": 15, + "main_affix_id": 4, + "relic_id": 61023, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 7, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1103, + "internal_uid": 81, + "level": 15, + "main_affix_id": 4, + "relic_id": 61024, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1103, + "internal_uid": 82, + "level": 15, + "main_affix_id": 1, + "relic_id": 63085, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1103, + "internal_uid": 83, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1104, + "internal_uid": 84, + "level": 15, + "main_affix_id": 1, + "relic_id": 61031, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1104, + "internal_uid": 85, + "level": 15, + "main_affix_id": 1, + "relic_id": 61032, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1104, + "internal_uid": 86, + "level": 15, + "main_affix_id": 3, + "relic_id": 61033, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1104, + "internal_uid": 87, + "level": 15, + "main_affix_id": 4, + "relic_id": 61034, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1104, + "internal_uid": 88, + "level": 15, + "main_affix_id": 3, + "relic_id": 63045, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1104, + "internal_uid": 89, + "level": 15, + "main_affix_id": 2, + "relic_id": 63046, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 4, + "step": 8, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1105, + "internal_uid": 90, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1105, + "internal_uid": 91, + "level": 15, + "main_affix_id": 1, + "relic_id": 61012, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1105, + "internal_uid": 92, + "level": 15, + "main_affix_id": 1, + "relic_id": 61013, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1105, + "internal_uid": 93, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1105, + "internal_uid": 94, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1105, + "internal_uid": 95, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1106, + "internal_uid": 96, + "level": 15, + "main_affix_id": 1, + "relic_id": 61101, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1106, + "internal_uid": 97, + "level": 15, + "main_affix_id": 1, + "relic_id": 61102, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1106, + "internal_uid": 98, + "level": 15, + "main_affix_id": 7, + "relic_id": 61103, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1106, + "internal_uid": 99, + "level": 15, + "main_affix_id": 4, + "relic_id": 61104, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1106, + "internal_uid": 100, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1106, + "internal_uid": 101, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1107, + "internal_uid": 102, + "level": 15, + "main_affix_id": 1, + "relic_id": 61051, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1107, + "internal_uid": 103, + "level": 15, + "main_affix_id": 1, + "relic_id": 61052, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1107, + "internal_uid": 104, + "level": 15, + "main_affix_id": 5, + "relic_id": 61053, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1107, + "internal_uid": 105, + "level": 15, + "main_affix_id": 2, + "relic_id": 61054, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1107, + "internal_uid": 106, + "level": 15, + "main_affix_id": 4, + "relic_id": 63065, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1107, + "internal_uid": 107, + "level": 15, + "main_affix_id": 4, + "relic_id": 63066, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1108, + "internal_uid": 108, + "level": 15, + "main_affix_id": 1, + "relic_id": 61161, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 4, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1108, + "internal_uid": 109, + "level": 15, + "main_affix_id": 1, + "relic_id": 61162, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1108, + "internal_uid": 110, + "level": 15, + "main_affix_id": 7, + "relic_id": 61163, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1108, + "internal_uid": 111, + "level": 15, + "main_affix_id": 4, + "relic_id": 61164, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1108, + "internal_uid": 112, + "level": 15, + "main_affix_id": 8, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1108, + "internal_uid": 113, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1109, + "internal_uid": 114, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1109, + "internal_uid": 115, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1109, + "internal_uid": 116, + "level": 15, + "main_affix_id": 5, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1109, + "internal_uid": 117, + "level": 15, + "main_affix_id": 2, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1109, + "internal_uid": 118, + "level": 15, + "main_affix_id": 5, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1109, + "internal_uid": 119, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1110, + "internal_uid": 120, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1110, + "internal_uid": 121, + "level": 15, + "main_affix_id": 1, + "relic_id": 61012, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1110, + "internal_uid": 122, + "level": 15, + "main_affix_id": 1, + "relic_id": 61013, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 118, + "step": 236, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 32, + "step": 64, + "sub_affix_id": 8 + }, + { + "count": 89, + "step": 178, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1110, + "internal_uid": 123, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1110, + "internal_uid": 124, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1110, + "internal_uid": 125, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1111, + "internal_uid": 126, + "level": 15, + "main_affix_id": 1, + "relic_id": 61161, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 4, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1111, + "internal_uid": 127, + "level": 15, + "main_affix_id": 1, + "relic_id": 61162, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1111, + "internal_uid": 128, + "level": 15, + "main_affix_id": 4, + "relic_id": 61163, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1111, + "internal_uid": 129, + "level": 15, + "main_affix_id": 4, + "relic_id": 61164, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1111, + "internal_uid": 130, + "level": 15, + "main_affix_id": 4, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1111, + "internal_uid": 131, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1112, + "internal_uid": 132, + "level": 15, + "main_affix_id": 1, + "relic_id": 61151, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1112, + "internal_uid": 133, + "level": 15, + "main_affix_id": 1, + "relic_id": 61152, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1112, + "internal_uid": 134, + "level": 15, + "main_affix_id": 5, + "relic_id": 61153, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1112, + "internal_uid": 135, + "level": 15, + "main_affix_id": 4, + "relic_id": 61154, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1112, + "internal_uid": 136, + "level": 15, + "main_affix_id": 5, + "relic_id": 63155, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1112, + "internal_uid": 137, + "level": 15, + "main_affix_id": 4, + "relic_id": 63156, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1201, + "internal_uid": 138, + "level": 15, + "main_affix_id": 1, + "relic_id": 61081, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1201, + "internal_uid": 139, + "level": 15, + "main_affix_id": 1, + "relic_id": 61082, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 5, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1201, + "internal_uid": 140, + "level": 15, + "main_affix_id": 5, + "relic_id": 61083, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1201, + "internal_uid": 141, + "level": 15, + "main_affix_id": 4, + "relic_id": 61084, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1201, + "internal_uid": 142, + "level": 15, + "main_affix_id": 9, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1201, + "internal_uid": 143, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1202, + "internal_uid": 144, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1202, + "internal_uid": 145, + "level": 15, + "main_affix_id": 1, + "relic_id": 61142, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1202, + "internal_uid": 146, + "level": 15, + "main_affix_id": 1, + "relic_id": 61143, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1202, + "internal_uid": 147, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1202, + "internal_uid": 148, + "level": 15, + "main_affix_id": 1, + "relic_id": 63025, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1202, + "internal_uid": 149, + "level": 15, + "main_affix_id": 2, + "relic_id": 63026, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1203, + "internal_uid": 150, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1203, + "internal_uid": 151, + "level": 15, + "main_affix_id": 1, + "relic_id": 61012, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1203, + "internal_uid": 152, + "level": 15, + "main_affix_id": 1, + "relic_id": 61013, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1203, + "internal_uid": 153, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1203, + "internal_uid": 154, + "level": 15, + "main_affix_id": 1, + "relic_id": 63025, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1203, + "internal_uid": 155, + "level": 15, + "main_affix_id": 3, + "relic_id": 63026, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1204, + "internal_uid": 156, + "level": 15, + "main_affix_id": 1, + "relic_id": 61151, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1204, + "internal_uid": 157, + "level": 15, + "main_affix_id": 1, + "relic_id": 61152, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1204, + "internal_uid": 158, + "level": 15, + "main_affix_id": 5, + "relic_id": 61153, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1204, + "internal_uid": 159, + "level": 15, + "main_affix_id": 4, + "relic_id": 61154, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1204, + "internal_uid": 160, + "level": 15, + "main_affix_id": 7, + "relic_id": 63185, + "relic_set_id": 318, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1204, + "internal_uid": 161, + "level": 15, + "main_affix_id": 4, + "relic_id": 63186, + "relic_set_id": 318, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1205, + "internal_uid": 162, + "level": 15, + "main_affix_id": 1, + "relic_id": 61131, + "relic_set_id": 113, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1205, + "internal_uid": 163, + "level": 15, + "main_affix_id": 1, + "relic_id": 61132, + "relic_set_id": 113, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1205, + "internal_uid": 164, + "level": 15, + "main_affix_id": 5, + "relic_id": 61133, + "relic_set_id": 113, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1205, + "internal_uid": 165, + "level": 15, + "main_affix_id": 1, + "relic_id": 61134, + "relic_set_id": 113, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1205, + "internal_uid": 166, + "level": 15, + "main_affix_id": 8, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1205, + "internal_uid": 167, + "level": 15, + "main_affix_id": 3, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1206, + "internal_uid": 168, + "level": 15, + "main_affix_id": 1, + "relic_id": 61051, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1206, + "internal_uid": 169, + "level": 15, + "main_affix_id": 1, + "relic_id": 61052, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1206, + "internal_uid": 170, + "level": 15, + "main_affix_id": 5, + "relic_id": 61053, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 5, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1206, + "internal_uid": 171, + "level": 15, + "main_affix_id": 4, + "relic_id": 61054, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1206, + "internal_uid": 172, + "level": 15, + "main_affix_id": 4, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1206, + "internal_uid": 173, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1207, + "internal_uid": 174, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1207, + "internal_uid": 175, + "level": 15, + "main_affix_id": 1, + "relic_id": 61142, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1207, + "internal_uid": 176, + "level": 15, + "main_affix_id": 1, + "relic_id": 61143, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1207, + "internal_uid": 177, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1207, + "internal_uid": 178, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1207, + "internal_uid": 179, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1208, + "internal_uid": 180, + "level": 15, + "main_affix_id": 1, + "relic_id": 61251, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1208, + "internal_uid": 181, + "level": 15, + "main_affix_id": 1, + "relic_id": 61252, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 5, + "step": 5, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1208, + "internal_uid": 182, + "level": 15, + "main_affix_id": 1, + "relic_id": 61253, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 5, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1208, + "internal_uid": 183, + "level": 15, + "main_affix_id": 4, + "relic_id": 61254, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1208, + "internal_uid": 184, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1208, + "internal_uid": 185, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1209, + "internal_uid": 186, + "level": 15, + "main_affix_id": 1, + "relic_id": 61041, + "relic_set_id": 104, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1209, + "internal_uid": 187, + "level": 15, + "main_affix_id": 1, + "relic_id": 61042, + "relic_set_id": 104, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1209, + "internal_uid": 188, + "level": 15, + "main_affix_id": 5, + "relic_id": 61043, + "relic_set_id": 104, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1209, + "internal_uid": 189, + "level": 15, + "main_affix_id": 4, + "relic_id": 61044, + "relic_set_id": 104, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1209, + "internal_uid": 190, + "level": 15, + "main_affix_id": 6, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 5, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1209, + "internal_uid": 191, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1210, + "internal_uid": 192, + "level": 15, + "main_affix_id": 1, + "relic_id": 61161, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1210, + "internal_uid": 193, + "level": 15, + "main_affix_id": 1, + "relic_id": 61162, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1210, + "internal_uid": 194, + "level": 15, + "main_affix_id": 2, + "relic_id": 61163, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1210, + "internal_uid": 195, + "level": 15, + "main_affix_id": 4, + "relic_id": 61164, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1210, + "internal_uid": 196, + "level": 15, + "main_affix_id": 5, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 5, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1210, + "internal_uid": 197, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1211, + "internal_uid": 198, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1211, + "internal_uid": 199, + "level": 15, + "main_affix_id": 1, + "relic_id": 61012, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1211, + "internal_uid": 200, + "level": 15, + "main_affix_id": 1, + "relic_id": 61013, + "relic_set_id": 101, + "sub_affixes": [ + { + "count": 113, + "step": 226, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 31, + "step": 62, + "sub_affix_id": 8 + }, + { + "count": 107, + "step": 214, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1211, + "internal_uid": 201, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1211, + "internal_uid": 202, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1211, + "internal_uid": 203, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1212, + "internal_uid": 204, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1212, + "internal_uid": 205, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1212, + "internal_uid": 206, + "level": 15, + "main_affix_id": 5, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1212, + "internal_uid": 207, + "level": 15, + "main_affix_id": 1, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1212, + "internal_uid": 208, + "level": 15, + "main_affix_id": 6, + "relic_id": 63195, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1212, + "internal_uid": 209, + "level": 15, + "main_affix_id": 3, + "relic_id": 63196, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1213, + "internal_uid": 210, + "level": 15, + "main_affix_id": 1, + "relic_id": 61021, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1213, + "internal_uid": 211, + "level": 15, + "main_affix_id": 1, + "relic_id": 61022, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1213, + "internal_uid": 212, + "level": 15, + "main_affix_id": 5, + "relic_id": 61023, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1213, + "internal_uid": 213, + "level": 15, + "main_affix_id": 2, + "relic_id": 61024, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1213, + "internal_uid": 214, + "level": 15, + "main_affix_id": 10, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1213, + "internal_uid": 215, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1214, + "internal_uid": 216, + "level": 15, + "main_affix_id": 1, + "relic_id": 61081, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1214, + "internal_uid": 217, + "level": 15, + "main_affix_id": 1, + "relic_id": 61082, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1214, + "internal_uid": 218, + "level": 15, + "main_affix_id": 5, + "relic_id": 61083, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1214, + "internal_uid": 219, + "level": 15, + "main_affix_id": 4, + "relic_id": 61084, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1214, + "internal_uid": 220, + "level": 15, + "main_affix_id": 9, + "relic_id": 63065, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1214, + "internal_uid": 221, + "level": 15, + "main_affix_id": 1, + "relic_id": 63066, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1215, + "internal_uid": 222, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1215, + "internal_uid": 223, + "level": 15, + "main_affix_id": 1, + "relic_id": 61142, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1215, + "internal_uid": 224, + "level": 15, + "main_affix_id": 1, + "relic_id": 61143, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1215, + "internal_uid": 225, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1215, + "internal_uid": 226, + "level": 15, + "main_affix_id": 1, + "relic_id": 63025, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1215, + "internal_uid": 227, + "level": 15, + "main_affix_id": 3, + "relic_id": 63026, + "relic_set_id": 302, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1217, + "internal_uid": 228, + "level": 15, + "main_affix_id": 1, + "relic_id": 61251, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1217, + "internal_uid": 229, + "level": 15, + "main_affix_id": 1, + "relic_id": 61252, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 7, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1217, + "internal_uid": 230, + "level": 15, + "main_affix_id": 1, + "relic_id": 61253, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1217, + "internal_uid": 231, + "level": 15, + "main_affix_id": 4, + "relic_id": 61254, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1217, + "internal_uid": 232, + "level": 15, + "main_affix_id": 1, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1217, + "internal_uid": 233, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1218, + "internal_uid": 234, + "level": 15, + "main_affix_id": 1, + "relic_id": 61141, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1218, + "internal_uid": 235, + "level": 15, + "main_affix_id": 1, + "relic_id": 61142, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1218, + "internal_uid": 236, + "level": 15, + "main_affix_id": 7, + "relic_id": 61213, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1218, + "internal_uid": 237, + "level": 15, + "main_affix_id": 4, + "relic_id": 61214, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1218, + "internal_uid": 238, + "level": 15, + "main_affix_id": 5, + "relic_id": 63085, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1218, + "internal_uid": 239, + "level": 15, + "main_affix_id": 2, + "relic_id": 63086, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1220, + "internal_uid": 240, + "level": 15, + "main_affix_id": 1, + "relic_id": 61201, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1220, + "internal_uid": 241, + "level": 15, + "main_affix_id": 1, + "relic_id": 61202, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1220, + "internal_uid": 242, + "level": 15, + "main_affix_id": 5, + "relic_id": 61203, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1220, + "internal_uid": 243, + "level": 15, + "main_affix_id": 4, + "relic_id": 61204, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1220, + "internal_uid": 244, + "level": 15, + "main_affix_id": 8, + "relic_id": 63155, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1220, + "internal_uid": 245, + "level": 15, + "main_affix_id": 4, + "relic_id": 63156, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1221, + "internal_uid": 246, + "level": 15, + "main_affix_id": 1, + "relic_id": 61201, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1221, + "internal_uid": 247, + "level": 15, + "main_affix_id": 1, + "relic_id": 61202, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1221, + "internal_uid": 248, + "level": 15, + "main_affix_id": 5, + "relic_id": 61203, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1221, + "internal_uid": 249, + "level": 15, + "main_affix_id": 2, + "relic_id": 61204, + "relic_set_id": 120, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1221, + "internal_uid": 250, + "level": 15, + "main_affix_id": 4, + "relic_id": 63065, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1221, + "internal_uid": 251, + "level": 15, + "main_affix_id": 4, + "relic_id": 63066, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1222, + "internal_uid": 252, + "level": 15, + "main_affix_id": 1, + "relic_id": 61191, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 5, + "step": 5, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1222, + "internal_uid": 253, + "level": 15, + "main_affix_id": 1, + "relic_id": 61192, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1222, + "internal_uid": 254, + "level": 15, + "main_affix_id": 6, + "relic_id": 61193, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1222, + "internal_uid": 255, + "level": 15, + "main_affix_id": 4, + "relic_id": 61194, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1222, + "internal_uid": 256, + "level": 15, + "main_affix_id": 2, + "relic_id": 63165, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1222, + "internal_uid": 257, + "level": 15, + "main_affix_id": 2, + "relic_id": 63166, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1223, + "internal_uid": 258, + "level": 15, + "main_affix_id": 1, + "relic_id": 61171, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1223, + "internal_uid": 259, + "level": 15, + "main_affix_id": 1, + "relic_id": 61172, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1223, + "internal_uid": 260, + "level": 15, + "main_affix_id": 4, + "relic_id": 61173, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1223, + "internal_uid": 261, + "level": 15, + "main_affix_id": 2, + "relic_id": 61174, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1223, + "internal_uid": 262, + "level": 15, + "main_affix_id": 7, + "relic_id": 63155, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1223, + "internal_uid": 263, + "level": 15, + "main_affix_id": 4, + "relic_id": 63156, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1224, + "internal_uid": 264, + "level": 15, + "main_affix_id": 1, + "relic_id": 61021, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1224, + "internal_uid": 265, + "level": 15, + "main_affix_id": 1, + "relic_id": 61022, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1224, + "internal_uid": 266, + "level": 15, + "main_affix_id": 5, + "relic_id": 61023, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1224, + "internal_uid": 267, + "level": 15, + "main_affix_id": 4, + "relic_id": 61024, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1224, + "internal_uid": 268, + "level": 15, + "main_affix_id": 10, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1224, + "internal_uid": 269, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1225, + "internal_uid": 270, + "level": 15, + "main_affix_id": 1, + "relic_id": 61191, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1225, + "internal_uid": 271, + "level": 15, + "main_affix_id": 1, + "relic_id": 61192, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1225, + "internal_uid": 272, + "level": 15, + "main_affix_id": 7, + "relic_id": 61193, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1225, + "internal_uid": 273, + "level": 15, + "main_affix_id": 4, + "relic_id": 61194, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1225, + "internal_uid": 274, + "level": 15, + "main_affix_id": 1, + "relic_id": 63165, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1225, + "internal_uid": 275, + "level": 15, + "main_affix_id": 1, + "relic_id": 63166, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1301, + "internal_uid": 276, + "level": 15, + "main_affix_id": 1, + "relic_id": 61251, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1301, + "internal_uid": 277, + "level": 15, + "main_affix_id": 1, + "relic_id": 61252, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 12 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1301, + "internal_uid": 278, + "level": 15, + "main_affix_id": 6, + "relic_id": 61253, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1301, + "internal_uid": 279, + "level": 15, + "main_affix_id": 4, + "relic_id": 61254, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1301, + "internal_uid": 280, + "level": 15, + "main_affix_id": 1, + "relic_id": 63205, + "relic_set_id": 320, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1301, + "internal_uid": 281, + "level": 15, + "main_affix_id": 2, + "relic_id": 63206, + "relic_set_id": 320, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1302, + "internal_uid": 282, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1302, + "internal_uid": 283, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1302, + "internal_uid": 284, + "level": 15, + "main_affix_id": 5, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 5, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1302, + "internal_uid": 285, + "level": 15, + "main_affix_id": 2, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1302, + "internal_uid": 286, + "level": 15, + "main_affix_id": 4, + "relic_id": 63065, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1302, + "internal_uid": 287, + "level": 15, + "main_affix_id": 4, + "relic_id": 63066, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + } + ] + }, + { + "equip_avatar": 1303, + "internal_uid": 288, + "level": 15, + "main_affix_id": 1, + "relic_id": 61181, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1303, + "internal_uid": 289, + "level": 15, + "main_affix_id": 1, + "relic_id": 61182, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1303, + "internal_uid": 290, + "level": 15, + "main_affix_id": 1, + "relic_id": 61183, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1303, + "internal_uid": 291, + "level": 15, + "main_affix_id": 4, + "relic_id": 61184, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 4, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1303, + "internal_uid": 292, + "level": 15, + "main_affix_id": 1, + "relic_id": 63085, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1303, + "internal_uid": 293, + "level": 15, + "main_affix_id": 2, + "relic_id": 63086, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1304, + "internal_uid": 294, + "level": 15, + "main_affix_id": 1, + "relic_id": 61281, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1304, + "internal_uid": 295, + "level": 15, + "main_affix_id": 1, + "relic_id": 61282, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1304, + "internal_uid": 296, + "level": 15, + "main_affix_id": 3, + "relic_id": 61283, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1304, + "internal_uid": 297, + "level": 15, + "main_affix_id": 4, + "relic_id": 61284, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1304, + "internal_uid": 298, + "level": 15, + "main_affix_id": 3, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1304, + "internal_uid": 299, + "level": 15, + "main_affix_id": 5, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 12 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + } + ] + }, + { + "equip_avatar": 1305, + "internal_uid": 300, + "level": 15, + "main_affix_id": 1, + "relic_id": 61151, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1305, + "internal_uid": 301, + "level": 15, + "main_affix_id": 1, + "relic_id": 61152, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1305, + "internal_uid": 302, + "level": 15, + "main_affix_id": 5, + "relic_id": 61153, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1305, + "internal_uid": 303, + "level": 15, + "main_affix_id": 4, + "relic_id": 61154, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1305, + "internal_uid": 304, + "level": 15, + "main_affix_id": 10, + "relic_id": 63065, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1305, + "internal_uid": 305, + "level": 15, + "main_affix_id": 4, + "relic_id": 63066, + "relic_set_id": 306, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1306, + "internal_uid": 306, + "level": 15, + "main_affix_id": 1, + "relic_id": 61101, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1306, + "internal_uid": 307, + "level": 15, + "main_affix_id": 1, + "relic_id": 61102, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1306, + "internal_uid": 308, + "level": 15, + "main_affix_id": 5, + "relic_id": 61103, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1306, + "internal_uid": 309, + "level": 15, + "main_affix_id": 4, + "relic_id": 61104, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1306, + "internal_uid": 310, + "level": 15, + "main_affix_id": 1, + "relic_id": 63175, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1306, + "internal_uid": 311, + "level": 15, + "main_affix_id": 2, + "relic_id": 63176, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1307, + "internal_uid": 312, + "level": 15, + "main_affix_id": 1, + "relic_id": 61161, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1307, + "internal_uid": 313, + "level": 15, + "main_affix_id": 1, + "relic_id": 61162, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1307, + "internal_uid": 314, + "level": 15, + "main_affix_id": 7, + "relic_id": 61163, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1307, + "internal_uid": 315, + "level": 15, + "main_affix_id": 4, + "relic_id": 61164, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1307, + "internal_uid": 316, + "level": 15, + "main_affix_id": 2, + "relic_id": 63225, + "relic_set_id": 322, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1307, + "internal_uid": 317, + "level": 15, + "main_affix_id": 4, + "relic_id": 63226, + "relic_set_id": 322, + "sub_affixes": [ + { + "count": 4, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1308, + "internal_uid": 318, + "level": 15, + "main_affix_id": 1, + "relic_id": 61171, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1308, + "internal_uid": 319, + "level": 15, + "main_affix_id": 1, + "relic_id": 61172, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 4, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1308, + "internal_uid": 320, + "level": 15, + "main_affix_id": 5, + "relic_id": 61173, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1308, + "internal_uid": 321, + "level": 15, + "main_affix_id": 2, + "relic_id": 61174, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1308, + "internal_uid": 322, + "level": 15, + "main_affix_id": 2, + "relic_id": 63145, + "relic_set_id": 314, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1308, + "internal_uid": 323, + "level": 15, + "main_affix_id": 4, + "relic_id": 63146, + "relic_set_id": 314, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1309, + "internal_uid": 324, + "level": 15, + "main_affix_id": 1, + "relic_id": 61211, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 18, + "step": 36, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1309, + "internal_uid": 325, + "level": 15, + "main_affix_id": 1, + "relic_id": 61022, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1309, + "internal_uid": 326, + "level": 15, + "main_affix_id": 2, + "relic_id": 61143, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1309, + "internal_uid": 327, + "level": 15, + "main_affix_id": 2, + "relic_id": 61024, + "relic_set_id": 102, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1309, + "internal_uid": 328, + "level": 15, + "main_affix_id": 2, + "relic_id": 63085, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1309, + "internal_uid": 329, + "level": 15, + "main_affix_id": 2, + "relic_id": 63086, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + } + ] + }, + { + "equip_avatar": 1310, + "internal_uid": 330, + "level": 15, + "main_affix_id": 1, + "relic_id": 61191, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1310, + "internal_uid": 331, + "level": 15, + "main_affix_id": 1, + "relic_id": 61192, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1310, + "internal_uid": 332, + "level": 15, + "main_affix_id": 2, + "relic_id": 61193, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1310, + "internal_uid": 333, + "level": 15, + "main_affix_id": 4, + "relic_id": 61194, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 12 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1310, + "internal_uid": 334, + "level": 15, + "main_affix_id": 5, + "relic_id": 63165, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1310, + "internal_uid": 335, + "level": 15, + "main_affix_id": 4, + "relic_id": 63166, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1312, + "internal_uid": 336, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1312, + "internal_uid": 337, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1312, + "internal_uid": 338, + "level": 15, + "main_affix_id": 5, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1312, + "internal_uid": 339, + "level": 15, + "main_affix_id": 4, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1312, + "internal_uid": 340, + "level": 15, + "main_affix_id": 6, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 5, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1312, + "internal_uid": 341, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1313, + "internal_uid": 342, + "level": 15, + "main_affix_id": 1, + "relic_id": 61211, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1313, + "internal_uid": 343, + "level": 15, + "main_affix_id": 1, + "relic_id": 61212, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1313, + "internal_uid": 344, + "level": 15, + "main_affix_id": 5, + "relic_id": 61213, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1313, + "internal_uid": 345, + "level": 15, + "main_affix_id": 4, + "relic_id": 61214, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1313, + "internal_uid": 346, + "level": 15, + "main_affix_id": 1, + "relic_id": 63175, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1313, + "internal_uid": 347, + "level": 15, + "main_affix_id": 2, + "relic_id": 63176, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1314, + "internal_uid": 348, + "level": 15, + "main_affix_id": 1, + "relic_id": 61081, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1314, + "internal_uid": 349, + "level": 15, + "main_affix_id": 1, + "relic_id": 61082, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1314, + "internal_uid": 350, + "level": 15, + "main_affix_id": 5, + "relic_id": 61083, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1314, + "internal_uid": 351, + "level": 15, + "main_affix_id": 2, + "relic_id": 61084, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1314, + "internal_uid": 352, + "level": 15, + "main_affix_id": 9, + "relic_id": 63155, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1314, + "internal_uid": 353, + "level": 15, + "main_affix_id": 4, + "relic_id": 63156, + "relic_set_id": 315, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1315, + "internal_uid": 354, + "level": 15, + "main_affix_id": 1, + "relic_id": 61191, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1315, + "internal_uid": 355, + "level": 15, + "main_affix_id": 1, + "relic_id": 61192, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1315, + "internal_uid": 356, + "level": 15, + "main_affix_id": 2, + "relic_id": 61193, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1315, + "internal_uid": 357, + "level": 15, + "main_affix_id": 4, + "relic_id": 61194, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1315, + "internal_uid": 358, + "level": 15, + "main_affix_id": 4, + "relic_id": 63075, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1315, + "internal_uid": 359, + "level": 15, + "main_affix_id": 4, + "relic_id": 63076, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1317, + "internal_uid": 360, + "level": 15, + "main_affix_id": 1, + "relic_id": 61191, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1317, + "internal_uid": 361, + "level": 15, + "main_affix_id": 1, + "relic_id": 61192, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1317, + "internal_uid": 362, + "level": 15, + "main_affix_id": 2, + "relic_id": 61193, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1317, + "internal_uid": 363, + "level": 15, + "main_affix_id": 4, + "relic_id": 61194, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1317, + "internal_uid": 364, + "level": 15, + "main_affix_id": 2, + "relic_id": 63075, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 4, + "step": 8, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1317, + "internal_uid": 365, + "level": 15, + "main_affix_id": 1, + "relic_id": 63076, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1321, + "internal_uid": 366, + "level": 15, + "main_affix_id": 1, + "relic_id": 61191, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1321, + "internal_uid": 367, + "level": 15, + "main_affix_id": 1, + "relic_id": 61192, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1321, + "internal_uid": 368, + "level": 15, + "main_affix_id": 1, + "relic_id": 61193, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1321, + "internal_uid": 369, + "level": 15, + "main_affix_id": 4, + "relic_id": 61194, + "relic_set_id": 119, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1321, + "internal_uid": 370, + "level": 15, + "main_affix_id": 5, + "relic_id": 63165, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1321, + "internal_uid": 371, + "level": 15, + "main_affix_id": 1, + "relic_id": 63166, + "relic_set_id": 316, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1401, + "internal_uid": 372, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1401, + "internal_uid": 373, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1401, + "internal_uid": 374, + "level": 15, + "main_affix_id": 5, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 5, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1401, + "internal_uid": 375, + "level": 15, + "main_affix_id": 2, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1401, + "internal_uid": 376, + "level": 15, + "main_affix_id": 6, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1401, + "internal_uid": 377, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1402, + "internal_uid": 378, + "level": 15, + "main_affix_id": 1, + "relic_id": 61231, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1402, + "internal_uid": 379, + "level": 15, + "main_affix_id": 1, + "relic_id": 61232, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1402, + "internal_uid": 380, + "level": 15, + "main_affix_id": 4, + "relic_id": 61233, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1402, + "internal_uid": 381, + "level": 15, + "main_affix_id": 4, + "relic_id": 61234, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1402, + "internal_uid": 382, + "level": 15, + "main_affix_id": 7, + "relic_id": 63185, + "relic_set_id": 318, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1402, + "internal_uid": 383, + "level": 15, + "main_affix_id": 2, + "relic_id": 63186, + "relic_set_id": 318, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1403, + "internal_uid": 384, + "level": 15, + "main_affix_id": 1, + "relic_id": 61241, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1403, + "internal_uid": 385, + "level": 15, + "main_affix_id": 1, + "relic_id": 61242, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1403, + "internal_uid": 386, + "level": 15, + "main_affix_id": 5, + "relic_id": 61243, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1403, + "internal_uid": 387, + "level": 15, + "main_affix_id": 1, + "relic_id": 61244, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1403, + "internal_uid": 388, + "level": 15, + "main_affix_id": 9, + "relic_id": 63195, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1403, + "internal_uid": 389, + "level": 15, + "main_affix_id": 3, + "relic_id": 63196, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1404, + "internal_uid": 390, + "level": 15, + "main_affix_id": 1, + "relic_id": 61221, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1404, + "internal_uid": 391, + "level": 15, + "main_affix_id": 1, + "relic_id": 61222, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1404, + "internal_uid": 392, + "level": 15, + "main_affix_id": 1, + "relic_id": 61223, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1404, + "internal_uid": 393, + "level": 15, + "main_affix_id": 1, + "relic_id": 61224, + "relic_set_id": 122, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1404, + "internal_uid": 394, + "level": 15, + "main_affix_id": 10, + "relic_id": 63195, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1404, + "internal_uid": 395, + "level": 15, + "main_affix_id": 3, + "relic_id": 63196, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1405, + "internal_uid": 396, + "level": 15, + "main_affix_id": 1, + "relic_id": 61101, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1405, + "internal_uid": 397, + "level": 15, + "main_affix_id": 1, + "relic_id": 61102, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1405, + "internal_uid": 398, + "level": 15, + "main_affix_id": 4, + "relic_id": 61103, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1405, + "internal_uid": 399, + "level": 15, + "main_affix_id": 4, + "relic_id": 61104, + "relic_set_id": 110, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1405, + "internal_uid": 400, + "level": 15, + "main_affix_id": 2, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1405, + "internal_uid": 401, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + } + ] + }, + { + "equip_avatar": 1406, + "internal_uid": 402, + "level": 15, + "main_affix_id": 1, + "relic_id": 61171, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1406, + "internal_uid": 403, + "level": 15, + "main_affix_id": 1, + "relic_id": 61172, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1406, + "internal_uid": 404, + "level": 15, + "main_affix_id": 5, + "relic_id": 61173, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1406, + "internal_uid": 405, + "level": 15, + "main_affix_id": 4, + "relic_id": 61174, + "relic_set_id": 117, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1406, + "internal_uid": 406, + "level": 15, + "main_affix_id": 9, + "relic_id": 63115, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1406, + "internal_uid": 407, + "level": 15, + "main_affix_id": 4, + "relic_id": 63116, + "relic_set_id": 311, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1407, + "internal_uid": 408, + "level": 15, + "main_affix_id": 1, + "relic_id": 61241, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1407, + "internal_uid": 409, + "level": 15, + "main_affix_id": 1, + "relic_id": 61242, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1407, + "internal_uid": 410, + "level": 15, + "main_affix_id": 5, + "relic_id": 61243, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 5, + "step": 10, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1407, + "internal_uid": 411, + "level": 15, + "main_affix_id": 1, + "relic_id": 61244, + "relic_set_id": 124, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1407, + "internal_uid": 412, + "level": 15, + "main_affix_id": 1, + "relic_id": 63195, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1407, + "internal_uid": 413, + "level": 15, + "main_affix_id": 3, + "relic_id": 63196, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1408, + "internal_uid": 414, + "level": 15, + "main_affix_id": 1, + "relic_id": 61261, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1408, + "internal_uid": 415, + "level": 15, + "main_affix_id": 1, + "relic_id": 61262, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1408, + "internal_uid": 416, + "level": 15, + "main_affix_id": 5, + "relic_id": 61263, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1408, + "internal_uid": 417, + "level": 15, + "main_affix_id": 2, + "relic_id": 61264, + "relic_set_id": 126, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1408, + "internal_uid": 418, + "level": 15, + "main_affix_id": 4, + "relic_id": 63215, + "relic_set_id": 321, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1408, + "internal_uid": 419, + "level": 15, + "main_affix_id": 4, + "relic_id": 63216, + "relic_set_id": 321, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1409, + "internal_uid": 420, + "level": 15, + "main_affix_id": 1, + "relic_id": 61251, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1409, + "internal_uid": 421, + "level": 15, + "main_affix_id": 1, + "relic_id": 61252, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1409, + "internal_uid": 422, + "level": 15, + "main_affix_id": 1, + "relic_id": 61253, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1409, + "internal_uid": 423, + "level": 15, + "main_affix_id": 4, + "relic_id": 61254, + "relic_set_id": 125, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1409, + "internal_uid": 424, + "level": 15, + "main_affix_id": 1, + "relic_id": 63205, + "relic_set_id": 320, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1409, + "internal_uid": 425, + "level": 15, + "main_affix_id": 3, + "relic_id": 63206, + "relic_set_id": 320, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1410, + "internal_uid": 426, + "level": 15, + "main_affix_id": 1, + "relic_id": 61161, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1410, + "internal_uid": 427, + "level": 15, + "main_affix_id": 1, + "relic_id": 61162, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1410, + "internal_uid": 428, + "level": 15, + "main_affix_id": 7, + "relic_id": 61163, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1410, + "internal_uid": 429, + "level": 15, + "main_affix_id": 2, + "relic_id": 61164, + "relic_set_id": 116, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1410, + "internal_uid": 430, + "level": 15, + "main_affix_id": 4, + "relic_id": 63225, + "relic_set_id": 322, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 5, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1410, + "internal_uid": 431, + "level": 15, + "main_affix_id": 4, + "relic_id": 63226, + "relic_set_id": 322, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 7, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1412, + "internal_uid": 432, + "level": 15, + "main_affix_id": 1, + "relic_id": 61211, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1412, + "internal_uid": 433, + "level": 15, + "main_affix_id": 1, + "relic_id": 61212, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1412, + "internal_uid": 434, + "level": 15, + "main_affix_id": 2, + "relic_id": 61213, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 5, + "step": 8, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1412, + "internal_uid": 435, + "level": 15, + "main_affix_id": 4, + "relic_id": 61214, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + } + ] + }, + { + "equip_avatar": 1412, + "internal_uid": 436, + "level": 15, + "main_affix_id": 2, + "relic_id": 63175, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1412, + "internal_uid": 437, + "level": 15, + "main_affix_id": 4, + "relic_id": 63176, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 7, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1413, + "internal_uid": 438, + "level": 15, + "main_affix_id": 1, + "relic_id": 61271, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1413, + "internal_uid": 439, + "level": 15, + "main_affix_id": 1, + "relic_id": 61272, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1413, + "internal_uid": 440, + "level": 15, + "main_affix_id": 5, + "relic_id": 61273, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1413, + "internal_uid": 441, + "level": 15, + "main_affix_id": 1, + "relic_id": 61274, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1413, + "internal_uid": 442, + "level": 15, + "main_affix_id": 6, + "relic_id": 63195, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1413, + "internal_uid": 443, + "level": 15, + "main_affix_id": 3, + "relic_id": 63196, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1414, + "internal_uid": 444, + "level": 15, + "main_affix_id": 1, + "relic_id": 61281, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1414, + "internal_uid": 445, + "level": 15, + "main_affix_id": 1, + "relic_id": 61282, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1414, + "internal_uid": 446, + "level": 15, + "main_affix_id": 2, + "relic_id": 61283, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1414, + "internal_uid": 447, + "level": 15, + "main_affix_id": 4, + "relic_id": 61284, + "relic_set_id": 128, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1414, + "internal_uid": 448, + "level": 15, + "main_affix_id": 2, + "relic_id": 63175, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1414, + "internal_uid": 449, + "level": 15, + "main_affix_id": 2, + "relic_id": 63176, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1415, + "internal_uid": 450, + "level": 15, + "main_affix_id": 1, + "relic_id": 61271, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1415, + "internal_uid": 451, + "level": 15, + "main_affix_id": 1, + "relic_id": 61272, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1415, + "internal_uid": 452, + "level": 15, + "main_affix_id": 5, + "relic_id": 61273, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + } + ] + }, + { + "equip_avatar": 1415, + "internal_uid": 453, + "level": 15, + "main_affix_id": 4, + "relic_id": 61274, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1415, + "internal_uid": 454, + "level": 15, + "main_affix_id": 1, + "relic_id": 63235, + "relic_set_id": 323, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1415, + "internal_uid": 455, + "level": 15, + "main_affix_id": 3, + "relic_id": 63236, + "relic_set_id": 323, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1501, + "internal_uid": 456, + "level": 15, + "main_affix_id": 1, + "relic_id": 61291, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1501, + "internal_uid": 457, + "level": 15, + "main_affix_id": 1, + "relic_id": 61292, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1501, + "internal_uid": 458, + "level": 15, + "main_affix_id": 4, + "relic_id": 61293, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 3, + "step": 1, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1501, + "internal_uid": 459, + "level": 15, + "main_affix_id": 2, + "relic_id": 61294, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1501, + "internal_uid": 460, + "level": 15, + "main_affix_id": 5, + "relic_id": 63245, + "relic_set_id": 324, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1501, + "internal_uid": 461, + "level": 15, + "main_affix_id": 4, + "relic_id": 63246, + "relic_set_id": 324, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1502, + "internal_uid": 462, + "level": 15, + "main_affix_id": 1, + "relic_id": 61301, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1502, + "internal_uid": 463, + "level": 15, + "main_affix_id": 1, + "relic_id": 61302, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1502, + "internal_uid": 464, + "level": 15, + "main_affix_id": 5, + "relic_id": 61303, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1502, + "internal_uid": 465, + "level": 15, + "main_affix_id": 4, + "relic_id": 61304, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1502, + "internal_uid": 466, + "level": 15, + "main_affix_id": 1, + "relic_id": 63175, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1502, + "internal_uid": 467, + "level": 15, + "main_affix_id": 2, + "relic_id": 63176, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1503, + "internal_uid": 468, + "level": 15, + "main_affix_id": 1, + "relic_id": 61331, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 3, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 5, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1503, + "internal_uid": 469, + "level": 15, + "main_affix_id": 1, + "relic_id": 61332, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1503, + "internal_uid": 470, + "level": 15, + "main_affix_id": 6, + "relic_id": 61333, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1503, + "internal_uid": 471, + "level": 15, + "main_affix_id": 4, + "relic_id": 61334, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + } + ] + }, + { + "equip_avatar": 1503, + "internal_uid": 472, + "level": 15, + "main_affix_id": 3, + "relic_id": 63085, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 1 + } + ] + }, + { + "equip_avatar": 1503, + "internal_uid": 473, + "level": 15, + "main_affix_id": 2, + "relic_id": 63086, + "relic_set_id": 308, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1504, + "internal_uid": 474, + "level": 15, + "main_affix_id": 1, + "relic_id": 61151, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1504, + "internal_uid": 475, + "level": 15, + "main_affix_id": 1, + "relic_id": 61152, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1504, + "internal_uid": 476, + "level": 15, + "main_affix_id": 5, + "relic_id": 61153, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1504, + "internal_uid": 477, + "level": 15, + "main_affix_id": 2, + "relic_id": 61154, + "relic_set_id": 115, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1504, + "internal_uid": 478, + "level": 15, + "main_affix_id": 7, + "relic_id": 63265, + "relic_set_id": 326, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + } + ] + }, + { + "equip_avatar": 1504, + "internal_uid": 479, + "level": 15, + "main_affix_id": 4, + "relic_id": 63266, + "relic_set_id": 326, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1505, + "internal_uid": 480, + "level": 15, + "main_affix_id": 1, + "relic_id": 61291, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1505, + "internal_uid": 481, + "level": 15, + "main_affix_id": 1, + "relic_id": 61292, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1505, + "internal_uid": 482, + "level": 15, + "main_affix_id": 5, + "relic_id": 61293, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + } + ] + }, + { + "equip_avatar": 1505, + "internal_uid": 483, + "level": 15, + "main_affix_id": 2, + "relic_id": 61294, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1505, + "internal_uid": 484, + "level": 15, + "main_affix_id": 2, + "relic_id": 63255, + "relic_set_id": 325, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1505, + "internal_uid": 485, + "level": 15, + "main_affix_id": 2, + "relic_id": 63256, + "relic_set_id": 325, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1506, + "internal_uid": 486, + "level": 15, + "main_affix_id": 1, + "relic_id": 61291, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1506, + "internal_uid": 487, + "level": 15, + "main_affix_id": 1, + "relic_id": 61292, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1506, + "internal_uid": 488, + "level": 15, + "main_affix_id": 4, + "relic_id": 61293, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + } + ] + }, + { + "equip_avatar": 1506, + "internal_uid": 489, + "level": 15, + "main_affix_id": 4, + "relic_id": 61294, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1506, + "internal_uid": 490, + "level": 15, + "main_affix_id": 1, + "relic_id": 63255, + "relic_set_id": 325, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 2 + } + ] + }, + { + "equip_avatar": 1506, + "internal_uid": 491, + "level": 15, + "main_affix_id": 3, + "relic_id": 63256, + "relic_set_id": 325, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1507, + "internal_uid": 492, + "level": 15, + "main_affix_id": 1, + "relic_id": 61321, + "relic_set_id": 132, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 7, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1507, + "internal_uid": 493, + "level": 15, + "main_affix_id": 1, + "relic_id": 61322, + "relic_set_id": 132, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1507, + "internal_uid": 494, + "level": 15, + "main_affix_id": 5, + "relic_id": 61323, + "relic_set_id": 132, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1507, + "internal_uid": 495, + "level": 15, + "main_affix_id": 4, + "relic_id": 61324, + "relic_set_id": 132, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + } + ] + }, + { + "equip_avatar": 1507, + "internal_uid": 496, + "level": 15, + "main_affix_id": 1, + "relic_id": 63195, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1507, + "internal_uid": 497, + "level": 15, + "main_affix_id": 2, + "relic_id": 63196, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1508, + "internal_uid": 498, + "level": 15, + "main_affix_id": 1, + "relic_id": 61081, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 1508, + "internal_uid": 499, + "level": 15, + "main_affix_id": 1, + "relic_id": 61082, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1508, + "internal_uid": 500, + "level": 15, + "main_affix_id": 5, + "relic_id": 61083, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 12 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1508, + "internal_uid": 501, + "level": 15, + "main_affix_id": 2, + "relic_id": 61084, + "relic_set_id": 108, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1508, + "internal_uid": 502, + "level": 15, + "main_affix_id": 9, + "relic_id": 63245, + "relic_set_id": 324, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1508, + "internal_uid": 503, + "level": 15, + "main_affix_id": 4, + "relic_id": 63246, + "relic_set_id": 324, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1509, + "internal_uid": 504, + "level": 15, + "main_affix_id": 1, + "relic_id": 61311, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1509, + "internal_uid": 505, + "level": 15, + "main_affix_id": 1, + "relic_id": 61312, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1509, + "internal_uid": 506, + "level": 15, + "main_affix_id": 5, + "relic_id": 61313, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 3, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1509, + "internal_uid": 507, + "level": 15, + "main_affix_id": 2, + "relic_id": 61314, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1509, + "internal_uid": 508, + "level": 15, + "main_affix_id": 7, + "relic_id": 63275, + "relic_set_id": 327, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1509, + "internal_uid": 509, + "level": 15, + "main_affix_id": 2, + "relic_id": 63276, + "relic_set_id": 327, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1510, + "internal_uid": 510, + "level": 15, + "main_affix_id": 1, + "relic_id": 61311, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1510, + "internal_uid": 511, + "level": 15, + "main_affix_id": 1, + "relic_id": 61312, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1510, + "internal_uid": 512, + "level": 15, + "main_affix_id": 5, + "relic_id": 61313, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 3, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1510, + "internal_uid": 513, + "level": 15, + "main_affix_id": 2, + "relic_id": 61314, + "relic_set_id": 131, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1510, + "internal_uid": 514, + "level": 15, + "main_affix_id": 2, + "relic_id": 63275, + "relic_set_id": 327, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1510, + "internal_uid": 515, + "level": 15, + "main_affix_id": 4, + "relic_id": 63276, + "relic_set_id": 327, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1511, + "internal_uid": 516, + "level": 15, + "main_affix_id": 1, + "relic_id": 61331, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1511, + "internal_uid": 517, + "level": 15, + "main_affix_id": 1, + "relic_id": 61332, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 5, + "step": 8, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1511, + "internal_uid": 518, + "level": 15, + "main_affix_id": 4, + "relic_id": 61333, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1511, + "internal_uid": 519, + "level": 15, + "main_affix_id": 4, + "relic_id": 61334, + "relic_set_id": 133, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1511, + "internal_uid": 520, + "level": 15, + "main_affix_id": 1, + "relic_id": 63295, + "relic_set_id": 329, + "sub_affixes": [ + { + "count": 1, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1511, + "internal_uid": 521, + "level": 15, + "main_affix_id": 3, + "relic_id": 63296, + "relic_set_id": 329, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 1512, + "internal_uid": 522, + "level": 15, + "main_affix_id": 1, + "relic_id": 61271, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 0, + "step": 0, + "sub_affix_id": 4 + } + ] + }, + { + "equip_avatar": 1512, + "internal_uid": 523, + "level": 15, + "main_affix_id": 1, + "relic_id": 61272, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 1512, + "internal_uid": 524, + "level": 15, + "main_affix_id": 1, + "relic_id": 61273, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 1512, + "internal_uid": 525, + "level": 15, + "main_affix_id": 1, + "relic_id": 61274, + "relic_set_id": 127, + "sub_affixes": [ + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1512, + "internal_uid": 526, + "level": 15, + "main_affix_id": 1, + "relic_id": 63195, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1512, + "internal_uid": 527, + "level": 15, + "main_affix_id": 3, + "relic_id": 63196, + "relic_set_id": 319, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 1513, + "internal_uid": 528, + "level": 15, + "main_affix_id": 1, + "relic_id": 61291, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1513, + "internal_uid": 529, + "level": 15, + "main_affix_id": 1, + "relic_id": 61292, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 1513, + "internal_uid": 530, + "level": 15, + "main_affix_id": 5, + "relic_id": 61293, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 1 + } + ] + }, + { + "equip_avatar": 1513, + "internal_uid": 531, + "level": 15, + "main_affix_id": 4, + "relic_id": 61294, + "relic_set_id": 129, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 1513, + "internal_uid": 532, + "level": 15, + "main_affix_id": 9, + "relic_id": 63255, + "relic_set_id": 325, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 3 + } + ] + }, + { + "equip_avatar": 1513, + "internal_uid": 533, + "level": 15, + "main_affix_id": 2, + "relic_id": 63256, + "relic_set_id": 325, + "sub_affixes": [ + { + "count": 3, + "step": 5, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8001, + "internal_uid": 534, + "level": 15, + "main_affix_id": 1, + "relic_id": 61051, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8001, + "internal_uid": 535, + "level": 15, + "main_affix_id": 1, + "relic_id": 61052, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8001, + "internal_uid": 536, + "level": 15, + "main_affix_id": 5, + "relic_id": 61053, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8001, + "internal_uid": 537, + "level": 15, + "main_affix_id": 4, + "relic_id": 61054, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8001, + "internal_uid": 538, + "level": 15, + "main_affix_id": 4, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8001, + "internal_uid": 539, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8002, + "internal_uid": 540, + "level": 15, + "main_affix_id": 1, + "relic_id": 61051, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8002, + "internal_uid": 541, + "level": 15, + "main_affix_id": 1, + "relic_id": 61052, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8002, + "internal_uid": 542, + "level": 15, + "main_affix_id": 5, + "relic_id": 61053, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8002, + "internal_uid": 543, + "level": 15, + "main_affix_id": 4, + "relic_id": 61054, + "relic_set_id": 105, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8002, + "internal_uid": 544, + "level": 15, + "main_affix_id": 4, + "relic_id": 63095, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8002, + "internal_uid": 545, + "level": 15, + "main_affix_id": 4, + "relic_id": 63096, + "relic_set_id": 309, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8003, + "internal_uid": 546, + "level": 15, + "main_affix_id": 1, + "relic_id": 61031, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8003, + "internal_uid": 547, + "level": 15, + "main_affix_id": 1, + "relic_id": 61032, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 2, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8003, + "internal_uid": 548, + "level": 15, + "main_affix_id": 3, + "relic_id": 61033, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 8003, + "internal_uid": 549, + "level": 15, + "main_affix_id": 4, + "relic_id": 61034, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8003, + "internal_uid": 550, + "level": 15, + "main_affix_id": 3, + "relic_id": 63045, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 8003, + "internal_uid": 551, + "level": 15, + "main_affix_id": 2, + "relic_id": 63046, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 4, + "step": 8, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8004, + "internal_uid": 552, + "level": 15, + "main_affix_id": 1, + "relic_id": 61031, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8004, + "internal_uid": 553, + "level": 15, + "main_affix_id": 1, + "relic_id": 61032, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 3, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 10 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8004, + "internal_uid": 554, + "level": 15, + "main_affix_id": 3, + "relic_id": 61033, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 8004, + "internal_uid": 555, + "level": 15, + "main_affix_id": 4, + "relic_id": 61034, + "relic_set_id": 103, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8004, + "internal_uid": 556, + "level": 15, + "main_affix_id": 3, + "relic_id": 63045, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 8004, + "internal_uid": 557, + "level": 15, + "main_affix_id": 2, + "relic_id": 63046, + "relic_set_id": 304, + "sub_affixes": [ + { + "count": 4, + "step": 8, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 6 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8005, + "internal_uid": 558, + "level": 15, + "main_affix_id": 1, + "relic_id": 61181, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 6 + }, + { + "count": 5, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8005, + "internal_uid": 559, + "level": 15, + "main_affix_id": 1, + "relic_id": 61182, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8005, + "internal_uid": 560, + "level": 15, + "main_affix_id": 1, + "relic_id": 61183, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 3, + "step": 0, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8005, + "internal_uid": 561, + "level": 15, + "main_affix_id": 4, + "relic_id": 61184, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 4, + "step": 8, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8005, + "internal_uid": 562, + "level": 15, + "main_affix_id": 1, + "relic_id": 63075, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8005, + "internal_uid": 563, + "level": 15, + "main_affix_id": 1, + "relic_id": 63076, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 8006, + "internal_uid": 564, + "level": 15, + "main_affix_id": 1, + "relic_id": 61181, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 4, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 10 + } + ] + }, + { + "equip_avatar": 8006, + "internal_uid": 565, + "level": 15, + "main_affix_id": 1, + "relic_id": 61182, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8006, + "internal_uid": 566, + "level": 15, + "main_affix_id": 4, + "relic_id": 61183, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8006, + "internal_uid": 567, + "level": 15, + "main_affix_id": 4, + "relic_id": 61184, + "relic_set_id": 118, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + }, + { + "count": 5, + "step": 6, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8006, + "internal_uid": 568, + "level": 15, + "main_affix_id": 1, + "relic_id": 63075, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8006, + "internal_uid": 569, + "level": 15, + "main_affix_id": 1, + "relic_id": 63076, + "relic_set_id": 307, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 0, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 8007, + "internal_uid": 570, + "level": 15, + "main_affix_id": 1, + "relic_id": 61211, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8007, + "internal_uid": 571, + "level": 15, + "main_affix_id": 1, + "relic_id": 61212, + "relic_set_id": 121, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8007, + "internal_uid": 572, + "level": 15, + "main_affix_id": 5, + "relic_id": 61143, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 4, + "sub_affix_id": 11 + }, + { + "count": 3, + "step": 5, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8007, + "internal_uid": 573, + "level": 15, + "main_affix_id": 4, + "relic_id": 61144, + "relic_set_id": 114, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 4, + "step": 4, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8007, + "internal_uid": 574, + "level": 15, + "main_affix_id": 6, + "relic_id": 63105, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 4 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 12 + } + ] + }, + { + "equip_avatar": 8007, + "internal_uid": 575, + "level": 15, + "main_affix_id": 2, + "relic_id": 63106, + "relic_set_id": 310, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8008, + "internal_uid": 576, + "level": 15, + "main_affix_id": 1, + "relic_id": 61231, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 11 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8008, + "internal_uid": 577, + "level": 15, + "main_affix_id": 1, + "relic_id": 61232, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 4, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8008, + "internal_uid": 578, + "level": 15, + "main_affix_id": 5, + "relic_id": 61233, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 3, + "sub_affix_id": 5 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 7 + } + ] + }, + { + "equip_avatar": 8008, + "internal_uid": 579, + "level": 15, + "main_affix_id": 4, + "relic_id": 61234, + "relic_set_id": 123, + "sub_affixes": [ + { + "count": 3, + "step": 2, + "sub_affix_id": 4 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 1, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 11 + } + ] + }, + { + "equip_avatar": 8008, + "internal_uid": 580, + "level": 15, + "main_affix_id": 1, + "relic_id": 63205, + "relic_set_id": 320, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8008, + "internal_uid": 581, + "level": 15, + "main_affix_id": 2, + "relic_id": 63206, + "relic_set_id": 320, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 1 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 0, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8009, + "internal_uid": 582, + "level": 15, + "main_affix_id": 1, + "relic_id": 61301, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8009, + "internal_uid": 583, + "level": 15, + "main_affix_id": 1, + "relic_id": 61302, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8009, + "internal_uid": 584, + "level": 15, + "main_affix_id": 5, + "relic_id": 61303, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 8009, + "internal_uid": 585, + "level": 15, + "main_affix_id": 4, + "relic_id": 61304, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8009, + "internal_uid": 586, + "level": 15, + "main_affix_id": 2, + "relic_id": 63175, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8009, + "internal_uid": 587, + "level": 15, + "main_affix_id": 2, + "relic_id": 63176, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8010, + "internal_uid": 588, + "level": 15, + "main_affix_id": 1, + "relic_id": 61301, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 4, + "step": 6, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 3 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8010, + "internal_uid": 589, + "level": 15, + "main_affix_id": 1, + "relic_id": 61302, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 3, + "sub_affix_id": 7 + }, + { + "count": 1, + "step": 0, + "sub_affix_id": 3 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 2, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8010, + "internal_uid": 590, + "level": 15, + "main_affix_id": 5, + "relic_id": 61303, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 2, + "step": 1, + "sub_affix_id": 7 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 2 + }, + { + "count": 1, + "step": 1, + "sub_affix_id": 5 + } + ] + }, + { + "equip_avatar": 8010, + "internal_uid": 591, + "level": 15, + "main_affix_id": 4, + "relic_id": 61304, + "relic_set_id": 130, + "sub_affixes": [ + { + "count": 1, + "step": 2, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 6, + "sub_affix_id": 9 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 5 + }, + { + "count": 2, + "step": 3, + "sub_affix_id": 8 + } + ] + }, + { + "equip_avatar": 8010, + "internal_uid": 592, + "level": 15, + "main_affix_id": 2, + "relic_id": 63175, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 1, + "step": 1, + "sub_affix_id": 2 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 7 + }, + { + "count": 3, + "step": 3, + "sub_affix_id": 8 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 9 + } + ] + }, + { + "equip_avatar": 8010, + "internal_uid": 593, + "level": 15, + "main_affix_id": 2, + "relic_id": 63176, + "relic_set_id": 317, + "sub_affixes": [ + { + "count": 2, + "step": 4, + "sub_affix_id": 8 + }, + { + "count": 1, + "step": 2, + "sub_affix_id": 12 + }, + { + "count": 2, + "step": 1, + "sub_affix_id": 10 + }, + { + "count": 3, + "step": 2, + "sub_affix_id": 9 + } + ] + }, + { + "level": 0, + "relic_id": 31011, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 594, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31012, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 595, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31013, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 596, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31014, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 597, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31021, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 598, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31022, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 599, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31023, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 600, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31024, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 601, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31031, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 602, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31032, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 603, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31033, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 604, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31034, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 605, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31041, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 606, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31042, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 607, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31043, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 608, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31044, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 609, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31051, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 610, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31052, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 611, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31053, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 612, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31054, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 613, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31061, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 614, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31062, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 615, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31063, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 616, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31064, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 617, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31071, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 618, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31072, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 619, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31073, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 620, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31074, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 621, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31081, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 622, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31082, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 623, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31083, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 624, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31084, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 625, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31091, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 626, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31092, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 627, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31093, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 628, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31094, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 629, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31101, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 630, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31102, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 631, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31103, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 632, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31104, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 633, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31111, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 634, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31112, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 635, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31113, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 636, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31114, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 637, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31121, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 638, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31122, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 639, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31123, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 640, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31124, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 641, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31131, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 642, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31132, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 643, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31133, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 644, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31134, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 645, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31141, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 646, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31142, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 647, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31143, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 648, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31144, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 649, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31151, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 650, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31152, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 651, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31153, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 652, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31154, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 653, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31161, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 654, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31162, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 655, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31163, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 656, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31164, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 657, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31171, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 658, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31172, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 659, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31173, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 660, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31174, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 661, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31181, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 662, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31182, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 663, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31183, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 664, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31184, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 665, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31191, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 666, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31192, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 667, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31193, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 668, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31194, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 669, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31201, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 670, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31202, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 671, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31203, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 672, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31204, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 673, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31211, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 674, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31212, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 675, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31213, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 676, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31214, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 677, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31221, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 678, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31222, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 679, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31223, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 680, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31224, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 681, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31231, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 682, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31232, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 683, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31233, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 684, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31234, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 685, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31241, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 686, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31242, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 687, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31243, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 688, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31244, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 689, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31251, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 690, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31252, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 691, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31253, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 692, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31254, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 693, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31261, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 694, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31262, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 695, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31263, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 696, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31264, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 697, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31271, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 698, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31272, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 699, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31273, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 700, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31274, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 701, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31281, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 702, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31282, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 703, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31283, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 704, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31284, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 705, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31291, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 706, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31292, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 707, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31293, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 708, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31294, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 709, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31301, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 710, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31302, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 711, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31303, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 712, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31304, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 713, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31311, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 714, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31312, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 715, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31313, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 716, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31314, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 717, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31321, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 718, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31322, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 719, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31323, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 720, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31324, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 721, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31331, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 722, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31332, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 723, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31333, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 724, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31334, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 725, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31341, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 726, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31342, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 727, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31343, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 728, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 31344, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 729, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33015, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 730, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33016, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 731, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33025, + "relic_set_id": 302, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 732, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33026, + "relic_set_id": 302, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 733, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33035, + "relic_set_id": 303, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 734, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33036, + "relic_set_id": 303, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 735, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33045, + "relic_set_id": 304, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 736, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33046, + "relic_set_id": 304, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 737, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33055, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 738, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33056, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 739, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33065, + "relic_set_id": 306, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 740, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33066, + "relic_set_id": 306, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 741, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33075, + "relic_set_id": 307, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 742, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33076, + "relic_set_id": 307, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 743, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33085, + "relic_set_id": 308, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 744, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33086, + "relic_set_id": 308, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 745, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33095, + "relic_set_id": 309, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 746, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33096, + "relic_set_id": 309, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 747, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33105, + "relic_set_id": 310, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 748, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33106, + "relic_set_id": 310, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 749, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33115, + "relic_set_id": 311, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 750, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33116, + "relic_set_id": 311, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 751, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33125, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 752, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33126, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 753, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33135, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 754, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33136, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 755, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33145, + "relic_set_id": 314, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 756, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33146, + "relic_set_id": 314, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 757, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33155, + "relic_set_id": 315, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 758, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33156, + "relic_set_id": 315, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 759, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33165, + "relic_set_id": 316, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 760, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33166, + "relic_set_id": 316, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 761, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33175, + "relic_set_id": 317, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 762, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33176, + "relic_set_id": 317, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 763, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33185, + "relic_set_id": 318, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 764, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33186, + "relic_set_id": 318, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 765, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33195, + "relic_set_id": 319, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 766, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33196, + "relic_set_id": 319, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 767, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33205, + "relic_set_id": 320, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 768, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33206, + "relic_set_id": 320, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 769, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33215, + "relic_set_id": 321, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 770, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33216, + "relic_set_id": 321, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 771, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33225, + "relic_set_id": 322, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 772, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33226, + "relic_set_id": 322, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 773, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33235, + "relic_set_id": 323, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 774, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33236, + "relic_set_id": 323, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 775, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33245, + "relic_set_id": 324, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 776, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33246, + "relic_set_id": 324, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 777, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33255, + "relic_set_id": 325, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 778, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33256, + "relic_set_id": 325, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 779, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33265, + "relic_set_id": 326, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 780, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33266, + "relic_set_id": 326, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 781, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33275, + "relic_set_id": 327, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 782, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33276, + "relic_set_id": 327, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 783, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33285, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 784, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 33286, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 785, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41011, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 786, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41012, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 787, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41013, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 788, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41014, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 789, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41021, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 790, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41022, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 791, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41023, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 792, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41024, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 793, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41031, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 794, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41032, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 795, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41033, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 796, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41034, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 797, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41041, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 798, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41042, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 799, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41043, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 800, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41044, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 801, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41051, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 802, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41052, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 803, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41053, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 804, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41054, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 805, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41061, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 806, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41062, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 807, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41063, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 808, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41064, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 809, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41071, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 810, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41072, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 811, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41073, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 812, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41074, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 813, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41081, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 814, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41082, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 815, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41083, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 816, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41084, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 817, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41091, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 818, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41092, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 819, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41093, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 820, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41094, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 821, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41101, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 822, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41102, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 823, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41103, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 824, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41104, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 825, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41111, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 826, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41112, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 827, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41113, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 828, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41114, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 829, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41121, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 830, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41122, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 831, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41123, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 832, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41124, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 833, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41131, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 834, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41132, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 835, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41133, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 836, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41134, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 837, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41141, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 838, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41142, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 839, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41143, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 840, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41144, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 841, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41151, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 842, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41152, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 843, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41153, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 844, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41154, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 845, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41161, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 846, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41162, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 847, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41163, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 848, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41164, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 849, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41171, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 850, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41172, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 851, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41173, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 852, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41174, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 853, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41181, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 854, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41182, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 855, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41183, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 856, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41184, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 857, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41191, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 858, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41192, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 859, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41193, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 860, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41194, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 861, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41201, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 862, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41202, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 863, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41203, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 864, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41204, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 865, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41211, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 866, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41212, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 867, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41213, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 868, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41214, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 869, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41221, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 870, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41222, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 871, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41223, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 872, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41224, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 873, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41231, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 874, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41232, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 875, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41233, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 876, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41234, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 877, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41241, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 878, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41242, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 879, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41243, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 880, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41244, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 881, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41251, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 882, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41252, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 883, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41253, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 884, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41254, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 885, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41261, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 886, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41262, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 887, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41263, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 888, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41264, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 889, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41271, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 890, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41272, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 891, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41273, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 892, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41274, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 893, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41281, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 894, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41282, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 895, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41283, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 896, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41284, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 897, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41291, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 898, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41292, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 899, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41293, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 900, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41294, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 901, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41301, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 902, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41302, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 903, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41303, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 904, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41304, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 905, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41311, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 906, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41312, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 907, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41313, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 908, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41314, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 909, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41321, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 910, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41322, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 911, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41323, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 912, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41324, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 913, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41331, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 914, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41332, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 915, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41333, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 916, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41334, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 917, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41341, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 918, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41342, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 919, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41343, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 920, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 41344, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 921, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43015, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 922, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43016, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 923, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43025, + "relic_set_id": 302, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 924, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43026, + "relic_set_id": 302, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 925, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43035, + "relic_set_id": 303, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 926, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43036, + "relic_set_id": 303, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 927, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43045, + "relic_set_id": 304, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 928, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43046, + "relic_set_id": 304, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 929, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43055, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 930, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43056, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 931, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43065, + "relic_set_id": 306, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 932, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43066, + "relic_set_id": 306, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 933, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43075, + "relic_set_id": 307, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 934, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43076, + "relic_set_id": 307, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 935, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43085, + "relic_set_id": 308, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 936, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43086, + "relic_set_id": 308, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 937, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43095, + "relic_set_id": 309, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 938, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43096, + "relic_set_id": 309, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 939, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43105, + "relic_set_id": 310, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 940, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43106, + "relic_set_id": 310, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 941, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43115, + "relic_set_id": 311, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 942, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43116, + "relic_set_id": 311, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 943, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43125, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 944, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43126, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 945, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43135, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 946, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43136, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 947, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43145, + "relic_set_id": 314, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 948, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43146, + "relic_set_id": 314, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 949, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43155, + "relic_set_id": 315, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 950, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43156, + "relic_set_id": 315, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 951, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43165, + "relic_set_id": 316, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 952, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43166, + "relic_set_id": 316, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 953, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43175, + "relic_set_id": 317, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 954, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43176, + "relic_set_id": 317, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 955, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43185, + "relic_set_id": 318, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 956, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43186, + "relic_set_id": 318, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 957, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43195, + "relic_set_id": 319, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 958, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43196, + "relic_set_id": 319, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 959, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43205, + "relic_set_id": 320, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 960, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43206, + "relic_set_id": 320, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 961, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43215, + "relic_set_id": 321, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 962, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43216, + "relic_set_id": 321, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 963, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43225, + "relic_set_id": 322, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 964, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43226, + "relic_set_id": 322, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 965, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43235, + "relic_set_id": 323, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 966, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43236, + "relic_set_id": 323, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 967, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43245, + "relic_set_id": 324, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 968, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43246, + "relic_set_id": 324, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 969, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43255, + "relic_set_id": 325, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 970, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43256, + "relic_set_id": 325, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 971, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43265, + "relic_set_id": 326, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 972, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43266, + "relic_set_id": 326, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 973, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43275, + "relic_set_id": 327, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 974, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43276, + "relic_set_id": 327, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 975, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43285, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 976, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 43286, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 977, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51011, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 978, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51012, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 979, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51013, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 980, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51014, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 981, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51021, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 982, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51022, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 983, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51023, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 984, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51024, + "relic_set_id": 102, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 985, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51031, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 986, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51032, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 987, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51033, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 988, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51034, + "relic_set_id": 103, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 989, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51041, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 990, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51042, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 991, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51043, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 992, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51044, + "relic_set_id": 104, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 993, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51051, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 994, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51052, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 995, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51053, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 996, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51054, + "relic_set_id": 105, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 997, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51061, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 998, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51062, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 999, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51063, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1000, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51064, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1001, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51071, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1002, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51072, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1003, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51073, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1004, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51074, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1005, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51081, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1006, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51082, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1007, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51083, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1008, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51084, + "relic_set_id": 108, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1009, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51091, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1010, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51092, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1011, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51093, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1012, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51094, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1013, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51101, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1014, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51102, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1015, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51103, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1016, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51104, + "relic_set_id": 110, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1017, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51111, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1018, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51112, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1019, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51113, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1020, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51114, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1021, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51121, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1022, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51122, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1023, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51123, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1024, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51124, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1025, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51131, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1026, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51132, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1027, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51133, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1028, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51134, + "relic_set_id": 113, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1029, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51141, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1030, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51142, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1031, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51143, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1032, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51144, + "relic_set_id": 114, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1033, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51151, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1034, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51152, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1035, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51153, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1036, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51154, + "relic_set_id": 115, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1037, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51161, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1038, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51162, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1039, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51163, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1040, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51164, + "relic_set_id": 116, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1041, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51171, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1042, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51172, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1043, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51173, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1044, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51174, + "relic_set_id": 117, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1045, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51181, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1046, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51182, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1047, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51183, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1048, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51184, + "relic_set_id": 118, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1049, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51191, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1050, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51192, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1051, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51193, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1052, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51194, + "relic_set_id": 119, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1053, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51201, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1054, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51202, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1055, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51203, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1056, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51204, + "relic_set_id": 120, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1057, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51211, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1058, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51212, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1059, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51213, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1060, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51214, + "relic_set_id": 121, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1061, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51221, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1062, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51222, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1063, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51223, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1064, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51224, + "relic_set_id": 122, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1065, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51231, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1066, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51232, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1067, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51233, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1068, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51234, + "relic_set_id": 123, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1069, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51241, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1070, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51242, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1071, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51243, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1072, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51244, + "relic_set_id": 124, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1073, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51251, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1074, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51252, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1075, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51253, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1076, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51254, + "relic_set_id": 125, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1077, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51261, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1078, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51262, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1079, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51263, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1080, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51264, + "relic_set_id": 126, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1081, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51271, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1082, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51272, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1083, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51273, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1084, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51274, + "relic_set_id": 127, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1085, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51281, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1086, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51282, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1087, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51283, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1088, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51284, + "relic_set_id": 128, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1089, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51291, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1090, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51292, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1091, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51293, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1092, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51294, + "relic_set_id": 129, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1093, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51301, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1094, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51302, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1095, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51303, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1096, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51304, + "relic_set_id": 130, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1097, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51311, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1098, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51312, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1099, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51313, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1100, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51314, + "relic_set_id": 131, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1101, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51321, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1102, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51322, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1103, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51323, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1104, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51324, + "relic_set_id": 132, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1105, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51331, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1106, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51332, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1107, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51333, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1108, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51334, + "relic_set_id": 133, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1109, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51341, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1110, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51342, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1111, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51343, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1112, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 51344, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1113, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53015, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1114, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53016, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1115, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53025, + "relic_set_id": 302, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1116, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53026, + "relic_set_id": 302, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1117, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53035, + "relic_set_id": 303, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1118, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53036, + "relic_set_id": 303, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1119, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53045, + "relic_set_id": 304, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1120, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53046, + "relic_set_id": 304, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1121, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53055, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1122, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53056, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1123, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53065, + "relic_set_id": 306, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1124, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53066, + "relic_set_id": 306, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1125, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53075, + "relic_set_id": 307, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1126, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53076, + "relic_set_id": 307, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1127, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53085, + "relic_set_id": 308, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1128, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53086, + "relic_set_id": 308, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1129, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53095, + "relic_set_id": 309, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1130, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53096, + "relic_set_id": 309, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1131, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53105, + "relic_set_id": 310, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1132, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53106, + "relic_set_id": 310, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1133, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53115, + "relic_set_id": 311, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1134, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53116, + "relic_set_id": 311, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1135, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53125, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1136, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53126, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1137, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53135, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1138, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53136, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1139, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53145, + "relic_set_id": 314, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1140, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53146, + "relic_set_id": 314, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1141, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53155, + "relic_set_id": 315, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1142, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53156, + "relic_set_id": 315, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1143, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53165, + "relic_set_id": 316, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1144, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53166, + "relic_set_id": 316, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1145, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53175, + "relic_set_id": 317, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1146, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53176, + "relic_set_id": 317, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1147, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53185, + "relic_set_id": 318, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1148, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53186, + "relic_set_id": 318, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1149, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53195, + "relic_set_id": 319, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1150, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53196, + "relic_set_id": 319, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1151, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53205, + "relic_set_id": 320, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1152, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53206, + "relic_set_id": 320, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1153, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53215, + "relic_set_id": 321, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1154, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53216, + "relic_set_id": 321, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1155, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53225, + "relic_set_id": 322, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1156, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53226, + "relic_set_id": 322, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1157, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53235, + "relic_set_id": 323, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1158, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53236, + "relic_set_id": 323, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1159, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53245, + "relic_set_id": 324, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1160, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53246, + "relic_set_id": 324, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1161, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53255, + "relic_set_id": 325, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1162, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53256, + "relic_set_id": 325, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1163, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53265, + "relic_set_id": 326, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1164, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53266, + "relic_set_id": 326, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1165, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53275, + "relic_set_id": 327, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1166, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53276, + "relic_set_id": 327, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1167, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53285, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1168, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 53286, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1169, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61011, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1170, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61014, + "relic_set_id": 101, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1171, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61061, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1172, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61062, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1173, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61063, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1174, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61064, + "relic_set_id": 106, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1175, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61071, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1176, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61072, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1177, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61073, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1178, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61074, + "relic_set_id": 107, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1179, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61091, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1180, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61092, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1181, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61093, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1182, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61094, + "relic_set_id": 109, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1183, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61111, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1184, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61112, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1185, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61113, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1186, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61114, + "relic_set_id": 111, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1187, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61121, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1188, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61122, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1189, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61123, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1190, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61124, + "relic_set_id": 112, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1191, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61341, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1192, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61342, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1193, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61343, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1194, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 61344, + "relic_set_id": 134, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1195, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63015, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1196, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63016, + "relic_set_id": 301, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1197, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63055, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1198, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63056, + "relic_set_id": 305, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1199, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63125, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1200, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63126, + "relic_set_id": 312, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1201, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63135, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1202, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63136, + "relic_set_id": 313, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1203, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63285, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 5, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1204, + "equip_avatar": 0 + }, + { + "level": 0, + "relic_id": 63286, + "relic_set_id": 328, + "main_affix_id": 1, + "sub_affixes": [ + { + "sub_affix_id": 1, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 2, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 3, + "count": 1, + "step": 0 + }, + { + "sub_affix_id": 4, + "count": 1, + "step": 0 + } + ], + "internal_uid": 1205, + "equip_avatar": 0 + } + ] } \ No newline at end of file diff --git a/internal/common/aa_round_selection.go b/internal/common/aa_round_selection.go new file mode 100644 index 0000000..638aa1e --- /dev/null +++ b/internal/common/aa_round_selection.go @@ -0,0 +1,111 @@ +package common + +import ( + "encoding/json" + "fmt" +) + +const aaRoundSelectionKey = "aa_round_selection" + +type AARoundSelection struct { + PeakGroupID uint32 `json:"peak_group_id"` + ClientVersion string `json:"client_version"` +} + +func SetAARoundSelection(peakGroupID uint32) (*AARoundSelection, error) { + catalog, err := LoadMonsterSettingsCatalog() + if err != nil { + return nil, err + } + valid := false + for _, group := range catalog.Modes["aa"] { + if group.ID == peakGroupID { + valid = true + break + } + } + if !valid { + return nil, fmt.Errorf("AA round %d is not present in this Client's resources", peakGroupID) + } + cfg, err := LoadRuntimeConfig() + if err != nil { + return nil, err + } + selection := &AARoundSelection{ + PeakGroupID: peakGroupID, + ClientVersion: cfg.ClientVersion, + } + if err := updateAARoundSelection(selection); err != nil { + return nil, err + } + return selection, nil +} + +// ReadAARoundSelection is read-only. The selected round remains active until +// Srtool changes or clears it, or the configured Client version changes. +func ReadAARoundSelection() (*AARoundSelection, error) { + cfg, err := LoadRuntimeConfig() + if err != nil { + return nil, err + } + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return nil, err + } + return activeAARoundSelection(root, cfg), nil +} + +func ClearAARoundSelection() error { + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return err + } + defer unlock() + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return err + } + _, hasRound := root[aaRoundSelectionKey] + _, hasLegacyRoom := root["aa_room_selection"] + if !hasRound && !hasLegacyRoom { + return nil + } + delete(root, aaRoundSelectionKey) + delete(root, "aa_room_selection") + return writeJSONAtomic("persistent", root) +} + +func updateAARoundSelection(selection *AARoundSelection) error { + raw, err := json.Marshal(selection) + if err != nil { + return err + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return err + } + defer unlock() + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return err + } + delete(root, "aa_room_selection") + root[aaRoundSelectionKey] = raw + return writeJSONAtomic("persistent", root) +} + +func activeAARoundSelection(root map[string]json.RawMessage, cfg RuntimeConfig) *AARoundSelection { + raw, exists := root[aaRoundSelectionKey] + if !exists { + return nil + } + var selection AARoundSelection + if json.Unmarshal(raw, &selection) != nil || selection.PeakGroupID == 0 || selection.ClientVersion != cfg.ClientVersion { + return nil + } + return &selection +} diff --git a/internal/common/activity_preview.go b/internal/common/activity_preview.go new file mode 100644 index 0000000..cb18c24 --- /dev/null +++ b/internal/common/activity_preview.go @@ -0,0 +1,159 @@ +package common + +import ( + "encoding/json" + "fmt" + "sort" +) + +type PreviewActivitySchedule struct { + ModuleID, PanelID uint32 + DataHandler string +} + +func LoadPreviewActivitySchedules() ([]PreviewActivitySchedule, error) { + raw, err := ReadResourceFile("resources/ActivityPreviewPolicy.json") + if err != nil { + return nil, err + } + var policy struct { + Source string `json:"source"` + Panels []struct { + Prefab string `json:"prefab"` + DataHandler string `json:"data_handler"` + } `json:"panels"` + // Display-item panels are withheld by default because their reward + // previews previously triggered invalid-item errors. A panel listed + // here is published deliberately so its real data callbacks can be + // identified from the Client's own requests. + AllowDisplayItemPanels []uint32 `json:"allow_display_item_panels"` + } + if err = json.Unmarshal(raw, &policy); err != nil { + return nil, err + } + if policy.Source == "" { + return nil, fmt.Errorf("activity preview policy missing") + } + if len(policy.Panels) == 0 { + return nil, nil + } + raw, err = ReadResourceFile("resources/PreviewGameplayCatalog.json") + if err != nil { + return nil, err + } + var catalog struct { + Evidence string `json:"evidence_id"` + Tables struct { + Panels []struct { + ID uint32 `json:"PanelID"` + Prefab string `json:"UIPrefab"` + Icon string `json:"TabIcon"` + DisplayItems []json.RawMessage `json:"DisplayItemList"` + } `json:"panels"` + Activities []struct { + ID uint32 `json:"ActivityID"` + PanelID uint32 `json:"ActivityPanelID"` + Residents []uint32 `json:"ResidentModuleList"` + Modules []uint32 `json:"ActivityModuleIDList"` + } `json:"activities"` + } `json:"tables"` + } + if err = json.Unmarshal(raw, &catalog); err != nil { + return nil, err + } + if catalog.Evidence == "" { + return nil, fmt.Errorf("activity preview catalog provenance missing") + } + availabilityRaw, err := ReadResourceFile("resources/PreviewAssetAvailability.json") + if err != nil { + return nil, err + } + var availability struct { + Source string `json:"source"` + Paths map[string]bool `json:"paths"` + } + if err = json.Unmarshal(availabilityRaw, &availability); err != nil { + return nil, err + } + if availability.Source == "" || availability.Paths == nil { + return nil, fmt.Errorf("event asset verification missing") + } + prefabs := map[string]string{} + for _, p := range policy.Panels { + if p.DataHandler != "GetFiveDimMiniGameData" && p.DataHandler != "GetActiveActivityData" && p.DataHandler != "QuestState" && p.DataHandler != "GetMultipleDropInfo" && p.DataHandler != "ComicDessertPreview" { + return nil, fmt.Errorf("unsupported preview data handler %s", p.DataHandler) + } + if p.DataHandler == "ComicDessertPreview" { + if _, err := LoadComicDessertCatalog(); err != nil { + return nil, err + } + } + prefabs[p.Prefab] = p.DataHandler + } + allowDisplayItems := map[uint32]bool{} + for _, id := range policy.AllowDisplayItemPanels { + allowDisplayItems[id] = true + } + panels := map[uint32]struct{ Handler, Prefab string }{} + for _, p := range catalog.Tables.Panels { + if handler := prefabs[p.Prefab]; handler != "" && availability.Paths[p.Prefab] && availability.Paths[p.Icon] && (len(p.DisplayItems) == 0 || allowDisplayItems[p.ID]) { + panels[p.ID] = struct{ Handler, Prefab string }{handler, p.Prefab} + } + } + // Rerun activities can reuse one module ID across panel generations, so a + // module may resolve to several panels. Publish one schedule per module and + // only when every candidate panel agrees on handler and prefab; otherwise + // the association would be an accidental first match. + modulePanels := map[uint32][]uint32{} + for _, activity := range catalog.Tables.Activities { + panel := activity.PanelID + if panel == 0 { + panel = activity.ID + } + if panels[panel].Handler == "" { + continue + } + for _, list := range [][]uint32{activity.Modules, activity.Residents} { + for _, id := range list { + if id == 0 { + continue + } + if _, duplicate := modulePanels[id]; !duplicate { + modulePanels[id] = []uint32{panel} + continue + } + already := false + for _, existing := range modulePanels[id] { + if existing == panel { + already = true + break + } + } + if !already { + modulePanels[id] = append(modulePanels[id], panel) + } + } + } + } + if len(modulePanels) == 0 { + return nil, fmt.Errorf("no supported activity-preview modules in captured catalog") + } + moduleIDs := make([]uint32, 0, len(modulePanels)) + for id := range modulePanels { + moduleIDs = append(moduleIDs, id) + } + sort.Slice(moduleIDs, func(i, j int) bool { return moduleIDs[i] < moduleIDs[j] }) + var schedules []PreviewActivitySchedule + for _, id := range moduleIDs { + panelsForModule := modulePanels[id] + sort.Slice(panelsForModule, func(i, j int) bool { return panelsForModule[i] < panelsForModule[j] }) + first := panels[panelsForModule[0]] + for _, panel := range panelsForModule[1:] { + if panels[panel] != first { + return nil, fmt.Errorf("activity module %d maps to conflicting panels %v", id, panelsForModule) + } + } + schedules = append(schedules, PreviewActivitySchedule{ModuleID: id, PanelID: panelsForModule[0], DataHandler: first.Handler}) + } + return schedules, nil +} diff --git a/internal/common/aha_help.go b/internal/common/aha_help.go new file mode 100644 index 0000000..647c88b --- /dev/null +++ b/internal/common/aha_help.go @@ -0,0 +1,93 @@ +package common + +import ( + "encoding/json" + "fmt" + "math" +) + +type AhaHelpLevel struct { + BuffID uint32 `json:"BuffID"` + ProgressPercent float64 `json:"ProgressPercent"` + BuffLevel uint32 `json:"BuffLevel"` +} + +// The supplied table selects the support buff; progress thresholds are metadata, +// not a fabricated dynamic-value key sent to the Client. +func LoadAhaHelpLevels() ([]AhaHelpLevel, error) { + raw, err := ReadResourceFile("resources/AhaHelpConfig.json") + if err != nil { + return nil, err + } + var config struct { + Source string `json:"source"` + Levels []AhaHelpLevel `json:"levels"` + } + if err = json.Unmarshal(raw, &config); err != nil { + return nil, err + } + if config.Source == "" || len(config.Levels) == 0 { + return nil, fmt.Errorf("Aha help table has no provenance or levels") + } + seen := map[uint32]bool{} + for _, level := range config.Levels { + if level.BuffID == 0 || level.BuffLevel == 0 || seen[level.BuffLevel] || math.IsNaN(level.ProgressPercent) || level.ProgressPercent < 0 || level.ProgressPercent > 1 { + return nil, fmt.Errorf("invalid Aha help level") + } + seen[level.BuffLevel] = true + } + return config.Levels, nil +} + +// nil preserves the existing FreeSR switch. Explicit zero means disabled. +func ReadAhaHelpLevel() (*uint32, error) { + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return nil, err + } + raw, ok := root["aha_help_level"] + if !ok { + return nil, nil + } + var level *uint32 + if err = json.Unmarshal(raw, &level); err != nil { + return nil, err + } + return level, nil +} + +func SaveAhaHelpLevel(level *uint32) error { + levels, err := LoadAhaHelpLevels() + if err != nil { + return err + } + if level != nil && *level != 0 { + found := false + for _, row := range levels { + found = found || row.BuffLevel == *level + } + if !found { + return fmt.Errorf("Aha help level is not in the configured table") + } + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return err + } + defer unlock() + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return err + } + if level == nil { + delete(root, "aha_help_level") + } else { + root["aha_help_level"], err = json.Marshal(*level) + } + if err != nil { + return err + } + return writeJSONAtomic("persistent", root) +} diff --git a/internal/common/aha_help_test.go b/internal/common/aha_help_test.go new file mode 100644 index 0000000..f7dce02 --- /dev/null +++ b/internal/common/aha_help_test.go @@ -0,0 +1,78 @@ +package common + +import ( + "bytes" + "os" + "path/filepath" + "testing" +) + +func TestAhaHelpSettingPreservesRunAndExplicitOff(t *testing.T) { + resource, err := os.ReadFile(filepath.Join("..", "..", "resources", "AhaHelpConfig.json")) + if err != nil { + t.Fatal(err) + } + t.Chdir(t.TempDir()) + if err := os.Mkdir("resources", 0755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join("resources", "AhaHelpConfig.json"), resource, 0644); err != nil { + t.Fatal(err) + } + initial := []byte(`{"currency_wars":{"keep":{"revision":42}},"ex_ranks_unlocked":{"1204":false},"unrelated":"preserve"}`) + if err := os.WriteFile("persistent", initial, 0644); err != nil { + t.Fatal(err) + } + if level, err := ReadAhaHelpLevel(); err != nil || level != nil { + t.Fatalf("legacy setting: %v %v", level, err) + } + afterRead, _ := os.ReadFile("persistent") + if !bytes.Equal(afterRead, initial) { + t.Fatal("read changed persistent") + } + levels, err := LoadAhaHelpLevels() + if err != nil { + t.Fatal(err) + } + for _, row := range levels { + if err := SaveAhaHelpLevel(&row.BuffLevel); err != nil { + t.Fatal(err) + } + selected, err := ReadAhaHelpLevel() + if err != nil || selected == nil || *selected != row.BuffLevel { + t.Fatalf("selected level: %v %v", selected, err) + } + } + off := uint32(0) + if err := SaveAhaHelpLevel(&off); err != nil { + t.Fatal(err) + } + selected, err := ReadAhaHelpLevel() + if err != nil || selected == nil || *selected != 0 { + t.Fatalf("explicit off lost: %v %v", selected, err) + } + beforeInvalid, _ := os.ReadFile("persistent") + invalid := ^uint32(0) + if err := SaveAhaHelpLevel(&invalid); err == nil { + t.Fatal("accepted absent level") + } + afterInvalid, _ := os.ReadFile("persistent") + if !bytes.Equal(beforeInvalid, afterInvalid) { + t.Fatal("invalid setting changed persistent") + } + if err := SaveAhaHelpLevel(nil); err != nil { + t.Fatal(err) + } + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + t.Fatal(err) + } + if _, ok := root["aha_help_level"]; ok { + t.Fatal("legacy reset retained override") + } + for _, key := range []string{"currency_wars", "ex_ranks_unlocked", "unrelated"} { + if len(root[key]) == 0 { + t.Fatalf("lost %s", key) + } + } +} diff --git a/internal/common/comic_dessert.go b/internal/common/comic_dessert.go new file mode 100644 index 0000000..6c9f635 --- /dev/null +++ b/internal/common/comic_dessert.go @@ -0,0 +1,89 @@ +package common + +import ( + "encoding/hex" + "encoding/json" + "fmt" +) + +type ComicDessertCycle struct { + ID uint32 + ProgressAmount uint32 + LevelIDList []uint32 +} + +type ComicDessertLevel struct { + ID uint32 + LevelConfigPath string + RequiredCoin uint32 +} + +type ComicDessertCatalog struct { + Cycles []ComicDessertCycle + Levels []ComicDessertLevel +} + +// Read the two captured flat tables. Never initialize gameplay by inventing a +// cycle/level ID, and never write user progress from this catalog reader. +func LoadComicDessertCatalog() (*ComicDessertCatalog, error) { + raw, err := ReadResourceFile("resources/ComicDessertCatalog.json") + if err != nil { + return nil, err + } + var resource struct { + Format uint32 `json:"format_version"` + Assembly string `json:"client_assembly_sha256"` + Evidence string `json:"evidence_id"` + ComicDessertCatalog + } + if err = json.Unmarshal(raw, &resource); err != nil { + return nil, err + } + digest, err := hex.DecodeString(resource.Assembly) + if err != nil || len(digest) != 32 || resource.Format != 1 || resource.Evidence == "" { + return nil, fmt.Errorf("ComicDessert catalog provenance invalid") + } + raw, err = ReadResourceFile("resources/PreviewGameplayCatalog.json") + if err != nil { + return nil, err + } + var client struct { + Assembly string `json:"client_assembly_sha256"` + } + if err = json.Unmarshal(raw, &client); err != nil || client.Assembly != resource.Assembly { + return nil, fmt.Errorf("ComicDessert/client catalog identity mismatch") + } + levels := make(map[uint32]bool, len(resource.Levels)) + for _, level := range resource.Levels { + if level.ID == 0 || level.LevelConfigPath == "" || levels[level.ID] { + return nil, fmt.Errorf("invalid ComicDessert level catalog") + } + levels[level.ID] = true + } + cycles := make(map[uint32]bool, len(resource.Cycles)) + for _, cycle := range resource.Cycles { + if cycle.ID == 0 || cycles[cycle.ID] || len(cycle.LevelIDList) == 0 { + return nil, fmt.Errorf("invalid ComicDessert cycle catalog") + } + cycles[cycle.ID] = true + for _, id := range cycle.LevelIDList { + if !levels[id] { + return nil, fmt.Errorf("ComicDessert cycle references absent level %d", id) + } + } + } + if len(cycles) == 0 || len(levels) == 0 { + return nil, fmt.Errorf("ComicDessert catalog is empty") + } + return &resource.ComicDessertCatalog, nil +} + +func (c *ComicDessertCatalog) InitialCycle() ComicDessertCycle { + var first ComicDessertCycle + for _, cycle := range c.Cycles { + if first.ID == 0 || cycle.ProgressAmount < first.ProgressAmount || (cycle.ProgressAmount == first.ProgressAmount && cycle.ID < first.ID) { + first = cycle + } + } + return first +} diff --git a/internal/common/currency_wars_activity_conditions.go b/internal/common/currency_wars_activity_conditions.go new file mode 100644 index 0000000..19b8e29 --- /dev/null +++ b/internal/common/currency_wars_activity_conditions.go @@ -0,0 +1,115 @@ +package common + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "sort" + "strconv" +) + +// LoadCurrencyWarsGuideMissions returns only the native CW panel's declared +// FinishMainMission prerequisites for the server's existing freeplay policy. +// It does not finish all imported missions, change a save or force Client UI +// state. The current condition capture is an explicit overlay of the older CW +// catalog, not a claim that every CW table was recaptured for that assembly. +func LoadCurrencyWarsGuideMissions() ([]uint32, error) { + catalog, err := LoadCurrencyWarsCatalog() + if err != nil { + return nil, err + } + raw, err := ReadResourceFile("resources/CurrencyWarsActivityConditions.json") + if err != nil { + return nil, err + } + var overlay struct { + Format uint32 `json:"format_version"` + Source string `json:"source_assembly_sha256"` + Target string `json:"target_assembly_sha256"` + Capture string `json:"capture_sha256"` + Policy string `json:"guide_policy"` + Types map[string]uint32 `json:"condition_types"` + Rows []struct { + PanelID uint32 + GuideConditions []struct { + Type uint32 + Param string + } + } `json:"rows"` + } + if err := json.Unmarshal(raw, &overlay); err != nil { + return nil, fmt.Errorf("decode CW activity conditions: %w", err) + } + if overlay.Format != 1 || overlay.Source != catalog.Provenance.GameAssemblySHA256 || overlay.Policy != "complete_declared_guide_finish_main_missions" { + return nil, fmt.Errorf("CW activity condition source/policy differs") + } + for _, digest := range []string{overlay.Target, overlay.Capture} { + value, e := hex.DecodeString(digest) + if e != nil || len(value) != 32 { + return nil, fmt.Errorf("CW activity condition evidence missing") + } + } + // The independently captured current activity catalog provides the target + // assembly identity; a configured version label is not an identity check. + current, err := ReadResourceFile("resources/PreviewGameplayCatalog.json") + if err != nil { + return nil, err + } + var identity struct { + Assembly string `json:"client_assembly_sha256"` + } + if err := json.Unmarshal(current, &identity); err != nil || identity.Assembly != overlay.Target { + return nil, fmt.Errorf("CW activity condition target differs from current activity capture") + } + finishType := overlay.Types["FinishMainMission"] + if finishType == 0 || len(overlay.Rows) == 0 { + return nil, fmt.Errorf("CW guide condition enum/rows missing") + } + mainData, err := ReadResourceFile("resources/MainMission.json") + if err != nil { + return nil, err + } + var main struct { + Rows []struct { + ID uint32 `json:"MainMissionID"` + } `json:"main_mission_config"` + } + if err := json.Unmarshal(mainData, &main); err != nil { + return nil, err + } + known := make(map[uint32]bool, len(main.Rows)) + for _, mission := range main.Rows { + known[mission.ID] = true + } + panels := map[uint32]bool{} + for _, schedule := range catalog.ActivitySchedules() { + panels[schedule.ActivityID] = true + } + seenPanels, seenMissions := map[uint32]bool{}, map[uint32]bool{} + var result []uint32 + for _, row := range overlay.Rows { + if row.PanelID == 0 || !panels[row.PanelID] || seenPanels[row.PanelID] { + return nil, fmt.Errorf("CW guide condition panel is not an active unique CW panel") + } + seenPanels[row.PanelID] = true + for _, condition := range row.GuideConditions { + // An unimplemented condition cannot silently be treated as finished. + if condition.Type != finishType { + return nil, fmt.Errorf("CW guide condition kind %d is not implemented", condition.Type) + } + id, err := strconv.ParseUint(condition.Param, 10, 32) + if err != nil || id == 0 || !known[uint32(id)] { + return nil, fmt.Errorf("CW guide mission is not present in the mission resource") + } + if !seenMissions[uint32(id)] { + seenMissions[uint32(id)] = true + result = append(result, uint32(id)) + } + } + } + if len(result) == 0 { + return nil, fmt.Errorf("CW guide condition mission list is empty") + } + sort.Slice(result, func(i, j int) bool { return result[i] < result[j] }) + return result, nil +} diff --git a/internal/common/currency_wars_bonfire.go b/internal/common/currency_wars_bonfire.go new file mode 100644 index 0000000..54ce8cd --- /dev/null +++ b/internal/common/currency_wars_bonfire.go @@ -0,0 +1,118 @@ +package common + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "math" + "strings" +) + +type CurrencyWarsBonfireOption struct { + EventID, OptionID, DialogID uint32 + JsonPath, OptionShowType string + EffectParamList []struct{ Value float64 } +} + +type CurrencyWarsBonfireRecipe struct { + ID, Option uint32 + Status, Engine string + Effects []struct { + Trigger string + Actions []struct { + Action, Name string + Value json.RawMessage + } + } +} + +type CurrencyWarsBonfire struct { + Events map[uint32]uint32 + Options []CurrencyWarsBonfireOption + Configs map[string]CurrencyWarsBonfireRecipe + Heal map[uint32]uint32 +} + +// This is a labelled FFGO implementation reference, not a Client table capture. +// Its event IDs must additionally occur on the active Client run's node. +func LoadCurrencyWarsBonfire(c *CurrencyWarsCatalog) (*CurrencyWarsBonfire, error) { + raw, err := ReadResourceFile("resources/CurrencyWarsBonfire.json") + if err != nil { + return nil, err + } + var r struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Binary string `json:"source_binary_sha256"` + Tables struct { + Events []struct{ ID, PetPalID, DialogID uint32 } `json:"events"` + Options []CurrencyWarsBonfireOption `json:"options"` + Heal []struct{ ChapterID, HealNum uint32 } `json:"heal"` + } `json:"tables"` + Configs map[string]CurrencyWarsBonfireRecipe `json:"configs"` + } + if err = json.Unmarshal(raw, &r); err != nil { + return nil, err + } + if c == nil || r.Format != 1 || r.Client != c.ClientVersion || r.Assembly != c.Provenance.GameAssemblySHA256 { + return nil, fmt.Errorf("CW Bonfire reference compatibility differs") + } + if h, e := hex.DecodeString(r.Binary); e != nil || len(h) != 32 { + return nil, fmt.Errorf("CW Bonfire source identity missing") + } + out := &CurrencyWarsBonfire{Events: map[uint32]uint32{}, Options: r.Tables.Options, Configs: r.Configs, Heal: map[uint32]uint32{}} + for _, v := range r.Tables.Events { + _, duplicate := out.Events[v.ID] + if v.ID == 0 || duplicate { + return nil, fmt.Errorf("CW Bonfire event identity invalid") + } + out.Events[v.ID] = v.DialogID + } + for _, v := range r.Tables.Heal { + if v.ChapterID == 0 || out.Heal[v.ChapterID] != 0 { + return nil, fmt.Errorf("CW Bonfire heal identity invalid") + } + out.Heal[v.ChapterID] = v.HealNum + } + seen := map[[2]uint32]bool{} + for _, v := range out.Options { + key := [2]uint32{v.EventID, v.OptionID} + _, eventExists := out.Events[v.EventID] + if v.EventID == 0 || v.OptionID == 0 || !eventExists || seen[key] { + return nil, fmt.Errorf("CW Bonfire option identity invalid") + } + seen[key] = true + } + return out, nil +} + +func (b *CurrencyWarsBonfire) OptionRules(option CurrencyWarsBonfireOption) (map[string]uint32, error) { + path := strings.TrimPrefix(option.JsonPath, "Config/Level/GridFight/") + recipe, ok := b.Configs[path] + if !ok || recipe.ID != option.EventID || recipe.Option != option.OptionID || recipe.Status != "Implemented" || recipe.Engine != "TeaBreakOption" { + return nil, fmt.Errorf("CW Bonfire option %d/%d has no supported recipe", option.EventID, option.OptionID) + } + rules := map[string]uint32{} + for _, effect := range recipe.Effects { + if effect.Trigger != "Immediately" { + return nil, fmt.Errorf("CW Bonfire trigger %s not implemented", effect.Trigger) + } + for _, action := range effect.Actions { + var parameter string + _ = json.Unmarshal(action.Value, ¶meter) + if action.Action != "SetRule" || action.Name != "PetPalStarDown" || parameter != "#1" || len(option.EffectParamList) < 1 { + return nil, fmt.Errorf("CW Bonfire action %s/%s not implemented", action.Action, action.Name) + } + value := option.EffectParamList[0].Value + if math.IsNaN(value) || math.IsInf(value, 0) || value < 0 || value > 100 || value != math.Trunc(value) { + return nil, fmt.Errorf("CW Bonfire probability invalid") + } + rules[action.Name] = uint32(value) + } + } + if len(rules) == 0 { + return nil, fmt.Errorf("CW Bonfire option has no implemented effects") + } + return rules, nil +} diff --git a/internal/common/currency_wars_catalog.go b/internal/common/currency_wars_catalog.go index 96d6ace..81f5de4 100644 --- a/internal/common/currency_wars_catalog.go +++ b/internal/common/currency_wars_catalog.go @@ -57,6 +57,7 @@ type CurrencyWarsCatalog struct { chapterByID map[uint32]CurrencyWarsChapter nodeTypeByID map[uint32]string campByID map[[2]uint32]CurrencyWarsMonsterCamp + roleReplacements map[uint32]uint32 } type CurrencyWarsTutorial struct { @@ -265,6 +266,10 @@ func LoadCurrencyWarsCatalog() (*CurrencyWarsCatalog, error) { currencyWarsCatalogErr = err return } + if err := catalog.applyRoleCompatibility(); err != nil { + currencyWarsCatalogErr = err + return + } currencyWarsCatalog = &catalog }) return currencyWarsCatalog, currencyWarsCatalogErr diff --git a/internal/common/currency_wars_commands.go b/internal/common/currency_wars_commands.go index 269e62d..c6f7c01 100644 --- a/internal/common/currency_wars_commands.go +++ b/internal/common/currency_wars_commands.go @@ -10,11 +10,13 @@ import ( // Commands are separate from the run revision. The live game session applies // them only during Preparation, so a web command cannot invalidate settlement. type CurrencyWarsCommand struct { - ID string `json:"id"` - UID uint32 `json:"uid"` - RunID uint32 `json:"run_id"` - Field string `json:"field"` - Value uint32 `json:"value"` + ID string `json:"id"` + UID uint32 `json:"uid"` + RunID uint32 `json:"run_id"` + Field string `json:"field"` + Value uint32 `json:"value"` + Quantity uint32 `json:"quantity,omitempty"` + Star uint32 `json:"star,omitempty"` } func ReadCurrencyWarsCommands() ([]CurrencyWarsCommand, error) { @@ -30,7 +32,11 @@ func ReadCurrencyWarsCommands() ([]CurrencyWarsCommand, error) { } func QueueCurrencyWarsCommand(uid, runID uint32, field string, value uint32) (string, error) { - if uid == 0 || runID == 0 || (field != "gold" && field != "hp") { + return QueueCurrencyWarsGrant(uid, runID, field, value, 1, 0) +} + +func QueueCurrencyWarsGrant(uid, runID uint32, field string, value, quantity, star uint32) (string, error) { + if uid == 0 || runID == 0 || quantity == 0 || (field != "gold" && field != "hp" && field != "exp" && field != "equip" && field != "role" && field != "orb" && field != "consumable" && field != "forge") { return "", fmt.Errorf("invalid CW command") } var nonce [16]byte @@ -55,7 +61,7 @@ func QueueCurrencyWarsCommand(uid, runID uint32, field string, value uint32) (st return "", err } } - commands = append(commands, CurrencyWarsCommand{ID: id, UID: uid, RunID: runID, Field: field, Value: value}) + commands = append(commands, CurrencyWarsCommand{ID: id, UID: uid, RunID: runID, Field: field, Value: value, Quantity: quantity, Star: star}) raw, err := json.Marshal(commands) if err != nil { return "", err diff --git a/internal/common/currency_wars_crafts.go b/internal/common/currency_wars_crafts.go new file mode 100644 index 0000000..b7c0994 --- /dev/null +++ b/internal/common/currency_wars_crafts.go @@ -0,0 +1,47 @@ +package common + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "slices" +) + +type CurrencyWarsCraft struct { + CraftID uint32 `json:"CraftID"` + CraftEquipID uint32 `json:"CraftEquipID"` + CostEquipList []uint32 `json:"CostEquipList"` +} + +func LoadCurrencyWarsCrafts(catalog *CurrencyWarsCatalog) ([]CurrencyWarsCraft, error) { + raw, err := ReadResourceFile("resources/CurrencyWarsCrafts.json") + if err != nil { + return nil, err + } + var data struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Hash string `json:"source_capture_sha256"` + Entries []CurrencyWarsCraft `json:"entries"` + } + if err = json.Unmarshal(raw, &data); err != nil { + return nil, err + } + if catalog == nil || data.Format != 1 || data.Client != catalog.ClientVersion || data.Assembly != catalog.Provenance.GameAssemblySHA256 { + return nil, fmt.Errorf("CW crafting resource revision differs") + } + digest, err := hex.DecodeString(data.Hash) + if err != nil || len(digest) != sha256.Size || len(data.Entries) == 0 { + return nil, fmt.Errorf("CW crafting provenance is missing") + } + seen := map[uint32]bool{} + for _, r := range data.Entries { + if r.CraftID == 0 || r.CraftEquipID == 0 || seen[r.CraftID] || len(r.CostEquipList) != 2 || slices.Contains(r.CostEquipList, uint32(0)) { + return nil, fmt.Errorf("CW craft identity/material schema differs") + } + seen[r.CraftID] = true + } + return data.Entries, nil +} diff --git a/internal/common/currency_wars_monsters.go b/internal/common/currency_wars_monsters.go new file mode 100644 index 0000000..d033c43 --- /dev/null +++ b/internal/common/currency_wars_monsters.go @@ -0,0 +1,54 @@ +package common + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" +) + +type CurrencyWarsMonsterRow struct { + ID uint32 `json:"MonsterID"` + Tier uint32 `json:"MonsterTier"` + Star1 uint32 `json:"Star1EliteGroup3"` + Star2 uint32 `json:"Star2EliteGroup3"` + Star3 uint32 `json:"Star3EliteGroup3"` + Star4 uint32 `json:"Star4EliteGroup3"` +} + +// This is deliberately partial coverage: callers reject an absent native row. +func LoadCurrencyWarsMonsters(c *CurrencyWarsCatalog) (map[uint32]CurrencyWarsMonsterRow, error) { + raw, err := ReadResourceFile("resources/CurrencyWarsMonsters.json") + if err != nil { + return nil, err + } + var r struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Capture string `json:"source_capture_sha256"` + Policy string `json:"encounter_camp_policy"` + Entries []CurrencyWarsMonsterRow `json:"entries"` + } + if err = json.Unmarshal(raw, &r); err != nil { + return nil, err + } + if c == nil || r.Format != 1 || r.Client != c.ClientVersion || r.Assembly != c.Provenance.GameAssemblySHA256 { + return nil, fmt.Errorf("CW monster revision differs") + } + digest, err := hex.DecodeString(r.Capture) + if err != nil || len(digest) != sha256.Size || r.Policy != "uniform_compatible_active_camp_same_tier" { + return nil, fmt.Errorf("CW monster provenance/policy missing") + } + rows := map[uint32]CurrencyWarsMonsterRow{} + for _, v := range r.Entries { + if _, dup := rows[v.ID]; dup || v.ID == 0 || v.Star1 == 0 || v.Star2 == 0 || v.Star3 == 0 || v.Star4 == 0 { + return nil, fmt.Errorf("CW monster identity/star group invalid") + } + rows[v.ID] = v + } + if len(rows) == 0 { + return nil, fmt.Errorf("CW monster capture empty") + } + return rows, nil +} diff --git a/internal/common/currency_wars_orb_recipes.go b/internal/common/currency_wars_orb_recipes.go new file mode 100644 index 0000000..20967d8 --- /dev/null +++ b/internal/common/currency_wars_orb_recipes.go @@ -0,0 +1,120 @@ +package common + +import ( + "encoding/hex" + "encoding/json" + "fmt" +) + +// CurrencyWarsOrbReward describes a reference-authored declarative reward. +// These are not asserted to be original Client roll rates. +type CurrencyWarsOrbReward struct { + Reward string + Amount, ItemID, Count, Rarity, Star uint32 + Category string +} + +type CurrencyWarsOrbRecipe struct { + ID uint32 + Status, Engine string + Chapters []uint32 + Choices [][]CurrencyWarsOrbReward +} + +type CurrencyWarsOrbRecipes struct { + Format uint32 `json:"format_version"` + Source string `json:"source_kind"` + Binary string `json:"binary_sha256"` + Excel string `json:"excel_json_sha256"` + Custom string `json:"custom_json_sha256"` + Orbs []struct { + ID uint32 `json:"id"` + Bonus uint32 `json:"bonus_id"` + } `json:"orbs"` + Basic []struct { + ID uint32 `json:"id"` + Kind string `json:"kind"` + Amount uint32 `json:"amount"` + } `json:"basic_bonuses"` + Recipes []CurrencyWarsOrbRecipe `json:"recipes"` + Equipment []struct { + ID uint32 `json:"id"` + Category string `json:"category"` + } `json:"equipment"` +} + +func LoadCurrencyWarsOrbRecipes() (*CurrencyWarsOrbRecipes, error) { + raw, err := ReadResourceFile("resources/CurrencyWarsOrbRecipes.json") + if err != nil { + return nil, err + } + var out CurrencyWarsOrbRecipes + if err = json.Unmarshal(raw, &out); err != nil { + return nil, err + } + if out.Format != 1 || out.Source != "reference-server-authored-orb-recipes" { + return nil, fmt.Errorf("CW Orb recipe format/source differs") + } + for _, value := range []string{out.Binary, out.Excel, out.Custom} { + h, err := hex.DecodeString(value) + if err != nil || len(h) != 32 { + return nil, fmt.Errorf("CW Orb recipe provenance missing") + } + } + seen := map[uint32]bool{} + for _, orb := range out.Orbs { + if orb.ID == 0 || orb.Bonus == 0 || seen[orb.ID] { + return nil, fmt.Errorf("CW Orb recipe identity invalid") + } + seen[orb.ID] = true + } + seen = map[uint32]bool{} + for _, recipe := range out.Recipes { + if recipe.ID == 0 || seen[recipe.ID] || len(recipe.Choices) == 0 { + return nil, fmt.Errorf("CW Orb custom recipe identity/choices invalid") + } + seen[recipe.ID] = true + } + return &out, nil +} + +func (r *CurrencyWarsOrbRecipes) Choices(orbID, chapter uint32) ([][]CurrencyWarsOrbReward, error) { + for _, recipe := range r.Recipes { + if recipe.ID != orbID { + continue + } + if recipe.Status != "Implemented" || recipe.Engine != "Orb" { + return nil, fmt.Errorf("CW Orb %d recipe is not implemented", orbID) + } + if len(recipe.Chapters) > 0 { + found := false + for _, ch := range recipe.Chapters { + found = found || ch == chapter + } + if !found { + return nil, fmt.Errorf("CW Orb %d is not applicable to chapter %d", orbID, chapter) + } + } + return recipe.Choices, nil + } + var bonus uint32 + for _, orb := range r.Orbs { + if orb.ID == orbID { + bonus = orb.Bonus + break + } + } + for _, basic := range r.Basic { + if basic.ID != bonus { + continue + } + switch basic.Kind { + case "Gold", "Exp", "Refresh", "GlobalHp": + if basic.Amount == 0 { + return nil, fmt.Errorf("CW Orb %d has a zero/implicit basic amount", orbID) + } + return [][]CurrencyWarsOrbReward{{{Reward: basic.Kind, Amount: basic.Amount}}}, nil + } + } + return nil, fmt.Errorf("CW Orb %d requires an unresolved bonus-pool recipe", orbID) +} diff --git a/internal/common/currency_wars_reference_nodes.go b/internal/common/currency_wars_reference_nodes.go new file mode 100644 index 0000000..3007bdb --- /dev/null +++ b/internal/common/currency_wars_reference_nodes.go @@ -0,0 +1,76 @@ +package common + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" +) + +// CurrencyWarsReferenceNodeTemplate is the normalized grid_fight_node_template +// row from the reference dump. It is configuration, never a copied run/save. +type CurrencyWarsReferenceNodeTemplate struct { + NodeTemplateID uint32 + StageID uint32 + NodeType string + ParamList []uint32 + PenaltyBonusRuleID uint32 + BasicGoldRewardNum uint32 + IsAugment uint32 +} + +type CurrencyWarsReferenceNodes struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Provenance struct { + Reference string `json:"reference_executable_sha256"` + Excel string `json:"excel_dump_sha256"` + Table string `json:"source_table"` + } `json:"provenance"` + Templates []CurrencyWarsReferenceNodeTemplate `json:"templates"` + byID map[uint32]CurrencyWarsReferenceNodeTemplate +} + +func LoadCurrencyWarsReferenceNodes(c *CurrencyWarsCatalog) (*CurrencyWarsReferenceNodes, error) { + if c == nil { + return nil, fmt.Errorf("CW reference nodes catalog missing") + } + raw, err := ReadResourceFile("resources/CurrencyWarsReferenceNodes.json") + if err != nil { + return nil, err + } + v := new(CurrencyWarsReferenceNodes) + if err = json.Unmarshal(raw, v); err != nil { + return nil, err + } + if v.Format != 1 || v.Client != c.ClientVersion || v.Assembly != c.Provenance.GameAssemblySHA256 || v.Provenance.Table != "grid_fight_node_template" { + return nil, fmt.Errorf("CW reference node revision differs") + } + for _, s := range []string{v.Provenance.Reference, v.Provenance.Excel} { + b, e := hex.DecodeString(s) + if e != nil || len(b) != sha256.Size { + return nil, fmt.Errorf("CW reference node provenance missing") + } + } + v.byID = make(map[uint32]CurrencyWarsReferenceNodeTemplate, len(v.Templates)) + for _, r := range v.Templates { + if r.NodeTemplateID == 0 || r.StageID == 0 || r.NodeType == "" { + return nil, fmt.Errorf("CW invalid reference node template") + } + if _, ok := v.byID[r.NodeTemplateID]; ok { + return nil, fmt.Errorf("CW duplicate reference node template %d", r.NodeTemplateID) + } + v.byID[r.NodeTemplateID] = r + } + return v, nil +} + +func (v *CurrencyWarsReferenceNodes) Template(id uint32) (CurrencyWarsReferenceNodeTemplate, error) { + r, ok := v.byID[id] + if !ok { + return r, fmt.Errorf("CW reference node template %d missing", id) + } + r.ParamList = append([]uint32(nil), r.ParamList...) + return r, nil +} diff --git a/internal/common/currency_wars_reference_penalties.go b/internal/common/currency_wars_reference_penalties.go new file mode 100644 index 0000000..fad6610 --- /dev/null +++ b/internal/common/currency_wars_reference_penalties.go @@ -0,0 +1,51 @@ +package common + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" +) + +type CurrencyWarsReferencePenalty struct { + ID, ThresholdPosition, ThresholdFailPlayerHPPenalty, ThresholdPassBasicPlayerHPPenalty, ProgressPenaltyCoefficient uint32 +} + +func LoadCurrencyWarsReferencePenalties(c *CurrencyWarsCatalog) (map[uint32]CurrencyWarsReferencePenalty, error) { + b, err := ReadResourceFile("resources/CurrencyWarsReferencePenalties.json") + if err != nil { + return nil, err + } + var r struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Reference string `json:"reference_executable_sha256"` + Excel string `json:"excel_dump_sha256"` + Table string `json:"source_table"` + Rules []CurrencyWarsReferencePenalty `json:"penalty_rules"` + } + if err = json.Unmarshal(b, &r); err != nil { + return nil, err + } + if c == nil || r.Format != 1 || r.Client != c.ClientVersion || r.Assembly != c.Provenance.GameAssemblySHA256 || r.Table != "grid_fight_penalty_rule" { + return nil, fmt.Errorf("CW reference penalty compatibility differs") + } + for _, s := range []string{r.Reference, r.Excel} { + h, e := hex.DecodeString(s) + if e != nil || len(h) != sha256.Size { + return nil, fmt.Errorf("CW reference penalty provenance missing") + } + } + out := map[uint32]CurrencyWarsReferencePenalty{} + for _, v := range r.Rules { + if _, found := out[v.ID]; v.ID == 0 || found || v.ThresholdPosition > 100 { + return nil, fmt.Errorf("CW reference penalty invalid") + } + out[v.ID] = v + } + if len(out) == 0 { + return nil, fmt.Errorf("CW reference penalties empty") + } + return out, nil +} diff --git a/internal/common/currency_wars_rewards.go b/internal/common/currency_wars_rewards.go new file mode 100644 index 0000000..bec2978 --- /dev/null +++ b/internal/common/currency_wars_rewards.go @@ -0,0 +1,95 @@ +package common + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" +) + +type CurrencyWarsOrb struct { + ID uint32 `json:"OrbID"` + Bonus uint32 `json:"BonusID"` + Type uint32 `json:"Type"` +} +type CurrencyWarsConsumable struct { + ID uint32 + IfStack, IfConsume bool + ConsumableRule uint32 + ConsumableParamList []uint32 +} +type CurrencyWarsForge struct { + ID, FuncType, EquipNum, EquipCategory uint32 + ParamList []uint32 +} +type CurrencyWarsCombination struct { + ID uint32 `json:"BonusID"` + Pools []uint32 `json:"CombinationBonusList"` + Counts []uint32 `json:"BonusNumberList"` +} +type CurrencyWarsRewards struct { + Orbs map[uint32]CurrencyWarsOrb + Consumables map[uint32]CurrencyWarsConsumable + Forges map[uint32]CurrencyWarsForge + Combinations map[uint32]CurrencyWarsCombination +} + +// Tables are complete flat-table captures for the recorded Client revision. +// Bonus-pool resolution and item-effect execution are separate prerequisites. +func LoadCurrencyWarsRewards(c *CurrencyWarsCatalog) (*CurrencyWarsRewards, error) { + raw, err := ReadResourceFile("resources/CurrencyWarsRewards.json") + if err != nil { + return nil, err + } + var r struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Capture string `json:"source_capture_sha256"` + Tables struct { + Orbs []CurrencyWarsOrb `json:"orb"` + Consumables []CurrencyWarsConsumable `json:"consumable"` + Forges []CurrencyWarsForge `json:"forge"` + Combinations []CurrencyWarsCombination `json:"combination"` + } `json:"tables"` + } + if err = json.Unmarshal(raw, &r); err != nil { + return nil, err + } + if c == nil || r.Format != 1 || r.Client != c.ClientVersion || r.Assembly != c.Provenance.GameAssemblySHA256 { + return nil, fmt.Errorf("CW reward table revision differs") + } + hash, e := hex.DecodeString(r.Capture) + if e != nil || len(hash) != sha256.Size { + return nil, fmt.Errorf("CW reward capture provenance missing") + } + out := &CurrencyWarsRewards{Orbs: map[uint32]CurrencyWarsOrb{}, Consumables: map[uint32]CurrencyWarsConsumable{}, Forges: map[uint32]CurrencyWarsForge{}, Combinations: map[uint32]CurrencyWarsCombination{}} + for _, v := range r.Tables.Orbs { + if _, ok := out.Orbs[v.ID]; v.ID == 0 || v.Bonus == 0 || ok { + return nil, fmt.Errorf("CW Orb identity invalid") + } + out.Orbs[v.ID] = v + } + for _, v := range r.Tables.Consumables { + if _, ok := out.Consumables[v.ID]; v.ID == 0 || ok { + return nil, fmt.Errorf("CW consumable identity invalid") + } + out.Consumables[v.ID] = v + } + for _, v := range r.Tables.Forges { + if _, ok := out.Forges[v.ID]; v.ID == 0 || v.EquipNum == 0 || ok { + return nil, fmt.Errorf("CW forge identity invalid") + } + out.Forges[v.ID] = v + } + for _, v := range r.Tables.Combinations { + if _, ok := out.Combinations[v.ID]; v.ID == 0 || len(v.Pools) != len(v.Counts) || ok { + return nil, fmt.Errorf("CW combination identity invalid") + } + out.Combinations[v.ID] = v + } + if len(out.Orbs) == 0 || len(out.Consumables) == 0 || len(out.Forges) == 0 || len(out.Combinations) == 0 { + return nil, fmt.Errorf("CW reward tables incomplete") + } + return out, nil +} diff --git a/internal/common/currency_wars_role_compatibility.go b/internal/common/currency_wars_role_compatibility.go new file mode 100644 index 0000000..6c3a556 --- /dev/null +++ b/internal/common/currency_wars_role_compatibility.go @@ -0,0 +1,95 @@ +package common + +import ( + "encoding/hex" + "encoding/json" + "fmt" +) + +// The base capture remains identified by its original assembly. A separately +// proven overlay supplies replacements removed from the current Client. It is +// not a claim that every other CW table has been recaptured for that assembly. +func (c *CurrencyWarsCatalog) applyRoleCompatibility() error { + raw, err := ReadResourceFile("resources/CurrencyWarsRoleCompatibility.json") + if err != nil { + return err + } + var overlay struct { + Format uint32 `json:"format_version"` + Source string `json:"source_assembly_sha256"` + Target string `json:"target_assembly_sha256"` + Capture string `json:"capture_sha256"` + Entries []struct { + Previous uint32 `json:"previous_role_id"` + Current uint32 `json:"current_role_id"` + Variants []CurrencyWarsRoleVariant `json:"variants"` + } `json:"entries"` + } + if err = json.Unmarshal(raw, &overlay); err != nil { + return err + } + if overlay.Format != 1 || overlay.Source != c.Provenance.GameAssemblySHA256 { + return fmt.Errorf("CW role compatibility source differs") + } + for _, hash := range []string{overlay.Target, overlay.Capture} { + b, e := hex.DecodeString(hash) + if e != nil || len(b) != 32 { + return fmt.Errorf("CW role compatibility evidence missing") + } + } + c.roleReplacements = map[uint32]uint32{} + for _, entry := range overlay.Entries { + if _, duplicate := c.roleReplacements[entry.Previous]; duplicate { + return fmt.Errorf("duplicate CW role replacement source") + } + previous, ok := c.roleByID[entry.Previous] + if !ok || entry.Current == 0 || entry.Previous == entry.Current || len(entry.Variants) == 0 { + return fmt.Errorf("invalid CW role replacement") + } + if _, duplicate := c.roleByID[entry.Current]; duplicate { + return fmt.Errorf("CW role replacement already exists") + } + first := entry.Variants[0] + if first.Config.AvatarID != previous.Config.AvatarID || first.Config.SeasonID != previous.Config.SeasonID || first.Star != previous.DefaultStar || uint32(len(entry.Variants)) != first.MaxStar { + return fmt.Errorf("CW replacement family or star coverage differs") + } + current := CurrencyWarsCapturedRole{Config: first.Config, Price: first.Price, MaxStar: first.MaxStar, DefaultStar: first.Star} + c.roleByID[entry.Current] = current + sale, e := c.BaseSalePrice(entry.Current, first.Star) + if e != nil { + return e + } + current.DefaultSellPrice = sale + c.roleByID[entry.Current] = current + stars := map[uint32]bool{} + for _, v := range entry.Variants { + var star struct{ ID, Star uint32 } + if json.Unmarshal(v.StarConfig, &star) != nil || v.Config.ID != entry.Current || star.ID != entry.Current || star.Star != v.Star || v.Star == 0 || v.Star > first.MaxStar || stars[v.Star] || v.Config.AvatarID != previous.Config.AvatarID || v.Config.SeasonID != previous.Config.SeasonID { + return fmt.Errorf("CW replacement star identity differs") + } + stars[v.Star] = true + c.variantByKey[[2]uint32{entry.Current, v.Star}] = v + } + for i := range c.CapturedRoles { + if c.CapturedRoles[i].Config.ID == entry.Previous { + c.CapturedRoles[i] = current + } + } + kept := make([]CurrencyWarsRoleVariant, 0, len(c.CapturedVariants)+len(entry.Variants)) + for _, v := range c.CapturedVariants { + if v.Config.ID != entry.Previous { + kept = append(kept, v) + } + } + c.CapturedVariants = append(kept, entry.Variants...) + c.roleReplacements[entry.Previous] = entry.Current + } + return nil +} + +func (c *CurrencyWarsCatalog) CurrentRoleID(id uint32) uint32 { + if current := c.roleReplacements[id]; current != 0 { + return current + } + return id +} diff --git a/internal/common/currency_wars_roles.go b/internal/common/currency_wars_roles.go index 747a608..2a5a938 100644 --- a/internal/common/currency_wars_roles.go +++ b/internal/common/currency_wars_roles.go @@ -96,6 +96,7 @@ func (c *CurrencyWarsCatalog) validateCapturedGameplay() error { } func (c *CurrencyWarsCatalog) CapturedRole(id uint32) (CurrencyWarsCapturedRole, error) { + id = c.CurrentRoleID(id) role, found := c.roleByID[id] if !found { return CurrencyWarsCapturedRole{}, fmt.Errorf("CW role %d has not been captured", id) diff --git a/internal/common/currency_wars_spotlights.go b/internal/common/currency_wars_spotlights.go index a8dc8ac..0c6f601 100644 --- a/internal/common/currency_wars_spotlights.go +++ b/internal/common/currency_wars_spotlights.go @@ -48,8 +48,11 @@ func (c *CurrencyWarsCatalog) SpotlightData() (map[uint32]CurrencyWarsSpotlight, } rows := make(map[uint32]CurrencyWarsSpotlight, len(resource.Entries)) for _, r := range resource.Entries { - if _, exists := rows[r.ID]; exists || r.ID == 0 || r.JsonPath == "" { - return nil, policy, fmt.Errorf("CW Spotlight configuration invalid") + // Native rows can have an empty JsonPath; some effects are resolved by + // their own engine rather than an external level graph. Retain that + // distinction instead of rejecting the entire valid handbook capture. + if _, exists := rows[r.ID]; exists || r.ID == 0 { + return nil, policy, fmt.Errorf("CW Spotlight configuration identity invalid: %d", r.ID) } for _, v := range r.EffectParams { if !currencyWarsDecimal.MatchString(v) { diff --git a/internal/common/currency_wars_store.go b/internal/common/currency_wars_store.go index 6eb952d..0443b1e 100644 --- a/internal/common/currency_wars_store.go +++ b/internal/common/currency_wars_store.go @@ -17,12 +17,20 @@ var ErrCurrencyWarsSaveConflict = errors.New("CW save changed in another session // WireData is a serialized GridFightGetDataScRsp, retaining unknown protocol // fields. UID and Client identity prevent restoring a different account/schema. type CurrencyWarsSnapshot struct { - FormatVersion uint32 `json:"format_version"` - UID uint32 `json:"uid"` - ClientVersion string `json:"client_version"` - AssemblySHA256 string `json:"assembly_sha256"` - Revision uint64 `json:"revision"` - WireData []byte `json:"wire_data"` + FormatVersion uint32 `json:"format_version"` + UID uint32 `json:"uid"` + ClientVersion string `json:"client_version"` + AssemblySHA256 string `json:"assembly_sha256"` + Revision uint64 `json:"revision"` + WireData []byte `json:"wire_data"` + Runtime *CurrencyWarsRuntimeState `json:"runtime,omitempty"` +} + +// Server-side rules are kept beside, never smuggled into, the Client protocol. +// RunID prevents a rule from a finished run leaking into a later challenge. +type CurrencyWarsRuntimeState struct { + RunID uint32 `json:"run_id"` + Rules map[string]uint32 `json:"rules,omitempty"` } func (s *CurrencyWarsSnapshot) validate() error { @@ -85,6 +93,19 @@ func readCurrencyWarsPersistentRoot() (map[string]json.RawMessage, error) { // stale game session from overwriting a later run. The caller must validate // the protocol payload before committing; reads do not perform migration. func CommitCurrencyWarsSnapshot(expectedRevision uint64, next CurrencyWarsSnapshot) (uint64, error) { + return commitCurrencyWarsSnapshot(expectedRevision, next, "") +} + +// A grant and its queue acknowledgement share one atomic file replacement. +// A crash or disconnect cannot replay an already committed additive grant. +func CommitCurrencyWarsCommand(expectedRevision uint64, next CurrencyWarsSnapshot, commandID string) (uint64, error) { + if commandID == "" { + return 0, fmt.Errorf("CW command ID missing") + } + return commitCurrencyWarsSnapshot(expectedRevision, next, commandID) +} + +func commitCurrencyWarsSnapshot(expectedRevision uint64, next CurrencyWarsSnapshot, commandID string) (uint64, error) { if err := next.validate(); err != nil { return 0, err } @@ -107,7 +128,11 @@ func CommitCurrencyWarsSnapshot(expectedRevision uint64, next CurrencyWarsSnapsh } key := strconv.FormatUint(uint64(next.UID), 10) var revision uint64 + var previousFields map[string]json.RawMessage if raw, exists := accounts[key]; exists { + if err := json.Unmarshal(raw, &previousFields); err != nil { + return 0, err + } var previous CurrencyWarsSnapshot if err := json.Unmarshal(raw, &previous); err != nil { return 0, err @@ -119,6 +144,9 @@ func CommitCurrencyWarsSnapshot(expectedRevision uint64, next CurrencyWarsSnapsh return 0, fmt.Errorf("CW snapshot source differs; migration is required") } revision = previous.Revision + if next.Runtime != nil && previous.Runtime != nil && next.Runtime.RunID == previous.Runtime.RunID && next.Runtime.Rules == nil { + next.Runtime.Rules = previous.Runtime.Rules + } } if revision != expectedRevision { return 0, ErrCurrencyWarsSaveConflict @@ -127,7 +155,48 @@ func CommitCurrencyWarsSnapshot(expectedRevision uint64, next CurrencyWarsSnapsh return 0, fmt.Errorf("CW snapshot revision exhausted") } next.Revision = revision + 1 - accounts[key], err = json.Marshal(next) + // Retain unrelated envelope fields added by tools or a newer writer. + encoded, err := json.Marshal(next) + if err != nil { + return 0, err + } + var nextFields map[string]json.RawMessage + if err = json.Unmarshal(encoded, &nextFields); err != nil { + return 0, err + } + if next.Runtime != nil && previousFields != nil { + var oldRuntime map[string]json.RawMessage + var oldRunID uint32 + if raw := previousFields["runtime"]; len(raw) != 0 && json.Unmarshal(raw, &oldRuntime) == nil { + _ = json.Unmarshal(oldRuntime["run_id"], &oldRunID) + if oldRunID == next.Runtime.RunID { + var runtimeFields map[string]json.RawMessage + if err = json.Unmarshal(nextFields["runtime"], &runtimeFields); err != nil { + return 0, err + } + for name, value := range runtimeFields { + oldRuntime[name] = value + } + if next.Runtime.Rules != nil && len(next.Runtime.Rules) == 0 { + delete(oldRuntime, "rules") + } + nextFields["runtime"], err = json.Marshal(oldRuntime) + if err != nil { + return 0, err + } + } + } + } + if previousFields == nil { + previousFields = map[string]json.RawMessage{} + } + for name, value := range nextFields { + previousFields[name] = value + } + if next.Runtime == nil { + delete(previousFields, "runtime") + } + accounts[key], err = json.Marshal(previousFields) if err != nil { return 0, err } @@ -135,6 +204,34 @@ func CommitCurrencyWarsSnapshot(expectedRevision uint64, next CurrencyWarsSnapsh if err != nil { return 0, err } + if commandID != "" { + var commands []CurrencyWarsCommand + if raw, ok := root["currency_wars_commands"]; ok { + if err := json.Unmarshal(raw, &commands); err != nil { + return 0, err + } + } + found := false + remaining := make([]CurrencyWarsCommand, 0, len(commands)) + for _, cmd := range commands { + if cmd.ID == commandID { + if found || cmd.UID != next.UID { + return 0, fmt.Errorf("CW command identity differs") + } + found = true + } else { + remaining = append(remaining, cmd) + } + } + if !found { + return 0, fmt.Errorf("CW command no longer queued") + } + raw, err := json.Marshal(remaining) + if err != nil { + return 0, err + } + root["currency_wars_commands"] = raw + } if err := writeJSONAtomic("persistent", root); err != nil { return 0, err } diff --git a/internal/common/currency_wars_trials.go b/internal/common/currency_wars_trials.go new file mode 100644 index 0000000..9b0a2af --- /dev/null +++ b/internal/common/currency_wars_trials.go @@ -0,0 +1,60 @@ +package common + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" +) + +type CurrencyWarsTrialAvatar struct { + SpecialAvatarID uint32 + AvatarID uint32 + WorldLevel uint32 + Level uint32 + Promotion uint32 + Rank uint32 + EnhancedID uint32 + ExRankIDList []uint32 + EquipmentID uint32 + EquipmentLevel uint32 + EquipmentPromotion uint32 + EquipmentRank uint32 +} + +func (c *CurrencyWarsCatalog) TrialAvatar(specialID, avatarID, worldLevel uint32) (CurrencyWarsTrialAvatar, error) { + var result CurrencyWarsTrialAvatar + raw, e := ReadResourceFile("resources/CurrencyWarsTrialAvatars.json") + if e != nil { + return result, e + } + var r struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Capture string `json:"source_capture_sha256"` + Entries []CurrencyWarsTrialAvatar `json:"entries"` + } + if e = json.Unmarshal(raw, &r); e != nil { + return result, e + } + digest, e := hex.DecodeString(r.Capture) + if e != nil || len(digest) != sha256.Size || r.Format != 1 || r.Client != c.ClientVersion || r.Assembly != c.Provenance.GameAssemblySHA256 { + return result, fmt.Errorf("CW trial capture revision differs") + } + seen := map[[2]uint32]bool{} + for _, v := range r.Entries { + key := [2]uint32{v.SpecialAvatarID, v.WorldLevel} + if seen[key] || v.SpecialAvatarID == 0 || v.AvatarID == 0 || v.Level == 0 { + return result, fmt.Errorf("CW trial configuration invalid") + } + seen[key] = true + if v.SpecialAvatarID == specialID && v.AvatarID == avatarID && v.WorldLevel <= worldLevel && (result.SpecialAvatarID == 0 || v.WorldLevel > result.WorldLevel) { + result = v + } + } + if result.SpecialAvatarID == 0 { + return result, fmt.Errorf("CW special avatar %d world level %d has not been captured", specialID, worldLevel) + } + return result, nil +} diff --git a/internal/common/currency_wars_variants.go b/internal/common/currency_wars_variants.go index 46c4934..4852b5a 100644 --- a/internal/common/currency_wars_variants.go +++ b/internal/common/currency_wars_variants.go @@ -62,6 +62,7 @@ func (c *CurrencyWarsCatalog) validateRoleVariants() error { } func (c *CurrencyWarsCatalog) CapturedRoleVariant(roleID, star uint32) (CurrencyWarsRoleVariant, error) { + roleID = c.CurrentRoleID(roleID) role, exists := c.variantByKey[[2]uint32{roleID, star}] if !exists { return CurrencyWarsRoleVariant{}, fmt.Errorf("CW role %d star %d has not been captured", roleID, star) diff --git a/internal/common/facecam.go b/internal/common/facecam.go new file mode 100644 index 0000000..9db62d2 --- /dev/null +++ b/internal/common/facecam.go @@ -0,0 +1,56 @@ +package common + +import ( + "encoding/json" + "fmt" +) + +// FaceCamSettings is shared by the SDK and the game heartbeat. Distance is in +// world units; changing this setting never changes the Freecam enabled state. +type FaceCamSettings struct { + Mode string `json:"mode"` + Distance float64 `json:"distance"` +} + +func ReadFaceCamSettings() (FaceCamSettings, error) { + settings := FaceCamSettings{Mode: "freecam", Distance: 2} + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return settings, err + } + if raw, ok := root["camera_settings"]; ok { + if err := json.Unmarshal(raw, &settings); err != nil { + return settings, err + } + } + return settings, settings.Validate() +} + +func (s FaceCamSettings) Validate() error { + if (s.Mode != "freecam" && s.Mode != "facecam") || !(s.Distance >= 0.5 && s.Distance <= 5) { + return fmt.Errorf("invalid camera mode or distance") + } + return nil +} + +func SaveFaceCamSettings(settings FaceCamSettings) error { + if err := settings.Validate(); err != nil { + return err + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return err + } + defer unlock() + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return err + } + root["camera_settings"], err = json.Marshal(settings) + if err != nil { + return err + } + return writeJSONAtomic("persistent", root) +} diff --git a/internal/common/gacha_catalog.go b/internal/common/gacha_catalog.go new file mode 100644 index 0000000..2a9bcc4 --- /dev/null +++ b/internal/common/gacha_catalog.go @@ -0,0 +1,284 @@ +package common + +import ( + "encoding/json" + "fmt" + "regexp" + "sort" + "strconv" +) + +type FeaturedGachaBanner struct { + ID, AvatarID, SortID uint32 + Prefab string +} +type GachaSandboxPolicy struct { + LimitedRules LimitedGachaRules `json:"limited_rules"` + Source string `json:"source"` + DrawCounts []uint32 `json:"allowed_draw_counts"` + ChargeCurrency bool `json:"charge_currency"` + DuplicateReward string `json:"duplicate_reward"` + // A flat-table path does not prove that its bundle exists in this Client. + VerifiedBannerPrefabs []string `json:"verified_banner_prefabs"` + SandboxDrawPool struct { + Source string `json:"source"` + FirstAcquisition string `json:"first_acquisition"` + } `json:"sandbox_draw_pool"` + // MappedBannerPreviewCount caps how many mapped per-character banners the + // GetGachaInfo response advertises. The current Client skips IDs absent + // from its local config before creating a pool. Keep zero until a runtime + // presentation adapter has been verified; filling a nil Row afterward + // cannot create those missing pools. + MappedBannerPreviewCount uint32 `json:"mapped_banner_preview_count"` + NativePresentation struct { + Enabled bool `json:"enabled"` + TemplateGachaID uint32 `json:"template_gacha_id"` + Source string `json:"source"` + } `json:"native_presentation"` +} + +func LoadFeaturedGachaBanners() ([]FeaturedGachaBanner, GachaSandboxPolicy, error) { + return loadGachaBanners(true) +} + +// Browse entries can include a verified standard panel without pretending it +// represents one featured character. Such entries do not enable sandbox draws. +func LoadBrowsableGachaBanners() ([]FeaturedGachaBanner, GachaSandboxPolicy, error) { + return loadGachaBanners(false) +} + +func loadGachaBanners(featuredOnly bool) ([]FeaturedGachaBanner, GachaSandboxPolicy, error) { + raw, err := ReadResourceFile("resources/PreviewGameplayCatalog.json") + if err != nil { + return nil, GachaSandboxPolicy{}, err + } + var catalog struct { + Source string `json:"source"` + Evidence string `json:"evidence_id"` + Tables struct { + Gacha []struct { + ID uint32 `json:"GachaID"` + SortID uint32 + Prefab string `json:"PrefabPath"` + } `json:"gacha"` + } `json:"tables"` + } + if err = json.Unmarshal(raw, &catalog); err != nil { + return nil, GachaSandboxPolicy{}, err + } + if catalog.Source == "" || catalog.Evidence == "" { + return nil, GachaSandboxPolicy{}, fmt.Errorf("gacha catalog provenance missing") + } + raw, err = ReadResourceFile("resources/GachaSandboxPolicy.json") + if err != nil { + return nil, GachaSandboxPolicy{}, err + } + var policy GachaSandboxPolicy + if err = json.Unmarshal(raw, &policy); err != nil { + return nil, policy, err + } + if policy.Source == "" || len(policy.DrawCounts) == 0 || policy.ChargeCurrency || policy.DuplicateReward != "configured_first_eidolon_cost" { + return nil, policy, fmt.Errorf("unsupported gacha sandbox policy") + } + for _, n := range policy.DrawCounts { + if n == 0 { + return nil, policy, fmt.Errorf("invalid gacha draw count") + } + } + // The actual captured avatar-prefab basename identifies the pictured avatar. + // No banner-ID arithmetic or synthetic prefab paths are used. + avatarPrefab := regexp.MustCompile(`(?:^|/)AvatarGacha_([0-9]+)\.prefab$`) + verified := map[string]bool{} + for _, prefab := range policy.VerifiedBannerPrefabs { + verified[prefab] = true + } + var banners []FeaturedGachaBanner + seen := map[uint32]bool{} + for _, row := range catalog.Tables.Gacha { + match := avatarPrefab.FindStringSubmatch(row.Prefab) + if match == nil && featuredOnly { + continue + } + if !verified[row.Prefab] { + continue + } + var avatar uint64 + if match != nil { + avatar, err = strconv.ParseUint(match[1], 10, 32) + if err != nil || avatar == 0 { + return nil, policy, fmt.Errorf("invalid captured character banner") + } + } + if row.ID == 0 || seen[row.ID] { + return nil, policy, fmt.Errorf("invalid captured character banner") + } + banners = append(banners, FeaturedGachaBanner{ID: row.ID, AvatarID: uint32(avatar), SortID: row.SortID, Prefab: row.Prefab}) + seen[row.ID] = true + } + // An empty verified set intentionally disables entry instead of advertising + // missing prefabs and leaving the Client's UI transition incomplete. + sort.Slice(banners, func(i, j int) bool { return banners[i].SortID < banners[j].SortID }) + return banners, policy, nil +} + +// SandboxDrawPool reports whether the policy enables sandbox draws over the +// imported roster, and returns the drawable roster IDs (sorted). IDs are read +// from the live import, never embedded: every draw resolves to a duplicate +// grant on an avatar that actually exists in freesr-data.json. +func LoadSandboxDrawPool() (bool, []uint32, GachaSandboxPolicy, error) { + _, policy, err := LoadBrowsableGachaBanners() + if err != nil { + return false, nil, policy, err + } + pool := policy.SandboxDrawPool + if pool.Source != "imported_roster" || pool.FirstAcquisition != "reject" { + return false, nil, policy, nil + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return false, nil, policy, err + } + defer unlock() + raw, err := readResourceFile("freesr-data.json") + if err != nil { + return false, nil, policy, err + } + var root struct { + Avatars map[uint32]json.RawMessage `json:"avatars"` + } + if err = json.Unmarshal(raw, &root); err != nil { + return false, nil, policy, fmt.Errorf("invalid FreeSR import: %w", err) + } + ids := make([]uint32, 0, len(root.Avatars)) + for id := range root.Avatars { + if id != 0 { + ids = append(ids, id) + } + } + sort.Slice(ids, func(i, j int) bool { return ids[i] < ids[j] }) + return len(ids) > 0, ids, policy, nil +} + +// MappedGachaBanner is one entry of the custom per-character banner mapping +// (sandbox 900000+ namespace, generated from the imported roster). +type MappedGachaBanner struct { + GachaID uint32 `json:"gacha_id"` + AvatarID uint32 `json:"avatar_id"` + // nil accepts the original generated format. Explicit false reserves an + // old ID without offering a banner for an avatar absent from the import. + RosterAvailable *bool `json:"roster_available,omitempty"` +} + +// LoadGachaBannerMapping returns the generated per-character banner mapping. +// The mapping alone does not render anything in the Client: the custom +// presentation consumes it through DoGacha once its UI lands. +func LoadGachaBannerMapping() ([]MappedGachaBanner, error) { + raw, err := ReadResourceFile("resources/GachaBannerMapping.json") + if err != nil { + return nil, err + } + var doc struct { + Format uint32 `json:"format_version"` + Source string `json:"source"` + ClientAssembly string `json:"client_assembly_sha256"` + Banners []MappedGachaBanner `json:"banners"` + } + if err = json.Unmarshal(raw, &doc); err != nil { + return nil, err + } + if doc.Format != 1 || doc.Source == "" || !regexp.MustCompile(`^[0-9a-f]{64}$`).MatchString(doc.ClientAssembly) { + return nil, fmt.Errorf("gacha banner mapping provenance missing") + } + var captured struct { + Assembly string `json:"client_assembly_sha256"` + Tables struct { + Gacha []struct { + ID uint32 `json:"GachaID"` + } `json:"gacha"` + } `json:"tables"` + } + raw, err = ReadResourceFile("resources/PreviewGameplayCatalog.json") + if err != nil { + return nil, err + } + if err = json.Unmarshal(raw, &captured); err != nil { + return nil, err + } + if captured.Assembly != doc.ClientAssembly { + return nil, fmt.Errorf("gacha banner mapping/captured catalog identity mismatch") + } + capturedIDs := map[uint32]bool{} + for _, row := range captured.Tables.Gacha { + capturedIDs[row.ID] = true + } + seen := map[uint32]bool{} + seenAvatars := map[uint32]bool{} + active := make([]MappedGachaBanner, 0, len(doc.Banners)) + for _, b := range doc.Banners { + if b.GachaID < 900001 || b.AvatarID == 0 || seen[b.GachaID] || seenAvatars[b.AvatarID] || capturedIDs[b.GachaID] { + return nil, fmt.Errorf("invalid gacha banner mapping entry %d", b.GachaID) + } + seen[b.GachaID] = true + seenAvatars[b.AvatarID] = true + if b.RosterAvailable == nil || *b.RosterAvailable { + active = append(active, b) + } + } + return active, nil +} + +// Add only duplicate materials to the latest import. This never replaces the +// avatar, its rank/EX/Traces, the lineup, or unrelated inventory entries. +func GrantGachaDuplicate(avatarID uint32, additions, generatedBaseline map[uint32]uint32) (map[uint32]uint32, error) { + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return nil, err + } + defer unlock() + raw, err := readResourceFile("freesr-data.json") + if err != nil { + return nil, err + } + var root map[string]json.RawMessage + if err = json.Unmarshal(raw, &root); err != nil || root == nil { + return nil, fmt.Errorf("invalid FreeSR import") + } + var avatars map[uint32]json.RawMessage + if err = json.Unmarshal(root["avatars"], &avatars); err != nil { + return nil, err + } + if len(avatars[avatarID]) == 0 { + return nil, fmt.Errorf("banner avatar %d is absent from the imported roster", avatarID) + } + materials := map[uint32]uint32{} + if value, exists := root["materials"]; exists { + if err = json.Unmarshal(value, &materials); err != nil { + return nil, err + } + if materials == nil { + materials = map[uint32]uint32{} + } + } + updated := map[uint32]uint32{} + for id, count := range additions { + current, explicit := materials[id] + if !explicit { + current = generatedBaseline[id] + } + next := uint64(current) + uint64(count) + if id == 0 || next > uint64(^uint32(0)) { + return nil, fmt.Errorf("gacha material count overflow") + } + materials[id] = uint32(next) + updated[id] = uint32(next) + } + root["materials"], err = json.Marshal(materials) + if err != nil { + return nil, err + } + return updated, writeJSONAtomic("freesr-data.json", root) +} diff --git a/internal/common/gacha_catalog_test.go b/internal/common/gacha_catalog_test.go new file mode 100644 index 0000000..2f0a9b7 --- /dev/null +++ b/internal/common/gacha_catalog_test.go @@ -0,0 +1,99 @@ +package common + +import ( + "encoding/json" + "os" + "path/filepath" + "testing" +) + +func TestFeaturedGachaUsesCapturedBannerAndPreservesProgression(t *testing.T) { + catalog, err := os.ReadFile(filepath.Join("..", "..", "resources", "PreviewGameplayCatalog.json")) + if err != nil { + t.Fatal(err) + } + policy, err := os.ReadFile(filepath.Join("..", "..", "resources", "GachaSandboxPolicy.json")) + if err != nil { + t.Fatal(err) + } + // This store test supplies its own asset verification; production must not + // infer installed bundle availability from the captured flat table. + var fixtureCatalog struct { + Tables struct { + Gacha []struct { + Prefab string `json:"PrefabPath"` + } `json:"gacha"` + } `json:"tables"` + } + if err = json.Unmarshal(catalog, &fixtureCatalog); err != nil { + t.Fatal(err) + } + var fixturePolicy GachaSandboxPolicy + if err = json.Unmarshal(policy, &fixturePolicy); err != nil { + t.Fatal(err) + } + for _, row := range fixtureCatalog.Tables.Gacha { + fixturePolicy.VerifiedBannerPrefabs = append(fixturePolicy.VerifiedBannerPrefabs, row.Prefab) + } + policy, err = json.Marshal(fixturePolicy) + if err != nil { + t.Fatal(err) + } + t.Chdir(t.TempDir()) + if err = os.Mkdir("resources", 0755); err != nil { + t.Fatal(err) + } + if err = os.WriteFile(filepath.Join("resources", "PreviewGameplayCatalog.json"), catalog, 0644); err != nil { + t.Fatal(err) + } + if err = os.WriteFile(filepath.Join("resources", "GachaSandboxPolicy.json"), policy, 0644); err != nil { + t.Fatal(err) + } + banners, _, err := LoadFeaturedGachaBanners() + if err != nil || len(banners) == 0 { + t.Fatalf("catalog: %v", err) + } + avatar := banners[0].AvatarID + initial := map[string]any{"avatars": map[uint32]any{avatar: map[string]any{"avatar_id": avatar, "data": map[string]any{"rank": 6, "skills": map[string]uint32{"preserve": 1}}, "ex_rank_unlocked": false}}, "materials": map[uint32]uint32{2: 73}, "unrelated": "preserve"} + raw, err := json.Marshal(initial) + if err != nil { + t.Fatal(err) + } + if err = os.WriteFile("freesr-data.json", raw, 0644); err != nil { + t.Fatal(err) + } + // Fixture material identity is a store key, not an invented production grant. + const material = uint32(77) + result, err := GrantGachaDuplicate(avatar, map[uint32]uint32{material: 10}, map[uint32]uint32{material: 6}) + if err != nil || result[material] != 16 { + t.Fatalf("generated baseline grant: %v %v", result, err) + } + result, err = GrantGachaDuplicate(avatar, map[uint32]uint32{material: 1}, map[uint32]uint32{material: 6}) + if err != nil || result[material] != 17 { + t.Fatalf("latest override grant: %v %v", result, err) + } + saved, err := os.ReadFile("freesr-data.json") + if err != nil { + t.Fatal(err) + } + var before, after map[string]json.RawMessage + json.Unmarshal(raw, &before) + json.Unmarshal(saved, &after) + for _, key := range []string{"avatars", "unrelated"} { + var a, b any + json.Unmarshal(before[key], &a) + json.Unmarshal(after[key], &b) + x, _ := json.Marshal(a) + y, _ := json.Marshal(b) + if string(x) != string(y) { + t.Fatalf("changed %s", key) + } + } + if _, err = GrantGachaDuplicate(avatar, map[uint32]uint32{material: ^uint32(0)}, nil); err == nil { + t.Fatal("accepted overflow") + } + current, _ := os.ReadFile("freesr-data.json") + if string(current) != string(saved) { + t.Fatal("failed grant changed import") + } +} diff --git a/internal/common/inventory_material_patch.go b/internal/common/inventory_material_patch.go new file mode 100644 index 0000000..83e3ab9 --- /dev/null +++ b/internal/common/inventory_material_patch.go @@ -0,0 +1,52 @@ +package common + +import ( + "encoding/json" + "fmt" +) + +// nil resets an override. Merge only the edited item keys, so a simultaneous +// game-side gacha grant cannot be erased by an SDK inventory edit. +func PatchMaterialOverrides(updates map[uint32]*uint32) (map[uint32]uint32, error) { + for id := range updates { + if id == 0 { + return nil, fmt.Errorf("invalid material ID") + } + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return nil, err + } + defer unlock() + raw, err := readResourceFile("freesr-data.json") + if err != nil { + return nil, err + } + var root map[string]json.RawMessage + if err = json.Unmarshal(raw, &root); err != nil || root == nil { + return nil, fmt.Errorf("invalid FreeSR import") + } + materials := map[uint32]uint32{} + if value, exists := root["materials"]; exists { + if err = json.Unmarshal(value, &materials); err != nil { + return nil, err + } + if materials == nil { + materials = map[uint32]uint32{} + } + } + for id, count := range updates { + if count == nil { + delete(materials, id) + } else { + materials[id] = *count + } + } + root["materials"], err = json.Marshal(materials) + if err != nil { + return nil, err + } + return materials, writeJSONAtomic("freesr-data.json", root) +} diff --git a/internal/common/limited_gacha.go b/internal/common/limited_gacha.go new file mode 100644 index 0000000..c5338d5 --- /dev/null +++ b/internal/common/limited_gacha.go @@ -0,0 +1,410 @@ +package common + +import ( + "bytes" + "crypto/rand" + "encoding/json" + "fmt" + "math/big" + "regexp" + "sort" +) + +// These are configurable sandbox rules, not captured Client probabilities. +type LimitedGachaRules struct { + Source string `json:"source"` + RateScale uint32 `json:"rate_scale"` + FiveStarRate uint32 `json:"five_star_rate"` + FourStarRate uint32 `json:"four_star_rate"` + FiveStarPity uint32 `json:"five_star_pity"` + FourStarPity uint32 `json:"four_star_pity"` +} +type LimitedGachaBanner struct { + MappedGachaBanner + FourStarIDs []uint32 `json:"four_star_ids"` +} + +// Counters count consecutive draws without the corresponding rarity or better. +// All mapped limited character banners share this state. +type LimitedGachaPity struct { + SinceFiveStar uint32 `json:"since_five_star"` + SinceFourStar uint32 `json:"since_four_star"` + TotalDraws uint64 `json:"total_draws"` +} + +func (r LimitedGachaRules) validate() error { + if r.Source == "" || r.RateScale == 0 || uint64(r.FiveStarRate)+uint64(r.FourStarRate) > uint64(r.RateScale) || r.FiveStarPity < 1 || r.FourStarPity < 1 || r.FourStarPity > r.FiveStarPity { + return fmt.Errorf("invalid limited gacha sandbox rules") + } + return nil +} + +// Four-star rotations are generated sandbox lineups, not official rate-up lists. +// IDs and rarity come from mapping + AvatarConfig; IDs are never rarity heuristics. +func LoadLimitedGachaBanners() ([]LimitedGachaBanner, LimitedGachaRules, error) { + _, roster, policy, err := LoadSandboxDrawPool() + if err != nil { + return nil, policy.LimitedRules, err + } + rules := policy.LimitedRules + if err = rules.validate(); err != nil { + return nil, rules, err + } + mapped, err := LoadGachaBannerMapping() + if err != nil { + return nil, rules, err + } + raw, err := ReadResourceFile("resources/AvatarConfig.json") + if err != nil { + return nil, rules, err + } + var doc struct { + Avatars []struct { + ID uint32 `json:"AvatarID"` + Rarity string + } `json:"avatar_config"` + } + if err = json.Unmarshal(raw, &doc); err != nil { + return nil, rules, err + } + rarity := map[uint32]string{} + for _, a := range doc.Avatars { + if a.ID == 0 || rarity[a.ID] != "" { + return nil, rules, fmt.Errorf("invalid avatar rarity catalog") + } + rarity[a.ID] = a.Rarity + } + owned := map[uint32]bool{} + for _, id := range roster { + owned[id] = true + } + var four []uint32 + for _, b := range mapped { + if owned[b.AvatarID] && rarity[b.AvatarID] == "CombatPowerAvatarRarityType4" { + four = append(four, b.AvatarID) + } + } + sort.Slice(four, func(i, j int) bool { return four[i] < four[j] }) + if len(four) < 3 { + return nil, rules, fmt.Errorf("limited gacha needs three imported mapped four-star avatars") + } + var banners []LimitedGachaBanner + for _, b := range mapped { + if !owned[b.AvatarID] { + continue + } + switch rarity[b.AvatarID] { + case "CombatPowerAvatarRarityType4": + continue // Stable mapping ID remains reserved. + case "CombatPowerAvatarRarityType5": + start := len(banners) % len(four) + banners = append(banners, LimitedGachaBanner{MappedGachaBanner: b, FourStarIDs: []uint32{four[start], four[(start+1)%len(four)], four[(start+2)%len(four)]}}) + default: + return nil, rules, fmt.Errorf("unknown mapped avatar rarity %d", b.AvatarID) + } + } + return banners, rules, nil +} +func readLimitedRoot() (map[string]json.RawMessage, error) { + raw, err := readResourceFile("freesr-data.json") + if err != nil { + return nil, err + } + var root map[string]json.RawMessage + if err = json.Unmarshal(raw, &root); err != nil || root == nil { + return nil, fmt.Errorf("invalid FreeSR import") + } + return root, nil +} +func decodeLimitedPity(root map[string]json.RawMessage) (LimitedGachaPity, error) { + var p LimitedGachaPity + if raw, ok := root["gacha_limited"]; ok { + if bytes.Equal(bytes.TrimSpace(raw), []byte("null")) { + return p, fmt.Errorf("invalid limited pity state") + } + if err := json.Unmarshal(raw, &p); err != nil { + return p, err + } + } + return p, nil +} + +// Read-only: absent state is reported as zero without writing a save file. +func ReadLimitedGachaPity() (LimitedGachaPity, error) { + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return LimitedGachaPity{}, err + } + defer unlock() + root, err := readLimitedRoot() + if err != nil { + return LimitedGachaPity{}, err + } + return decodeLimitedPity(root) +} + +type LimitedGachaReward struct { + ItemID, Rarity uint32 + Lightcone *Lightcone + Materials map[uint32]uint32 +} +type LimitedGachaResult struct { + Rewards []LimitedGachaReward + Materials map[uint32]uint32 + Pity LimitedGachaPity +} + +func limitedThreeStarPool() ([]uint32, error) { + raw, err := ReadResourceFile("resources/GachaLootCatalog.json") + if err != nil { + return nil, err + } + var doc struct { + Format uint32 `json:"format_version"` + Assembly string `json:"client_assembly_sha256"` + Source string + Capture string `json:"capture_sha256"` + Lightcones []struct{ ID, Rarity uint32 } + } + if err = json.Unmarshal(raw, &doc); err != nil { + return nil, err + } + raw, err = ReadResourceFile("resources/PreviewGameplayCatalog.json") + if err != nil { + return nil, err + } + var preview struct { + Assembly string `json:"client_assembly_sha256"` + } + if err = json.Unmarshal(raw, &preview); err != nil { + return nil, err + } + hashPattern := regexp.MustCompile(`^[0-9a-f]{64}$`) + if doc.Format != 1 || doc.Source == "" || !hashPattern.MatchString(doc.Capture) || !hashPattern.MatchString(doc.Assembly) || doc.Assembly != preview.Assembly { + return nil, fmt.Errorf("limited loot catalog provenance mismatch") + } + seen := map[uint32]bool{} + var ids []uint32 + for _, row := range doc.Lightcones { + if row.ID == 0 || seen[row.ID] || row.Rarity < 3 || row.Rarity > 5 { + return nil, fmt.Errorf("invalid captured Light Cone rarity") + } + seen[row.ID] = true + if row.Rarity == 3 { + ids = append(ids, row.ID) + } + } + if len(ids) == 0 { + return nil, fmt.Errorf("no verified three-star Light Cones") + } + return ids, nil +} + +// DrawLimitedGacha atomically commits rewards and pity in the same latest-root +// merge. Validation completes before any RNG; errors never grant partial rewards. +func DrawLimitedGacha(bannerID, count uint32, costs map[uint32]map[uint32]uint32, baseline map[uint32]uint32) (LimitedGachaResult, error) { + result := LimitedGachaResult{} + banners, rules, err := LoadLimitedGachaBanners() + if err != nil { + return result, err + } + var banner *LimitedGachaBanner + for i := range banners { + if banners[i].GachaID == bannerID { + banner = &banners[i] + break + } + } + if banner == nil { + return result, fmt.Errorf("inactive limited banner") + } + _, policy, err := LoadBrowsableGachaBanners() + if err != nil { + return result, err + } + allowed := false + for _, n := range policy.DrawCounts { + allowed = allowed || n == count + } + if !allowed { + return result, fmt.Errorf("invalid limited draw count") + } + pool, err := limitedThreeStarPool() + if err != nil { + return result, err + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return result, err + } + defer unlock() + root, err := readLimitedRoot() + if err != nil { + return result, err + } + pity, err := decodeLimitedPity(root) + if err != nil { + return result, err + } + if pity.SinceFiveStar >= rules.FiveStarPity || pity.SinceFourStar >= rules.FourStarPity || ^uint64(0)-pity.TotalDraws < uint64(count) { + return result, fmt.Errorf("invalid or overflowing limited pity") + } + var avatars map[uint32]json.RawMessage + if err = json.Unmarshal(root["avatars"], &avatars); err != nil { + return result, err + } + materials := map[uint32]uint32{} + if raw, ok := root["materials"]; ok { + if err = json.Unmarshal(raw, &materials); err != nil { + return result, err + } + } + if materials == nil { + materials = map[uint32]uint32{} + } + var cones []json.RawMessage + var maxUID uint32 + if raw, ok := root["lightcones"]; ok { + if err = json.Unmarshal(raw, &cones); err != nil { + return result, err + } + } + for _, raw := range cones { + var c Lightcone + if err = json.Unmarshal(raw, &c); err != nil { + return result, err + } + if c.InternalUID > maxUID { + maxUID = c.InternalUID + } + } + // UniqueID adds an inventory namespace offset. Derive it from that method. + zero := Lightcone{} + offset := zero.UniqueID() + if uint64(maxUID)+uint64(count)+uint64(offset) > uint64(^uint32(0)) { + return result, fmt.Errorf("Light Cone UniqueID overflow") + } + required := append([]uint32{banner.AvatarID}, banner.FourStarIDs...) + maxCosts := map[uint32]uint32{} + for _, id := range required { + if len(avatars[id]) == 0 || string(avatars[id]) == "null" || len(costs[id]) == 0 { + return result, fmt.Errorf("missing imported avatar or duplicate cost %d", id) + } + for item, amount := range costs[id] { + if item == 0 || amount == 0 { + return result, fmt.Errorf("invalid duplicate cost") + } + if amount > maxCosts[item] { + maxCosts[item] = amount + } + } + } + for item, amount := range maxCosts { + current, ok := materials[item] + if !ok { + current = baseline[item] + } + if uint64(current)+uint64(amount)*uint64(count) > uint64(^uint32(0)) { + return result, fmt.Errorf("gacha material overflow") + } + } + pick := func(n uint32) (uint32, error) { + v, e := rand.Int(rand.Reader, new(big.Int).SetUint64(uint64(n))) + if e != nil { + return 0, e + } + return uint32(v.Uint64()), nil + } + result.Materials = map[uint32]uint32{} + for i := uint32(0); i < count; i++ { + roll, e := pick(rules.RateScale) + if e != nil { + return LimitedGachaResult{}, e + } + rarity := uint32(3) + if pity.SinceFiveStar == rules.FiveStarPity-1 || roll < rules.FiveStarRate { + rarity = 5 + } else if pity.SinceFourStar == rules.FourStarPity-1 || roll < rules.FiveStarRate+rules.FourStarRate { + rarity = 4 + } + reward := LimitedGachaReward{Rarity: rarity} + if rarity == 5 { + reward.ItemID = banner.AvatarID + } else if rarity == 4 { + n, e := pick(uint32(len(banner.FourStarIDs))) + if e != nil { + return LimitedGachaResult{}, e + } + reward.ItemID = banner.FourStarIDs[n] + } else { + n, e := pick(uint32(len(pool))) + if e != nil { + return LimitedGachaResult{}, e + } + reward.ItemID = pool[n] + maxUID++ + c := Lightcone{ItemID: reward.ItemID, InternalUID: maxUID, Level: 1, Rank: 1} + reward.Lightcone = &c + raw, e := json.Marshal(c) + if e != nil { + return LimitedGachaResult{}, e + } + cones = append(cones, raw) + } + if rarity >= 4 { + reward.Materials = costs[reward.ItemID] + for item, amount := range reward.Materials { + current, ok := materials[item] + if !ok { + current = baseline[item] + } + materials[item] = current + amount + result.Materials[item] = materials[item] + } + } + pity.TotalDraws++ + pity.SinceFiveStar++ + pity.SinceFourStar++ + if rarity == 5 { + pity.SinceFiveStar = 0 + } + if rarity >= 4 { + pity.SinceFourStar = 0 + } + result.Rewards = append(result.Rewards, reward) + } + // Preserve unknown pity keys just as the surrounding root and cone rows are preserved. + state := map[string]json.RawMessage{} + if raw, ok := root["gacha_limited"]; ok { + if err = json.Unmarshal(raw, &state); err != nil { + return LimitedGachaResult{}, err + } + } + for key, value := range map[string]interface{}{"since_five_star": pity.SinceFiveStar, "since_four_star": pity.SinceFourStar, "total_draws": pity.TotalDraws} { + state[key], err = json.Marshal(value) + if err != nil { + return LimitedGachaResult{}, err + } + } + root["gacha_limited"], err = json.Marshal(state) + if err != nil { + return LimitedGachaResult{}, err + } + root["materials"], err = json.Marshal(materials) + if err != nil { + return LimitedGachaResult{}, err + } + root["lightcones"], err = json.Marshal(cones) + if err != nil { + return LimitedGachaResult{}, err + } + if err = writeJSONAtomic("freesr-data.json", root); err != nil { + return LimitedGachaResult{}, err + } + result.Pity = pity + return result, nil +} diff --git a/internal/common/models.go b/internal/common/models.go index 6c27b8b..b2da08a 100644 --- a/internal/common/models.go +++ b/internal/common/models.go @@ -478,16 +478,9 @@ func LoadFreesrData() (*FreesrData, error) { data.DressedSkins = map[uint32]uint32{} } - // remove unequipped lightcones / relics (keeps huge FreeSR dumps usable) - if len(data.Lightcones) > 1500 { - kept := data.Lightcones[:0] - for _, v := range data.Lightcones { - if v.EquipAvatar != 0 { - kept = append(kept, v) - } - } - data.Lightcones = kept - } + // Preserve every Light Cone copy, including unequipped gacha rewards. + // Dropping by inventory size would hide legitimately granted copies on login. + // Keep the existing relic-only import reduction separate. if len(data.Relics) > 3000 { kept := data.Relics[:0] for _, v := range data.Relics { diff --git a/internal/common/monster_settings_catalog.go b/internal/common/monster_settings_catalog.go new file mode 100644 index 0000000..33b5c37 --- /dev/null +++ b/internal/common/monster_settings_catalog.go @@ -0,0 +1,279 @@ +package common + +import ( + "encoding/json" + "fmt" + "slices" + "sort" + "strconv" +) + +// MonsterSettingsCatalog is a read-only preview of challenge stages plus the +// resource-backed ID/level suggestions used by the Custom Enemy editor. +type MonsterSettingsCatalog struct { + Modes map[string][]MonsterSettingsGroup `json:"modes"` + MonsterIDs []uint32 `json:"monster_ids"` + Monsters map[uint32]MonsterSettingsMonsterMetadata `json:"monsters"` + Levels []uint32 `json:"levels"` + Sources []string `json:"sources"` +} + +type MonsterSettingsGroup struct { + ID uint32 `json:"id"` + Names map[string]string `json:"names,omitempty"` + Stages []MonsterSettingsEncounter `json:"stages"` +} + +type MonsterSettingsEncounter struct { + ID uint32 `json:"id"` + IsBoss bool `json:"is_boss,omitempty"` + DefaultBuffID uint32 `json:"default_buff_id,omitempty"` + MonsterIDs []uint32 `json:"monster_ids,omitempty"` + Battles []MonsterSettingsBattle `json:"battles"` +} + +type MonsterSettingsMonsterMetadata struct { + Names map[string]string `json:"names"` + IconURL string `json:"icon_url,omitempty"` +} + +type MonsterSettingsBattle struct { + StageID uint32 `json:"stage_id"` + Level uint32 `json:"level"` + Waves [][]uint32 `json:"waves"` +} + +type monsterSettingStageData struct { + Level uint32 `json:"level"` + Monsters [][]uint32 `json:"monsters"` +} + +type monsterSettingsAccumulator struct { + groups map[uint32]map[uint32]*MonsterSettingsEncounter +} + +// LoadMonsterSettingsCatalog uses the same installed challenge and stage +// resources as the game-server battle handlers. It never supplies a battle +// override; custom waves are separately restricted to Client Calyx rows. +func LoadMonsterSettingsCatalog() (MonsterSettingsCatalog, error) { + challengeRaw, err := ReadResourceFile("challenge_data.json") + if err != nil { + return MonsterSettingsCatalog{}, fmt.Errorf("read challenge catalog: %w", err) + } + stageRaw, err := ReadResourceFile("resources/StageConfig.json") + if err != nil { + return MonsterSettingsCatalog{}, fmt.Errorf("read Client stage catalog: %w", err) + } + + var challenges struct { + Challenges map[string]struct { + GroupID uint32 `json:"groupId"` + Monster1 uint32 `json:"monster1"` + Monster2 uint32 `json:"monster2"` + Event1 uint32 `json:"event1"` + Event2 uint32 `json:"event2"` + } `json:"challenges"` + Tierce map[string]struct { + Group uint32 `json:"group"` + Event uint32 `json:"event"` + } `json:"tierce"` + Stages map[string]monsterSettingStageData `json:"stages"` + Peak struct { + Stages map[string]struct { + EventID uint32 `json:"event_id"` + HardEventID uint32 `json:"hard_event_id"` + MonsterID uint32 `json:"monster_id"` + DefaultBuff uint32 `json:"default_buff"` + IsBoss bool `json:"is_boss"` + } `json:"stages"` + Groups map[string]struct { + PreLevelIDs []uint32 `json:"pre_level_ids"` + BossLevelID uint32 `json:"boss_level_id"` + } `json:"groups"` + } `json:"peak"` + } + if err := json.Unmarshal(challengeRaw, &challenges); err != nil { + return MonsterSettingsCatalog{}, fmt.Errorf("decode challenge catalog: %w", err) + } + var stageTable struct { + Entries []struct { + StageID uint32 `json:"StageID"` + Level uint32 `json:"Level"` + MonsterList [][]uint32 `json:"MonsterList"` + } `json:"stage_config"` + } + if err := json.Unmarshal(stageRaw, &stageTable); err != nil { + return MonsterSettingsCatalog{}, fmt.Errorf("decode Client stage catalog: %w", err) + } + stageByID := make(map[uint32]monsterSettingStageData, len(stageTable.Entries)) + monsterSet := map[uint32]struct{}{} + levelSet := map[uint32]struct{}{} + for _, row := range stageTable.Entries { + stageByID[row.StageID] = monsterSettingStageData{Level: row.Level, Monsters: row.MonsterList} + if row.Level != 0 { + levelSet[row.Level] = struct{}{} + } + for _, wave := range row.MonsterList { + for _, id := range wave { + if id != 0 { + monsterSet[id] = struct{}{} + } + } + } + } + if len(stageByID) == 0 { + return MonsterSettingsCatalog{}, fmt.Errorf("Client StageConfig has no stage rows") + } + + acc := map[string]*monsterSettingsAccumulator{ + "moc": {groups: map[uint32]map[uint32]*MonsterSettingsEncounter{}}, + "pf": {groups: map[uint32]map[uint32]*MonsterSettingsEncounter{}}, + "as": {groups: map[uint32]map[uint32]*MonsterSettingsEncounter{}}, + "aa": {groups: map[uint32]map[uint32]*MonsterSettingsEncounter{}}, + } + addBattle := func(entry *MonsterSettingsEncounter, eventID uint32) { + stage, ok := stageByID[eventID] + if !ok || len(stage.Monsters) == 0 { + return + } + for _, existing := range entry.Battles { + if existing.StageID == eventID { + return + } + } + entry.Battles = append(entry.Battles, MonsterSettingsBattle{StageID: eventID, Level: stage.Level, Waves: stage.Monsters}) + } + addEntry := func(mode string, groupID uint32, entryID uint32, monsterIDs []uint32, events ...uint32) { + bucket, ok := acc[mode] + if !ok { + return + } + if bucket.groups[groupID] == nil { + bucket.groups[groupID] = map[uint32]*MonsterSettingsEncounter{} + } + entry := bucket.groups[groupID][entryID] + if entry == nil { + entry = &MonsterSettingsEncounter{ID: entryID} + bucket.groups[groupID][entryID] = entry + } + for _, monsterID := range monsterIDs { + if monsterID == 0 || slices.Contains(entry.MonsterIDs, monsterID) { + continue + } + entry.MonsterIDs = append(entry.MonsterIDs, monsterID) + } + for _, eventID := range events { + if eventID != 0 { + addBattle(entry, eventID) + } + } + } + modeForChallengeID := func(id uint32) string { + // These are the same challenge-ID namespaces used by + // setChallengeBattleConfigWithLimit in the game server. + switch { + case id >= 30000: + return "as" + case id >= 20000: + return "pf" + default: + return "moc" + } + } + for rawID, row := range challenges.Challenges { + id64, err := strconv.ParseUint(rawID, 10, 32) + if err != nil || id64 == 0 { + continue + } + addEntry(modeForChallengeID(uint32(id64)), row.GroupID, uint32(id64), []uint32{row.Monster1, row.Monster2}, row.Event1, row.Event2) + } + for rawID, row := range challenges.Tierce { + id64, err := strconv.ParseUint(rawID, 10, 32) + if err != nil || id64 == 0 { + continue + } + addEntry(modeForChallengeID(uint32(id64)), row.Group, uint32(id64), nil, row.Event) + } + + peakGroupForStage := map[uint32]uint32{} + for rawGroupID, group := range challenges.Peak.Groups { + groupID64, err := strconv.ParseUint(rawGroupID, 10, 32) + if err != nil { + continue + } + groupID := uint32(groupID64) + for _, stageID := range group.PreLevelIDs { + peakGroupForStage[stageID] = groupID + } + if group.BossLevelID != 0 { + peakGroupForStage[group.BossLevelID] = groupID + } + } + for rawStageID, row := range challenges.Peak.Stages { + stageID64, err := strconv.ParseUint(rawStageID, 10, 32) + if err != nil || stageID64 == 0 { + continue + } + stageID := uint32(stageID64) + groupID := peakGroupForStage[stageID] + if groupID == 0 { + continue + } + bucket := acc["aa"].groups + if bucket[groupID] == nil { + bucket[groupID] = map[uint32]*MonsterSettingsEncounter{} + } + entry := &MonsterSettingsEncounter{ID: stageID, IsBoss: row.IsBoss, DefaultBuffID: row.DefaultBuff, MonsterIDs: []uint32{row.MonsterID}} + addBattle(entry, row.EventID) + addBattle(entry, row.HardEventID) + if len(entry.Battles) != 0 { + bucket[groupID][stageID] = entry + } + } + + result := MonsterSettingsCatalog{ + Modes: map[string][]MonsterSettingsGroup{}, + Sources: []string{"challenge_data.json", "resources/StageConfig.json"}, + } + for _, mode := range []string{"moc", "pf", "as", "aa"} { + for groupID, stages := range acc[mode].groups { + group := MonsterSettingsGroup{ID: groupID} + for _, stage := range stages { + if len(stage.Battles) == 0 { + continue + } + sort.Slice(stage.Battles, func(i, j int) bool { return stage.Battles[i].StageID < stage.Battles[j].StageID }) + if len(stage.MonsterIDs) == 0 { + for _, wave := range stage.Battles[0].Waves { + for _, monsterID := range wave { + if monsterID != 0 && !slices.Contains(stage.MonsterIDs, monsterID) { + stage.MonsterIDs = append(stage.MonsterIDs, monsterID) + if len(stage.MonsterIDs) == 2 { + break + } + } + } + if len(stage.MonsterIDs) == 2 { + break + } + } + } + group.Stages = append(group.Stages, *stage) + } + if len(group.Stages) != 0 { + sort.Slice(group.Stages, func(i, j int) bool { return group.Stages[i].ID < group.Stages[j].ID }) + result.Modes[mode] = append(result.Modes[mode], group) + } + } + sort.Slice(result.Modes[mode], func(i, j int) bool { return result.Modes[mode][i].ID < result.Modes[mode][j].ID }) + } + for id := range monsterSet { + result.MonsterIDs = append(result.MonsterIDs, id) + } + for level := range levelSet { + result.Levels = append(result.Levels, level) + } + sort.Slice(result.MonsterIDs, func(i, j int) bool { return result.MonsterIDs[i] < result.MonsterIDs[j] }) + sort.Slice(result.Levels, func(i, j int) bool { return result.Levels[i] < result.Levels[j] }) + return result, nil +} diff --git a/internal/common/nanoka_monster_metadata.go b/internal/common/nanoka_monster_metadata.go new file mode 100644 index 0000000..78105f1 --- /dev/null +++ b/internal/common/nanoka_monster_metadata.go @@ -0,0 +1,249 @@ +package common + +import ( + "encoding/json" + "fmt" + stdhtml "html" + "io" + "net/http" + "net/url" + "path" + "regexp" + "sort" + "strconv" + "strings" + "sync" + "time" +) + +const nanokaHSRStaticBaseURL = "https://static.nanoka.cc/hsr" + +var nanokaVersionPattern = regexp.MustCompile(`^[0-9]+\.[0-9]+(?:\.[0-9]+)?$`) +var nanokaMarkupTagPattern = regexp.MustCompile(`<[^>]*>`) + +type NanokaMonsterMetadata struct { + Version string + Monsters map[uint32]MonsterSettingsMonsterMetadata + Groups map[uint32]map[string]string +} + +type nanokaLocalizedRecord struct { + English string `json:"en"` + Chinese string `json:"zh"` + Japanese string `json:"ja"` + Korean string `json:"ko"` + Icon string `json:"icon"` + ImagePath string `json:"image_path"` + Child []uint32 `json:"child"` +} + +type nanokaMetadataCacheEntry struct { + metadata NanokaMonsterMetadata + fetched time.Time +} + +var nanokaMetadataCache = struct { + sync.Mutex + entries map[string]nanokaMetadataCacheEntry +}{entries: map[string]nanokaMetadataCacheEntry{}} + +// LoadNanokaMonsterMetadata refreshes localized names and monster artwork for +// the exact Client version configured by the server. It never falls forward to +// Nanoka's latest version, which could disagree with the installed resources. +func LoadNanokaMonsterMetadata(clientVersion string) (NanokaMonsterMetadata, error) { + version := strings.TrimSpace(clientVersion) + if !nanokaVersionPattern.MatchString(version) { + return NanokaMonsterMetadata{}, fmt.Errorf("invalid Client version for Nanoka metadata: %q", clientVersion) + } + + nanokaMetadataCache.Lock() + defer nanokaMetadataCache.Unlock() + if cached, ok := nanokaMetadataCache.entries[version]; ok && time.Since(cached.fetched) < time.Hour { + return cached.metadata, nil + } + + metadata, err := fetchNanokaMonsterMetadata(version) + if err != nil { + if cached, ok := nanokaMetadataCache.entries[version]; ok { + return cached.metadata, nil + } + return NanokaMonsterMetadata{}, err + } + nanokaMetadataCache.entries[version] = nanokaMetadataCacheEntry{metadata: metadata, fetched: time.Now()} + return metadata, nil +} + +func fetchNanokaMonsterMetadata(version string) (NanokaMonsterMetadata, error) { + versionPath := url.PathEscape(version) + baseURL := nanokaHSRStaticBaseURL + "/" + versionPath + "/" + type result struct { + endpoint string + rows map[string]json.RawMessage + err error + } + endpoints := []string{"monster.json", "maze.json", "maze_extra.json", "maze_peak.json"} + results := make(chan result, len(endpoints)) + client := &http.Client{Timeout: 8 * time.Second} + for _, endpoint := range endpoints { + go func(endpoint string) { + rows, err := fetchNanokaRows(client, baseURL+endpoint) + results <- result{endpoint: endpoint, rows: rows, err: err} + }(endpoint) + } + + metadata := NanokaMonsterMetadata{ + Version: version, + Monsters: map[uint32]MonsterSettingsMonsterMetadata{}, + Groups: map[uint32]map[string]string{}, + } + var monsterErr error + for range endpoints { + res := <-results + if res.err != nil { + if res.endpoint == "monster.json" { + monsterErr = res.err + } + continue + } + switch res.endpoint { + case "monster.json": + for rawID, raw := range res.rows { + var record nanokaLocalizedRecord + if err := json.Unmarshal(raw, &record); err != nil { + continue + } + id, err := parsePositiveUint32(rawID) + if err != nil { + continue + } + names := nanokaLocalizedNames(record) + iconURL := nanokaMonsterIconURL(record.Icon) + if iconURL == "" { + iconURL = nanokaMonsterIconURL(record.ImagePath) + } + if len(names) > 0 || iconURL != "" { + metadata.Monsters[id] = MonsterSettingsMonsterMetadata{Names: names, IconURL: iconURL} + for _, childID := range record.Child { + if childID == 0 { + continue + } + if _, exists := metadata.Monsters[childID]; !exists { + metadata.Monsters[childID] = MonsterSettingsMonsterMetadata{Names: names, IconURL: iconURL} + } + } + } + } + case "maze.json", "maze_extra.json", "maze_peak.json": + for rawID, raw := range res.rows { + id, err := parsePositiveUint32(rawID) + if err != nil { + continue + } + var record nanokaLocalizedRecord + if err := json.Unmarshal(raw, &record); err != nil { + continue + } + names := nanokaLocalizedNames(record) + if len(names) > 0 { + metadata.Groups[id] = names + } + } + } + } + if monsterErr != nil { + return NanokaMonsterMetadata{}, fmt.Errorf("read Nanoka monster data for Client %s: %w", version, monsterErr) + } + if len(metadata.Monsters) == 0 { + return NanokaMonsterMetadata{}, fmt.Errorf("Nanoka returned no monster metadata for Client %s", version) + } + return metadata, nil +} + +func fetchNanokaRows(client *http.Client, endpointURL string) (map[string]json.RawMessage, error) { + request, err := http.NewRequest(http.MethodGet, endpointURL, nil) + if err != nil { + return nil, err + } + request.Header.Set("Accept", "application/json") + response, err := client.Do(request) + if err != nil { + return nil, err + } + defer response.Body.Close() + if response.StatusCode != http.StatusOK { + _, _ = io.Copy(io.Discard, io.LimitReader(response.Body, 4096)) + return nil, fmt.Errorf("Nanoka returned HTTP %d for %s", response.StatusCode, path.Base(endpointURL)) + } + var rows map[string]json.RawMessage + if err := json.NewDecoder(io.LimitReader(response.Body, 32<<20)).Decode(&rows); err != nil { + return nil, fmt.Errorf("decode Nanoka %s: %w", path.Base(endpointURL), err) + } + return rows, nil +} + +func nanokaLocalizedNames(record nanokaLocalizedRecord) map[string]string { + names := map[string]string{} + for locale, name := range map[string]string{ + "en": record.English, "zh": record.Chinese, "ja": record.Japanese, "ko": record.Korean, + } { + name = nanokaDisplayName(name) + if name != "" { + names[locale] = name + } + } + return names +} + +func nanokaDisplayName(value string) string { + value = stdhtml.UnescapeString(value) + value = nanokaMarkupTagPattern.ReplaceAllString(value, " ") + return strings.Join(strings.Fields(value), " ") +} + +func nanokaMonsterIconURL(iconPath string) string { + iconPath = strings.ReplaceAll(strings.TrimSpace(iconPath), `\`, "/") + if !strings.Contains(iconPath, "/MonsterFigure/") { + return "" + } + filename := path.Base(iconPath) + if !strings.HasPrefix(filename, "Monster_") || !strings.HasSuffix(strings.ToLower(filename), ".png") { + return "" + } + filename = strings.TrimSuffix(filename, path.Ext(filename)) + ".webp" + return "https://static.nanoka.cc/assets/hsr/monsterfigure/" + url.PathEscape(filename) +} + +func (catalog *MonsterSettingsCatalog) ApplyNanokaMonsterMetadata(metadata NanokaMonsterMetadata) { + if catalog == nil || metadata.Version == "" { + return + } + catalog.Monsters = metadata.Monsters + allIDs := make(map[uint32]struct{}, len(catalog.MonsterIDs)+len(metadata.Monsters)) + for _, id := range catalog.MonsterIDs { + allIDs[id] = struct{}{} + } + for id := range metadata.Monsters { + allIDs[id] = struct{}{} + } + catalog.MonsterIDs = catalog.MonsterIDs[:0] + for id := range allIDs { + catalog.MonsterIDs = append(catalog.MonsterIDs, id) + } + sort.Slice(catalog.MonsterIDs, func(i, j int) bool { return catalog.MonsterIDs[i] < catalog.MonsterIDs[j] }) + for _, groups := range catalog.Modes { + for i := range groups { + if names, ok := metadata.Groups[groups[i].ID]; ok { + groups[i].Names = names + } + } + } + catalog.Sources = append(catalog.Sources, "Nanoka "+metadata.Version) +} + +func parsePositiveUint32(value string) (uint32, error) { + parsed, err := strconv.ParseUint(value, 10, 32) + if err != nil || parsed == 0 { + return 0, fmt.Errorf("invalid positive id %q", value) + } + return uint32(parsed), nil +} diff --git a/internal/common/persistent_patch.go b/internal/common/persistent_patch.go new file mode 100644 index 0000000..466695f --- /dev/null +++ b/internal/common/persistent_patch.go @@ -0,0 +1,34 @@ +package common + +import ( + "encoding/json" + "fmt" +) + +// Patch selected top-level fields against the latest file, under the same lock +// used by game saves. Raw JSON retains 64-bit scores and unknown save sections. +func PatchPersistentFields(patch map[string]json.RawMessage) error { + if patch == nil { + return fmt.Errorf("persistent patch must be a JSON object") + } + for _, raw := range patch { + if !json.Valid(raw) { + return fmt.Errorf("invalid persistent field JSON") + } + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return err + } + defer unlock() + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return err + } + for key, value := range patch { + root[key] = value + } + return writeJSONAtomic("persistent", root) +} diff --git a/internal/common/res.go b/internal/common/res.go index fc415c0..99ae1e1 100644 --- a/internal/common/res.go +++ b/internal/common/res.go @@ -4,9 +4,14 @@ import ( "encoding/json" "fmt" "os" + "path" "path/filepath" + "sort" + "strings" "sync" "time" + + "gac-hkrpg-go" ) // LogInfo prints a timestamped info line (kept dependency-free). @@ -162,7 +167,8 @@ type AnchorConfigFile struct { AnchorConfig []AnchorConfigEntry `json:"anchor_config"` } -// ReadResourceFile reads a resource file checking current directory and parent directories. +// ReadResourceFile reads editable files from the current directory and its +// parents, then falls back to bundled data in ship builds. func ReadResourceFile(paths ...string) ([]byte, error) { for _, p := range paths { for _, prefix := range []string{"", "..", "../..", "../../.."} { @@ -172,9 +178,59 @@ func ReadResourceFile(paths ...string) ([]byte, error) { } } } + for _, p := range paths { + name := path.Clean(strings.ReplaceAll(filepath.ToSlash(p), "\\", "/")) + if name == "." || name == ".." || strings.HasPrefix(name, "../") || strings.HasPrefix(name, "/") { + continue + } + if raw, err := runtimeassets.ReadFile(name); err == nil { + return raw, nil + } + } return nil, os.ErrNotExist } +type ClientLuaScript struct { + Name string + Data []byte +} + +// ClientLuaScripts combines maintained embedded scripts with operator-provided +// scripts. Files on disk override embedded files by name. +func ClientLuaScripts() []ClientLuaScript { + files := make(map[string][]byte) + if entries, err := runtimeassets.ReadDir("scripts"); err == nil { + for _, entry := range entries { + if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".lua") { + continue + } + if data, err := runtimeassets.ReadFile(path.Join("scripts", entry.Name())); err == nil { + files[entry.Name()] = data + } + } + } + if entries, err := os.ReadDir("scripts"); err == nil { + for _, entry := range entries { + if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".lua") { + continue + } + if data, err := os.ReadFile(filepath.Join("scripts", entry.Name())); err == nil { + files[entry.Name()] = data + } + } + } + names := make([]string, 0, len(files)) + for name := range files { + names = append(names, name) + } + sort.Strings(names) + result := make([]ClientLuaScript, 0, len(names)) + for _, name := range names { + result = append(result, ClientLuaScript{Name: name, Data: files[name]}) + } + return result +} + func readResourceFile(paths ...string) ([]byte, error) { return ReadResourceFile(paths...) } diff --git a/internal/common/runtime_assets_ship_test.go b/internal/common/runtime_assets_ship_test.go new file mode 100644 index 0000000..b2d468a --- /dev/null +++ b/internal/common/runtime_assets_ship_test.go @@ -0,0 +1,37 @@ +//go:build ship + +package common + +import ( + "os" + "testing" +) + +func TestBundledResourcesAndClientScriptsWorkWithoutExternalFolders(t *testing.T) { + workingDirectory, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + if err := os.Chdir(t.TempDir()); err != nil { + t.Fatal(err) + } + t.Cleanup(func() { + if err := os.Chdir(workingDirectory); err != nil { + t.Errorf("restore working directory: %v", err) + } + }) + + resource, err := ReadResourceFile("resources/TechniqueRules.json") + if err != nil || len(resource) == 0 { + t.Fatalf("read embedded resource: bytes=%d err=%v", len(resource), err) + } + var hasHideUI bool + for _, script := range ClientLuaScripts() { + if script.Name == "hide_ui.lua" && len(script.Data) > 0 { + hasHideUI = true + } + } + if !hasHideUI { + t.Fatal("embedded hide_ui.lua was not returned to the Client script loader") + } +} diff --git a/internal/common/stella_jump.go b/internal/common/stella_jump.go new file mode 100644 index 0000000..973b6b8 --- /dev/null +++ b/internal/common/stella_jump.go @@ -0,0 +1,179 @@ +package common + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "strconv" +) + +type StellaJumpCase struct { + ID uint32 `json:"GameBoyCaseID"` + Challenges []uint32 `json:"GameBoyChallengeIDList"` + CheatQuestID uint32 + FDGroupID, FDHardInstanceID, FDHardEntityID, FDCheatInstanceID, FDCheatEntityID uint32 +} + +func LoadStellaJumpCases() (map[uint32]StellaJumpCase, error) { + raw, err := ReadResourceFile("resources/StellaJumpConfig.json") + if err != nil { + return nil, err + } + var resource struct { + Format uint32 `json:"format_version"` + Assembly string `json:"client_assembly_sha256"` + Evidence string `json:"evidence_id"` + Cases []StellaJumpCase `json:"cases"` + } + if err = json.Unmarshal(raw, &resource); err != nil { + return nil, err + } + digest, err := hex.DecodeString(resource.Assembly) + if err != nil || len(digest) != 32 || resource.Format != 1 || resource.Evidence == "" || len(resource.Cases) == 0 { + return nil, fmt.Errorf("Stella Jump catalog provenance invalid") + } + cases := make(map[uint32]StellaJumpCase, len(resource.Cases)) + for _, row := range resource.Cases { + if _, exists := cases[row.ID]; row.ID == 0 || exists || row.FDGroupID == 0 || row.FDHardInstanceID == 0 || row.FDCheatInstanceID == 0 { + return nil, fmt.Errorf("Stella Jump case invalid") + } + seen := map[uint32]bool{} + for _, id := range row.Challenges { + if id == 0 || seen[id] { + return nil, fmt.Errorf("Stella Jump challenge invalid") + } + seen[id] = true + } + cases[row.ID] = row + } + return cases, nil +} + +type StellaJumpRecord struct { + BestTime uint64 `json:"best_time"` + FinishedChallenges []uint32 `json:"finished_challenges"` + CheatInput bool `json:"cheat_input"` + CheatMode bool `json:"cheat_mode"` +} + +func SaveStellaJumpCheatSetting(id uint32, input bool, enabled bool) error { + cases, err := LoadStellaJumpCases() + if err != nil { + return err + } + if _, ok := cases[id]; !ok { + return fmt.Errorf("unknown Stella Jump case %d", id) + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return err + } + defer unlock() + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return err + } + records := map[uint32]StellaJumpRecord{} + if raw, exists := root["stella_jump"]; exists { + if err = json.Unmarshal(raw, &records); err != nil { + return err + } + if records == nil { + records = map[uint32]StellaJumpRecord{} + } + } + record := records[id] + if input { + record.CheatInput = enabled + } else { + record.CheatMode = enabled + } + records[id] = record + root["stella_jump"], err = json.Marshal(records) + if err != nil { + return err + } + return writeJSONAtomic("persistent", root) +} + +func ReadStellaJumpRecord(id uint32) (StellaJumpRecord, error) { + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return StellaJumpRecord{}, err + } + var records map[uint32]StellaJumpRecord + if raw, exists := root["stella_jump"]; exists { + if err = json.Unmarshal(raw, &records); err != nil { + return StellaJumpRecord{}, err + } + } + return records[id], nil +} + +// Merge under the shared process/file locks. An old game session cannot replace +// another case's score, CW snapshot, or a switch changed through the SDK. +func SaveStellaJumpResult(id uint32, elapsed uint64, challenges []uint32) (StellaJumpRecord, error) { + cases, err := LoadStellaJumpCases() + if err != nil { + return StellaJumpRecord{}, err + } + row, ok := cases[id] + if !ok { + return StellaJumpRecord{}, fmt.Errorf("unknown Stella Jump case %d", id) + } + allowed := map[uint32]bool{} + for _, v := range row.Challenges { + allowed[v] = true + } + for _, v := range challenges { + if !allowed[v] { + return StellaJumpRecord{}, fmt.Errorf("challenge %d not in case %d", v, id) + } + } + persistentWriteMu.Lock() + defer persistentWriteMu.Unlock() + unlock, err := lockPersistentFile() + if err != nil { + return StellaJumpRecord{}, err + } + defer unlock() + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + return StellaJumpRecord{}, err + } + records := map[uint32]StellaJumpRecord{} + if raw, exists := root["stella_jump"]; exists { + if err = json.Unmarshal(raw, &records); err != nil { + return StellaJumpRecord{}, err + } + if records == nil { + records = map[uint32]StellaJumpRecord{} + } + } + record := records[id] + if elapsed != 0 && (record.BestTime == 0 || elapsed < record.BestTime) { + record.BestTime = elapsed + } + seen := map[uint32]bool{} + for _, v := range record.FinishedChallenges { + seen[v] = true + } + for _, v := range challenges { + if !seen[v] { + record.FinishedChallenges = append(record.FinishedChallenges, v) + seen[v] = true + } + } + records[id] = record + encoded, err := json.Marshal(records) + if err != nil { + return StellaJumpRecord{}, err + } + root["stella_jump"] = encoded + if err = writeJSONAtomic("persistent", root); err != nil { + return StellaJumpRecord{}, fmt.Errorf("save Stella Jump case %s: %w", strconv.FormatUint(uint64(id), 10), err) + } + return record, nil +} diff --git a/internal/common/stella_jump_test.go b/internal/common/stella_jump_test.go new file mode 100644 index 0000000..225660f --- /dev/null +++ b/internal/common/stella_jump_test.go @@ -0,0 +1,95 @@ +package common + +import ( + "bytes" + "encoding/json" + "os" + "path/filepath" + "testing" +) + +func TestStellaJumpResultMergesCasesAndPreservesOtherSaves(t *testing.T) { + raw, err := os.ReadFile(filepath.Join("..", "..", "resources", "StellaJumpConfig.json")) + if err != nil { + t.Fatal(err) + } + t.Chdir(t.TempDir()) + if err = os.Mkdir("resources", 0755); err != nil { + t.Fatal(err) + } + if err = os.WriteFile(filepath.Join("resources", "StellaJumpConfig.json"), raw, 0644); err != nil { + t.Fatal(err) + } + initial := []byte(`{"currency_wars":{"saved_run":42},"aha_help_level":0,"ex_ranks_unlocked":{"1204":false}}`) + if err = os.WriteFile("persistent", initial, 0644); err != nil { + t.Fatal(err) + } + cases, err := LoadStellaJumpCases() + if err != nil { + t.Fatal(err) + } + var selected []StellaJumpCase + for _, row := range cases { + if len(row.Challenges) > 0 { + selected = append(selected, row) + } + if len(selected) == 2 { + break + } + } + if len(selected) != 2 { + t.Fatal("need multiple captured cases") + } + a, b := selected[0], selected[1] + if _, err = ReadStellaJumpRecord(a.ID); err != nil { + t.Fatal(err) + } + afterRead, _ := os.ReadFile("persistent") + if !bytes.Equal(initial, afterRead) { + t.Fatal("read rewrote persistent") + } + first, err := SaveStellaJumpResult(a.ID, 100, []uint32{a.Challenges[0]}) + if err != nil || first.BestTime != 100 { + t.Fatalf("first finish: %+v %v", first, err) + } + if _, err = SaveStellaJumpResult(b.ID, 80, nil); err != nil { + t.Fatal(err) + } + if _, err = SaveStellaJumpResult(a.ID, 120, []uint32{a.Challenges[0]}); err != nil { + t.Fatal(err) + } + beforeBad, _ := os.ReadFile("persistent") + if _, err = SaveStellaJumpResult(a.ID, 1, []uint32{^uint32(0)}); err == nil { + t.Fatal("accepted invalid challenge") + } + afterBad, _ := os.ReadFile("persistent") + if !bytes.Equal(beforeBad, afterBad) { + t.Fatal("invalid request mutated save") + } + result, err := ReadStellaJumpRecord(a.ID) + if err != nil || result.BestTime != 100 || len(result.FinishedChallenges) != 1 { + t.Fatalf("merged record: %+v %v", result, err) + } + other, _ := ReadStellaJumpRecord(b.ID) + if other.BestTime != 80 { + t.Fatal("lost other case") + } + root, err := readCurrencyWarsPersistentRoot() + if err != nil { + t.Fatal(err) + } + var original map[string]json.RawMessage + if err = json.Unmarshal(initial, &original); err != nil { + t.Fatal(err) + } + for key, value := range original { + var a, b any + json.Unmarshal(value, &a) + json.Unmarshal(root[key], &b) + left, _ := json.Marshal(a) + right, _ := json.Marshal(b) + if !bytes.Equal(left, right) { + t.Fatalf("changed %s", key) + } + } +} diff --git a/internal/gameserver/aa_round_sync.go b/internal/gameserver/aa_round_sync.go new file mode 100644 index 0000000..295e5f8 --- /dev/null +++ b/internal/gameserver/aa_round_sync.go @@ -0,0 +1,54 @@ +package gameserver + +import ( + "crypto/sha256" + _ "embed" + "encoding/hex" + "fmt" + + "gac-hkrpg-go/internal/common" +) + +//go:embed aa_round_sync.lua +var aaRoundRefreshAdapter []byte + +// loadAARoundRefreshLua invalidates only the AA module's cached data, through +// its observed native request API. It never rewrites an incoming PeakId, +// starts a challenge, changes a scene or modifies saved selection/progression. +func loadAARoundRefreshLua(s *Session) ([]byte, error) { + selection, err := common.ReadAARoundSelection() + if err != nil { + return nil, err + } + groups := map[uint32]bool{} + var defaultGroup uint32 + for _, stage := range getChallengeData().Peak { + if stage.GroupID != 0 { + groups[stage.GroupID] = true + if defaultGroup == 0 || stage.GroupID < defaultGroup { + defaultGroup = stage.GroupID + } + } + } + if defaultGroup == 0 { + return nil, fmt.Errorf("AA refresh has no resource-backed round") + } + desired := defaultGroup + if selection != nil { + if !groups[selection.PeakGroupID] { + return nil, fmt.Errorf("selected AA round %d is absent from loaded challenge data", selection.PeakGroupID) + } + desired = selection.PeakGroupID + } + cfg, err := common.LoadRuntimeConfig() + if err != nil { + return nil, err + } + digest := sha256.Sum256([]byte(fmt.Sprintf("%s/%d", cfg.ClientVersion, desired))) + deferred := s.ChallengeRun != nil || s.currencyWarsOpen + if _, active := CURRENT_BATTLE.Load(s.Token); active { + deferred = true + } + payload := fmt.Sprintf("\n_G.__GAC_AA_ROUND_REFRESH={desired_group=%d,revision=%s,deferred=%t}\n", desired, luaQuotedString(hex.EncodeToString(digest[:])), deferred) + return append([]byte(payload), aaRoundRefreshAdapter...), nil +} diff --git a/internal/gameserver/aa_round_sync.lua b/internal/gameserver/aa_round_sync.lua new file mode 100644 index 0000000..ce9e281 --- /dev/null +++ b/internal/gameserver/aa_round_sync.lua @@ -0,0 +1,50 @@ +-- Current Client metadata: ChallengePeakModule exposes CurrentPeakGroupID and +-- SendGetChallengePeakDataRequest(). Request real server data; never set a +-- private group field, fake a response, remap a room or close a running mode. +do local function synchronize() + local data=_G.__GAC_AA_ROUND_REFRESH + if not data or data.deferred or not data.desired_group or data.desired_group==0 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local modules=CS.RPG.Client.GlobalVars.s_ModuleManager + local module=modules and modules.ChallengePeakModule + if not module then return end + local state=_G.__GAC_AA_ROUND_REFRESH_STATE + if not state or state.module~=module then + state={module=module};_G.__GAC_AA_ROUND_REFRESH_STATE=state + end + local current=module.CurrentPeakGroupID + -- Wait for the native login initialization request; do not duplicate it. + if not current or current==0 then return end + if current==data.desired_group then + if state.applied~=data.revision then + CS.UnityEngine.Debug.Log('[GAC_AA_ROUND_SYNC] applied group='..current) + end + state.applied=data.revision;state.pending=nil;return + end + if state.pending then + -- A changed native group proves that the previous request completed. If + -- Srtool changed again while it was pending, now request the latest choice. + if current==state.pending.from then return end + state.pending=nil + end + if state.requested==data.revision then return end + local sender=module.SendGetChallengePeakDataRequest + if type(sender)~='function' then error('observed AA refresh API is unavailable') end + -- No known in-flight query is exposed by this module. Send once and wait + -- for its actual CurrentPeakGroupID change, instead of flooding retries. + state.requested=data.revision + state.pending={from=current,desired=data.desired_group} + module:SendGetChallengePeakDataRequest() + CS.UnityEngine.Debug.Log('[GAC_AA_ROUND_SYNC] requested group='..data.desired_group..' previous='..current) +end +local ok,err=pcall(synchronize) +if not ok then + local message=tostring(err) + if _G.__GAC_AA_ROUND_REFRESH_ERROR~=message then + _G.__GAC_AA_ROUND_REFRESH_ERROR=message + CS.UnityEngine.Debug.Log('[GAC_AA_ROUND_SYNC] ERROR '..message) + end +end end diff --git a/internal/gameserver/aha_help.go b/internal/gameserver/aha_help.go new file mode 100644 index 0000000..ab2abf7 --- /dev/null +++ b/internal/gameserver/aha_help.go @@ -0,0 +1,71 @@ +package gameserver + +import ( + "fmt" + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +// Inspect actual battle buffs, rather than ChallengeStageID or a reused stage ID. +// This covers an imported custom battle that already includes Corruption. +func (r *battleRules) applyAhaHelp(battle *pb.SceneBattleInfo, legacyEnabled bool, owner uint32) error { + var corruption uint32 + for _, buff := range battle.BuffList { + for _, id := range r.InvasionBuffs { + if buff.Id == id { + corruption = id + } + } + } + if corruption == 0 { + return nil + } + selected, err := common.ReadAhaHelpLevel() + if err != nil { + return fmt.Errorf("battle Aha help setting: %w", err) + } + rows, err := common.LoadAhaHelpLevels() + if err != nil { + return err + } + var support, level uint32 + if selected == nil { + if legacyEnabled { + support = r.InvasionSupportBuff + } + } else if *selected != 0 { + for _, row := range rows { + if row.BuffLevel == *selected { + support, level = row.BuffID, row.BuffLevel + } + } + if support == 0 { + return fmt.Errorf("battle Aha help level %d is not configured", *selected) + } + } + // The selected/off setting owns this family. Remove old imported support buffs + // to avoid stacking multiple levels or ignoring an explicit off selection. + filtered := battle.BuffList[:0] + for _, buff := range battle.BuffList { + isSupport := buff.Id == r.InvasionSupportBuff + for _, row := range rows { + isSupport = isSupport || buff.Id == row.BuffID + } + if !isSupport { + filtered = append(filtered, buff) + } + } + battle.BuffList = filtered + if support != 0 { + battle.BuffList = append(battle.BuffList, battleBuff(support, owner, map[string]float32{"SkillIndex": 1})) + } + SceneDebugLog("AHA_HELP stage=%d corruption=%d selected=%v legacy=%t support=%d level=%d", battle.StageId, corruption, selectedValue(selected), legacyEnabled, support, level) + return nil +} + +func selectedValue(value *uint32) any { + if value == nil { + return "freesr" + } + return *value +} diff --git a/internal/gameserver/challenge_run.go b/internal/gameserver/challenge_run.go index 8756ca3..749cc9c 100644 --- a/internal/gameserver/challenge_run.go +++ b/internal/gameserver/challenge_run.go @@ -148,7 +148,7 @@ func advanceChallengeRoom(s *Session) (*goproto.SceneInfo, error) { if err := setChallengeBattleConfig(s, r.Avatars, run.ID, r.Event, r.Buffs); err != nil { return nil, err } - scene, _, err := loadChallengeScene(s, r.Entrance, r.Group, r.Monster, r.Event, r.Avatars) + scene, _, _, err := loadChallengeScene(s, r.Entrance, r.Group, r.Monster, r.Event, r.Avatars) if err != nil { s.ChallengeBattleConfig = previousConfig return nil, err @@ -242,7 +242,7 @@ func restartChallengeRoom(s *Session) (*goproto.SceneInfo, error) { if err := configure(s, r.Avatars, run.ID, r.Event, r.Buffs); err != nil { return nil, err } - scene, _, err := loadChallengeScene(s, r.Entrance, r.Group, r.Monster, r.Event, r.Avatars) + scene, _, _, err := loadChallengeScene(s, r.Entrance, r.Group, r.Monster, r.Event, r.Avatars) if err != nil { return nil, err } diff --git a/internal/gameserver/currency_wars_battle.go b/internal/gameserver/currency_wars_battle.go index 6092775..b27d8ea 100644 --- a/internal/gameserver/currency_wars_battle.go +++ b/internal/gameserver/currency_wars_battle.go @@ -77,6 +77,12 @@ func buildCurrencyWarsBattle(s *Session, catalog *common.CurrencyWarsCatalog, ru return nil, err } ext := proto.Clone(grid.GridGameRoleList[0].DCEOLAAMGOO).(*pb.JJHJCIAPADP) + // This is the native mode envelope: tag 1 is the captured CW mode, while + // tag 2 is SpotlightID. Keep the mode, remove only the reference binding. + if ext.GLHDCCPOGHL == nil { + return nil, fmt.Errorf("CW battle mode envelope missing") + } + ext.GLHDCCPOGHL.IHHNLLAJAGB = 0 // These fields contain the reference party's traits, buffs and battle events. // They cannot be reused for another party. Derived trait/equipment effects // remain a separate implementation task; don't silently inherit its bonuses. @@ -122,18 +128,48 @@ func buildCurrencyWarsBattle(s *Session, catalog *common.CurrencyWarsCatalog, ru } seen[avatarID] = true avatar := adventure.Avatars[avatarID] - if avatar == nil { - return nil, fmt.Errorf("CW role avatar %d not owned; trial resolver required", avatarID) + var battleAvatar *pb.BattleAvatar + if avatar == nil || config.Config.IsFakeAvatar != 0 { + battleAvatar, err = cwTrialBattleAvatar(catalog, config, uint32(len(info.BattleAvatarList))) + if err != nil { + return nil, err + } + } else { + battleAvatar, _ = avatar.ToBattleAvatarProto(uint32(len(info.BattleAvatarList)), adventure.FindLightconeFor(avatarID), filterSupportedRelics(adventure.FindRelicsFor(avatarID), supported)) + battleAvatar.AvatarType = pb.AvatarType_AvatarType_AvatarGridFightType } - battleAvatar, _ := avatar.ToBattleAvatarProto(uint32(len(info.BattleAvatarList)), adventure.FindLightconeFor(avatarID), filterSupportedRelics(adventure.FindRelicsFor(avatarID), supported)) - battleAvatar.AvatarType = pb.AvatarType_AvatarType_AvatarGridFightType if uint64(role.Pos) <= uint64(front) { info.BattleAvatarList = append(info.BattleAvatarList, battleAvatar) } else { battleAvatar.Index = uint32(len(grid.OPHONCKPNMG)) grid.OPHONCKPNMG = append(grid.OPHONCKPNMG, battleAvatar) } - grid.GridGameRoleList = append(grid.GridGameRoleList, &pb.BJGJBNJDLIK{RoleId: role.Id, RoleStar: role.RoleStar, Pos: role.Pos, AvatarId: avatarID, UniqueId: role.UniqueId, ConvertPropertyToFixpoint: maps.Clone(role.ConvertPropertyToFixpoint), DCEOLAAMGOO: proto.Clone(ext).(*pb.JJHJCIAPADP)}) + roleExt := proto.Clone(ext).(*pb.JJHJCIAPADP) + if spotlights := cwSpotlights(run); spotlights != nil { + for _, binding := range spotlights.FNNEPMAPOOF { + if binding.RoleId == role.Id && binding.MDNAGANGNKK == role.UniqueId && !binding.ELBPNDIENDL { + roleExt.GLHDCCPOGHL.IHHNLLAJAGB = binding.IHHNLLAJAGB + } + } + } + battleRole := &pb.BJGJBNJDLIK{RoleId: role.Id, RoleStar: role.RoleStar, Pos: role.Pos, AvatarId: avatarID, UniqueId: role.UniqueId, ConvertPropertyToFixpoint: maps.Clone(role.ConvertPropertyToFixpoint), DCEOLAAMGOO: roleExt, BABNHPDGNGB: maps.Clone(role.BABNHPDGNGB)} + bag := cwEquipmentBag(run) + for _, uid := range role.PNJIPHJJONG { + var gear *pb.IJDLENJJBHJ + if bag != nil { + for _, owned := range bag.GridFightEquipmentList { + if owned.UniqueId == uid { + gear = owned + break + } + } + } + if gear == nil { + return nil, fmt.Errorf("CW role equipment %d is missing from saved inventory", uid) + } + battleRole.CNIJIJMEPEF = append(battleRole.CNIJIJMEPEF, &pb.ACFLKPFDHIM{UniqueId: gear.UniqueId, GridFightEquipmentId: gear.GridFightEquipmentId, ConvertPropertyToFixpoint: maps.Clone(gear.ConvertPropertyToFixpoint)}) + } + grid.GridGameRoleList = append(grid.GridGameRoleList, battleRole) } if len(info.BattleAvatarList) == 0 || uint32(len(seen)) > player.AFFCFLFIFPH { return nil, fmt.Errorf("CW active party is empty or exceeds capacity") @@ -171,7 +207,7 @@ func buildCurrencyWarsBattle(s *Session, catalog *common.CurrencyWarsCatalog, ru } func init() { - handle("GridFightEnterBattleStage", func(s *Session, _ *pb.GridFightEnterBattleStageCsReq, rsp *pb.GridFightEnterBattleStageScRsp) error { + cwHandle("GridFightEnterBattleStage", func(s *Session, _ *pb.GridFightEnterBattleStageCsReq, rsp *pb.GridFightEnterBattleStageScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS) catalog, data, err := cwPreparingData(s) if err != nil { diff --git a/internal/gameserver/currency_wars_bonfire.go b/internal/gameserver/currency_wars_bonfire.go new file mode 100644 index 0000000..fad2080 --- /dev/null +++ b/internal/gameserver/currency_wars_bonfire.go @@ -0,0 +1,469 @@ +package gameserver + +import ( + "crypto/rand" + "encoding/json" + "fmt" + "maps" + "math" + "math/big" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +// Current Client _UpdateHasSelected (assembly identity recorded in the phase +// contract document) compares phase >= 2. FFGO's selected=1 is incompatible. +const ( + cwBonfireChoosing = pb.KMJMHDPPAKH_KMJMHDPPAKH_HLLKDFFMIEN + cwBonfireSelected = pb.KMJMHDPPAKH_KMJMHDPPAKH_BGENLPCJGJF +) + +// Entry is a navigation request (empty request, retcode-only response in the +// revision-tagged schema). Reward choices are separate pending transactions; +// opening the menu must not consume a choice or award HP/items by itself. +func init() { + cwHandle("GridFightEnterBonfire", func(s *Session, _ *pb.GridFightEnterBonfireCsReq, rsp *pb.GridFightEnterBonfireScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) + catalog, err := common.LoadCurrencyWarsCatalog() + if err != nil { + return err + } + data, revision, err := readCurrencyWarsData(catalog) + if err != nil { + return err + } + if data == nil || data.DHFOFLFCLAH == nil { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_NOT_IN_GAMEPLAY) + return nil + } + if revision != s.currencyWarsRevision { + return common.ErrCurrencyWarsSaveConflict + } + if _, active := CURRENT_BATTLE.Load(s.Token); active { + return fmt.Errorf("CW Bonfire cannot open during Battle") + } + stage, node := cwStage(data.DHFOFLFCLAH) + if stage == nil || node == nil { + return nil + } + // FFGO revision 440df54730ba's gfBonfireEnter resynchronizes the + // current Bonfire action before acknowledging entry. Our current + // protocol maps that action to tag 1920 (IIDBLCFAAPC), independently + // of its renamed reference type. Opening never consumes its rewards. + pending := data.DHFOFLFCLAH.FMIGOKIDKJL + if pending != nil { + if pending.GetIIDBLCFAAPC() == nil { + return fmt.Errorf("CW Bonfire entry is blocked by pending queue %d", pending.QueuePosition) + } + copyPending := proto.Clone(pending).(*pb.CHCHAJIANIM) + if err := cwSend(s, cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: copyPending}})); err != nil { + return err + } + } else { + if !node.FCNNBODJNIK || len(node.HKKLNENEPNE) == 0 { + return fmt.Errorf("CW active node is not a Bonfire") + } + book, err := common.LoadCurrencyWarsBonfire(catalog) + if err != nil { + return err + } + player, _, _ := cwComponents(data.DHFOFLFCLAH) + if player == nil || revision >= uint64(^uint32(0)) { + return fmt.Errorf("CW Bonfire player/queue missing") + } + interest, err := catalog.BaseInterest(player.Gold, player.KNFOCCPOJEA) + if err != nil { + return err + } + streak, err := cwBonfireStreakGold(catalog, player.GDAKCOICIDA) + if err != nil { + return err + } + offer := &pb.NCEPOLNLNKH{Phase: cwBonfireChoosing, EIFICNFGGHI: node.PICMDONCKCO, AHJJJNBOMPG: interest, DANCNIMJOLE: streak} + for _, event := range node.HKKLNENEPNE { + if _, exists := book.Events[event]; !exists { + return fmt.Errorf("CW Bonfire event %d missing", event) + } + count := len(offer.KFNMIEMBJGD) + for _, option := range book.Options { + if option.EventID != event { + continue + } + if option.OptionShowType != "None" { + return fmt.Errorf("CW Bonfire display %s unsupported", option.OptionShowType) + } + offer.KFNMIEMBJGD = append(offer.KFNMIEMBJGD, &pb.MHCOIBONODA{EventId: event, HAFOKMHCGFM: option.OptionID}) + } + if count == len(offer.KFNMIEMBJGD) { + return fmt.Errorf("CW Bonfire event %d has no options", event) + } + } + pending = &pb.CHCHAJIANIM{QueuePosition: uint32(revision + 1), FGLIODAJFML: &pb.CHCHAJIANIM_IIDBLCFAAPC{IIDBLCFAAPC: offer}} + data.DHFOFLFCLAH.FMIGOKIDKJL = pending + if err = s.saveCurrencyWarsData(data, catalog); err != nil { + return err + } + if err = cwSend(s, cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}})); err != nil { + return err + } + } + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("CW_BONFIRE_ENTRY route=%d chapter=%d section=%d revision=%d", stage.EMOHLJHPOPC, stage.DCAHJELNJNP, stage.SectionId, s.currencyWarsRevision)) + return nil + }) +} + +func cwBonfireStreakGold(c *common.CurrencyWarsCatalog, streak uint32) (uint32, error) { + raw, e := common.ReadResourceFile("resources/CurrencyWarsSettlementRules.json") + if e != nil { + return 0, e + } + var r struct { + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Victories []struct{ Low, Up, Bonus uint32 } `json:"victory_rules"` + } + if e = json.Unmarshal(raw, &r); e != nil { + return 0, e + } + if r.Client != c.ClientVersion || r.Assembly != c.Provenance.GameAssemblySHA256 { + return 0, fmt.Errorf("CW Bonfire income revision differs") + } + var result uint32 + found := false + for _, v := range r.Victories { + if v.Low <= streak && streak <= v.Up { + if found { + return 0, fmt.Errorf("CW streak ranges overlap") + } + result = v.Bonus + found = true + } + } + if !found { + return 0, fmt.Errorf("CW streak income missing") + } + return result, nil +} + +func cwBonfireRuntime(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*common.CurrencyWarsRuntimeState, error) { + cfg, e := common.LoadRuntimeConfig() + if e != nil { + return nil, e + } + snapshot, e := common.ReadCurrencyWarsSnapshot(cfg.PlayerUID, c.ClientVersion, c.Provenance.GameAssemblySHA256) + if e != nil { + return nil, e + } + rules := map[string]uint32{} + if snapshot != nil && snapshot.Runtime != nil && snapshot.Runtime.RunID == run.UniqueId { + maps.Copy(rules, snapshot.Runtime.Rules) + } + return &common.CurrencyWarsRuntimeState{RunID: run.UniqueId, Rules: rules}, nil +} + +func cwSelectBonfire(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, request *pb.CAMIICJDOBO) (*pb.GridFightSyncUpdateResultScNotify, *common.CurrencyWarsRuntimeState, error) { + pending := run.GetFMIGOKIDKJL() + offer := pending.GetIIDBLCFAAPC() + if offer == nil || request == nil { + return nil, nil, fmt.Errorf("CW Bonfire choice is not active") + } + if request.GetECDACDNDHGO() != nil { + return cwTakeBonfire(c, run, offer) + } + if offer.Phase == cwBonfireSelected { + runtime, e := cwBonfireRuntime(c, run) + if e != nil { + return nil, nil, e + } + stage, _ := cwStage(run) + key := fmt.Sprintf("BonfireChoice/%d/%d/", stage.DCAHJELNJNP, stage.SectionId) + if offer.Phase != pb.KMJMHDPPAKH_KMJMHDPPAKH_POMADDDKFHN { + return nil, nil, fmt.Errorf("CW Bonfire choice was already selected") + } + if request.GetNCGOOEMOBIC().GetLGAJNMNOAEM() { + book, e := common.LoadCurrencyWarsBonfire(c) + if e != nil { return nil, nil, e } + stage, _ := cwStage(run) + player, _, _ := cwComponents(run) + if stage == nil || player == nil || player.GridFightLineupHp > player.PPKKHHNEOHB { + return nil, nil, fmt.Errorf("CW Bonfire heal components invalid") + } + heal, ok := book.Heal[stage.DCAHJELNJNP] + if !ok { return nil, nil, fmt.Errorf("CW Bonfire chapter heal missing") } + hp := uint64(player.GridFightLineupHp) + uint64(heal) + if hp > uint64(player.PPKKHHNEOHB) { hp = uint64(player.PPKKHHNEOHB) } + player.GridFightLineupHp = uint32(hp) + // gfPendingMarkBonfireSelected uses phase 1 for both heal and option. + offer.Phase = pb.KMJMHDPPAKH_KMJMHDPPAKH_HLLKDFFMIEN + return cwNotify( + &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GridFightLineupHp{GridFightLineupHp: &pb.FMJDDIHBELC{GridFightLineupHp: player.GridFightLineupHp, PPKKHHNEOHB: player.PPKKHHNEOHB}}}, + &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}, + ), nil, nil + } + selectReq := request.GetNCGOOEMOBIC().GetALEGIFEHGLH() + replay := selectReq != nil && runtime.Rules[key+"event"] == selectReq.EventId && runtime.Rules[key+"option"] == selectReq.HAFOKMHCGFM + if selectReq != nil && !replay { + event, option, proven, proofErr := cwLegacyBonfireChoice(c, run, runtime) + if proofErr != nil { + return nil, nil, proofErr + } + replay = proven && event == selectReq.EventId && option == selectReq.HAFOKMHCGFM + } + if selectReq == nil && request.GetNCGOOEMOBIC() != nil && runtime.Rules[key+"heal"] != 0 { + replay = true + } + if replay { + return cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}), runtime, nil + } + return nil, nil, fmt.Errorf("CW Bonfire option was already selected") + } + if offer.Phase != cwBonfireChoosing && offer.Phase != pb.KMJMHDPPAKH_KMJMHDPPAKH_POMADDDKFHN { + return nil, nil, fmt.Errorf("CW Bonfire phase invalid") + } + if offer.Phase != pb.KMJMHDPPAKH_KMJMHDPPAKH_POMADDDKFHN { + return nil, nil, fmt.Errorf("CW Bonfire choice was already selected") + } + if request.GetNCGOOEMOBIC().GetLGAJNMNOAEM() { + book, e := common.LoadCurrencyWarsBonfire(c) + if e != nil { return nil, nil, e } + stage, _ := cwStage(run) + player, _, _ := cwComponents(run) + if stage == nil || player == nil || player.GridFightLineupHp > player.PPKKHHNEOHB { + return nil, nil, fmt.Errorf("CW Bonfire heal components invalid") + } + heal, ok := book.Heal[stage.DCAHJELNJNP] + if !ok { return nil, nil, fmt.Errorf("CW Bonfire chapter heal missing") } + hp := uint64(player.GridFightLineupHp) + uint64(heal) + if hp > uint64(player.PPKKHHNEOHB) { hp = uint64(player.PPKKHHNEOHB) } + player.GridFightLineupHp = uint32(hp) + // gfPendingMarkBonfireSelected uses phase 1 for both heal and option. + offer.Phase = pb.KMJMHDPPAKH_KMJMHDPPAKH_HLLKDFFMIEN + return cwNotify( + &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GridFightLineupHp{GridFightLineupHp: &pb.FMJDDIHBELC{GridFightLineupHp: player.GridFightLineupHp, PPKKHHNEOHB: player.PPKKHHNEOHB}}}, + &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}, + ), nil, nil + } + selectReq := request.GetNCGOOEMOBIC().GetALEGIFEHGLH() + if selectReq == nil { + if _, ok := request.GetNCGOOEMOBIC().GetFFBBOFAGGDI().(*pb.MLAENDOFBCK_LGAJNMNOAEM); !ok { + return nil, nil, fmt.Errorf("CW Bonfire action missing") + } + book, e := common.LoadCurrencyWarsBonfire(c) + if e != nil { + return nil, nil, e + } + stage, _ := cwStage(run) + player, _, _ := cwComponents(run) + if stage == nil || player == nil || player.GridFightLineupHp > player.PPKKHHNEOHB { + return nil, nil, fmt.Errorf("CW Bonfire heal state invalid") + } + heal, ok := book.Heal[stage.DCAHJELNJNP] + if !ok { + return nil, nil, fmt.Errorf("CW Bonfire chapter heal missing") + } + if remaining := player.PPKKHHNEOHB - player.GridFightLineupHp; heal > remaining { + heal = remaining + } + player.GridFightLineupHp += heal + offer.Phase = cwBonfireSelected + runtime, e := cwBonfireRuntime(c, run) + if e == nil { + runtime.Rules[fmt.Sprintf("BonfireChoice/%d/%d/heal", stage.DCAHJELNJNP, stage.SectionId)] = 1 + } + return cwNotify(cwBonfireHPSync(player), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}), runtime, e + } + found := false + for _, v := range offer.KFNMIEMBJGD { + if v.EventId == selectReq.EventId && v.HAFOKMHCGFM == selectReq.HAFOKMHCGFM { + found = true + } + } + if !found { + return nil, nil, fmt.Errorf("CW Bonfire selection is outside current offer") + } + book, e := common.LoadCurrencyWarsBonfire(c) + if e != nil { + return nil, nil, e + } + runtime, e := cwBonfireRuntime(c, run) + if e != nil { + return nil, nil, e + } + for _, option := range book.Options { + if option.EventID != selectReq.EventId || option.OptionID != selectReq.HAFOKMHCGFM { + continue + } + rules, e := book.OptionRules(option) + if e != nil { + return nil, nil, e + } + maps.Copy(runtime.Rules, rules) + offer.Phase = cwBonfireSelected + stage, _ := cwStage(run) + key := fmt.Sprintf("BonfireChoice/%d/%d/", stage.DCAHJELNJNP, stage.SectionId) + runtime.Rules[key+"event"] = selectReq.EventId + runtime.Rules[key+"option"] = selectReq.HAFOKMHCGFM + return cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}), runtime, nil + } + return nil, nil, fmt.Errorf("CW Bonfire selected recipe missing") +} + +func cwBonfireHPSync(player *pb.NIHNGPKHEPC) *pb.KFNCAIHIHCM { + return &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GridFightLineupHp{GridFightLineupHp: &pb.FMJDDIHBELC{PPKKHHNEOHB: player.PPKKHHNEOHB, GridFightLineupHp: player.GridFightLineupHp}}} +} + +// Reference gfPendingHandleBonfire's take branch pays the saved offer and wave +// EXP, then finishes the action and creates the next node. Everything here is +// detached: the caller commits income, inventory and route with one revision CAS. +func cwTakeBonfire(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, offer *pb.NCEPOLNLNKH) (*pb.GridFightSyncUpdateResultScNotify, *common.CurrencyWarsRuntimeState, error) { + if offer.Phase != cwBonfireSelected { + return nil, nil, fmt.Errorf("CW Bonfire take requires a selected option or heal") + } + player, _, shop := cwComponents(run) + if player == nil || shop == nil { + return nil, nil, fmt.Errorf("CW Bonfire reward components missing") + } + runtime, err := cwBonfireRuntime(c, run) + if err != nil { + return nil, nil, err + } + sum := uint64(player.Gold) + uint64(offer.EIFICNFGGHI) + uint64(offer.AHJJJNBOMPG) + uint64(offer.DANCNIMJOLE) + if sum > math.MaxUint32 { + return nil, nil, fmt.Errorf("CW Bonfire income overflow") + } + gain, err := c.IntegerRule("GridFight_GainExpWhenWaveEnd") + if err != nil || gain < 0 || uint64(gain) > math.MaxUint32 { + return nil, nil, fmt.Errorf("CW Bonfire EXP rule invalid") + } + player.Gold = uint32(sum) + if err = cwApplyBaseExperience(c, player, shop, uint32(gain)); err != nil { + return nil, nil, err + } + notify := cwNotify(cwGoldSync(player.Gold), cwCapacitySync(player), cwShopSync(shop), + &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PLPHEIBLPDL{PLPHEIBLPDL: &pb.PIHKLPJGEPM{Level: player.EHNJDIDABHD, Exp: player.GridFightCurLevelExp, HFMKLAPEKFA: player.NDAINFLOLPJ}}}) + for _, drop := range offer.DJOBNPIAEJP { + // The reference take branch's saved drops are Orb IDs (drop enum 6), + // not a fresh random roll. Never grant a different item on resume/retry. + if drop == nil || drop.FKKGLFOHGGA != pb.MJJIFGINJAJ_MJJIFGINJAJ_ANMDMBGNOHL || drop.Num != 1 { + return nil, nil, fmt.Errorf("CW Bonfire saved drop is not a supported Orb") + } + added, e := cwApplyCommand(c, run, common.CurrencyWarsCommand{Field: "orb", Value: drop.FNLMKJLKLFH, Quantity: 1}) + if e != nil { + return nil, nil, e + } + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, added.GCPNIHHBGGD...) + } + next, err := cwAdvanceRouteNode(c, run) + if err != nil { + return nil, nil, err + } + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, next.GCPNIHHBGGD...) + return notify, runtime, nil +} + +// Prove a legacy selection from the old writer's same-node effect marker and +// exactly one offered option whose supported rule values are already saved. +// A bare phase=1 is insufficient: new offers legitimately use that phase. +func cwLegacyBonfireChoice(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, runtime *common.CurrencyWarsRuntimeState) (event, option uint32, proven bool, err error) { + stage, _ := cwStage(run) + if runtime == nil || runtime.RunID != run.UniqueId || stage == nil || runtime.Rules[fmt.Sprintf("PetPalStarDownApplied/%d/%d", stage.DCAHJELNJNP, stage.SectionId)] == 0 { + return + } + book, e := common.LoadCurrencyWarsBonfire(c) + if e != nil { + err = e + return + } + count := 0 + for _, offered := range run.GetFMIGOKIDKJL().GetIIDBLCFAAPC().GetKFNMIEMBJGD() { + for _, candidate := range book.Options { + if candidate.EventID != offered.EventId || candidate.OptionID != offered.HAFOKMHCGFM { + continue + } + rules, e := book.OptionRules(candidate) + if e != nil { + continue + } + matches := len(rules) > 0 + for k, v := range rules { + if saved, ok := runtime.Rules[k]; !ok || saved != v { + matches = false + } + } + if matches { + count++ + event = candidate.EventID + option = candidate.OptionID + } + } + } + proven = count == 1 + return +} + +// Projection only; snapshot readers never rewrite persistent or replay effects. +func cwProjectLegacyBonfirePhase(c *common.CurrencyWarsCatalog, data *pb.GridFightGetDataScRsp, runtime *common.CurrencyWarsRuntimeState) error { + run := data.GetDHFOFLFCLAH() + offer := run.GetFMIGOKIDKJL().GetIIDBLCFAAPC() + if offer == nil || offer.Phase != cwBonfireChoosing { + return nil + } + _, _, proven, err := cwLegacyBonfireChoice(c, run, runtime) + if err == nil && proven { + offer.Phase = cwBonfireSelected + } + return err +} + +// Reference gfRouteLowerEnemyStars: for each newly generated enemy above one +// star, roll [1,100] and reduce one star at the selected percentage. The saved +// marker makes retries/resume deterministic instead of rolling repeatedly. +func cwApplyBonfireEnemyRules(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, runtime *common.CurrencyWarsRuntimeState) (*common.CurrencyWarsRuntimeState, error) { + if runtime == nil { + var e error + runtime, e = cwBonfireRuntime(c, run) + if e != nil { + return nil, e + } + } + chance := runtime.Rules["PetPalStarDown"] + if chance == 0 { + return runtime, nil + } + if chance > 100 { + return nil, fmt.Errorf("CW enemy-star probability invalid") + } + stage, _ := cwStage(run) + if stage == nil { + return runtime, nil + } + layer := stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ() + if layer == nil || len(layer.BPDABHGFBFO) == 0 { + return runtime, nil + } + key := fmt.Sprintf("PetPalStarDownApplied/%d/%d", stage.DCAHJELNJNP, stage.SectionId) + if runtime.Rules[key] != 0 { + return runtime, nil + } + for _, branch := range layer.BPDABHGFBFO { + for _, wave := range branch.MonsterWaveList { + for _, monster := range wave.PBLBBDBDLEK { + if monster.RoleStar <= 1 { + continue + } + roll, e := rand.Int(rand.Reader, big.NewInt(100)) + if e != nil { + return nil, e + } + if uint32(roll.Uint64()+1) <= chance { + monster.RoleStar-- + } + } + } + } + runtime.Rules[key] = 1 + return runtime, nil +} diff --git a/internal/gameserver/currency_wars_commands.go b/internal/gameserver/currency_wars_commands.go index 60c375f..34ea8ec 100644 --- a/internal/gameserver/currency_wars_commands.go +++ b/internal/gameserver/currency_wars_commands.go @@ -3,7 +3,6 @@ package gameserver import ( "fmt" "gac-hkrpg-go/internal/common" - pb "gac-hkrpg-go/protocol/proto" ) func (s *Session) applyCurrencyWarsCommands() error { @@ -43,27 +42,19 @@ func (s *Session) applyCurrencyWarsCommands() error { if player == nil { return fmt.Errorf("CW player missing") } - var update *pb.KFNCAIHIHCM - switch command.Field { - case "gold": - player.Gold = command.Value - update = cwGoldSync(player.Gold) - case "hp": - if command.Value == 0 || command.Value > player.PPKKHHNEOHB { - return fmt.Errorf("CW command HP exceeds run limit") + notify, applyErr := cwApplyCommand(catalog, data.DHFOFLFCLAH, command) + if applyErr != nil { + PacketLog(fmt.Sprintf("CW_GM rejected request=%s: %v", command.ID, applyErr)) + if err = common.AcknowledgeCurrencyWarsCommand(command.ID); err != nil { + return err } - player.GridFightLineupHp = command.Value - update = &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GridFightLineupHp{GridFightLineupHp: &pb.FMJDDIHBELC{GridFightLineupHp: command.Value, PPKKHHNEOHB: player.PPKKHHNEOHB}}} - default: - return fmt.Errorf("unknown CW command field") + continue } - if err = s.saveCurrencyWarsData(data, catalog); err != nil { + + if err = s.saveCurrencyWarsData(data, catalog, command.ID); err != nil { return err } - if err = s.Send(cwNotify(update)); err != nil { - return err - } - if err = common.AcknowledgeCurrencyWarsCommand(command.ID); err != nil { + if err = s.Send(notify); err != nil { return err } PacketLog(fmt.Sprintf("CW_GM applied request=%s field=%s value=%d revision=%d", command.ID, command.Field, command.Value, s.currencyWarsRevision)) diff --git a/internal/gameserver/currency_wars_craft.go b/internal/gameserver/currency_wars_craft.go new file mode 100644 index 0000000..1434b32 --- /dev/null +++ b/internal/gameserver/currency_wars_craft.go @@ -0,0 +1,150 @@ +package gameserver + +import ( + "fmt" + "slices" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +// GridFightAddItemSourceType: CraftEquip=5 in the reference enum/builder. +const cwEquipmentSourceCraft uint32 = 5 + +func cwCraftRecipe(recipes []common.CurrencyWarsCraft, target uint32, materialIDs []uint32) (*common.CurrencyWarsCraft, error) { + if len(materialIDs) != 2 { + return nil, fmt.Errorf("CW craft requires two material instances") + } + ids := slices.Clone(materialIDs) + slices.Sort(ids) + var found *common.CurrencyWarsCraft + for i := range recipes { + r := &recipes[i] + if target != 0 && r.CraftEquipID != target { + continue + } + cost := slices.Clone(r.CostEquipList) + slices.Sort(cost) + if slices.Equal(cost, ids) { + if found != nil && found.CraftEquipID != r.CraftEquipID { + return nil, fmt.Errorf("CW craft result is ambiguous") + } + found = r + } + } + if found == nil { + return nil, fmt.Errorf("CW material pair has no matching current recipe") + } + return found, nil +} + +func cwCraftEquipment(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, uids []uint32, target uint32) (*pb.GridFightSyncUpdateResultScNotify, error) { + return cwCraftEquipmentOnRole(catalog, run, uids, target, nil) +} + +func cwCraftEquipmentOnRole(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, uids []uint32, target uint32, receiver *pb.CDEAABODKCP) (*pb.GridFightSyncUpdateResultScNotify, error) { + if len(uids) != 2 || uids[0] == 0 || uids[0] == uids[1] { + return nil, fmt.Errorf("CW craft material identities differ") + } + bag := cwEquipmentBag(run) + _, team, _ := cwComponents(run) + if bag == nil || team == nil { + return nil, fmt.Errorf("CW craft inventory/team missing") + } + var materials []*pb.IJDLENJJBHJ + var ids []uint32 + for _, uid := range uids { + var gear *pb.IJDLENJJBHJ + for _, item := range bag.GridFightEquipmentList { + if item.UniqueId == uid { + gear = item + break + } + } + if gear == nil { + return nil, fmt.Errorf("CW material does not belong to this run") + } + for _, role := range team.GridGameRoleList { + if slices.Contains(role.PNJIPHJJONG, uid) && (receiver == nil || receiver.UniqueId != role.UniqueId) { + return nil, fmt.Errorf("CW manual craft material is equipped") + } + } + for _, npc := range team.GridGameNpcList { + if slices.Contains(npc.PNJIPHJJONG, uid) { + return nil, fmt.Errorf("CW manual craft material is equipped by NPC") + } + } + materials = append(materials, gear) + ids = append(ids, gear.GridFightEquipmentId) + } + recipes, err := common.LoadCurrencyWarsCrafts(catalog) + if err != nil { + return nil, err + } + recipe, err := cwCraftRecipe(recipes, target, ids) + if err != nil { + return nil, err + } + equipment, err := common.LoadCurrencyWarsEquipment(catalog) + if err != nil { + return nil, err + } + if _, ok := equipment[recipe.CraftEquipID]; !ok { + return nil, fmt.Errorf("CW craft result configuration %d not captured", recipe.CraftEquipID) + } + uid, err := cwNextEntityID(run) + if err != nil { + return nil, err + } + gear := &pb.IJDLENJJBHJ{UniqueId: uid, GridFightEquipmentId: recipe.CraftEquipID, Source: cwEquipmentSourceCraft} + if receiver != nil { + receiver.PNJIPHJJONG = slices.DeleteFunc(receiver.PNJIPHJJONG, func(id uint32) bool { return slices.Contains(uids, id) }) + if err = cwCanDressEquipment(catalog, equipment, bag, receiver, gear); err != nil { + return nil, err + } + receiver.PNJIPHJJONG = append(receiver.PNJIPHJJONG, gear.UniqueId) + } + bag.GridFightEquipmentList = slices.DeleteFunc(bag.GridFightEquipmentList, func(x *pb.IJDLENJJBHJ) bool { return slices.Contains(uids, x.UniqueId) }) + bag.GridFightEquipmentList = append(bag.GridFightEquipmentList, gear) + // Current reference admin acquisition proves LMOLELDIKMA is Add. The + // source/Client sync family maps PENGEDECBNF to Remove, DDBKEOPKPFI to + // Update; never send the acquisition using the remove arm. + notify := cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PENGEDECBNF{PENGEDECBNF: &pb.AOFOEOIJEHF{GridFightEquipmentList: materials}}}, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_LMOLELDIKMA{LMOLELDIKMA: &pb.AOFOEOIJEHF{GridFightEquipmentList: []*pb.IJDLENJJBHJ{gear}}}}) + if receiver != nil { + notify.GCPNIHHBGGD[0].JKPJFKCBIEM = append(notify.GCPNIHHBGGD[0].JKPJFKCBIEM, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PIDDDHKPDDM{PIDDDHKPDDM: receiver}}) + } + return notify, nil +} + +func init() { + cwHandle("GridFightEquipCraft", func(s *Session, req *pb.GridFightEquipCraftCsReq, rsp *pb.GridFightEquipCraftScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) + catalog, data, err := cwPreparingData(s) + if err != nil { + return nil + } + if _, ok := pb.ACNPGGHPDJB_name[int32(req.Source)]; !ok { + return nil + } + if req.JCNLCNFHHDG == 0 { + return nil + } + // Request offset +0x24 is target equipment (current wire tag 10), + // +0x28 is optional track ID (tag 13). Isolated current-Client wire + // evidence ev_6340e59770f2b6839244f07ec5054aefd568e58d9723650e3bbe1cdf1a7c2a25. + notify, err := cwCraftEquipment(catalog, data.DHFOFLFCLAH, req.EHDAKFEHPMF, req.JCNLCNFHHDG) + if err != nil { + PacketLog("CW_CRAFT rejected: " + err.Error()) + return nil + } + if err = s.saveCurrencyWarsData(data, catalog); err != nil { + return err + } + if err = cwSend(s, notify); err != nil { + return err + } + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("CW_CRAFT saved materials=%v target=%d track=%d revision=%d", req.EHDAKFEHPMF, req.JCNLCNFHHDG, req.NNFECNICMOD, s.currencyWarsRevision)) + return nil + }) +} diff --git a/internal/gameserver/currency_wars_dispatch.go b/internal/gameserver/currency_wars_dispatch.go new file mode 100644 index 0000000..9455273 --- /dev/null +++ b/internal/gameserver/currency_wars_dispatch.go @@ -0,0 +1,64 @@ +package gameserver + +import ( + "errors" + "fmt" + "io" + "net" + + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type cwPacketSendError struct{ cause error } + +func (e *cwPacketSendError) Error() string { return e.cause.Error() } +func (e *cwPacketSendError) Unwrap() error { return e.cause } + +// Mark every explicit send failure, including serialization/projection errors, +// so the request wrapper never attempts a second response after such a failure. +func cwSend(s *Session, message proto.Message) error { + if err := s.Send(message); err != nil { + return &cwPacketSendError{cause: err} + } + return nil +} + +// CW transactions report configuration/validation/save failures through their +// typed response. Returning these errors directly to the general dispatcher +// suppresses the response altogether and leaves the Client's wait block open. +// This does not manufacture success or retry a transaction after a failed save. +func cwHandle[ReqT any, RspT any](name string, fn func(*Session, *ReqT, *RspT) error) { + cwHandleNamed(name, name+"ScRsp", fn) +} + +func cwHandleNamed[ReqT any, RspT any](name, responseName string, fn func(*Session, *ReqT, *RspT) error) { + handleNamed(name, responseName, func(s *Session, req *ReqT, rsp *RspT) error { + err := fn(s, req, rsp) + if err == nil || errors.Is(err, errResponseAlreadySent) { + return err + } + // An actual transport failure belongs to the connection, not a new CW + // result packet. Preserve it for the network caller to handle. + var networkError net.Error + var sendError *cwPacketSendError + if errors.As(err, &sendError) || errors.As(err, &networkError) || errors.Is(err, io.EOF) || errors.Is(err, net.ErrClosed) { + return err + } + message, ok := any(rsp).(proto.Message) + if !ok { + return err + } + view := message.ProtoReflect() + retcode := view.Descriptor().Fields().ByName("retcode") + if retcode == nil || retcode.Kind() != protoreflect.Uint32Kind { + return err + } + if view.Get(retcode).Uint() == 0 { + view.Set(retcode, protoreflect.ValueOfUint32(uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS))) + } + PacketLog(fmt.Sprintf("CW_REQUEST failed request=%s response=%s retcode=%d error=%v", name, responseName, view.Get(retcode).Uint(), err)) + return nil + }) +} diff --git a/internal/gameserver/currency_wars_encounter.go b/internal/gameserver/currency_wars_encounter.go new file mode 100644 index 0000000..adefb4f --- /dev/null +++ b/internal/gameserver/currency_wars_encounter.go @@ -0,0 +1,64 @@ +package gameserver + +import ( + "fmt" + pb "gac-hkrpg-go/protocol/proto" +) + +// Current schema MOADBALHMFD is SelectedEliteBranchId in layer/sync and +// EliteBranchId in both requests. The reference SelectEncounter and +// BuildEncounterSelectionUpdateSync use a one-based offered-branch index. +func cwSetEncounterSelection(run *pb.MPIMAEMCEFH, index uint32) (*pb.KFNCAIHIHCM, error) { + stage, _ := cwStage(run) + if stage == nil { + return nil, fmt.Errorf("CW Encounter stage missing") + } + layer := stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ() + if layer == nil || len(layer.BPDABHGFBFO) < 2 || index == 0 || uint64(index) > uint64(len(layer.BPDABHGFBFO)) || layer.BPDABHGFBFO[index-1] == nil { + return nil, fmt.Errorf("CW Encounter branch is not in the active offer") + } + layer.MOADBALHMFD = index + return &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FGODNPLCECH{FGODNPLCECH: &pb.KEPIEGKPFIJ{MOADBALHMFD: index}}}, nil +} + +func cwSelectEncounter(run *pb.MPIMAEMCEFH, request *pb.OHAINOHGKCM) (*pb.GridFightSyncUpdateResultScNotify, error) { + if run.GetFMIGOKIDKJL().GetBAKAKODKECM() == nil || request == nil { + return nil, fmt.Errorf("CW Encounter selection is not active") + } + queue := run.FMIGOKIDKJL.QueuePosition + if queue == ^uint32(0) { + return nil, fmt.Errorf("CW pending identifiers exhausted") + } + selected, err := cwSetEncounterSelection(run, request.MOADBALHMFD) + if err != nil { + return nil, err + } + // Reference phase transition: SelectingEncounter -> AwaitingBattleReturn, + // followed by the ordinary ReturnPreparation action; no battle starts here. + pending := &pb.CHCHAJIANIM{QueuePosition: queue + 1, FGLIODAJFML: &pb.CHCHAJIANIM_LGNPHHBGKFH{LGNPHHBGKFH: &pb.HJPDALHDJHC{}}} + run.FMIGOKIDKJL = pending + return cwNotify(selected, cwFinish(queue), cwUnlock(), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}), nil +} + +func init() { + cwHandle("GridFightUpdateEliteBranchSelect", func(s *Session, req *pb.GridFightUpdateEliteBranchSelectCsReq, rsp *pb.GridFightUpdateEliteBranchSelectScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) + catalog, data, err := cwPreparingData(s) + if err != nil { + return nil + } + selected, err := cwSetEncounterSelection(data.DHFOFLFCLAH, req.MOADBALHMFD) + if err != nil { + PacketLog("CW_ENCOUNTER_UPDATE rejected: " + err.Error()) + return nil + } + if err = s.saveCurrencyWarsData(data, catalog); err != nil { + return nil + } + if err = cwSend(s, cwNotify(selected)); err != nil { + return err + } + rsp.Retcode = 0 + return nil + }) +} diff --git a/internal/gameserver/currency_wars_encounter_camp.go b/internal/gameserver/currency_wars_encounter_camp.go new file mode 100644 index 0000000..7dc9b16 --- /dev/null +++ b/internal/gameserver/currency_wars_encounter_camp.go @@ -0,0 +1,106 @@ +package gameserver + +import ( + "crypto/rand" + "fmt" + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "math/big" +) + +// Aligns an imported encounter template with this run's selected camp pool. +// The resource explicitly identifies this server's compatibility sampling +// policy; original-server generation weights are not claimed. Preserve wave +// count, stars, encounter IDs, difficulty, penalties and displayed rewards. +func cwAlignEncounterCamp(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (bool, error) { + if run.GetFMIGOKIDKJL().GetBAKAKODKECM() == nil { + return false, nil + } + stage, _ := cwStage(run) + if stage == nil { + return false, fmt.Errorf("CW Encounter stage missing") + } + layer := stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ() + if layer == nil || len(layer.BPDABHGFBFO) < 2 { + return false, fmt.Errorf("CW Encounter offer layer missing") + } + for _, camp := range stage.HEKMEJLMGFF { + if camp.LOGHLGKIFEN == layer.LNDKCPBJDKH { + return false, nil + } + } + rows, err := common.LoadCurrencyWarsMonsters(catalog) + if err != nil { + return false, err + } + required := map[uint32]bool{} + for _, plan := range layer.BPDABHGFBFO { + for _, wave := range plan.MonsterWaveList { + for _, monster := range wave.PBLBBDBDLEK { + row, ok := rows[monster.MonsterId] + if !ok { + return false, fmt.Errorf("CW template monster %d missing native tier", monster.MonsterId) + } + required[row.Tier] = true + } + } + } + type candidate struct { + id uint32 + pools map[uint32][]uint32 + } + var candidates []candidate + for _, camp := range stage.HEKMEJLMGFF { + data, e := catalog.MonsterCamp(run.LJNGPCKPJLF, camp.LOGHLGKIFEN) + if e != nil { + return false, e + } + pools := map[uint32][]uint32{} + complete := true + for _, id := range data.Season.MonsterList { + row, ok := rows[id] + if !ok { + complete = false + break + } + pools[row.Tier] = append(pools[row.Tier], id) + } + for tier := range required { + if len(pools[tier]) == 0 { + complete = false + } + } + if complete { + candidates = append(candidates, candidate{camp.LOGHLGKIFEN, pools}) + } + } + if len(candidates) == 0 { + return false, fmt.Errorf("CW no captured active camp supports Encounter tiers") + } + choose := func(n int) (int, error) { + v, e := rand.Int(rand.Reader, big.NewInt(int64(n))) + if e != nil { + return 0, e + } + return int(v.Int64()), nil + } + index, err := choose(len(candidates)) + if err != nil { + return false, err + } + selected := candidates[index] + for _, plan := range layer.BPDABHGFBFO { + for _, wave := range plan.MonsterWaveList { + for _, monster := range wave.PBLBBDBDLEK { + pool := selected.pools[rows[monster.MonsterId].Tier] + i, e := choose(len(pool)) + if e != nil { + return false, e + } + monster.MonsterId = pool[i] + } + } + } + layer.LNDKCPBJDKH = selected.id + return true, nil +} diff --git a/internal/gameserver/currency_wars_enemy.go b/internal/gameserver/currency_wars_enemy.go index 567a2a2..b504efb 100644 --- a/internal/gameserver/currency_wars_enemy.go +++ b/internal/gameserver/currency_wars_enemy.go @@ -29,6 +29,25 @@ type cwEnemyPlan struct { } `json:"waves"` } +// cwSelectedEnemyBranch resolves the one-based selection stored by the CW +// layer. Encounter layers can offer several enemy plans; choosing the first +// entry implicitly would fight a different branch from the one shown to the +// player. +func cwSelectedEnemyBranch(layer *pb.MDJBBILMHLC) (*pb.KKBGIPCAGGH, error) { + if layer == nil || len(layer.BPDABHGFBFO) == 0 { + return nil, fmt.Errorf("CW saved enemy layer has no offered plans") + } + selection := layer.MOADBALHMFD + if selection == 0 || uint64(selection) > uint64(len(layer.BPDABHGFBFO)) { + return nil, fmt.Errorf("CW selected enemy branch %d is outside %d offered plans", selection, len(layer.BPDABHGFBFO)) + } + plan := layer.BPDABHGFBFO[selection-1] + if plan == nil { + return nil, fmt.Errorf("CW selected enemy branch %d is empty", selection) + } + return plan, nil +} + // Only wave parameters are captured. Monster IDs and stars must agree with // the current run's saved layer, so a reference encounter never replaces it. func cwBuildNodeEnemy(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, stage *pb.BEEFLEJAOCN, node *pb.OHMDHKGAEMM, info *pb.SceneBattleInfo) error { @@ -56,26 +75,27 @@ func cwBuildNodeEnemy(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, return fmt.Errorf("CW enemy plan provenance missing") } } + layer := stage.IMPNAHBCADN.GetMPOBBIPMNNJ() + plan, err := cwSelectedEnemyBranch(layer) + if err != nil { + return err + } var recipe *cwEnemyPlan for i := range resource.Entries { r := &resource.Entries[i] - if r.Route == stage.EMOHLJHPOPC && r.Chapter == stage.DCAHJELNJNP && r.Section == stage.SectionId && r.Division == run.DivisionId && r.Overclock == run.IsOverlock && r.Stage == node.StageId && r.Penalty == node.IFIIOIIKJHO { + if r.Route == stage.EMOHLJHPOPC && r.Chapter == stage.DCAHJELNJNP && r.Section == stage.SectionId && r.Division == run.DivisionId && r.Overclock == run.IsOverlock && r.Stage == node.StageId && r.Penalty == plan.IFIIOIIKJHO { if recipe != nil { return fmt.Errorf("CW enemy plan duplicated") } recipe = r } } - if recipe == nil || recipe.Level == 0 || recipe.HardLevelGroup == 0 || recipe.EliteGroup == 0 || len(recipe.Waves) == 0 { - return fmt.Errorf("CW enemy plan not captured for this node/mode") + if recipe == nil { + return cwBuildReferenceBossEnemy(catalog, run, stage, node, info) } - layer := stage.IMPNAHBCADN.GetMPOBBIPMNNJ() - // This capture is an ordinary combat node with a single selected plan. - // Elite branch selection needs a separately mapped identity, not index 0. - if layer == nil || len(layer.BPDABHGFBFO) != 1 || layer.MOADBALHMFD != 1 { - return fmt.Errorf("CW current enemy layer is not a single selected plan") + if recipe.Level == 0 || recipe.HardLevelGroup == 0 || recipe.EliteGroup == 0 || len(recipe.Waves) == 0 { + return fmt.Errorf("CW enemy plan not captured for route=%d chapter=%d section=%d division=%d overclock=%t stage=%d branch=%d/%d penalty=%d", stage.EMOHLJHPOPC, stage.DCAHJELNJNP, stage.SectionId, run.DivisionId, run.IsOverlock, node.StageId, layer.MOADBALHMFD, len(layer.BPDABHGFBFO), plan.IFIIOIIKJHO) } - plan := layer.BPDABHGFBFO[0] if plan.IFIIOIIKJHO != recipe.Penalty || plan.EPPHOFDAEMI != recipe.ExtraDifficulty || len(plan.MonsterWaveList) != len(recipe.Waves) { return fmt.Errorf("CW saved enemy plan differs from captured wave schema") } @@ -118,7 +138,7 @@ func cwBuildNodeEnemy(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, info.MonsterWaveList = waves grid := info.EIGMKOJOEEI grid.IOCKDJCDMAH = &pb.MIPDJDJLGPL{EMOHLJHPOPC: stage.EMOHLJHPOPC, DCAHJELNJNP: stage.DCAHJELNJNP, SectionId: stage.SectionId, CJCCMAACJDB: node.CJCCMAACJDB} - grid.IFIIOIIKJHO = node.IFIIOIIKJHO + grid.IFIIOIIKJHO = recipe.Penalty grid.LODNFLMBIEH = division.EnemyHardLevel grid.BattleWaveId = recipe.Waves[0].ID return nil diff --git a/internal/gameserver/currency_wars_entry_choice.go b/internal/gameserver/currency_wars_entry_choice.go index 5726558..b28f645 100644 --- a/internal/gameserver/currency_wars_entry_choice.go +++ b/internal/gameserver/currency_wars_entry_choice.go @@ -128,18 +128,16 @@ func init() { // The revision's request name is misleading. Controlled reference replay // establishes this request's MFFCPLBNHCF arm as portal selection and its // response as GridFightHandlePendingActionScRsp. No numeric alias is used. - handleNamed("GridFightHandleBonfireHealHp", "GridFightHandlePendingActionScRsp", func(s *Session, req *goproto.GridFightHandleBonfireHealHpCsReq, rsp *goproto.GridFightHandlePendingActionScRsp) (resultErr error) { + cwHandleNamed("GridFightHandleBonfireHealHp", "GridFightHandlePendingActionScRsp", func(s *Session, req *goproto.GridFightHandleBonfireHealHpCsReq, rsp *goproto.GridFightHandlePendingActionScRsp) error { rsp.QueuePosition = req.QueuePosition rsp.Retcode = uint32(goproto.Retcode_RET_GRID_FIGHT_CONF_MISS) - defer func() { - if resultErr != nil { - PacketLog(fmt.Sprintf("CW_PENDING_ACTION failed queue=%d error=%v", req.QueuePosition, resultErr)) - rsp.Retcode = uint32(goproto.Retcode_RET_GRID_FIGHT_CONF_MISS) - resultErr = nil // Send the typed error response so the wait block is released. - } - }() selection := req.GetMFFCPLBNHCF() - if selection == nil && req.GetNNDGEJFLGGF() == nil && req.GetLGNPHHBGKFH() == nil && req.GetIBCHMBNIPLK() == nil && req.GetDKDFDGJGIHM() == nil { + if req.GetIIDBLCFAAPC() != nil { + if _, active := CURRENT_BATTLE.Load(s.Token); active { + return fmt.Errorf("CW Bonfire selection cannot change during Battle") + } + } + if selection == nil && req.GetNNDGEJFLGGF() == nil && req.GetLGNPHHBGKFH() == nil && req.GetIBCHMBNIPLK() == nil && req.GetDKDFDGJGIHM() == nil && req.GetFIKAGBAEOAP() == nil && req.GetBAKAKODKECM() == nil && req.GetIIDBLCFAAPC() == nil { PacketLog(fmt.Sprintf("CW_PENDING_ACTION unsupported queue=%d action=%T", req.QueuePosition, req.FGLIODAJFML)) return nil } @@ -166,29 +164,29 @@ func init() { } var after *goproto.MPIMAEMCEFH var notify *goproto.GridFightSyncUpdateResultScNotify + var runtime *common.CurrencyWarsRuntimeState if selection != nil { after, notify, err = currencyWarsEntryChoice(catalog, before, req.QueuePosition, selection.JCAPCNLJGFC) } else { after = proto.Clone(before).(*goproto.MPIMAEMCEFH) switch { + case req.GetIIDBLCFAAPC() != nil && before.FMIGOKIDKJL.GetIIDBLCFAAPC() != nil: + notify, runtime, err = cwSelectBonfire(catalog, after, req.GetIIDBLCFAAPC()) + case req.GetBAKAKODKECM() != nil && before.FMIGOKIDKJL.GetBAKAKODKECM() != nil: + notify, err = cwSelectEncounter(after, req.GetBAKAKODKECM()) + case req.GetFIKAGBAEOAP() != nil && before.FMIGOKIDKJL.GetFIKAGBAEOAP() != nil: + notify, err = cwSelectSupply(catalog, after, req.GetFIKAGBAEOAP()) case req.GetDKDFDGJGIHM() != nil && before.FMIGOKIDKJL.GetEEKMIAMGHFL() != nil: notify, err = cwSelectSpotlight(catalog, after, req.GetDKDFDGJGIHM()) case req.GetNNDGEJFLGGF() != nil && before.FMIGOKIDKJL.GetNNDGEJFLGGF() != nil: stage, _ := cwStage(after) - entries, loadErr := cwNodeTransitions(catalog) - isNextRound := false - if loadErr == nil && stage != nil { - for _, entry := range entries { - level := new(goproto.AINFNFIDGFF) - if proto.Unmarshal(entry.LevelWire, level) == nil && level.DCAHJELNJNP == stage.DCAHJELNJNP && level.SectionId == stage.SectionId { - isNextRound = true - } - } - } - if isNextRound { - notify, err = cwNextRound(catalog, after) - } else { + route, loadErr := catalog.RouteNodes(stage.GetEMOHLJHPOPC()) + if loadErr != nil || len(route) == 0 { + err = fmt.Errorf("CW RoundBegin route missing: %v", loadErr) + } else if stage.DCAHJELNJNP == route[0].ChapterID && stage.SectionId == route[0].SectionID { notify, err = cwInitialRound(catalog, after) + } else { + notify, err = cwNextRound(catalog, after) } case req.GetLGNPHHBGKFH() != nil && before.FMIGOKIDKJL.GetLGNPHHBGKFH() != nil: notify, err = cwReturnPreparation(after) @@ -203,12 +201,25 @@ func init() { return nil } data.DHFOFLFCLAH = after - if err := s.saveCurrencyWarsData(data, catalog); err != nil { + runtime, err = cwApplyBonfireEnemyRules(catalog, after, runtime) + if err != nil { return err } + // Enemy stars and their one-time rule marker must commit together. + if stage, _ := cwStage(after); stage != nil && runtime.Rules["PetPalStarDown"] != 0 && stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ() != nil { + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, cwNotify(&goproto.KFNCAIHIHCM{MNLCHEJKDHO: &goproto.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: &goproto.AINFNFIDGFF{DCAHJELNJNP: stage.DCAHJELNJNP, SectionId: stage.SectionId, IMPNAHBCADN: stage.IMPNAHBCADN}}}).GCPNIHHBGGD...) + } + if err := s.saveCurrencyWarsDataWithRuntime(data, catalog, runtime); err != nil { + return err + } + if req.GetIIDBLCFAAPC().GetECDACDNDHGO() != nil { + player, _, _ := cwComponents(after) + stage, _ := cwStage(after) + PacketLog(fmt.Sprintf("CW_BONFIRE_TAKE saved old_queue=%d gold=%d level=%d exp=%d next=%d/%d revision=%d", req.QueuePosition, player.Gold, player.EHNJDIDABHD, player.GridFightCurLevelExp, stage.DCAHJELNJNP, stage.SectionId, s.currencyWarsRevision)) + } // Save before synchronizing, then finish the request after the ordered // notification, matching the reference's pending-action callback flow. - if err := s.Send(notify); err != nil { + if err := cwSend(s, notify); err != nil { return err } rsp.Retcode = 0 diff --git a/internal/gameserver/currency_wars_equipment.go b/internal/gameserver/currency_wars_equipment.go new file mode 100644 index 0000000..ffbb507 --- /dev/null +++ b/internal/gameserver/currency_wars_equipment.go @@ -0,0 +1,227 @@ +package gameserver + +import ( + "fmt" + "slices" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +// These discriminators are GridFightEquipmentType / GridFightEquipDressType +// definitions, mirrored by the reference equipment rule switch. Item IDs, +// limits, role restrictions and properties always come from Client resources. +const ( + cwEquipNormal uint32 = iota + cwEquipImplant +) +const ( + cwDressNotUnique uint32 = iota + cwDressUnique + cwDressEmpty + cwDressLeader + cwDressTraitOnly + cwDressUniqueExclusiveTrait + cwDressRoleOnly +) + +func cwEquipmentBag(run *pb.MPIMAEMCEFH) *pb.CONONEALNOF { + for _, component := range run.NAGDJGMMCBE { + if bag := component.GetGCKLIONKMJC(); bag != nil { + return bag + } + } + return nil +} + +func cwCanDressEquipment(c *common.CurrencyWarsCatalog, equipment map[uint32]common.CurrencyWarsEquipment, bag *pb.CONONEALNOF, role *pb.CDEAABODKCP, gear *pb.IJDLENJJBHJ) error { + row, ok := equipment[gear.GridFightEquipmentId] + if !ok { + return fmt.Errorf("equipment configuration is not captured") + } + config, err := c.CapturedRole(role.Id) + if err != nil { + return err + } + limitName := "GridFight_AvatarDressEquipNum" + if row.EquipType == cwEquipImplant { + limitName = "GridFight_AvatarDressImplantsNum" + } else if row.EquipType != cwEquipNormal { + return fmt.Errorf("equipment type is unsupported") + } + limit, err := c.IntegerRule(limitName) + if err != nil || limit < 0 { + return fmt.Errorf("equipment slot limit is missing") + } + var sameType int64 + unique := true + for _, uid := range role.PNJIPHJJONG { + index := slices.IndexFunc(bag.GridFightEquipmentList, func(x *pb.IJDLENJJBHJ) bool { return x != nil && x.UniqueId == uid }) + if index < 0 { + return fmt.Errorf("equipped item is absent from inventory") + } + other, exists := equipment[bag.GridFightEquipmentList[index].GridFightEquipmentId] + if !exists { + return fmt.Errorf("equipped item configuration is missing") + } + if other.EquipType == row.EquipType { + sameType++ + } + if other.ItemID == row.ItemID { + unique = false + } + if row.EquipType == cwEquipNormal && other.EquipType == cwEquipNormal && other.DressRule == cwDressEmpty { + return fmt.Errorf("existing equipment requires all other slots empty") + } + } + if row.NeedEquipSlot && sameType >= limit { + return fmt.Errorf("equipment slots are full") + } + allowed := false + switch row.DressRule { + case cwDressNotUnique: + allowed = true + case cwDressUnique: + allowed = unique + case cwDressEmpty: + allowed = sameType == 0 + case cwDressLeader: + allowed = role.Pos == 1 + case cwDressTraitOnly: + for _, trait := range row.DressRuleParamList { + if slices.Contains(config.Config.TraitList, trait) { + allowed = true + } + } + case cwDressUniqueExclusiveTrait: + allowed = unique + for _, trait := range row.DressRuleParamList { + if slices.Contains(config.Config.TraitList, trait) { + allowed = false + } + } + case cwDressRoleOnly: + allowed = slices.Contains(row.DressRuleParamList, role.Id) + } + if !allowed { + return fmt.Errorf("equipment dress restriction does not match target") + } + return nil +} + +func init() { + cwHandle("GridFightEquipDress", func(s *Session, req *pb.GridFightEquipDressCsReq, rsp *pb.GridFightEquipDressScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) + catalog, data, err := cwPreparingData(s) + if err != nil { + return nil + } + run := data.DHFOFLFCLAH + _, team, _ := cwComponents(run) + bag := cwEquipmentBag(run) + if team == nil || bag == nil || req.PEBCBLBLMPH == 0 || req.MDNAGANGNKK == 0 { + return nil + } + if _, ok := pb.DMGOKGLBNJJ_name[int32(req.CPFCNOAJCGK)]; !ok { + return nil + } + // All entities have run-global unique IDs. CPFCNOAJCGK is the operation + // source (None/Manual/Recommend), not the target's entity kind. + var role *pb.CDEAABODKCP + for _, x := range team.GridGameRoleList { + if x.UniqueId == req.MDNAGANGNKK { + role = x + break + } + } + if role == nil { + return nil + } + var gear *pb.IJDLENJJBHJ + for _, x := range bag.GridFightEquipmentList { + if x.UniqueId == req.PEBCBLBLMPH { + gear = x + break + } + } + if gear == nil || slices.Contains(role.PNJIPHJJONG, gear.UniqueId) { + return nil + } + equipment, err := common.LoadCurrencyWarsEquipment(catalog) + if err != nil { + PacketLog("CW_EQUIP_DRESS rejected: " + err.Error()) + return nil + } + // Dressing a component onto an existing component crafts the pair on + // that role. Resolve the pair through the captured current recipe table. + recipes, err := common.LoadCurrencyWarsCrafts(catalog) + if err != nil { + PacketLog("CW_EQUIP_DRESS rejected: " + err.Error()) + return nil + } + for _, equippedUID := range role.PNJIPHJJONG { + var other *pb.IJDLENJJBHJ + for _, x := range bag.GridFightEquipmentList { + if x.UniqueId == equippedUID { + other = x + break + } + } + if other == nil { + return nil + } + recipe, recipeErr := cwCraftRecipe(recipes, 0, []uint32{gear.GridFightEquipmentId, other.GridFightEquipmentId}) + if recipeErr != nil { + continue + } + // Auto-craft cannot take a component from another wearer. + for _, x := range team.GridGameRoleList { + if x.UniqueId != role.UniqueId && slices.Contains(x.PNJIPHJJONG, gear.UniqueId) { + return nil + } + } + notify, craftErr := cwCraftEquipmentOnRole(catalog, run, []uint32{gear.UniqueId, other.UniqueId}, recipe.CraftEquipID, role) + if craftErr != nil { + PacketLog("CW_EQUIP_DRESS auto-craft rejected: " + craftErr.Error()) + return nil + } + if err = s.saveCurrencyWarsData(data, catalog); err != nil { + return err + } + if err = cwSend(s, notify); err != nil { + return err + } + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("CW_EQUIP_DRESS auto-crafted role=%d target=%d revision=%d", role.UniqueId, recipe.CraftEquipID, s.currencyWarsRevision)) + return nil + } + if err = cwCanDressEquipment(catalog, equipment, bag, role, gear); err != nil { + PacketLog("CW_EQUIP_DRESS rejected: " + err.Error()) + return nil + } + var changed []*pb.KFNCAIHIHCM + for _, other := range team.GridGameRoleList { + if slices.Contains(other.PNJIPHJJONG, gear.UniqueId) { + other.PNJIPHJJONG = slices.DeleteFunc(other.PNJIPHJJONG, func(id uint32) bool { return id == gear.UniqueId }) + changed = append(changed, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PIDDDHKPDDM{PIDDDHKPDDM: other}}) + } + } + // Moving from NPC equipment needs the verified NPC-update sync arm. + for _, npc := range team.GridGameNpcList { + if slices.Contains(npc.PNJIPHJJONG, gear.UniqueId) { + return nil + } + } + role.PNJIPHJJONG = append(role.PNJIPHJJONG, gear.UniqueId) + changed = append(changed, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PIDDDHKPDDM{PIDDDHKPDDM: role}}) + if err = s.saveCurrencyWarsData(data, catalog); err != nil { + return err + } + if err = cwSend(s, cwNotify(changed...)); err != nil { + return err + } + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("CW_EQUIP_DRESS saved role=%d equipment=%d revision=%d", role.UniqueId, gear.UniqueId, s.currencyWarsRevision)) + return nil + }) +} diff --git a/internal/gameserver/currency_wars_experience.go b/internal/gameserver/currency_wars_experience.go index 3d17cdb..abe3086 100644 --- a/internal/gameserver/currency_wars_experience.go +++ b/internal/gameserver/currency_wars_experience.go @@ -44,7 +44,7 @@ func cwCapacitySync(player *pb.NIHNGPKHEPC) *pb.KFNCAIHIHCM { } func init() { - handle("GridFightBuyExp", func(s *Session, _ *pb.GridFightBuyExpCsReq, rsp *pb.GridFightBuyExpScRsp) error { + cwHandle("GridFightBuyExp", func(s *Session, _ *pb.GridFightBuyExpCsReq, rsp *pb.GridFightBuyExpScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) catalog, data, err := cwPreparingData(s) if err != nil { @@ -66,6 +66,7 @@ func init() { } gain, err := catalog.IntegerRule("GridFight_LevelUpExp") if err != nil || gain <= 0 || uint64(gain) > uint64(^uint32(0)) { + PacketLog(fmt.Sprintf("CW_BUY_EXP rejected: missing or invalid GridFight_LevelUpExp rule value=%d error=%v", gain, err)) rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS) return nil } @@ -80,7 +81,7 @@ func init() { } notify := cwNotify(cwGoldSync(player.Gold), cwCapacitySync(player), cwShopSync(shop), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PLPHEIBLPDL{PLPHEIBLPDL: &pb.PIHKLPJGEPM{Level: player.EHNJDIDABHD, Exp: player.GridFightCurLevelExp, HFMKLAPEKFA: player.NDAINFLOLPJ}}}) notify.GCPNIHHBGGD[0].GridUpdateSrc = pb.JJDFGMMMCMI_JJDFGMMMCMI_IHEKGIGCGEC - if err = s.Send(notify); err != nil { + if err = cwSend(s, notify); err != nil { return err } rsp.Retcode = 0 diff --git a/internal/gameserver/currency_wars_forge.go b/internal/gameserver/currency_wars_forge.go new file mode 100644 index 0000000..50ee03b --- /dev/null +++ b/internal/gameserver/currency_wars_forge.go @@ -0,0 +1,146 @@ +package gameserver + +import ( + "crypto/rand" + "fmt" + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "math/big" + "slices" + "sort" +) + +// Current Client GridFightForgeFuncType metadata: Equip = 1. +const cwForgeEquipment uint32 = 1 + +func cwFreeBenchPosition(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (uint32, error) { + player, team, _ := cwComponents(run) + if player == nil || team == nil { + return 0, fmt.Errorf("CW team missing") + } + front, err := c.IntegerRule("GridFight_Front_AvatarMaxNum") + if err != nil { + return 0, err + } + back, err := c.IntegerRule("GridFight_Back_AvatarMaxNum") + if err != nil { + return 0, err + } + used := map[uint32]bool{} + for _, r := range team.GridGameRoleList { + used[r.Pos] = true + } + for _, r := range team.KCOMPKMJCMC { + used[r.Pos] = true + } + for _, r := range team.PMEOPPDAMLM { + used[r.Pos] = true + } + for p := uint64(front) + uint64(back) + 1; p <= uint64(front)+uint64(back)+uint64(player.MICEOJBAKGN) && p <= uint64(^uint32(0)); p++ { + if !used[uint32(p)] { + return uint32(p), nil + } + } + return 0, fmt.Errorf("CW bench full") +} + +// GM offers use a uniform draw without replacement from captured equipment of +// the configured category, matching the reference RollForgeEquipment policy. +// This does not claim original server weights or implement Role/Expert actions. +func cwGrantForge(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, id uint32) (*pb.KFNCAIHIHCM, error) { + rewards, err := common.LoadCurrencyWarsRewards(c) + if err != nil { + return nil, err + } + row, ok := rewards.Forges[id] + if !ok { + return nil, fmt.Errorf("forge %d not captured", id) + } + if row.FuncType != cwForgeEquipment || len(row.ParamList) == 0 { + return nil, fmt.Errorf("forge function %d needs its Role/Expert pending action", row.FuncType) + } + gear, err := common.LoadCurrencyWarsEquipment(c) + if err != nil { + return nil, err + } + var pool []uint32 + for id, e := range gear { + if e.EquipCategory == row.ParamList[0] { + pool = append(pool, id) + } + } + sort.Slice(pool, func(i, j int) bool { return pool[i] < pool[j] }) + if uint64(len(pool)) < uint64(row.EquipNum) { + return nil, fmt.Errorf("forge equipment category capture incomplete") + } + pos, err := cwFreeBenchPosition(c, run) + if err != nil { + return nil, err + } + uid, err := cwNextEntityID(run) + if err != nil { + return nil, err + } + forge := &pb.DDAMEHEPOBD{UniqueId: uid, Pos: pos, LCLPEJHEAID: id} + for i := uint32(0); i < row.EquipNum; i++ { + n, e := rand.Int(rand.Reader, big.NewInt(int64(len(pool))-int64(i))) + if e != nil { + return nil, e + } + j := int(i) + int(n.Int64()) + pool[i], pool[j] = pool[j], pool[i] + forge.CKJAKKNOHEK = append(forge.CKJAKKNOHEK, &pb.MBPDIPLJMKN{OFJBCEDFLKL: &pb.MBPDIPLJMKN_GGMPEGMEHPD{GGMPEGMEHPD: &pb.ELGLKEAPLGM{GridFightEquipmentId: pool[i]}}}) + } + _, team, _ := cwComponents(run) + team.PMEOPPDAMLM = append(team.PMEOPPDAMLM, forge) + // Current _ProcessUpdateInfo: tag 1821 -> Team.AddForge; 1257 -> UpdateForge. + return &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OLCKALFILKK{OLCKALFILKK: forge}}, nil +} + +func init() { + cwHandle("GridFightUseForge", func(s *Session, req *pb.GridFightUseForgeCsReq, rsp *pb.GridFightUseForgeScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) + c, data, err := cwPreparingData(s) + if err != nil { + return nil + } + run := data.DHFOFLFCLAH + _, team, _ := cwComponents(run) + if team == nil { + return nil + } + index := slices.IndexFunc(team.PMEOPPDAMLM, func(x *pb.DDAMEHEPOBD) bool { return x.UniqueId == req.UniqueId }) + if index < 0 { + return nil + } + forge := team.PMEOPPDAMLM[index] + rewards, err := common.LoadCurrencyWarsRewards(c) + if err != nil { + return err + } + row, ok := rewards.Forges[forge.LCLPEJHEAID] + if !ok || row.FuncType != cwForgeEquipment || uint64(req.PFIKCNFBGHE) >= uint64(len(forge.CKJAKKNOHEK)) { + return nil + } + // Zero-based choice index follows the reference UseForge contract. Current + // request names remain obfuscated; record the index in the gameplay log. + id := forge.CKJAKKNOHEK[req.PFIKCNFBGHE].GetGGMPEGMEHPD().GetGridFightEquipmentId() + notify, err := cwApplyCommand(c, run, common.CurrencyWarsCommand{Field: "equip", Value: id, Quantity: 1}) + if err != nil { + PacketLog("CW_FORGE_USE rejected: " + err.Error()) + return nil + } + team.PMEOPPDAMLM = slices.Delete(team.PMEOPPDAMLM, index, index+1) + // tag 703 -> Team.RemoveForge(UInt32), verified through the current switch. + notify.GCPNIHHBGGD[0].JKPJFKCBIEM = append([]*pb.KFNCAIHIHCM{{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OACCGHIHLBA{OACCGHIHLBA: req.UniqueId}}}, notify.GCPNIHHBGGD[0].JKPJFKCBIEM...) + if err = s.saveCurrencyWarsData(data, c); err != nil { + return err + } + if err = cwSend(s, notify); err != nil { + return err + } + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("CW_FORGE_USE saved uid=%d index=%d equipment=%d revision=%d", req.UniqueId, req.PFIKCNFBGHE, id, s.currencyWarsRevision)) + return nil + }) +} diff --git a/internal/gameserver/currency_wars_grants.go b/internal/gameserver/currency_wars_grants.go new file mode 100644 index 0000000..3ae3ebe --- /dev/null +++ b/internal/gameserver/currency_wars_grants.go @@ -0,0 +1,223 @@ +package gameserver + +import ( + "fmt" + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "maps" +) + +// Grant transactions operate on the detached Preparation snapshot, then the +// caller saves before sending the same acquisition updates used by Supply/shop. +func cwApplyCommand(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, cmd common.CurrencyWarsCommand) (*pb.GridFightSyncUpdateResultScNotify, error) { + player, team, shop := cwComponents(run) + if player == nil { + return nil, fmt.Errorf("CW player missing") + } + switch cmd.Field { + case "gold": + player.Gold = cmd.Value + return cwNotify(cwGoldSync(player.Gold)), nil + case "hp": + if cmd.Value == 0 || cmd.Value > player.PPKKHHNEOHB { + return nil, fmt.Errorf("HP must be 1..%d", player.PPKKHHNEOHB) + } + player.GridFightLineupHp = cmd.Value + return cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GridFightLineupHp{GridFightLineupHp: &pb.FMJDDIHBELC{GridFightLineupHp: cmd.Value, PPKKHHNEOHB: player.PPKKHHNEOHB}}}), nil + case "exp": + if shop == nil { + return nil, fmt.Errorf("CW shop missing") + } + if err := cwApplyBaseExperience(c, player, shop, cmd.Value); err != nil { + return nil, err + } + return cwNotify(cwCapacitySync(player), cwShopSync(shop), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PLPHEIBLPDL{PLPHEIBLPDL: &pb.PIHKLPJGEPM{Level: player.EHNJDIDABHD, Exp: player.GridFightCurLevelExp, HFMKLAPEKFA: player.NDAINFLOLPJ}}}), nil + case "equip": + items, err := common.LoadCurrencyWarsEquipment(c) + if err != nil { + return nil, err + } + if _, ok := items[cmd.Value]; !ok { + return nil, fmt.Errorf("equipment %d not captured", cmd.Value) + } + bag := cwEquipmentBag(run) + if bag == nil { + return nil, fmt.Errorf("CW equipment bag missing") + } + quantity := cmd.Quantity + if quantity == 0 { + quantity = 1 + } // Existing scalar queue format. + if uint64(quantity) > uint64(^uint32(0))-uint64(len(bag.GridFightEquipmentList)) { + return nil, fmt.Errorf("equipment count overflow") + } + added := &pb.AOFOEOIJEHF{} + for i := uint32(0); i < quantity; i++ { + uid, e := cwNextEntityID(run) + if e != nil { + return nil, e + } + // Source zero is protocol Default. Do not impersonate a Supply reward. + gear := &pb.IJDLENJJBHJ{UniqueId: uid, GridFightEquipmentId: cmd.Value} + bag.GridFightEquipmentList = append(bag.GridFightEquipmentList, gear) + added.GridFightEquipmentList = append(added.GridFightEquipmentList, gear) + } + return cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_LMOLELDIKMA{LMOLELDIKMA: added}}), nil + case "orb": + rewards, err := common.LoadCurrencyWarsRewards(c) + if err != nil { + return nil, err + } + if _, ok := rewards.Orbs[cmd.Value]; !ok { + return nil, fmt.Errorf("Orb %d not captured", cmd.Value) + } + var orbs *pb.DBONCGFHHDN + for _, component := range run.NAGDJGMMCBE { + if x := component.GetDBAGKJNPDOL(); x != nil { + orbs = x + } + } + if orbs == nil { + return nil, fmt.Errorf("CW Orb component missing") + } + quantity := cmd.Quantity + if quantity == 0 { + quantity = 1 + } + notify := cwNotify() + for i := uint32(0); i < quantity; i++ { + uid, e := cwNextEntityID(run) + if e != nil { + return nil, e + } + orbs.MDKGCIKOMLI = append(orbs.MDKGCIKOMLI, &pb.IBPDPCOGDEP{UniqueId: uid, LDBNOMPCOKK: cmd.Value}) + notify.GCPNIHHBGGD[0].JKPJFKCBIEM = append(notify.GCPNIHHBGGD[0].JKPJFKCBIEM, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_AFILIPBHMOO{AFILIPBHMOO: &pb.MMEDLCAENAL{UniqueId: uid, LDBNOMPCOKK: cmd.Value}}}) + } + return notify, nil + case "consumable": + rewards, err := common.LoadCurrencyWarsRewards(c) + if err != nil { + return nil, err + } + if _, ok := rewards.Consumables[cmd.Value]; !ok { + return nil, fmt.Errorf("consumable %d not captured", cmd.Value) + } + bag := cwEquipmentBag(run) + if bag == nil { + return nil, fmt.Errorf("CW bag missing") + } + quantity := cmd.Quantity + if quantity == 0 { + quantity = 1 + } + if quantity > uint32(^uint32(0)>>1) { + return nil, fmt.Errorf("consumable delta exceeds protocol int32") + } + var row *pb.LALKBPJANIH + var group uint32 + for _, x := range bag.IPMKOMEHBMP { + if x.GroupId > group { + group = x.GroupId + } + if x.ItemId == cmd.Value { + row = x + } + } + fresh := row == nil + if fresh { + if group == ^uint32(0) { + return nil, fmt.Errorf("consumable groups exhausted") + } + row = &pb.LALKBPJANIH{GroupId: group + 1, ItemId: cmd.Value} + bag.IPMKOMEHBMP = append(bag.IPMKOMEHBMP, row) + } + if uint64(row.Num)+uint64(quantity) > uint64(^uint32(0)) { + return nil, fmt.Errorf("consumable stack overflow") + } + row.Num += quantity + info := &pb.AOFOEOIJEHF{PFMDKHIDDLB: []*pb.FLGMGNEOFBH{{GroupId: row.GroupId, ItemId: row.ItemId, Num: row.Num, RoundCnt: row.RoundCnt, HFNNNGHBHGG: int32(quantity)}}} + update := &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_DDBKEOPKPFI{DDBKEOPKPFI: info}} + if fresh { + update.MNLCHEJKDHO = &pb.KFNCAIHIHCM_LMOLELDIKMA{LMOLELDIKMA: info} + } + return cwNotify(update), nil + case "forge": + quantity := cmd.Quantity + if quantity == 0 { + quantity = 1 + } + notify := cwNotify() + for i := uint32(0); i < quantity; i++ { + update, err := cwGrantForge(c, run, cmd.Value) + if err != nil { + return nil, err + } + notify.GCPNIHHBGGD[0].JKPJFKCBIEM = append(notify.GCPNIHHBGGD[0].JKPJFKCBIEM, update) + } + return notify, nil + case "role": + if team == nil || len(team.GridGameRoleList) == 0 { + return nil, fmt.Errorf("CW role property template missing") + } + if _, err := c.CapturedRoleVariant(cmd.Value, cmd.Star); err != nil { + return nil, err + } + scales := team.GridGameRoleList[0].ConvertPropertyToFixpoint + for _, r := range team.GridGameRoleList { + if !maps.Equal(scales, r.ConvertPropertyToFixpoint) { + return nil, fmt.Errorf("role property templates differ") + } + } + front, err := c.IntegerRule("GridFight_Front_AvatarMaxNum") + if err != nil { + return nil, err + } + back, err := c.IntegerRule("GridFight_Back_AvatarMaxNum") + if err != nil { + return nil, err + } + quantity := cmd.Quantity + if quantity == 0 { + quantity = 1 + } + notify := &pb.GridFightSyncUpdateResultScNotify{} + for i := uint32(0); i < quantity; i++ { + occupied := map[uint32]bool{} + for _, r := range team.GridGameRoleList { + occupied[r.Pos] = true + } + for _, r := range team.KCOMPKMJCMC { + occupied[r.Pos] = true + } + for _, f := range team.PMEOPPDAMLM { + occupied[f.Pos] = true + } + var pos uint32 + for p := uint64(front) + uint64(back) + 1; p <= uint64(front)+uint64(back)+uint64(player.MICEOJBAKGN) && p <= uint64(^uint32(0)); p++ { + if !occupied[uint32(p)] { + pos = uint32(p) + break + } + } + uid, e := cwNextEntityID(run) + if e != nil { + return nil, e + } + role := &pb.CDEAABODKCP{Id: cmd.Value, RoleStar: cmd.Star, UniqueId: uid, Pos: pos, ConvertPropertyToFixpoint: maps.Clone(scales)} + team.GridGameRoleList = append(team.GridGameRoleList, role) + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PIDDDHKPDDM{PIDDDHKPDDM: role}}).GCPNIHHBGGD...) + merged, e := cwMergeRoles(c, run, uid) + if e != nil { + return nil, e + } + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, merged...) + for _, r := range team.GridGameRoleList { + if r.Pos == 0 { + return nil, fmt.Errorf("CW bench full; entire grant cancelled") + } + } + } + return notify, nil + } + return nil, fmt.Errorf("unknown CW command %q", cmd.Field) +} diff --git a/internal/gameserver/currency_wars_merge.go b/internal/gameserver/currency_wars_merge.go index 2b414c6..0c63796 100644 --- a/internal/gameserver/currency_wars_merge.go +++ b/internal/gameserver/currency_wars_merge.go @@ -106,6 +106,14 @@ func cwMergeRoles(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, preferred } team.GridGameRoleList = append(kept, merged) group.JKPJFKCBIEM = append(group.JKPJFKCBIEM, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PIDDDHKPDDM{PIDDDHKPDDM: proto.Clone(merged).(*pb.CDEAABODKCP)}}) + if state := cwSpotlights(run); state != nil { + for _, binding := range state.FNNEPMAPOOF { + if removed[binding.MDNAGANGNKK] { + binding.MDNAGANGNKK = merged.UniqueId + group.JKPJFKCBIEM = append(group.JKPJFKCBIEM, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OHHBBOGFDON{OHHBBOGFDON: proto.Clone(binding).(*pb.FMBACDOFCAL)}}) + } + } + } groups = append(groups, group) preferred = id } diff --git a/internal/gameserver/currency_wars_node.go b/internal/gameserver/currency_wars_node.go index a0350ec..af0e43c 100644 --- a/internal/gameserver/currency_wars_node.go +++ b/internal/gameserver/currency_wars_node.go @@ -12,7 +12,7 @@ import ( // a SceneBattleInfo stage ID. type currencyWarsNodeScalars struct { StageID, RawType, BasicReward, AugmentKind uint32 - HasExpert, HasSpotLight bool + IsBonfire, HasSpotLight bool } // Native GridFightStageNode._RefreshCachedFields at RVA 0xdc09fa0, corroborated @@ -30,7 +30,9 @@ func (n currencyWarsNodeScalars) applyProto(dst *goproto.OHMDHKGAEMM, catalog *c dst.CJCCMAACJDB = n.RawType dst.PICMDONCKCO = n.BasicReward dst.PFEMDGNFHNH = n.AugmentKind - dst.FCNNBODJNIK = n.HasExpert + // Updated reference GridFightNodeTemplateInfo names tag 11 + // is_bonfire_node; the current Client's IsBonfireNode capture agrees. + dst.FCNNBODJNIK = n.IsBonfire dst.HPNNLMBHOPF = n.HasSpotLight return nil } diff --git a/internal/gameserver/currency_wars_orb.go b/internal/gameserver/currency_wars_orb.go new file mode 100644 index 0000000..23ea596 --- /dev/null +++ b/internal/gameserver/currency_wars_orb.go @@ -0,0 +1,382 @@ +package gameserver + +import ( + "crypto/rand" + "errors" + "fmt" + "math/big" + "slices" + "sort" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +// The current named command table, FFGO's extracted descriptor, and the native +// GridFightOrbServerData.GetOrb sender agree on this request and its wire tags. +// Do not introduce a numeric alias for the reference's descriptive name. +func init() { + rawNamed("IKMOCJBMGOJ", func(s *Session, payload []byte) error { + rsp := &pb.PNHDGCBLPGD{Retcode: uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH)} + var req pb.IKMOCJBMGOJ + if err := proto.Unmarshal(payload, &req); err != nil { + return cwSend(s, rsp) + } + if err := cwUseOrbs(s, &req); err != nil { + var sendError *cwPacketSendError + if errors.As(err, &sendError) { + return err + } + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS) + PacketLog("CW_USE_ORB rejected without consuming: " + err.Error()) + return cwSend(s, rsp) + } + rsp.Retcode = 0 + return cwSend(s, rsp) + }) +} + +type cwOrbPayout struct { + UID uint32 + Drop *pb.GridFightDropInfo + Updates []*pb.KFNCAIHIHCM +} + +func cwUseOrbs(s *Session, req *pb.IKMOCJBMGOJ) error { + c, data, err := cwPreparingData(s) + if err != nil { + return err + } + run := data.DHFOFLFCLAH + var bag *pb.DBONCGFHHDN + for _, component := range run.NAGDJGMMCBE { + if v := component.GetDBAGKJNPDOL(); v != nil { + bag = v + } + } + if bag == nil { + return fmt.Errorf("CW Orb component missing") + } + owned := make(map[uint32]*pb.IBPDPCOGDEP, len(bag.MDKGCIKOMLI)) + for _, orb := range bag.MDKGCIKOMLI { + if orb == nil || orb.UniqueId == 0 || owned[orb.UniqueId] != nil { + return fmt.Errorf("CW Orb inventory identity invalid") + } + owned[orb.UniqueId] = orb + } + uids := slices.Clone(req.CBMGDBJHLHO) + if req.IsGetAll { + uids = nil + for _, orb := range bag.MDKGCIKOMLI { + uids = append(uids, orb.UniqueId) + } + } + if len(uids) == 0 { + return fmt.Errorf("no owned Orbs selected") + } + recipes, err := common.LoadCurrencyWarsOrbRecipes() + if err != nil { + return err + } + captured, err := common.LoadCurrencyWarsRewards(c) + if err != nil { + return err + } + stage, _ := cwStage(run) + if stage == nil { + return fmt.Errorf("CW stage missing") + } + used := map[uint32]bool{} + payouts := make([]cwOrbPayout, 0, len(uids)) + for _, uid := range uids { + orb := owned[uid] + if orb == nil || used[uid] { + return fmt.Errorf("Orb UID %d missing or duplicated", uid) + } + used[uid] = true + row, ok := captured.Orbs[orb.LDBNOMPCOKK] + if !ok { + return fmt.Errorf("Orb %d not present in captured Client table", orb.LDBNOMPCOKK) + } + match := false + for _, reference := range recipes.Orbs { + if reference.ID == row.ID && reference.Bonus == row.Bonus { + match = true + break + } + } + if !match { + return fmt.Errorf("Orb %d reference bonus differs from captured Client table", row.ID) + } + choices, err := recipes.Choices(row.ID, stage.DCAHJELNJNP) + if err != nil { + return err + } + // Reject the whole recipe before rolling if a branch cannot execute. This + // avoids silently conditioning the reward distribution on supported kinds. + for _, choice := range choices { + if len(choice) == 0 { + return fmt.Errorf("Orb has an empty reward choice") + } + for _, reward := range choice { + if !cwOrbRewardSupported(reward.Reward) { + return fmt.Errorf("Orb %d reward %s needs its effect implementation", row.ID, reward.Reward) + } + } + } + pick, err := rand.Int(rand.Reader, big.NewInt(int64(len(choices)))) + if err != nil { + return err + } + payout := cwOrbPayout{UID: uid, Drop: &pb.GridFightDropInfo{}} + for _, reward := range choices[pick.Int64()] { + updates, drops, err := cwApplyOrbReward(c, run, recipes, reward) + if err != nil { + return err + } + payout.Updates = append(payout.Updates, updates...) + payout.Drop.NMGIABHIJJB = append(payout.Drop.NMGIABHIJJB, drops...) + } + payout.Updates = append(payout.Updates, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GOHHJLAPMBB{GOHHJLAPMBB: uid}}) + payouts = append(payouts, payout) + } + bag.MDKGCIKOMLI = slices.DeleteFunc(bag.MDKGCIKOMLI, func(v *pb.IBPDPCOGDEP) bool { return used[v.UniqueId] }) + // The detached snapshot plus CAS commits inventory and all rewards together. + // Neither failed validation nor a stale external revision consumes an Orb. + if err = s.saveCurrencyWarsData(data, c); err != nil { + return err + } + for _, payout := range payouts { + // Native FFGO sends the drop presentation before the grouped sync. Only + // scalar drop fields 1/2/3 plus the exact role-star oneof (tag101). + if err = cwSend(s, &pb.GDHFMHKFEAL{FKNNKCKLFMD: payout.UID, NMGIABHIJJB: payout.Drop}); err != nil { + return err + } + // Native OrbSummarizer requires source1 and first context uint=OrbUID. + if err = cwSend(s, &pb.GridFightSyncUpdateResultScNotify{GCPNIHHBGGD: []*pb.ABPLALCHNFA{{GridUpdateSrc: pb.JJDFGMMMCMI_JJDFGMMMCMI_DBIEKOMKBIN, OOEOCGLLHFO: []uint32{payout.UID}, JKPJFKCBIEM: payout.Updates}}}); err != nil { + return err + } + } + PacketLog(fmt.Sprintf("CW_USE_ORB saved count=%d revision=%d", len(payouts), s.currencyWarsRevision)) + return nil +} + +func cwOrbRewardSupported(kind string) bool { + switch kind { + case "Gold", "Exp", "Refresh", "GlobalHp", "Item", "RandomEquip", "RandomRole": + return true + } + return false +} + +func cwApplyOrbReward(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, recipes *common.CurrencyWarsOrbRecipes, reward common.CurrencyWarsOrbReward) ([]*pb.KFNCAIHIHCM, []*pb.BCCONKJHDJL, error) { + player, _, shop := cwComponents(run) + if player == nil || shop == nil { + return nil, nil, fmt.Errorf("CW Orb player/shop components missing") + } + var updates []*pb.KFNCAIHIHCM + drop := &pb.BCCONKJHDJL{} + add := func(current, delta uint32) (uint32, error) { + if uint64(current)+uint64(delta) > uint64(^uint32(0)) { + return 0, fmt.Errorf("CW Orb reward overflow") + } + return current + delta, nil + } + var err error + switch reward.Reward { + case "Gold": + if reward.Amount == 0 { + return nil, nil, fmt.Errorf("CW Orb gold amount is missing") + } + player.Gold, err = add(player.Gold, reward.Amount) + if err != nil { + return nil, nil, err + } + updates = append(updates, cwGoldSync(player.Gold)) + drop.FKKGLFOHGGA = pb.MJJIFGINJAJ_MJJIFGINJAJ_item_value + drop.Num = reward.Amount + case "Exp": + if reward.Amount == 0 { + return nil, nil, fmt.Errorf("CW Orb EXP amount is missing") + } + if err = cwApplyBaseExperience(c, player, shop, reward.Amount); err != nil { + return nil, nil, err + } + updates = append(updates, cwCapacitySync(player), cwShopSync(shop), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PLPHEIBLPDL{PLPHEIBLPDL: &pb.PIHKLPJGEPM{Level: player.EHNJDIDABHD, Exp: player.GridFightCurLevelExp, HFMKLAPEKFA: player.NDAINFLOLPJ}}}) + drop.FKKGLFOHGGA = pb.MJJIFGINJAJ_MJJIFGINJAJ_exp + drop.Num = reward.Amount + case "Refresh": + if reward.Amount == 0 { + return nil, nil, fmt.Errorf("CW Orb refresh amount is missing") + } + shop.OPDCMCFOFAA, err = add(shop.OPDCMCFOFAA, reward.Amount) + if err != nil { + return nil, nil, err + } + updates = append(updates, cwShopSync(shop)) + drop.FKKGLFOHGGA = pb.MJJIFGINJAJ_MJJIFGINJAJ_LJBCDJNNBJH + drop.Num = reward.Amount + case "GlobalHp": + if reward.Amount == 0 || player.GridFightLineupHp > player.PPKKHHNEOHB { + return nil, nil, fmt.Errorf("CW Orb HP amount/cap invalid") + } + gain := min(reward.Amount, player.PPKKHHNEOHB-player.GridFightLineupHp) + player.GridFightLineupHp += gain + updates = append(updates, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_GridFightLineupHp{GridFightLineupHp: &pb.FMJDDIHBELC{GridFightLineupHp: player.GridFightLineupHp, PPKKHHNEOHB: player.PPKKHHNEOHB}}}) + drop.FKKGLFOHGGA = pb.MJJIFGINJAJ_MJJIFGINJAJ_grid_fight_lineup_hp + drop.Num = gain + case "RandomEquip": + if reward.Count == 0 || reward.Category == "" { + return nil, nil, fmt.Errorf("CW Orb equipment count/category missing") + } + gear, err := common.LoadCurrencyWarsEquipment(c) + if err != nil { + return nil, nil, err + } + var candidates []uint32 + for _, reference := range recipes.Equipment { + if reference.Category == reward.Category { + if _, ok := gear[reference.ID]; !ok { + return nil, nil, fmt.Errorf("CW Orb equipment %d in category %s is uncaptured", reference.ID, reward.Category) + } + candidates = append(candidates, reference.ID) + } + } + sort.Slice(candidates, func(i, j int) bool { return candidates[i] < candidates[j] }) + if len(candidates) == 0 { + return nil, nil, fmt.Errorf("CW Orb equipment category %s is uncaptured", reward.Category) + } + var drops []*pb.BCCONKJHDJL + for i := uint32(0); i < reward.Count; i++ { + pick, err := rand.Int(rand.Reader, big.NewInt(int64(len(candidates)))) + if err != nil { + return nil, nil, err + } + id := candidates[pick.Int64()] + n, err := cwApplyCommand(c, run, common.CurrencyWarsCommand{Field: "equip", Value: id, Quantity: 1}) + if err != nil { + return nil, nil, err + } + for _, group := range n.GCPNIHHBGGD { + updates = append(updates, group.JKPJFKCBIEM...) + } + drops = append(drops, &pb.BCCONKJHDJL{FKKGLFOHGGA: pb.MJJIFGINJAJ_MJJIFGINJAJ_NLFCABFPJHD, FNLMKJLKLFH: id, Num: 1}) + } + return updates, drops, nil + case "RandomRole": + if reward.Count == 0 || reward.Rarity == 0 { + return nil, nil, fmt.Errorf("CW Orb role count/rarity missing") + } + _, team, shop := cwComponents(run) + if team == nil || shop == nil { + return nil, nil, fmt.Errorf("CW Orb role/shop components missing") + } + var drops []*pb.BCCONKJHDJL + for i := uint32(0); i < reward.Count; i++ { + pool, err := c.NewCapturedCardPool() + if err != nil { + return nil, nil, err + } + for _, role := range team.GridGameRoleList { + if err = pool.ReserveOwned(c, role.Id, role.RoleStar); err != nil { + return nil, nil, err + } + } + for _, offer := range shop.OGDKJPDFFAI { + role := offer.GetBDPIMPJOJBK() + if role == nil || offer.LHGIFDNPIDE { + continue + } + if err = pool.ReserveOwned(c, role.RoleId, role.RoleStar); err != nil { + return nil, nil, err + } + } + var candidates []uint32 + stars := map[uint32]uint32{} + for _, role := range c.CapturedRoles { + if role.Config.SeasonID != c.ActiveSeasonID || !role.Config.IsInPool || role.Config.Rarity != reward.Rarity { + continue + } + if stock, ok := pool.Roles[role.Config.ID]; !ok || stock.Disabled || stock.Remaining == 0 { + continue + } + star := reward.Star + if star == 0 { + star = role.DefaultStar + } + if _, err = c.CapturedRoleVariant(role.Config.ID, star); err != nil { + continue + } + // ReserveOwned uses captured star rows to count copies; no guessed + // power-of-three relationship is introduced for higher-star rewards. + candidatePool, err := c.NewCapturedCardPool() + if err != nil { + return nil, nil, err + } + for id, stock := range pool.Roles { + candidatePool.Roles[id] = stock + } + if err = candidatePool.ReserveOwned(c, role.Config.ID, star); err != nil { + continue + } + candidates = append(candidates, role.Config.ID) + stars[role.Config.ID] = star + } + sort.Slice(candidates, func(i, j int) bool { return candidates[i] < candidates[j] }) + if len(candidates) == 0 { + return nil, nil, fmt.Errorf("CW Orb rarity %d/star %d has no available captured role", reward.Rarity, reward.Star) + } + pick, err := rand.Int(rand.Reader, big.NewInt(int64(len(candidates)))) + if err != nil { + return nil, nil, err + } + id := candidates[pick.Int64()] + n, err := cwApplyCommand(c, run, common.CurrencyWarsCommand{Field: "role", Value: id, Star: stars[id], Quantity: 1}) + if err != nil { + return nil, nil, err + } + for _, group := range n.GCPNIHHBGGD { + updates = append(updates, group.JKPJFKCBIEM...) + } + drops = append(drops, &pb.BCCONKJHDJL{FKKGLFOHGGA: pb.MJJIFGINJAJ_MJJIFGINJAJ_BDPIMPJOJBK, FNLMKJLKLFH: id, Num: 1, DisplayValue: &pb.AOHKKFHDALO{NEBNJDMFELO: &pb.AOHKKFHDALO_RoleStar{RoleStar: stars[id]}}}) + } + return updates, drops, nil + case "Item": + if reward.ItemID == 0 || reward.Count == 0 { + return nil, nil, fmt.Errorf("CW Orb item identity/count missing") + } + gear, err := common.LoadCurrencyWarsEquipment(c) + if err != nil { + return nil, nil, err + } + rewards, err := common.LoadCurrencyWarsRewards(c) + if err != nil { + return nil, nil, err + } + field := "" + if _, ok := gear[reward.ItemID]; ok { + field = "equip" + } else if _, ok := rewards.Consumables[reward.ItemID]; ok { + field = "consumable" + } else if _, ok := rewards.Forges[reward.ItemID]; ok { + field = "forge" + } + if field == "" { + return nil, nil, fmt.Errorf("CW Orb item %d has no captured acquisition path", reward.ItemID) + } + n, err := cwApplyCommand(c, run, common.CurrencyWarsCommand{Field: field, Value: reward.ItemID, Quantity: reward.Count}) + if err != nil { + return nil, nil, err + } + for _, group := range n.GCPNIHHBGGD { + updates = append(updates, group.JKPJFKCBIEM...) + } + drop.FKKGLFOHGGA = pb.MJJIFGINJAJ_MJJIFGINJAJ_NLFCABFPJHD + drop.FNLMKJLKLFH = reward.ItemID + drop.Num = reward.Count + default: + return nil, nil, fmt.Errorf("CW Orb reward %s is unsupported", reward.Reward) + } + return updates, []*pb.BCCONKJHDJL{drop}, nil +} diff --git a/internal/gameserver/currency_wars_preparation.go b/internal/gameserver/currency_wars_preparation.go index 4143f5f..7958f97 100644 --- a/internal/gameserver/currency_wars_preparation.go +++ b/internal/gameserver/currency_wars_preparation.go @@ -248,7 +248,13 @@ func cwNextRound(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*pb. } } } - if pending == nil || pending.QueuePosition <= run.FMIGOKIDKJL.QueuePosition { + if pending == nil { + pending, err = cwGeneratedRoundPreparation(catalog, run) + if err != nil { + return nil, err + } + } + if pending.QueuePosition <= run.FMIGOKIDKJL.QueuePosition { return nil, fmt.Errorf("CW next round recipe missing") } if err = cwRestockForNode(catalog, run); err != nil { @@ -257,12 +263,25 @@ func cwNextRound(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*pb. player, _, shop := cwComponents(run) queue := run.FMIGOKIDKJL.QueuePosition run.FMIGOKIDKJL = pending - return cwNotify(cwShopSync(shop), cwFinish(queue), cwUnlock(), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_JOMFJHOCHJP{JOMFJHOCHJP: player.GAJGBBFELEL}}, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}), nil + aligned, err := cwAlignEncounterCamp(catalog, run) + if err != nil { + return nil, err + } + updates := []*pb.KFNCAIHIHCM{cwShopSync(shop), cwFinish(queue), cwUnlock(), {MNLCHEJKDHO: &pb.KFNCAIHIHCM_JOMFJHOCHJP{JOMFJHOCHJP: player.GAJGBBFELEL}}} + if aligned { + updates = append(updates, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: &pb.AINFNFIDGFF{DCAHJELNJNP: stage.DCAHJELNJNP, SectionId: stage.SectionId, IMPNAHBCADN: stage.IMPNAHBCADN}}}) + } + updates = append(updates, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}) + return cwNotify(updates...), nil } func init() { - handle("GridFightUpdatePos", func(s *Session, req *pb.GridFightUpdatePosCsReq, rsp *pb.GridFightUpdatePosScRsp) error { + cwHandle("GridFightUpdatePos", func(s *Session, req *pb.GridFightUpdatePosCsReq, rsp *pb.GridFightUpdatePosScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) + if _, active := CURRENT_BATTLE.Load(s.Token); active { + PacketLog("CW_UPDATE_POS rejected reason=battle_active") + return nil + } catalog, err := common.LoadCurrencyWarsCatalog() if err != nil { return err @@ -350,7 +369,7 @@ func init() { pos := forge.Pos if _, changed := changes[forge.UniqueId]; changed { return nil - } // Forge movement needs its separately verified sync arm. + } // Projection movement needs its separately verified sync arm. if pos != 0 { if occupied[pos] { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_POS_EXIST_ROLE) @@ -359,6 +378,21 @@ func init() { occupied[pos] = true } } + for _, forge := range team.PMEOPPDAMLM { + owned[forge.UniqueId] = true + pos := forge.Pos + if v, ok := changes[forge.UniqueId]; ok { + pos = v + } + if pos == 0 || uint64(pos) <= activeEnd || uint64(pos) > benchEnd { + return nil + } + if occupied[pos] { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_POS_EXIST_ROLE) + return nil + } + occupied[pos] = true + } for id := range changes { if !owned[id] { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_ROLE_NOT_EXIST) @@ -376,10 +410,16 @@ func init() { updates = append(updates, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_CFOCDALNCBP{CFOCDALNCBP: role}}) } } + for _, forge := range team.PMEOPPDAMLM { + if pos, ok := changes[forge.UniqueId]; ok { + forge.Pos = pos + updates = append(updates, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FEKCPKAPHHO{FEKCPKAPHHO: forge}}) + } + } if err = s.saveCurrencyWarsData(data, catalog); err != nil { return err } - if err = s.Send(cwNotify(updates...)); err != nil { + if err = cwSend(s, cwNotify(updates...)); err != nil { return err } rsp.AAKDHMHCMLP = req.AAKDHMHCMLP diff --git a/internal/gameserver/currency_wars_quit.go b/internal/gameserver/currency_wars_quit.go new file mode 100644 index 0000000..9a6f53d --- /dev/null +++ b/internal/gameserver/currency_wars_quit.go @@ -0,0 +1,172 @@ +package gameserver + +import ( + "fmt" + "sort" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +// currencyWarsAbandonRun removes only the active run from the saved CW +// response. Season progress and all unrelated player data remain intact. +func currencyWarsAbandonRun(data *pb.GridFightGetDataScRsp) (uint32, bool) { + if data == nil || data.DHFOFLFCLAH == nil { + return 0, false + } + runID := data.DHFOFLFCLAH.UniqueId + data.DHFOFLFCLAH = nil + return runID, true +} + +// currencyWarsQuitSettlement builds the ordered server notifications expected +// before GridFightQuitSettleScRsp. All packet IDs and wire tags come from the +// current generated protocol; values are copied from the saved run/catalog. +func currencyWarsQuitSettlement(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*pb.GridFightSyncKeepWinCntNotify, *pb.GridFightSettleNotify, error) { + if catalog == nil || run == nil || run.UniqueId == 0 { + return nil, nil, fmt.Errorf("CW quit settlement is missing catalog or active run") + } + player, team, _ := cwComponents(run) + if player == nil || team == nil { + return nil, nil, fmt.Errorf("CW quit settlement is missing player/team components") + } + var stage *pb.BEEFLEJAOCN + for _, component := range run.NAGDJGMMCBE { + if component == nil { + continue + } + if current := component.GetKLCPAAHDPJF(); current != nil { + if stage != nil { + return nil, nil, fmt.Errorf("CW quit settlement has duplicate stage components") + } + stage = current + } + } + if stage == nil { + return nil, nil, fmt.Errorf("CW quit settlement is missing the current stage component") + } + + avatarIDs := make([]uint32, 0, len(team.GridGameRoleList)) + seenAvatars := make(map[uint32]struct{}, len(team.GridGameRoleList)) + for _, role := range team.GridGameRoleList { + if role == nil || role.Id == 0 { + continue + } + if _, exists := seenAvatars[role.Id]; exists { + continue + } + seenAvatars[role.Id] = struct{}{} + avatarIDs = append(avatarIDs, role.Id) + } + sort.Slice(avatarIDs, func(i, j int) bool { return avatarIDs[i] < avatarIDs[j] }) + roles := make([]*pb.CDEAABODKCP, 0, len(team.GridGameRoleList)) + for _, role := range team.GridGameRoleList { + if role != nil { + roles = append(roles, role) + } + } + sort.SliceStable(roles, func(i, j int) bool { + if roles[i].Pos != roles[j].Pos { + return roles[i].Pos < roles[j].Pos + } + return roles[i].UniqueId < roles[j].UniqueId + }) + + var highestDivision common.CurrencyWarsDivision + for _, division := range catalog.SeasonDivisions(catalog.ActiveSeasonID) { + if division.DivisionLevel > highestDivision.DivisionLevel || + (division.DivisionLevel == highestDivision.DivisionLevel && division.Progress > highestDivision.Progress) { + highestDivision = division + } + } + if highestDivision.ID == 0 { + return nil, nil, fmt.Errorf("CW quit settlement has no active-season division data") + } + + finish := &pb.OEDHMAHDECC{ + // GridFightSettleReason value 1 is Quit in the Client enum. + Reason: pb.PEIJNEFOCHI_PEIJNEFOCHI_NOCIJDINKPJ, + IsOverlock: run.IsOverlock, + JLDDDLDNFEF: run.JLDDDLDNFEF, + NDLIKNEKDLL: &pb.GOCIGPCDKDJ{ + LKCJAPIGEND: player.PPKKHHNEOHB, + PAGPKOKMDBK: player.GridFightLineupHp, + DCAHJELNJNP: stage.DCAHJELNJNP, + EMOHLJHPOPC: stage.EMOHLJHPOPC, + AACGBEBGDPE: run.DivisionId, + SectionId: stage.SectionId, + }, + PPJFPNMIFHL: &pb.GLPCEKMKLGG{GridFightAvatarList: avatarIDs}, + GridGameRoleList: roles, + GridGameNpcList: team.GridGameNpcList, + BossInfo: stage.BossInfo, + CFFCNEDGCJJ: stage.CFFCNEDGCJJ, + OAIGAGABCMK: stage.GridFightPortalBuffList, + } + + return &pb.GridFightSyncKeepWinCntNotify{EHBLJGIENPI: player.GDAKCOICIDA}, &pb.GridFightSettleNotify{ + FLHOPMMEGAI: run.DivisionId, + CDANKDNACJP: highestDivision.ID, + NMCKJPEMACM: catalog.ActiveSeasonModule().MaxRewardExp, + BFLLJJBHLDF: finish, + }, nil +} + +func init() { + // The current protocol's QuitSettle request has an empty body and a typed + // Retcode response. A successful request abandons the active CW run; it + // does not award a victory or mutate Adventure inventory. + cwHandle("GridFightQuitSettle", func(s *Session, _ *pb.GridFightQuitSettleCsReq, rsp *pb.GridFightQuitSettleScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_NOT_IN_GAMEPLAY) + catalog, err := common.LoadCurrencyWarsCatalog() + if err != nil { + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE rejected reason=catalog_error error=%v", err)) + return nil + } + data, revision, err := readCurrencyWarsData(catalog) + if err != nil { + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE rejected reason=snapshot_error error=%v", err)) + return nil + } + if revision != s.currencyWarsRevision { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE rejected reason=session_revision_mismatch saved=%d session=%d", revision, s.currencyWarsRevision)) + return nil + } + if data == nil { + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE rejected reason=no_saved_data revision=%d", revision)) + return nil + } + run := data.DHFOFLFCLAH + if run == nil { + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE rejected reason=no_active_run revision=%d", revision)) + return nil + } + runID := run.UniqueId + keepWinCount, settlement, err := currencyWarsQuitSettlement(catalog, run) + if err != nil { + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE rejected run=%d reason=settlement_build_error error=%v", runID, err)) + return nil + } + _, active := currencyWarsAbandonRun(data) + if !active { + return nil + } + if err = s.saveCurrencyWarsData(data, catalog); err != nil { + rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS) + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE rejected run=%d reason=save_error error=%v", runID, err)) + return nil + } + if err = cwSend(s, keepWinCount); err != nil { + return err + } + if err = cwSend(s, settlement); err != nil { + return err + } + CURRENT_BATTLE.Delete(s.Token) + s.currencyWarsOpen = false + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("CW_QUIT_SETTLE completed run=%d revision=%d result=abandoned", runID, s.currencyWarsRevision)) + return nil + }) +} diff --git a/internal/gameserver/currency_wars_quit_test.go b/internal/gameserver/currency_wars_quit_test.go new file mode 100644 index 0000000..8e4acd7 --- /dev/null +++ b/internal/gameserver/currency_wars_quit_test.go @@ -0,0 +1,87 @@ +package gameserver + +import ( + "testing" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +func TestCurrencyWarsQuitSettleIsRegistered(t *testing.T) { + requestID, ok := pb.CmdIDByName["GridFightQuitSettleCsReq"] + if !ok || typedHandlers[uint16(requestID)] == nil { + t.Fatal("GridFightQuitSettle must have a typed handler") + } + if _, ok := dummyResponses[uint16(requestID)]; ok { + t.Fatal("GridFightQuitSettle must not use an empty dummy response") + } +} + +func TestCurrencyWarsAbandonRunPreservesOtherGetData(t *testing.T) { + metadata := &pb.CLEDCMIOIPF{} + data := &pb.GridFightGetDataScRsp{ + LFLCDNGALME: metadata, + DHFOFLFCLAH: &pb.MPIMAEMCEFH{UniqueId: 42, IsOverlock: true}, + } + + runID, active := currencyWarsAbandonRun(data) + if !active || runID != 42 { + t.Fatalf("abandon result = (run %d, active %t); want (42, true)", runID, active) + } + if data.DHFOFLFCLAH != nil || data.LFLCDNGALME != metadata { + t.Fatal("abandon must clear only the active run and preserve season data") + } + + if _, active = currencyWarsAbandonRun(data); active { + t.Fatal("abandon without an active run must be rejected") + } +} + +func TestCurrencyWarsQuitSettlementUsesActiveRunData(t *testing.T) { + catalog, err := common.LoadCurrencyWarsCatalog() + if err != nil { + t.Fatal(err) + } + divisions := catalog.SeasonDivisions(catalog.ActiveSeasonID) + if len(divisions) == 0 { + t.Fatal("active season has no captured divisions") + } + division := divisions[0] + run := &pb.MPIMAEMCEFH{ + UniqueId: 42, + DivisionId: division.ID, + IsOverlock: true, + JLDDDLDNFEF: &pb.CLFABOEKMJI{}, + NAGDJGMMCBE: []*pb.GridFightGameInfo{ + {LEOIAOFBBFA: &pb.GridFightGameInfo_FAOCFBOFCJP{FAOCFBOFCJP: &pb.NIHNGPKHEPC{PPKKHHNEOHB: 90, GridFightLineupHp: 72, GDAKCOICIDA: 3}}}, + {LEOIAOFBBFA: &pb.GridFightGameInfo_EJIPINIKNCK{EJIPINIKNCK: &pb.HKFECLCHBFJ{GridGameRoleList: []*pb.CDEAABODKCP{ + {Id: 8001, RoleStar: 2, Pos: 1}, + {Id: 8002, RoleStar: 1, Pos: 2}, + }}}}, + {LEOIAOFBBFA: &pb.GridFightGameInfo_KLCPAAHDPJF{KLCPAAHDPJF: &pb.BEEFLEJAOCN{ + DCAHJELNJNP: 4, EMOHLJHPOPC: 7001, SectionId: 5, + }}}, + }, + } + + keepWin, settlement, err := currencyWarsQuitSettlement(catalog, run) + if err != nil { + t.Fatal(err) + } + if keepWin.EHBLJGIENPI != 3 { + t.Fatalf("keep-win count = %d, want 3", keepWin.EHBLJGIENPI) + } + finish := settlement.BFLLJJBHLDF + if settlement.FLHOPMMEGAI != division.ID || finish == nil || finish.Reason != pb.PEIJNEFOCHI_PEIJNEFOCHI_NOCIJDINKPJ { + t.Fatalf("quit settlement identity/reason = division %d finish %v", settlement.FLHOPMMEGAI, finish) + } + if settlement.NMCKJPEMACM != catalog.ActiveSeasonModule().MaxRewardExp || settlement.CDANKDNACJP == 0 { + t.Fatalf("settlement season metadata is incomplete: exp=%d highest_division=%d", settlement.NMCKJPEMACM, settlement.CDANKDNACJP) + } + if finish.NDLIKNEKDLL == nil || finish.NDLIKNEKDLL.LKCJAPIGEND != 90 || finish.NDLIKNEKDLL.PAGPKOKMDBK != 72 || finish.NDLIKNEKDLL.DCAHJELNJNP != 4 || finish.NDLIKNEKDLL.EMOHLJHPOPC != 7001 || finish.NDLIKNEKDLL.SectionId != 5 { + t.Fatalf("settlement basic info does not match saved run: %v", finish.NDLIKNEKDLL) + } + if !finish.IsOverlock || finish.PPJFPNMIFHL == nil || len(finish.PPJFPNMIFHL.GridFightAvatarList) != 2 || finish.PPJFPNMIFHL.GridFightAvatarList[0] != 8001 || finish.PPJFPNMIFHL.GridFightAvatarList[1] != 8002 { + t.Fatal("settlement did not preserve mode and sorted team avatar data") + } +} diff --git a/internal/gameserver/currency_wars_reference_enemy.go b/internal/gameserver/currency_wars_reference_enemy.go new file mode 100644 index 0000000..f07773a --- /dev/null +++ b/internal/gameserver/currency_wars_reference_enemy.go @@ -0,0 +1,364 @@ +package gameserver + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "math/rand/v2" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +type cwReferenceEnemies struct { + Format uint32 `json:"format_version"` + Client string `json:"target_client_version"` + Assembly string `json:"target_assembly_sha256"` + Reference string `json:"reference_executable_sha256"` + Excel string `json:"excel_dump_sha256"` + Policy struct { + FirstChapter uint32 `json:"first_chapter"` + FirstStar uint32 `json:"first_chapter_boss_star"` + LaterStar uint32 `json:"later_chapter_boss_star"` + BaseElite uint32 `json:"base_elite_group"` + AlternateThreshold uint32 `json:"alternate_route_threshold"` + AlternateElite uint32 `json:"alternate_base_elite_group"` + CampMaxTier uint32 `json:"camp_monster_max_tier"` + MonsterMaxTier uint32 `json:"monster_max_tier"` + FirstMonsterCount uint32 `json:"first_monster_count"` + LaterMonsterCount uint32 `json:"later_monster_count"` + CampWaveCounts [][]uint32 `json:"camp_wave_counts"` + ChapterStarWeights [][]uint32 `json:"chapter_star_weights"` + } `json:"policy"` + MonsterTiers map[uint32]uint32 `json:"monster_tiers"` + EliteGroups []uint32 `json:"elite_groups"` +} + +func cwLoadReferenceEnemies(c *common.CurrencyWarsCatalog) (*cwReferenceEnemies, error) { + b, e := common.ReadResourceFile("resources/CurrencyWarsReferenceEnemies.json") + if e != nil { + return nil, e + } + v := new(cwReferenceEnemies) + if e = json.Unmarshal(b, v); e != nil { + return nil, e + } + if c == nil || v.Format != 1 || v.Client != c.ClientVersion || v.Assembly != c.Provenance.GameAssemblySHA256 { + return nil, fmt.Errorf("CW reference enemy revision differs") + } + for _, s := range []string{v.Reference, v.Excel} { + h, e := hex.DecodeString(s) + if e != nil || len(h) != sha256.Size { + return nil, fmt.Errorf("CW reference enemy provenance missing") + } + } + if v.Policy.FirstChapter == 0 || v.Policy.FirstStar == 0 || v.Policy.LaterStar == 0 || v.Policy.BaseElite == 0 || v.Policy.AlternateElite == 0 || v.Policy.AlternateThreshold == 0 || len(v.MonsterTiers) == 0 || len(v.EliteGroups) == 0 { + return nil, fmt.Errorf("CW reference enemy policy incomplete") + } + return v, nil +} + +func cwReferenceCurrentTemplate(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*pb.BEEFLEJAOCN, common.CurrencyWarsReferenceNodeTemplate, error) { + s, _ := cwStage(run) + if s == nil { + return nil, common.CurrencyWarsReferenceNodeTemplate{}, fmt.Errorf("CW reference enemy stage missing") + } + rows, e := c.RouteNodes(s.EMOHLJHPOPC) + if e != nil { + return nil, common.CurrencyWarsReferenceNodeTemplate{}, e + } + t, e := common.LoadCurrencyWarsReferenceNodes(c) + if e != nil { + return nil, common.CurrencyWarsReferenceNodeTemplate{}, e + } + for _, r := range rows { + if r.ChapterID == s.DCAHJELNJNP && r.SectionID == s.SectionId { + v, e := t.Template(r.NodeTemplateID) + return s, v, e + } + } + return nil, common.CurrencyWarsReferenceNodeTemplate{}, fmt.Errorf("CW reference enemy coordinate not in route") +} + +// The reference factory uses the chapter's already selected boss and camp. +// It never selects a new boss on entering the node or copies another run. +func cwGenerateReferenceEnemyLayer(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, display *pb.OHMDHKGAEMM) (*pb.NCKOKDHNJDC, error) { + s, t, e := cwReferenceCurrentTemplate(c, run) + if e != nil { + return nil, e + } + if display == nil || (t.NodeType != "Boss" && t.NodeType != "CampMonster") || display.StageId != t.StageID { + return nil, fmt.Errorf("CW reference enemy factory does not support node type %s", t.NodeType) + } + r, e := cwLoadReferenceEnemies(c) + if e != nil { + return nil, e + } + if t.NodeType == "CampMonster" { + return cwGenerateReferenceCampLayer(c, run, s, t, r) + } + if s.DCAHJELNJNP == 0 || s.BossInfo == nil || len(s.BossInfo.NCGHKPEMPDP) == 0 || len(s.HEKMEJLMGFF) == 0 { + return nil, fmt.Errorf("CW saved chapter boss/camp selection missing") + } + i := int(s.DCAHJELNJNP) - 1 + if i >= len(s.BossInfo.NCGHKPEMPDP) { + i = len(s.BossInfo.NCGHKPEMPDP) - 1 + } + boss := s.BossInfo.NCGHKPEMPDP[i] + if boss == nil || r.MonsterTiers[boss.MonsterId] == 0 { + return nil, fmt.Errorf("CW saved boss has no native monster row") + } + j := int(s.DCAHJELNJNP) - 1 + if j >= len(s.HEKMEJLMGFF) { + j = len(s.HEKMEJLMGFF) - 1 + } + campID := s.HEKMEJLMGFF[j].GetLOGHLGKIFEN() + camp, e := c.MonsterCamp(run.LJNGPCKPJLF, campID) + if e != nil { + return nil, e + } + allowed := false + for _, id := range camp.Season.MonsterList { + if id == boss.MonsterId { + allowed = true + break + } + } + if !allowed { + return nil, fmt.Errorf("CW saved boss %d is outside chapter camp %d", boss.MonsterId, campID) + } + star := r.Policy.LaterStar + if s.DCAHJELNJNP == r.Policy.FirstChapter { + star = r.Policy.FirstStar + } + monster := proto.Clone(boss).(*pb.AHKDPCIIELA) + monster.RoleStar = star + branch := &pb.KKBGIPCAGGH{IFIIOIIKJHO: t.PenaltyBonusRuleID, MonsterWaveList: []*pb.PNAKHANCNGK{{OCPEPEMNNEK: 1, PBLBBDBDLEK: []*pb.AHKDPCIIELA{monster}}}} + layer := &pb.MDJBBILMHLC{LNDKCPBJDKH: campID, MOADBALHMFD: 1, BPDABHGFBFO: []*pb.KKBGIPCAGGH{branch}} + return &pb.NCKOKDHNJDC{EFECLPJFOCM: &pb.NCKOKDHNJDC_MPOBBIPMNNJ{MPOBBIPMNNJ: layer}}, nil +} + +func cwReferenceEarlierCount(c *common.CurrencyWarsCatalog, s *pb.BEEFLEJAOCN, kind string, sameChapter bool) (uint32, error) { + rows, e := c.RouteNodes(s.EMOHLJHPOPC) + if e != nil { + return 0, e + } + templates, e := common.LoadCurrencyWarsReferenceNodes(c) + if e != nil { + return 0, e + } + var count uint32 + for _, row := range rows { + if sameChapter && row.ChapterID != s.DCAHJELNJNP { + continue + } + if row.ChapterID > s.DCAHJELNJNP || (row.ChapterID == s.DCAHJELNJNP && row.SectionID >= s.SectionId) { + continue + } + t, e := templates.Template(row.NodeTemplateID) + if e != nil { + return 0, e + } + if t.NodeType == kind { + count++ + } + } + return count, nil +} + +func cwGenerateReferenceCampLayer(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, s *pb.BEEFLEJAOCN, t common.CurrencyWarsReferenceNodeTemplate, r *cwReferenceEnemies) (*pb.NCKOKDHNJDC, error) { + if len(s.HEKMEJLMGFF) == 0 || len(r.Policy.CampWaveCounts) == 0 || len(r.Policy.ChapterStarWeights) == 0 { + return nil, fmt.Errorf("CW native camp/wave policy missing") + } + campID := s.HEKMEJLMGFF[rand.IntN(len(s.HEKMEJLMGFF))].GetLOGHLGKIFEN() + camp, e := c.MonsterCamp(run.LJNGPCKPJLF, campID) + if e != nil { + return nil, e + } + var minions []uint32 + for _, id := range camp.Season.MonsterList { + tier, ok := r.MonsterTiers[id] + if ok && tier > 0 && tier <= r.Policy.CampMaxTier { + minions = append(minions, id) + } + } + if len(minions) == 0 { + return nil, fmt.Errorf("CW selected camp %d has no native minions", campID) + } + previous, e := cwReferenceEarlierCount(c, s, "CampMonster", true) + if e != nil { + return nil, e + } + i := int(previous) + if i >= len(r.Policy.CampWaveCounts) { + i = len(r.Policy.CampWaveCounts) - 1 + } + chapter := int(s.DCAHJELNJNP) - 1 + if chapter < 0 { + return nil, fmt.Errorf("CW chapter zero") + } + if chapter >= len(r.Policy.ChapterStarWeights) { + chapter = len(r.Policy.ChapterStarWeights) - 1 + } + weights := r.Policy.ChapterStarWeights[chapter] + var total uint32 + for _, w := range weights { + total += w + } + if total == 0 { + return nil, fmt.Errorf("CW native star weight sum zero") + } + branch := &pb.KKBGIPCAGGH{IFIIOIIKJHO: t.PenaltyBonusRuleID} + for wi, count := range r.Policy.CampWaveCounts[i] { + wave := &pb.PNAKHANCNGK{OCPEPEMNNEK: uint32(wi + 1)} + for n := uint32(0); n < count; n++ { + roll := rand.Uint32N(total) + star := uint32(1) + for j, w := range weights { + if roll < w { + star = uint32(j + 1) + break + } + roll -= w + } + wave.PBLBBDBDLEK = append(wave.PBLBBDBDLEK, &pb.AHKDPCIIELA{MonsterId: minions[rand.IntN(len(minions))], RoleStar: star}) + } + branch.MonsterWaveList = append(branch.MonsterWaveList, wave) + } + layer := &pb.MDJBBILMHLC{LNDKCPBJDKH: campID, MOADBALHMFD: 1, BPDABHGFBFO: []*pb.KKBGIPCAGGH{branch}} + return &pb.NCKOKDHNJDC{EFECLPJFOCM: &pb.NCKOKDHNJDC_MPOBBIPMNNJ{MPOBBIPMNNJ: layer}}, nil +} + +// gfRouteEliteGroup counts preceding CampMonster/EliteBranch/Boss nodes. +// Parameters are normalized from the extracted reference policy, and the +// result must occur in the extracted elite-group table. +func cwReferenceEliteGroup(c *common.CurrencyWarsCatalog, s *pb.BEEFLEJAOCN, r *cwReferenceEnemies) (uint32, error) { + rows, e := c.RouteNodes(s.EMOHLJHPOPC) + if e != nil { + return 0, e + } + templates, e := common.LoadCurrencyWarsReferenceNodes(c) + if e != nil { + return 0, e + } + group := r.Policy.BaseElite + if s.EMOHLJHPOPC >= r.Policy.AlternateThreshold { + group = r.Policy.AlternateElite + } + // FF uses route ID at this point; current captured routes retain that ID. + for _, row := range rows { + if row.ChapterID > s.DCAHJELNJNP || (row.ChapterID == s.DCAHJELNJNP && row.SectionID >= s.SectionId) { + continue + } + t, e := templates.Template(row.NodeTemplateID) + if e != nil { + return 0, e + } + if t.NodeType == "CampMonster" || t.NodeType == "EliteBranch" || t.NodeType == "Boss" { + group++ + } + } + for group >= r.Policy.BaseElite { + for _, id := range r.EliteGroups { + if id == group { + return group, nil + } + } + group-- + } + return 0, fmt.Errorf("CW reference elite group is absent from resource") +} + +// A newly generated Boss has a native recipe rather than a captured run +// snapshot. Reuse scalar wave defaults from this mode/division's validated +// Client envelope, then replace identities, stars, difficulty and coordinates. +func cwBuildReferenceBossEnemy(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, s *pb.BEEFLEJAOCN, node *pb.OHMDHKGAEMM, info *pb.SceneBattleInfo) error { + _, t, e := cwReferenceCurrentTemplate(c, run) + if e != nil { + return e + } + if (t.NodeType != "Boss" && t.NodeType != "CampMonster" && t.NodeType != "Monster" && t.NodeType != "EliteBranch") || t.StageID != node.StageId { + return fmt.Errorf("CW native recipe unavailable for node %s", t.NodeType) + } + r, e := cwLoadReferenceEnemies(c) + if e != nil { + return e + } + elite, e := cwReferenceEliteGroup(c, s, r) + if e != nil { + return e + } + layer := s.IMPNAHBCADN.GetMPOBBIPMNNJ() + branch, e := cwSelectedEnemyBranch(layer) + if e != nil { + return e + } + if len(branch.MonsterWaveList) == 0 || branch.IFIIOIIKJHO == 0 { + return fmt.Errorf("CW saved branch differs from native recipe") + } + if t.NodeType != "EliteBranch" && branch.IFIIOIIKJHO != t.PenaltyBonusRuleID { + return fmt.Errorf("CW saved branch penalty differs from native recipe") + } + if t.NodeType == "EliteBranch" { + // EliteBranch offers can have distinct penalties. They must come from + // the revision-gated reference table, not from the base node's value. + penalties, err := common.LoadCurrencyWarsReferencePenalties(c) + if err != nil { + return err + } + if _, ok := penalties[branch.IFIIOIIKJHO]; !ok { + return fmt.Errorf("CW elite branch penalty is not in the reference table") + } + } + if len(info.MonsterWaveList) == 0 || info.MonsterWaveList[0].WaveParam == nil || info.EIGMKOJOEEI == nil { + return fmt.Errorf("CW validated battle wave envelope missing") + } + base := info.MonsterWaveList[0].WaveParam + // The proven first-node envelope omits Level/HardLevelGroup (both zero). + // Updated FFGO gfBattleMonsterWave likewise writes only formation and elite + // into this param. Zero is the captured wire value, not missing evidence; + // forcing the older explicit 90/1 recipe here would change the protocol. + if base.CPHIINKIDEB == 0 { + return fmt.Errorf("CW validated battle formation missing") + } + camp, e := c.MonsterCamp(run.LJNGPCKPJLF, layer.LNDKCPBJDKH) + if e != nil { + return e + } + allowed := map[uint32]bool{} + for _, id := range camp.Season.MonsterList { + allowed[id] = true + } + waves := make([]*pb.SceneMonsterWave, 0, len(branch.MonsterWaveList)) + for i, current := range branch.MonsterWaveList { + if current == nil || current.OCPEPEMNNEK != uint32(i+1) { + return fmt.Errorf("CW native enemy wave ordinal differs") + } + wave := &pb.SceneMonsterWave{BattleStageId: node.StageId, WaveId: current.OCPEPEMNNEK, WaveParam: proto.Clone(base).(*pb.SceneMonsterWaveParam)} + wave.WaveParam.EliteGroup = elite + for _, m := range current.PBLBBDBDLEK { + if m == nil || !allowed[m.MonsterId] || m.RoleStar == 0 { + return fmt.Errorf("CW saved native monster identity/star invalid") + } + wave.MonsterList = append(wave.MonsterList, &pb.SceneMonster{MonsterId: m.MonsterId, ExtraInfo: &pb.MNDMNDKLKIE{TeleportNice: &pb.MNDMNDKLKIE_EIGMKOJOEEI{EIGMKOJOEEI: &pb.HNEBODEBELG{RoleStar: m.RoleStar}}}}) + } + if len(wave.MonsterList) == 0 { + return fmt.Errorf("CW native wave empty") + } + waves = append(waves, wave) + } + division, e := c.CapturedStage(run.DivisionId) + if e != nil { + return e + } + info.StageId = node.StageId + info.MonsterWaveList = waves + grid := info.EIGMKOJOEEI + grid.IOCKDJCDMAH = &pb.MIPDJDJLGPL{EMOHLJHPOPC: s.EMOHLJHPOPC, DCAHJELNJNP: s.DCAHJELNJNP, SectionId: s.SectionId, CJCCMAACJDB: node.CJCCMAACJDB} + grid.IFIIOIIKJHO = branch.IFIIOIIKJHO + grid.LODNFLMBIEH = division.EnemyHardLevel + grid.BattleWaveId = waves[0].WaveId + return nil +} diff --git a/internal/gameserver/currency_wars_role_projection.go b/internal/gameserver/currency_wars_role_projection.go new file mode 100644 index 0000000..9a8cc41 --- /dev/null +++ b/internal/gameserver/currency_wars_role_projection.go @@ -0,0 +1,48 @@ +package gameserver + +import ( + "gac-hkrpg-go/internal/common" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Only schema-established role references are translated. Do not replace all +// matching numbers: avatar IDs, item IDs, properties and unique IDs are separate. +// This mutates a detached protocol projection, never the persistent reader's file. +func cwProjectRoleIDs(message proto.Message, c *common.CurrencyWarsCatalog) { + if message == nil || c == nil { + return + } + var walk func(protoreflect.Message) + walk = func(m protoreflect.Message) { + m.Range(func(f protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if f.IsMap() { + return true + } + if f.IsList() { + if f.Kind() == protoreflect.MessageKind { + l := v.List() + for i := 0; i < l.Len(); i++ { + walk(l.Get(i).Message()) + } + } + return true + } + if f.Kind() == protoreflect.MessageKind { + walk(v.Message()) + return true + } + if f.Kind() != protoreflect.Uint32Kind { + return true + } + roleField := f.Name() == "role_id" || (m.Descriptor().Name() == "CDEAABODKCP" && f.Name() == "id") || (m.Descriptor().Name() == "JJOBHGFOGHP" && f.Name() == "BGFFICLCKHE") + if roleField { + if id := c.CurrentRoleID(uint32(v.Uint())); id != uint32(v.Uint()) { + m.Set(f, protoreflect.ValueOfUint32(id)) + } + } + return true + }) + } + walk(message.ProtoReflect()) +} diff --git a/internal/gameserver/currency_wars_route_factory.go b/internal/gameserver/currency_wars_route_factory.go new file mode 100644 index 0000000..b6790f5 --- /dev/null +++ b/internal/gameserver/currency_wars_route_factory.go @@ -0,0 +1,119 @@ +package gameserver + +import ( + "fmt" + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" + "math" +) + +// cwAdvanceRouteNode follows gfPendingAdvanceNode -> gfFxHEnterNode in the +// reference workflow. The caller owns the detached snapshot and its single CAS +// commit; this helper grants no rewards and never reads/writes a player save. +// Saved route displays retain run-specific Tea Break/spotlight substitutions. +func cwAdvanceRouteNode(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*pb.GridFightSyncUpdateResultScNotify, error) { + if run == nil || run.FMIGOKIDKJL == nil { + return nil, fmt.Errorf("CW advance requires current pending queue") + } + queue := run.FMIGOKIDKJL.QueuePosition + if queue == math.MaxUint32 { + return nil, fmt.Errorf("CW pending queue exhausted") + } + stage, _ := cwStage(run) + if stage == nil { + return nil, fmt.Errorf("CW advance stage missing") + } + route, err := catalog.RouteNodes(stage.EMOHLJHPOPC) + if err != nil { + return nil, err + } + index := -1 + for i, row := range route { + if row.ChapterID == stage.DCAHJELNJNP && row.SectionID == stage.SectionId { + index = i + break + } + } + if index < 0 || index+1 >= len(route) { + return nil, fmt.Errorf("CW route has no next node") + } + next := route[index+1] + var display *pb.OHMDHKGAEMM + for _, node := range stage.OOMMIIKPHBC { + if node != nil && node.DCAHJELNJNP == next.ChapterID && node.SectionId == next.SectionID { + if display != nil { + return nil, fmt.Errorf("CW duplicate next route display") + } + display = node.DisplayValue + } + } + if display == nil { + return nil, fmt.Errorf("CW next route display missing") + } + refs, err := common.LoadCurrencyWarsReferenceNodes(catalog) + if err != nil { + return nil, err + } + template, err := refs.Template(next.NodeTemplateID) + if err != nil { + return nil, err + } + if template.StageID != display.StageId { + return nil, fmt.Errorf("CW next template/display stage differs") + } + // Build against a temporary run at the destination: the enemy constructor + // selects that chapter's saved boss/camp, leaving the source untouched if a + // recipe fails validation. Dynamic non-enemy nodes need their own factory. + shadow := proto.Clone(run).(*pb.MPIMAEMCEFH) + shadowStage, _ := cwStage(shadow) + shadowStage.DCAHJELNJNP = next.ChapterID + shadowStage.SectionId = next.SectionID + shadowStage.IMPNAHBCADN = nil + layer, err := cwGenerateReferenceEnemyLayer(catalog, shadow, display) + if err != nil { + return nil, err + } + if layer == nil { + return nil, fmt.Errorf("CW generated next node layer missing") + } + pending := &pb.CHCHAJIANIM{QueuePosition: queue + 1, FGLIODAJFML: &pb.CHCHAJIANIM_NNDGEJFLGGF{NNDGEJFLGGF: &pb.DPHPAKFLNOD{}}} + stage.DCAHJELNJNP = next.ChapterID + stage.SectionId = next.SectionID + stage.IMPNAHBCADN = layer + run.FMIGOKIDKJL = pending + return cwNotify(cwFinish(queue), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: &pb.AINFNFIDGFF{DCAHJELNJNP: stage.DCAHJELNJNP, SectionId: stage.SectionId, IMPNAHBCADN: layer}}}, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}}), nil +} + +// cwGeneratedRoundPreparation handles the same RoundBegin -> shop refresh -> +// ReturnPreparation transition as the captured initial rounds, without replaying +// an unrelated node's opaque wire or its fixed queue. Restrict this fallback to +// constructed enemy layers; other node families keep their typed handlers. +func cwGeneratedRoundPreparation(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*pb.CHCHAJIANIM, error) { + if run == nil || run.GetFMIGOKIDKJL().GetNNDGEJFLGGF() == nil { + return nil, fmt.Errorf("CW generated round is not RoundBegin") + } + stage, display := cwStage(run) + if stage == nil || display == nil || stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ() == nil { + return nil, fmt.Errorf("CW generated RoundBegin enemy layer missing") + } + queue := run.FMIGOKIDKJL.QueuePosition + if queue == math.MaxUint32 { + return nil, fmt.Errorf("CW pending queue exhausted") + } + if display.HPNNLMBHOPF { + offer, err := cwSpotlightChoices(catalog, run) + if err != nil { + return nil, err + } + return &pb.CHCHAJIANIM{QueuePosition: queue + 1, FGLIODAJFML: &pb.CHCHAJIANIM_EEKMIAMGHFL{EEKMIAMGHFL: offer}}, nil + } + name, err := catalog.NodeTypeName(display.CJCCMAACJDB) + if err != nil { + return nil, err + } + if name == "EliteBranch" && stage.IMPNAHBCADN.GetMPOBBIPMNNJ().MOADBALHMFD == 0 { + return &pb.CHCHAJIANIM{QueuePosition: queue + 1, FGLIODAJFML: &pb.CHCHAJIANIM_BAKAKODKECM{BAKAKODKECM: &pb.HNPHLAHJPOB{}}}, nil + } + return &pb.CHCHAJIANIM{QueuePosition: queue + 1, FGLIODAJFML: &pb.CHCHAJIANIM_LGNPHHBGKFH{LGNPHHBGKFH: &pb.HJPDALHDJHC{}}}, nil +} diff --git a/internal/gameserver/currency_wars_save.go b/internal/gameserver/currency_wars_save.go index 2b824db..54928d7 100644 --- a/internal/gameserver/currency_wars_save.go +++ b/internal/gameserver/currency_wars_save.go @@ -30,6 +30,10 @@ func readCurrencyWarsData(catalog *common.CurrencyWarsCatalog) (*goproto.GridFig if err := proto.Unmarshal(snapshot.WireData, &saved); err != nil { return nil, 0, fmt.Errorf("decode saved CW protocol: %w", err) } + cwProjectRoleIDs(&saved, catalog) + if err := cwProjectLegacyBonfirePhase(catalog, &saved, snapshot.Runtime); err != nil { + return nil, 0, err + } if err := validateCurrencyWarsSavedData(&saved, catalog); err != nil { return nil, 0, err } @@ -75,7 +79,12 @@ func validateCurrencyWarsSavedData(data *goproto.GridFightGetDataScRsp, catalog // saveCurrencyWarsData must be called only after a validated CW state-machine // transition, under the session state lock. It does not alter adventure data. -func (s *Session) saveCurrencyWarsData(data *goproto.GridFightGetDataScRsp, catalog *common.CurrencyWarsCatalog) error { +func (s *Session) saveCurrencyWarsData(data *goproto.GridFightGetDataScRsp, catalog *common.CurrencyWarsCatalog, commandID ...string) error { + return s.saveCurrencyWarsDataWithRuntime(data, catalog, nil, commandID...) +} + +func (s *Session) saveCurrencyWarsDataWithRuntime(data *goproto.GridFightGetDataScRsp, catalog *common.CurrencyWarsCatalog, runtime *common.CurrencyWarsRuntimeState, commandID ...string) error { + cwProjectRoleIDs(data, catalog) if err := validateCurrencyWarsSavedData(data, catalog); err != nil { return err } @@ -88,7 +97,24 @@ func (s *Session) saveCurrencyWarsData(data *goproto.GridFightGetDataScRsp, cata return err } next := common.NewCurrencyWarsSnapshot(cfg.PlayerUID, catalog.ClientVersion, catalog.Provenance.GameAssemblySHA256, wire) - revision, err := common.CommitCurrencyWarsSnapshot(s.currencyWarsRevision, next) + if run := data.DHFOFLFCLAH; run != nil { + if runtime != nil && runtime.RunID != run.UniqueId { + return fmt.Errorf("CW runtime rules belong to a different run") + } + if runtime == nil { + runtime = &common.CurrencyWarsRuntimeState{RunID: run.UniqueId} + } + next.Runtime = runtime + } + var revision uint64 + if len(commandID) > 1 { + return fmt.Errorf("only one CW command may be committed per transaction") + } + if len(commandID) == 1 { + revision, err = common.CommitCurrencyWarsCommand(s.currencyWarsRevision, next, commandID[0]) + } else { + revision, err = common.CommitCurrencyWarsSnapshot(s.currencyWarsRevision, next) + } if err != nil { return err } diff --git a/internal/gameserver/currency_wars_settlement.go b/internal/gameserver/currency_wars_settlement.go index bcb631c..d9ee9da 100644 --- a/internal/gameserver/currency_wars_settlement.go +++ b/internal/gameserver/currency_wars_settlement.go @@ -91,6 +91,20 @@ func finishCurrencyWarsBattle(s *Session, req *pb.PVEBattleResultCsReq, current if stage == nil || node == nil || player == nil || team == nil || shop == nil || node.StageId != req.StageId { return fmt.Errorf("CW settlement components differ") } + // Encounter penalties belong to the selected offer, not the route node's + // base display rule. Validate against the battle we actually issued before + // using that rule for HP/rewards or selecting the next transition. + penaltyID := node.IFIIOIIKJHO + if layer := stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ(); layer != nil && len(layer.BPDABHGFBFO) > 0 { + selected, e := cwSelectedEnemyBranch(layer) + if e != nil { + return e + } + penaltyID = selected.IFIIOIIKJHO + if current.GetEIGMKOJOEEI().GetIFIIOIIKJHO() != penaltyID { + return fmt.Errorf("CW selected Encounter penalty differs from issued battle") + } + } transitions, err := cwNodeTransitions(catalog) if err != nil { return err @@ -98,33 +112,32 @@ func finishCurrencyWarsBattle(s *Session, req *pb.PVEBattleResultCsReq, current var transition *cwNodeTransition for i := range transitions { t := &transitions[i] - if t.Route == stage.EMOHLJHPOPC && t.Chapter == stage.DCAHJELNJNP && t.Section == stage.SectionId && t.Stage == node.StageId && t.Penalty == node.IFIIOIIKJHO && t.Division == run.DivisionId && t.Overclock == run.IsOverlock { + if t.Route == stage.EMOHLJHPOPC && t.Chapter == stage.DCAHJELNJNP && t.Section == stage.SectionId && t.Stage == node.StageId && t.Penalty == penaltyID && t.Division == run.DivisionId && t.Overclock == run.IsOverlock { if transition != nil { return fmt.Errorf("CW transition duplicated") } transition = t } } - if transition == nil { - return fmt.Errorf("CW next node recipe not captured") - } nextLevel := new(pb.AINFNFIDGFF) nextPending := new(pb.CHCHAJIANIM) - if err = proto.Unmarshal(transition.LevelWire, nextLevel); err != nil { - return err - } - if err = proto.Unmarshal(transition.PendingWire, nextPending); err != nil { - return err - } - if nextLevel.IMPNAHBCADN == nil || nextPending.GetNNDGEJFLGGF() == nil { - return fmt.Errorf("CW next node recipe incomplete") - } - found := false - for _, n := range stage.OOMMIIKPHBC { - found = found || (n.DCAHJELNJNP == nextLevel.DCAHJELNJNP && n.SectionId == nextLevel.SectionId) - } - if !found { - return fmt.Errorf("CW next node outside route") + if transition != nil { + if err = proto.Unmarshal(transition.LevelWire, nextLevel); err != nil { + return err + } + if err = proto.Unmarshal(transition.PendingWire, nextPending); err != nil { + return err + } + if nextLevel.IMPNAHBCADN == nil || nextPending.GetNNDGEJFLGGF() == nil { + return fmt.Errorf("CW next node recipe incomplete") + } + found := false + for _, n := range stage.OOMMIIKPHBC { + found = found || (n.DCAHJELNJNP == nextLevel.DCAHJELNJNP && n.SectionId == nextLevel.SectionId) + } + if !found { + return fmt.Errorf("CW next node outside route") + } } raw, err := common.ReadResourceFile("resources/CurrencyWarsSettlementRules.json") if err != nil { @@ -146,17 +159,30 @@ func finishCurrencyWarsBattle(s *Session, req *pb.PVEBattleResultCsReq, current } penaltyIndex := -1 for i, p := range rules.Penalties { - if p.ID == node.IFIIOIIKJHO { + if p.ID == penaltyID { if penaltyIndex >= 0 { return fmt.Errorf("CW penalty duplicated") } penaltyIndex = i } } - if penaltyIndex < 0 { - return fmt.Errorf("CW target penalty row not captured") + var penalty common.CurrencyWarsReferencePenalty + if penaltyIndex >= 0 { + p := rules.Penalties[penaltyIndex] + penalty = common.CurrencyWarsReferencePenalty{ID: p.ID, ThresholdPosition: p.ThresholdPosition, ThresholdFailPlayerHPPenalty: p.ThresholdFailPlayerHPPenalty, ThresholdPassBasicPlayerHPPenalty: p.ThresholdPassBasicPlayerHPPenalty, ProgressPenaltyCoefficient: p.ProgressPenaltyCoefficient} + } else { + // Preserve the proven current-Client captures above. Newly constructed + // nodes use the separately labelled, revision-gated reference table. + reference, e := common.LoadCurrencyWarsReferencePenalties(catalog) + if e != nil { + return e + } + var ok bool + penalty, ok = reference[penaltyID] + if !ok { + return fmt.Errorf("CW target penalty %d has no reference row", penaltyID) + } } - penalty := rules.Penalties[penaltyIndex] if player.PPKKHHNEOHB > math.MaxInt32 || player.GridFightLineupHp > player.PPKKHHNEOHB { return fmt.Errorf("CW HP cannot be represented in settlement") } @@ -266,15 +292,48 @@ func finishCurrencyWarsBattle(s *Session, req *pb.PVEBattleResultCsReq, current damage.EEGPILJDLBG = append(damage.EEGPILJDLBG, &pb.PLFKMENCDMM{RoleId: role.RoleId, RoleStar: role.RoleStar, TotalDamage: total, DIGNECHKINI: uint64(role.Pos) > uint64(frontMax)}) } oldChapter, oldSection := stage.DCAHJELNJNP, stage.SectionId - stage.DCAHJELNJNP = nextLevel.DCAHJELNJNP - stage.SectionId = nextLevel.SectionId - stage.IMPNAHBCADN = proto.Clone(nextLevel.IMPNAHBCADN).(*pb.NCKOKDHNJDC) - run.FMIGOKIDKJL = nextPending + var nextNotify *pb.GridFightSyncUpdateResultScNotify + if transition != nil { + stage.DCAHJELNJNP = nextLevel.DCAHJELNJNP + stage.SectionId = nextLevel.SectionId + stage.IMPNAHBCADN = proto.Clone(nextLevel.IMPNAHBCADN).(*pb.NCKOKDHNJDC) + run.FMIGOKIDKJL = nextPending + nextNotify = cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: nextLevel}}, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: nextPending}}) + } else { + // A battle has no pending action to allocate from. The persisted CAS + // revision is monotonic and also backs Bonfire entry queue allocation. + if revision >= math.MaxUint32 { + return fmt.Errorf("CW settlement queue exhausted") + } + run.FMIGOKIDKJL = &pb.CHCHAJIANIM{QueuePosition: uint32(revision)} + nextNotify, err = cwAdvanceRouteNode(catalog, run) + if err != nil { + return err + } + // The allocation seed is not a Client pending action, so it must not + // produce a synthetic FinishPendingAction notification. + for _, group := range nextNotify.GCPNIHHBGGD { + kept := group.JKPJFKCBIEM[:0] + for _, update := range group.JKPJFKCBIEM { + if update.GetPMFBIGLPJJA() != uint32(revision) { + kept = append(kept, update) + } + } + group.JKPJFKCBIEM = kept + } + } + runtime, err := cwApplyBonfireEnemyRules(catalog, run, nil) + if err != nil { + return err + } + if runtime.Rules["PetPalStarDown"] != 0 && stage.GetIMPNAHBCADN().GetMPOBBIPMNNJ() != nil { + nextNotify.GCPNIHHBGGD = append(nextNotify.GCPNIHHBGGD, cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: &pb.AINFNFIDGFF{DCAHJELNJNP: stage.DCAHJELNJNP, SectionId: stage.SectionId, IMPNAHBCADN: stage.IMPNAHBCADN}}}).GCPNIHHBGGD...) + } player.GAJGBBFELEL = &pb.GMBMNFLMKPI{IBCPAKJAPFF: pb.KMJNPEMPNMC_KMJNPEMPNMC_AEINKINPAFL, LMICDNNABNM: pb.GGNKDLAHAGH_GGNKDLAHAGH_FHOHPFBDNOH} end := &pb.GridFightEndBattleStageNotify{DCAHJELNJNP: oldChapter, SectionId: oldSection, EMOHLJHPOPC: stage.EMOHLJHPOPC, HFLPDCJDIAC: progress, OAHFCPPIMLF: penalty.ThresholdPosition, CBHJKFNCDAD: perfect, JPKHBELGHCG: previousStreak, OCCOHKIMGCN: player.GDAKCOICIDA, CLFNPMGHMFC: basicGold, DMNILJEGICO: interest, OGLOCDMNNIM: streakGold, ODJEBDNBLLC: previousHP, PAGPKOKMDBK: player.GridFightLineupHp, LKCJAPIGEND: player.PPKKHHNEOHB, NKBIDLBLONC: damage, HMKOKACNHJH: hpChanges, AEOCOGHMEBG: &pb.GEEMFDBDMDH{PBMAHOJBAGG: uint32(gain), EDCLIPCEHAO: &pb.NFPLDMFCLHA{Level: previousLevel, Exp: previousExp, KDBMPKJKAKI: previousRow.LevelUpExp}, LHIAODNJIIC: &pb.NFPLDMFCLHA{Level: plan.Level, Exp: plan.Exp, KDBMPKJKAKI: row.LevelUpExp}}} - if err = s.saveCurrencyWarsData(data, catalog); err != nil { + if err = s.saveCurrencyWarsDataWithRuntime(data, catalog, runtime); err != nil { return err } CURRENT_BATTLE.Delete(s.Token) // Duplicate uploads cannot award again. @@ -285,7 +344,8 @@ func finishCurrencyWarsBattle(s *Session, req *pb.PVEBattleResultCsReq, current if err = s.Send(end); err != nil { return err } - if err = s.Send(cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: nextLevel}}, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_JOMFJHOCHJP{JOMFJHOCHJP: player.GAJGBBFELEL}}, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: nextPending}})); err != nil { + nextNotify.GCPNIHHBGGD = append(nextNotify.GCPNIHHBGGD, cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_JOMFJHOCHJP{JOMFJHOCHJP: player.GAJGBBFELEL}}).GCPNIHHBGGD...) + if err = s.Send(nextNotify); err != nil { return err } PacketLog(fmt.Sprintf("CW_SETTLEMENT saved battle=%d progress=%d gold=%d basic=%d interest=%d streak=%d exp=%d next=%d/%d revision=%d", req.BattleId, progress, player.Gold, basicGold, interest, streakGold, plan.Exp, stage.DCAHJELNJNP, stage.SectionId, s.currencyWarsRevision)) diff --git a/internal/gameserver/currency_wars_spotlight.go b/internal/gameserver/currency_wars_spotlight.go index 74aabc9..01b8e45 100644 --- a/internal/gameserver/currency_wars_spotlight.go +++ b/internal/gameserver/currency_wars_spotlight.go @@ -46,22 +46,34 @@ func cwSpotlightChoices(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH) (*pb used[r.RoleId] = true } } - var ids []uint32 + var ids, safeIDs []uint32 for id, row := range rows { if run.IsOverlock && !row.IsOCEffective { continue } - compatible := false + compatible, hasUsedRole := false, false for _, role := range row.SuitableRoles { if owned[role] && !used[role] { compatible = true - break + } + if owned[role] && used[role] { + hasUsedRole = true } } if compatible { ids = append(ids, id) + if !hasUsedRole { + safeIDs = append(safeIDs, id) + } } } + // The Client can offer every compatible owned role, including one with an + // existing binding. Prefer options without such roles when available so a + // valid-looking selection cannot be rejected as a duplicate. This is a + // server offer policy, not a claim about the original selection algorithm. + if len(safeIDs) > 0 { + ids = safeIDs + } sort.Slice(ids, func(i, j int) bool { return ids[i] < ids[j] }) if len(ids) == 0 { return nil, fmt.Errorf("CW no compatible Spotlight choices for owned roles") @@ -116,11 +128,16 @@ func cwSelectSpotlight(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, selec return nil, fmt.Errorf("CW Spotlight role is incompatible") } player, team, _ := cwComponents(run) - owned := false - for _, r := range team.GridGameRoleList { - owned = owned || r.Id == selection.RoleId + if player == nil || team == nil { + return nil, fmt.Errorf("CW Spotlight player or team missing") } - if !owned { + var owned *pb.CDEAABODKCP + for _, r := range team.GridGameRoleList { + if r.Id == selection.RoleId && (owned == nil || r.RoleStar > owned.RoleStar || r.RoleStar == owned.RoleStar && r.UniqueId < owned.UniqueId) { + owned = r + } + } + if owned == nil { return nil, fmt.Errorf("CW Spotlight role not owned") } cwEnsureSpotlights(run) @@ -134,7 +151,10 @@ func cwSelectSpotlight(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, selec if e != nil { return nil, e } - item := &pb.FMBACDOFCAL{UniqueId: uid, IHHNLLAJAGB: row.ID, RoleId: selection.RoleId} + // AddOrUpdate shuffles proto fields into the binding record; MDNAGANGNKK + // becomes RoleUniqueID, RoleId remains the configuration ID. Native + // GetActiveSpotLightBindingByRoleId + binding constructor corroborate it. + item := &pb.FMBACDOFCAL{UniqueId: uid, IHHNLLAJAGB: row.ID, RoleId: selection.RoleId, MDNAGANGNKK: owned.UniqueId} state.FNNEPMAPOOF = append(state.FNNEPMAPOOF, item) stage, node := cwStage(run) if stage == nil || node == nil || !node.HPNNLMBHOPF { @@ -158,7 +178,7 @@ func cwSelectSpotlight(c *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, selec } func init() { - handle("GridFightSpotLightEnter", func(s *Session, _ *pb.GridFightSpotLightEnterCsReq, rsp *pb.GridFightSpotLightEnterScRsp) error { + cwHandle("GridFightSpotLightEnter", func(s *Session, _ *pb.GridFightSpotLightEnterCsReq, rsp *pb.GridFightSpotLightEnterScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS) c, data, e := cwPreparingData(s) if e != nil { @@ -185,7 +205,7 @@ func init() { if e = s.saveCurrencyWarsData(data, c); e != nil { return nil } - if e = s.Send(cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}})); e != nil { + if e = cwSend(s, cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: pending}})); e != nil { return e } rsp.Retcode = 0 diff --git a/internal/gameserver/currency_wars_supply.go b/internal/gameserver/currency_wars_supply.go new file mode 100644 index 0000000..5af137e --- /dev/null +++ b/internal/gameserver/currency_wars_supply.go @@ -0,0 +1,187 @@ +package gameserver + +import ( + "fmt" + "maps" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +// Native Supply selection capture march-cw-supply-next: equipment Source=9. +// This is the protocol acquisition-source discriminator, not a game item ID. +const cwEquipmentSourceSupply uint32 = 9 + +// Applies only to the detached pending-action snapshot; the caller saves the +// complete transaction before publishing any grant or queue acknowledgement. +func cwSelectSupply(catalog *common.CurrencyWarsCatalog, run *pb.MPIMAEMCEFH, request *pb.HMNMJKCHABE) (*pb.GridFightSyncUpdateResultScNotify, error) { + pending := run.GetFMIGOKIDKJL() + offer := pending.GetFIKAGBAEOAP() + if offer == nil || request == nil || offer.DAEMEBCKHIK == 0 || uint64(len(request.LOAFKKAFBOK)) != uint64(offer.DAEMEBCKHIK) { + return nil, fmt.Errorf("CW Supply selection count differs from offer") + } + // Paid additional selections have no verified cost/update sequence yet. + if offer.JJPMDBCPJBA < offer.DAEMEBCKHIK || offer.PLPJNCDKMAD != 0 { + return nil, fmt.Errorf("CW paid Supply selection is not captured") + } + player, team, _ := cwComponents(run) + stage, node := cwStage(run) + var bag *pb.CONONEALNOF + for _, c := range run.NAGDJGMMCBE { + if v := c.GetGCKLIONKMJC(); v != nil { + bag = v + } + } + if player == nil || team == nil || stage == nil || node == nil || bag == nil || len(team.GridGameRoleList) == 0 { + return nil, fmt.Errorf("CW Supply components missing") + } + equipment, err := common.LoadCurrencyWarsEquipment(catalog) + if err != nil { + return nil, err + } + front, err := catalog.IntegerRule("GridFight_Front_AvatarMaxNum") + if err != nil { + return nil, err + } + back, err := catalog.IntegerRule("GridFight_Back_AvatarMaxNum") + if err != nil { + return nil, err + } + overflow, err := catalog.IntegerRule("GridFight_Bench_OverFlow_AvatarNum") + if err != nil { + return nil, err + } + scales := team.GridGameRoleList[0].ConvertPropertyToFixpoint + for _, role := range team.GridGameRoleList { + if !maps.Equal(scales, role.ConvertPropertyToFixpoint) { + return nil, fmt.Errorf("CW Supply role property template differs") + } + } + notify := &pb.GridFightSyncUpdateResultScNotify{} + used := map[uint32]bool{} + for _, index := range request.LOAFKKAFBOK { + // The native action stores one-based option indices. + if index == 0 || uint64(index) > uint64(len(offer.MFBAKLCBPCJ)) || used[index] { + return nil, fmt.Errorf("CW Supply option invalid/duplicated") + } + used[index] = true + choice := offer.MFBAKLCBPCJ[index-1] + if choice == nil { + return nil, fmt.Errorf("CW Supply option missing") + } + drop := choice.GetOPPFPECOBEF() + if drop == nil || drop.FKKGLFOHGGA != pb.MJJIFGINJAJ_MJJIFGINJAJ_BDPIMPJOJBK || drop.FNLMKJLKLFH != choice.RoleId || drop.Num != 1 { + return nil, fmt.Errorf("CW Supply role drop differs from display") + } + star := drop.GetDisplayValue().GetRoleStar() + if _, err = catalog.CapturedRoleVariant(choice.RoleId, star); err != nil { + return nil, err + } + occupied := map[uint32]bool{} + for _, r := range team.GridGameRoleList { + occupied[r.Pos] = true + } + for _, r := range team.KCOMPKMJCMC { + occupied[r.Pos] = true + } + for _, f := range team.PMEOPPDAMLM { + occupied[f.Pos] = true + } + var pos uint32 + for p := uint64(front+back) + 1; p <= uint64(front+back)+uint64(player.MICEOJBAKGN)+uint64(overflow); p++ { + if p > uint64(^uint32(0)) { + break + } + if !occupied[uint32(p)] { + pos = uint32(p) + break + } + } + id, e := cwNextEntityID(run) + if e != nil { + return nil, e + } + role := &pb.CDEAABODKCP{Id: choice.RoleId, RoleStar: star, UniqueId: id, Pos: pos, ConvertPropertyToFixpoint: maps.Clone(scales)} + team.GridGameRoleList = append(team.GridGameRoleList, role) + // Reference sync orders equipment acquisition, role acquisition, then + // merges as separate result groups sharing the selected option context. + grants := cwNotify() + grants.GCPNIHHBGGD[0].GridUpdateSrc = pb.JJDFGMMMCMI_JJDFGMMMCMI_GLKAGBGLENM + grants.GCPNIHHBGGD[0].OOEOCGLLHFO = []uint32{index} + if len(choice.DHLBEFLOOPM) != len(choice.GridFightItemList) { + return nil, fmt.Errorf("CW Supply equipment display differs") + } + for i, item := range choice.DHLBEFLOOPM { + if item == nil || item.FKKGLFOHGGA != pb.MJJIFGINJAJ_MJJIFGINJAJ_NLFCABFPJHD || item.Num != 1 || item.FNLMKJLKLFH != choice.GridFightItemList[i] { + return nil, fmt.Errorf("CW Supply equipment drop differs") + } + if _, ok := equipment[item.FNLMKJLKLFH]; !ok { + return nil, fmt.Errorf("CW Supply equipment %d not captured", item.FNLMKJLKLFH) + } + uid, e := cwNextEntityID(run) + if e != nil { + return nil, e + } + gear := &pb.IJDLENJJBHJ{UniqueId: uid, GridFightEquipmentId: item.FNLMKJLKLFH, Source: cwEquipmentSourceSupply} + bag.GridFightEquipmentList = append(bag.GridFightEquipmentList, gear) + grants.GCPNIHHBGGD[0].JKPJFKCBIEM = append(grants.GCPNIHHBGGD[0].JKPJFKCBIEM, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_LMOLELDIKMA{LMOLELDIKMA: &pb.AOFOEOIJEHF{GridFightEquipmentList: []*pb.IJDLENJJBHJ{gear}}}}) + } + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, grants.GCPNIHHBGGD...) + roles := cwNotify(&pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_PIDDDHKPDDM{PIDDDHKPDDM: role}}) + roles.GCPNIHHBGGD[0].GridUpdateSrc = pb.JJDFGMMMCMI_JJDFGMMMCMI_GLKAGBGLENM + roles.GCPNIHHBGGD[0].OOEOCGLLHFO = []uint32{index} + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, roles.GCPNIHHBGGD...) + merged, e := cwMergeRoles(catalog, run, id) + if e != nil { + return nil, e + } + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, merged...) + for _, r := range team.GridGameRoleList { + if r.Pos == 0 { + return nil, fmt.Errorf("CW Supply bench is full") + } + } + } + entries, err := cwNodeTransitions(catalog) + if err != nil { + return nil, err + } + var next *cwNodeTransition + for i := range entries { + e := &entries[i] + if e.Route == stage.EMOHLJHPOPC && e.Chapter == stage.DCAHJELNJNP && e.Section == stage.SectionId && e.Stage == node.StageId && e.Penalty == node.IFIIOIIKJHO && e.Division == run.DivisionId && e.Overclock == run.IsOverlock { + if next != nil { + return nil, fmt.Errorf("CW Supply transition duplicated") + } + next = e + } + } + if next == nil { + return nil, fmt.Errorf("CW Supply next node not captured") + } + level := new(pb.AINFNFIDGFF) + nextPending := new(pb.CHCHAJIANIM) + if err = proto.Unmarshal(next.LevelWire, level); err != nil { + return nil, err + } + if err = proto.Unmarshal(next.PendingWire, nextPending); err != nil { + return nil, err + } + if level.IMPNAHBCADN == nil || nextPending.GetNNDGEJFLGGF() == nil { + return nil, fmt.Errorf("CW Supply next node incomplete") + } + found := false + for _, n := range stage.OOMMIIKPHBC { + found = found || (n.DCAHJELNJNP == level.DCAHJELNJNP && n.SectionId == level.SectionId) + } + if !found { + return nil, fmt.Errorf("CW Supply next node outside route") + } + stage.DCAHJELNJNP = level.DCAHJELNJNP + stage.SectionId = level.SectionId + stage.IMPNAHBCADN = proto.Clone(level.IMPNAHBCADN).(*pb.NCKOKDHNJDC) + run.FMIGOKIDKJL = nextPending + notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, cwNotify(cwFinish(pending.QueuePosition), cwUnlock(), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_OOICHLAMNIG{OOICHLAMNIG: level}}, &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_FMIGOKIDKJL{FMIGOKIDKJL: nextPending}}).GCPNIHHBGGD...) + return notify, nil +} diff --git a/internal/gameserver/currency_wars_supply_layer.go b/internal/gameserver/currency_wars_supply_layer.go new file mode 100644 index 0000000..e6c876d --- /dev/null +++ b/internal/gameserver/currency_wars_supply_layer.go @@ -0,0 +1,55 @@ +package gameserver + +import ( + "fmt" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +// cwCapturedSupplyLayer obtains the empty Supply node container from the +// revision-bound native transition capture. It deliberately does not copy +// that capture's Supply options, queue, rewards or player-specific state. +// The current capture has an empty enemy-layer container with branch index 1; +// this is checked against the resource rather than assumed for future clients. +// A caller must also construct a valid Supply pending action before committing +// a transition; this helper alone does not make a Supply round playable. +func cwCapturedSupplyLayer(catalog *common.CurrencyWarsCatalog) (*pb.NCKOKDHNJDC, error) { + if catalog == nil { + return nil, fmt.Errorf("CW Supply catalog missing") + } + entries, err := cwNodeTransitions(catalog) + if err != nil { + return nil, err + } + var layer *pb.NCKOKDHNJDC + for _, entry := range entries { + level := new(pb.AINFNFIDGFF) + pending := new(pb.CHCHAJIANIM) + if err := proto.Unmarshal(entry.LevelWire, level); err != nil { + return nil, fmt.Errorf("CW captured Supply level: %w", err) + } + if err := proto.Unmarshal(entry.RoundWire, pending); err != nil { + return nil, fmt.Errorf("CW captured Supply pending: %w", err) + } + if pending.GetFIKAGBAEOAP() == nil { + continue + } + if level.IMPNAHBCADN == nil { + return nil, fmt.Errorf("CW captured Supply layer missing") + } + enemy := level.IMPNAHBCADN.GetMPOBBIPMNNJ() + if enemy == nil || enemy.MOADBALHMFD != 1 || enemy.LNDKCPBJDKH != 0 || len(enemy.BPDABHGFBFO) != 0 { + return nil, fmt.Errorf("CW captured Supply layer contains unexpected state") + } + if layer != nil && !proto.Equal(layer, level.IMPNAHBCADN) { + return nil, fmt.Errorf("CW captured Supply layers disagree") + } + layer = level.IMPNAHBCADN + } + if layer == nil { + return nil, fmt.Errorf("CW captured Supply layer unavailable") + } + return proto.Clone(layer).(*pb.NCKOKDHNJDC), nil +} diff --git a/internal/gameserver/currency_wars_test.go b/internal/gameserver/currency_wars_test.go index d10c80b..2a5c3b6 100644 --- a/internal/gameserver/currency_wars_test.go +++ b/internal/gameserver/currency_wars_test.go @@ -1,15 +1,11 @@ package gameserver import ( - "os" - "path/filepath" - "strconv" "strings" "testing" "gac-hkrpg-go/internal/common" goproto "gac-hkrpg-go/protocol/proto" - "google.golang.org/protobuf/proto" ) func TestCurrencyWarsEntranceUsesCapturedRoomConditionWithoutMutatingScene(t *testing.T) { @@ -43,7 +39,42 @@ func TestCurrencyWarsEntranceUsesCapturedRoomConditionWithoutMutatingScene(t *te } } -func TestUnimplementedCurrencyWarsRequestsRemainSuppressed(t *testing.T) { +func TestCurrencyWarsSelectedEnemyBranchUsesSavedOneBasedChoice(t *testing.T) { + first := &goproto.KKBGIPCAGGH{IFIIOIIKJHO: 91} + second := &goproto.KKBGIPCAGGH{IFIIOIIKJHO: 92} + for _, tc := range []struct { + name string + selection uint32 + branches []*goproto.KKBGIPCAGGH + want *goproto.KKBGIPCAGGH + wantErr string + }{ + {name: "select first offered branch", selection: 1, branches: []*goproto.KKBGIPCAGGH{first, second}, want: first}, + {name: "select second offered branch", selection: 2, branches: []*goproto.KKBGIPCAGGH{first, second}, want: second}, + {name: "selection is required", selection: 0, branches: []*goproto.KKBGIPCAGGH{first}, wantErr: "outside"}, + {name: "selection must be offered", selection: 2, branches: []*goproto.KKBGIPCAGGH{first}, wantErr: "outside"}, + {name: "selected branch cannot be empty", selection: 1, branches: []*goproto.KKBGIPCAGGH{nil}, wantErr: "is empty"}, + {name: "no offered branches", selection: 1, wantErr: "no offered plans"}, + } { + t.Run(tc.name, func(t *testing.T) { + got, err := cwSelectedEnemyBranch(&goproto.MDJBBILMHLC{MOADBALHMFD: tc.selection, BPDABHGFBFO: tc.branches}) + if tc.wantErr != "" { + if err == nil || !strings.Contains(err.Error(), tc.wantErr) { + t.Fatalf("branch error = %v; want %q", err, tc.wantErr) + } + return + } + if err != nil { + t.Fatalf("resolve selected branch: %v", err) + } + if got != tc.want { + t.Fatalf("selected plan = %p; want %p", got, tc.want) + } + }) + } +} + +func TestCurrencyWarsBattleAndRefreshRequestsUseTypedHandlers(t *testing.T) { for _, name := range []string{ "GridFightEnterBattleStageCsReq", "GridFightRefreshShopCsReq", @@ -53,14 +84,17 @@ func TestUnimplementedCurrencyWarsRequestsRemainSuppressed(t *testing.T) { if !ok { t.Fatalf("protocol command table is missing %s", name) } - if !isDangerCmd(uint16(id)) { - t.Fatalf("unsupported CW request %s is not protected from an empty response", name) + if typedHandlers[uint16(id)] == nil { + t.Fatalf("implemented CW request %s has no typed handler", name) } - if typedHandlers[uint16(id)] != nil || rawHandlers[uint16(id)] != nil { - t.Fatalf("unsupported CW request %s unexpectedly has a handler", name) + if rawHandlers[uint16(id)] != nil { + t.Fatalf("CW request %s is registered through an untyped handler", name) } if _, ok := dummyResponses[uint16(id)]; ok { - t.Fatalf("unsupported CW request %s unexpectedly has a dummy response", name) + t.Fatalf("CW request %s unexpectedly has a dummy response", name) + } + if !isDangerCmd(uint16(id)) { + t.Fatalf("CW request %s is not protected from dispatcher auto-replies", name) } if _, ok := goproto.RspIDByReqID[uint32(id)]; !ok { t.Fatalf("test request %s has no paired response to protect", name) @@ -74,14 +108,13 @@ func TestUnimplementedCurrencyWarsRequestsRemainSuppressed(t *testing.T) { } } -func TestCurrencyWarsStartGameplayLogsRequestedModeWithoutReply(t *testing.T) { +func TestCurrencyWarsStartGameplayUsesCurrentTypedRequestHandler(t *testing.T) { id := uint16(goproto.CmdIDByName["GridFightStartGamePlayCsReq"]) - handler := rawHandlers[id] - if handler == nil { - t.Fatal("CW start request must have a mode-observation handler") + if typedHandlers[id] == nil { + t.Fatal("CW start request must have a typed gameplay handler") } - if typedHandlers[id] != nil { - t.Fatal("CW start request must not send an unverified typed response") + if rawHandlers[id] != nil { + t.Fatal("CW start request must not use an untyped mode-observation handler") } if _, ok := dummyResponses[id]; ok { t.Fatal("CW start request must not receive an empty response") @@ -89,47 +122,8 @@ func TestCurrencyWarsStartGameplayLogsRequestedModeWithoutReply(t *testing.T) { if !isDangerCmd(id) { t.Fatal("CW start request must remain protected from dispatcher auto-replies") } - if err := handler(nil, nil); err == nil { - t.Fatal("empty start request must not be misreported as Standard Gambit") - } - - oldWD, err := os.Getwd() - if err != nil { - t.Fatal(err) - } - if err := os.Chdir(t.TempDir()); err != nil { - t.Fatal(err) - } - t.Cleanup(func() { _ = os.Chdir(oldWD) }) - - for _, tc := range []struct { - name string - overclock bool - wantMode string - divisionID uint32 - }{ - {name: "standard", wantMode: "standard", divisionID: 42}, - {name: "overclock", overclock: true, wantMode: "overclock", divisionID: 42}, - } { - t.Run(tc.name, func(t *testing.T) { - req := &goproto.GridFightStartGamePlayCsReq{DivisionId: tc.divisionID, IsOverlock: tc.overclock} - payload, err := proto.Marshal(req) - if err != nil { - t.Fatal(err) - } - // A nil session makes any accidental attempt to send a response fail. - if err := handler(nil, payload); err != nil { - t.Fatalf("observe mode: %v", err) - } - logData, err := os.ReadFile(filepath.Join("gameserver.log")) - if err != nil { - t.Fatal(err) - } - log := string(logData) - if !strings.Contains(log, "CW_START_GAMEPLAY observed mode="+tc.wantMode+" division="+strconv.FormatUint(uint64(tc.divisionID), 10)) || !strings.Contains(log, "response_suppressed=true reason=run_state_unverified") { - t.Fatalf("mode diagnostic missing or malformed: %s", log) - } - }) + if _, ok := goproto.RspIDByReqID[uint32(id)]; !ok { + t.Fatal("CW start request has no paired response in the current protocol table") } } diff --git a/internal/gameserver/currency_wars_tracking.go b/internal/gameserver/currency_wars_tracking.go index fa9ce2e..0be9469 100644 --- a/internal/gameserver/currency_wars_tracking.go +++ b/internal/gameserver/currency_wars_tracking.go @@ -16,7 +16,7 @@ func cwEquipTrackSync(player *pb.NIHNGPKHEPC) *pb.GridFightSyncUpdateResultScNot // passes false with empty lists and source None. The boolean is NOT a delete flag. // Evidence: named RuntimeMethodHandle and bounded PE disassembly in CW notes. func init() { - handle("GridFightUpdateEquipTrack", func(s *Session, req *pb.GridFightUpdateEquipTrackCsReq, rsp *pb.GridFightUpdateEquipTrackScRsp) error { + cwHandle("GridFightUpdateEquipTrack", func(s *Session, req *pb.GridFightUpdateEquipTrackCsReq, rsp *pb.GridFightUpdateEquipTrackScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) catalog, data, e := cwPreparingData(s) if e != nil { @@ -73,14 +73,14 @@ func init() { if e = s.saveCurrencyWarsData(data, catalog); e != nil { return nil } - if e = s.Send(cwEquipTrackSync(player)); e != nil { + if e = cwSend(s, cwEquipTrackSync(player)); e != nil { return e } rsp.Retcode = 0 PacketLog(fmt.Sprintf("CW_EQUIP_TRACK saved updates=%d tracks=%d revision=%d", len(req.DKEIDONNDCJ), len(entries), s.currencyWarsRevision)) return nil }) - handle("GridFightUpdateEquipTrackPriority", func(s *Session, req *pb.GridFightUpdateEquipTrackPriorityCsReq, rsp *pb.GridFightUpdateEquipTrackPriorityScRsp) error { + cwHandle("GridFightUpdateEquipTrackPriority", func(s *Session, req *pb.GridFightUpdateEquipTrackPriorityCsReq, rsp *pb.GridFightUpdateEquipTrackPriorityScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) catalog, data, e := cwPreparingData(s) if e != nil { @@ -111,7 +111,7 @@ func init() { if e = s.saveCurrencyWarsData(data, catalog); e != nil { return nil } - if e = s.Send(cwEquipTrackSync(player)); e != nil { + if e = cwSend(s, cwEquipTrackSync(player)); e != nil { return e } rsp.Retcode = 0 diff --git a/internal/gameserver/currency_wars_transactions.go b/internal/gameserver/currency_wars_transactions.go index 6d60e38..3a819cd 100644 --- a/internal/gameserver/currency_wars_transactions.go +++ b/internal/gameserver/currency_wars_transactions.go @@ -68,7 +68,7 @@ func cwPreparingData(s *Session) (*common.CurrencyWarsCatalog, *pb.GridFightGetD func init() { // Native replay confirms HFCBOIOAECK removes an owned role. Its command // is resolved by the current table, including the actual typed response. - handle("GridFightRecycleRole", func(s *Session, req *pb.GridFightRecycleRoleCsReq, rsp *pb.GridFightRecycleRoleScRsp) error { + cwHandle("GridFightRecycleRole", func(s *Session, req *pb.GridFightRecycleRoleCsReq, rsp *pb.GridFightRecycleRoleScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) catalog, data, err := cwPreparingData(s) if err != nil { @@ -115,7 +115,7 @@ func init() { } notify := cwNotify(cwGoldSync(player.Gold), &pb.KFNCAIHIHCM{MNLCHEJKDHO: &pb.KFNCAIHIHCM_HFCBOIOAECK{HFCBOIOAECK: req.UniqueId}}) notify.GCPNIHHBGGD[0].GridUpdateSrc = pb.JJDFGMMMCMI_JJDFGMMMCMI_JOMIDGFCHPH - if err = s.Send(notify); err != nil { + if err = cwSend(s, notify); err != nil { return err } rsp.Retcode = 0 @@ -124,7 +124,7 @@ func init() { }) // Current table names this response BuyGoodRsp. Controlled native capture // confirms that name/command, including zero-based indices and sync-before-rsp. - handleNamed("GridFightBuyGoods", "BuyGoodRsp", func(s *Session, req *pb.GridFightBuyGoodsCsReq, rsp *pb.BuyGoodRsp) error { + cwHandleNamed("GridFightBuyGoods", "BuyGoodRsp", func(s *Session, req *pb.GridFightBuyGoodsCsReq, rsp *pb.BuyGoodRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) catalog, data, err := cwPreparingData(s) if err != nil { @@ -173,6 +173,7 @@ func init() { scales := team.GridGameRoleList[0].ConvertPropertyToFixpoint for _, r := range team.GridGameRoleList { if !maps.Equal(scales, r.ConvertPropertyToFixpoint) { + PacketLog(fmt.Sprintf("CW_BUY rejected: party property scales differ role_uid=%d", r.UniqueId)) rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS) return nil } @@ -190,6 +191,7 @@ func init() { offer := shop.OGDKJPDFFAI[i] roleOffer := offer.GetBDPIMPJOJBK() if _, e := catalog.CapturedRoleVariant(roleOffer.RoleId, roleOffer.RoleStar); e != nil { + PacketLog(fmt.Sprintf("CW_BUY rejected: missing captured role variant role=%d star=%d error=%v", roleOffer.RoleId, roleOffer.RoleStar, e)) rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_CONF_MISS) return nil } @@ -201,6 +203,9 @@ func init() { for _, r := range team.KCOMPKMJCMC { occupied[r.Pos] = true } + for _, f := range team.PMEOPPDAMLM { + occupied[f.Pos] = true + } for p := uint32(front+back) + 1; uint64(p) <= uint64(front+back)+uint64(player.MICEOJBAKGN); p++ { if !occupied[p] { pos = p @@ -239,7 +244,7 @@ func init() { notify.GCPNIHHBGGD[0].OOEOCGLLHFO = indices notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, groups...) notify.GCPNIHHBGGD = append(notify.GCPNIHHBGGD, cwNotify(cwShopSync(shop)).GCPNIHHBGGD...) - if err = s.Send(notify); err != nil { + if err = cwSend(s, notify); err != nil { return err } rsp.CGAFCMIAKLI = indices @@ -247,7 +252,7 @@ func init() { PacketLog(fmt.Sprintf("CW_BUY saved slots=%v gold=%d revision=%d", indices, player.Gold, s.currencyWarsRevision)) return nil }) - handle("GridFightLockShop", func(s *Session, req *pb.GridFightLockShopCsReq, rsp *pb.GridFightLockShopScRsp) error { + cwHandle("GridFightLockShop", func(s *Session, req *pb.GridFightLockShopCsReq, rsp *pb.GridFightLockShopScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) catalog, data, err := cwPreparingData(s) if err != nil { @@ -261,13 +266,13 @@ func init() { if err = s.saveCurrencyWarsData(data, catalog); err != nil { return nil } - if err = s.Send(cwNotify(cwShopSync(shop))); err != nil { + if err = cwSend(s, cwNotify(cwShopSync(shop))); err != nil { return err } rsp.Retcode = 0 return nil }) - handle("GridFightRefreshShop", func(s *Session, _ *pb.GridFightRefreshShopCsReq, rsp *pb.GridFightRefreshShopScRsp) error { + cwHandle("GridFightRefreshShop", func(s *Session, _ *pb.GridFightRefreshShopCsReq, rsp *pb.GridFightRefreshShopScRsp) error { rsp.Retcode = uint32(pb.Retcode_RET_GRID_FIGHT_PARAM_NOT_MATCH) catalog, data, err := cwPreparingData(s) if err != nil { @@ -353,7 +358,7 @@ func init() { if err = s.saveCurrencyWarsData(data, catalog); err != nil { return nil } - if err = s.Send(cwNotify(cwGoldSync(gold), cwShopSync(shop))); err != nil { + if err = cwSend(s, cwNotify(cwGoldSync(gold), cwShopSync(shop))); err != nil { return err } rsp.Retcode = 0 @@ -370,12 +375,12 @@ func init() { if err == nil { _, _, shop := cwComponents(data.DHFOFLFCLAH) if shop != nil { - if err = s.Send(cwNotify(cwShopSync(shop), cwUnlock())); err != nil { + if err = cwSend(s, cwNotify(cwShopSync(shop), cwUnlock())); err != nil { return err } rsp.Retcode = 0 } } - return s.Send(rsp) + return cwSend(s, rsp) }) } diff --git a/internal/gameserver/currency_wars_trial.go b/internal/gameserver/currency_wars_trial.go new file mode 100644 index 0000000..9fcd868 --- /dev/null +++ b/internal/gameserver/currency_wars_trial.go @@ -0,0 +1,28 @@ +package gameserver + +import ( + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +// Fake avatars belong to CW's trial configuration, not the adventure roster. +// Source reference resolves SpecialAvatarID and serializes the special ID with +// AVATAR_TRIAL_TYPE. Current native rows supply all levels/equipment identities. +func cwTrialBattleAvatar(c *common.CurrencyWarsCatalog, role common.CurrencyWarsRoleVariant, index uint32) (*pb.BattleAvatar, error) { + row, e := c.TrialAvatar(role.Config.SpecialAvatarID, role.Config.AvatarID, playerWorldLevel) + if e != nil { + return nil, e + } + avatar := &common.AvatarJson{AvatarID: row.AvatarID, Level: row.Level, Promotion: row.Promotion, Data: common.AvatarData{Rank: row.Rank}} + var equipment *common.Lightcone + if row.EquipmentID != 0 { + equipment = &common.Lightcone{ItemID: row.EquipmentID, Level: row.EquipmentLevel, Promotion: row.EquipmentPromotion, Rank: row.EquipmentRank} + } + result, _ := avatar.ToBattleAvatarProto(index, equipment, nil) + result.Id = row.SpecialAvatarID + result.AvatarType = pb.AvatarType_AvatarType_AvatarTrialType + result.WorldLevel = playerWorldLevel + result.EnhancedId = row.EnhancedID + result.IGDEHGIKFJA = append([]uint32(nil), row.ExRankIDList...) + return result, nil +} diff --git a/internal/gameserver/gacha_presentation.go b/internal/gameserver/gacha_presentation.go new file mode 100644 index 0000000..b8a9da5 --- /dev/null +++ b/internal/gameserver/gacha_presentation.go @@ -0,0 +1,104 @@ +package gameserver + +import ( + "crypto/sha256" + _ "embed" + "encoding/hex" + "encoding/json" + "fmt" + "strings" + + "gac-hkrpg-go/internal/common" +) + +// The maintained adapter is embedded separately from scripts/: a disabled +// presentation must not be executed merely because heartbeat lists Lua files. +// +//go:embed gacha_presentation.lua +var gachaPresentationAdapter []byte + +// loadGachaPresentationLua supplies the same explicit banner/avatar mapping +// accepted by DoGacha, plus resource-backed art paths. The Client performs its +// own AssetMgr.Exists checks before registering each initialized native clone. +// No user save is read or written here. +func loadGachaPresentationLua() ([]byte, error) { + verified, policy, err := common.LoadBrowsableGachaBanners() + if err != nil { + return nil, err + } + if !policy.NativePresentation.Enabled { + return []byte("\n_G.__GAC_GACHA_PRESENTATION={enabled=false}\n"), nil + } + if policy.NativePresentation.Source == "" || policy.NativePresentation.TemplateGachaID == 0 { + return nil, fmt.Errorf("native gacha presentation template provenance missing") + } + var template common.FeaturedGachaBanner + for _, banner := range verified { + if banner.ID == policy.NativePresentation.TemplateGachaID { + template = banner + break + } + } + if template.ID == 0 || template.AvatarID != 0 { + return nil, fmt.Errorf("native gacha presentation requires a verified generic template") + } + mapped, rules, err := common.LoadLimitedGachaBanners() + if err != nil { + return nil, err + } + var avatars struct { + Rows []struct { + ID uint32 `json:"AvatarID"` + Art string `json:"AvatarCutinFrontImgPath"` + Icon string `json:"DefaultAvatarHeadIconPath"` + } `json:"avatar_config"` + } + raw, err := common.ReadResourceFile("resources/AvatarConfig.json") + if err != nil { + return nil, err + } + if err = json.Unmarshal(raw, &avatars); err != nil { + return nil, err + } + byID := make(map[uint32]struct{ art, icon string }, len(avatars.Rows)) + for _, row := range avatars.Rows { + if _, duplicate := byID[row.ID]; duplicate || row.ID == 0 { + return nil, fmt.Errorf("duplicate/invalid avatar presentation row %d", row.ID) + } + byID[row.ID] = struct{ art, icon string }{row.Art, row.Icon} + } + var payload strings.Builder + fmt.Fprintf(&payload, "\n_G.__GAC_GACHA_PRESENTATION={enabled=true,template_id=%d,template_prefab=%s,rules={five_star_pity=%d,four_star_pity=%d},banners={\n", template.ID, luaNavigationString(template.Prefab), rules.FiveStarPity, rules.FourStarPity) + for index, banner := range mapped { + paths, exists := byID[banner.AvatarID] + if !exists || paths.art == "" || paths.icon == "" { + return nil, fmt.Errorf("mapped avatar %d has no captured presentation paths", banner.AvatarID) + } + fmt.Fprintf(&payload, "{gacha_id=%d,avatar_id=%d,sort_order=%d,art_path=%s,icon_path=%s,four_stars={", banner.GachaID, banner.AvatarID, index+1, luaNavigationString(paths.art), luaNavigationString(paths.icon)) + for _, id := range banner.FourStarIDs { + four, exists := byID[id] + if !exists || four.icon == "" { + return nil, fmt.Errorf("featured four-star %d has no captured portrait", id) + } + fmt.Fprintf(&payload, "{avatar_id=%d,portrait_path=%s},", id, luaNavigationString(four.icon)) + } + payload.WriteString("}},\n") + } + payload.WriteString("}}\n") + // A source update must also replace the owned hooks on a long-lived Client. + // Otherwise an unchanged mapping keeps the old closure after a new server + // executable starts. Lua defers the replacement until Warp is closed. + identity := sha256.New() + identity.Write([]byte(payload.String())) + identity.Write(gachaPresentationAdapter) + fmt.Fprintf(&payload, "_G.__GAC_GACHA_PRESENTATION.digest=%s\n", luaNavigationString(hex.EncodeToString(identity.Sum(nil)))) + // Counters change after draws; do not include them in the static adapter + // digest or each draw would rebuild every tab and invalidate its selection. + pity, err := common.ReadLimitedGachaPity() + if err != nil { + return nil, err + } + fmt.Fprintf(&payload, "_G.__GAC_GACHA_PRESENTATION.pity={since_five_star=%d,since_four_star=%d}\n", pity.SinceFiveStar, pity.SinceFourStar) + payload.Write(gachaPresentationAdapter) + return []byte(payload.String()), nil +} diff --git a/internal/gameserver/gacha_presentation.lua b/internal/gameserver/gacha_presentation.lua new file mode 100644 index 0000000..4e4f64e --- /dev/null +++ b/internal/gameserver/gacha_presentation.lua @@ -0,0 +1,651 @@ +-- Resource-fed per-character Warp tabs. This file is embedded behind the +-- native_presentation policy; it is deliberately outside heartbeat scripts/. +-- It touches only cloned Gacha models and the content of their own Warp tab. +do + local state=_G.__GAC_GACHA_PRESENTATION_STATE + if not state then + state={installed={},failures={},originals={},next_tick=0} + _G.__GAC_GACHA_PRESENTATION_STATE=state + end + local function log(message) + CS.UnityEngine.Debug.Log('[GaC Character Warp] '..tostring(message)) + end + local function config() + return _G.__GAC_GACHA_PRESENTATION + end + local function entry(pool) + if not pool then return nil end + local installed=state.installed[pool.GachaID] + if not installed or installed.pool~=pool then return nil end + return state.by_id and state.by_id[pool.GachaID] + end + local function warp_open() + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GachaMainPage') + return page and page.Trans and page.Trans.gameObject.activeInHierarchy + end + local function native_reflection() + if state.reflection then return state.reflection end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + state.reflection={ + flags=flags, + invoke=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),0), + clone=typeof(CS.System.Object):GetMethod('MemberwiseClone',flags), + empty=CS.System.Array.CreateInstance(typeof(CS.System.Object),0) + } + return state.reflection + end + local function clone(value) + local r=native_reflection() + return r.clone:Invoke(value,r.invoke,nil,r.empty,nil) + end + local function stretch(rect,minx,miny,maxx,maxy) + rect.anchorMin=CS.UnityEngine.Vector2(minx,miny) + rect.anchorMax=CS.UnityEngine.Vector2(maxx,maxy) + rect.offsetMin=CS.UnityEngine.Vector2.zero + rect.offsetMax=CS.UnityEngine.Vector2.zero + rect.localScale=CS.UnityEngine.Vector3.one + end + local function image_object(name,parent) + -- The generated xLua constructor unwraps params Type[] from separate Lua + -- arguments. Passing System.Array as one argument fails overload binding. + local obj=CS.UnityEngine.GameObject(name,typeof(CS.UnityEngine.RectTransform),typeof(CS.UnityEngine.UI.Image)) + obj.transform:SetParent(parent,false) + local image=obj:GetComponent(typeof(CS.UnityEngine.UI.Image)) + return obj,image,obj:GetComponent(typeof(CS.UnityEngine.RectTransform)) + end + local function text_object(source,parent,name,minx,miny,maxx,maxy) + local obj=CS.UnityEngine.Object.Instantiate(source.gameObject) + obj.name=name + obj.transform:SetParent(parent,false) + stretch(obj:GetComponent(typeof(CS.UnityEngine.RectTransform)),minx,miny,maxx,maxy) + local text=obj:GetComponent(source:GetType()) + text.raycastTarget=false + text.color=CS.UnityEngine.Color.white + obj:SetActive(true) + return text + end + local function render(tab,banner) + if tab.__gac_character_banner and tab.__gac_layout_revision==5 and tab.__gac_banner_id==banner.gacha_id then + if not tab.__gac_sidebar_sprites then + state.sidebar_jobs=state.sidebar_jobs or setmetatable({},{__mode='k'}) + state.sidebar_jobs[tab]=true + end + return + end + if tab.__gac_character_banner then + CS.UnityEngine.Object.Destroy(tab.__gac_character_banner) + tab.__gac_character_banner=nil + for _,obj in ipairs(tab.__gac_owned_texts or {})do CS.UnityEngine.Object.Destroy(obj)end + tab.__gac_owned_texts=nil + for _,item in ipairs(tab.__gac_replaced_visuals or {})do pcall(function()item.object:SetActive(item.active)end)end + tab.__gac_replaced_visuals=nil + for _,sprite in ipairs(tab.__gac_sidebar_sprites or {})do CS.UnityEngine.Object.Destroy(sprite)end + tab.__gac_sidebar_sprites=nil + if state.sidebar_jobs then state.sidebar_jobs[tab]=nil end + if state.pity_labels then state.pity_labels[tab]=nil end + tab.__gac_banner_id=nil + end + local content=tab._binder and tab._binder.node_content + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GachaMainPage') + local binder=page and page.LuaTable and page.LuaTable._binder + local source=binder and binder.txt_pool_name + if not content or not source then error('known Warp content/name binder is unavailable') end + local avatar=CS.RPG.GameCore.AvatarExcelTable.GetData(banner.avatar_id) + if not avatar then error('mapped avatar row vanished') end + local avatar_panel=content.transform:Find('AvatarPanel') + local title_panel=content.transform:Find('TitlePanel') + local title_slot=content.transform:Find('TitlePanel/Content/CardPoolNamePanel/CardPoolName') + local subtitle=content.transform:Find('TitlePanel/SubTitlePanel/TextPanel/SubTitleText') + if not avatar_panel or not title_panel or not title_slot or not subtitle then error('captured native banner layout is unavailable') end + local root,background,rect=image_object('GaCCharacterBanner',avatar_panel) + local texts={} + local replaced={} + local function hide(path) + local node=content.transform:Find(path) + if node then replaced[#replaced+1]={object=node.gameObject,active=node.gameObject.activeSelf};node.gameObject:SetActive(false)end + end + -- Rendering is transactional. An exception after the opaque root exists + -- must not leave an untracked overlay covering the tab or add one on every + -- subsequent refresh. + local ok,err=pcall(function() + stretch(rect,0,0,1,1) + -- Reuse the native white title panel/frame. Replace the template's actual + -- illustration nodes, so no opaque rectangle sits over a second banner. + background.color=CS.UnityEngine.Color(1,1,1,0) + background.raycastTarget=false + -- CutinBg is a different illustration and can repeat the character art. + -- Leave the native frame visible rather than layering that asset here. + local art,image,art_rect=image_object('FeaturedAvatar',root.transform) + stretch(art_rect,0.32,0.02,0.99,0.98) + image.color=CS.UnityEngine.Color.white + image.preserveAspect=true + image.raycastTarget=false + local title=text_object(source,title_slot,'FeaturedName',0,0,1,1) + texts[#texts+1]=title.gameObject + title:SafeSetTextID(avatar.AvatarName) + title.fontSize=48;title.color=CS.UnityEngine.Color(0.1,0.1,0.1,1) + local description=text_object(source,title_panel,'FeaturedDescription',0.08,0.51,0.92,0.73) + texts[#texts+1]=description.gameObject + local rules=config().rules + if rules then + description.text='Every '..rules.four_star_pity..' Warps guarantees a 4-star or higher.\nFeatured 5-star guaranteed within '..rules.five_star_pity..' Warps.' + else description.text='Character Warp' end + description.fontSize=23;description.color=CS.UnityEngine.Color(0.1,0.1,0.1,1) + local four_stars=banner.four_stars or {} + if #four_stars>0 then + local label=text_object(source,title_panel,'FeaturedFourStarLabel',0.08,0.44,0.92,0.50) + texts[#texts+1]=label.gameObject + label.text='Featured 4-star characters';label.fontSize=20;label.color=CS.UnityEngine.Color(0.3,0.3,0.3,1) + local cards,card_bg,card_rect=image_object('FeaturedFourStarCards',title_panel) + texts[#texts+1]=cards;card_bg.color=CS.UnityEngine.Color(1,1,1,0);card_bg.raycastTarget=false + stretch(card_rect,0.08,0.14,0.92,0.43) + for index,four in ipairs(four_stars)do + local panel,panel_image,panel_rect=image_object('FourStarCard'..index,cards.transform) + stretch(panel_rect,(index-1)/#four_stars+0.01,0,index/#four_stars-0.01,1) + panel_image.color=CS.UnityEngine.Color(0.57,0.49,0.72,0.12);panel_image.raycastTarget=false + local portrait,portrait_image,portrait_rect=image_object('Portrait',panel.transform) + stretch(portrait_rect,0,0.16,1,1);portrait_image.preserveAspect=true;portrait_image.raycastTarget=false + if CS.RPG.Client.GlobalVars.s_AssetMgr:Exists(four.portrait_path)then + tab:_async_load_sprite_to(portrait_image,four.portrait_path) + else + -- One unavailable supporting portrait must not erase the whole featured + -- character card; keep the text and the other portraits usable. + portrait:SetActive(false) + log('FOUR_STAR_PORTRAIT_MISSING banner='..banner.gacha_id..' avatar='..four.avatar_id) + end + local four_row=CS.RPG.GameCore.AvatarExcelTable.GetData(four.avatar_id) + local name=text_object(source,panel.transform,'AvatarName',0,0,1,0.16) + name:SafeSetTextID(four_row.AvatarName);name.fontSize=16;name.color=CS.UnityEngine.Color(0.15,0.15,0.15,1) + end + end + local pity_label=text_object(source,title_panel,'WarpGuaranteeProgress',0.08,0.035,0.92,0.12) + texts[#texts+1]=pity_label.gameObject;pity_label.fontSize=18;pity_label.color=CS.UnityEngine.Color(0.3,0.3,0.3,1) + local initial_pity=config().pity or {since_five_star=0,since_four_star=0} + if rules then + pity_label.text='5-star: '..initial_pity.since_five_star..'/'..rules.five_star_pity..' 4-star: '..initial_pity.since_four_star..'/'..rules.four_star_pity + else pity_label.text='' end + state.pity_labels=state.pity_labels or setmetatable({},{__mode='k'}) + state.pity_labels[tab]=pity_label + tab:_async_load_sprite_to(image,banner.art_path) + root.transform:SetAsLastSibling() + hide('AvatarPanel/MianAvatarPanel') + hide('AvatarPanel/MianAvatarPanelFront') + hide('AvatarPanel/SubLightConePanel') + hide('DrawCardInfo') + hide('BtnInvitation') + hide('TitlePanel/Content/ScrollView') + for i=0,title_slot.childCount-1 do + local child=title_slot:GetChild(i) + if child.gameObject~=title.gameObject then replaced[#replaced+1]={object=child.gameObject,active=child.gameObject.activeSelf};child.gameObject:SetActive(false)end + end + local subtitle_text=subtitle.gameObject:GetComponent(typeof(CS.RPG.Client.LocalizedText)) + if subtitle_text then subtitle_text.text='Character Event Warp' end + end) + if not ok then + CS.UnityEngine.Object.Destroy(root) + for _,obj in ipairs(texts)do CS.UnityEngine.Object.Destroy(obj)end + for _,item in ipairs(replaced)do item.object:SetActive(item.active)end + error(err) + end + tab.__gac_character_banner=root + tab.__gac_layout_revision=5;tab.__gac_banner_id=banner.gacha_id;tab.__gac_owned_texts=texts;tab.__gac_replaced_visuals=replaced + state.sidebar_jobs=state.sidebar_jobs or setmetatable({},{__mode='k'}) + state.sidebar_jobs[tab]=true + log('ART_REQUESTED banner='..banner.gacha_id..' avatar='..banner.avatar_id) + end + state.render_current=render + local function update_sidebars() + local processed=0 + for tab in pairs(state.sidebar_jobs or {})do + if processed>=2 then break end;processed=processed+1 + local root=tab.__gac_character_banner + local source=root and root.transform:Find('FeaturedAvatar') + local source_image=source and source.gameObject:GetComponent(typeof(CS.UnityEngine.UI.Image)) + local sprite=source_image and source_image.sprite + local button=tab._tab_button_panel and tab._tab_button_panel._binder + if sprite and button then + local rect=sprite.textureRect + local owned={} + local ok,err=pcall(function() + for _,name in ipairs({'img_selected_icon','img_unselected_icon'})do + local image=button[name] + -- The template's selected image is taller than its tab slot. A full + -- character splash has transparent edges unlike the native banner icon, + -- so keep each custom image within its own measured parent bounds. + local transform=image.rectTransform + local parent=transform.parent + local bounds=parent and parent.rect + if bounds and transform.rect.height>bounds.height and bounds.height>0 then + local size=transform.sizeDelta + transform.sizeDelta=CS.UnityEngine.Vector2(size.x,size.y-(transform.rect.height-bounds.height)) + end + local target=image.rectTransform.rect + local ratio=target.width/target.height + local width=math.min(rect.width,rect.height*ratio) + local height=width/ratio + local crop=CS.UnityEngine.Rect(rect.x+(rect.width-width)*0.5,rect.y+(rect.height-height)*0.68,width,height) + local cropped=CS.UnityEngine.Sprite.Create(sprite.texture,crop,CS.UnityEngine.Vector2(0.5,0.5),sprite.pixelsPerUnit) + owned[#owned+1]=cropped + image.sprite=cropped;image.preserveAspect=false + end + end) + if ok then + tab.__gac_sidebar_sprites=owned + state.sidebar_jobs[tab]=nil + log('SIDEBAR_READY banner='..tab._gacha_pool_data.GachaID) + else + for _,item in ipairs(owned)do CS.UnityEngine.Object.Destroy(item)end + state.sidebar_jobs[tab]=nil;log('SIDEBAR_ERROR '..tostring(err)) + end + end + end + end + local function ensure_hooks() + if state.hooked then return end + -- These named modules define controllers; requiring them does not open a UI + -- page or execute a scene/task. Hook before any new pool is made visible. + local class=require('Ui.Gacha.GachaPool.DefaultGachaPoolTabItem') + if type(class)~='table' or type(class._refresh)~='function' then + error('named native Gacha tab controller is unavailable') + end + local original_refresh=class._refresh + local original_dispose=class._on_dispose + state.originals.refresh=original_refresh + state.originals.dispose=original_dispose + local refresh_hook=function(self,...) + local banner=entry(self._gacha_pool_data) + if not banner then return original_refresh(self,...) end + -- Do not bind Standard's multi-character list or 300-draw reward panel to + -- the custom card. Its native draw controls continue to use the clone ID. + self._item_panels=self._item_panels or {} + self._up_item_panels=self._up_item_panels or {} + local ok,err=pcall(state.render_current,self,banner) + if not ok then + log('ART_ERROR banner='..banner.gacha_id..' '..tostring(err)) + -- Preserve the known working page lifecycle even when a binding differs. + -- No world camera, page Canvas or global UI state is disabled here. + end + end + local dispose_hook=function(self,...) + if self.__gac_character_banner then CS.UnityEngine.Object.Destroy(self.__gac_character_banner) end + self.__gac_character_banner=nil;self.__gac_banner_id=nil + for _,obj in ipairs(self.__gac_owned_texts or {})do CS.UnityEngine.Object.Destroy(obj)end + self.__gac_owned_texts=nil + for _,sprite in ipairs(self.__gac_sidebar_sprites or {})do CS.UnityEngine.Object.Destroy(sprite)end + self.__gac_sidebar_sprites=nil + if state.sidebar_jobs then state.sidebar_jobs[self]=nil end + if state.pity_labels then state.pity_labels[self]=nil end + for _,item in ipairs(self.__gac_replaced_visuals or {})do pcall(function()item.object:SetActive(item.active)end)end + self.__gac_replaced_visuals=nil + if original_dispose then return original_dispose(self,...) end + end + class._refresh=refresh_hook + class._on_dispose=dispose_hook + state.hook_class=class + state.refresh_hook=refresh_hook + state.dispose_hook=dispose_hook + -- GetInfo refresh replaces the module's lists immediately before this + -- callback. Reconcile the projection before native tabs take ownership, + -- rather than racing the already-open page on a later render tick. + local main=require('Ui.Gacha.GachaMainPage') + local original_create=main._create_pools_panel + local create_hook=function(self,...) + if _G.__GAC_GACHA_PRESENTATION_TICK then + state.next_tick=0 + _G.__GAC_GACHA_PRESENTATION_TICK(true) + end + return original_create(self,...) + end + main._create_pools_panel=create_hook + state.main_class=main;state.original_create=original_create;state.create_hook=create_hook + state.hooked=true + end + local remove_installed + local function register(module,template,banner) + local asset_mgr=CS.RPG.Client.GlobalVars.s_AssetMgr + if not asset_mgr:Exists(banner.art_path) or not asset_mgr:Exists(banner.icon_path) then + log('ASSET_MISSING banner='..banner.gacha_id..' avatar='..banner.avatar_id) + return false + end + local avatar=CS.RPG.GameCore.AvatarExcelTable.GetData(banner.avatar_id) + if not avatar then log('ROW_MISSING avatar='..banner.avatar_id);return false end + -- A native GetInfo refresh can drop a clone from lookup while its old group + -- remains cached. Remove only that previously owned reference before retry. + local previous=state.installed[banner.gacha_id] + if previous then remove_installed(previous);state.installed[banner.gacha_id]=nil end + local r=native_reflection() + local pool=clone(template) + local row=clone(template.Row) + row.GachaID=banner.gacha_id + row.SortID=template.Row.SortID+banner.sort_order + row.PoolName=avatar.AvatarName + row.PoolLabelIcon=banner.icon_path + row.PoolLabelIconSelected=banner.icon_path + local base=template:GetType().BaseType + base:GetField('k__BackingField',r.flags):SetValue(pool,row) + -- ItemHelper.GetItem is the same named API used by the captured native + -- GachaMainPage obtain dialog. Keep detail/prize metadata aligned with the + -- featured avatar, rather than inheriting the Standard pool's item array. + local prize_field=base:GetField('k__BackingField',r.flags) + local detail_field=base:GetField('k__BackingField',r.flags) + if not prize_field or not detail_field then error('native Gacha item array fields are unavailable') end + local item_type=prize_field.FieldType:GetElementType() + local helper=typeof(CS.RPG.Client.ItemHelper) + local parameters=CS.System.Array.CreateInstance(typeof(CS.System.Type),1) + parameters[0]=typeof(CS.System.UInt32) + local get_item=helper:GetMethod('GetItem',r.flags,nil,parameters,nil) + -- Inspect the exact overload before invoking it. A similarly named helper + -- returning an ItemConfig/tuple cannot be inserted into an ItemData array. + if not get_item or not get_item.IsStatic or not item_type:IsAssignableFrom(get_item.ReturnType) then + error('ItemHelper.GetItem(UInt32) return type is not the captured ItemData array element') + end + local native_id=CS.System.Array.CreateInstance(typeof(CS.System.UInt32),1) + native_id[0]=banner.avatar_id + local item_args=CS.System.Array.CreateInstance(typeof(CS.System.Object),1) + CS.System.Array.Copy(native_id,item_args,1) + local item=get_item:Invoke(nil,r.invoke,nil,item_args,nil) + if not item or not item_type:IsInstanceOfType(item) or item.ConfigID~=banner.avatar_id then + error('mapped avatar item metadata is unavailable') + end + local prizes=CS.System.Array.CreateInstance(item_type,1);prizes:SetValue(item,0);prize_field:SetValue(pool,prizes) + local four_stars=banner.four_stars or {} + local details=CS.System.Array.CreateInstance(detail_field.FieldType:GetElementType(),1+#four_stars) + details:SetValue(item,0) + for index,four in ipairs(four_stars)do + native_id[0]=four.avatar_id;CS.System.Array.Copy(native_id,item_args,1) + local four_item=get_item:Invoke(nil,r.invoke,nil,item_args,nil) + if not four_item or not item_type:IsInstanceOfType(four_item) or four_item.ConfigID~=four.avatar_id then error('four-star item metadata is unavailable')end + details:SetValue(four_item,index) + end + detail_field:SetValue(pool,details) + pool.SingleDrawData=clone(template.SingleDrawData) + pool.MultiDrawData=clone(template.MultiDrawData) + -- The mutable draw records are distinct; the original Standard pool is + -- never renamed, modified or used as the custom pool's identity. + local t=module:GetType() + local list=t:GetField('_GachaPoolDatasThisVersion',r.flags):GetValue(module) + local groups=t:GetField('_GachaGroupDataDict',r.flags):GetValue(module) + local before={} + local it=groups.Keys:GetEnumerator() + while it:MoveNext() do before[tostring(it.Current)]=true end + it:Dispose() + local ok,err=pcall(function() + list:Add(pool) + local args=CS.System.Array.CreateInstance(typeof(CS.System.Object),1) + args[0]=pool + t:GetMethod('_AddGachaPoolDataToGroupDict',r.flags):Invoke(module,r.invoke,nil,args,nil) + if module:GetGachaPoolData(banner.gacha_id)~=pool then error('registered clone lookup mismatch') end + end) + if not ok then + list:Remove(pool) + local remove={} + local iter=groups.Keys:GetEnumerator() + while iter:MoveNext() do + if not before[tostring(iter.Current)] then remove[#remove+1]=iter.Current end + end + iter:Dispose() + local cached_field=t:GetField('_GachaGroupDatasThisVersion',r.flags) + local cached=cached_field and cached_field:GetValue(module) + for _,id in ipairs(remove) do + local group=groups[id] + if cached then cached:Remove(group) end + groups:Remove(id) + end + error('native registration rolled back: '..tostring(err)) + end + local new_groups={} + local retained_groups={} + local iter=groups.Keys:GetEnumerator() + while iter:MoveNext() do + if not before[tostring(iter.Current)] then + new_groups[#new_groups+1]=iter.Current + retained_groups[#retained_groups+1]={id=iter.Current,value=groups[iter.Current]} + end + end + iter:Dispose() + state.installed[banner.gacha_id]={pool=pool,module=module,group_ids=new_groups,groups=retained_groups} + log('REGISTERED banner='..banner.gacha_id..' avatar='..banner.avatar_id) + return true + end + remove_installed=function(installed) + local r=native_reflection() + local module=installed.module + local t=module:GetType() + local list=t:GetField('_GachaPoolDatasThisVersion',r.flags):GetValue(module) + local groups=t:GetField('_GachaGroupDataDict',r.flags):GetValue(module) + local cached_groups_field=t:GetField('_GachaGroupDatasThisVersion',r.flags) + local cached_groups=cached_groups_field and cached_groups_field:GetValue(module) + list:Remove(installed.pool) + -- Track the actual keys created by native registration; do not derive + -- group IDs from banner IDs or enum values. + for _,group_id in ipairs(installed.group_ids) do + if groups:ContainsKey(group_id) then + local group=groups[group_id] + if group.IsSinglePoolGachaGroup and group.DefaultGachaPoolData==installed.pool then + groups:Remove(group_id) + if cached_groups then cached_groups:Remove(group) end + end + end + end + local cache_field=t:GetField('k__BackingField',r.flags) + if cache_field and cache_field:GetValue(module)==installed.pool then cache_field:SetValue(module,nil) end + end + local function remove_when_closed() + if warp_open() then return false end + for id,installed in pairs(state.installed) do + remove_installed(installed) + state.installed[id]=nil + end + if state.hook_class then + -- Do not overwrite a newer hook installed by another extension. + if state.hook_class._refresh==state.refresh_hook then state.hook_class._refresh=state.originals.refresh end + if state.hook_class._on_dispose==state.dispose_hook then state.hook_class._on_dispose=state.originals.dispose end + end + if state.main_class and state.main_class._create_pools_panel==state.create_hook then + state.main_class._create_pools_panel=state.original_create + end + state.main_class=nil;state.original_create=nil;state.create_hook=nil + state.hooked=false;state.hook_class=nil;state.refresh_hook=nil;state.dispose_hook=nil + state.by_id=nil;state.digest=nil;state.cursor=nil + return true + end + local function restore_before_binding(module) + -- Reuse fully initialized objects prepared in the bounded render batches. + -- A GetInfo refresh clears module collections; reconstructing every prefab + -- or reflected model synchronously here would delay the page unnecessarily. + local r=native_reflection() + local t=module:GetType() + local list=t:GetField('_GachaPoolDatasThisVersion',r.flags):GetValue(module) + local groups=t:GetField('_GachaGroupDataDict',r.flags):GetValue(module) + local cached_field=t:GetField('_GachaGroupDatasThisVersion',r.flags) + local cached=cached_field and cached_field:GetValue(module) + local restored=0 + for id,owned in pairs(state.installed)do + if owned.module==module and state.by_id[id] and owned.groups and not module:GetGachaPoolData(id) then + local safe=true + for _,group in ipairs(owned.groups)do + if groups:ContainsKey(group.id) and groups[group.id]~=group.value then safe=false;break end + end + if safe then + if not list:Contains(owned.pool)then list:Add(owned.pool)end + for _,group in ipairs(owned.groups)do + if not groups:ContainsKey(group.id)then groups:Add(group.id,group.value)end + if cached and not cached:Contains(group.value)then cached:Add(group.value)end + end + restored=restored+1 + end + end + end + if restored>0 then log('RESTORED_BEFORE_PAGE count='..restored)end + end + -- Reproduce only the native single-pool branch of GachaMainPage's captured + -- _create_pools_panel. The existing tab controller keeps its current selection; + -- neither _refresh nor click_item_by_uid is called. One prefab/tab per tick. + local function append_open_page(data) + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GachaMainPage') + local ui=page and page.LuaTable + if not ui or not ui._binder or not ui._tab_control or type(ui._gacha_group_datas)~='table' or type(ui._gacha_tab_items)~='table' then return end + if state.page~=ui then state.page=ui;state.page_cursor=1;state.page_failures={} end + local count=#data.banners + for n=1,math.min(8,count)do + if state.page_cursor>count then state.page_cursor=1 end + local banner=data.banners[state.page_cursor];state.page_cursor=state.page_cursor+1 + local installed=state.installed[banner.gacha_id] + if installed and not state.page_failures[banner.gacha_id] then + local present=false + for _,group in ipairs(ui._gacha_group_datas)do + if group and group.DefaultGachaPoolData==installed.pool then present=true;break end + end + if not present then + local group + for _,ref in ipairs(installed.groups or {})do + if ref.value and ref.value.IsSinglePoolGachaGroup and ref.value:IsSinglePoolGachaGroup() and ref.value.DefaultGachaPoolData==installed.pool then group=ref.value;break end + end + if group then + local prefab,tab,added,owned_root + local ok,err=pcall(function() + local types=ui._gachaType2tabItem[group.GachaType] + if not types or not types[1] or not types[2] then error('native single-pool tab type unavailable')end + local container=ui._binder.node_gacha_panel_container + local old_children=container.childCount + prefab=ui:sync_load_prefab(installed.pool.PrefabPath,container) + if container.childCount~=old_children+1 then error('native prefab did not add exactly one panel')end + owned_root=container:GetChild(old_children).gameObject + tab=ui:create_panel(types[1],types[2]) + tab:set_tab_data(installed.pool) + tab.button_prefab_index=0 + tab:bind(prefab) + -- A new panel must not cover the user's selected one while it is added. + owned_root:SetActive(false) + tab:set_time_over_callback(ui._on_gacha_pool_time_out,ui) + -- Track before add_item so page disposal owns the panel even if a + -- later native callback throws; it must not become an orphan object. + table.insert(ui._gacha_group_datas,group) + table.insert(ui._gacha_tab_items,tab) + added=true + ui._tab_control:add_item(tab) + tab:setup_group_tab_item() + ui._tab_control:update_layout() + end) + if not ok then + state.page_failures[banner.gacha_id]=true + if not added then + if tab and tab.dispose then pcall(function()tab:dispose()end)end + if owned_root then pcall(function()CS.UnityEngine.Object.Destroy(owned_root)end)end + end + log('PAGE_APPEND_ERROR banner='..banner.gacha_id..' '..tostring(err)..' tracked='..tostring(added)) + else log('PAGE_APPENDED banner='..banner.gacha_id)end + return + end + end + end + end + end + _G.__GAC_GACHA_PRESENTATION_TICK=function(before_page_bind) + local data=config() + local now=CS.UnityEngine.Time.unscaledTime + if now0 do + if state.cursor>count then state.cursor=1;completed_pass=true end + local banner=data.banners[state.cursor] + state.cursor=state.cursor+1;processed=processed+1 + local failure=state.failures[banner.gacha_id] + if not module:GetGachaPoolData(banner.gacha_id) and (not opened or not state.installed[banner.gacha_id]) and (not failure or now>=failure.retry_at) then + local installed,reason=pcall(register,module,template,banner) + if not installed or not reason then + local message=installed and 'asset or avatar row unavailable' or tostring(reason) + if not failure or failure.message~=message then log('REGISTER_ERROR banner='..banner.gacha_id..' '..message)end + -- Item/asset providers may not be ready on the first post-login tick. + -- Retry on a later bounded pass instead of permanently losing the tab. + state.failures[banner.gacha_id]={retry_at=now+5,message=message} + else + state.failures[banner.gacha_id]=nil + end + end + end + -- GetGachaInfo can refresh native module lists. Reconcile from the real + -- lookup on a new pass instead of assuming a stale pool remains installed. + if state.cursor>count then state.cursor=1;completed_pass=true end + if completed_pass and not before_page_bind then state.next_tick=now+2 end + if opened and not before_page_bind then append_open_page(data) end + if before_page_bind then + local ready=0 + for _,banner in ipairs(data.banners)do + if module:GetGachaPoolData(banner.gacha_id)then ready=ready+1 end + end + log('PAGE_BIND ready='..ready..' configured='..count) + end + end) + if not ok then + local message=tostring(err) + if message~=state.last_error then log('ERROR '..message);state.last_error=message end + state.next_tick=now+5 + end + end + if not state.callback_registered then + local ok,err=pcall(function() + CS.UnityEngine.Application.onBeforeRender('+',function() + if _G.__GAC_GACHA_PRESENTATION_TICK then _G.__GAC_GACHA_PRESENTATION_TICK() end + end) + end) + state.callback_registered=ok + if not ok then log('CALLBACK_ERROR '..tostring(err)) end + end + _G.__GAC_GACHA_PRESENTATION_TICK() +end diff --git a/internal/gameserver/handlers_activity_preview.go b/internal/gameserver/handlers_activity_preview.go new file mode 100644 index 0000000..905431c --- /dev/null +++ b/internal/gameserver/handlers_activity_preview.go @@ -0,0 +1,44 @@ +package gameserver + +import ( + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +func init() { + handle("GetMultipleDropInfo", func(s *Session, req *pb.GetMultipleDropInfoCsReq, rsp *pb.GetMultipleDropInfoScRsp) error { + schedules, err := common.LoadPreviewActivitySchedules() + if err != nil { + return err + } + seen := map[uint32]bool{} + for _, schedule := range schedules { + if schedule.DataHandler != "GetMultipleDropInfo" || seen[schedule.PanelID] { + continue + } + seen[schedule.PanelID] = true + // Retain zero counters: these are previews, not fabricated daily + // quotas or granted double/triple drop entitlements. + rsp.FAFFFJGJHHC = append(rsp.FAFFFJGJHHC, &pb.BMJHAHOLEGH{PanelId: schedule.PanelID}) + } + return nil + }) + handle("GetActiveActivityData", func(s *Session, req *pb.GetActiveActivityDataCsReq, rsp *pb.GetActiveActivityDataScRsp) error { + schedules, err := common.LoadPreviewActivitySchedules() + if err != nil { + return err + } + for _, schedule := range schedules { + if schedule.DataHandler != "GetActiveActivityData" { + continue + } + rsp.HCLGPDFBDNP = append(rsp.HCLGPDFBDNP, &pb.ActiveActivityData{Id: schedule.ModuleID, PanelId: schedule.PanelID}) + } + return nil + }) + // Preview of the minigame panel has no fabricated scores or claimed rewards. + // Stella Jump case progress uses the separate ChenLing GameBoy data handlers. + handle("GetFiveDimMiniGameData", func(s *Session, req *pb.GetFiveDimMiniGameDataCsReq, rsp *pb.GetFiveDimMiniGameDataScRsp) error { + return nil + }) +} diff --git a/internal/gameserver/handlers_battle.go b/internal/gameserver/handlers_battle.go index 059a58c..85f4c9d 100644 --- a/internal/gameserver/handlers_battle.go +++ b/internal/gameserver/handlers_battle.go @@ -3,7 +3,6 @@ package gameserver import ( "encoding/json" "fmt" - "os" "sync" "gac-hkrpg-go/internal/common" @@ -553,8 +552,8 @@ func createBattleInfo(s *Session, casterID, skillIndex uint32, sources ...*commo rules.addGlobalPassives(battleInfo, player) - // Invasion support belongs to an active challenge, not a custom battle - // merely reusing the same stage. The scene loader records that state. + // Official challenges add their resource-defined corruption. Custom battles + // retain only the corruption actually supplied in their buff list. if s.ChallengeStageID != 0 { if invasionID := getStageInvasionID(s.ChallengeStageID); invasionID != 0 { buffID, ok := rules.InvasionBuffs[invasionID] @@ -562,11 +561,11 @@ func createBattleInfo(s *Session, casterID, skillIndex uint32, sources ...*commo return nil, fmt.Errorf("battle: invasion %d has no buff resource", invasionID) } battleInfo.BuffList = append(battleInfo.BuffList, battleBuff(buffID, firstAvatarIdx, map[string]float32{"SkillIndex": 1})) - if player.BattleConfig.EnableInvasionSupport { - battleInfo.BuffList = append(battleInfo.BuffList, battleBuff(rules.InvasionSupportBuff, firstAvatarIdx, map[string]float32{"SkillIndex": 1})) - } } } + if err := rules.applyAhaHelp(battleInfo, player.BattleConfig.EnableInvasionSupport, firstAvatarIdx); err != nil { + return nil, err + } if len(battleInfo.MonsterWaveList) == 0 { return nil, fmt.Errorf("battle: stage %d has no configured waves", battleInfo.StageId) } @@ -594,17 +593,14 @@ var ( func getStageInvasionID(stageID uint32) uint32 { stageInvasionOnce.Do(func() { - for _, path := range []string{"resources/StageInvasionConfig.json", "StageInvasionConfig.json"} { - raw, err := os.ReadFile(path) - if err != nil { - continue - } - var cfg stageInvasionConfigData - if err := json.Unmarshal(raw, &cfg); err == nil { - for _, entry := range cfg.StageInvasionConfig { - stageInvasionMap[entry.StageID] = entry.InvasionID - } - break + raw, err := common.ReadResourceFile("resources/StageInvasionConfig.json", "StageInvasionConfig.json") + if err != nil { + return + } + var cfg stageInvasionConfigData + if err := json.Unmarshal(raw, &cfg); err == nil { + for _, entry := range cfg.StageInvasionConfig { + stageInvasionMap[entry.StageID] = entry.InvasionID } } }) diff --git a/internal/gameserver/handlers_challenge.go b/internal/gameserver/handlers_challenge.go index a6ed93d..7789b71 100644 --- a/internal/gameserver/handlers_challenge.go +++ b/internal/gameserver/handlers_challenge.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "gac-hkrpg-go/internal/common" - "os" "sort" "sync" @@ -60,18 +59,19 @@ type StageBattleData struct { } type PeakStageData struct { - Entrance uint32 `json:"-"` - Group uint32 `json:"-"` - GroupID uint32 `json:"-"` - Buffs []uint32 `json:"-"` - HardBuffs []uint32 `json:"-"` - EventID uint32 `json:"event_id"` - HardEventID uint32 `json:"hard_event_id"` - MonsterID uint32 `json:"monster_id"` - DefaultBuff uint32 `json:"default_buff"` - IsBoss bool `json:"is_boss"` - Targets []uint32 `json:"targets"` - HardTarget uint32 `json:"hard_target"` + SceneResourceError string `json:"-"` + Entrance uint32 `json:"-"` + Group uint32 `json:"-"` + GroupID uint32 `json:"-"` + Buffs []uint32 `json:"-"` + HardBuffs []uint32 `json:"-"` + EventID uint32 `json:"event_id"` + HardEventID uint32 `json:"hard_event_id"` + MonsterID uint32 `json:"monster_id"` + DefaultBuff uint32 `json:"default_buff"` + IsBoss bool `json:"is_boss"` + Targets []uint32 `json:"targets"` + HardTarget uint32 `json:"hard_target"` } var ( @@ -81,7 +81,7 @@ var ( func getChallengeData() *ChallengeDataConfig { challengeOnce.Do(func() { - raw, err := os.ReadFile("challenge_data.json") + raw, err := common.ReadResourceFile("challenge_data.json") if err != nil { Log("challenge_data.json not found!") return @@ -241,6 +241,7 @@ func loadPeakResources(data *ChallengeDataConfig) { } } } + applyPeakSceneOverrides(data) } func lastResourceID(ids []uint32) uint32 { @@ -388,7 +389,6 @@ func init() { handle("GetChallengePeakData", func(s *Session, req *goproto.GetChallengePeakDataCsReq, rsp *goproto.GetChallengePeakDataScRsp) error { rsp.Retcode = 0 - rsp.CurrentPeakGroupId = 1 cd := getChallengeData() type stageEntry struct { @@ -401,30 +401,44 @@ func init() { if _, err := fmt.Sscanf(k, "%d", &id); err != nil { continue } - g := id / 100 + g := stage.GroupID + if g == 0 { + continue + } groups[g] = append(groups[g], stageEntry{id, stage}) } if len(groups) == 0 { - peakGroup := &goproto.ChallengePeakGroup{ - PeakGroupId: 1, - ObtainedStars: 9, - CountOfPeaks: 3, - DisableHardMode: false, - TakenStarRewards: []uint32{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - for peakID := uint32(1); peakID <= 3; peakID++ { - peakGroup.Peaks = append(peakGroup.Peaks, &goproto.ChallengePeak{ - PeakId: peakID, - HasPassed: true, - FinishedTargetList: []uint32{1, 2, 3, 4, 5}, - }) - } - rsp.ChallengePeakGroups = append(rsp.ChallengePeakGroups, peakGroup) + // Never replace a missing catalog with a fabricated round: doing so + // silently discards a valid Srtool choice and advertises wrong rooms. + rsp.Retcode = uint32(goproto.Retcode_RET_CHALLENGE_NOT_EXIST) + PacketLog("PEAK_DATA rejected: no resource-backed AA groups") return nil } groupIDs := sortedU32Keys2(groups) + if len(groupIDs) != 0 { + rsp.CurrentPeakGroupId = groupIDs[0] + } + if selection, err := common.ReadAARoundSelection(); err != nil { + SceneDebugLog("[PEAK] failed to read Srtool AA round selection: %v", err) + } else if selection != nil { + if _, exists := groups[selection.PeakGroupID]; exists { + rsp.CurrentPeakGroupId = selection.PeakGroupID + SceneDebugLog("[PEAK] Srtool selected AA round: group=%d", selection.PeakGroupID) + } else { + SceneDebugLog("[PEAK] Srtool AA round %d is missing from the loaded Client challenge data", selection.PeakGroupID) + } + } + // Selection changes made in Srtool apply after leaving the existing + // challenge. A data refresh during reconnect must not change the active + // round underneath a running/settled Peak session. + if run := s.ChallengeRun; run != nil && run.Peak { + if stage, exists := cd.Peak[itoa(int(run.ID))]; exists && stage.GroupID != 0 { + rsp.CurrentPeakGroupId = stage.GroupID + } + } + PacketLog(fmt.Sprintf("PEAK_DATA current_group=%d groups=%d active_run=%t", rsp.CurrentPeakGroupId, len(groups), s.ChallengeRun != nil)) for _, groupID := range groupIDs { stages := groups[groupID] sort.Slice(stages, func(i, j int) bool { return stages[i].id < stages[j].id }) @@ -502,6 +516,13 @@ func init() { for _, schedule := range cw.ActivitySchedules() { add(schedule.ModuleID, schedule.ActivityID) } + previews, err := common.LoadPreviewActivitySchedules() + if err != nil { + return err + } + for _, schedule := range previews { + add(schedule.ModuleID, schedule.PanelID) + } return nil }) } diff --git a/internal/gameserver/handlers_challenge_flow.go b/internal/gameserver/handlers_challenge_flow.go index 7154251..5710a1a 100644 --- a/internal/gameserver/handlers_challenge_flow.go +++ b/internal/gameserver/handlers_challenge_flow.go @@ -154,6 +154,7 @@ func decodeSetChallengeTierceLineupReq(payload []byte) (uint32, [][]uint32, []ui // Build challenge configuration from the selected resource stage, never from // Freesr custom monsters. Only the current session owns this configuration. +// Stage compositions and scoring come from the installed challenge resources. func setChallengeBattleConfig(s *Session, avatars []uint32, challengeID, eventID uint32, buffs []uint32) error { return setChallengeBattleConfigWithLimit(s, avatars, challengeID, eventID, buffs, "", 0) } @@ -229,6 +230,9 @@ func lineupInfoFromAvatars(avatars []uint32, planeID uint32, extraType goproto.E custom[uint32(i)] = aid } lineup := common.ToLineupInfo(custom) + // Each Endgame room starts with its own team's full technique capacity. + // The capacity remains resource-derived; do not reuse overworld initial_mp. + lineup.Mp = lineup.MaxMp lineup.PlaneId = planeID lineup.ExtraLineupType = extraType lineup.Index = index @@ -300,7 +304,7 @@ func handleStartChallenge(s *Session, payload []byte) error { return s.Send(&goproto.StartChallengeScRsp{Retcode: uint32(goproto.Retcode_RET_CHALLENGE_NOT_EXIST)}) } - sceneInfo, _, err := loadChallengeScene(s, entrance, group, monster, event, chosenAvatars) + sceneInfo, _, _, err := loadChallengeScene(s, entrance, group, monster, event, chosenAvatars) if err != nil { s.ChallengeBattleConfig = previousConfig SceneDebugLog("[CHALLENGE] scene rejected: %v", err) @@ -412,7 +416,7 @@ func handleStartChallengeTierce(s *Session, payload []byte) error { return s.Send(&goproto.StartChallengeTierceScRsp{Retcode: uint32(goproto.Retcode_RET_CHALLENGE_NOT_EXIST)}) } - sceneInfo, _, err := loadChallengeScene(s, entrance, group, monster, event, chosenAvatars) + sceneInfo, _, _, err := loadChallengeScene(s, entrance, group, monster, event, chosenAvatars) if err != nil { s.ChallengeBattleConfig = previousConfig SceneDebugLog("[CHALLENGE] tierce scene rejected: %v", err) diff --git a/internal/gameserver/handlers_challenge_scene.go b/internal/gameserver/handlers_challenge_scene.go index d561105..34c0893 100644 --- a/internal/gameserver/handlers_challenge_scene.go +++ b/internal/gameserver/handlers_challenge_scene.go @@ -15,40 +15,42 @@ import ( // --------------------------------------------------------------------------- // loadChallengeScene is the Go port of scene.rs load_challenge_scene. -func loadChallengeScene(s *Session, entryID, targetGroupID, monsterID, eventID uint32, avatarIDs []uint32) (*goproto.SceneInfo, *goproto.MotionInfo, error) { +func loadChallengeScene(s *Session, entryID, targetGroupID, monsterID, eventID uint32, avatarIDs []uint32) (*goproto.SceneInfo, *goproto.MotionInfo, bool, error) { player := s.JSON() if player == nil { - return nil, nil, errors.New("data is not set!") + return nil, nil, false, errors.New("data is not set!") } res, err := common.GameRes() if err != nil { - return nil, nil, err + return nil, nil, false, err } name, scene, ok := firstSceneOfEntry(res, entryID) if !ok { - return nil, nil, fmt.Errorf("Challenge Map Entrance Not Found %d", entryID) + return nil, nil, false, fmt.Errorf("Challenge Map Entrance Not Found %d", entryID) } planeID, floorID, err := parsePlaneFloor(name) if err != nil { - return nil, nil, err + return nil, nil, false, err } // Use the selected group's resource placement, with no guessed arena // height or offset towards world origin (arena floors need not be there). group, ok := scene.Scenes[targetGroupID] if !ok || len(group.Monsters) == 0 { - return nil, nil, fmt.Errorf("challenge entrance %d group %d has no monster placement", entryID, targetGroupID) + return nil, nil, false, fmt.Errorf("challenge entrance %d group %d has no monster placement", entryID, targetGroupID) } placement := group.Monsters[0] monsPos := common.Position{X: placement.Pos.X, Y: placement.Pos.Y, Z: placement.Pos.Z, RotY: placement.Rot.Y} instID := placement.InstID playerMotion := monsPos.ToMotionInfo() spawnSource := "monster-placement" + hasAnchor := false if anchors := res.SceneAnchors[entryID]; len(anchors) > 0 { anchor := anchors[0] // PearlSR scene_mgr.zig getAnchorMotion. playerMotion = (&common.Position{X: anchor.Pos.X, Y: anchor.Pos.Y, Z: anchor.Pos.Z, RotY: anchor.Rot.Y}).ToMotionInfo() spawnSource = "anchor" + hasAnchor = true } SceneDebugLog("[CHALLENGE] spawn entry=%d floor=%d source=%s player=%v monster=%v", entryID, floorID, spawnSource, playerMotion, monsPos) @@ -144,7 +146,7 @@ func loadChallengeScene(s *Session, entryID, targetGroupID, monsterID, eventID u // NOTE: do not overwrite the saved scene so the player returns to the // open world on logout/battle end - return sceneInfo, playerMotion, nil + return sceneInfo, playerMotion, hasAnchor, nil } // handleStartChallengePeak ports on_start_challenge_peak_cs_req (cmd 8948): @@ -157,6 +159,12 @@ func handleStartChallengePeak(s *Session, req *goproto.StartChallengePeakCsReq, stage, ok := getChallengeData().Peak[itoa(int(peakID))] if !ok { Log("[PEAK] peak_id=" + itoa(int(peakID)) + " not found in challenge_data!") + rsp.Retcode = uint32(goproto.Retcode_RET_CHALLENGE_NOT_EXIST) + return nil + } + if stage.SceneResourceError != "" { + SceneDebugLog("[PEAK] scene resource rejected peak=%d: %s", peakID, stage.SceneResourceError) + rsp.Retcode = uint32(goproto.Retcode_RET_CHALLENGE_NOT_EXIST) return nil } eventID := stage.EventID @@ -176,7 +184,7 @@ func handleStartChallengePeak(s *Session, req *goproto.StartChallengePeakCsReq, if req.BossBuffId != 0 { buffs = append(buffs, req.BossBuffId) } - if stage.Entrance == 0 || stage.Group == 0 || eventID == 0 || len(avatars) == 0 { + if stage.Entrance == 0 || stage.Group == 0 || monsterID == 0 || eventID == 0 || len(avatars) == 0 { rsp.Retcode = uint32(goproto.Retcode_RET_CHALLENGE_NOT_EXIST) return nil } @@ -186,7 +194,7 @@ func handleStartChallengePeak(s *Session, req *goproto.StartChallengePeakCsReq, rsp.Retcode = uint32(goproto.Retcode_RET_CHALLENGE_NOT_EXIST) return nil } - sceneInfo, _, err := loadChallengeScene(s, stage.Entrance, stage.Group, monsterID, eventID, avatars) + sceneInfo, playerMotion, hasAnchor, err := loadChallengeScene(s, stage.Entrance, stage.Group, monsterID, eventID, avatars) if err != nil { s.ChallengeBattleConfig = previousConfig SceneDebugLog("[PEAK] scene rejected: %v", err) @@ -197,10 +205,36 @@ func handleStartChallengePeak(s *Session, req *goproto.StartChallengePeakCsReq, lineupInfo := lineupInfoFromAvatars(avatars, sceneInfo.PlaneId, goproto.ExtraLineupType_ExtraLineupType_LineupChallenge, 0) - return s.Send(&goproto.EnterSceneByServerScNotify{ + // Match the Client-tested PearlSR AA transition: send the arena scene, + // move each actor to the scene anchor when present, then let the typed + // dispatcher send StartChallengePeakScRsp last. The lineup is included in + // EnterSceneByServerScNotify, so a separate SyncLineupNotify is unnecessary. + if err := s.Send(&goproto.EnterSceneByServerScNotify{ Scene: sceneInfo, Lineup: lineupInfo, - }) + }); err != nil { + return err + } + anchorMoves := 0 + if hasAnchor { + for _, group := range sceneInfo.EntityGroupList { + for _, entity := range group.EntityList { + if entity.GetActor() == nil { + continue + } + if err := s.Send(&goproto.SceneEntityMoveScNotify{ + EntityId: entity.EntityId, + EntryId: sceneInfo.EntryId, + Motion: playerMotion, + }); err != nil { + return err + } + anchorMoves++ + } + } + } + SceneDebugLog("[PEAK] transition peak=%d entry=%d anchor_moves=%d", peakID, sceneInfo.EntryId, anchorMoves) + return nil } var _ = proto.Marshal diff --git a/internal/gameserver/handlers_comic_dessert.go b/internal/gameserver/handlers_comic_dessert.go new file mode 100644 index 0000000..9eb8f24 --- /dev/null +++ b/internal/gameserver/handlers_comic_dessert.go @@ -0,0 +1,35 @@ +package gameserver + +import ( + "fmt" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +func init() { + // Current command-table names remain obfuscated. Current .54 native evidence: + // _OnGetDataSuccess d4dbc60 reads response+3c -> _SetUpProgress; FNIAAEAFGDE + // getter 1fc3dcd0 reads +3c. That path calls Progress.EIBHHOPHJCK at + // 16c8dab0, which writes +18; get_CurrentCycleId at 16c8d980 reads +18. + // HNOCFELOAFJ (+10) supplies the completed-level collection. See the + // comic-*-consumer/current getter disassemblies and ComicDessertCatalog. + rawNamed("MGCJKEEOPEC", func(s *Session, body []byte) error { + rsp := &pb.LPLCFFGANFC{Retcode: uint32(pb.Retcode_RET_FAIL)} + if err := proto.Unmarshal(body, new(pb.MGCJKEEOPEC)); err != nil { + return s.Send(rsp) + } + catalog, err := common.LoadComicDessertCatalog() + if err != nil { + PacketLog("COMIC_DESSERT_DATA rejected: " + err.Error()) + return s.Send(rsp) + } + // Preview starts at the resource's first cycle. No finished levels, + // upgrades, currency, claimed rewards or saved completion are fabricated. + rsp.FNIAAEAFGDE = catalog.InitialCycle().ID + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("COMIC_DESSERT_DATA preview_cycle=%d cycles=%d levels=%d", rsp.FNIAAEAFGDE, len(catalog.Cycles), len(catalog.Levels))) + return s.Send(rsp) + }) +} diff --git a/internal/gameserver/handlers_currency_wars.go b/internal/gameserver/handlers_currency_wars.go index 3595c85..3fc64f6 100644 --- a/internal/gameserver/handlers_currency_wars.go +++ b/internal/gameserver/handlers_currency_wars.go @@ -42,7 +42,7 @@ func currencyWarsEntranceScene(scene *common.LevelOutputConfig, entrance common. func init() { // Bind to this revision's command table. Save a complete initial preset // before returning success so the immediately following GetData sees it. - handle("GridFightStartGamePlay", func(s *Session, req *goproto.GridFightStartGamePlayCsReq, rsp *goproto.GridFightStartGamePlayScRsp) error { + cwHandle("GridFightStartGamePlay", func(s *Session, req *goproto.GridFightStartGamePlayCsReq, rsp *goproto.GridFightStartGamePlayScRsp) error { mode := "standard" if req.IsOverlock { mode = "overclock" @@ -99,7 +99,7 @@ func init() { PacketLog(fmt.Sprintf("CW_START_GAMEPLAY started mode=%s division=%d season=%d run=%d revision=%d source=captured_initial_preset", mode, req.DivisionId, req.LJNGPCKPJLF, run.UniqueId, s.currencyWarsRevision)) return nil }) - handle("GridFightResumeGamePlay", func(s *Session, req *goproto.GridFightResumeGamePlayCsReq, rsp *goproto.GridFightResumeGamePlayScRsp) error { + cwHandle("GridFightResumeGamePlay", func(s *Session, req *goproto.GridFightResumeGamePlayCsReq, rsp *goproto.GridFightResumeGamePlayScRsp) error { rsp.Retcode = uint32(goproto.Retcode_RET_GRID_FIGHT_NOT_IN_GAMEPLAY) catalog, err := common.LoadCurrencyWarsCatalog() if err != nil { @@ -122,6 +122,20 @@ func init() { } // Reconcile triplets left by the former buy handler on an explicit // Resume action. Snapshot readers remain read-only. + if data.DHFOFLFCLAH.GetFMIGOKIDKJL().GetBAKAKODKECM() != nil { + if _, active := CURRENT_BATTLE.Load(s.Token); !active { + changed, e := cwAlignEncounterCamp(catalog, data.DHFOFLFCLAH) + if e != nil { + PacketLog("CW_RESUME Encounter rejected: " + e.Error()) + return nil + } + if changed { + if e = s.saveCurrencyWarsData(data, catalog); e != nil { + return nil + } + } + } + } if data.DHFOFLFCLAH.FMIGOKIDKJL == nil { if _, active := CURRENT_BATTLE.Load(s.Token); !active { groups, e := cwMergeRoles(catalog, data.DHFOFLFCLAH, 0) @@ -144,7 +158,7 @@ func init() { return nil }) // Leaving the UI keeps the active run for Resume, matching the reference. - handle("GridFightQuitLeaveGamePlay", func(s *Session, _ *goproto.GridFightQuitLeaveGamePlayCsReq, _ *goproto.GridFightQuitLeaveGamePlayScRsp) error { + cwHandle("GridFightQuitLeaveGamePlay", func(s *Session, _ *goproto.GridFightQuitLeaveGamePlayCsReq, _ *goproto.GridFightQuitLeaveGamePlayScRsp) error { s.currencyWarsOpen = false return nil }) @@ -164,7 +178,7 @@ func init() { }) // Bootstrap only. Keep the danger-family guard for every unsupported CW // operation; it must never receive a successful empty gameplay response. - handle("GridFightGetData", func(s *Session, req *goproto.GridFightGetDataCsReq, rsp *goproto.GridFightGetDataScRsp) error { + cwHandle("GridFightGetData", func(s *Session, req *goproto.GridFightGetDataCsReq, rsp *goproto.GridFightGetDataScRsp) error { catalog, err := common.LoadCurrencyWarsCatalog() if err != nil { return err diff --git a/internal/gameserver/handlers_gacha.go b/internal/gameserver/handlers_gacha.go new file mode 100644 index 0000000..9093cca --- /dev/null +++ b/internal/gameserver/handlers_gacha.go @@ -0,0 +1,302 @@ +package gameserver + +import ( + "crypto/rand" + "fmt" + "math/big" + + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +func init() { + handle("GetGachaInfo", func(s *Session, req *pb.GetGachaInfoCsReq, rsp *pb.GetGachaInfoScRsp) error { + banners, _, err := common.LoadBrowsableGachaBanners() + if err != nil { + return err + } + if len(banners) == 0 { + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NOT_SUPPORT) + PacketLog("GACHA entry rejected: no verified installed banner assets") + return nil + } + config, err := common.LoadRuntimeConfig() + if err != nil { + return err + } + for _, banner := range banners { + info := &pb.GachaInfo{GachaId: banner.ID, BeginTime: *config.ActivitySchedule.BeginTime, EndTime: *config.ActivitySchedule.EndTime, GachaCeiling: &pb.GachaCeiling{}} + if banner.AvatarID != 0 { + info.PrizeItemList = []uint32{banner.AvatarID} + info.ItemDetailList = []uint32{banner.AvatarID} + } + rsp.GachaInfoList = append(rsp.GachaInfoList, info) + } + // Synthetic IDs are not native Client config rows. The presentation + // adapter registers its own pools; sending these IDs in GetGachaInfo has + // caused Client response handlers to throw. Keep the preview opt-in. + mapped, _, err := common.LoadLimitedGachaBanners() + if err != nil { + return err + } + _, _, policy, err := common.LoadSandboxDrawPool() + if err != nil { + return err + } + count := policy.MappedBannerPreviewCount + if count > uint32(len(mapped)) { + count = uint32(len(mapped)) + } + for i := uint32(0); i < count; i++ { + banner := mapped[i] + info := &pb.GachaInfo{GachaId: banner.GachaID, BeginTime: *config.ActivitySchedule.BeginTime, EndTime: *config.ActivitySchedule.EndTime, GachaCeiling: &pb.GachaCeiling{}} + info.PrizeItemList = []uint32{banner.AvatarID} + info.ItemDetailList = append([]uint32{banner.AvatarID}, banner.FourStarIDs...) + rsp.GachaInfoList = append(rsp.GachaInfoList, info) + } + PacketLog(fmt.Sprintf("GACHA_INFO banners=%d mapped_preview=%d", len(banners), count)) + return nil + }) + handle("DoGacha", func(s *Session, req *pb.DoGachaCsReq, rsp *pb.DoGachaScRsp) error { + rsp.GachaId = req.GachaId + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_ID_NOT_EXIST) + banners, _, err := common.LoadFeaturedGachaBanners() + if err != nil { + return err + } + var avatarID uint32 + for _, row := range banners { + if row.ID == req.GachaId { + avatarID = row.AvatarID + break + } + } + if avatarID == 0 { + mapped, _, err := common.LoadLimitedGachaBanners() + if err != nil { + return err + } + for _, row := range mapped { + if row.GachaID == req.GachaId { + return drawLimitedAvatar(s, req, rsp, row) + } + } + } + if avatarID != 0 { + return drawFeaturedAvatar(s, req, rsp, avatarID) + } + // Featured-only path found nothing. Verified browsable banners may + // still draw from the policy-declared sandbox pool: every pick is a + // duplicate grant on an avatar from the live imported roster, so no + // invented IDs or first-acquisition synthesis are involved. + sandboxDrawn, err := drawSandboxPool(s, req, rsp) + if err != nil { + return err + } + if sandboxDrawn { + return nil + } + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NOT_SUPPORT) + return nil + }) +} + +// drawFeaturedAvatar grants req.GachaNum copies of one featured avatar using +// its configured first Eidolon cost as the duplicate conversion for captured +// basename-derived banners. Mapped limited banners use drawLimitedAvatar. +func drawFeaturedAvatar(s *Session, req *pb.DoGachaCsReq, rsp *pb.DoGachaScRsp, avatarID uint32) error { + _, policy, err := common.LoadFeaturedGachaBanners() + if err != nil { + return err + } + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NUM_INVALID) + allowed := false + for _, n := range policy.DrawCounts { + allowed = allowed || n == req.GachaNum + } + if !allowed { + return nil + } + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NOT_SUPPORT) + if _, active := CURRENT_BATTLE.Load(s.Token); active { + return nil + } + player := s.JSON() + if player == nil || player.Avatars[avatarID] == nil { + return nil + } + resources, err := loadEidolonResources() + if err != nil { + return err + } + row, exists := resources.Avatars[avatarID] + if !exists || len(row.Ranks) == 0 { + return nil + } + additions := map[uint32]uint32{} + for _, cost := range row.Ranks[0].Cost { + amount := uint64(cost.ItemNum)*uint64(req.GachaNum) + uint64(additions[cost.ItemID]) + if amount > uint64(^uint32(0)) { + return nil + } + additions[cost.ItemID] = uint32(amount) + } + bag, err := bagMaterials(player) + if err != nil { + return err + } + baseline := map[uint32]uint32{} + for _, item := range bag { + baseline[item.Tid] = item.Num + } + updated, err := common.GrantGachaDuplicate(avatarID, additions, baseline) + if err != nil { + PacketLog("GACHA rejected: " + err.Error()) + return nil + } + if player.Materials == nil { + player.Materials = map[uint32]uint32{} + } + sync := &pb.PlayerSyncScNotify{} + for id, count := range updated { + player.Materials[id] = count + sync.MaterialList = append(sync.MaterialList, &pb.Material{Tid: id, Num: count}) + } + for i := uint32(0); i < req.GachaNum; i++ { + transfer := &pb.ItemList{} + for _, cost := range row.Ranks[0].Cost { + transfer.ItemList = append(transfer.ItemList, &pb.Item{ItemId: cost.ItemID, Num: cost.ItemNum}) + } + rsp.GachaItemList = append(rsp.GachaItemList, &pb.GachaItem{GachaItem: &pb.Item{ItemId: avatarID, Num: 1}, TokenItem: &pb.ItemList{}, TransferItemList: transfer}) + } + if err = s.Send(sync); err != nil { + return err + } + rsp.Retcode = 0 + rsp.GachaNum = req.GachaNum + PacketLog(fmt.Sprintf("GACHA banner=%d avatar=%d draws=%d sandbox=featured", req.GachaId, avatarID, req.GachaNum)) + return nil +} + +// drawSandboxPool serves a draw from the policy-declared sandbox pool for an +// asset-verified browsable banner. Every pick is a duplicate-material grant on +// an avatar from the live imported roster; nothing is synthesized. Returns +// false when the request is not a verified banner or the pool is disabled, so +// the caller keeps its original rejection. +func drawSandboxPool(s *Session, req *pb.DoGachaCsReq, rsp *pb.DoGachaScRsp) (bool, error) { + verified, _, err := common.LoadBrowsableGachaBanners() + if err != nil { + return false, err + } + isVerified := false + for _, row := range verified { + isVerified = isVerified || row.ID == req.GachaId + } + if !isVerified { + return false, nil + } + enabled, pool, policy, err := common.LoadSandboxDrawPool() + if err != nil { + return false, err + } + if !enabled || len(pool) == 0 { + return false, nil + } + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NUM_INVALID) + allowed := false + for _, n := range policy.DrawCounts { + allowed = allowed || n == req.GachaNum + } + if !allowed { + return true, nil + } + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NOT_SUPPORT) + if _, active := CURRENT_BATTLE.Load(s.Token); active { + return true, nil + } + resources, err := loadEidolonResources() + if err != nil { + return false, err + } + // Uniform sandbox picks. Avatars without a configured first-rank Eidolon + // cost are excluded: their duplicate grant has no declared conversion. + type rosterAvatar struct { + id uint32 + itemID, itemNum uint32 + } + effective := make([]rosterAvatar, 0, len(pool)) + for _, id := range pool { + row, exists := resources.Avatars[id] + if !exists || len(row.Ranks) == 0 || len(row.Ranks[0].Cost) == 0 { + continue + } + effective = append(effective, rosterAvatar{id: id, itemID: row.Ranks[0].Cost[0].ItemID, itemNum: row.Ranks[0].Cost[0].ItemNum}) + } + if len(effective) == 0 { + PacketLog("GACHA sandbox pool empty: no roster avatar with configured Eidolon cost") + return true, nil + } + player := s.JSON() + if player == nil { + return true, nil + } + picks := make([]rosterAvatar, 0, req.GachaNum) + for i := uint32(0); i < req.GachaNum; i++ { + n, err := rand.Int(rand.Reader, big.NewInt(int64(len(effective)))) + if err != nil { + return false, err + } + picks = append(picks, effective[n.Int64()]) + } + counts := map[uint32]uint32{} + costOf := map[uint32]rosterAvatar{} + for _, pick := range picks { + counts[pick.id]++ + costOf[pick.id] = pick + } + bag, err := bagMaterials(player) + if err != nil { + return false, err + } + baseline := map[uint32]uint32{} + for _, item := range bag { + baseline[item.Tid] = item.Num + } + updated := map[uint32]uint32{} + for id, times := range counts { + cost := costOf[id] + total := uint64(cost.itemNum) * uint64(times) + if total > uint64(^uint32(0)) { + return true, nil + } + additions := map[uint32]uint32{cost.itemID: uint32(total)} + got, err := common.GrantGachaDuplicate(id, additions, baseline) + if err != nil { + PacketLog("GACHA sandbox rejected: " + err.Error()) + return true, nil + } + for itemID, count := range got { + updated[itemID] = count + } + } + if player.Materials == nil { + player.Materials = map[uint32]uint32{} + } + sync := &pb.PlayerSyncScNotify{} + for id, count := range updated { + player.Materials[id] = count + sync.MaterialList = append(sync.MaterialList, &pb.Material{Tid: id, Num: count}) + } + for _, pick := range picks { + transfer := &pb.ItemList{} + transfer.ItemList = append(transfer.ItemList, &pb.Item{ItemId: pick.itemID, Num: pick.itemNum}) + rsp.GachaItemList = append(rsp.GachaItemList, &pb.GachaItem{GachaItem: &pb.Item{ItemId: pick.id, Num: 1}, TokenItem: &pb.ItemList{}, TransferItemList: transfer}) + } + if err = s.Send(sync); err != nil { + return false, err + } + rsp.Retcode = 0 + rsp.GachaNum = req.GachaNum + PacketLog(fmt.Sprintf("GACHA banner=%d draws=%d sandbox=imported_roster pool=%d distinct=%d", req.GachaId, req.GachaNum, len(effective), len(counts))) + return true, nil +} diff --git a/internal/gameserver/handlers_misc.go b/internal/gameserver/handlers_misc.go index a8d5be8..e46416c 100644 --- a/internal/gameserver/handlers_misc.go +++ b/internal/gameserver/handlers_misc.go @@ -74,6 +74,14 @@ func playerArchive(s *Session) *goproto.ArchiveData { } func init() { + // AdventureModule._OnGetCurBattleInfoScRsp dereferences BattleInfo even + // when nothing is running (Player.log 2026-10-24 NRE on an empty reply); + // the isolated reference answers with an empty, non-null SceneBattleInfo. + handle("GetCurBattleInfo", func(s *Session, req *goproto.GetCurBattleInfoCsReq, rsp *goproto.GetCurBattleInfoScRsp) error { + rsp.BattleInfo = &goproto.SceneBattleInfo{} + return nil + }) + handle("GetBag", func(s *Session, req *goproto.GetBagCsReq, rsp *goproto.GetBagScRsp) error { player := s.JSON() if player == nil { @@ -261,43 +269,6 @@ func init() { return nil }) - // --- gacha --- - handle("GetGachaInfo", func(s *Session, req *goproto.GetGachaInfoCsReq, rsp *goproto.GetGachaInfoScRsp) error { - rsp.GachaInfoList = append(rsp.GachaInfoList, &goproto.GachaInfo{ - EndTime: 1924992000, - BeginTime: 0, - GachaCeiling: &goproto.GachaCeiling{}, - PrizeItemList: []uint32{23002, 1003, 1101, 1104, 23000, 23003}, - ItemDetailList: []uint32{ - 1001, 1002, 1008, 1009, 1013, 1103, 1105, 1106, 1108, 1109, 1110, 1111, 1201, 1202, - 1206, 1207, 1210, 1003, 1004, 1101, 1107, 1104, 1209, 1211, 21000, 21001, 21002, 21003, - 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21011, 21012, 21013, 21014, 21015, - 21016, 21017, 21018, 21019, 21020, 23000, 23002, 23003, 23004, 23005, 23012, 23013, - }, - GachaId: 1001, - }) - return nil - }) - - handle("DoGacha", func(s *Session, req *goproto.DoGachaCsReq, rsp *goproto.DoGachaScRsp) error { - rsp.GachaId = req.GachaId - rsp.GachaNum = req.GachaNum - for v := uint32(0); v < req.GachaNum; v++ { - itemID := uint32(1310) - if v%2 != 0 { - itemID = 1314 - } - rsp.GachaItemList = append(rsp.GachaItemList, &goproto.GachaItem{ - GachaItem: &goproto.Item{ItemId: itemID}, - TokenItem: &goproto.ItemList{ - ItemList: []*goproto.Item{{ItemId: 251, Num: 100}}, - }, - TransferItemList: &goproto.ItemList{}, - }) - } - return nil - }) - // --- mail --- handle("GetMail", func(s *Session, req *goproto.GetMailCsReq, rsp *goproto.GetMailScRsp) error { rsp.IsEnd = true diff --git a/internal/gameserver/handlers_mission.go b/internal/gameserver/handlers_mission.go index 3a91c92..f524649 100644 --- a/internal/gameserver/handlers_mission.go +++ b/internal/gameserver/handlers_mission.go @@ -3,7 +3,6 @@ package gameserver import ( "encoding/json" "fmt" - "os" "sort" "sync" @@ -73,7 +72,7 @@ func excludedSubMissionsForConfiguredClient() (map[uint32]struct{}, error) { func getMissionUnlocks() *MissionUnlocks { missionUnlocksOnce.Do(func() { - raw, err := os.ReadFile("mission_unlocks.json") + raw, err := common.ReadResourceFile("mission_unlocks.json") if err != nil { Log("mission_unlocks.json not found: " + err.Error()) return @@ -83,6 +82,27 @@ func getMissionUnlocks() *MissionUnlocks { missionUnlocks = MissionUnlocks{} return } + // Native CW's current panel has a different introductory guide mission + // than the older function-unlock export. Publish only its validated + // resource-declared prerequisites so the native condition checker can + // leave PreGuide; do not force UI state or finish the full mission table. + if guideMissions, err := common.LoadCurrencyWarsGuideMissions(); err != nil { + Log("CW guide unlock withheld: " + err.Error()) + } else { + seen := make(map[uint32]bool, len(missionUnlocks.FuncUnlockMissions)) + for _, id := range missionUnlocks.FuncUnlockMissions { + seen[id] = true + } + added := 0 + for _, id := range guideMissions { + if !seen[id] { + seen[id] = true + missionUnlocks.FuncUnlockMissions = append(missionUnlocks.FuncUnlockMissions, id) + added++ + } + } + Log(fmt.Sprintf("CW guide mission prerequisites loaded=%d added=%d", len(guideMissions), added)) + } Log("Loaded mission_unlocks.json successfully") }) return &missionUnlocks @@ -123,7 +143,20 @@ func init() { // beta client re-asks when this field is missing (tag 13) rsp.CurversionFinishedMainMissionIdList = finished + excludedSubMissions, err := excludedSubMissionsForConfiguredClient() + if err != nil { + return err + } for _, id := range req.SubMissionIdList { + // Status refreshes use the same config-backed mission model as + // initial login. Do not reintroduce a removed JSON config through + // a later status request after filtering GetMissionData. + if id == 0 { + continue + } + if _, excluded := excludedSubMissions[id]; excluded { + continue + } rsp.SubMissionStatusList = append(rsp.SubMissionStatusList, &goproto.Mission{ Id: id, Progress: 1, @@ -167,6 +200,10 @@ func init() { } seenSubMissions := make(map[uint32]struct{}, len(unlocks.SubMissionIDs)) excludedCount := 0 + // GetMissionDataCsReq carries no ID list in this protocol revision, so + // the Client processes whatever we push; IDs absent from its installed + // MissionJsonTable NRE in MainMissionData.AddSubMission. The exclusion + // list plus the staged scripts/mission_probe.lua enumeration bound it. for _, id := range unlocks.SubMissionIDs { if id == 0 { continue diff --git a/internal/gameserver/handlers_player.go b/internal/gameserver/handlers_player.go index d5f975a..218b035 100644 --- a/internal/gameserver/handlers_player.go +++ b/internal/gameserver/handlers_player.go @@ -2,11 +2,9 @@ package gameserver import ( "fmt" - "os" - "path/filepath" - "sort" "strings" + "gac-hkrpg-go/internal/common" goproto "gac-hkrpg-go/protocol/proto" ) @@ -63,25 +61,32 @@ func init() { finalData = append(finalData, '\n') finalData = append(finalData, probe...) } + if refresh, err := loadAARoundRefreshLua(s); err != nil { + PacketLog("AA round refresh withheld: " + err.Error()) + } else { + finalData = append(finalData, refresh...) + } + if presentation, err := loadGachaPresentationLua(); err != nil { + PacketLog("GACHA presentation withheld: " + err.Error()) + } else { + finalData = append(finalData, presentation...) + } - // Load all .lua files from scripts/ directory in deterministic order - if entries, err := os.ReadDir("scripts"); err == nil { - var luaFiles []string - for _, entry := range entries { - if !entry.IsDir() && strings.HasSuffix(entry.Name(), ".lua") { - luaFiles = append(luaFiles, entry.Name()) - } - } - sort.Strings(luaFiles) - for _, name := range luaFiles { - if content, err := os.ReadFile(filepath.Join("scripts", name)); err == nil { - finalData = append(finalData, '\n') - finalData = append(finalData, content...) - } - } - } else if freecam, err := os.ReadFile("scripts/freecam.lua"); err == nil { + if camera, err := common.ReadFaceCamSettings(); err == nil { + finalData = append(finalData, []byte(fmt.Sprintf("\n_G.__GAC_CAMERA_SETTINGS={mode=%q,distance=%.3f}\n", camera.Mode, camera.Distance))...) + } else { + PacketLog("Camera settings withheld: " + err.Error()) + } + luaScripts := common.ClientLuaScripts() + for _, script := range luaScripts { finalData = append(finalData, '\n') - finalData = append(finalData, freecam...) + finalData = append(finalData, script.Data...) + } + if len(luaScripts) == 0 { + if freecam, err := common.ReadResourceFile("scripts/freecam.lua"); err == nil { + finalData = append(finalData, '\n') + finalData = append(finalData, freecam...) + } } rsp.DownloadData = &goproto.ClientDownloadData{ @@ -158,7 +163,7 @@ const heartbeatLua = `local function beta_text() if gameObject then local textComponent = gameObject:GetComponentInChildren(typeof(CS.RPG.Client.LocalizedText)) if textComponent then - textComponent.text = "GaC hkrpg GO แล้วเรามาเกกันนะ" + textComponent.text = "GaCy GO | แล้วเรามาเกกันนะ" end end end diff --git a/internal/gameserver/handlers_recommend.go b/internal/gameserver/handlers_recommend.go index a16c0ae..64d98d5 100644 --- a/internal/gameserver/handlers_recommend.go +++ b/internal/gameserver/handlers_recommend.go @@ -4,6 +4,8 @@ import ( "encoding/json" "fmt" "path/filepath" + "sort" + "strconv" "strings" "sync" @@ -13,18 +15,27 @@ import ( type prydwenEndgameSnapshot struct { Source struct { - DatasetVersion string `json:"dataset_version"` - ChallengeVersion string `json:"challenge_version"` - ChallengeName string `json:"challenge_name"` + DatasetVersion string `json:"dataset_version"` + CollectDate string `json:"collect_date"` } `json:"source"` - AvatarAliases map[string]string `json:"avatar_aliases"` - Mode string `json:"mode"` - Floor uint32 `json:"floor"` - Stages []struct { - Stage uint32 `json:"stage"` - Rank uint32 `json:"rank"` - Characters []string `json:"characters"` - } `json:"stages"` + Protocol struct { + RequestTypeRoutes map[string]string `json:"request_type_routes"` + } `json:"protocol"` + AvatarAliases map[string]string `json:"avatar_aliases"` + Modes map[string]prydwenModeSnapshot `json:"modes"` +} + +type prydwenModeSnapshot struct { + ChallengeVersion string `json:"challenge_version"` + ChallengeName string `json:"challenge_name"` + Floor uint32 `json:"floor"` + Stages []prydwenStageSnapshot `json:"stages"` +} + +type prydwenStageSnapshot struct { + Stage string `json:"stage"` + Rank uint32 `json:"rank"` + Characters []string `json:"characters"` } type prydwenAvatarResource struct { @@ -33,10 +44,17 @@ type prydwenAvatarResource struct { ConfigPath string `json:"JsonPath"` } +type challengePeakGroupResource struct { + ID uint32 `json:"ID"` + RecommendID uint32 `json:"RecommendID"` + PreLevelIDList []uint32 `json:"PreLevelIDList"` + BossLevelID uint32 `json:"BossLevelID"` +} + var ( - prydwenOnce sync.Once - prydwenLineups []*goproto.ChallengeLineupList - prydwenLoadErr error + prydwenOnce sync.Once + prydwenSnapshot prydwenEndgameSnapshot + prydwenLoadErr error ) func normalizedAvatarName(name string) string { @@ -49,26 +67,38 @@ func normalizedAvatarName(name string) string { }, name) } -func loadPrydwenLineups() ([]*goproto.ChallengeLineupList, error) { +func loadPrydwenSnapshot() (*prydwenEndgameSnapshot, error) { prydwenOnce.Do(func() { - prydwenLineups, prydwenLoadErr = readPrydwenLineups() + prydwenSnapshot, prydwenLoadErr = readPrydwenSnapshot() }) - return prydwenLineups, prydwenLoadErr + if prydwenLoadErr != nil { + return nil, prydwenLoadErr + } + return &prydwenSnapshot, nil } -func readPrydwenLineups() ([]*goproto.ChallengeLineupList, error) { +func readPrydwenSnapshot() (prydwenEndgameSnapshot, error) { + var snapshot prydwenEndgameSnapshot raw, err := common.ReadResourceFile("resources/PrydwenEndgameTeams.json") if err != nil { - return nil, fmt.Errorf("read Prydwen endgame team snapshot: %w", err) + return snapshot, fmt.Errorf("read Prydwen endgame team snapshot: %w", err) } - var snapshot prydwenEndgameSnapshot if err := json.Unmarshal(raw, &snapshot); err != nil { - return nil, fmt.Errorf("parse Prydwen endgame team snapshot: %w", err) + return snapshot, fmt.Errorf("parse Prydwen endgame team snapshot: %w", err) } - if snapshot.Mode != "moc" || snapshot.Floor == 0 || len(snapshot.Stages) == 0 { - return nil, fmt.Errorf("Prydwen endgame team snapshot has no supported MoC floor") + for _, mode := range []string{"moc", "pf", "as", "aa"} { + entry, ok := snapshot.Modes[mode] + if !ok || len(entry.Stages) == 0 { + return snapshot, fmt.Errorf("Prydwen snapshot has no %s teams", mode) + } } + if len(snapshot.Protocol.RequestTypeRoutes) == 0 { + return snapshot, fmt.Errorf("Prydwen snapshot has no request type routing table") + } + return snapshot, nil +} +func readPrydwenAvatarIDs(aliases map[string]string) (map[string]uint32, error) { avatarRaw, err := common.ReadResourceFile("resources/AvatarConfig.json") if err != nil { return nil, fmt.Errorf("read Client AvatarConfig resource: %w", err) @@ -93,58 +123,213 @@ func readPrydwenLineups() ([]*goproto.ChallengeLineupList, error) { avatarIDs[pathName] = avatar.ID } } - - lineups := make([]*goproto.ChallengeLineupList, 0, len(snapshot.Stages)) - seenStages := map[uint32]bool{} - for _, stage := range snapshot.Stages { - if stage.Stage == 0 || seenStages[stage.Stage] || len(stage.Characters) != 4 { - return nil, fmt.Errorf("invalid Prydwen MoC stage %d team size/order", stage.Stage) + for slug, clientTag := range aliases { + if id := avatarIDs[normalizedAvatarName(clientTag)]; id != 0 { + avatarIDs[normalizedAvatarName(slug)] = id } - seenStages[stage.Stage] = true - avatars := make([]*goproto.ChallengeAvatarInfo, 0, len(stage.Characters)) + } + return avatarIDs, nil +} + +func prydwenStageLineup(stage prydwenStageSnapshot, avatarIDs map[string]uint32) (*goproto.ChallengeLineupList, error) { + if stage.Stage == "" || len(stage.Characters) != 4 { + return nil, fmt.Errorf("invalid Prydwen stage %q team size/order", stage.Stage) + } + avatars := make([]*goproto.ChallengeAvatarInfo, 0, len(stage.Characters)) + seen := make(map[uint32]bool, len(stage.Characters)) + for index, slug := range stage.Characters { + id := avatarIDs[normalizedAvatarName(slug)] + if id == 0 { + return nil, fmt.Errorf("Prydwen avatar %q in stage %s has no ID in Client AvatarConfig", slug, stage.Stage) + } + if seen[id] { + return nil, fmt.Errorf("Prydwen stage %s repeats AvatarID %d", stage.Stage, id) + } + seen[id] = true + avatars = append(avatars, &goproto.ChallengeAvatarInfo{ + AvatarType: goproto.AvatarType_AVATAR_FORMAL_TYPE, + Id: id, + Index: uint32(index), + }) + } + return &goproto.ChallengeLineupList{AvatarList: avatars}, nil +} + +func buildPrydwenLineups(mode prydwenModeSnapshot, avatarIDs map[string]uint32) ([]*goproto.ChallengeLineupList, error) { + lineups := make([]*goproto.ChallengeLineupList, 0, len(mode.Stages)) + stages := append([]prydwenStageSnapshot(nil), mode.Stages...) + sort.SliceStable(stages, func(i, j int) bool { return stages[i].Stage < stages[j].Stage }) + seen := map[string]bool{} + for _, stage := range stages { + if seen[stage.Stage] { + return nil, fmt.Errorf("Prydwen snapshot repeats stage %s", stage.Stage) + } + seen[stage.Stage] = true + lineup, err := prydwenStageLineup(stage, avatarIDs) + if err != nil { + return nil, err + } + lineups = append(lineups, lineup) + } + return lineups, nil +} + +func readPrydwenLineups() ([]*goproto.ChallengeLineupList, error) { + snapshot, err := loadPrydwenSnapshot() + if err != nil { + return nil, err + } + avatarIDs, err := readPrydwenAvatarIDs(snapshot.AvatarAliases) + if err != nil { + return nil, err + } + return buildPrydwenLineups(snapshot.Modes["moc"], avatarIDs) +} + +func buildPrydwenPeakLineups(mode prydwenModeSnapshot, aliases map[string]string, requestKey uint32) (*goproto.MJMGDLJAJCM, error) { + groupRaw, err := common.ReadResourceFile("resources/ChallengePeakGroupConfig.json") + if err != nil { + return nil, fmt.Errorf("read Client ChallengePeakGroupConfig resource: %w", err) + } + var groups struct { + Entries []challengePeakGroupResource `json:"challenge_peak_group_config"` + } + if err := json.Unmarshal(groupRaw, &groups); err != nil { + return nil, fmt.Errorf("parse Client ChallengePeakGroupConfig resource: %w", err) + } + if len(groups.Entries) == 0 { + return nil, fmt.Errorf("Client ChallengePeakGroupConfig contains no groups") + } + + // The key semantics are not established in the obfuscated schema. Use an + // exact Client resource match if present; otherwise pair the bundled + // current-cycle snapshot with the newest group in this Client's resources. + selected := groups.Entries[0] + for _, group := range groups.Entries { + if group.ID > selected.ID { + selected = group + } + } + matched := false + for _, group := range groups.Entries { + if requestKey != 0 && (requestKey == group.ID || requestKey == group.RecommendID || containsPeakLevel(group, requestKey)) { + selected = group + matched = true + break + } + } + if requestKey != 0 && !matched { + Log(fmt.Sprintf("[RECOMMEND] AA key=%d did not match a Client Peak resource; using latest configured group=%d", requestKey, selected.ID)) + } + levelIDs := append([]uint32(nil), selected.PreLevelIDList...) + if selected.BossLevelID != 0 { + levelIDs = append(levelIDs, selected.BossLevelID) + } + if len(levelIDs) != len(mode.Stages) { + return nil, fmt.Errorf("Prydwen AA has %d teams but Client Peak group %d has %d levels", len(mode.Stages), selected.ID, len(levelIDs)) + } + + avatarIDs, err := readPrydwenAvatarIDs(aliases) + if err != nil { + return nil, err + } + stages := append([]prydwenStageSnapshot(nil), mode.Stages...) + sort.SliceStable(stages, func(i, j int) bool { return stages[i].Stage < stages[j].Stage }) + peakLineups := make([]*goproto.OKFKPPNGCOD, 0, len(stages)) + for i, stage := range stages { + if stage.Stage == "" || len(stage.Characters) != 4 { + return nil, fmt.Errorf("invalid Prydwen AA stage %q team size/order", stage.Stage) + } + avatars := make([]*goproto.ONKDAPOKGAC, 0, len(stage.Characters)) + seen := map[uint32]bool{} for index, slug := range stage.Characters { - resourceTag := snapshot.AvatarAliases[slug] - if resourceTag == "" { - resourceTag = slug - } - id := avatarIDs[normalizedAvatarName(resourceTag)] + id := avatarIDs[normalizedAvatarName(slug)] if id == 0 { - return nil, fmt.Errorf("Prydwen avatar %q has no ID in Client AvatarConfig", slug) + return nil, fmt.Errorf("Prydwen avatar %q in AA stage %s has no ID in Client AvatarConfig", slug, stage.Stage) } - avatars = append(avatars, &goproto.ChallengeAvatarInfo{ + if seen[id] { + return nil, fmt.Errorf("Prydwen AA stage %s repeats AvatarID %d", stage.Stage, id) + } + seen[id] = true + avatars = append(avatars, &goproto.ONKDAPOKGAC{ AvatarType: goproto.AvatarType_AVATAR_FORMAL_TYPE, Id: id, Index: uint32(index), }) } - lineups = append(lineups, &goproto.ChallengeLineupList{AvatarList: avatars}) + peakLineups = append(peakLineups, &goproto.OKFKPPNGCOD{PeakId: levelIDs[i], AvatarList: avatars}) } - return lineups, nil + return &goproto.MJMGDLJAJCM{DNIGKDKIPPJ: peakLineups}, nil +} + +func containsPeakLevel(group challengePeakGroupResource, key uint32) bool { + if key == group.BossLevelID { + return key != 0 + } + for _, levelID := range group.PreLevelIDList { + if key == levelID { + return true + } + } + return false +} + +func recommendationMode(snapshot *prydwenEndgameSnapshot, req *goproto.GetFriendRecommendLineupCsReq) (string, error) { + typeKey := strconv.FormatInt(int64(req.GetType()), 10) + mode := snapshot.Protocol.RequestTypeRoutes[typeKey] + if mode == "" { + return "", fmt.Errorf("unmapped GetFriendRecommendLineup type=%s", typeKey) + } + if _, ok := snapshot.Modes[mode]; !ok { + return "", fmt.Errorf("GetFriendRecommendLineup type=%s routes to missing mode %q", typeKey, mode) + } + return mode, nil } func buildPrydwenRecommendResponse(req *goproto.GetFriendRecommendLineupCsReq) (*goproto.GetFriendRecommendLineupScRsp, error) { - lineups, err := loadPrydwenLineups() + snapshot, err := loadPrydwenSnapshot() if err != nil { return nil, err } - return &goproto.GetFriendRecommendLineupScRsp{ - Key: req.Key, - Type: req.Type, - MGKCKHIIICL: []*goproto.FPDCINMDJCE{{ - KJFEKHDEBIK: &goproto.FPDCINMDJCE_NHKCFOALAPD{ - NHKCFOALAPD: &goproto.OJJJDPNOKHG{LineupList: lineups}, - }, - }}, - }, nil + modeName, err := recommendationMode(snapshot, req) + if err != nil { + return nil, err + } + response := &goproto.GetFriendRecommendLineupScRsp{Key: req.Key, Type: req.Type} + if modeName == "aa" { + peakLineups, err := buildPrydwenPeakLineups(snapshot.Modes[modeName], snapshot.AvatarAliases, req.GetKey()) + if err != nil { + return nil, err + } + response.MGKCKHIIICL = []*goproto.FPDCINMDJCE{{ + KJFEKHDEBIK: &goproto.FPDCINMDJCE_LMHIOKFMDNE{LMHIOKFMDNE: peakLineups}, + }} + return response, nil + } + avatarIDs, err := readPrydwenAvatarIDs(snapshot.AvatarAliases) + if err != nil { + return nil, err + } + lineups, err := buildPrydwenLineups(snapshot.Modes[modeName], avatarIDs) + if err != nil { + return nil, err + } + response.MGKCKHIIICL = []*goproto.FPDCINMDJCE{{ + KJFEKHDEBIK: &goproto.FPDCINMDJCE_NHKCFOALAPD{ + NHKCFOALAPD: &goproto.OJJJDPNOKHG{LineupList: lineups}, + }, + }} + return response, nil } func init() { handle("GetFriendRecommendLineup", func(_ *Session, req *goproto.GetFriendRecommendLineupCsReq, rsp *goproto.GetFriendRecommendLineupScRsp) error { - // Preserve request context. The game UI asks this endpoint for the - // recommendation panel; an empty auto-response left the panel blank. response, err := buildPrydwenRecommendResponse(req) if err != nil { - Log(fmt.Sprintf("[RECOMMEND] Prydwen data unavailable type=%s key=%d: %v", req.Type, req.Key, err)) + // Still answer with request context so the UI does not wait forever. + rsp.Key = req.Key + rsp.Type = req.Type + Log(fmt.Sprintf("[RECOMMEND] Prydwen data unavailable type=%d key=%d: %v", req.Type, req.Key, err)) return nil } rsp.Key = response.Key @@ -152,7 +337,8 @@ func init() { rsp.MGKCKHIIICL = response.MGKCKHIIICL rsp.Retcode = response.Retcode rsp.ALDBIIIGLOM = response.ALDBIIIGLOM - Log(fmt.Sprintf("[RECOMMEND] served Prydwen MoC teams type=%s key=%d stages=%d", req.Type, req.Key, len(response.MGKCKHIIICL[0].GetNHKCFOALAPD().LineupList))) + mode, _ := recommendationMode(&prydwenSnapshot, req) + Log(fmt.Sprintf("[RECOMMEND] served Prydwen %s teams type=%d key=%d groups=%d", strings.ToUpper(mode), req.Type, req.Key, len(response.MGKCKHIIICL))) return nil }) } diff --git a/internal/gameserver/handlers_recommend_test.go b/internal/gameserver/handlers_recommend_test.go index 4785ebd..59366a2 100644 --- a/internal/gameserver/handlers_recommend_test.go +++ b/internal/gameserver/handlers_recommend_test.go @@ -1,6 +1,7 @@ package gameserver import ( + "strconv" "testing" "google.golang.org/protobuf/proto" @@ -36,6 +37,61 @@ func TestReadPrydwenLineupsUseCurrentClientAvatarResources(t *testing.T) { } } +func TestPrydwenRecommendationsCoverEveryEndgameMode(t *testing.T) { + snapshot, err := loadPrydwenSnapshot() + if err != nil { + t.Fatal(err) + } + avatarIDs, err := readPrydwenAvatarIDs(snapshot.AvatarAliases) + if err != nil { + t.Fatal(err) + } + for _, mode := range []string{"moc", "pf", "as", "aa"} { + typeText := "" + for requestType, routedMode := range snapshot.Protocol.RequestTypeRoutes { + if routedMode == mode { + typeText = requestType + break + } + } + typeValue, err := strconv.ParseInt(typeText, 10, 32) + if err != nil { + t.Fatalf("mode %s has no valid request type route %q: %v", mode, typeText, err) + } + rsp, err := buildPrydwenRecommendResponse(&goproto.GetFriendRecommendLineupCsReq{ + Type: goproto.JFNJKAPPNOF(typeValue), + Key: 0, + }) + if err != nil { + t.Fatalf("mode %s: %v", mode, err) + } + if rsp.GetType() != goproto.JFNJKAPPNOF(typeValue) { + t.Fatalf("mode %s response lost request type", mode) + } + group := rsp.GetMGKCKHIIICL()[0] + if mode == "aa" { + payload := group.GetLMHIOKFMDNE() + if payload == nil || len(payload.GetDNIGKDKIPPJ()) != len(snapshot.Modes[mode].Stages) { + t.Fatalf("AA response does not contain one Peak lineup per source stage: %v", payload) + } + for _, peak := range payload.GetDNIGKDKIPPJ() { + if peak.GetPeakId() == 0 || len(peak.GetAvatarList()) != 4 { + t.Fatalf("invalid AA Peak recommendation: %v", peak) + } + } + continue + } + payload := group.GetNHKCFOALAPD() + lineups, err := buildPrydwenLineups(snapshot.Modes[mode], avatarIDs) + if err != nil { + t.Fatalf("mode %s: %v", mode, err) + } + if payload == nil || len(payload.GetLineupList()) != len(lineups) { + t.Fatalf("mode %s response has wrong team count: %v", mode, payload) + } + } +} + func TestBuildPrydwenRecommendResponsePreservesRequestAndLineups(t *testing.T) { req := &goproto.GetFriendRecommendLineupCsReq{ Type: goproto.JFNJKAPPNOF_JFNJKAPPNOF_JHOEBNNMKHB, diff --git a/internal/gameserver/handlers_stella_jump.go b/internal/gameserver/handlers_stella_jump.go new file mode 100644 index 0000000..959e0b1 --- /dev/null +++ b/internal/gameserver/handlers_stella_jump.go @@ -0,0 +1,113 @@ +package gameserver + +import ( + "fmt" + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +func stellaJumpData(id uint32) (*pb.JBOBHIPHGPB, error) { + cases, err := common.LoadStellaJumpCases() + if err != nil { + return nil, err + } + row, ok := cases[id] + if !ok { + return nil, fmt.Errorf("unknown Stella Jump case %d", id) + } + record, err := common.ReadStellaJumpRecord(id) + if err != nil { + return nil, err + } + return &pb.JBOBHIPHGPB{IJCJBDDGGJF: row.ID, OOMILCOFGPN: true, HIEMHCBHKEO: record.CheatMode, HLNODEFLOCF: record.BestTime, CJKAGEDKAFL: append([]uint32(nil), row.Challenges...)}, nil +} + +// The current Client's ChenLingGameBoyPuzzleData.Sync consumes JBOBHIPHGPB: +// finished-challenge IDs unlock the challenge packs. This sandbox projection +// exposes the captured packs without inventing scores in the persistent record. +// Source: preview-gameboy-sync.asm and the named CaseRow capture. +func init() { + handle("GetChenLingGameBoyData", func(s *Session, req *pb.GetChenLingGameBoyDataCsReq, rsp *pb.GetChenLingGameBoyDataScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_FAIL) + cases, err := common.LoadStellaJumpCases() + if err != nil { + return err + } + row, ok := cases[req.IJCJBDDGGJF] + if !ok { + return nil + } + record, err := common.ReadStellaJumpRecord(row.ID) + if err != nil { + return err + } + rsp.IAOBHCOOMJP = &pb.JBOBHIPHGPB{IJCJBDDGGJF: row.ID, OOMILCOFGPN: true, HIEMHCBHKEO: record.CheatMode, HLNODEFLOCF: record.BestTime, CJKAGEDKAFL: append([]uint32(nil), row.Challenges...)} + rsp.Retcode = 0 + PacketLog(fmt.Sprintf("STELLA_JUMP_DATA case=%d unlocked_packs=%d", row.ID, len(row.Challenges))) + return nil + }) + handle("FinishChenLingGameBoy", func(s *Session, req *pb.FinishChenLingGameBoyCsReq, rsp *pb.FinishChenLingGameBoyScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_FAIL) + record, err := common.SaveStellaJumpResult(req.IJCJBDDGGJF, req.BEJCJJCLJHL, req.CJKAGEDKAFL) + if err != nil { + PacketLog("STELLA_JUMP_FINISH rejected: " + err.Error()) + return nil + } + rsp.IJCJBDDGGJF = req.IJCJBDDGGJF + rsp.BEJCJJCLJHL = req.BEJCJJCLJHL + rsp.HLNODEFLOCF = record.BestTime + rsp.Reward = &pb.ItemList{} + rsp.Retcode = 0 + return nil + }) + handle("ChenLingGameBoyGetFriendRankingInfo", func(s *Session, req *pb.ChenLingGameBoyGetFriendRankingInfoCsReq, rsp *pb.ChenLingGameBoyGetFriendRankingInfoScRsp) error { + rsp.Retcode = uint32(pb.Retcode_RET_FAIL) + cases, err := common.LoadStellaJumpCases() + if err != nil { + return err + } + if _, ok := cases[req.IJCJBDDGGJF]; !ok { + return nil + } + rsp.IJCJBDDGGJF = req.IJCJBDDGGJF + rsp.Retcode = 0 + // No fabricated friends or leaderboard times. + return nil + }) + handle("ChenLingGameBoyChangeSettings", func(s *Session, req *pb.ChenLingGameBoyChangeSettingsCsReq, rsp *pb.ChenLingGameBoyChangeSettingsScRsp) error { + rsp.EBAFPOLLJIA = req.EBAFPOLLJIA + return nil + }) + // These two request names remain obfuscated in the revision-tagged table. + // Shapes are one case ID, and case ID + bool respectively. They correspond + // to FiveDimModule.SendChenLingCheatInputKeyReq / SendChenLingCheatModeReq. + // The second response boolean's exact Client label remains unverified; + // keep the source names and record it independently from completion/score. + rawNamed("ANDPLLAKCLE", func(s *Session, body []byte) error { + rsp := &pb.CDJKLJDMJHO{Retcode: uint32(pb.Retcode_RET_FAIL)} + req := new(pb.ANDPLLAKCLE) + if err := proto.Unmarshal(body, req); err == nil { + if err = common.SaveStellaJumpCheatSetting(req.IJCJBDDGGJF, true, true); err == nil { + rsp.IAOBHCOOMJP, err = stellaJumpData(req.IJCJBDDGGJF) + if err == nil { + rsp.Retcode = 0 + } + } + } + return s.Send(rsp) + }) + rawNamed("EMDKLICDPKK", func(s *Session, body []byte) error { + rsp := &pb.JHEHACPKKBL{Retcode: uint32(pb.Retcode_RET_FAIL)} + req := new(pb.EMDKLICDPKK) + if err := proto.Unmarshal(body, req); err == nil { + if err = common.SaveStellaJumpCheatSetting(req.IJCJBDDGGJF, false, req.HIEMHCBHKEO); err == nil { + rsp.IAOBHCOOMJP, err = stellaJumpData(req.IJCJBDDGGJF) + if err == nil { + rsp.Retcode = 0 + } + } + } + return s.Send(rsp) + }) +} diff --git a/internal/gameserver/handlers_tutorial_ids.go b/internal/gameserver/handlers_tutorial_ids.go index 4e671c9..ac9da57 100644 --- a/internal/gameserver/handlers_tutorial_ids.go +++ b/internal/gameserver/handlers_tutorial_ids.go @@ -3,10 +3,10 @@ package gameserver import ( "encoding/json" "fmt" - "os" - "path/filepath" "sort" "sync" + + "gac-hkrpg-go/internal/common" ) // Tutorial IDs come from the installed Client resource tables, not a list @@ -31,8 +31,8 @@ func getTutorialResourceIDs() ([]uint32, []uint32, error) { } `json:"tutorial_guide_config"` } load := func(name string, dst any) error { - path := filepath.Join("resources", name) - data, err := os.ReadFile(path) + path := "resources/" + name + data, err := common.ReadResourceFile(path) if err != nil { return fmt.Errorf("tutorial resource %s: %w", path, err) } diff --git a/internal/gameserver/limited_gacha.go b/internal/gameserver/limited_gacha.go new file mode 100644 index 0000000..e4cd77d --- /dev/null +++ b/internal/gameserver/limited_gacha.go @@ -0,0 +1,99 @@ +package gameserver + +import ( + "fmt" + "gac-hkrpg-go/internal/common" + pb "gac-hkrpg-go/protocol/proto" +) + +func drawLimitedAvatar(s *Session, req *pb.DoGachaCsReq, rsp *pb.DoGachaScRsp, banner common.LimitedGachaBanner) error { + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NOT_SUPPORT) + if _, active := CURRENT_BATTLE.Load(s.Token); active { + return nil + } + player := s.JSON() + if player == nil { + return nil + } + _, policy, err := common.LoadBrowsableGachaBanners() + if err != nil { + return err + } + allowed := false + for _, n := range policy.DrawCounts { + allowed = allowed || n == req.GachaNum + } + if !allowed { + rsp.Retcode = uint32(pb.Retcode_RET_GACHA_NUM_INVALID) + return nil + } + resources, err := loadEidolonResources() + if err != nil { + return err + } + costs := map[uint32]map[uint32]uint32{} + for _, id := range append([]uint32{banner.AvatarID}, banner.FourStarIDs...) { + avatar, ok := resources.Avatars[id] + if !ok { + return fmt.Errorf("missing limited avatar Eidolon resource %d", id) + } + first := map[uint32]uint32{} + for _, rank := range avatar.Ranks { + if rank.Rank != 1 { + continue + } + for _, cost := range rank.Cost { + next := uint64(first[cost.ItemID]) + uint64(cost.ItemNum) + if cost.ItemID == 0 || cost.ItemNum == 0 || next > uint64(^uint32(0)) { + return fmt.Errorf("invalid limited duplicate cost") + } + first[cost.ItemID] = uint32(next) + } + } + if len(first) == 0 { + return fmt.Errorf("missing first-rank duplicate cost %d", id) + } + costs[id] = first + } + bag, err := bagMaterials(player) + if err != nil { + return err + } + baseline := map[uint32]uint32{} + for _, item := range bag { + baseline[item.Tid] = item.Num + } + result, err := common.DrawLimitedGacha(req.GachaId, req.GachaNum, costs, baseline) + if err != nil { + PacketLog("LIMITED_GACHA rejected: " + err.Error()) + return nil + } + if player.Materials == nil { + player.Materials = map[uint32]uint32{} + } + sync := &pb.PlayerSyncScNotify{} + for id, count := range result.Materials { + player.Materials[id] = count + sync.MaterialList = append(sync.MaterialList, &pb.Material{Tid: id, Num: count}) + } + for _, reward := range result.Rewards { + item := &pb.Item{ItemId: reward.ItemID, Num: 1} + if reward.Lightcone != nil { + player.Lightcones = append(player.Lightcones, *reward.Lightcone) + sync.EquipmentList = append(sync.EquipmentList, reward.Lightcone.ToProtoEquipment()) + item.UniqueId = reward.Lightcone.UniqueID() + } + transfer := &pb.ItemList{} + for id, count := range reward.Materials { + transfer.ItemList = append(transfer.ItemList, &pb.Item{ItemId: id, Num: count}) + } + rsp.GachaItemList = append(rsp.GachaItemList, &pb.GachaItem{GachaItem: item, TokenItem: &pb.ItemList{}, TransferItemList: transfer}) + } + if err = s.Send(sync); err != nil { + return err + } + rsp.Retcode = 0 + rsp.GachaNum = req.GachaNum + PacketLog(fmt.Sprintf("LIMITED_GACHA banner=%d draws=%d pity5=%d pity4=%d", req.GachaId, req.GachaNum, result.Pity.SinceFiveStar, result.Pity.SinceFourStar)) + return nil +} diff --git a/internal/gameserver/peak_scene_overrides.go b/internal/gameserver/peak_scene_overrides.go new file mode 100644 index 0000000..d4737e9 --- /dev/null +++ b/internal/gameserver/peak_scene_overrides.go @@ -0,0 +1,91 @@ +package gameserver + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "strconv" + + "gac-hkrpg-go/internal/common" +) + +// These are adventure actor/placement identifiers, not battle wave monsters. +// Their reference binary provenance is retained in the editable resource. +// Applying the overlay never changes an existing session/run or a save file. +func applyPeakSceneOverrides(data *ChallengeDataConfig) { + var catalog struct { + SourceKind string `json:"source_kind"` + BinaryHash string `json:"binary_sha256"` + Offset string `json:"source_file_offset"` + Length uint32 `json:"decoded_byte_length"` + Data struct { + Groups []struct { + GroupID uint32 `json:"group_id"` + Stages map[string]struct { + NPC uint32 `json:"npc_monster_id"` + Entrance uint32 `json:"map_entrance_id"` + Group uint32 `json:"maze_group_id"` + } `json:"stages"` + } `json:"challenge_peak_extra_data"` + } `json:"data"` + } + markAll := func(err error) { + for id, stage := range data.Peak { + stage.SceneResourceError = err.Error() + data.Peak[id] = stage + } + Log("[PEAK] scene override rejected: " + err.Error()) + } + raw, err := common.ReadResourceFile("resources/ChallengePeakSceneOverrides.json") + if err != nil { + markAll(err) + return + } + if err := json.Unmarshal(raw, &catalog); err != nil { + markAll(err) + return + } + digest, err := hex.DecodeString(catalog.BinaryHash) + _, offsetErr := strconv.ParseUint(catalog.Offset, 0, 64) + if err != nil || len(digest) != 32 || offsetErr != nil || catalog.Length == 0 || catalog.SourceKind != "reference-server-embedded-data" { + markAll(fmt.Errorf("Peak scene override provenance is incomplete")) + return + } + res, err := common.GameRes() + if err != nil { + markAll(err) + return + } + seen := make(map[string]bool) + for _, group := range catalog.Data.Groups { + for id, row := range group.Stages { + stage, exists := data.Peak[id] + if !exists || seen[id] || group.GroupID == 0 || stage.GroupID != group.GroupID { + markAll(fmt.Errorf("Peak scene override has unknown, duplicate or mismatched stage %s", id)) + return + } + seen[id] = true + stage.SceneResourceError = "" + if row.NPC == 0 || row.Entrance == 0 || row.Group == 0 { + stage.SceneResourceError = "Peak scene override has an empty actor/placement identifier" + } else if scenes := res.LevelOutputConfigs[row.Entrance]; len(scenes) == 0 { + stage.SceneResourceError = fmt.Sprintf("Peak entrance %d has no resource scene", row.Entrance) + } else { + _, scene, _ := firstSceneOfEntry(res, row.Entrance) + placement, ok := scene.Scenes[row.Group] + if !ok || len(placement.Monsters) == 0 { + stage.SceneResourceError = fmt.Sprintf("Peak entrance %d group %d has no resource monster placement", row.Entrance, row.Group) + } + } + stage.Entrance, stage.Group, stage.MonsterID = row.Entrance, row.Group, row.NPC + data.Peak[id] = stage + } + } + for id, stage := range data.Peak { + if !seen[id] { + stage.SceneResourceError = "Peak stage is missing from the scene override resource" + data.Peak[id] = stage + } + } + Log(fmt.Sprintf("[PEAK] scene override loaded stages=%d reference_sha256=%s; Client acceptance unverified", len(seen), catalog.BinaryHash)) +} diff --git a/internal/gameserver/session.go b/internal/gameserver/session.go index e5dd00c..1a6a01d 100644 --- a/internal/gameserver/session.go +++ b/internal/gameserver/session.go @@ -168,6 +168,15 @@ func (s *Session) Consume(data []byte) error { // Send marshals a proto response and pushes it through KCP. func (s *Session) Send(msg proto.Message) error { name := string(msg.ProtoReflect().Descriptor().Name()) + switch name { + case "GridFightGetDataScRsp", "GridFightStartGamePlayScRsp", "GridFightSyncUpdateResultScNotify", "GridFightSettleNotify", + "GridFightEnterBattleStageScRsp", "GridFightEndBattleStageNotify", "GridFightGetArchiveScRsp": + catalog, err := common.LoadCurrencyWarsCatalog() + if err != nil { + return err + } + cwProjectRoleIDs(msg, catalog) + } cmdID, ok := goproto.CmdIDByName[name] if !ok { return fmt.Errorf("no cmd id registered for %s", name) diff --git a/internal/gameserver/technique.go b/internal/gameserver/technique.go index db247c1..499036a 100644 --- a/internal/gameserver/technique.go +++ b/internal/gameserver/technique.go @@ -21,7 +21,11 @@ func (s *Session) techniqueLineup() *goproto.LineupInfo { } if s.techniqueMP == nil { v := rules.InitialMP + if s.ChallengeRun != nil { + v = lineup.MaxMp + } s.techniqueMP = &v + SceneDebugLog("[TECHNIQUE] initialized challenge=%t mp=%d/%d", s.ChallengeRun != nil, v, lineup.MaxMp) } if *s.techniqueMP > lineup.MaxMp { *s.techniqueMP = lineup.MaxMp diff --git a/internal/gameserver/world_battle.go b/internal/gameserver/world_battle.go index f32b864..f8275e5 100644 --- a/internal/gameserver/world_battle.go +++ b/internal/gameserver/world_battle.go @@ -239,7 +239,11 @@ func (s *Session) cocoonBattleConfig(id, worldLevel, wave uint32) (*common.Battl return nil, fmt.Errorf("player data is not loaded") } config := player.BattleConfig - return &config, nil + if len(config.Monsters) != 0 { + return &config, nil + } + // An empty custom wave list means the user selected “use Client + // stages” in Srtool. Fall through to the installed Calyx stage rows. } stages := row.StageIDs if len(stages) == 0 && row.StageID != 0 { diff --git a/internal/sdkserver/api.go b/internal/sdkserver/api.go index 39bea18..58ef5c8 100644 --- a/internal/sdkserver/api.go +++ b/internal/sdkserver/api.go @@ -49,6 +49,10 @@ func registerAPIRoutes(mux *http.ServeMux) { mux.HandleFunc("/api/tool-session", corsWrapper(apiToolSession)) mux.HandleFunc("/api/status", corsWrapper(apiStatus)) mux.HandleFunc("/api/technique", corsWrapper(apiTechnique)) + mux.HandleFunc("/api/aha-help", corsWrapper(apiAhaHelp)) + mux.HandleFunc("/api/camera", corsWrapper(apiCamera)) + mux.HandleFunc("/api/monster-settings/catalog", corsWrapper(apiMonsterSettingsCatalog)) + mux.HandleFunc("/api/monster-settings/aa-round", corsWrapper(apiAARoundSelection)) mux.HandleFunc("/api/freesr", corsWrapper(apiFreesrData)) mux.HandleFunc("/api/inventory/materials", corsWrapper(apiInventoryMaterials)) mux.HandleFunc("/api/freesr/avatars", corsWrapper(apiFreesrAvatars)) @@ -318,45 +322,16 @@ func apiInventoryMaterials(w http.ResponseWriter, r *http.Request) { } seen[update.ItemID] = struct{}{} } - materials, err := readInventory() - if err != nil { - writeInventoryError(w, http.StatusInternalServerError, "failed to read inventory: "+err.Error()) - return - } + updates := make(map[uint32]*uint32, len(req.Updates)) for _, update := range req.Updates { - key := strconv.FormatUint(uint64(update.ItemID), 10) if update.Reset { - delete(materials, key) + updates[update.ItemID] = nil } else { - materials[key] = *update.Count + updates[update.ItemID] = update.Count } } - raw, err := os.ReadFile("freesr-data.json") + materials, err := common.PatchMaterialOverrides(updates) if err != nil { - writeInventoryError(w, http.StatusInternalServerError, "failed to read freesr-data.json: "+err.Error()) - return - } - var data map[string]json.RawMessage - if err := json.Unmarshal(raw, &data); err != nil { - writeInventoryError(w, http.StatusInternalServerError, "freesr-data.json is invalid: "+err.Error()) - return - } - if data == nil { - writeInventoryError(w, http.StatusInternalServerError, "freesr-data.json must contain a JSON object") - return - } - materialJSON, err := json.Marshal(materials) - if err != nil { - writeInventoryError(w, http.StatusInternalServerError, "failed to encode inventory: "+err.Error()) - return - } - data["materials"] = materialJSON - output, err := json.MarshalIndent(data, "", " ") - if err != nil { - writeInventoryError(w, http.StatusInternalServerError, "failed to encode freesr-data.json: "+err.Error()) - return - } - if err := os.WriteFile("freesr-data.json", output, 0o644); err != nil { writeInventoryError(w, http.StatusInternalServerError, "failed to save inventory: "+err.Error()) return } @@ -482,23 +457,13 @@ func apiPersistentData(w http.ResponseWriter, r *http.Request) { return } - var parsed map[string]any + var parsed map[string]json.RawMessage if err := json.Unmarshal(body, &parsed); err != nil { writeJSON(w, map[string]any{"error": "invalid json: " + err.Error(), "status": 400}) return } - // Merge into existing persistent file so partial updates (e.g. lineups or switches) preserve other settings - existing := make(map[string]any) - if raw, err := os.ReadFile("persistent"); err == nil { - _ = json.Unmarshal(raw, &existing) - } - for k, v := range parsed { - existing[k] = v - } - - out, _ := json.MarshalIndent(existing, "", " ") - if err := os.WriteFile("persistent", out, 0o644); err != nil { + if err := common.PatchPersistentFields(parsed); err != nil { writeJSON(w, map[string]any{"error": "failed to write persistent: " + err.Error(), "status": 500}) return } diff --git a/internal/sdkserver/api_aa_round_selection.go b/internal/sdkserver/api_aa_round_selection.go new file mode 100644 index 0000000..d6d23cd --- /dev/null +++ b/internal/sdkserver/api_aa_round_selection.go @@ -0,0 +1,45 @@ +package sdkserver + +import ( + "encoding/json" + "net/http" + + "gac-hkrpg-go/internal/common" +) + +func apiAARoundSelection(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + selection, err := common.ReadAARoundSelection() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, map[string]any{"status": 200, "selection": selection}) + case http.MethodPost: + var request struct { + Action string `json:"action"` + PeakGroupID uint32 `json:"peak_group_id"` + } + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + http.Error(w, "invalid JSON", http.StatusBadRequest) + return + } + if request.Action == "clear" { + if err := common.ClearAARoundSelection(); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, map[string]any{"status": 200, "selection": nil}) + return + } + selection, err := common.SetAARoundSelection(request.PeakGroupID) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + writeJSON(w, map[string]any{"status": 200, "selection": selection}) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +} diff --git a/internal/sdkserver/api_aha_help.go b/internal/sdkserver/api_aha_help.go new file mode 100644 index 0000000..1e5f55f --- /dev/null +++ b/internal/sdkserver/api_aha_help.go @@ -0,0 +1,47 @@ +package sdkserver + +import ( + "encoding/json" + "gac-hkrpg-go/internal/common" + "net/http" +) + +func apiAhaHelp(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet && r.Method != http.MethodPost { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + if r.Method == http.MethodPost { + var body map[string]json.RawMessage + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + http.Error(w, "invalid JSON", http.StatusBadRequest) + return + } + raw, ok := body["level"] + var level *uint32 + if !ok || json.Unmarshal(raw, &level) != nil { + http.Error(w, "level must be null or an unsigned integer", http.StatusBadRequest) + return + } + if err := common.SaveAhaHelpLevel(level); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + } + levels, err := common.LoadAhaHelpLevels() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + selected, err := common.ReadAhaHelpLevel() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + data, err := common.LoadFreesrData() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, map[string]any{"status": 200, "level": selected, "levels": levels, "legacy_enabled": data.BattleConfig.EnableInvasionSupport}) +} diff --git a/internal/sdkserver/api_camera.go b/internal/sdkserver/api_camera.go new file mode 100644 index 0000000..7b15d81 --- /dev/null +++ b/internal/sdkserver/api_camera.go @@ -0,0 +1,34 @@ +package sdkserver + +import ( + "encoding/json" + "gac-hkrpg-go/internal/common" + "net/http" +) + +func apiCamera(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + case http.MethodPost: + var settings common.FaceCamSettings + decoder := json.NewDecoder(r.Body) + decoder.DisallowUnknownFields() + if err := decoder.Decode(&settings); err != nil { + http.Error(w, "invalid camera settings", http.StatusBadRequest) + return + } + if err := common.SaveFaceCamSettings(settings); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + settings, err := common.ReadFaceCamSettings() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + writeJSON(w, settings) +} diff --git a/internal/sdkserver/api_client_unstuck.go b/internal/sdkserver/api_client_unstuck.go index 265a356..1783316 100644 --- a/internal/sdkserver/api_client_unstuck.go +++ b/internal/sdkserver/api_client_unstuck.go @@ -111,6 +111,12 @@ func apiClientUnstuckResult(w http.ResponseWriter, r *http.Request) { } clientUnstuckState.status.Error = result.Error clientUnstuckState.status.CompletedAt = time.Now().UnixMilli() + // Queueing and acknowledgement share the lock, so removing this owned + // request cannot delete a newer recovery. A leftover script still checks + // the live nonce before touching UI, including after an SDK restart. + if err := os.Remove(clientUnstuckRequestFile); err != nil && !os.IsNotExist(err) { + Log("[UNSTUCK] cannot remove completed request: " + err.Error()) + } Log("[UNSTUCK] UI recovery " + clientUnstuckState.status.State + " request=" + result.RequestID) writeJSON(w, clientUnstuckState.status) } @@ -120,27 +126,63 @@ func apiClientUnstuckResult(w http.ResponseWriter, r *http.Request) { // response, erase a run, or reset the Client's loading/phase flags. const clientUnstuckLua = `do local id = %q - if _G.__GAC_UNSTUCK_HTTP and _G.__GAC_UNSTUCK_HTTP.isDone then - pcall(function() _G.__GAC_UNSTUCK_HTTP:Dispose() end); _G.__GAC_UNSTUCK_HTTP=nil - end - if _G.__GAC_UNSTUCK_LAST ~= id then - _G.__GAC_UNSTUCK_LAST=id - local ok,err=pcall(function() - local ui=CS.RPG.Client.GlobalVars.s_UIManager - if not ui then error('Client UIManager is unavailable') end - ui:ClearWaitNetPacketFullScreenBlock() - end) - CS.UnityEngine.Debug.Log('[GAC_UNSTUCK] request='..id..' success='..tostring(ok)..' '..tostring(err or '')) - pcall(function() - local url=_G.__GAC_SRTOOL_LIVE_URL - if type(url)~='string' or url=='' then return end - local body='{"request_id":"'..id..'","success":'..tostring(ok)..',"error":'..CS.Newtonsoft.Json.JsonConvert.SerializeObject(tostring(err or ''))..'}' - local req=CS.UnityEngine.Networking.UnityWebRequest(url..'/api/client/unstuck/result','POST') - req.uploadHandler=CS.UnityEngine.Networking.UploadHandlerRaw(CS.System.Text.Encoding.UTF8:GetBytes(body)) + local function tick() + local url=_G.__GAC_SRTOOL_LIVE_URL + if type(url)~='string' or url=='' then return end + local s=_G.__GAC_UNSTUCK_WORK + if not s or s.id~=id then + if s and s.request then pcall(function()s.request:Dispose()end) end + s={id=id,phase='check',next=0};_G.__GAC_UNSTUCK_WORK=s + end + if s.phase=='done' or s.phase=='stale' then return end + local now=CS.UnityEngine.Time.unscaledTime + if s.request then + if not s.request.isDone then return end + local request=s.request;s.request=nil + local ok,err=pcall(function() + local code=request.responseCode + if code<200 or code>=300 then error('recovery HTTP '..tostring(code)) end + if s.phase=='check' then + local status=CS.Newtonsoft.Json.Linq.JObject.Parse(request.downloadHandler.text) + local request_id=status:get_Item('request_id') + local phase=status:get_Item('state') + if not request_id or tostring(request_id)~=id or not phase or tostring(phase)~='queued' then + s.phase='stale';return + end + -- Only the current queued SDK request authorizes a UI recovery. Old + -- generated files are inert after reconnect or SDK process restart. + local success,message=pcall(function() + local ui=CS.RPG.Client.GlobalVars.s_UIManager + if not ui then error('Client UIManager is unavailable') end + ui:ClearWaitNetPacketFullScreenBlock() + end) + s.body='{"request_id":"'..id..'","success":'..tostring(success)..',"error":'..CS.Newtonsoft.Json.JsonConvert.SerializeObject(tostring(message or ''))..'}' + s.phase='ack' + CS.UnityEngine.Debug.Log('[GAC_UNSTUCK] request='..id..' success='..tostring(success)..' '..tostring(message or '')) + else + s.phase='done';_G.__GAC_UNSTUCK_LAST=id + end + end) + pcall(function()request:Dispose()end) + if not ok then + s.next=now+5 + if s.error~=tostring(err) then CS.UnityEngine.Debug.Log('[GAC_UNSTUCK] '..tostring(err));s.error=tostring(err) end + return + end + end + if s.phase=='done' or s.phase=='stale' or now 5 || (field != "gold" && field != "hp" && field != "exp" && field != "equip" && field != "role" && field != "orb" && field != "consumable" && field != "forge") { fail(fmt.Errorf("%s", usage)) return } @@ -75,10 +149,85 @@ func apiCurrencyWarsCommand(w http.ResponseWriter, command string) { fail(fmt.Errorf("HP must be 1..%d", player.PPKKHHNEOHB)) return } - id, err := common.QueueCurrencyWarsCommand(cfg.PlayerUID, run.UniqueId, field, uint32(value)) + quantity, star := uint32(1), uint32(0) + parse := func(text string) (uint32, error) { + v, e := strconv.ParseUint(text, 10, 32) + if e != nil || v == 0 { + return 0, fmt.Errorf("star/count must be a positive uint32") + } + return uint32(v), nil + } + switch field { + case "role": + if len(parts) < 4 { + fail(fmt.Errorf("%s", usage)) + return + } + star, err = parse(parts[3]) + if err == nil && len(parts) == 5 { + quantity, err = parse(parts[4]) + } + if err == nil { + _, err = catalog.CapturedRoleVariant(uint32(value), star) + } + case "orb", "consumable", "forge": + if len(parts) > 4 { + fail(fmt.Errorf("%s", usage)) + return + } + if len(parts) == 4 { + quantity, err = parse(parts[3]) + } + if err == nil { + var rows *common.CurrencyWarsRewards + rows, err = common.LoadCurrencyWarsRewards(catalog) + if err == nil { + if field == "forge" { + if _, ok := rows.Forges[uint32(value)]; !ok { + err = fmt.Errorf("unknown forge %d", value) + } + } else if field == "orb" { + if _, ok := rows.Orbs[uint32(value)]; !ok { + err = fmt.Errorf("unknown Orb %d", value) + } + } else { + if _, ok := rows.Consumables[uint32(value)]; !ok { + err = fmt.Errorf("unknown consumable %d", value) + } + } + } + } + case "equip": + if len(parts) > 4 { + fail(fmt.Errorf("%s", usage)) + return + } + if len(parts) == 4 { + quantity, err = parse(parts[3]) + } + if err == nil { + var rows map[uint32]common.CurrencyWarsEquipment + rows, err = common.LoadCurrencyWarsEquipment(catalog) + if err == nil { + if _, ok := rows[uint32(value)]; !ok { + err = fmt.Errorf("equipment %d not captured; use /cw list equip", value) + } + } + } + default: + if len(parts) != 3 { + fail(fmt.Errorf("%s", usage)) + return + } + } if err != nil { fail(err) return } - writeJSON(w, map[string]any{"success": true, "state": "queued", "request_id": id, "output": fmt.Sprintf("Queued CW %s=%d for run %d. Applies at the next heartbeat in Preparation.", field, value, run.UniqueId)}) + id, err := common.QueueCurrencyWarsGrant(cfg.PlayerUID, run.UniqueId, field, uint32(value), quantity, star) + if err != nil { + fail(err) + return + } + writeJSON(w, map[string]any{"success": true, "state": "queued", "request_id": id, "output": fmt.Sprintf("Queued CW %s=%d star=%d count=%d for run %d. Applies at the next heartbeat in Preparation; check CW_GM log for the applied result.", field, value, star, quantity, run.UniqueId)}) } diff --git a/internal/sdkserver/api_inventory_test.go b/internal/sdkserver/api_inventory_test.go index bf55eb5..0f85f0d 100644 --- a/internal/sdkserver/api_inventory_test.go +++ b/internal/sdkserver/api_inventory_test.go @@ -19,6 +19,10 @@ func TestInventoryMaterialsUpdateIsCatalogBoundAndPreservesSave(t *testing.T) { if err := os.WriteFile(filepath.Join("resources", "InventoryItemConfig.json"), []byte(`{"item_ids":[101,102,301]}`), 0o644); err != nil { t.Fatal(err) } + eidolonConfig := `{"avatars":{"1001":{"ranks":[{"cost":[{"ItemID":11001,"ItemNum":1}]}]}},"ex_materials":{}}` + if err := os.WriteFile(filepath.Join("resources", "EidolonConfig.json"), []byte(eidolonConfig), 0o644); err != nil { + t.Fatal(err) + } original := `{"avatars":{"1001":{"level":80}},"battle_config":{},"materials":{"101":4}}` if err := os.WriteFile("freesr-data.json", []byte(original), 0o644); err != nil { t.Fatal(err) diff --git a/internal/sdkserver/api_monster_settings.go b/internal/sdkserver/api_monster_settings.go new file mode 100644 index 0000000..e1e2580 --- /dev/null +++ b/internal/sdkserver/api_monster_settings.go @@ -0,0 +1,47 @@ +package sdkserver + +import ( + "net/http" + + "gac-hkrpg-go/internal/common" +) + +func apiMonsterSettingsCatalog(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + catalog, err := common.LoadMonsterSettingsCatalog() + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + writeJSON(w, map[string]any{"error": err.Error(), "status": 500}) + return + } + cfg, err := common.LoadRuntimeConfig() + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + writeJSON(w, map[string]any{"error": err.Error(), "status": 500}) + return + } + response := map[string]any{ + "status": 200, + "modes": catalog.Modes, + "monster_ids": catalog.MonsterIDs, + "monsters": catalog.Monsters, + "levels": catalog.Levels, + "sources": catalog.Sources, + "client_version": cfg.ClientVersion, + } + if metadata, metadataErr := common.LoadNanokaMonsterMetadata(cfg.ClientVersion); metadataErr != nil { + response["metadata_error"] = metadataErr.Error() + response["sources"] = append(catalog.Sources, "Nanoka metadata unavailable") + } else { + catalog.ApplyNanokaMonsterMetadata(metadata) + response["monsters"] = catalog.Monsters + response["modes"] = catalog.Modes + response["sources"] = catalog.Sources + response["metadata_version"] = metadata.Version + response["metadata_source"] = "Nanoka" + } + writeJSON(w, response) +} diff --git a/persistent b/persistent index 25df5f6..889def5 100644 --- a/persistent +++ b/persistent @@ -1,17 +1,29 @@ { + "aa_round_selection": { + "client_version": "4.6.53", + "peak_group_id": 2 + }, "active_team_preset": 3, "auto_technique_food": true, "currency_wars": { "52022": { - "format_version": 1, - "uid": 52022, - "client_version": "4.6.53", "assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", - "revision": 171, - "wire_data": "GkBCHAoAMgoIAhIGCEg4BmgCMgoIARIGCCE4BmgBWAJiIBCFnQEgAkoQGgAiACoAMgA6AFoAcgB6AFIAWAFyAHgGOtcOGAIyCSoH+q8VzozaEEgBUp8BGg0IBCoGSgL1TnBp4hQAGk8ICCoGSgLpUnBpqi1CegQIAxAEegQICBA8egQIBhAkegQICRBIegQIChAAegQIBRAQegQIBBAGegQIARACegQIAhACegQICxAAegQIBxAwGgwICSoFSgEAcAX6NQAaDQgTKgZKAsk+cG/6XwAaDwg4KgZKAsMXcGu6ZQIgAhoPCF4qBkoC3R9wa7plAiABYiZiJAhkEAUYCiAHMAk4CkCD3f8PUGRYCmAEshgA0jQE1fuxA4JRAGL6BAr3BBILCAcYBjIDAwQFWAsqZRgBKJLPCDBgOAVCBQg5EPABQgUI9gcQZEIFCDUQ4ANCBQj1BxBkQgUIIBC0AUIFCPsHEGRCBQgxELQBQgUINBDwAUIFCCEQ4ANCBQg7EMIDQgUILBCwAkIFCCIQuANCBQiBCBBkKmUYASielgkwZTgHQgUINRDgA0IFCPsHEGRCBQj2BxBkQgUIMRC0AUIFCCEQ4ANCBQg5EPABQgUINBDwAUIFCCAQtAFCBQiBCBBkQgUI9QcQZEIFCDsQwgNCBQgiELgDQgUILBCwAiplGAIo5pcJMGw4AUIFCPsHEGRCBQj1BxBkQgUIORDwAUIFCCAQtAFCBQghEOADQgUINBDwAUIFCCwQsAJCBQg7EMIDQgUIIhC4A0IFCDEQtAFCBQg1EOADQgUI9gcQZEIFCIEIEGQqZRgCKKrwJDBtOAZCBQg5EPABQgUIIhC4A0IFCCEQ4ANCBQg0EPABQgUILBCwAkIFCPUHEGRCBQiBCBBkQgUIMRC0AUIFCPsHEGRCBQj2BxBkQgUIIBC0AUIFCDUQ4ANCBQg7EMIDKmUYAijWswcwcjgCQgUIIRDgA0IFCIEIEGRCBQg5EPABQgUINRDgA0IFCDsQwgNCBQj7BxBkQgUI9gcQZEIFCDQQ8AFCBQgiELgDQgUIIBC0AUIFCDEQtAFCBQj1BxBkQgUILBCwAiplGAIo5rYHMHU4CEIFCDEQtAFCBQj7BxBkQgUI9gcQZEIFCPUHEGRCBQgsELACQgUIOxDCA0IFCDkQ8AFCBQgiELgDQgUIIRDgA0IFCIEIEGRCBQg1EOADQgUINBDwAUIFCCAQtAFiLDIqKgwIARAEWANo5tGpqQEqDAgBEARYBGjq36+pASoMCAEQBFgFaPbbr6kBYpoCepcCCh4SBBAFKAESBBAKKAISBBAUKAMSBBAoKAQSBBAZKAUaC2gE2lcGGAF4rpkJGgtoBNpXBhgBeOa2BxoLaAPaVwYYAXjuqwcaC2gF2lcGGAF4yoIIGgtoBNpXBhgBeNqbCWgCerEBspAGlpEG3t0Gpt8G7uAG4uQG7qsH0qwHtq0H4q8HqrEHjrIH8rIH1rMHurQHnrUH5rYHyrcHkrkH9rkH2roHorwHhr0H4voHqvwHjv0H8v0H1v4Huv8H5oEIyoIIroMI9oQIhogIxsYIqscIjsgI8sgI1skIusoInssIgswI5swIys0Iks8I9s8IvtEI1pQJupUJnpYJgpcJ5pcJypgJrpkJ2psJvpwJop0Jhp4JhvEwYgIaAGKwBBKtBBocEggIk5OL7wEwARIHCJ/JuAEwARIHCJrKx18wASgBMgJgGzICYBkyAmAGOPEVQAJaAGIXCAEoAUIREIG7sCEyAoQHOI7RBWAFcAFiGggCKAFCFBCDu7AhIAEyAWU47c4FQAFgCnACYhAIAygBQgoQhbuwITIBAXAFYhYIBCgBQhAQhruwITIBcTjuzgVgCnADYiYIBSgBQiAQiLuwIRoF0CP2nAYyAoYHOKzQBVgBYApwAXoEmczuBGIWCAYoAUIQEIm7sCEyAWk4yM8FYA9wBGIbCAEoAkIVEIq7sCEgATICyQE4984FQAFgCnACYhAIAigCQgoQjLuwITIBAnAFYhcIAygCQhEQjbuwITIC1QE4+M4FYApwA2IXCAQoAkIREI+7sCEyAocHOK3QBWAKcAFiFwgFKAJCERCQu7AhMgLNATjJzwVgD3AEYhkIASgDQhMQkbuwITICrQI4gc8FQAFgCnACYhAIAigDQgoQk7uwITIBA3AFYhcIAygDQhEQlLuwITICzQI4gs8FYApwA2IXCAQoA0IREJa7sCEyAogHOK7QBWAKcAFiFQgFKANCDxCXu7AhMgLrFzjKzwVwBGpl4gJiUA1aXAogWAFiCAi+ssj9AjACYggI8Zf/7gEwAmIICPGX/+4BMAEKNFgCYggIvrLI/QIwAWIICOC+hf4CMAFiCAi+ssj9AjABYggI8Zf/7gEwAWIICMPGhf4CMAFY7c4FaAFyAhoAYgpCCGIGKAFYhY4GYjNSMUIJMgTHPsk+WMc+QgkyBINWhFZYg1ZaBwimlAZiAQZaBwi2ngxiAQZaBwiqogxiAQZiAGIeahwwS0IJCNKWBhDX8KAwQgkIwpMGENe7iDBYj5w9YgPSZwBiAioAYg2CfAoaCAgBQPacBkgCcIWdAQ==" + "client_version": "4.6.53", + "format_version": 1, + "revision": 547, + "runtime": { + "rules": { + "PetPalStarDown": 40, + "PetPalStarDownApplied/1/5": 1, + "PetPalStarDownApplied/1/6": 1, + "PetPalStarDownApplied/2/1": 1 + }, + "run_id": 1 + }, + "uid": 52022, + "wire_data": "GkBCHAoAMgoIARIGCCE4BmgBMgoIAhIGCEg4BmgCWAJiIBCFnQEgAkoQGgAiACoAMgA6AFoAcgB6AFIAWAFyAHgGOpMUGAIqHDCjBMpxFiABKgRoiasHKgRoiqsHKgRotJAGcAEyCSoH+q8VzozaEEgBUp8BGg0IBCoGSgL1TnBp4hQAGk8ICCoGSgLpUnBpqi1CegQIBxAwegQICRBIegQIARACegQIChAAegQIBRAQegQIAxAEegQIBhAkegQIAhACegQICBA8egQICxAAegQIBBAGGgwICSoFSgEAcAX6NQAaDQgTKgZKAsk+cG/6XwAaDwg4KgZKAsMXcGu6ZQIgAhoPCF4qBkoC3R9wa7plAiABYi5iLAhkEAUYCiAHKAMwCTgKQOjY/w9ICFBkWApgBLIYBGADeAbSNATV+7EDglEAYu8JCuwJEgsIBxgGMgMDBAVYCyplGAEonpYJMGU4BkIFCDQQ8AFCBQg1EOADQgUILBCwAkIFCPYHEGRCBQggELQBQgUIgQgQZEIFCDsQwgNCBQj1BxBkQgUIMRC0AUIFCPsHEGRCBQg5EPABQgUIIRDgA0IFCCIQuAMqZRgCKOaXCTBsOAlCBQiBCBBkQgUIMRC0AUIFCPUHEGRCBQg5EPABQgUIOxDCA0IFCCEQ4ANCBQj2BxBkQgUI+wcQZEIFCDUQ4ANCBQg0EPABQgUIIBC0AUIFCCIQuANCBQgsELACKmUYAiiq8CQwbTgFQgUIgQgQZEIFCDkQ8AFCBQj7BxBkQgUIMRC0AUIFCPUHEGRCBQgsELACQgUIOxDCA0IFCCAQtAFCBQj2BxBkQgUIIhC4A0IFCCEQ4ANCBQg0EPABQgUINRDgAyppGAEiAoUBKIaeCTB5OARCBQghEOADQgUI9QcQZEIFCIEIEGRCBQgxELQBQgUIIhC4A0IFCDQQ8AFCBQggELQBQgUI9gcQZEIFCDkQ8AFCBQgsELACQgUI+wcQZEIFCDsQwgNCBQg1EOADKmUYAiiG8TAwfTgHQgUINRDgA0IFCDsQwgNCBQj2BxBkQgUILBCwAkIFCIEIEGRCBQggELQBQgUIIhC4A0IFCPUHEGRCBQgxELQBQgUIORDwAUIFCCEQ4ANCBQj7BxBkQgUINBDwASpmGAIo8v0HMIEBOANCBQj1BxBkQgUIMRC0AUIFCDsQwgNCBQj2BxBkQgUINRDgA0IFCCIQuANCBQgsELACQgUIORDwAUIFCCEQ4ANCBQggELQBQgUI+wcQZEIFCIEIEGRCBQg0EPABKmYYASjSrAcwggE4CEIFCIEIEGRCBQgiELgDQgUI+wcQZEIFCCEQ4ANCBQj2BxBkQgUIOxDCA0IFCDUQ4ANCBQg5EPABQgUI9QcQZEIFCDQQ8AFCBQgxELQBQgUIIBC0AUIFCCwQsAIqZhgCKMicCTCLATgCQgUIMRC0AUIFCCEQ4ANCBQggELQBQgUINRDgA0IFCDQQ8AFCBQj7BxBkQgUIOxDCA0IFCCwQsAJCBQj1BxBkQgUIgQgQZEIFCDkQ8AFCBQj2BxBkQgUIIhC4AypmGAIoyJwJMI8BOA5CBQgiELgDQgUIIBC0AUIFCPsHEGRCBQiBCBBkQgUINRDgA0IFCDsQwgNCBQghEOADQgUI9QcQZEIFCDQQ8AFCBQg5EPABQgUI9gcQZEIFCCwQsAJCBQgxELQBKmYYASjInAkwkgE4EUIFCCwQsAJCBQghEOADQgUI9gcQZEIFCDsQwgNCBQgiELgDQgUI9QcQZEIFCDQQ8AFCBQg1EOADQgUIORDwAUIFCDEQtAFCBQiBCBBkQgUI+wcQZEIFCCAQtAEqZhgBKMicCTCTATgPQgUIOxDCA0IFCCEQ4ANCBQj7BxBkQgUI9QcQZEIFCDQQ8AFCBQg1EOADQgUILBCwAkIFCDEQtAFCBQggELQBQgUI9gcQZEIFCIEIEGRCBQgiELgDQgUIORDwASpmGAMo1rMHMJoBOAFCBQg5EPABQgUI+wcQZEIFCDQQ8AFCBQiBCBBkQgUIMRC0AUIFCPYHEGRCBQgiELgDQgUINRDgA0IFCDsQwgNCBQj1BxBkQgUILBCwAkIFCCAQtAFCBQghEOADYjcyNSoMCAEQBFgDaObRqakBKgwIARAEWARo6t+vqQEqDAgBEARYBWj226+pASoJEAlYhQFogLAVYpoCepcCCh4SBBAFKAESBBAKKAISBBAUKAMSBBAoKAQSBBAZKAUaC2gE2lcGGAF45rYHGgtoBdpXBhgBeJaRBhoLaAXaVwYYAXiClwkaC2gE2lcGGAF4jsgIGgtoAdpXBhgBeIa9B2gCerEBspAGlpEG3t0Gpt8G7uAG4uQG7qsH0qwHtq0H4q8HqrEHjrIH8rIH1rMHurQHnrUH5rYHyrcHkrkH9rkH2roHorwHhr0H4voHqvwHjv0H8v0H1v4Huv8H5oEIyoIIroMI9oQIhogIxsYIqscIjsgI8sgI1skIusoInssIgswI5swIys0Iks8I9s8IvtEI1pQJupUJnpYJgpcJ5pcJypgJrpkJ2psJvpwJop0Jhp4JhvEwYgIaAGK3BBK0BBocEggIk5OL7wEwARIHCJ/JuAEwARIHCJrKx18wASgCMgJgGzICYBkyAmAGOPEVQAFaAGIXCAEoAUIREIG7sCEyAoQHOI7RBWAFcAFiGAgCKAFCEhCDu7AhMgFlOO3OBUABYApwAmIQCAMoAUIKEIW7sCEyAQFwBWIWCAQoAUIQEIa7sCEyAXE47s4FYApwA2ImCAUoAUIgEIi7sCEaBdAj9pwGMgKGBzis0AVYAWAKcAF6BJnM7gRiFggGKAFCEBCJu7AhMgFpOMjPBWAPcARiGwgBKAJCFRCKu7AhIAEyAskBOPfOBUABYApwAmIQCAIoAkIKEIy7sCEyAQJwBWIXCAMoAkIREI27sCEyAtUBOPjOBWAKcANiFwgEKAJCERCPu7AhMgKHBzit0AVgCnABYhcIBSgCQhEQkLuwITICzQE4yc8FYA9wBGIZCAEoA0ITEJG7sCEyAq0COIHPBUABYApwAmIQCAIoA0IKEJO7sCEyAQNwBWIXCAMoA0IREJS7sCEyAs0COILPBWAKcANiFwgEKANCERCWu7AhMgKIBziu0AVgCnABYhUIBSgDQg8Ql7uwITIC6xc4ys8FcARqbuICa1AZWmUKKlgBYggIuoD/7gEwAWIICPrKwv4CMAFiCAjwlJmPATABYggI6fD+7gEwAwozWAJiCAjwlJmPATACYggI8JSZjwEwAmIHCLmC5DAwAWIICKq7wv4CMAFiCAiqu8L+AjABWPfOBWgBcgIaAGIKQghiBigBWIWOBmIzUjFCCTIExz7JPljHPkIJMgSDVoRWWINWWgcIppQGYgEGWgcItp4MYgEGWgcIqqIMYgEGYgBiHmocMEtCCQjSlgYQ1/CgMEIJCMKTBhDXu4gwWI+cPWIS0mcPCg0I0awHEHpImgFo1rMHYgIqAGINgnwKGggIAUD2nAZIAnCFnQE=" } }, - "currency_wars_commands": [], "dressed_skins": {}, "enable_aha_global": true, "enable_castorice_global": true, @@ -27,7 +39,7 @@ "2": 1313, "3": 1414 }, - "main_character": "MaleElation", + "main_character": "MaleRemembrance", "march_type": "MarchHunt", "player_outfits": [ 1013, @@ -35,10 +47,10 @@ 4001 ], "position": { - "rot_y": 0, - "x": -998, - "y": 96401, - "z": 152165 + "rot_y": 270000, + "x": 57408, + "y": 678, + "z": 753626 }, "profile": { "display_avatars": [ @@ -67,9 +79,9 @@ "signature": "test" }, "scene": { - "entry_id": 2032202, - "floor_id": 20322001, - "plane_id": 20322 + "entry_id": 2057102, + "floor_id": 20571001, + "plane_id": 20571 }, "scene_group_properties": { "20571001": { @@ -177,7 +189,7 @@ } }, "technique_food_stock": { - "400006": 93, + "400006": 100, "401033": 100, "402029": 100, "408002": 100, diff --git a/protocol/proto/ungrouped.pb.go b/protocol/proto/ungrouped.pb.go new file mode 100644 index 0000000..68d4c3d --- /dev/null +++ b/protocol/proto/ungrouped.pb.go @@ -0,0 +1,4269 @@ +// Additional game protocol schemas missing from the repository base file. +// Extracted from the user-supplied Ungrouped.proto; that file has no revision marker. +// CmdID routing is intentionally not inferred from this schema-only source. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc v7.36.2 +// source: protocol/proto/ungrouped.proto + +package proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GGLMGBPOCOP int32 + +const ( + GGLMGBPOCOP_GGLMGBPOCOP_BMKFIMEJPOM GGLMGBPOCOP = 0 + GGLMGBPOCOP_GGLMGBPOCOP_MLOGJAKGHHD GGLMGBPOCOP = 1 + GGLMGBPOCOP_GGLMGBPOCOP_ILMKHLENPNI GGLMGBPOCOP = 2 +) + +// Enum value maps for GGLMGBPOCOP. +var ( + GGLMGBPOCOP_name = map[int32]string{ + 0: "GGLMGBPOCOP_BMKFIMEJPOM", + 1: "GGLMGBPOCOP_MLOGJAKGHHD", + 2: "GGLMGBPOCOP_ILMKHLENPNI", + } + GGLMGBPOCOP_value = map[string]int32{ + "GGLMGBPOCOP_BMKFIMEJPOM": 0, + "GGLMGBPOCOP_MLOGJAKGHHD": 1, + "GGLMGBPOCOP_ILMKHLENPNI": 2, + } +) + +func (x GGLMGBPOCOP) Enum() *GGLMGBPOCOP { + p := new(GGLMGBPOCOP) + *p = x + return p +} + +func (x GGLMGBPOCOP) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GGLMGBPOCOP) Descriptor() protoreflect.EnumDescriptor { + return file_protocol_proto_ungrouped_proto_enumTypes[0].Descriptor() +} + +func (GGLMGBPOCOP) Type() protoreflect.EnumType { + return &file_protocol_proto_ungrouped_proto_enumTypes[0] +} + +func (x GGLMGBPOCOP) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GGLMGBPOCOP.Descriptor instead. +func (GGLMGBPOCOP) EnumDescriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{0} +} + +// This shared key/value structure was imported as Common.proto in the supplied bundle. +// It is included here because that dependency was not included. +type KVP struct { + state protoimpl.MessageState `protogen:"open.v1"` + Value uint32 `protobuf:"varint,3,opt,name=value,proto3" json:"value,omitempty"` // offset: 28 + Key uint32 `protobuf:"varint,9,opt,name=key,proto3" json:"key,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *KVP) Reset() { + *x = KVP{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *KVP) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KVP) ProtoMessage() {} + +func (x *KVP) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KVP.ProtoReflect.Descriptor instead. +func (*KVP) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{0} +} + +func (x *KVP) GetValue() uint32 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *KVP) GetKey() uint32 { + if x != nil { + return x.Key + } + return 0 +} + +type B51RacingAgendaInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Day uint32 `protobuf:"varint,2,opt,name=day,proto3" json:"day,omitempty"` // offset: 40 + Match *B51RacingMatchInfo `protobuf:"bytes,6,opt,name=match,proto3" json:"match,omitempty"` // offset: 32 + Development *B51RacingDevelopmentInfo `protobuf:"bytes,11,opt,name=development,proto3" json:"development,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingAgendaInfo) Reset() { + *x = B51RacingAgendaInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingAgendaInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingAgendaInfo) ProtoMessage() {} + +func (x *B51RacingAgendaInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingAgendaInfo.ProtoReflect.Descriptor instead. +func (*B51RacingAgendaInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{1} +} + +func (x *B51RacingAgendaInfo) GetDay() uint32 { + if x != nil { + return x.Day + } + return 0 +} + +func (x *B51RacingAgendaInfo) GetMatch() *B51RacingMatchInfo { + if x != nil { + return x.Match + } + return nil +} + +func (x *B51RacingAgendaInfo) GetDevelopment() *B51RacingDevelopmentInfo { + if x != nil { + return x.Development + } + return nil +} + +type B51RacingCarDisplay struct { + state protoimpl.MessageState `protogen:"open.v1"` + EquippedPartIdList []uint32 `protobuf:"varint,3,rep,packed,name=equipped_part_id_list,json=equippedPartIdList,proto3" json:"equipped_part_id_list,omitempty"` // offset: 16 + CarId uint32 `protobuf:"varint,4,opt,name=car_id,json=carId,proto3" json:"car_id,omitempty"` // offset: 32 + CarNum uint32 `protobuf:"varint,6,opt,name=car_num,json=carNum,proto3" json:"car_num,omitempty"` // offset: 36 + PaintId uint32 `protobuf:"varint,12,opt,name=paint_id,json=paintId,proto3" json:"paint_id,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingCarDisplay) Reset() { + *x = B51RacingCarDisplay{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingCarDisplay) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingCarDisplay) ProtoMessage() {} + +func (x *B51RacingCarDisplay) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingCarDisplay.ProtoReflect.Descriptor instead. +func (*B51RacingCarDisplay) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{2} +} + +func (x *B51RacingCarDisplay) GetEquippedPartIdList() []uint32 { + if x != nil { + return x.EquippedPartIdList + } + return nil +} + +func (x *B51RacingCarDisplay) GetCarId() uint32 { + if x != nil { + return x.CarId + } + return 0 +} + +func (x *B51RacingCarDisplay) GetCarNum() uint32 { + if x != nil { + return x.CarNum + } + return 0 +} + +func (x *B51RacingCarDisplay) GetPaintId() uint32 { + if x != nil { + return x.PaintId + } + return 0 +} + +type B51RacingCarLivery struct { + state protoimpl.MessageState `protogen:"open.v1"` + CarNum uint32 `protobuf:"varint,1,opt,name=car_num,json=carNum,proto3" json:"car_num,omitempty"` // offset: 28 + PaintId uint32 `protobuf:"varint,3,opt,name=paint_id,json=paintId,proto3" json:"paint_id,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingCarLivery) Reset() { + *x = B51RacingCarLivery{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingCarLivery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingCarLivery) ProtoMessage() {} + +func (x *B51RacingCarLivery) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingCarLivery.ProtoReflect.Descriptor instead. +func (*B51RacingCarLivery) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{3} +} + +func (x *B51RacingCarLivery) GetCarNum() uint32 { + if x != nil { + return x.CarNum + } + return 0 +} + +func (x *B51RacingCarLivery) GetPaintId() uint32 { + if x != nil { + return x.PaintId + } + return 0 +} + +type B51RacingCarLiveryCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Livery *B51RacingCarLivery `protobuf:"bytes,9,opt,name=livery,proto3" json:"livery,omitempty"` // offset: 16 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingCarLiveryCsReq) Reset() { + *x = B51RacingCarLiveryCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingCarLiveryCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingCarLiveryCsReq) ProtoMessage() {} + +func (x *B51RacingCarLiveryCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingCarLiveryCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingCarLiveryCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{4} +} + +func (x *B51RacingCarLiveryCsReq) GetLivery() *B51RacingCarLivery { + if x != nil { + return x.Livery + } + return nil +} + +type B51RacingCarLiveryScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Livery *B51RacingCarLivery `protobuf:"bytes,5,opt,name=livery,proto3" json:"livery,omitempty"` // offset: 16 + Retcode uint32 `protobuf:"varint,10,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingCarLiveryScRsp) Reset() { + *x = B51RacingCarLiveryScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingCarLiveryScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingCarLiveryScRsp) ProtoMessage() {} + +func (x *B51RacingCarLiveryScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingCarLiveryScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingCarLiveryScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{5} +} + +func (x *B51RacingCarLiveryScRsp) GetLivery() *B51RacingCarLivery { + if x != nil { + return x.Livery + } + return nil +} + +func (x *B51RacingCarLiveryScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type B51RacingChallengeCarData struct { + state protoimpl.MessageState `protogen:"open.v1"` + CycleId uint32 `protobuf:"varint,10,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` // offset: 40 + EquippedPartIdList []uint32 `protobuf:"varint,13,rep,packed,name=equipped_part_id_list,json=equippedPartIdList,proto3" json:"equipped_part_id_list,omitempty"` // offset: 24 + Livery *B51RacingCarLivery `protobuf:"bytes,15,opt,name=livery,proto3" json:"livery,omitempty"` // offset: 16 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeCarData) Reset() { + *x = B51RacingChallengeCarData{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeCarData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeCarData) ProtoMessage() {} + +func (x *B51RacingChallengeCarData) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeCarData.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeCarData) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{6} +} + +func (x *B51RacingChallengeCarData) GetCycleId() uint32 { + if x != nil { + return x.CycleId + } + return 0 +} + +func (x *B51RacingChallengeCarData) GetEquippedPartIdList() []uint32 { + if x != nil { + return x.EquippedPartIdList + } + return nil +} + +func (x *B51RacingChallengeCarData) GetLivery() *B51RacingCarLivery { + if x != nil { + return x.Livery + } + return nil +} + +type B51RacingChallengeData struct { + state protoimpl.MessageState `protogen:"open.v1"` + DriverId uint32 `protobuf:"varint,1,opt,name=driver_id,json=driverId,proto3" json:"driver_id,omitempty"` // offset: 40 + TeamPointList []*KVP `protobuf:"bytes,13,rep,name=team_point_list,json=teamPointList,proto3" json:"team_point_list,omitempty"` // offset: 24 + Car *B51RacingChallengeCarData `protobuf:"bytes,14,opt,name=car,proto3" json:"car,omitempty"` // offset: 16 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeData) Reset() { + *x = B51RacingChallengeData{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeData) ProtoMessage() {} + +func (x *B51RacingChallengeData) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeData.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeData) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{7} +} + +func (x *B51RacingChallengeData) GetDriverId() uint32 { + if x != nil { + return x.DriverId + } + return 0 +} + +func (x *B51RacingChallengeData) GetTeamPointList() []*KVP { + if x != nil { + return x.TeamPointList + } + return nil +} + +func (x *B51RacingChallengeData) GetCar() *B51RacingChallengeCarData { + if x != nil { + return x.Car + } + return nil +} + +type B51RacingChallengeEndMatchCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + MatchId uint32 `protobuf:"varint,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // offset: 44 + Stats *B51RacingMatchStats `protobuf:"bytes,2,opt,name=stats,proto3" json:"stats,omitempty"` // offset: 16 + Rank uint32 `protobuf:"varint,7,opt,name=rank,proto3" json:"rank,omitempty"` // offset: 36 + RandomSeed uint32 `protobuf:"varint,9,opt,name=random_seed,json=randomSeed,proto3" json:"random_seed,omitempty"` // offset: 32 + ResultType HPICFNLLMCO `protobuf:"varint,11,opt,name=result_type,json=resultType,proto3,enum=HPICFNLLMCO" json:"result_type,omitempty"` // offset: 52 + FinishTimeMs uint32 `protobuf:"varint,13,opt,name=finish_time_ms,json=finishTimeMs,proto3" json:"finish_time_ms,omitempty"` // offset: 48 + TrackId uint32 `protobuf:"varint,14,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeEndMatchCsReq) Reset() { + *x = B51RacingChallengeEndMatchCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeEndMatchCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeEndMatchCsReq) ProtoMessage() {} + +func (x *B51RacingChallengeEndMatchCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeEndMatchCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeEndMatchCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{8} +} + +func (x *B51RacingChallengeEndMatchCsReq) GetMatchId() uint32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *B51RacingChallengeEndMatchCsReq) GetStats() *B51RacingMatchStats { + if x != nil { + return x.Stats + } + return nil +} + +func (x *B51RacingChallengeEndMatchCsReq) GetRank() uint32 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *B51RacingChallengeEndMatchCsReq) GetRandomSeed() uint32 { + if x != nil { + return x.RandomSeed + } + return 0 +} + +func (x *B51RacingChallengeEndMatchCsReq) GetResultType() HPICFNLLMCO { + if x != nil { + return x.ResultType + } + return HPICFNLLMCO_HPICFNLLMCO_NLCDGIPGFDJ +} + +func (x *B51RacingChallengeEndMatchCsReq) GetFinishTimeMs() uint32 { + if x != nil { + return x.FinishTimeMs + } + return 0 +} + +func (x *B51RacingChallengeEndMatchCsReq) GetTrackId() uint32 { + if x != nil { + return x.TrackId + } + return 0 +} + +type B51RacingChallengeEndMatchScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + MatchId uint32 `protobuf:"varint,7,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // offset: 32 + TrackId uint32 `protobuf:"varint,10,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // offset: 24 + Retcode uint32 `protobuf:"varint,11,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 36 + Score uint32 `protobuf:"varint,13,opt,name=score,proto3" json:"score,omitempty"` // offset: 28 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeEndMatchScRsp) Reset() { + *x = B51RacingChallengeEndMatchScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeEndMatchScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeEndMatchScRsp) ProtoMessage() {} + +func (x *B51RacingChallengeEndMatchScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeEndMatchScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeEndMatchScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{9} +} + +func (x *B51RacingChallengeEndMatchScRsp) GetMatchId() uint32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *B51RacingChallengeEndMatchScRsp) GetTrackId() uint32 { + if x != nil { + return x.TrackId + } + return 0 +} + +func (x *B51RacingChallengeEndMatchScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *B51RacingChallengeEndMatchScRsp) GetScore() uint32 { + if x != nil { + return x.Score + } + return 0 +} + +type B51RacingChallengeStartMatchCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + TrackId uint32 `protobuf:"varint,4,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // offset: 32 + MatchId uint32 `protobuf:"varint,9,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // offset: 24 + DriverId uint32 `protobuf:"varint,12,opt,name=driver_id,json=driverId,proto3" json:"driver_id,omitempty"` // offset: 28 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeStartMatchCsReq) Reset() { + *x = B51RacingChallengeStartMatchCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeStartMatchCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeStartMatchCsReq) ProtoMessage() {} + +func (x *B51RacingChallengeStartMatchCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeStartMatchCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeStartMatchCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{10} +} + +func (x *B51RacingChallengeStartMatchCsReq) GetTrackId() uint32 { + if x != nil { + return x.TrackId + } + return 0 +} + +func (x *B51RacingChallengeStartMatchCsReq) GetMatchId() uint32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *B51RacingChallengeStartMatchCsReq) GetDriverId() uint32 { + if x != nil { + return x.DriverId + } + return 0 +} + +type B51RacingChallengeStartMatchScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + RandomSeed uint32 `protobuf:"varint,3,opt,name=random_seed,json=randomSeed,proto3" json:"random_seed,omitempty"` // offset: 28 + DriverId uint32 `protobuf:"varint,11,opt,name=driver_id,json=driverId,proto3" json:"driver_id,omitempty"` // offset: 24 + Retcode uint32 `protobuf:"varint,12,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeStartMatchScRsp) Reset() { + *x = B51RacingChallengeStartMatchScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeStartMatchScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeStartMatchScRsp) ProtoMessage() {} + +func (x *B51RacingChallengeStartMatchScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeStartMatchScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeStartMatchScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{11} +} + +func (x *B51RacingChallengeStartMatchScRsp) GetRandomSeed() uint32 { + if x != nil { + return x.RandomSeed + } + return 0 +} + +func (x *B51RacingChallengeStartMatchScRsp) GetDriverId() uint32 { + if x != nil { + return x.DriverId + } + return 0 +} + +func (x *B51RacingChallengeStartMatchScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type B51RacingChallengeUpdateCarCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + EquippedPartIdList []uint32 `protobuf:"varint,3,rep,packed,name=equipped_part_id_list,json=equippedPartIdList,proto3" json:"equipped_part_id_list,omitempty"` // offset: 32 + CycleId uint32 `protobuf:"varint,11,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` // offset: 40 + Livery *B51RacingCarLivery `protobuf:"bytes,12,opt,name=livery,proto3" json:"livery,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeUpdateCarCsReq) Reset() { + *x = B51RacingChallengeUpdateCarCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeUpdateCarCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeUpdateCarCsReq) ProtoMessage() {} + +func (x *B51RacingChallengeUpdateCarCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeUpdateCarCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeUpdateCarCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{12} +} + +func (x *B51RacingChallengeUpdateCarCsReq) GetEquippedPartIdList() []uint32 { + if x != nil { + return x.EquippedPartIdList + } + return nil +} + +func (x *B51RacingChallengeUpdateCarCsReq) GetCycleId() uint32 { + if x != nil { + return x.CycleId + } + return 0 +} + +func (x *B51RacingChallengeUpdateCarCsReq) GetLivery() *B51RacingCarLivery { + if x != nil { + return x.Livery + } + return nil +} + +type B51RacingChallengeUpdateCarScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Retcode uint32 `protobuf:"varint,5,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + Car *B51RacingChallengeCarData `protobuf:"bytes,15,opt,name=car,proto3" json:"car,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingChallengeUpdateCarScRsp) Reset() { + *x = B51RacingChallengeUpdateCarScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingChallengeUpdateCarScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingChallengeUpdateCarScRsp) ProtoMessage() {} + +func (x *B51RacingChallengeUpdateCarScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingChallengeUpdateCarScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingChallengeUpdateCarScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{13} +} + +func (x *B51RacingChallengeUpdateCarScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *B51RacingChallengeUpdateCarScRsp) GetCar() *B51RacingChallengeCarData { + if x != nil { + return x.Car + } + return nil +} + +type B51RacingCycleData struct { + state protoimpl.MessageState `protogen:"open.v1"` + CarId uint32 `protobuf:"varint,2,opt,name=car_id,json=carId,proto3" json:"car_id,omitempty"` // offset: 76 + FinishedMatchNum uint32 `protobuf:"varint,3,opt,name=finished_match_num,json=finishedMatchNum,proto3" json:"finished_match_num,omitempty"` // offset: 64 + PartInfo *B51RacingPartInfo `protobuf:"bytes,4,opt,name=part_info,json=partInfo,proto3" json:"part_info,omitempty"` // offset: 16 + StatInfo *B51RacingStatInfo `protobuf:"bytes,6,opt,name=stat_info,json=statInfo,proto3" json:"stat_info,omitempty"` // offset: 32 + Agenda *B51RacingAgendaInfo `protobuf:"bytes,7,opt,name=agenda,proto3" json:"agenda,omitempty"` // offset: 48 + Livery *B51RacingCarLivery `protobuf:"bytes,10,opt,name=livery,proto3" json:"livery,omitempty"` // offset: 56 + DriverId uint32 `protobuf:"varint,11,opt,name=driver_id,json=driverId,proto3" json:"driver_id,omitempty"` // offset: 68 + CycleId uint32 `protobuf:"varint,12,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` // offset: 72 + PreMatchTrackInfoList []*B51RacingPreMatchTrackInfo `protobuf:"bytes,13,rep,name=pre_match_track_info_list,json=preMatchTrackInfoList,proto3" json:"pre_match_track_info_list,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingCycleData) Reset() { + *x = B51RacingCycleData{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingCycleData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingCycleData) ProtoMessage() {} + +func (x *B51RacingCycleData) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingCycleData.ProtoReflect.Descriptor instead. +func (*B51RacingCycleData) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{14} +} + +func (x *B51RacingCycleData) GetCarId() uint32 { + if x != nil { + return x.CarId + } + return 0 +} + +func (x *B51RacingCycleData) GetFinishedMatchNum() uint32 { + if x != nil { + return x.FinishedMatchNum + } + return 0 +} + +func (x *B51RacingCycleData) GetPartInfo() *B51RacingPartInfo { + if x != nil { + return x.PartInfo + } + return nil +} + +func (x *B51RacingCycleData) GetStatInfo() *B51RacingStatInfo { + if x != nil { + return x.StatInfo + } + return nil +} + +func (x *B51RacingCycleData) GetAgenda() *B51RacingAgendaInfo { + if x != nil { + return x.Agenda + } + return nil +} + +func (x *B51RacingCycleData) GetLivery() *B51RacingCarLivery { + if x != nil { + return x.Livery + } + return nil +} + +func (x *B51RacingCycleData) GetDriverId() uint32 { + if x != nil { + return x.DriverId + } + return 0 +} + +func (x *B51RacingCycleData) GetCycleId() uint32 { + if x != nil { + return x.CycleId + } + return 0 +} + +func (x *B51RacingCycleData) GetPreMatchTrackInfoList() []*B51RacingPreMatchTrackInfo { + if x != nil { + return x.PreMatchTrackInfoList + } + return nil +} + +type B51RacingDevelopmentInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + ActivePartIdList []uint32 `protobuf:"varint,4,rep,packed,name=active_part_id_list,json=activePartIdList,proto3" json:"active_part_id_list,omitempty"` // offset: 24 + ActiveActionIdList []uint32 `protobuf:"varint,6,rep,packed,name=active_action_id_list,json=activeActionIdList,proto3" json:"active_action_id_list,omitempty"` // offset: 32 + FinishedActionNum uint32 `protobuf:"varint,10,opt,name=finished_action_num,json=finishedActionNum,proto3" json:"finished_action_num,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingDevelopmentInfo) Reset() { + *x = B51RacingDevelopmentInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingDevelopmentInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingDevelopmentInfo) ProtoMessage() {} + +func (x *B51RacingDevelopmentInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingDevelopmentInfo.ProtoReflect.Descriptor instead. +func (*B51RacingDevelopmentInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{15} +} + +func (x *B51RacingDevelopmentInfo) GetActivePartIdList() []uint32 { + if x != nil { + return x.ActivePartIdList + } + return nil +} + +func (x *B51RacingDevelopmentInfo) GetActiveActionIdList() []uint32 { + if x != nil { + return x.ActiveActionIdList + } + return nil +} + +func (x *B51RacingDevelopmentInfo) GetFinishedActionNum() uint32 { + if x != nil { + return x.FinishedActionNum + } + return 0 +} + +type B51RacingDriverUnlockScNotify struct { + state protoimpl.MessageState `protogen:"open.v1"` + DriverIdList []uint32 `protobuf:"varint,10,rep,packed,name=driver_id_list,json=driverIdList,proto3" json:"driver_id_list,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingDriverUnlockScNotify) Reset() { + *x = B51RacingDriverUnlockScNotify{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingDriverUnlockScNotify) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingDriverUnlockScNotify) ProtoMessage() {} + +func (x *B51RacingDriverUnlockScNotify) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingDriverUnlockScNotify.ProtoReflect.Descriptor instead. +func (*B51RacingDriverUnlockScNotify) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{16} +} + +func (x *B51RacingDriverUnlockScNotify) GetDriverIdList() []uint32 { + if x != nil { + return x.DriverIdList + } + return nil +} + +type B51RacingEndMatchCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Stats *B51RacingMatchStats `protobuf:"bytes,2,opt,name=stats,proto3" json:"stats,omitempty"` // offset: 24 + RandomSeed uint32 `protobuf:"varint,7,opt,name=random_seed,json=randomSeed,proto3" json:"random_seed,omitempty"` // offset: 48 + ResultType HPICFNLLMCO `protobuf:"varint,8,opt,name=result_type,json=resultType,proto3,enum=HPICFNLLMCO" json:"result_type,omitempty"` // offset: 32 + TrackId uint32 `protobuf:"varint,10,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // offset: 40 + FinishTimeMs uint32 `protobuf:"varint,11,opt,name=finish_time_ms,json=finishTimeMs,proto3" json:"finish_time_ms,omitempty"` // offset: 36 + Rank uint32 `protobuf:"varint,15,opt,name=rank,proto3" json:"rank,omitempty"` // offset: 44 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingEndMatchCsReq) Reset() { + *x = B51RacingEndMatchCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingEndMatchCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingEndMatchCsReq) ProtoMessage() {} + +func (x *B51RacingEndMatchCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingEndMatchCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingEndMatchCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{17} +} + +func (x *B51RacingEndMatchCsReq) GetStats() *B51RacingMatchStats { + if x != nil { + return x.Stats + } + return nil +} + +func (x *B51RacingEndMatchCsReq) GetRandomSeed() uint32 { + if x != nil { + return x.RandomSeed + } + return 0 +} + +func (x *B51RacingEndMatchCsReq) GetResultType() HPICFNLLMCO { + if x != nil { + return x.ResultType + } + return HPICFNLLMCO_HPICFNLLMCO_NLCDGIPGFDJ +} + +func (x *B51RacingEndMatchCsReq) GetTrackId() uint32 { + if x != nil { + return x.TrackId + } + return 0 +} + +func (x *B51RacingEndMatchCsReq) GetFinishTimeMs() uint32 { + if x != nil { + return x.FinishTimeMs + } + return 0 +} + +func (x *B51RacingEndMatchCsReq) GetRank() uint32 { + if x != nil { + return x.Rank + } + return 0 +} + +type B51RacingEndMatchScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + FinishedMatchNum uint32 `protobuf:"varint,3,opt,name=finished_match_num,json=finishedMatchNum,proto3" json:"finished_match_num,omitempty"` // offset: 36 + Agenda *B51RacingAgendaInfo `protobuf:"bytes,5,opt,name=agenda,proto3" json:"agenda,omitempty"` // offset: 24 + Retcode uint32 `protobuf:"varint,8,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + AddedTeamPoint uint32 `protobuf:"varint,10,opt,name=added_team_point,json=addedTeamPoint,proto3" json:"added_team_point,omitempty"` // offset: 40 + IsCycleFinished bool `protobuf:"varint,12,opt,name=is_cycle_finished,json=isCycleFinished,proto3" json:"is_cycle_finished,omitempty"` // offset: 44 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingEndMatchScRsp) Reset() { + *x = B51RacingEndMatchScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingEndMatchScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingEndMatchScRsp) ProtoMessage() {} + +func (x *B51RacingEndMatchScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingEndMatchScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingEndMatchScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{18} +} + +func (x *B51RacingEndMatchScRsp) GetFinishedMatchNum() uint32 { + if x != nil { + return x.FinishedMatchNum + } + return 0 +} + +func (x *B51RacingEndMatchScRsp) GetAgenda() *B51RacingAgendaInfo { + if x != nil { + return x.Agenda + } + return nil +} + +func (x *B51RacingEndMatchScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *B51RacingEndMatchScRsp) GetAddedTeamPoint() uint32 { + if x != nil { + return x.AddedTeamPoint + } + return 0 +} + +func (x *B51RacingEndMatchScRsp) GetIsCycleFinished() bool { + if x != nil { + return x.IsCycleFinished + } + return false +} + +type B51RacingMatchInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + MatchId uint32 `protobuf:"varint,2,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // offset: 32 + RandomSeed uint32 `protobuf:"varint,4,opt,name=random_seed,json=randomSeed,proto3" json:"random_seed,omitempty"` // offset: 28 + TrackId uint32 `protobuf:"varint,6,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // offset: 24 + StartTimeMs uint64 `protobuf:"varint,14,opt,name=start_time_ms,json=startTimeMs,proto3" json:"start_time_ms,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingMatchInfo) Reset() { + *x = B51RacingMatchInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingMatchInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingMatchInfo) ProtoMessage() {} + +func (x *B51RacingMatchInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingMatchInfo.ProtoReflect.Descriptor instead. +func (*B51RacingMatchInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{19} +} + +func (x *B51RacingMatchInfo) GetMatchId() uint32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *B51RacingMatchInfo) GetRandomSeed() uint32 { + if x != nil { + return x.RandomSeed + } + return 0 +} + +func (x *B51RacingMatchInfo) GetTrackId() uint32 { + if x != nil { + return x.TrackId + } + return 0 +} + +func (x *B51RacingMatchInfo) GetStartTimeMs() uint64 { + if x != nil { + return x.StartTimeMs + } + return 0 +} + +type B51RacingMatchStats struct { + state protoimpl.MessageState `protogen:"open.v1"` + ChargeCount uint32 `protobuf:"varint,2,opt,name=charge_count,json=chargeCount,proto3" json:"charge_count,omitempty"` // offset: 44 + LapTimeMs uint32 `protobuf:"varint,6,opt,name=lap_time_ms,json=lapTimeMs,proto3" json:"lap_time_ms,omitempty"` // offset: 36 + OvertakeCount uint32 `protobuf:"varint,7,opt,name=overtake_count,json=overtakeCount,proto3" json:"overtake_count,omitempty"` // offset: 24 + CollisionCount uint32 `protobuf:"varint,9,opt,name=collision_count,json=collisionCount,proto3" json:"collision_count,omitempty"` // offset: 32 + DriftTimeMs uint32 `protobuf:"varint,10,opt,name=drift_time_ms,json=driftTimeMs,proto3" json:"drift_time_ms,omitempty"` // offset: 48 + MaxSpeed uint32 `protobuf:"varint,11,opt,name=max_speed,json=maxSpeed,proto3" json:"max_speed,omitempty"` // offset: 52 + IsPerfect bool `protobuf:"varint,12,opt,name=is_perfect,json=isPerfect,proto3" json:"is_perfect,omitempty"` // offset: 40 + BoostCount uint32 `protobuf:"varint,14,opt,name=boost_count,json=boostCount,proto3" json:"boost_count,omitempty"` // offset: 28 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingMatchStats) Reset() { + *x = B51RacingMatchStats{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingMatchStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingMatchStats) ProtoMessage() {} + +func (x *B51RacingMatchStats) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingMatchStats.ProtoReflect.Descriptor instead. +func (*B51RacingMatchStats) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{20} +} + +func (x *B51RacingMatchStats) GetChargeCount() uint32 { + if x != nil { + return x.ChargeCount + } + return 0 +} + +func (x *B51RacingMatchStats) GetLapTimeMs() uint32 { + if x != nil { + return x.LapTimeMs + } + return 0 +} + +func (x *B51RacingMatchStats) GetOvertakeCount() uint32 { + if x != nil { + return x.OvertakeCount + } + return 0 +} + +func (x *B51RacingMatchStats) GetCollisionCount() uint32 { + if x != nil { + return x.CollisionCount + } + return 0 +} + +func (x *B51RacingMatchStats) GetDriftTimeMs() uint32 { + if x != nil { + return x.DriftTimeMs + } + return 0 +} + +func (x *B51RacingMatchStats) GetMaxSpeed() uint32 { + if x != nil { + return x.MaxSpeed + } + return 0 +} + +func (x *B51RacingMatchStats) GetIsPerfect() bool { + if x != nil { + return x.IsPerfect + } + return false +} + +func (x *B51RacingMatchStats) GetBoostCount() uint32 { + if x != nil { + return x.BoostCount + } + return 0 +} + +type B51RacingMissionChangeAgendaScNotify struct { + state protoimpl.MessageState `protogen:"open.v1"` + Agenda *B51RacingAgendaInfo `protobuf:"bytes,2,opt,name=agenda,proto3" json:"agenda,omitempty"` // offset: 16 + UnlockedDriverIdList []uint32 `protobuf:"varint,6,rep,packed,name=unlocked_driver_id_list,json=unlockedDriverIdList,proto3" json:"unlocked_driver_id_list,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingMissionChangeAgendaScNotify) Reset() { + *x = B51RacingMissionChangeAgendaScNotify{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingMissionChangeAgendaScNotify) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingMissionChangeAgendaScNotify) ProtoMessage() {} + +func (x *B51RacingMissionChangeAgendaScNotify) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingMissionChangeAgendaScNotify.ProtoReflect.Descriptor instead. +func (*B51RacingMissionChangeAgendaScNotify) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{21} +} + +func (x *B51RacingMissionChangeAgendaScNotify) GetAgenda() *B51RacingAgendaInfo { + if x != nil { + return x.Agenda + } + return nil +} + +func (x *B51RacingMissionChangeAgendaScNotify) GetUnlockedDriverIdList() []uint32 { + if x != nil { + return x.UnlockedDriverIdList + } + return nil +} + +type B51RacingPartInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + EquippedPartIdList []uint32 `protobuf:"varint,7,rep,packed,name=equipped_part_id_list,json=equippedPartIdList,proto3" json:"equipped_part_id_list,omitempty"` // offset: 24 + EquippedDecalId uint32 `protobuf:"varint,9,opt,name=equipped_decal_id,json=equippedDecalId,proto3" json:"equipped_decal_id,omitempty"` // offset: 40 + DevelopedPartIdList []uint32 `protobuf:"varint,15,rep,packed,name=developed_part_id_list,json=developedPartIdList,proto3" json:"developed_part_id_list,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingPartInfo) Reset() { + *x = B51RacingPartInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingPartInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingPartInfo) ProtoMessage() {} + +func (x *B51RacingPartInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingPartInfo.ProtoReflect.Descriptor instead. +func (*B51RacingPartInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{22} +} + +func (x *B51RacingPartInfo) GetEquippedPartIdList() []uint32 { + if x != nil { + return x.EquippedPartIdList + } + return nil +} + +func (x *B51RacingPartInfo) GetEquippedDecalId() uint32 { + if x != nil { + return x.EquippedDecalId + } + return 0 +} + +func (x *B51RacingPartInfo) GetDevelopedPartIdList() []uint32 { + if x != nil { + return x.DevelopedPartIdList + } + return nil +} + +type B51RacingPreMatchTrackInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + MatchId uint32 `protobuf:"varint,3,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // offset: 28 + TrackId uint32 `protobuf:"varint,4,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // offset: 24 + Day uint32 `protobuf:"varint,10,opt,name=day,proto3" json:"day,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingPreMatchTrackInfo) Reset() { + *x = B51RacingPreMatchTrackInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingPreMatchTrackInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingPreMatchTrackInfo) ProtoMessage() {} + +func (x *B51RacingPreMatchTrackInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingPreMatchTrackInfo.ProtoReflect.Descriptor instead. +func (*B51RacingPreMatchTrackInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{23} +} + +func (x *B51RacingPreMatchTrackInfo) GetMatchId() uint32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *B51RacingPreMatchTrackInfo) GetTrackId() uint32 { + if x != nil { + return x.TrackId + } + return 0 +} + +func (x *B51RacingPreMatchTrackInfo) GetDay() uint32 { + if x != nil { + return x.Day + } + return 0 +} + +type B51RacingReplacePartScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + PartInfo *B51RacingPartInfo `protobuf:"bytes,11,opt,name=part_info,json=partInfo,proto3" json:"part_info,omitempty"` // offset: 16 + Retcode uint32 `protobuf:"varint,12,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingReplacePartScRsp) Reset() { + *x = B51RacingReplacePartScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingReplacePartScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingReplacePartScRsp) ProtoMessage() {} + +func (x *B51RacingReplacePartScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingReplacePartScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingReplacePartScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{24} +} + +func (x *B51RacingReplacePartScRsp) GetPartInfo() *B51RacingPartInfo { + if x != nil { + return x.PartInfo + } + return nil +} + +func (x *B51RacingReplacePartScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type B51RacingSelectDevelopActionCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + ActionId uint32 `protobuf:"varint,3,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingSelectDevelopActionCsReq) Reset() { + *x = B51RacingSelectDevelopActionCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingSelectDevelopActionCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingSelectDevelopActionCsReq) ProtoMessage() {} + +func (x *B51RacingSelectDevelopActionCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingSelectDevelopActionCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingSelectDevelopActionCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{25} +} + +func (x *B51RacingSelectDevelopActionCsReq) GetActionId() uint32 { + if x != nil { + return x.ActionId + } + return 0 +} + +type B51RacingSelectDevelopActionScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + RemainingActionCount uint32 `protobuf:"varint,1,opt,name=remaining_action_count,json=remainingActionCount,proto3" json:"remaining_action_count,omitempty"` // offset: 48 + IsDevelopmentFinished bool `protobuf:"varint,2,opt,name=is_development_finished,json=isDevelopmentFinished,proto3" json:"is_development_finished,omitempty"` // offset: 56 + StatInfo *B51RacingStatInfo `protobuf:"bytes,4,opt,name=stat_info,json=statInfo,proto3" json:"stat_info,omitempty"` // offset: 24 + Retcode uint32 `protobuf:"varint,6,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 52 + Agenda *B51RacingAgendaInfo `protobuf:"bytes,10,opt,name=agenda,proto3" json:"agenda,omitempty"` // offset: 32 + PartInfo *B51RacingPartInfo `protobuf:"bytes,15,opt,name=part_info,json=partInfo,proto3" json:"part_info,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingSelectDevelopActionScRsp) Reset() { + *x = B51RacingSelectDevelopActionScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingSelectDevelopActionScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingSelectDevelopActionScRsp) ProtoMessage() {} + +func (x *B51RacingSelectDevelopActionScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingSelectDevelopActionScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingSelectDevelopActionScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{26} +} + +func (x *B51RacingSelectDevelopActionScRsp) GetRemainingActionCount() uint32 { + if x != nil { + return x.RemainingActionCount + } + return 0 +} + +func (x *B51RacingSelectDevelopActionScRsp) GetIsDevelopmentFinished() bool { + if x != nil { + return x.IsDevelopmentFinished + } + return false +} + +func (x *B51RacingSelectDevelopActionScRsp) GetStatInfo() *B51RacingStatInfo { + if x != nil { + return x.StatInfo + } + return nil +} + +func (x *B51RacingSelectDevelopActionScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *B51RacingSelectDevelopActionScRsp) GetAgenda() *B51RacingAgendaInfo { + if x != nil { + return x.Agenda + } + return nil +} + +func (x *B51RacingSelectDevelopActionScRsp) GetPartInfo() *B51RacingPartInfo { + if x != nil { + return x.PartInfo + } + return nil +} + +type B51RacingSelectDevelopPartCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + PartId uint32 `protobuf:"varint,14,opt,name=part_id,json=partId,proto3" json:"part_id,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingSelectDevelopPartCsReq) Reset() { + *x = B51RacingSelectDevelopPartCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingSelectDevelopPartCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingSelectDevelopPartCsReq) ProtoMessage() {} + +func (x *B51RacingSelectDevelopPartCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingSelectDevelopPartCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingSelectDevelopPartCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{27} +} + +func (x *B51RacingSelectDevelopPartCsReq) GetPartId() uint32 { + if x != nil { + return x.PartId + } + return 0 +} + +type B51RacingSelectDevelopPartScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + RemainingSelectCount uint32 `protobuf:"varint,4,opt,name=remaining_select_count,json=remainingSelectCount,proto3" json:"remaining_select_count,omitempty"` // offset: 52 + PartInfo *B51RacingPartInfo `protobuf:"bytes,5,opt,name=part_info,json=partInfo,proto3" json:"part_info,omitempty"` // offset: 24 + Agenda *B51RacingAgendaInfo `protobuf:"bytes,7,opt,name=agenda,proto3" json:"agenda,omitempty"` // offset: 32 + Retcode uint32 `protobuf:"varint,11,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 48 + StatInfo *B51RacingStatInfo `protobuf:"bytes,15,opt,name=stat_info,json=statInfo,proto3" json:"stat_info,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingSelectDevelopPartScRsp) Reset() { + *x = B51RacingSelectDevelopPartScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingSelectDevelopPartScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingSelectDevelopPartScRsp) ProtoMessage() {} + +func (x *B51RacingSelectDevelopPartScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingSelectDevelopPartScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingSelectDevelopPartScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{28} +} + +func (x *B51RacingSelectDevelopPartScRsp) GetRemainingSelectCount() uint32 { + if x != nil { + return x.RemainingSelectCount + } + return 0 +} + +func (x *B51RacingSelectDevelopPartScRsp) GetPartInfo() *B51RacingPartInfo { + if x != nil { + return x.PartInfo + } + return nil +} + +func (x *B51RacingSelectDevelopPartScRsp) GetAgenda() *B51RacingAgendaInfo { + if x != nil { + return x.Agenda + } + return nil +} + +func (x *B51RacingSelectDevelopPartScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *B51RacingSelectDevelopPartScRsp) GetStatInfo() *B51RacingStatInfo { + if x != nil { + return x.StatInfo + } + return nil +} + +type B51RacingSetDriverCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + DriverId uint32 `protobuf:"varint,9,opt,name=driver_id,json=driverId,proto3" json:"driver_id,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingSetDriverCsReq) Reset() { + *x = B51RacingSetDriverCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingSetDriverCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingSetDriverCsReq) ProtoMessage() {} + +func (x *B51RacingSetDriverCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingSetDriverCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingSetDriverCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{29} +} + +func (x *B51RacingSetDriverCsReq) GetDriverId() uint32 { + if x != nil { + return x.DriverId + } + return 0 +} + +type B51RacingSetDriverScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Retcode uint32 `protobuf:"varint,3,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 24 + DriverId uint32 `protobuf:"varint,14,opt,name=driver_id,json=driverId,proto3" json:"driver_id,omitempty"` // offset: 28 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingSetDriverScRsp) Reset() { + *x = B51RacingSetDriverScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingSetDriverScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingSetDriverScRsp) ProtoMessage() {} + +func (x *B51RacingSetDriverScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingSetDriverScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingSetDriverScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{30} +} + +func (x *B51RacingSetDriverScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *B51RacingSetDriverScRsp) GetDriverId() uint32 { + if x != nil { + return x.DriverId + } + return 0 +} + +type B51RacingStartCycleCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + CarId uint32 `protobuf:"varint,9,opt,name=car_id,json=carId,proto3" json:"car_id,omitempty"` // offset: 36 + CycleId uint32 `protobuf:"varint,11,opt,name=cycle_id,json=cycleId,proto3" json:"cycle_id,omitempty"` // offset: 32 + Livery *B51RacingCarLivery `protobuf:"bytes,15,opt,name=livery,proto3" json:"livery,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingStartCycleCsReq) Reset() { + *x = B51RacingStartCycleCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingStartCycleCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingStartCycleCsReq) ProtoMessage() {} + +func (x *B51RacingStartCycleCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingStartCycleCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingStartCycleCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{31} +} + +func (x *B51RacingStartCycleCsReq) GetCarId() uint32 { + if x != nil { + return x.CarId + } + return 0 +} + +func (x *B51RacingStartCycleCsReq) GetCycleId() uint32 { + if x != nil { + return x.CycleId + } + return 0 +} + +func (x *B51RacingStartCycleCsReq) GetLivery() *B51RacingCarLivery { + if x != nil { + return x.Livery + } + return nil +} + +type B51RacingStartCycleScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Cycle *B51RacingCycleData `protobuf:"bytes,2,opt,name=cycle,proto3" json:"cycle,omitempty"` // offset: 16 + Retcode uint32 `protobuf:"varint,9,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingStartCycleScRsp) Reset() { + *x = B51RacingStartCycleScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingStartCycleScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingStartCycleScRsp) ProtoMessage() {} + +func (x *B51RacingStartCycleScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingStartCycleScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingStartCycleScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{32} +} + +func (x *B51RacingStartCycleScRsp) GetCycle() *B51RacingCycleData { + if x != nil { + return x.Cycle + } + return nil +} + +func (x *B51RacingStartCycleScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type B51RacingStartMatchCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + MatchId uint32 `protobuf:"varint,13,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` // offset: 24 + TrackId uint32 `protobuf:"varint,15,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // offset: 28 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingStartMatchCsReq) Reset() { + *x = B51RacingStartMatchCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingStartMatchCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingStartMatchCsReq) ProtoMessage() {} + +func (x *B51RacingStartMatchCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingStartMatchCsReq.ProtoReflect.Descriptor instead. +func (*B51RacingStartMatchCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{33} +} + +func (x *B51RacingStartMatchCsReq) GetMatchId() uint32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *B51RacingStartMatchCsReq) GetTrackId() uint32 { + if x != nil { + return x.TrackId + } + return 0 +} + +type B51RacingStartMatchScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Match *B51RacingMatchInfo `protobuf:"bytes,9,opt,name=match,proto3" json:"match,omitempty"` // offset: 16 + Retcode uint32 `protobuf:"varint,11,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingStartMatchScRsp) Reset() { + *x = B51RacingStartMatchScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingStartMatchScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingStartMatchScRsp) ProtoMessage() {} + +func (x *B51RacingStartMatchScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingStartMatchScRsp.ProtoReflect.Descriptor instead. +func (*B51RacingStartMatchScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{34} +} + +func (x *B51RacingStartMatchScRsp) GetMatch() *B51RacingMatchInfo { + if x != nil { + return x.Match + } + return nil +} + +func (x *B51RacingStartMatchScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type B51RacingStatInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + StatValueList []*KVP `protobuf:"bytes,6,rep,name=stat_value_list,json=statValueList,proto3" json:"stat_value_list,omitempty"` // offset: 24 + TargetStatTierList []*KVP `protobuf:"bytes,13,rep,name=target_stat_tier_list,json=targetStatTierList,proto3" json:"target_stat_tier_list,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *B51RacingStatInfo) Reset() { + *x = B51RacingStatInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *B51RacingStatInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*B51RacingStatInfo) ProtoMessage() {} + +func (x *B51RacingStatInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use B51RacingStatInfo.ProtoReflect.Descriptor instead. +func (*B51RacingStatInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{35} +} + +func (x *B51RacingStatInfo) GetStatValueList() []*KVP { + if x != nil { + return x.StatValueList + } + return nil +} + +func (x *B51RacingStatInfo) GetTargetStatTierList() []*KVP { + if x != nil { + return x.TargetStatTierList + } + return nil +} + +type BlindBoxResetPoolPositionCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + PoolId uint32 `protobuf:"varint,12,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlindBoxResetPoolPositionCsReq) Reset() { + *x = BlindBoxResetPoolPositionCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlindBoxResetPoolPositionCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlindBoxResetPoolPositionCsReq) ProtoMessage() {} + +func (x *BlindBoxResetPoolPositionCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlindBoxResetPoolPositionCsReq.ProtoReflect.Descriptor instead. +func (*BlindBoxResetPoolPositionCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{36} +} + +func (x *BlindBoxResetPoolPositionCsReq) GetPoolId() uint32 { + if x != nil { + return x.PoolId + } + return 0 +} + +type BlindBoxResetPoolPositionScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Retcode uint32 `protobuf:"varint,1,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 24 + PoolId uint32 `protobuf:"varint,7,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` // offset: 28 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlindBoxResetPoolPositionScRsp) Reset() { + *x = BlindBoxResetPoolPositionScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlindBoxResetPoolPositionScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlindBoxResetPoolPositionScRsp) ProtoMessage() {} + +func (x *BlindBoxResetPoolPositionScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlindBoxResetPoolPositionScRsp.ProtoReflect.Descriptor instead. +func (*BlindBoxResetPoolPositionScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{37} +} + +func (x *BlindBoxResetPoolPositionScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *BlindBoxResetPoolPositionScRsp) GetPoolId() uint32 { + if x != nil { + return x.PoolId + } + return 0 +} + +type CHNMJPLALEC struct { + state protoimpl.MessageState `protogen:"open.v1"` + Retcode uint32 `protobuf:"varint,3,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 24 + MJNENEAAOAE uint64 `protobuf:"varint,5,opt,name=MJNENEAAOAE,proto3" json:"MJNENEAAOAE,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CHNMJPLALEC) Reset() { + *x = CHNMJPLALEC{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CHNMJPLALEC) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CHNMJPLALEC) ProtoMessage() {} + +func (x *CHNMJPLALEC) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CHNMJPLALEC.ProtoReflect.Descriptor instead. +func (*CHNMJPLALEC) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{38} +} + +func (x *CHNMJPLALEC) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *CHNMJPLALEC) GetMJNENEAAOAE() uint64 { + if x != nil { + return x.MJNENEAAOAE + } + return 0 +} + +type ExpeditionBattleAvatarDamage struct { + state protoimpl.MessageState `protogen:"open.v1"` + AvatarId uint32 `protobuf:"varint,11,opt,name=avatar_id,json=avatarId,proto3" json:"avatar_id,omitempty"` // offset: 24 + Damage uint64 `protobuf:"varint,14,opt,name=damage,proto3" json:"damage,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleAvatarDamage) Reset() { + *x = ExpeditionBattleAvatarDamage{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleAvatarDamage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleAvatarDamage) ProtoMessage() {} + +func (x *ExpeditionBattleAvatarDamage) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleAvatarDamage.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleAvatarDamage) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{39} +} + +func (x *ExpeditionBattleAvatarDamage) GetAvatarId() uint32 { + if x != nil { + return x.AvatarId + } + return 0 +} + +func (x *ExpeditionBattleAvatarDamage) GetDamage() uint64 { + if x != nil { + return x.Damage + } + return 0 +} + +type ExpeditionBattleAvatarInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + AvatarType AvatarType `protobuf:"varint,9,opt,name=avatar_type,json=avatarType,proto3,enum=AvatarType" json:"avatar_type,omitempty"` // offset: 28 + AvatarId uint32 `protobuf:"varint,12,opt,name=avatar_id,json=avatarId,proto3" json:"avatar_id,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleAvatarInfo) Reset() { + *x = ExpeditionBattleAvatarInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleAvatarInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleAvatarInfo) ProtoMessage() {} + +func (x *ExpeditionBattleAvatarInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleAvatarInfo.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleAvatarInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{40} +} + +func (x *ExpeditionBattleAvatarInfo) GetAvatarType() AvatarType { + if x != nil { + return x.AvatarType + } + return AvatarType_AvatarType_None +} + +func (x *ExpeditionBattleAvatarInfo) GetAvatarId() uint32 { + if x != nil { + return x.AvatarId + } + return 0 +} + +type ExpeditionBattleEndScNotify struct { + state protoimpl.MessageState `protogen:"open.v1"` + MapData *ExpeditionBattleMapData `protobuf:"bytes,7,opt,name=map_data,json=mapData,proto3" json:"map_data,omitempty"` // offset: 16 + IsNewRecord bool `protobuf:"varint,12,opt,name=is_new_record,json=isNewRecord,proto3" json:"is_new_record,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleEndScNotify) Reset() { + *x = ExpeditionBattleEndScNotify{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleEndScNotify) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleEndScNotify) ProtoMessage() {} + +func (x *ExpeditionBattleEndScNotify) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleEndScNotify.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleEndScNotify) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{41} +} + +func (x *ExpeditionBattleEndScNotify) GetMapData() *ExpeditionBattleMapData { + if x != nil { + return x.MapData + } + return nil +} + +func (x *ExpeditionBattleEndScNotify) GetIsNewRecord() bool { + if x != nil { + return x.IsNewRecord + } + return false +} + +type ExpeditionBattleFunRecord struct { + state protoimpl.MessageState `protogen:"open.v1"` + FunId uint32 `protobuf:"varint,2,opt,name=fun_id,json=funId,proto3" json:"fun_id,omitempty"` // offset: 24 + AvatarId uint32 `protobuf:"varint,7,opt,name=avatar_id,json=avatarId,proto3" json:"avatar_id,omitempty"` // offset: 28 + FunCount uint64 `protobuf:"varint,9,opt,name=fun_count,json=funCount,proto3" json:"fun_count,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleFunRecord) Reset() { + *x = ExpeditionBattleFunRecord{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleFunRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleFunRecord) ProtoMessage() {} + +func (x *ExpeditionBattleFunRecord) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleFunRecord.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleFunRecord) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{42} +} + +func (x *ExpeditionBattleFunRecord) GetFunId() uint32 { + if x != nil { + return x.FunId + } + return 0 +} + +func (x *ExpeditionBattleFunRecord) GetAvatarId() uint32 { + if x != nil { + return x.AvatarId + } + return 0 +} + +func (x *ExpeditionBattleFunRecord) GetFunCount() uint64 { + if x != nil { + return x.FunCount + } + return 0 +} + +type ExpeditionBattleLevelRecord struct { + state protoimpl.MessageState `protogen:"open.v1"` + LevelId uint32 `protobuf:"varint,2,opt,name=level_id,json=levelId,proto3" json:"level_id,omitempty"` // offset: 40 + AvatarDamageList []*ExpeditionBattleAvatarDamage `protobuf:"bytes,7,rep,name=avatar_damage_list,json=avatarDamageList,proto3" json:"avatar_damage_list,omitempty"` // offset: 16 + DeadAvatarIdList []uint32 `protobuf:"varint,8,rep,packed,name=dead_avatar_id_list,json=deadAvatarIdList,proto3" json:"dead_avatar_id_list,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleLevelRecord) Reset() { + *x = ExpeditionBattleLevelRecord{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleLevelRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleLevelRecord) ProtoMessage() {} + +func (x *ExpeditionBattleLevelRecord) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleLevelRecord.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleLevelRecord) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{43} +} + +func (x *ExpeditionBattleLevelRecord) GetLevelId() uint32 { + if x != nil { + return x.LevelId + } + return 0 +} + +func (x *ExpeditionBattleLevelRecord) GetAvatarDamageList() []*ExpeditionBattleAvatarDamage { + if x != nil { + return x.AvatarDamageList + } + return nil +} + +func (x *ExpeditionBattleLevelRecord) GetDeadAvatarIdList() []uint32 { + if x != nil { + return x.DeadAvatarIdList + } + return nil +} + +type ExpeditionBattleLineup struct { + state protoimpl.MessageState `protogen:"open.v1"` + AvatarList []*ExpeditionBattleAvatarInfo `protobuf:"bytes,1,rep,name=avatar_list,json=avatarList,proto3" json:"avatar_list,omitempty"` // offset: 24 + RouteId uint32 `protobuf:"varint,9,opt,name=route_id,json=routeId,proto3" json:"route_id,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleLineup) Reset() { + *x = ExpeditionBattleLineup{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleLineup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleLineup) ProtoMessage() {} + +func (x *ExpeditionBattleLineup) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleLineup.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleLineup) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{44} +} + +func (x *ExpeditionBattleLineup) GetAvatarList() []*ExpeditionBattleAvatarInfo { + if x != nil { + return x.AvatarList + } + return nil +} + +func (x *ExpeditionBattleLineup) GetRouteId() uint32 { + if x != nil { + return x.RouteId + } + return 0 +} + +type ExpeditionBattleMapData struct { + state protoimpl.MessageState `protogen:"open.v1"` + RemainingChallengeCount uint32 `protobuf:"varint,3,opt,name=remaining_challenge_count,json=remainingChallengeCount,proto3" json:"remaining_challenge_count,omitempty"` // offset: 36 + MapId uint32 `protobuf:"varint,11,opt,name=map_id,json=mapId,proto3" json:"map_id,omitempty"` // offset: 32 + RouteRecordList []*ExpeditionBattleRouteRecord `protobuf:"bytes,15,rep,name=route_record_list,json=routeRecordList,proto3" json:"route_record_list,omitempty"` // offset: 16 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleMapData) Reset() { + *x = ExpeditionBattleMapData{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleMapData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleMapData) ProtoMessage() {} + +func (x *ExpeditionBattleMapData) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleMapData.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleMapData) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{45} +} + +func (x *ExpeditionBattleMapData) GetRemainingChallengeCount() uint32 { + if x != nil { + return x.RemainingChallengeCount + } + return 0 +} + +func (x *ExpeditionBattleMapData) GetMapId() uint32 { + if x != nil { + return x.MapId + } + return 0 +} + +func (x *ExpeditionBattleMapData) GetRouteRecordList() []*ExpeditionBattleRouteRecord { + if x != nil { + return x.RouteRecordList + } + return nil +} + +type ExpeditionBattleRouteRecord struct { + state protoimpl.MessageState `protogen:"open.v1"` + PassedLevel uint32 `protobuf:"varint,1,opt,name=passed_level,json=passedLevel,proto3" json:"passed_level,omitempty"` // offset: 72 + BattleRoundCount uint32 `protobuf:"varint,3,opt,name=battle_round_count,json=battleRoundCount,proto3" json:"battle_round_count,omitempty"` // offset: 60 + IsNewRecord bool `protobuf:"varint,4,opt,name=is_new_record,json=isNewRecord,proto3" json:"is_new_record,omitempty"` // offset: 56 + AvatarList []*ExpeditionBattleAvatarInfo `protobuf:"bytes,6,rep,name=avatar_list,json=avatarList,proto3" json:"avatar_list,omitempty"` // offset: 16 + RouteId uint32 `protobuf:"varint,7,opt,name=route_id,json=routeId,proto3" json:"route_id,omitempty"` // offset: 68 + BuffValue uint64 `protobuf:"varint,8,opt,name=buff_value,json=buffValue,proto3" json:"buff_value,omitempty"` // offset: 48 + LastLevelPercent uint32 `protobuf:"varint,9,opt,name=last_level_percent,json=lastLevelPercent,proto3" json:"last_level_percent,omitempty"` // offset: 64 + FunList []*ExpeditionBattleFunRecord `protobuf:"bytes,10,rep,name=fun_list,json=funList,proto3" json:"fun_list,omitempty"` // offset: 32 + LevelRecordList []*ExpeditionBattleLevelRecord `protobuf:"bytes,13,rep,name=level_record_list,json=levelRecordList,proto3" json:"level_record_list,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleRouteRecord) Reset() { + *x = ExpeditionBattleRouteRecord{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleRouteRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleRouteRecord) ProtoMessage() {} + +func (x *ExpeditionBattleRouteRecord) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleRouteRecord.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleRouteRecord) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{46} +} + +func (x *ExpeditionBattleRouteRecord) GetPassedLevel() uint32 { + if x != nil { + return x.PassedLevel + } + return 0 +} + +func (x *ExpeditionBattleRouteRecord) GetBattleRoundCount() uint32 { + if x != nil { + return x.BattleRoundCount + } + return 0 +} + +func (x *ExpeditionBattleRouteRecord) GetIsNewRecord() bool { + if x != nil { + return x.IsNewRecord + } + return false +} + +func (x *ExpeditionBattleRouteRecord) GetAvatarList() []*ExpeditionBattleAvatarInfo { + if x != nil { + return x.AvatarList + } + return nil +} + +func (x *ExpeditionBattleRouteRecord) GetRouteId() uint32 { + if x != nil { + return x.RouteId + } + return 0 +} + +func (x *ExpeditionBattleRouteRecord) GetBuffValue() uint64 { + if x != nil { + return x.BuffValue + } + return 0 +} + +func (x *ExpeditionBattleRouteRecord) GetLastLevelPercent() uint32 { + if x != nil { + return x.LastLevelPercent + } + return 0 +} + +func (x *ExpeditionBattleRouteRecord) GetFunList() []*ExpeditionBattleFunRecord { + if x != nil { + return x.FunList + } + return nil +} + +func (x *ExpeditionBattleRouteRecord) GetLevelRecordList() []*ExpeditionBattleLevelRecord { + if x != nil { + return x.LevelRecordList + } + return nil +} + +type ExpeditionBattleRouteSettleInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeadAvatarIdList []uint32 `protobuf:"varint,4,rep,packed,name=dead_avatar_id_list,json=deadAvatarIdList,proto3" json:"dead_avatar_id_list,omitempty"` // offset: 16 + BuffValue uint64 `protobuf:"varint,6,opt,name=buff_value,json=buffValue,proto3" json:"buff_value,omitempty"` // offset: 56 + RouteId uint32 `protobuf:"varint,8,opt,name=route_id,json=routeId,proto3" json:"route_id,omitempty"` // offset: 48 + IsPassed bool `protobuf:"varint,10,opt,name=is_passed,json=isPassed,proto3" json:"is_passed,omitempty"` // offset: 52 + AvatarDamageList []*ExpeditionBattleAvatarDamage `protobuf:"bytes,11,rep,name=avatar_damage_list,json=avatarDamageList,proto3" json:"avatar_damage_list,omitempty"` // offset: 24 + BattleRoundCount uint32 `protobuf:"varint,13,opt,name=battle_round_count,json=battleRoundCount,proto3" json:"battle_round_count,omitempty"` // offset: 44 + LastLevelPercent uint32 `protobuf:"varint,14,opt,name=last_level_percent,json=lastLevelPercent,proto3" json:"last_level_percent,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleRouteSettleInfo) Reset() { + *x = ExpeditionBattleRouteSettleInfo{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleRouteSettleInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleRouteSettleInfo) ProtoMessage() {} + +func (x *ExpeditionBattleRouteSettleInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[47] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleRouteSettleInfo.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleRouteSettleInfo) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{47} +} + +func (x *ExpeditionBattleRouteSettleInfo) GetDeadAvatarIdList() []uint32 { + if x != nil { + return x.DeadAvatarIdList + } + return nil +} + +func (x *ExpeditionBattleRouteSettleInfo) GetBuffValue() uint64 { + if x != nil { + return x.BuffValue + } + return 0 +} + +func (x *ExpeditionBattleRouteSettleInfo) GetRouteId() uint32 { + if x != nil { + return x.RouteId + } + return 0 +} + +func (x *ExpeditionBattleRouteSettleInfo) GetIsPassed() bool { + if x != nil { + return x.IsPassed + } + return false +} + +func (x *ExpeditionBattleRouteSettleInfo) GetAvatarDamageList() []*ExpeditionBattleAvatarDamage { + if x != nil { + return x.AvatarDamageList + } + return nil +} + +func (x *ExpeditionBattleRouteSettleInfo) GetBattleRoundCount() uint32 { + if x != nil { + return x.BattleRoundCount + } + return 0 +} + +func (x *ExpeditionBattleRouteSettleInfo) GetLastLevelPercent() uint32 { + if x != nil { + return x.LastLevelPercent + } + return 0 +} + +type ExpeditionBattleSetLineupCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + LineupList []*ExpeditionBattleLineup `protobuf:"bytes,11,rep,name=lineup_list,json=lineupList,proto3" json:"lineup_list,omitempty"` // offset: 24 + MapId uint32 `protobuf:"varint,15,opt,name=map_id,json=mapId,proto3" json:"map_id,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleSetLineupCsReq) Reset() { + *x = ExpeditionBattleSetLineupCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleSetLineupCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleSetLineupCsReq) ProtoMessage() {} + +func (x *ExpeditionBattleSetLineupCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleSetLineupCsReq.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleSetLineupCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{48} +} + +func (x *ExpeditionBattleSetLineupCsReq) GetLineupList() []*ExpeditionBattleLineup { + if x != nil { + return x.LineupList + } + return nil +} + +func (x *ExpeditionBattleSetLineupCsReq) GetMapId() uint32 { + if x != nil { + return x.MapId + } + return 0 +} + +type ExpeditionBattleSetLineupScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Retcode uint32 `protobuf:"varint,1,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + MapId uint32 `protobuf:"varint,5,opt,name=map_id,json=mapId,proto3" json:"map_id,omitempty"` // offset: 36 + LineupList []*ExpeditionBattleLineup `protobuf:"bytes,12,rep,name=lineup_list,json=lineupList,proto3" json:"lineup_list,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleSetLineupScRsp) Reset() { + *x = ExpeditionBattleSetLineupScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleSetLineupScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleSetLineupScRsp) ProtoMessage() {} + +func (x *ExpeditionBattleSetLineupScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[49] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleSetLineupScRsp.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleSetLineupScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{49} +} + +func (x *ExpeditionBattleSetLineupScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +func (x *ExpeditionBattleSetLineupScRsp) GetMapId() uint32 { + if x != nil { + return x.MapId + } + return 0 +} + +func (x *ExpeditionBattleSetLineupScRsp) GetLineupList() []*ExpeditionBattleLineup { + if x != nil { + return x.LineupList + } + return nil +} + +type ExpeditionBattleSettleScNotify struct { + state protoimpl.MessageState `protogen:"open.v1"` + MapId uint32 `protobuf:"varint,1,opt,name=map_id,json=mapId,proto3" json:"map_id,omitempty"` // offset: 44 + RouteSettleList []*ExpeditionBattleRouteSettleInfo `protobuf:"bytes,3,rep,name=route_settle_list,json=routeSettleList,proto3" json:"route_settle_list,omitempty"` // offset: 32 + FunList []*ExpeditionBattleFunRecord `protobuf:"bytes,4,rep,name=fun_list,json=funList,proto3" json:"fun_list,omitempty"` // offset: 16 + LevelTurn uint32 `protobuf:"varint,6,opt,name=level_turn,json=levelTurn,proto3" json:"level_turn,omitempty"` // offset: 40 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleSettleScNotify) Reset() { + *x = ExpeditionBattleSettleScNotify{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleSettleScNotify) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleSettleScNotify) ProtoMessage() {} + +func (x *ExpeditionBattleSettleScNotify) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[50] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleSettleScNotify.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleSettleScNotify) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{50} +} + +func (x *ExpeditionBattleSettleScNotify) GetMapId() uint32 { + if x != nil { + return x.MapId + } + return 0 +} + +func (x *ExpeditionBattleSettleScNotify) GetRouteSettleList() []*ExpeditionBattleRouteSettleInfo { + if x != nil { + return x.RouteSettleList + } + return nil +} + +func (x *ExpeditionBattleSettleScNotify) GetFunList() []*ExpeditionBattleFunRecord { + if x != nil { + return x.FunList + } + return nil +} + +func (x *ExpeditionBattleSettleScNotify) GetLevelTurn() uint32 { + if x != nil { + return x.LevelTurn + } + return 0 +} + +type ExpeditionBattleStartCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + MapId uint32 `protobuf:"varint,6,opt,name=map_id,json=mapId,proto3" json:"map_id,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleStartCsReq) Reset() { + *x = ExpeditionBattleStartCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleStartCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleStartCsReq) ProtoMessage() {} + +func (x *ExpeditionBattleStartCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleStartCsReq.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleStartCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{51} +} + +func (x *ExpeditionBattleStartCsReq) GetMapId() uint32 { + if x != nil { + return x.MapId + } + return 0 +} + +type ExpeditionBattleStartScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Retcode uint32 `protobuf:"varint,3,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExpeditionBattleStartScRsp) Reset() { + *x = ExpeditionBattleStartScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExpeditionBattleStartScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExpeditionBattleStartScRsp) ProtoMessage() {} + +func (x *ExpeditionBattleStartScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExpeditionBattleStartScRsp.ProtoReflect.Descriptor instead. +func (*ExpeditionBattleStartScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{52} +} + +func (x *ExpeditionBattleStartScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type GetExpeditionBattleDataCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetExpeditionBattleDataCsReq) Reset() { + *x = GetExpeditionBattleDataCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetExpeditionBattleDataCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetExpeditionBattleDataCsReq) ProtoMessage() {} + +func (x *GetExpeditionBattleDataCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetExpeditionBattleDataCsReq.ProtoReflect.Descriptor instead. +func (*GetExpeditionBattleDataCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{53} +} + +type GetExpeditionBattleDataScRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + MapDataList []*ExpeditionBattleMapData `protobuf:"bytes,7,rep,name=map_data_list,json=mapDataList,proto3" json:"map_data_list,omitempty"` // offset: 16 + Retcode uint32 `protobuf:"varint,15,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetExpeditionBattleDataScRsp) Reset() { + *x = GetExpeditionBattleDataScRsp{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetExpeditionBattleDataScRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetExpeditionBattleDataScRsp) ProtoMessage() {} + +func (x *GetExpeditionBattleDataScRsp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetExpeditionBattleDataScRsp.ProtoReflect.Descriptor instead. +func (*GetExpeditionBattleDataScRsp) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{54} +} + +func (x *GetExpeditionBattleDataScRsp) GetMapDataList() []*ExpeditionBattleMapData { + if x != nil { + return x.MapDataList + } + return nil +} + +func (x *GetExpeditionBattleDataScRsp) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type HLJINHODOPP struct { + state protoimpl.MessageState `protogen:"open.v1"` + OrderList []*NMEGIPHFFDA `protobuf:"bytes,3,rep,name=order_list,json=orderList,proto3" json:"order_list,omitempty"` // offset: 24 + Retcode uint32 `protobuf:"varint,6,opt,name=retcode,proto3" json:"retcode,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HLJINHODOPP) Reset() { + *x = HLJINHODOPP{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HLJINHODOPP) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HLJINHODOPP) ProtoMessage() {} + +func (x *HLJINHODOPP) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[55] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HLJINHODOPP.ProtoReflect.Descriptor instead. +func (*HLJINHODOPP) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{55} +} + +func (x *HLJINHODOPP) GetOrderList() []*NMEGIPHFFDA { + if x != nil { + return x.OrderList + } + return nil +} + +func (x *HLJINHODOPP) GetRetcode() uint32 { + if x != nil { + return x.Retcode + } + return 0 +} + +type ILBLJAFMBBK struct { + state protoimpl.MessageState `protogen:"open.v1"` + FIEOPKNBHKJ uint64 `protobuf:"varint,6,opt,name=FIEOPKNBHKJ,proto3" json:"FIEOPKNBHKJ,omitempty"` // offset: 24 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ILBLJAFMBBK) Reset() { + *x = ILBLJAFMBBK{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ILBLJAFMBBK) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ILBLJAFMBBK) ProtoMessage() {} + +func (x *ILBLJAFMBBK) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ILBLJAFMBBK.ProtoReflect.Descriptor instead. +func (*ILBLJAFMBBK) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{56} +} + +func (x *ILBLJAFMBBK) GetFIEOPKNBHKJ() uint64 { + if x != nil { + return x.FIEOPKNBHKJ + } + return 0 +} + +type IOPNJIOPAFI struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filter *MMBIBKFEFNG `protobuf:"bytes,13,opt,name=filter,proto3" json:"filter,omitempty"` // offset: 16 + ADPEKIOPFKG GGLMGBPOCOP `protobuf:"varint,15,opt,name=ADPEKIOPFKG,proto3,enum=GGLMGBPOCOP" json:"ADPEKIOPFKG,omitempty"` // offset: 32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IOPNJIOPAFI) Reset() { + *x = IOPNJIOPAFI{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IOPNJIOPAFI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IOPNJIOPAFI) ProtoMessage() {} + +func (x *IOPNJIOPAFI) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IOPNJIOPAFI.ProtoReflect.Descriptor instead. +func (*IOPNJIOPAFI) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{57} +} + +func (x *IOPNJIOPAFI) GetFilter() *MMBIBKFEFNG { + if x != nil { + return x.Filter + } + return nil +} + +func (x *IOPNJIOPAFI) GetADPEKIOPFKG() GGLMGBPOCOP { + if x != nil { + return x.ADPEKIOPFKG + } + return GGLMGBPOCOP_GGLMGBPOCOP_BMKFIMEJPOM +} + +type MMBIBKFEFNG struct { + state protoimpl.MessageState `protogen:"open.v1"` + FMHBALCGMFF bool `protobuf:"varint,3,opt,name=FMHBALCGMFF,proto3" json:"FMHBALCGMFF,omitempty"` // offset: 32 + PODLFMBEKEG []uint32 `protobuf:"varint,9,rep,packed,name=PODLFMBEKEG,proto3" json:"PODLFMBEKEG,omitempty"` // offset: 16 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MMBIBKFEFNG) Reset() { + *x = MMBIBKFEFNG{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MMBIBKFEFNG) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MMBIBKFEFNG) ProtoMessage() {} + +func (x *MMBIBKFEFNG) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MMBIBKFEFNG.ProtoReflect.Descriptor instead. +func (*MMBIBKFEFNG) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{58} +} + +func (x *MMBIBKFEFNG) GetFMHBALCGMFF() bool { + if x != nil { + return x.FMHBALCGMFF + } + return false +} + +func (x *MMBIBKFEFNG) GetPODLFMBEKEG() []uint32 { + if x != nil { + return x.PODLFMBEKEG + } + return nil +} + +type ODHFCEALPFN struct { + state protoimpl.MessageState `protogen:"open.v1"` + IIIAGPNGPJM []*ODLEEMAALIP `protobuf:"bytes,1,rep,name=IIIAGPNGPJM,proto3" json:"IIIAGPNGPJM,omitempty"` // offset: 24 + JJPLIMAENEB uint32 `protobuf:"varint,3,opt,name=JJPLIMAENEB,proto3" json:"JJPLIMAENEB,omitempty"` // offset: 48 + JNBIALMKFCL uint32 `protobuf:"varint,5,opt,name=JNBIALMKFCL,proto3" json:"JNBIALMKFCL,omitempty"` // offset: 52 + FMCCHBBIJKF []*ODLEEMAALIP `protobuf:"bytes,7,rep,name=FMCCHBBIJKF,proto3" json:"FMCCHBBIJKF,omitempty"` // offset: 40 + OFNINJLHHDE []*ODLEEMAALIP `protobuf:"bytes,9,rep,name=OFNINJLHHDE,proto3" json:"OFNINJLHHDE,omitempty"` // offset: 16 + LLMLOGNFFCD bool `protobuf:"varint,10,opt,name=LLMLOGNFFCD,proto3" json:"LLMLOGNFFCD,omitempty"` // offset: 60 + Mode uint32 `protobuf:"varint,13,opt,name=mode,proto3" json:"mode,omitempty"` // offset: 56 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ODHFCEALPFN) Reset() { + *x = ODHFCEALPFN{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ODHFCEALPFN) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ODHFCEALPFN) ProtoMessage() {} + +func (x *ODHFCEALPFN) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ODHFCEALPFN.ProtoReflect.Descriptor instead. +func (*ODHFCEALPFN) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{59} +} + +func (x *ODHFCEALPFN) GetIIIAGPNGPJM() []*ODLEEMAALIP { + if x != nil { + return x.IIIAGPNGPJM + } + return nil +} + +func (x *ODHFCEALPFN) GetJJPLIMAENEB() uint32 { + if x != nil { + return x.JJPLIMAENEB + } + return 0 +} + +func (x *ODHFCEALPFN) GetJNBIALMKFCL() uint32 { + if x != nil { + return x.JNBIALMKFCL + } + return 0 +} + +func (x *ODHFCEALPFN) GetFMCCHBBIJKF() []*ODLEEMAALIP { + if x != nil { + return x.FMCCHBBIJKF + } + return nil +} + +func (x *ODHFCEALPFN) GetOFNINJLHHDE() []*ODLEEMAALIP { + if x != nil { + return x.OFNINJLHHDE + } + return nil +} + +func (x *ODHFCEALPFN) GetLLMLOGNFFCD() bool { + if x != nil { + return x.LLMLOGNFFCD + } + return false +} + +func (x *ODHFCEALPFN) GetMode() uint32 { + if x != nil { + return x.Mode + } + return 0 +} + +type PEMMJHDFOLM struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PEMMJHDFOLM) Reset() { + *x = PEMMJHDFOLM{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PEMMJHDFOLM) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PEMMJHDFOLM) ProtoMessage() {} + +func (x *PEMMJHDFOLM) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PEMMJHDFOLM.ProtoReflect.Descriptor instead. +func (*PEMMJHDFOLM) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{60} +} + +type SocialPlayPreCheckEnterRoomCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + TeleportId uint32 `protobuf:"varint,7,opt,name=teleport_id,json=teleportId,proto3" json:"teleport_id,omitempty"` // offset: 32 + GJNMHILINHC MFPDAKOIOED `protobuf:"varint,8,opt,name=GJNMHILINHC,proto3,enum=MFPDAKOIOED" json:"GJNMHILINHC,omitempty"` // offset: 24 + EntryId uint32 `protobuf:"varint,15,opt,name=entry_id,json=entryId,proto3" json:"entry_id,omitempty"` // offset: 28 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SocialPlayPreCheckEnterRoomCsReq) Reset() { + *x = SocialPlayPreCheckEnterRoomCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SocialPlayPreCheckEnterRoomCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SocialPlayPreCheckEnterRoomCsReq) ProtoMessage() {} + +func (x *SocialPlayPreCheckEnterRoomCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SocialPlayPreCheckEnterRoomCsReq.ProtoReflect.Descriptor instead. +func (*SocialPlayPreCheckEnterRoomCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{61} +} + +func (x *SocialPlayPreCheckEnterRoomCsReq) GetTeleportId() uint32 { + if x != nil { + return x.TeleportId + } + return 0 +} + +func (x *SocialPlayPreCheckEnterRoomCsReq) GetGJNMHILINHC() MFPDAKOIOED { + if x != nil { + return x.GJNMHILINHC + } + return MFPDAKOIOED_MFPDAKOIOED_KCOCMMIACMB +} + +func (x *SocialPlayPreCheckEnterRoomCsReq) GetEntryId() uint32 { + if x != nil { + return x.EntryId + } + return 0 +} + +type VoracityInvasionGetDataCsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VoracityInvasionGetDataCsReq) Reset() { + *x = VoracityInvasionGetDataCsReq{} + mi := &file_protocol_proto_ungrouped_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VoracityInvasionGetDataCsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VoracityInvasionGetDataCsReq) ProtoMessage() {} + +func (x *VoracityInvasionGetDataCsReq) ProtoReflect() protoreflect.Message { + mi := &file_protocol_proto_ungrouped_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VoracityInvasionGetDataCsReq.ProtoReflect.Descriptor instead. +func (*VoracityInvasionGetDataCsReq) Descriptor() ([]byte, []int) { + return file_protocol_proto_ungrouped_proto_rawDescGZIP(), []int{62} +} + +var File_protocol_proto_ungrouped_proto protoreflect.FileDescriptor + +const file_protocol_proto_ungrouped_proto_rawDesc = "" + + "\n" + + "\x1eprotocol/proto/ungrouped.proto\x1a\x1dprotocol/proto/StarRail.proto\"-\n" + + "\x03KVP\x12\x14\n" + + "\x05value\x18\x03 \x01(\rR\x05value\x12\x10\n" + + "\x03key\x18\t \x01(\rR\x03key\"\x8f\x01\n" + + "\x13B51RacingAgendaInfo\x12\x10\n" + + "\x03day\x18\x02 \x01(\rR\x03day\x12)\n" + + "\x05match\x18\x06 \x01(\v2\x13.B51RacingMatchInfoR\x05match\x12;\n" + + "\vdevelopment\x18\v \x01(\v2\x19.B51RacingDevelopmentInfoR\vdevelopment\"\x93\x01\n" + + "\x13B51RacingCarDisplay\x121\n" + + "\x15equipped_part_id_list\x18\x03 \x03(\rR\x12equippedPartIdList\x12\x15\n" + + "\x06car_id\x18\x04 \x01(\rR\x05carId\x12\x17\n" + + "\acar_num\x18\x06 \x01(\rR\x06carNum\x12\x19\n" + + "\bpaint_id\x18\f \x01(\rR\apaintId\"H\n" + + "\x12B51RacingCarLivery\x12\x17\n" + + "\acar_num\x18\x01 \x01(\rR\x06carNum\x12\x19\n" + + "\bpaint_id\x18\x03 \x01(\rR\apaintId\"F\n" + + "\x17B51RacingCarLiveryCsReq\x12+\n" + + "\x06livery\x18\t \x01(\v2\x13.B51RacingCarLiveryR\x06livery\"`\n" + + "\x17B51RacingCarLiveryScRsp\x12+\n" + + "\x06livery\x18\x05 \x01(\v2\x13.B51RacingCarLiveryR\x06livery\x12\x18\n" + + "\aretcode\x18\n" + + " \x01(\rR\aretcode\"\x96\x01\n" + + "\x19B51RacingChallengeCarData\x12\x19\n" + + "\bcycle_id\x18\n" + + " \x01(\rR\acycleId\x121\n" + + "\x15equipped_part_id_list\x18\r \x03(\rR\x12equippedPartIdList\x12+\n" + + "\x06livery\x18\x0f \x01(\v2\x13.B51RacingCarLiveryR\x06livery\"\x91\x01\n" + + "\x16B51RacingChallengeData\x12\x1b\n" + + "\tdriver_id\x18\x01 \x01(\rR\bdriverId\x12,\n" + + "\x0fteam_point_list\x18\r \x03(\v2\x04.KVPR\rteamPointList\x12,\n" + + "\x03car\x18\x0e \x01(\v2\x1a.B51RacingChallengeCarDataR\x03car\"\x8d\x02\n" + + "\x1fB51RacingChallengeEndMatchCsReq\x12\x19\n" + + "\bmatch_id\x18\x01 \x01(\rR\amatchId\x12*\n" + + "\x05stats\x18\x02 \x01(\v2\x14.B51RacingMatchStatsR\x05stats\x12\x12\n" + + "\x04rank\x18\a \x01(\rR\x04rank\x12\x1f\n" + + "\vrandom_seed\x18\t \x01(\rR\n" + + "randomSeed\x12-\n" + + "\vresult_type\x18\v \x01(\x0e2\f.HPICFNLLMCOR\n" + + "resultType\x12$\n" + + "\x0efinish_time_ms\x18\r \x01(\rR\ffinishTimeMs\x12\x19\n" + + "\btrack_id\x18\x0e \x01(\rR\atrackId\"\x87\x01\n" + + "\x1fB51RacingChallengeEndMatchScRsp\x12\x19\n" + + "\bmatch_id\x18\a \x01(\rR\amatchId\x12\x19\n" + + "\btrack_id\x18\n" + + " \x01(\rR\atrackId\x12\x18\n" + + "\aretcode\x18\v \x01(\rR\aretcode\x12\x14\n" + + "\x05score\x18\r \x01(\rR\x05score\"v\n" + + "!B51RacingChallengeStartMatchCsReq\x12\x19\n" + + "\btrack_id\x18\x04 \x01(\rR\atrackId\x12\x19\n" + + "\bmatch_id\x18\t \x01(\rR\amatchId\x12\x1b\n" + + "\tdriver_id\x18\f \x01(\rR\bdriverId\"{\n" + + "!B51RacingChallengeStartMatchScRsp\x12\x1f\n" + + "\vrandom_seed\x18\x03 \x01(\rR\n" + + "randomSeed\x12\x1b\n" + + "\tdriver_id\x18\v \x01(\rR\bdriverId\x12\x18\n" + + "\aretcode\x18\f \x01(\rR\aretcode\"\x9d\x01\n" + + " B51RacingChallengeUpdateCarCsReq\x121\n" + + "\x15equipped_part_id_list\x18\x03 \x03(\rR\x12equippedPartIdList\x12\x19\n" + + "\bcycle_id\x18\v \x01(\rR\acycleId\x12+\n" + + "\x06livery\x18\f \x01(\v2\x13.B51RacingCarLiveryR\x06livery\"j\n" + + " B51RacingChallengeUpdateCarScRsp\x12\x18\n" + + "\aretcode\x18\x05 \x01(\rR\aretcode\x12,\n" + + "\x03car\x18\x0f \x01(\v2\x1a.B51RacingChallengeCarDataR\x03car\"\xa5\x03\n" + + "\x12B51RacingCycleData\x12\x15\n" + + "\x06car_id\x18\x02 \x01(\rR\x05carId\x12,\n" + + "\x12finished_match_num\x18\x03 \x01(\rR\x10finishedMatchNum\x12/\n" + + "\tpart_info\x18\x04 \x01(\v2\x12.B51RacingPartInfoR\bpartInfo\x12/\n" + + "\tstat_info\x18\x06 \x01(\v2\x12.B51RacingStatInfoR\bstatInfo\x12,\n" + + "\x06agenda\x18\a \x01(\v2\x14.B51RacingAgendaInfoR\x06agenda\x12+\n" + + "\x06livery\x18\n" + + " \x01(\v2\x13.B51RacingCarLiveryR\x06livery\x12\x1b\n" + + "\tdriver_id\x18\v \x01(\rR\bdriverId\x12\x19\n" + + "\bcycle_id\x18\f \x01(\rR\acycleId\x12U\n" + + "\x19pre_match_track_info_list\x18\r \x03(\v2\x1b.B51RacingPreMatchTrackInfoR\x15preMatchTrackInfoList\"\xac\x01\n" + + "\x18B51RacingDevelopmentInfo\x12-\n" + + "\x13active_part_id_list\x18\x04 \x03(\rR\x10activePartIdList\x121\n" + + "\x15active_action_id_list\x18\x06 \x03(\rR\x12activeActionIdList\x12.\n" + + "\x13finished_action_num\x18\n" + + " \x01(\rR\x11finishedActionNum\"E\n" + + "\x1dB51RacingDriverUnlockScNotify\x12$\n" + + "\x0edriver_id_list\x18\n" + + " \x03(\rR\fdriverIdList\"\xe9\x01\n" + + "\x16B51RacingEndMatchCsReq\x12*\n" + + "\x05stats\x18\x02 \x01(\v2\x14.B51RacingMatchStatsR\x05stats\x12\x1f\n" + + "\vrandom_seed\x18\a \x01(\rR\n" + + "randomSeed\x12-\n" + + "\vresult_type\x18\b \x01(\x0e2\f.HPICFNLLMCOR\n" + + "resultType\x12\x19\n" + + "\btrack_id\x18\n" + + " \x01(\rR\atrackId\x12$\n" + + "\x0efinish_time_ms\x18\v \x01(\rR\ffinishTimeMs\x12\x12\n" + + "\x04rank\x18\x0f \x01(\rR\x04rank\"\xe4\x01\n" + + "\x16B51RacingEndMatchScRsp\x12,\n" + + "\x12finished_match_num\x18\x03 \x01(\rR\x10finishedMatchNum\x12,\n" + + "\x06agenda\x18\x05 \x01(\v2\x14.B51RacingAgendaInfoR\x06agenda\x12\x18\n" + + "\aretcode\x18\b \x01(\rR\aretcode\x12(\n" + + "\x10added_team_point\x18\n" + + " \x01(\rR\x0eaddedTeamPoint\x12*\n" + + "\x11is_cycle_finished\x18\f \x01(\bR\x0fisCycleFinished\"\x8f\x01\n" + + "\x12B51RacingMatchInfo\x12\x19\n" + + "\bmatch_id\x18\x02 \x01(\rR\amatchId\x12\x1f\n" + + "\vrandom_seed\x18\x04 \x01(\rR\n" + + "randomSeed\x12\x19\n" + + "\btrack_id\x18\x06 \x01(\rR\atrackId\x12\"\n" + + "\rstart_time_ms\x18\x0e \x01(\x04R\vstartTimeMs\"\xa9\x02\n" + + "\x13B51RacingMatchStats\x12!\n" + + "\fcharge_count\x18\x02 \x01(\rR\vchargeCount\x12\x1e\n" + + "\vlap_time_ms\x18\x06 \x01(\rR\tlapTimeMs\x12%\n" + + "\x0eovertake_count\x18\a \x01(\rR\rovertakeCount\x12'\n" + + "\x0fcollision_count\x18\t \x01(\rR\x0ecollisionCount\x12\"\n" + + "\rdrift_time_ms\x18\n" + + " \x01(\rR\vdriftTimeMs\x12\x1b\n" + + "\tmax_speed\x18\v \x01(\rR\bmaxSpeed\x12\x1d\n" + + "\n" + + "is_perfect\x18\f \x01(\bR\tisPerfect\x12\x1f\n" + + "\vboost_count\x18\x0e \x01(\rR\n" + + "boostCount\"\x8b\x01\n" + + "$B51RacingMissionChangeAgendaScNotify\x12,\n" + + "\x06agenda\x18\x02 \x01(\v2\x14.B51RacingAgendaInfoR\x06agenda\x125\n" + + "\x17unlocked_driver_id_list\x18\x06 \x03(\rR\x14unlockedDriverIdList\"\xa7\x01\n" + + "\x11B51RacingPartInfo\x121\n" + + "\x15equipped_part_id_list\x18\a \x03(\rR\x12equippedPartIdList\x12*\n" + + "\x11equipped_decal_id\x18\t \x01(\rR\x0fequippedDecalId\x123\n" + + "\x16developed_part_id_list\x18\x0f \x03(\rR\x13developedPartIdList\"d\n" + + "\x1aB51RacingPreMatchTrackInfo\x12\x19\n" + + "\bmatch_id\x18\x03 \x01(\rR\amatchId\x12\x19\n" + + "\btrack_id\x18\x04 \x01(\rR\atrackId\x12\x10\n" + + "\x03day\x18\n" + + " \x01(\rR\x03day\"f\n" + + "\x19B51RacingReplacePartScRsp\x12/\n" + + "\tpart_info\x18\v \x01(\v2\x12.B51RacingPartInfoR\bpartInfo\x12\x18\n" + + "\aretcode\x18\f \x01(\rR\aretcode\"@\n" + + "!B51RacingSelectDevelopActionCsReq\x12\x1b\n" + + "\taction_id\x18\x03 \x01(\rR\bactionId\"\xbb\x02\n" + + "!B51RacingSelectDevelopActionScRsp\x124\n" + + "\x16remaining_action_count\x18\x01 \x01(\rR\x14remainingActionCount\x126\n" + + "\x17is_development_finished\x18\x02 \x01(\bR\x15isDevelopmentFinished\x12/\n" + + "\tstat_info\x18\x04 \x01(\v2\x12.B51RacingStatInfoR\bstatInfo\x12\x18\n" + + "\aretcode\x18\x06 \x01(\rR\aretcode\x12,\n" + + "\x06agenda\x18\n" + + " \x01(\v2\x14.B51RacingAgendaInfoR\x06agenda\x12/\n" + + "\tpart_info\x18\x0f \x01(\v2\x12.B51RacingPartInfoR\bpartInfo\":\n" + + "\x1fB51RacingSelectDevelopPartCsReq\x12\x17\n" + + "\apart_id\x18\x0e \x01(\rR\x06partId\"\x81\x02\n" + + "\x1fB51RacingSelectDevelopPartScRsp\x124\n" + + "\x16remaining_select_count\x18\x04 \x01(\rR\x14remainingSelectCount\x12/\n" + + "\tpart_info\x18\x05 \x01(\v2\x12.B51RacingPartInfoR\bpartInfo\x12,\n" + + "\x06agenda\x18\a \x01(\v2\x14.B51RacingAgendaInfoR\x06agenda\x12\x18\n" + + "\aretcode\x18\v \x01(\rR\aretcode\x12/\n" + + "\tstat_info\x18\x0f \x01(\v2\x12.B51RacingStatInfoR\bstatInfo\"6\n" + + "\x17B51RacingSetDriverCsReq\x12\x1b\n" + + "\tdriver_id\x18\t \x01(\rR\bdriverId\"P\n" + + "\x17B51RacingSetDriverScRsp\x12\x18\n" + + "\aretcode\x18\x03 \x01(\rR\aretcode\x12\x1b\n" + + "\tdriver_id\x18\x0e \x01(\rR\bdriverId\"y\n" + + "\x18B51RacingStartCycleCsReq\x12\x15\n" + + "\x06car_id\x18\t \x01(\rR\x05carId\x12\x19\n" + + "\bcycle_id\x18\v \x01(\rR\acycleId\x12+\n" + + "\x06livery\x18\x0f \x01(\v2\x13.B51RacingCarLiveryR\x06livery\"_\n" + + "\x18B51RacingStartCycleScRsp\x12)\n" + + "\x05cycle\x18\x02 \x01(\v2\x13.B51RacingCycleDataR\x05cycle\x12\x18\n" + + "\aretcode\x18\t \x01(\rR\aretcode\"P\n" + + "\x18B51RacingStartMatchCsReq\x12\x19\n" + + "\bmatch_id\x18\r \x01(\rR\amatchId\x12\x19\n" + + "\btrack_id\x18\x0f \x01(\rR\atrackId\"_\n" + + "\x18B51RacingStartMatchScRsp\x12)\n" + + "\x05match\x18\t \x01(\v2\x13.B51RacingMatchInfoR\x05match\x12\x18\n" + + "\aretcode\x18\v \x01(\rR\aretcode\"z\n" + + "\x11B51RacingStatInfo\x12,\n" + + "\x0fstat_value_list\x18\x06 \x03(\v2\x04.KVPR\rstatValueList\x127\n" + + "\x15target_stat_tier_list\x18\r \x03(\v2\x04.KVPR\x12targetStatTierList\"9\n" + + "\x1eBlindBoxResetPoolPositionCsReq\x12\x17\n" + + "\apool_id\x18\f \x01(\rR\x06poolId\"S\n" + + "\x1eBlindBoxResetPoolPositionScRsp\x12\x18\n" + + "\aretcode\x18\x01 \x01(\rR\aretcode\x12\x17\n" + + "\apool_id\x18\a \x01(\rR\x06poolId\"I\n" + + "\vCHNMJPLALEC\x12\x18\n" + + "\aretcode\x18\x03 \x01(\rR\aretcode\x12 \n" + + "\vMJNENEAAOAE\x18\x05 \x01(\x04R\vMJNENEAAOAE\"S\n" + + "\x1cExpeditionBattleAvatarDamage\x12\x1b\n" + + "\tavatar_id\x18\v \x01(\rR\bavatarId\x12\x16\n" + + "\x06damage\x18\x0e \x01(\x04R\x06damage\"g\n" + + "\x1aExpeditionBattleAvatarInfo\x12,\n" + + "\vavatar_type\x18\t \x01(\x0e2\v.AvatarTypeR\n" + + "avatarType\x12\x1b\n" + + "\tavatar_id\x18\f \x01(\rR\bavatarId\"v\n" + + "\x1bExpeditionBattleEndScNotify\x123\n" + + "\bmap_data\x18\a \x01(\v2\x18.ExpeditionBattleMapDataR\amapData\x12\"\n" + + "\ris_new_record\x18\f \x01(\bR\visNewRecord\"l\n" + + "\x19ExpeditionBattleFunRecord\x12\x15\n" + + "\x06fun_id\x18\x02 \x01(\rR\x05funId\x12\x1b\n" + + "\tavatar_id\x18\a \x01(\rR\bavatarId\x12\x1b\n" + + "\tfun_count\x18\t \x01(\x04R\bfunCount\"\xb4\x01\n" + + "\x1bExpeditionBattleLevelRecord\x12\x19\n" + + "\blevel_id\x18\x02 \x01(\rR\alevelId\x12K\n" + + "\x12avatar_damage_list\x18\a \x03(\v2\x1d.ExpeditionBattleAvatarDamageR\x10avatarDamageList\x12-\n" + + "\x13dead_avatar_id_list\x18\b \x03(\rR\x10deadAvatarIdList\"q\n" + + "\x16ExpeditionBattleLineup\x12<\n" + + "\vavatar_list\x18\x01 \x03(\v2\x1b.ExpeditionBattleAvatarInfoR\n" + + "avatarList\x12\x19\n" + + "\broute_id\x18\t \x01(\rR\arouteId\"\xb6\x01\n" + + "\x17ExpeditionBattleMapData\x12:\n" + + "\x19remaining_challenge_count\x18\x03 \x01(\rR\x17remainingChallengeCount\x12\x15\n" + + "\x06map_id\x18\v \x01(\rR\x05mapId\x12H\n" + + "\x11route_record_list\x18\x0f \x03(\v2\x1c.ExpeditionBattleRouteRecordR\x0frouteRecordList\"\xb9\x03\n" + + "\x1bExpeditionBattleRouteRecord\x12!\n" + + "\fpassed_level\x18\x01 \x01(\rR\vpassedLevel\x12,\n" + + "\x12battle_round_count\x18\x03 \x01(\rR\x10battleRoundCount\x12\"\n" + + "\ris_new_record\x18\x04 \x01(\bR\visNewRecord\x12<\n" + + "\vavatar_list\x18\x06 \x03(\v2\x1b.ExpeditionBattleAvatarInfoR\n" + + "avatarList\x12\x19\n" + + "\broute_id\x18\a \x01(\rR\arouteId\x12\x1d\n" + + "\n" + + "buff_value\x18\b \x01(\x04R\tbuffValue\x12,\n" + + "\x12last_level_percent\x18\t \x01(\rR\x10lastLevelPercent\x125\n" + + "\bfun_list\x18\n" + + " \x03(\v2\x1a.ExpeditionBattleFunRecordR\afunList\x12H\n" + + "\x11level_record_list\x18\r \x03(\v2\x1c.ExpeditionBattleLevelRecordR\x0flevelRecordList\"\xd0\x02\n" + + "\x1fExpeditionBattleRouteSettleInfo\x12-\n" + + "\x13dead_avatar_id_list\x18\x04 \x03(\rR\x10deadAvatarIdList\x12\x1d\n" + + "\n" + + "buff_value\x18\x06 \x01(\x04R\tbuffValue\x12\x19\n" + + "\broute_id\x18\b \x01(\rR\arouteId\x12\x1b\n" + + "\tis_passed\x18\n" + + " \x01(\bR\bisPassed\x12K\n" + + "\x12avatar_damage_list\x18\v \x03(\v2\x1d.ExpeditionBattleAvatarDamageR\x10avatarDamageList\x12,\n" + + "\x12battle_round_count\x18\r \x01(\rR\x10battleRoundCount\x12,\n" + + "\x12last_level_percent\x18\x0e \x01(\rR\x10lastLevelPercent\"q\n" + + "\x1eExpeditionBattleSetLineupCsReq\x128\n" + + "\vlineup_list\x18\v \x03(\v2\x17.ExpeditionBattleLineupR\n" + + "lineupList\x12\x15\n" + + "\x06map_id\x18\x0f \x01(\rR\x05mapId\"\x8b\x01\n" + + "\x1eExpeditionBattleSetLineupScRsp\x12\x18\n" + + "\aretcode\x18\x01 \x01(\rR\aretcode\x12\x15\n" + + "\x06map_id\x18\x05 \x01(\rR\x05mapId\x128\n" + + "\vlineup_list\x18\f \x03(\v2\x17.ExpeditionBattleLineupR\n" + + "lineupList\"\xdb\x01\n" + + "\x1eExpeditionBattleSettleScNotify\x12\x15\n" + + "\x06map_id\x18\x01 \x01(\rR\x05mapId\x12L\n" + + "\x11route_settle_list\x18\x03 \x03(\v2 .ExpeditionBattleRouteSettleInfoR\x0frouteSettleList\x125\n" + + "\bfun_list\x18\x04 \x03(\v2\x1a.ExpeditionBattleFunRecordR\afunList\x12\x1d\n" + + "\n" + + "level_turn\x18\x06 \x01(\rR\tlevelTurn\"3\n" + + "\x1aExpeditionBattleStartCsReq\x12\x15\n" + + "\x06map_id\x18\x06 \x01(\rR\x05mapId\"6\n" + + "\x1aExpeditionBattleStartScRsp\x12\x18\n" + + "\aretcode\x18\x03 \x01(\rR\aretcode\"\x1e\n" + + "\x1cGetExpeditionBattleDataCsReq\"v\n" + + "\x1cGetExpeditionBattleDataScRsp\x12<\n" + + "\rmap_data_list\x18\a \x03(\v2\x18.ExpeditionBattleMapDataR\vmapDataList\x12\x18\n" + + "\aretcode\x18\x0f \x01(\rR\aretcode\"T\n" + + "\vHLJINHODOPP\x12+\n" + + "\n" + + "order_list\x18\x03 \x03(\v2\f.NMEGIPHFFDAR\torderList\x12\x18\n" + + "\aretcode\x18\x06 \x01(\rR\aretcode\"/\n" + + "\vILBLJAFMBBK\x12 \n" + + "\vFIEOPKNBHKJ\x18\x06 \x01(\x04R\vFIEOPKNBHKJ\"c\n" + + "\vIOPNJIOPAFI\x12$\n" + + "\x06filter\x18\r \x01(\v2\f.MMBIBKFEFNGR\x06filter\x12.\n" + + "\vADPEKIOPFKG\x18\x0f \x01(\x0e2\f.GGLMGBPOCOPR\vADPEKIOPFKG\"Q\n" + + "\vMMBIBKFEFNG\x12 \n" + + "\vFMHBALCGMFF\x18\x03 \x01(\bR\vFMHBALCGMFF\x12 \n" + + "\vPODLFMBEKEG\x18\t \x03(\rR\vPODLFMBEKEG\"\x97\x02\n" + + "\vODHFCEALPFN\x12.\n" + + "\vIIIAGPNGPJM\x18\x01 \x03(\v2\f.ODLEEMAALIPR\vIIIAGPNGPJM\x12 \n" + + "\vJJPLIMAENEB\x18\x03 \x01(\rR\vJJPLIMAENEB\x12 \n" + + "\vJNBIALMKFCL\x18\x05 \x01(\rR\vJNBIALMKFCL\x12.\n" + + "\vFMCCHBBIJKF\x18\a \x03(\v2\f.ODLEEMAALIPR\vFMCCHBBIJKF\x12.\n" + + "\vOFNINJLHHDE\x18\t \x03(\v2\f.ODLEEMAALIPR\vOFNINJLHHDE\x12 \n" + + "\vLLMLOGNFFCD\x18\n" + + " \x01(\bR\vLLMLOGNFFCD\x12\x12\n" + + "\x04mode\x18\r \x01(\rR\x04mode\"\r\n" + + "\vPEMMJHDFOLM\"\x8e\x01\n" + + " SocialPlayPreCheckEnterRoomCsReq\x12\x1f\n" + + "\vteleport_id\x18\a \x01(\rR\n" + + "teleportId\x12.\n" + + "\vGJNMHILINHC\x18\b \x01(\x0e2\f.MFPDAKOIOEDR\vGJNMHILINHC\x12\x19\n" + + "\bentry_id\x18\x0f \x01(\rR\aentryId\"\x1e\n" + + "\x1cVoracityInvasionGetDataCsReq*d\n" + + "\vGGLMGBPOCOP\x12\x1b\n" + + "\x17GGLMGBPOCOP_BMKFIMEJPOM\x10\x00\x12\x1b\n" + + "\x17GGLMGBPOCOP_MLOGJAKGHHD\x10\x01\x12\x1b\n" + + "\x17GGLMGBPOCOP_ILMKHLENPNI\x10\x02B\x1dZ\x1bgac-hkrpg-go/protocol/protob\x06proto3" + +var ( + file_protocol_proto_ungrouped_proto_rawDescOnce sync.Once + file_protocol_proto_ungrouped_proto_rawDescData []byte +) + +func file_protocol_proto_ungrouped_proto_rawDescGZIP() []byte { + file_protocol_proto_ungrouped_proto_rawDescOnce.Do(func() { + file_protocol_proto_ungrouped_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_protocol_proto_ungrouped_proto_rawDesc), len(file_protocol_proto_ungrouped_proto_rawDesc))) + }) + return file_protocol_proto_ungrouped_proto_rawDescData +} + +var file_protocol_proto_ungrouped_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_protocol_proto_ungrouped_proto_msgTypes = make([]protoimpl.MessageInfo, 63) +var file_protocol_proto_ungrouped_proto_goTypes = []any{ + (GGLMGBPOCOP)(0), // 0: GGLMGBPOCOP + (*KVP)(nil), // 1: KVP + (*B51RacingAgendaInfo)(nil), // 2: B51RacingAgendaInfo + (*B51RacingCarDisplay)(nil), // 3: B51RacingCarDisplay + (*B51RacingCarLivery)(nil), // 4: B51RacingCarLivery + (*B51RacingCarLiveryCsReq)(nil), // 5: B51RacingCarLiveryCsReq + (*B51RacingCarLiveryScRsp)(nil), // 6: B51RacingCarLiveryScRsp + (*B51RacingChallengeCarData)(nil), // 7: B51RacingChallengeCarData + (*B51RacingChallengeData)(nil), // 8: B51RacingChallengeData + (*B51RacingChallengeEndMatchCsReq)(nil), // 9: B51RacingChallengeEndMatchCsReq + (*B51RacingChallengeEndMatchScRsp)(nil), // 10: B51RacingChallengeEndMatchScRsp + (*B51RacingChallengeStartMatchCsReq)(nil), // 11: B51RacingChallengeStartMatchCsReq + (*B51RacingChallengeStartMatchScRsp)(nil), // 12: B51RacingChallengeStartMatchScRsp + (*B51RacingChallengeUpdateCarCsReq)(nil), // 13: B51RacingChallengeUpdateCarCsReq + (*B51RacingChallengeUpdateCarScRsp)(nil), // 14: B51RacingChallengeUpdateCarScRsp + (*B51RacingCycleData)(nil), // 15: B51RacingCycleData + (*B51RacingDevelopmentInfo)(nil), // 16: B51RacingDevelopmentInfo + (*B51RacingDriverUnlockScNotify)(nil), // 17: B51RacingDriverUnlockScNotify + (*B51RacingEndMatchCsReq)(nil), // 18: B51RacingEndMatchCsReq + (*B51RacingEndMatchScRsp)(nil), // 19: B51RacingEndMatchScRsp + (*B51RacingMatchInfo)(nil), // 20: B51RacingMatchInfo + (*B51RacingMatchStats)(nil), // 21: B51RacingMatchStats + (*B51RacingMissionChangeAgendaScNotify)(nil), // 22: B51RacingMissionChangeAgendaScNotify + (*B51RacingPartInfo)(nil), // 23: B51RacingPartInfo + (*B51RacingPreMatchTrackInfo)(nil), // 24: B51RacingPreMatchTrackInfo + (*B51RacingReplacePartScRsp)(nil), // 25: B51RacingReplacePartScRsp + (*B51RacingSelectDevelopActionCsReq)(nil), // 26: B51RacingSelectDevelopActionCsReq + (*B51RacingSelectDevelopActionScRsp)(nil), // 27: B51RacingSelectDevelopActionScRsp + (*B51RacingSelectDevelopPartCsReq)(nil), // 28: B51RacingSelectDevelopPartCsReq + (*B51RacingSelectDevelopPartScRsp)(nil), // 29: B51RacingSelectDevelopPartScRsp + (*B51RacingSetDriverCsReq)(nil), // 30: B51RacingSetDriverCsReq + (*B51RacingSetDriverScRsp)(nil), // 31: B51RacingSetDriverScRsp + (*B51RacingStartCycleCsReq)(nil), // 32: B51RacingStartCycleCsReq + (*B51RacingStartCycleScRsp)(nil), // 33: B51RacingStartCycleScRsp + (*B51RacingStartMatchCsReq)(nil), // 34: B51RacingStartMatchCsReq + (*B51RacingStartMatchScRsp)(nil), // 35: B51RacingStartMatchScRsp + (*B51RacingStatInfo)(nil), // 36: B51RacingStatInfo + (*BlindBoxResetPoolPositionCsReq)(nil), // 37: BlindBoxResetPoolPositionCsReq + (*BlindBoxResetPoolPositionScRsp)(nil), // 38: BlindBoxResetPoolPositionScRsp + (*CHNMJPLALEC)(nil), // 39: CHNMJPLALEC + (*ExpeditionBattleAvatarDamage)(nil), // 40: ExpeditionBattleAvatarDamage + (*ExpeditionBattleAvatarInfo)(nil), // 41: ExpeditionBattleAvatarInfo + (*ExpeditionBattleEndScNotify)(nil), // 42: ExpeditionBattleEndScNotify + (*ExpeditionBattleFunRecord)(nil), // 43: ExpeditionBattleFunRecord + (*ExpeditionBattleLevelRecord)(nil), // 44: ExpeditionBattleLevelRecord + (*ExpeditionBattleLineup)(nil), // 45: ExpeditionBattleLineup + (*ExpeditionBattleMapData)(nil), // 46: ExpeditionBattleMapData + (*ExpeditionBattleRouteRecord)(nil), // 47: ExpeditionBattleRouteRecord + (*ExpeditionBattleRouteSettleInfo)(nil), // 48: ExpeditionBattleRouteSettleInfo + (*ExpeditionBattleSetLineupCsReq)(nil), // 49: ExpeditionBattleSetLineupCsReq + (*ExpeditionBattleSetLineupScRsp)(nil), // 50: ExpeditionBattleSetLineupScRsp + (*ExpeditionBattleSettleScNotify)(nil), // 51: ExpeditionBattleSettleScNotify + (*ExpeditionBattleStartCsReq)(nil), // 52: ExpeditionBattleStartCsReq + (*ExpeditionBattleStartScRsp)(nil), // 53: ExpeditionBattleStartScRsp + (*GetExpeditionBattleDataCsReq)(nil), // 54: GetExpeditionBattleDataCsReq + (*GetExpeditionBattleDataScRsp)(nil), // 55: GetExpeditionBattleDataScRsp + (*HLJINHODOPP)(nil), // 56: HLJINHODOPP + (*ILBLJAFMBBK)(nil), // 57: ILBLJAFMBBK + (*IOPNJIOPAFI)(nil), // 58: IOPNJIOPAFI + (*MMBIBKFEFNG)(nil), // 59: MMBIBKFEFNG + (*ODHFCEALPFN)(nil), // 60: ODHFCEALPFN + (*PEMMJHDFOLM)(nil), // 61: PEMMJHDFOLM + (*SocialPlayPreCheckEnterRoomCsReq)(nil), // 62: SocialPlayPreCheckEnterRoomCsReq + (*VoracityInvasionGetDataCsReq)(nil), // 63: VoracityInvasionGetDataCsReq + (HPICFNLLMCO)(0), // 64: HPICFNLLMCO + (AvatarType)(0), // 65: AvatarType + (*NMEGIPHFFDA)(nil), // 66: NMEGIPHFFDA + (*ODLEEMAALIP)(nil), // 67: ODLEEMAALIP + (MFPDAKOIOED)(0), // 68: MFPDAKOIOED +} +var file_protocol_proto_ungrouped_proto_depIdxs = []int32{ + 20, // 0: B51RacingAgendaInfo.match:type_name -> B51RacingMatchInfo + 16, // 1: B51RacingAgendaInfo.development:type_name -> B51RacingDevelopmentInfo + 4, // 2: B51RacingCarLiveryCsReq.livery:type_name -> B51RacingCarLivery + 4, // 3: B51RacingCarLiveryScRsp.livery:type_name -> B51RacingCarLivery + 4, // 4: B51RacingChallengeCarData.livery:type_name -> B51RacingCarLivery + 1, // 5: B51RacingChallengeData.team_point_list:type_name -> KVP + 7, // 6: B51RacingChallengeData.car:type_name -> B51RacingChallengeCarData + 21, // 7: B51RacingChallengeEndMatchCsReq.stats:type_name -> B51RacingMatchStats + 64, // 8: B51RacingChallengeEndMatchCsReq.result_type:type_name -> HPICFNLLMCO + 4, // 9: B51RacingChallengeUpdateCarCsReq.livery:type_name -> B51RacingCarLivery + 7, // 10: B51RacingChallengeUpdateCarScRsp.car:type_name -> B51RacingChallengeCarData + 23, // 11: B51RacingCycleData.part_info:type_name -> B51RacingPartInfo + 36, // 12: B51RacingCycleData.stat_info:type_name -> B51RacingStatInfo + 2, // 13: B51RacingCycleData.agenda:type_name -> B51RacingAgendaInfo + 4, // 14: B51RacingCycleData.livery:type_name -> B51RacingCarLivery + 24, // 15: B51RacingCycleData.pre_match_track_info_list:type_name -> B51RacingPreMatchTrackInfo + 21, // 16: B51RacingEndMatchCsReq.stats:type_name -> B51RacingMatchStats + 64, // 17: B51RacingEndMatchCsReq.result_type:type_name -> HPICFNLLMCO + 2, // 18: B51RacingEndMatchScRsp.agenda:type_name -> B51RacingAgendaInfo + 2, // 19: B51RacingMissionChangeAgendaScNotify.agenda:type_name -> B51RacingAgendaInfo + 23, // 20: B51RacingReplacePartScRsp.part_info:type_name -> B51RacingPartInfo + 36, // 21: B51RacingSelectDevelopActionScRsp.stat_info:type_name -> B51RacingStatInfo + 2, // 22: B51RacingSelectDevelopActionScRsp.agenda:type_name -> B51RacingAgendaInfo + 23, // 23: B51RacingSelectDevelopActionScRsp.part_info:type_name -> B51RacingPartInfo + 23, // 24: B51RacingSelectDevelopPartScRsp.part_info:type_name -> B51RacingPartInfo + 2, // 25: B51RacingSelectDevelopPartScRsp.agenda:type_name -> B51RacingAgendaInfo + 36, // 26: B51RacingSelectDevelopPartScRsp.stat_info:type_name -> B51RacingStatInfo + 4, // 27: B51RacingStartCycleCsReq.livery:type_name -> B51RacingCarLivery + 15, // 28: B51RacingStartCycleScRsp.cycle:type_name -> B51RacingCycleData + 20, // 29: B51RacingStartMatchScRsp.match:type_name -> B51RacingMatchInfo + 1, // 30: B51RacingStatInfo.stat_value_list:type_name -> KVP + 1, // 31: B51RacingStatInfo.target_stat_tier_list:type_name -> KVP + 65, // 32: ExpeditionBattleAvatarInfo.avatar_type:type_name -> AvatarType + 46, // 33: ExpeditionBattleEndScNotify.map_data:type_name -> ExpeditionBattleMapData + 40, // 34: ExpeditionBattleLevelRecord.avatar_damage_list:type_name -> ExpeditionBattleAvatarDamage + 41, // 35: ExpeditionBattleLineup.avatar_list:type_name -> ExpeditionBattleAvatarInfo + 47, // 36: ExpeditionBattleMapData.route_record_list:type_name -> ExpeditionBattleRouteRecord + 41, // 37: ExpeditionBattleRouteRecord.avatar_list:type_name -> ExpeditionBattleAvatarInfo + 43, // 38: ExpeditionBattleRouteRecord.fun_list:type_name -> ExpeditionBattleFunRecord + 44, // 39: ExpeditionBattleRouteRecord.level_record_list:type_name -> ExpeditionBattleLevelRecord + 40, // 40: ExpeditionBattleRouteSettleInfo.avatar_damage_list:type_name -> ExpeditionBattleAvatarDamage + 45, // 41: ExpeditionBattleSetLineupCsReq.lineup_list:type_name -> ExpeditionBattleLineup + 45, // 42: ExpeditionBattleSetLineupScRsp.lineup_list:type_name -> ExpeditionBattleLineup + 48, // 43: ExpeditionBattleSettleScNotify.route_settle_list:type_name -> ExpeditionBattleRouteSettleInfo + 43, // 44: ExpeditionBattleSettleScNotify.fun_list:type_name -> ExpeditionBattleFunRecord + 46, // 45: GetExpeditionBattleDataScRsp.map_data_list:type_name -> ExpeditionBattleMapData + 66, // 46: HLJINHODOPP.order_list:type_name -> NMEGIPHFFDA + 59, // 47: IOPNJIOPAFI.filter:type_name -> MMBIBKFEFNG + 0, // 48: IOPNJIOPAFI.ADPEKIOPFKG:type_name -> GGLMGBPOCOP + 67, // 49: ODHFCEALPFN.IIIAGPNGPJM:type_name -> ODLEEMAALIP + 67, // 50: ODHFCEALPFN.FMCCHBBIJKF:type_name -> ODLEEMAALIP + 67, // 51: ODHFCEALPFN.OFNINJLHHDE:type_name -> ODLEEMAALIP + 68, // 52: SocialPlayPreCheckEnterRoomCsReq.GJNMHILINHC:type_name -> MFPDAKOIOED + 53, // [53:53] is the sub-list for method output_type + 53, // [53:53] is the sub-list for method input_type + 53, // [53:53] is the sub-list for extension type_name + 53, // [53:53] is the sub-list for extension extendee + 0, // [0:53] is the sub-list for field type_name +} + +func init() { file_protocol_proto_ungrouped_proto_init() } +func file_protocol_proto_ungrouped_proto_init() { + if File_protocol_proto_ungrouped_proto != nil { + return + } + file_protocol_proto_StarRail_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_protocol_proto_ungrouped_proto_rawDesc), len(file_protocol_proto_ungrouped_proto_rawDesc)), + NumEnums: 1, + NumMessages: 63, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_protocol_proto_ungrouped_proto_goTypes, + DependencyIndexes: file_protocol_proto_ungrouped_proto_depIdxs, + EnumInfos: file_protocol_proto_ungrouped_proto_enumTypes, + MessageInfos: file_protocol_proto_ungrouped_proto_msgTypes, + }.Build() + File_protocol_proto_ungrouped_proto = out.File + file_protocol_proto_ungrouped_proto_goTypes = nil + file_protocol_proto_ungrouped_proto_depIdxs = nil +} diff --git a/protocol/proto/ungrouped.proto b/protocol/proto/ungrouped.proto new file mode 100644 index 0000000..ebdcbee --- /dev/null +++ b/protocol/proto/ungrouped.proto @@ -0,0 +1,388 @@ +// Additional game protocol schemas missing from the repository base file. +// Extracted from the user-supplied Ungrouped.proto; that file has no revision marker. +// CmdID routing is intentionally not inferred from this schema-only source. +syntax = "proto3"; + +option go_package = "gac-hkrpg-go/protocol/proto"; + +import "protocol/proto/StarRail.proto"; + +// This shared key/value structure was imported as Common.proto in the supplied bundle. +// It is included here because that dependency was not included. +message KVP { + uint32 value = 3; // offset: 28 + uint32 key = 9; // offset: 24 +} + +enum GGLMGBPOCOP { + GGLMGBPOCOP_BMKFIMEJPOM = 0; + GGLMGBPOCOP_MLOGJAKGHHD = 1; + GGLMGBPOCOP_ILMKHLENPNI = 2; +} + +message B51RacingAgendaInfo { + uint32 day = 2; // offset: 40 + B51RacingMatchInfo match = 6; // offset: 32 + B51RacingDevelopmentInfo development = 11; // offset: 24 +} + +message B51RacingCarDisplay { + repeated uint32 equipped_part_id_list = 3; // offset: 16 + uint32 car_id = 4; // offset: 32 + uint32 car_num = 6; // offset: 36 + uint32 paint_id = 12; // offset: 40 +} + +message B51RacingCarLivery { + uint32 car_num = 1; // offset: 28 + uint32 paint_id = 3; // offset: 24 +} + +message B51RacingCarLiveryCsReq { + B51RacingCarLivery livery = 9; // offset: 16 +} + +message B51RacingCarLiveryScRsp { + B51RacingCarLivery livery = 5; // offset: 16 + uint32 retcode = 10; // offset: 32 +} + +message B51RacingChallengeCarData { + uint32 cycle_id = 10; // offset: 40 + repeated uint32 equipped_part_id_list = 13; // offset: 24 + B51RacingCarLivery livery = 15; // offset: 16 +} + +message B51RacingChallengeData { + uint32 driver_id = 1; // offset: 40 + repeated KVP team_point_list = 13; // offset: 24 + B51RacingChallengeCarData car = 14; // offset: 16 +} + +message B51RacingChallengeEndMatchCsReq { + uint32 match_id = 1; // offset: 44 + B51RacingMatchStats stats = 2; // offset: 16 + uint32 rank = 7; // offset: 36 + uint32 random_seed = 9; // offset: 32 + HPICFNLLMCO result_type = 11; // offset: 52 + uint32 finish_time_ms = 13; // offset: 48 + uint32 track_id = 14; // offset: 40 +} + +message B51RacingChallengeEndMatchScRsp { + uint32 match_id = 7; // offset: 32 + uint32 track_id = 10; // offset: 24 + uint32 retcode = 11; // offset: 36 + uint32 score = 13; // offset: 28 +} + +message B51RacingChallengeStartMatchCsReq { + uint32 track_id = 4; // offset: 32 + uint32 match_id = 9; // offset: 24 + uint32 driver_id = 12; // offset: 28 +} + +message B51RacingChallengeStartMatchScRsp { + uint32 random_seed = 3; // offset: 28 + uint32 driver_id = 11; // offset: 24 + uint32 retcode = 12; // offset: 32 +} + +message B51RacingChallengeUpdateCarCsReq { + repeated uint32 equipped_part_id_list = 3; // offset: 32 + uint32 cycle_id = 11; // offset: 40 + B51RacingCarLivery livery = 12; // offset: 24 +} + +message B51RacingChallengeUpdateCarScRsp { + uint32 retcode = 5; // offset: 32 + B51RacingChallengeCarData car = 15; // offset: 24 +} + +message B51RacingCycleData { + uint32 car_id = 2; // offset: 76 + uint32 finished_match_num = 3; // offset: 64 + B51RacingPartInfo part_info = 4; // offset: 16 + B51RacingStatInfo stat_info = 6; // offset: 32 + B51RacingAgendaInfo agenda = 7; // offset: 48 + B51RacingCarLivery livery = 10; // offset: 56 + uint32 driver_id = 11; // offset: 68 + uint32 cycle_id = 12; // offset: 72 + repeated B51RacingPreMatchTrackInfo pre_match_track_info_list = 13; // offset: 40 +} + +message B51RacingDevelopmentInfo { + repeated uint32 active_part_id_list = 4; // offset: 24 + repeated uint32 active_action_id_list = 6; // offset: 32 + uint32 finished_action_num = 10; // offset: 40 +} + +message B51RacingDriverUnlockScNotify { + repeated uint32 driver_id_list = 10; // offset: 24 +} + +message B51RacingEndMatchCsReq { + B51RacingMatchStats stats = 2; // offset: 24 + uint32 random_seed = 7; // offset: 48 + HPICFNLLMCO result_type = 8; // offset: 32 + uint32 track_id = 10; // offset: 40 + uint32 finish_time_ms = 11; // offset: 36 + uint32 rank = 15; // offset: 44 +} + +message B51RacingEndMatchScRsp { + uint32 finished_match_num = 3; // offset: 36 + B51RacingAgendaInfo agenda = 5; // offset: 24 + uint32 retcode = 8; // offset: 32 + uint32 added_team_point = 10; // offset: 40 + bool is_cycle_finished = 12; // offset: 44 +} + +message B51RacingMatchInfo { + uint32 match_id = 2; // offset: 32 + uint32 random_seed = 4; // offset: 28 + uint32 track_id = 6; // offset: 24 + uint64 start_time_ms = 14; // offset: 40 +} + +message B51RacingMatchStats { + uint32 charge_count = 2; // offset: 44 + uint32 lap_time_ms = 6; // offset: 36 + uint32 overtake_count = 7; // offset: 24 + uint32 collision_count = 9; // offset: 32 + uint32 drift_time_ms = 10; // offset: 48 + uint32 max_speed = 11; // offset: 52 + bool is_perfect = 12; // offset: 40 + uint32 boost_count = 14; // offset: 28 +} + +message B51RacingMissionChangeAgendaScNotify { + B51RacingAgendaInfo agenda = 2; // offset: 16 + repeated uint32 unlocked_driver_id_list = 6; // offset: 32 +} + +message B51RacingPartInfo { + repeated uint32 equipped_part_id_list = 7; // offset: 24 + uint32 equipped_decal_id = 9; // offset: 40 + repeated uint32 developed_part_id_list = 15; // offset: 32 +} + +message B51RacingPreMatchTrackInfo { + uint32 match_id = 3; // offset: 28 + uint32 track_id = 4; // offset: 24 + uint32 day = 10; // offset: 32 +} + +message B51RacingReplacePartScRsp { + B51RacingPartInfo part_info = 11; // offset: 16 + uint32 retcode = 12; // offset: 32 +} + +message B51RacingSelectDevelopActionCsReq { + uint32 action_id = 3; // offset: 24 +} + +message B51RacingSelectDevelopActionScRsp { + uint32 remaining_action_count = 1; // offset: 48 + bool is_development_finished = 2; // offset: 56 + B51RacingStatInfo stat_info = 4; // offset: 24 + uint32 retcode = 6; // offset: 52 + B51RacingAgendaInfo agenda = 10; // offset: 32 + B51RacingPartInfo part_info = 15; // offset: 40 +} + +message B51RacingSelectDevelopPartCsReq { + uint32 part_id = 14; // offset: 24 +} + +message B51RacingSelectDevelopPartScRsp { + uint32 remaining_select_count = 4; // offset: 52 + B51RacingPartInfo part_info = 5; // offset: 24 + B51RacingAgendaInfo agenda = 7; // offset: 32 + uint32 retcode = 11; // offset: 48 + B51RacingStatInfo stat_info = 15; // offset: 40 +} + +message B51RacingSetDriverCsReq { + uint32 driver_id = 9; // offset: 24 +} + +message B51RacingSetDriverScRsp { + uint32 retcode = 3; // offset: 24 + uint32 driver_id = 14; // offset: 28 +} + +message B51RacingStartCycleCsReq { + uint32 car_id = 9; // offset: 36 + uint32 cycle_id = 11; // offset: 32 + B51RacingCarLivery livery = 15; // offset: 24 +} + +message B51RacingStartCycleScRsp { + B51RacingCycleData cycle = 2; // offset: 16 + uint32 retcode = 9; // offset: 32 +} + +message B51RacingStartMatchCsReq { + uint32 match_id = 13; // offset: 24 + uint32 track_id = 15; // offset: 28 +} + +message B51RacingStartMatchScRsp { + B51RacingMatchInfo match = 9; // offset: 16 + uint32 retcode = 11; // offset: 32 +} + +message B51RacingStatInfo { + repeated KVP stat_value_list = 6; // offset: 24 + repeated KVP target_stat_tier_list = 13; // offset: 32 +} + +message BlindBoxResetPoolPositionCsReq { + uint32 pool_id = 12; // offset: 24 +} + +message BlindBoxResetPoolPositionScRsp { + uint32 retcode = 1; // offset: 24 + uint32 pool_id = 7; // offset: 28 +} + +message CHNMJPLALEC { + uint32 retcode = 3; // offset: 24 + uint64 MJNENEAAOAE = 5; // offset: 32 +} + +message ExpeditionBattleAvatarDamage { + uint32 avatar_id = 11; // offset: 24 + uint64 damage = 14; // offset: 32 +} + +message ExpeditionBattleAvatarInfo { + AvatarType avatar_type = 9; // offset: 28 + uint32 avatar_id = 12; // offset: 24 +} + +message ExpeditionBattleEndScNotify { + ExpeditionBattleMapData map_data = 7; // offset: 16 + bool is_new_record = 12; // offset: 32 +} + +message ExpeditionBattleFunRecord { + uint32 fun_id = 2; // offset: 24 + uint32 avatar_id = 7; // offset: 28 + uint64 fun_count = 9; // offset: 32 +} + +message ExpeditionBattleLevelRecord { + uint32 level_id = 2; // offset: 40 + repeated ExpeditionBattleAvatarDamage avatar_damage_list = 7; // offset: 16 + repeated uint32 dead_avatar_id_list = 8; // offset: 24 +} + +message ExpeditionBattleLineup { + repeated ExpeditionBattleAvatarInfo avatar_list = 1; // offset: 24 + uint32 route_id = 9; // offset: 32 +} + +message ExpeditionBattleMapData { + uint32 remaining_challenge_count = 3; // offset: 36 + uint32 map_id = 11; // offset: 32 + repeated ExpeditionBattleRouteRecord route_record_list = 15; // offset: 16 +} + +message ExpeditionBattleRouteRecord { + uint32 passed_level = 1; // offset: 72 + uint32 battle_round_count = 3; // offset: 60 + bool is_new_record = 4; // offset: 56 + repeated ExpeditionBattleAvatarInfo avatar_list = 6; // offset: 16 + uint32 route_id = 7; // offset: 68 + uint64 buff_value = 8; // offset: 48 + uint32 last_level_percent = 9; // offset: 64 + repeated ExpeditionBattleFunRecord fun_list = 10; // offset: 32 + repeated ExpeditionBattleLevelRecord level_record_list = 13; // offset: 40 +} + +message ExpeditionBattleRouteSettleInfo { + repeated uint32 dead_avatar_id_list = 4; // offset: 16 + uint64 buff_value = 6; // offset: 56 + uint32 route_id = 8; // offset: 48 + bool is_passed = 10; // offset: 52 + repeated ExpeditionBattleAvatarDamage avatar_damage_list = 11; // offset: 24 + uint32 battle_round_count = 13; // offset: 44 + uint32 last_level_percent = 14; // offset: 40 +} + +message ExpeditionBattleSetLineupCsReq { + repeated ExpeditionBattleLineup lineup_list = 11; // offset: 24 + uint32 map_id = 15; // offset: 32 +} + +message ExpeditionBattleSetLineupScRsp { + uint32 retcode = 1; // offset: 32 + uint32 map_id = 5; // offset: 36 + repeated ExpeditionBattleLineup lineup_list = 12; // offset: 24 +} + +message ExpeditionBattleSettleScNotify { + uint32 map_id = 1; // offset: 44 + repeated ExpeditionBattleRouteSettleInfo route_settle_list = 3; // offset: 32 + repeated ExpeditionBattleFunRecord fun_list = 4; // offset: 16 + uint32 level_turn = 6; // offset: 40 +} + +message ExpeditionBattleStartCsReq { + uint32 map_id = 6; // offset: 24 +} + +message ExpeditionBattleStartScRsp { + uint32 retcode = 3; // offset: 24 +} + +message GetExpeditionBattleDataCsReq { +} + +message GetExpeditionBattleDataScRsp { + repeated ExpeditionBattleMapData map_data_list = 7; // offset: 16 + uint32 retcode = 15; // offset: 32 +} + +message HLJINHODOPP { + repeated NMEGIPHFFDA order_list = 3; // offset: 24 + uint32 retcode = 6; // offset: 32 +} + +message ILBLJAFMBBK { + uint64 FIEOPKNBHKJ = 6; // offset: 24 +} + +message IOPNJIOPAFI { + MMBIBKFEFNG filter = 13; // offset: 16 + GGLMGBPOCOP ADPEKIOPFKG = 15; // offset: 32 +} + +message MMBIBKFEFNG { + bool FMHBALCGMFF = 3; // offset: 32 + repeated uint32 PODLFMBEKEG = 9; // offset: 16 +} + +message ODHFCEALPFN { + repeated ODLEEMAALIP IIIAGPNGPJM = 1; // offset: 24 + uint32 JJPLIMAENEB = 3; // offset: 48 + uint32 JNBIALMKFCL = 5; // offset: 52 + repeated ODLEEMAALIP FMCCHBBIJKF = 7; // offset: 40 + repeated ODLEEMAALIP OFNINJLHHDE = 9; // offset: 16 + bool LLMLOGNFFCD = 10; // offset: 60 + uint32 mode = 13; // offset: 56 +} + +message PEMMJHDFOLM { +} + +message SocialPlayPreCheckEnterRoomCsReq { + uint32 teleport_id = 7; // offset: 32 + MFPDAKOIOED GJNMHILINHC = 8; // offset: 24 + uint32 entry_id = 15; // offset: 28 +} + +message VoracityInvasionGetDataCsReq { +} diff --git a/resources/ActivityPreviewPolicy.json b/resources/ActivityPreviewPolicy.json new file mode 100644 index 0000000..6b4edbe --- /dev/null +++ b/resources/ActivityPreviewPolicy.json @@ -0,0 +1,89 @@ +{ + "source": "User requested event-page previews with partial gameplay support. Match actual captured panel prefabs; do not publish unsupported panels indiscriminately.", + "panels": [ + { + "prefab": "UI/Quest/Widget/QuestNewbieMissionPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/SingleTaskActivityPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestDoubleFarmCocoonPanel.prefab", + "data_handler": "GetMultipleDropInfo" + }, + { + "prefab": "UI/Quest/Widget/QuestFarmMultipleDropPanel.prefab", + "data_handler": "GetMultipleDropInfo" + }, + { + "prefab": "UI/Quest/Widget/QuestFarmMultipleDrop2SetPanel.prefab", + "data_handler": "GetMultipleDropInfo" + }, + { + "prefab": "UI/Quest/Widget/QuestFarmTripleDropPanel.prefab", + "data_handler": "GetMultipleDropInfo" + }, + { + "prefab": "UI/Quest/Widget/QuestFarmTripleDrop2SetPanel.prefab", + "data_handler": "GetMultipleDropInfo" + }, + { + "prefab": "UI/Quest/Widget/QuestDoubleFarmCocoonAnnivPanel.prefab", + "data_handler": "GetMultipleDropInfo" + }, + { + "prefab": "UI/Quest/Widget/RoleTrialPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestRoleStrengthenPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestActivityRelicBoxPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestExploitMissionPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestAbyssPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestChallengeStoryPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestHarmonyHeroPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestActivityActivePanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/PlayerReturnPanel.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/PlayerReturnRecallPanel_Ver470.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/AnniversarySevenDayRewardPanelVersion0210.prefab", + "data_handler": "QuestState" + }, + { + "prefab": "UI/Quest/Widget/QuestComicDessertPanel.prefab", + "data_handler": "ComicDessertPreview" + } + ], + "verification_note": "2026-10-24 bounded AssetMgr.Exists capture checked all 290 distinct panel/icon paths in the current captured catalog. Publish only policy-listed families with both assets present and no explicit display-item dependencies. QuestState uses existing quest data (the mechanism behind the families the Client already displays). Multiple-drop panels receive explicit zero-quota preview state, not invented reward counts or a promise of increased drops. 2026-10-24 afternoon: added eleven further asset-complete families without display-item dependencies (RoleTrial, RoleStrengthen, RelicBox, ExploitMission, Abyss, ChallengeStory, HarmonyHero, ActivityActive, PlayerReturn, PlayerReturnRecall_Ver470, AnniversarySevenDay_0210). Their pages open through quest data; per-event gameplay beyond quest state remains unsupported until each event's own data callback is captured. Excluded for missing assets: SevenDayRewardPanel family and SingleTimeReward variants (TabIcon absent), QuestMainStory*/QuestPrincipalLineBannerPanel/QuestSubStory140Panel (TabIcon absent), QuestColleaguePanel/VoracityInvasionQuestPanel/QuestBlindBoxPanel (prefab absent). Excluded despite complete assets because each needs its own gameplay data handlers: the Rogue/Chimera/DrinkMaker/Monopoly/Parkour/CakeRace and other display-item families. | 2026-10-24 late: ComicDessert (panel 50142, module 5014201) published deliberately with its display items so the Client's own open-page requests reveal this system's real (obfuscated) data callbacks; its cake-shop gameplay handlers are still unimplemented, so the page is a preview until those handlers land. ElfRestaurant (50042) has a full named command family (15 CsReq incl. GetElfRestaurantData/EnterElfRestaurantNextDay) but needs its own config tables before safe answers. | 2026-10-24 late: ComicDessert (50142) preview REVERTED — publishing it with display items but no data handlers coincided with the phone-menu buttons and walking top bar disappearing (user report 23:xx). Its proper data path must land before republish. | 2026-10-25: ComicDessert republished with actual current Cycle/Level catalog (4/15) and named GetData callback returning resource first cycle; this is a preview entry, Start/Finish remain unimplemented until their string/uint payload consumers are verified.", + "allow_display_item_panels": [ + 50142 + ] +} diff --git a/resources/AhaHelpConfig.json b/resources/AhaHelpConfig.json new file mode 100644 index 0000000..2c29216 --- /dev/null +++ b/resources/AhaHelpConfig.json @@ -0,0 +1,8 @@ +{ + "source": "User-provided Aha's Help table, codex-clipboard-a1f99ec8-00cb-4d12-9516-91cca5f3623d.png", + "levels": [ + {"BuffID": 3034011, "ProgressPercent": 0, "BuffLevel": 1}, + {"BuffID": 3034012, "ProgressPercent": 0.4, "BuffLevel": 2}, + {"BuffID": 3034013, "ProgressPercent": 0.7, "BuffLevel": 3} + ] +} diff --git a/resources/ChallengePeakSceneOverrides.json b/resources/ChallengePeakSceneOverrides.json new file mode 100644 index 0000000..17cde2c --- /dev/null +++ b/resources/ChallengePeakSceneOverrides.json @@ -0,0 +1,287 @@ +{ + "binary_sha256": "235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86", + "source_file_offset": "0x114c212", + "decoded_byte_length": 9101, + "data": { + "challenge_peak_extra_data": [ + { + "group_id": 1, + "stages": { + "101": { + "npc_monster_id": 3003041, + "map_entrance_id": 3013501, + "maze_group_id": 8 + }, + "102": { + "npc_monster_id": 3014020, + "map_entrance_id": 3013501, + "maze_group_id": 8 + }, + "103": { + "npc_monster_id": 4033030, + "map_entrance_id": 3013501, + "maze_group_id": 8 + }, + "104": { + "npc_monster_id": 4044010, + "map_entrance_id": 3013501, + "maze_group_id": 8 + } + } + }, + { + "group_id": 2, + "stages": { + "201": { + "npc_monster_id": 2013020, + "map_entrance_id": 3013701, + "maze_group_id": 10 + }, + "202": { + "npc_monster_id": 2034010, + "map_entrance_id": 3013701, + "maze_group_id": 10 + }, + "203": { + "npc_monster_id": 3003014, + "map_entrance_id": 3013701, + "maze_group_id": 10 + }, + "204": { + "npc_monster_id": 4015010, + "map_entrance_id": 3013701, + "maze_group_id": 10 + } + } + }, + { + "group_id": 3, + "stages": { + "301": { + "npc_monster_id": 4053020, + "map_entrance_id": 3012302, + "maze_group_id": 5 + }, + "302": { + "npc_monster_id": 8024011, + "map_entrance_id": 3012302, + "maze_group_id": 5 + }, + "303": { + "npc_monster_id": 4064010, + "map_entrance_id": 3012302, + "maze_group_id": 5 + }, + "304": { + "npc_monster_id": 3025016, + "map_entrance_id": 3012302, + "maze_group_id": 72 + } + } + }, + { + "group_id": 4, + "stages": { + "401": { + "npc_monster_id": 3024030, + "map_entrance_id": 3014001, + "maze_group_id": 7 + }, + "402": { + "npc_monster_id": 4034010, + "map_entrance_id": 3014001, + "maze_group_id": 7 + }, + "403": { + "npc_monster_id": 3024020, + "map_entrance_id": 3014001, + "maze_group_id": 7 + }, + "404": { + "npc_monster_id": 5014010, + "map_entrance_id": 3014001, + "maze_group_id": 7 + } + } + }, + { + "group_id": 5, + "stages": { + "6": { + "npc_monster_id": 5013040, + "map_entrance_id": 3014101, + "maze_group_id": 5 + }, + "502": { + "npc_monster_id": 4014030, + "map_entrance_id": 3014101, + "maze_group_id": 5 + }, + "503": { + "npc_monster_id": 4044010, + "map_entrance_id": 3014101, + "maze_group_id": 5 + }, + "504": { + "npc_monster_id": 5014020, + "map_entrance_id": 3014101, + "maze_group_id": 5 + } + } + }, + { + "group_id": 6, + "stages": { + "601": { + "npc_monster_id": 5023010, + "map_entrance_id": 3014201, + "maze_group_id": 7 + }, + "602": { + "npc_monster_id": 5014010, + "map_entrance_id": 3014201, + "maze_group_id": 7 + }, + "603": { + "npc_monster_id": 4034010, + "map_entrance_id": 3014201, + "maze_group_id": 7 + }, + "604": { + "npc_monster_id": 5024010, + "map_entrance_id": 3014201, + "maze_group_id": 7 + } + } + }, + { + "group_id": 7, + "stages": { + "701": { + "npc_monster_id": 5023020, + "map_entrance_id": 3000204, + "maze_group_id": 4 + }, + "702": { + "npc_monster_id": 5014020, + "map_entrance_id": 3000204, + "maze_group_id": 4 + }, + "703": { + "npc_monster_id": 4014020, + "map_entrance_id": 3000204, + "maze_group_id": 4 + }, + "704": { + "npc_monster_id": 8025010, + "map_entrance_id": 3000204, + "maze_group_id": 4 + } + } + }, + { + "group_id": 8, + "stages": { + "801": { + "npc_monster_id": 3024010, + "map_entrance_id": 3014401, + "maze_group_id": 6 + }, + "802": { + "npc_monster_id": 1014010, + "map_entrance_id": 3014401, + "maze_group_id": 6 + }, + "803": { + "npc_monster_id": 5024010, + "map_entrance_id": 3014401, + "maze_group_id": 6 + }, + "804": { + "npc_monster_id": 5014030, + "map_entrance_id": 3014401, + "maze_group_id": 6 + } + } + }, + { + "group_id": 9, + "stages": { + "901": { + "npc_monster_id": 1004010, + "map_entrance_id": 3014501, + "maze_group_id": 7 + }, + "902": { + "npc_monster_id": 5014010, + "map_entrance_id": 3014501, + "maze_group_id": 7 + }, + "903": { + "npc_monster_id": 4053010, + "map_entrance_id": 3014501, + "maze_group_id": 7 + }, + "904": { + "npc_monster_id": 4035010, + "map_entrance_id": 3014501, + "maze_group_id": 9 + } + } + }, + { + "group_id": 10, + "stages": { + "1001": { + "npc_monster_id": 5014020, + "map_entrance_id": 3014602, + "maze_group_id": 9 + }, + "1002": { + "npc_monster_id": 4014030, + "map_entrance_id": 3014602, + "maze_group_id": 9 + }, + "1003": { + "npc_monster_id": 3024030, + "map_entrance_id": 3014602, + "maze_group_id": 9 + }, + "1004": { + "npc_monster_id": 5034010, + "map_entrance_id": 3014602, + "maze_group_id": 9 + } + } + }, + { + "group_id": 11, + "stages": { + "1101": { + "npc_monster_id": 5034010, + "map_entrance_id": 3014701, + "maze_group_id": 9 + }, + "1102": { + "npc_monster_id": 5014030, + "map_entrance_id": 3014701, + "maze_group_id": 9 + }, + "1103": { + "npc_monster_id": 3003014, + "map_entrance_id": 3014701, + "maze_group_id": 9 + }, + "1104": { + "npc_monster_id": 8015030, + "map_entrance_id": 3014701, + "maze_group_id": 9 + } + } + } + ] + }, + "source_kind": "reference-server-embedded-data", + "evidence": "FFGO updated 2026-10-26; battle_diagnostics/ffgo-20261026/challenge_peak_extra_data.json", + "verification": "Reference mapping only; installed Client scene/NPC acceptance remains unverified. Battle events and waves remain from existing Client resources." +} diff --git a/resources/ComicDessertCatalog.json b/resources/ComicDessertCatalog.json new file mode 100644 index 0000000..810893f --- /dev/null +++ b/resources/ComicDessertCatalog.json @@ -0,0 +1,267 @@ +{ + "format_version": 1, + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "evidence_id": "ev_31a861f1a5ebcccd2d483009dfd018235af2e89e88c95e94d7998dc1b03d0298", + "source": "Current named ComicDessert CycleRow/LevelRow FromBinary -> dictionary Add -> lazy flat GetAll chains; no gameplay or scene factories", + "capture_sha256": "b69988a770941778248e63147a9007645f4bca86cf304d420ec3a2e4722d5039", + "cycles": [ + { + "LevelIDList": [ + 101, + 102 + ], + "PerformanceID": 0, + "DeviceUpgradeCount": 1, + "TitleDesc": { + "hash": -2114259963, + "hash64": 7640126297720460135 + }, + "ID": 1, + "ProgressAmount": 0, + "PriceMultiplier": 1.0, + "Title": { + "hash": -1022522522, + "hash64": 5236359564712143485 + } + }, + { + "LevelIDList": [ + 201, + 202, + 203, + 204 + ], + "PerformanceID": 0, + "DeviceUpgradeCount": 7, + "TitleDesc": { + "hash": -2114259966, + "hash64": 6066728301076795830 + }, + "ID": 2, + "ProgressAmount": 30, + "PriceMultiplier": 1.2, + "Title": { + "hash": -1022522521, + "hash64": 11900969163405309140 + } + }, + { + "LevelIDList": [ + 301, + 302, + 303, + 304 + ], + "PerformanceID": 0, + "DeviceUpgradeCount": 9, + "TitleDesc": { + "hash": -2114259965, + "hash64": 11627311549575507185 + }, + "ID": 3, + "ProgressAmount": 60, + "PriceMultiplier": 1.5, + "Title": { + "hash": -1022522520, + "hash64": 3780953812521759690 + } + }, + { + "LevelIDList": [ + 401, + 402, + 403 + ], + "PerformanceID": 0, + "DeviceUpgradeCount": 0, + "TitleDesc": { + "hash": -2114259960, + "hash64": 15572143866349884461 + }, + "ID": 4, + "ProgressAmount": 80, + "PriceMultiplier": 2.0, + "Title": { + "hash": -1022522527, + "hash64": 1314384939105570153 + } + } + ], + "levels": [ + { + "SpecialGuestIDList": [ + 0 + ], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_Test_FriendVisit.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 0, + "RequiredCoin": 0, + "InstructionID": 0, + "ID": 1, + "ExtraLevelResultID": 0, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [ + 0 + ], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_101.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 1, + "RequiredCoin": 400, + "InstructionID": 10350, + "ID": 101, + "ExtraLevelResultID": 1, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_102.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 0, + "RequiredCoin": 800, + "InstructionID": 10350, + "ID": 102, + "ExtraLevelResultID": 0, + "TalkGroupID": 102 + }, + { + "SpecialGuestIDList": [ + 1 + ], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_201.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 1, + "RequiredCoin": 1200, + "InstructionID": 10350, + "ID": 201, + "ExtraLevelResultID": 2, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_202.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 0, + "RequiredCoin": 1800, + "InstructionID": 10350, + "ID": 202, + "ExtraLevelResultID": 0, + "TalkGroupID": 202 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_203.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 2, + "RequiredCoin": 2400, + "InstructionID": 10350, + "ID": 203, + "ExtraLevelResultID": 2, + "TalkGroupID": 203 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_Limao.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 1, + "RequiredCoin": 4400, + "InstructionID": 10350, + "ID": 204, + "ExtraLevelResultID": 3, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [ + 3 + ], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_301.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 1, + "RequiredCoin": 3300, + "InstructionID": 10352, + "ID": 301, + "ExtraLevelResultID": 4, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_302.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 0, + "RequiredCoin": 4200, + "InstructionID": 10351, + "ID": 302, + "ExtraLevelResultID": 0, + "TalkGroupID": 302 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_303.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 0, + "RequiredCoin": 5100, + "InstructionID": 10351, + "ID": 303, + "ExtraLevelResultID": 0, + "TalkGroupID": 303 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_304.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 1, + "RequiredCoin": 6000, + "InstructionID": 10351, + "ID": 304, + "ExtraLevelResultID": 5, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [ + 4 + ], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_401.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 1, + "RequiredCoin": 6500, + "InstructionID": 10351, + "ID": 401, + "ExtraLevelResultID": 6, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_402.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 0, + "RequiredCoin": 10000, + "InstructionID": 10351, + "ID": 402, + "ExtraLevelResultID": 0, + "TalkGroupID": 402 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_GreedyFeast.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 1, + "RequiredCoin": 18888, + "InstructionID": 10351, + "ID": 403, + "ExtraLevelResultID": 7, + "TalkGroupID": 0 + }, + { + "SpecialGuestIDList": [], + "LevelConfigPath": "Config/Level/LittleGame/ComicDessert/LG_LittleGame_ComicDessert_LongTail.json", + "RequiredCustomerCount": 0, + "ExtraLevelResultType": 0, + "RequiredCoin": 0, + "InstructionID": 10351, + "ID": 999, + "ExtraLevelResultID": 0, + "TalkGroupID": 0 + } + ] +} diff --git a/resources/CurrencyWarsActivityConditions.json b/resources/CurrencyWarsActivityConditions.json new file mode 100644 index 0000000..a46f620 --- /dev/null +++ b/resources/CurrencyWarsActivityConditions.json @@ -0,0 +1,38 @@ +{ + "format_version": 1, + "source_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "target_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "capture_sha256": "d012e22f3a3f836b71aaf42311ae78fd72603707ea4dde9d4ed832eb61db1944", + "source": "Exact live GridFightActivityData.StateData.ConditionConfig ActivityPanelConditionRow; Handbook on_btn_go observed PreGuide2, condition callback uses ConditionType.FinishMainMission. No UI state or mission save mutation.", + "guide_policy": "complete_declared_guide_finish_main_missions", + "condition_types": { + "FinishMainMission": 1 + }, + "rows": [ + { + "PreConditions": [ + { + "Param": "21", + "Type": 2 + }, + { + "Param": "1034109", + "Type": 1 + } + ], + "GuideConditions": [ + { + "Param": "8047206", + "Type": 1 + } + ], + "ActivityOpenActivityModule": 0, + "ActivityGoto": 6418, + "PanelID": 71101, + "ShopOnlyActivityModule": 0, + "GuideGoto": 6417, + "GuideTakeMission": 0, + "ActivityGotoStoryLineRestore": false + } + ] +} diff --git a/resources/CurrencyWarsBonfire.json b/resources/CurrencyWarsBonfire.json new file mode 100644 index 0000000..3e4f222 --- /dev/null +++ b/resources/CurrencyWarsBonfire.json @@ -0,0 +1,1321 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "source_binary_sha256": "235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86", + "source_kind": "reference-implementation", + "source": "FFGO embedded GridFight Excel rows plus FFGO declarative TeaBreakOption recipes; not original Client scripts or a native Client capture.", + "compatibility_scope": "Event IDs must also be present on the active Client node; no reference route or saved run is imported. Only explicitly supported effects execute.", + "source_excel_sha256": "ee011f39af3040124873d461ff49af1623fd9655d9ba0d98c0a877247318030f", + "source_custom_sha256": "5a5fb5bf4335b7bc84dbecfbf0e0b12ae6f25a1603bc68b534e3c75490d8bbf3", + "tables": { + "events": [ + { + "ID": 10600301, + "PetPalID": 6, + "DialogID": 1060030101 + }, + { + "ID": 10600801, + "PetPalID": 6, + "DialogID": 1060080101 + }, + { + "ID": 11100101, + "PetPalID": 11, + "DialogID": 1110010101 + }, + { + "ID": 10700101, + "PetPalID": 7, + "DialogID": 1070010101 + }, + { + "ID": 10300501, + "PetPalID": 3, + "DialogID": 1030050101 + }, + { + "ID": 10300601, + "PetPalID": 3, + "DialogID": 1030060101 + }, + { + "ID": 10300701, + "PetPalID": 3, + "DialogID": 1030070101 + }, + { + "ID": 10300801, + "PetPalID": 3, + "DialogID": 1030080101 + }, + { + "ID": 10600901, + "PetPalID": 6, + "DialogID": 1060090101 + }, + { + "ID": 10600401, + "PetPalID": 6, + "DialogID": 1060040101 + }, + { + "ID": 11200101, + "PetPalID": 12, + "DialogID": 1120010101 + }, + { + "ID": 11200102, + "PetPalID": 12, + "DialogID": 1120010201 + }, + { + "ID": 11200103, + "PetPalID": 12, + "DialogID": 1120010301 + }, + { + "ID": 10200401, + "PetPalID": 2, + "DialogID": 1020040101 + }, + { + "ID": 11100601, + "PetPalID": 11, + "DialogID": 1110060101 + }, + { + "ID": 11100701, + "PetPalID": 11, + "DialogID": 1110070101 + }, + { + "ID": 10200501, + "PetPalID": 2, + "DialogID": 1020050101 + }, + { + "ID": 10200601, + "PetPalID": 2, + "DialogID": 1020060101 + }, + { + "ID": 11200201, + "PetPalID": 12, + "DialogID": 1120020101 + }, + { + "ID": 11200301, + "PetPalID": 12, + "DialogID": 1120030101 + }, + { + "ID": 11200401, + "PetPalID": 12, + "DialogID": 1120040101 + }, + { + "ID": 11100301, + "PetPalID": 11, + "DialogID": 1110030101 + }, + { + "ID": 10400101, + "PetPalID": 4, + "DialogID": 1040010101 + }, + { + "ID": 10400102, + "PetPalID": 4, + "DialogID": 1040010201 + }, + { + "ID": 10400103, + "PetPalID": 4, + "DialogID": 1040010301 + }, + { + "ID": 10400201, + "PetPalID": 4, + "DialogID": 1040020101 + }, + { + "ID": 10400202, + "PetPalID": 4, + "DialogID": 1040020201 + }, + { + "ID": 10400203, + "PetPalID": 4, + "DialogID": 1040020301 + }, + { + "ID": 10400301, + "PetPalID": 4, + "DialogID": 1040030101 + }, + { + "ID": 10400302, + "PetPalID": 4, + "DialogID": 1040030201 + }, + { + "ID": 10400303, + "PetPalID": 4, + "DialogID": 1040030301 + }, + { + "ID": 10400401, + "PetPalID": 4, + "DialogID": 1040040101 + }, + { + "ID": 10400402, + "PetPalID": 4, + "DialogID": 1040040201 + }, + { + "ID": 10400403, + "PetPalID": 4, + "DialogID": 1040040301 + }, + { + "ID": 10800401, + "PetPalID": 8, + "DialogID": 1080040101 + }, + { + "ID": 10800402, + "PetPalID": 8 + }, + { + "ID": 10800501, + "PetPalID": 8, + "DialogID": 1080050101 + }, + { + "ID": 10800502, + "PetPalID": 8 + } + ], + "options": [ + { + "EventID": 10600301, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire106003011.json", + "DialogID": 1060030102, + "OptionShowType": "None" + }, + { + "EventID": 10600801, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire106008011.json", + "DialogID": 1060080102, + "OptionShowType": "None" + }, + { + "EventID": 11100101, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire111001011.json", + "DialogID": 1110010102, + "EffectParamList": [ + { + "Value": 200.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10600901, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire106009011.json", + "DialogID": 1060090102, + "OptionShowType": "None" + }, + { + "EventID": 10600401, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire106004011.json", + "DialogID": 1060040102, + "OptionShowType": "None" + }, + { + "EventID": 10700101, + "OptionID": 1, + "OptionShowType": "None" + }, + { + "EventID": 10300501, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire103005011.json", + "DialogID": 1030050102, + "OptionShowType": "None" + }, + { + "EventID": 10300601, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire103006011.json", + "DialogID": 1030060102, + "OptionShowType": "None" + }, + { + "EventID": 10300701, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire103007011.json", + "DialogID": 1030070102, + "OptionShowType": "None" + }, + { + "EventID": 10300801, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire103008011.json", + "DialogID": 1030080102, + "EffectParamList": [ + { + "Value": 201001.0 + }, + { + "Value": 8009.0 + }, + { + "Value": 1213.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 11200101, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001011.json", + "DialogID": 1120010102, + "OptionShowType": "CopyRoleMaxStar" + }, + { + "EventID": 11200101, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001012.json", + "DialogID": 1120010103, + "OptionShowType": "CopyRoleMaxRarity" + }, + { + "EventID": 11200101, + "OptionID": 3, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001013.json", + "DialogID": 1120010104, + "OptionShowType": "CopyRoleMaxEquipCnt" + }, + { + "EventID": 11200102, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001021.json", + "DialogID": 1120010202, + "OptionShowType": "CopyRoleMaxStar" + }, + { + "EventID": 11200102, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001022.json", + "DialogID": 1120010203, + "OptionShowType": "CopyRoleMaxRarity" + }, + { + "EventID": 11200102, + "OptionID": 3, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001023.json", + "DialogID": 1120010204, + "OptionShowType": "CopyRoleMaxEquipCnt" + }, + { + "EventID": 11200103, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001031.json", + "DialogID": 1120010302, + "OptionShowType": "CopyRoleMaxStar" + }, + { + "EventID": 11200103, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001032.json", + "DialogID": 1120010303, + "OptionShowType": "CopyRoleMaxRarity" + }, + { + "EventID": 11200103, + "OptionID": 3, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112001033.json", + "DialogID": 1120010304, + "OptionShowType": "CopyRoleMaxEquipCnt" + }, + { + "EventID": 10200401, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire102004011.json", + "DialogID": 1020040102, + "OptionShowType": "None" + }, + { + "EventID": 11100601, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire111006011.json", + "DialogID": 1110060102, + "OptionShowType": "None" + }, + { + "EventID": 11100701, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire111007011.json", + "DialogID": 1110070102, + "OptionShowType": "None" + }, + { + "EventID": 10200501, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire102005011.json", + "DialogID": 1020050102, + "EffectParamList": [ + { + "Value": 8.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10200601, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire102006011.json", + "DialogID": 1020060102, + "EffectParamList": [ + { + "Value": 40.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 11200201, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112002011.json", + "DialogID": 1120020102, + "EffectParamList": [ + { + "Value": 232.0 + }, + { + "Value": 3.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 11200301, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112003011.json", + "DialogID": 1120030102, + "EffectParamList": [ + { + "Value": 205.0 + }, + { + "Value": 2.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 11200401, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire112004011.json", + "DialogID": 1120040102, + "EffectParamList": [ + { + "Value": 206.0 + }, + { + "Value": 1.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 11100301, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire111003011.json", + "DialogID": 1110030102, + "EffectParamList": [ + { + "Value": 27971503.953125 + }, + {} + ], + "OptionShowType": "None" + }, + { + "EventID": 10400101, + "OptionID": 1, + "OptionShowType": "None" + }, + { + "EventID": 10400101, + "OptionID": 2, + "OptionShowType": "None" + }, + { + "EventID": 10400102, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104001021.json", + "DialogID": 1040010202, + "EffectParamList": [ + { + "Value": 200016.0 + }, + { + "Value": 1.0 + }, + { + "Value": 8.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400102, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104001022.json", + "DialogID": 1040010203, + "EffectParamList": [ + { + "Value": 104.0 + }, + { + "Value": 2.0 + }, + { + "Value": 5.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400102, + "OptionID": 3, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104001023.json", + "DialogID": 1040010204, + "EffectParamList": [ + { + "Value": 200007.0 + }, + { + "Value": 1.0 + }, + { + "Value": 4.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400102, + "OptionID": 4, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104001024.json", + "DialogID": 1040010205, + "EffectParamList": [ + { + "Value": 3.0 + }, + { + "Value": 20.0 + }, + { + "Value": 10.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400102, + "OptionID": 5, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104001025.json", + "DialogID": 1040010206, + "OptionShowType": "None" + }, + { + "EventID": 10400103, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104001031.json", + "DialogID": 1040010302, + "EffectParamList": [ + { + "Value": 350201.0 + }, + { + "Value": 1.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10400103, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104001032.json", + "DialogID": 1040010303, + "EffectParamList": [ + { + "Value": 1.0 + }, + { + "Value": 5.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10400201, + "OptionID": 1, + "OptionShowType": "None" + }, + { + "EventID": 10400201, + "OptionID": 2, + "OptionShowType": "None" + }, + { + "EventID": 10400202, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104002021.json", + "DialogID": 1040020202, + "EffectParamList": [ + { + "Value": 200016.0 + }, + { + "Value": 1.0 + }, + { + "Value": 8.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400202, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104002022.json", + "DialogID": 1040020203, + "EffectParamList": [ + { + "Value": 105.0 + }, + { + "Value": 2.0 + }, + { + "Value": 6.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400202, + "OptionID": 3, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104002023.json", + "DialogID": 1040020204, + "EffectParamList": [ + { + "Value": 200007.0 + }, + { + "Value": 1.0 + }, + { + "Value": 4.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400202, + "OptionID": 4, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104002024.json", + "DialogID": 1040020205, + "EffectParamList": [ + { + "Value": 3.0 + }, + { + "Value": 20.0 + }, + { + "Value": 10.0 + } + ], + "OptionShowType": "HpCondition" + }, + { + "EventID": 10400202, + "OptionID": 5, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104002025.json", + "DialogID": 1040020206, + "OptionShowType": "None" + }, + { + "EventID": 10400203, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104002031.json", + "DialogID": 1040020302, + "EffectParamList": [ + { + "Value": 350201.0 + }, + { + "Value": 1.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10400203, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104002032.json", + "DialogID": 1040020303, + "EffectParamList": [ + { + "Value": 1.0 + }, + { + "Value": 5.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10400301, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104003011.json", + "DialogID": 1040030102, + "EffectParamList": [ + { + "Value": 99.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10400301, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104003012.json", + "DialogID": 1040030103, + "EffectParamList": [ + { + "Value": 47030101.0 + }, + { + "Value": 3.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10400401, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104004011.json", + "DialogID": 1040040102, + "EffectParamList": [ + { + "Value": 99.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10400401, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire104004012.json", + "DialogID": 1040040103, + "EffectParamList": [ + { + "Value": 47030101.0 + }, + { + "Value": 3.0 + } + ], + "OptionShowType": "None" + }, + { + "EventID": 10800401, + "OptionID": 1, + "OptionShowType": "None" + }, + { + "EventID": 10800401, + "OptionID": 2, + "OptionShowType": "None" + }, + { + "EventID": 10800402, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004021.json", + "DialogID": 1080040202, + "EffectParamList": [ + { + "Value": 10800401.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004022.json", + "DialogID": 1080040203, + "EffectParamList": [ + { + "Value": 10800402.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 3, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004023.json", + "DialogID": 1080040204, + "EffectParamList": [ + { + "Value": 10800403.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 4, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004024.json", + "DialogID": 1080040205, + "EffectParamList": [ + { + "Value": 10800404.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 5, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004025.json", + "DialogID": 1080040206, + "EffectParamList": [ + { + "Value": 10800405.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 6, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004026.json", + "DialogID": 1080040207, + "EffectParamList": [ + { + "Value": 10800406.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 7, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004027.json", + "DialogID": 1080040208, + "EffectParamList": [ + { + "Value": 10800407.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 8, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004028.json", + "DialogID": 1080040209, + "EffectParamList": [ + { + "Value": 10800408.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800402, + "OptionID": 9, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108004029.json", + "DialogID": 1080040210, + "EffectParamList": [ + { + "Value": 10800409.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800501, + "OptionID": 1, + "OptionShowType": "None" + }, + { + "EventID": 10800501, + "OptionID": 2, + "OptionShowType": "None" + }, + { + "EventID": 10800502, + "OptionID": 1, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005021.json", + "DialogID": 1080050202, + "EffectParamList": [ + { + "Value": 10800501.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 2, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005022.json", + "DialogID": 1080050203, + "EffectParamList": [ + { + "Value": 10800502.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 3, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005023.json", + "DialogID": 1080050204, + "EffectParamList": [ + { + "Value": 10800503.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 4, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005024.json", + "DialogID": 1080050205, + "EffectParamList": [ + { + "Value": 10800504.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 5, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005025.json", + "DialogID": 1080050206, + "EffectParamList": [ + { + "Value": 10800505.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 6, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005026.json", + "DialogID": 1080050207, + "EffectParamList": [ + { + "Value": 10800506.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 7, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005027.json", + "DialogID": 1080050208, + "EffectParamList": [ + { + "Value": 10800507.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 8, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005028.json", + "DialogID": 1080050209, + "EffectParamList": [ + { + "Value": 10800508.0 + } + ], + "OptionShowType": "PreGenBonus" + }, + { + "EventID": 10800502, + "OptionID": 9, + "JsonPath": "Config/Level/GridFight/petpal/bonfire/GridFightBonfire108005029.json", + "DialogID": 1080050210, + "EffectParamList": [ + { + "Value": 10800509.0 + } + ], + "OptionShowType": "PreGenBonus" + } + ], + "heal": [ + { + "ChapterID": 1, + "HealNum": 20 + }, + { + "ChapterID": 2, + "HealNum": 20 + }, + { + "ChapterID": 3, + "HealNum": 20 + } + ] + }, + "configs": { + "petpal/bonfire/GridFightBonfire102004011.json": { + "ID": 10200401, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "SetRule", + "Name": "PetPalNextAffix", + "Value": 1 + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire102005011.json": { + "ID": 10200501, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "AddEnemyDifficulty", + "Amount": "-#1" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire102006011.json": { + "ID": 10200601, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "SetRule", + "Name": "PetPalStarDown", + "Value": "#1" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire103005011.json": { + "ID": 10300501, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "SetRule", + "Name": "PetPalAutoBuy", + "Value": "random(1, 3)" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire103006011.json": { + "ID": 10300601, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "SnapshotRoles" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire103007011.json": { + "ID": 10300701, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "SnapshotRoles" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire103008011.json": { + "ID": 10300801, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "AddRole", + "RoleID": 122402, + "Count": 1, + "Star": 2 + }, + { + "Action": "AddRole", + "RoleID": 800902, + "Count": 1, + "Star": 1 + }, + { + "Action": "AddRole", + "RoleID": 121302, + "Count": 1, + "Star": 1 + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire104003011.json": { + "ID": 10400301, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "AddGlobalHp", + "Amount": "#1" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire104004011.json": { + "ID": 10400401, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "AddGlobalHp", + "Amount": "#1" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire106003011.json": { + "ID": 10600301, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "MoveNodesToChapterStart", + "NodeType": "Monster", + "Chapters": [ + 2, + 3 + ] + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire106004011.json": { + "ID": 10600401, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "MoveNodesToChapterStart", + "NodeType": "Monster", + "Chapters": [ + 3 + ] + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire106008011.json": { + "ID": 10600801, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "MoveNodesToChapterStart", + "NodeType": "Supply", + "Chapters": [ + 2, + 3 + ] + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire106009011.json": { + "ID": 10600901, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "MoveNodesToChapterStart", + "NodeType": "Supply", + "Chapters": [ + 3 + ] + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire111001011.json": { + "ID": 11100101, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "SetRule", + "Name": "PetPalSpotLight", + "Value": "#1" + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire111003011.json": { + "ID": 11100301, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "SetRule", + "Name": "PetPalPiggyTransform", + "Value": 1 + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire111006011.json": { + "ID": 11100601, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "AddRule", + "Name": "PetPalNextAugment", + "Amount": 1 + } + ] + } + ] + }, + "petpal/bonfire/GridFightBonfire111007011.json": { + "ID": 11100701, + "Option": 1, + "Status": "Implemented", + "Engine": "TeaBreakOption", + "Effects": [ + { + "Trigger": "Immediately", + "Actions": [ + { + "Action": "AddRule", + "Name": "PetPalNextAugment", + "Amount": 1 + } + ] + } + ] + } + } +} diff --git a/resources/CurrencyWarsCrafts.json b/resources/CurrencyWarsCrafts.json new file mode 100644 index 0000000..fa3fbc6 --- /dev/null +++ b/resources/CurrencyWarsCrafts.json @@ -0,0 +1,829 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "capture_evidence": "ev_6f8a3ae11f40d4118d84f3057cfd297df3ec23318b93d00e15e6b6e5cde9fc97", + "scope": "Complete 91-row current Client craft table, read via verified flat-table getter on managed handbook callback; no gameplay action invoked.", + "entries": [ + { + "CostEquipList": [ + 350201, + 350201 + ], + "CraftEquipID": 35030101, + "ID": 35030101, + "CraftID": 1 + }, + { + "CostEquipList": [ + 350202, + 350201 + ], + "CraftEquipID": 35030102, + "ID": 35030102, + "CraftID": 2 + }, + { + "CostEquipList": [ + 350203, + 350201 + ], + "CraftEquipID": 35030103, + "ID": 35030103, + "CraftID": 3 + }, + { + "CostEquipList": [ + 350204, + 350201 + ], + "CraftEquipID": 35030104, + "ID": 35030104, + "CraftID": 4 + }, + { + "CostEquipList": [ + 350205, + 350201 + ], + "CraftEquipID": 35030105, + "ID": 35030105, + "CraftID": 5 + }, + { + "CostEquipList": [ + 350206, + 350201 + ], + "CraftEquipID": 35030106, + "ID": 35030106, + "CraftID": 6 + }, + { + "CostEquipList": [ + 350207, + 350201 + ], + "CraftEquipID": 35030107, + "ID": 35030107, + "CraftID": 7 + }, + { + "CostEquipList": [ + 350208, + 350201 + ], + "CraftEquipID": 35030108, + "ID": 35030108, + "CraftID": 8 + }, + { + "CostEquipList": [ + 350202, + 350202 + ], + "CraftEquipID": 35030202, + "ID": 35030202, + "CraftID": 9 + }, + { + "CostEquipList": [ + 350203, + 350202 + ], + "CraftEquipID": 35030203, + "ID": 35030203, + "CraftID": 10 + }, + { + "CostEquipList": [ + 350204, + 350202 + ], + "CraftEquipID": 35030204, + "ID": 35030204, + "CraftID": 11 + }, + { + "CostEquipList": [ + 350205, + 350202 + ], + "CraftEquipID": 35030205, + "ID": 35030205, + "CraftID": 12 + }, + { + "CostEquipList": [ + 350206, + 350202 + ], + "CraftEquipID": 35030206, + "ID": 35030206, + "CraftID": 13 + }, + { + "CostEquipList": [ + 350207, + 350202 + ], + "CraftEquipID": 35030207, + "ID": 35030207, + "CraftID": 14 + }, + { + "CostEquipList": [ + 350208, + 350202 + ], + "CraftEquipID": 35030208, + "ID": 35030208, + "CraftID": 15 + }, + { + "CostEquipList": [ + 350203, + 350203 + ], + "CraftEquipID": 35030303, + "ID": 35030303, + "CraftID": 16 + }, + { + "CostEquipList": [ + 350204, + 350203 + ], + "CraftEquipID": 35030304, + "ID": 35030304, + "CraftID": 17 + }, + { + "CostEquipList": [ + 350205, + 350203 + ], + "CraftEquipID": 35030305, + "ID": 35030305, + "CraftID": 18 + }, + { + "CostEquipList": [ + 350206, + 350203 + ], + "CraftEquipID": 35030306, + "ID": 35030306, + "CraftID": 19 + }, + { + "CostEquipList": [ + 350207, + 350203 + ], + "CraftEquipID": 35030307, + "ID": 35030307, + "CraftID": 20 + }, + { + "CostEquipList": [ + 350208, + 350203 + ], + "CraftEquipID": 35030308, + "ID": 35030308, + "CraftID": 21 + }, + { + "CostEquipList": [ + 350204, + 350204 + ], + "CraftEquipID": 35030404, + "ID": 35030404, + "CraftID": 22 + }, + { + "CostEquipList": [ + 350205, + 350204 + ], + "CraftEquipID": 35030405, + "ID": 35030405, + "CraftID": 23 + }, + { + "CostEquipList": [ + 350206, + 350204 + ], + "CraftEquipID": 35030406, + "ID": 35030406, + "CraftID": 24 + }, + { + "CostEquipList": [ + 350207, + 350204 + ], + "CraftEquipID": 35030407, + "ID": 35030407, + "CraftID": 25 + }, + { + "CostEquipList": [ + 350208, + 350204 + ], + "CraftEquipID": 35030408, + "ID": 35030408, + "CraftID": 26 + }, + { + "CostEquipList": [ + 350205, + 350205 + ], + "CraftEquipID": 35030505, + "ID": 35030505, + "CraftID": 27 + }, + { + "CostEquipList": [ + 350206, + 350205 + ], + "CraftEquipID": 35030506, + "ID": 35030506, + "CraftID": 28 + }, + { + "CostEquipList": [ + 350207, + 350205 + ], + "CraftEquipID": 35030507, + "ID": 35030507, + "CraftID": 29 + }, + { + "CostEquipList": [ + 350208, + 350205 + ], + "CraftEquipID": 35030508, + "ID": 35030508, + "CraftID": 30 + }, + { + "CostEquipList": [ + 350206, + 350206 + ], + "CraftEquipID": 35030606, + "ID": 35030606, + "CraftID": 31 + }, + { + "CostEquipList": [ + 350207, + 350206 + ], + "CraftEquipID": 35030607, + "ID": 35030607, + "CraftID": 32 + }, + { + "CostEquipList": [ + 350208, + 350206 + ], + "CraftEquipID": 35030608, + "ID": 35030608, + "CraftID": 33 + }, + { + "CostEquipList": [ + 350207, + 350207 + ], + "CraftEquipID": 35030707, + "ID": 35030707, + "CraftID": 34 + }, + { + "CostEquipList": [ + 350208, + 350207 + ], + "CraftEquipID": 35030708, + "ID": 35030708, + "CraftID": 35 + }, + { + "CostEquipList": [ + 350208, + 350208 + ], + "CraftEquipID": 35030808, + "ID": 35030808, + "CraftID": 36 + }, + { + "CostEquipList": [ + 350601, + 350601 + ], + "CraftEquipID": 350701, + "ID": 350701, + "CraftID": 37 + }, + { + "CostEquipList": [ + 350601, + 350602 + ], + "CraftEquipID": 350701, + "ID": 350701, + "CraftID": 38 + }, + { + "CostEquipList": [ + 350602, + 350602 + ], + "CraftEquipID": 350701, + "ID": 350701, + "CraftID": 39 + }, + { + "CostEquipList": [ + 350601, + 350208 + ], + "CraftEquipID": 35051003, + "ID": 35051003, + "CraftID": 41 + }, + { + "CostEquipList": [ + 350601, + 350206 + ], + "CraftEquipID": 35051005, + "ID": 35051005, + "CraftID": 42 + }, + { + "CostEquipList": [ + 350601, + 350207 + ], + "CraftEquipID": 35051006, + "ID": 35051006, + "CraftID": 43 + }, + { + "CostEquipList": [ + 350601, + 350202 + ], + "CraftEquipID": 35051007, + "ID": 35051007, + "CraftID": 44 + }, + { + "CostEquipList": [ + 350601, + 350205 + ], + "CraftEquipID": 35051008, + "ID": 35051008, + "CraftID": 45 + }, + { + "CostEquipList": [ + 350601, + 350204 + ], + "CraftEquipID": 35051010, + "ID": 35051010, + "CraftID": 46 + }, + { + "CostEquipList": [ + 350601, + 350201 + ], + "CraftEquipID": 35051011, + "ID": 35051011, + "CraftID": 47 + }, + { + "CostEquipList": [ + 350601, + 350203 + ], + "CraftEquipID": 35051012, + "ID": 35051012, + "CraftID": 48 + }, + { + "CostEquipList": [ + 350602, + 350201 + ], + "CraftEquipID": 35052001, + "ID": 35052001, + "CraftID": 49 + }, + { + "CostEquipList": [ + 350602, + 350207 + ], + "CraftEquipID": 35052002, + "ID": 35052002, + "CraftID": 50 + }, + { + "CostEquipList": [ + 350602, + 350204 + ], + "CraftEquipID": 35052003, + "ID": 35052003, + "CraftID": 51 + }, + { + "CostEquipList": [ + 350602, + 350208 + ], + "CraftEquipID": 35052004, + "ID": 35052004, + "CraftID": 52 + }, + { + "CostEquipList": [ + 350602, + 350206 + ], + "CraftEquipID": 35052008, + "ID": 35052008, + "CraftID": 53 + }, + { + "CostEquipList": [ + 350602, + 350205 + ], + "CraftEquipID": 35052006, + "ID": 35052006, + "CraftID": 54 + }, + { + "CostEquipList": [ + 350602, + 350203 + ], + "CraftEquipID": 35052007, + "ID": 35052007, + "CraftID": 55 + }, + { + "CostEquipList": [ + 350602, + 350202 + ], + "CraftEquipID": 35052011, + "ID": 35052011, + "CraftID": 56 + }, + { + "CostEquipList": [ + 350602, + 352101 + ], + "CraftEquipID": 35052012, + "ID": 0, + "CraftID": 57 + }, + { + "CostEquipList": [ + 350601, + 352101 + ], + "CraftEquipID": 35052012, + "ID": 0, + "CraftID": 58 + }, + { + "CostEquipList": [ + 350601, + 350201 + ], + "CraftEquipID": 355100202, + "ID": 0, + "CraftID": 59 + }, + { + "CostEquipList": [ + 350601, + 350202 + ], + "CraftEquipID": 355100102, + "ID": 0, + "CraftID": 60 + }, + { + "CostEquipList": [ + 350601, + 350203 + ], + "CraftEquipID": 355100302, + "ID": 0, + "CraftID": 61 + }, + { + "CostEquipList": [ + 350601, + 350204 + ], + "CraftEquipID": 355100902, + "ID": 0, + "CraftID": 62 + }, + { + "CostEquipList": [ + 350601, + 350205 + ], + "CraftEquipID": 355101002, + "ID": 0, + "CraftID": 63 + }, + { + "CostEquipList": [ + 350601, + 350206 + ], + "CraftEquipID": 355100802, + "ID": 0, + "CraftID": 64 + }, + { + "CostEquipList": [ + 350601, + 350207 + ], + "CraftEquipID": 355100402, + "ID": 0, + "CraftID": 65 + }, + { + "CostEquipList": [ + 350601, + 350208 + ], + "CraftEquipID": 355100502, + "ID": 0, + "CraftID": 66 + }, + { + "CostEquipList": [ + 350602, + 350201 + ], + "CraftEquipID": 355200102, + "ID": 0, + "CraftID": 69 + }, + { + "CostEquipList": [ + 350602, + 350202 + ], + "CraftEquipID": 355200402, + "ID": 0, + "CraftID": 70 + }, + { + "CostEquipList": [ + 350602, + 350203 + ], + "CraftEquipID": 355200802, + "ID": 0, + "CraftID": 71 + }, + { + "CostEquipList": [ + 350602, + 350204 + ], + "CraftEquipID": 355200302, + "ID": 0, + "CraftID": 72 + }, + { + "CostEquipList": [ + 350602, + 350205 + ], + "CraftEquipID": 355200602, + "ID": 0, + "CraftID": 73 + }, + { + "CostEquipList": [ + 350602, + 350206 + ], + "CraftEquipID": 355200202, + "ID": 0, + "CraftID": 74 + }, + { + "CostEquipList": [ + 350602, + 350207 + ], + "CraftEquipID": 355200502, + "ID": 0, + "CraftID": 75 + }, + { + "CostEquipList": [ + 350602, + 350208 + ], + "CraftEquipID": 355200902, + "ID": 0, + "CraftID": 76 + }, + { + "CostEquipList": [ + 350602, + 352101 + ], + "CraftEquipID": 355200702, + "ID": 0, + "CraftID": 77 + }, + { + "CostEquipList": [ + 350601, + 352101 + ], + "CraftEquipID": 355200702, + "ID": 0, + "CraftID": 78 + }, + { + "CostEquipList": [ + 350203, + 350201 + ], + "CraftEquipID": 47030103, + "ID": 0, + "CraftID": 79 + }, + { + "CostEquipList": [ + 350205, + 350201 + ], + "CraftEquipID": 47030105, + "ID": 0, + "CraftID": 80 + }, + { + "CostEquipList": [ + 350206, + 350201 + ], + "CraftEquipID": 47030106, + "ID": 0, + "CraftID": 81 + }, + { + "CostEquipList": [ + 350202, + 350202 + ], + "CraftEquipID": 47030202, + "ID": 0, + "CraftID": 82 + }, + { + "CostEquipList": [ + 350205, + 350202 + ], + "CraftEquipID": 47030205, + "ID": 0, + "CraftID": 83 + }, + { + "CostEquipList": [ + 350207, + 350202 + ], + "CraftEquipID": 47030207, + "ID": 0, + "CraftID": 84 + }, + { + "CostEquipList": [ + 350208, + 350202 + ], + "CraftEquipID": 47030208, + "ID": 0, + "CraftID": 85 + }, + { + "CostEquipList": [ + 350203, + 350203 + ], + "CraftEquipID": 47030303, + "ID": 0, + "CraftID": 86 + }, + { + "CostEquipList": [ + 350206, + 350203 + ], + "CraftEquipID": 47030306, + "ID": 0, + "CraftID": 87 + }, + { + "CostEquipList": [ + 350207, + 350203 + ], + "CraftEquipID": 47030307, + "ID": 0, + "CraftID": 88 + }, + { + "CostEquipList": [ + 350206, + 350204 + ], + "CraftEquipID": 47030406, + "ID": 0, + "CraftID": 89 + }, + { + "CostEquipList": [ + 350208, + 350204 + ], + "CraftEquipID": 47030408, + "ID": 0, + "CraftID": 90 + }, + { + "CostEquipList": [ + 350208, + 350201 + ], + "CraftEquipID": 47030108, + "ID": 0, + "CraftID": 91 + }, + { + "CostEquipList": [ + 350201, + 350201 + ], + "CraftEquipID": 47030101, + "ID": 0, + "CraftID": 92 + }, + { + "CostEquipList": [ + 350201, + 350202 + ], + "CraftEquipID": 47030102, + "ID": 0, + "CraftID": 93 + }, + { + "CostEquipList": [ + 350208, + 350205 + ], + "CraftEquipID": 47030508, + "ID": 0, + "CraftID": 94 + } + ], + "source_capture_sha256": "f977b3bfecefbef1acaad57ccfa58979a46044df6608d176d04f55b3a8569c03" +} diff --git a/resources/CurrencyWarsCurrentRoles.json b/resources/CurrencyWarsCurrentRoles.json new file mode 100644 index 0000000..1d8d644 --- /dev/null +++ b/resources/CurrencyWarsCurrentRoles.json @@ -0,0 +1,149 @@ +{ + "format_version":1, + "client_assembly_sha256":"4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "evidence_id":"ev_adc692f1db7b5ec4e27c8d1336114f2aaf63a1a6b844fc7a27add445959f71d4", + "source":"Current Client role getter at RVA 0x1de43480, initialized flat dictionary. Bounded 12-row serialization per managed heartbeat marker, no role constructors invoked.", + "roles":[ +{"TraitList":[1001,2010],"BackendRankList":[100101,100102,100103,100104,100105,100106],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":1001,"FrontBackType":2,"SpecialAvatarID":3701001,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":3,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1001}, +{"TraitList":[1001,2002],"BackendRankList":[100301,100302,100303,100304,100305,100306],"MaxSPIcon":"","ChargeType":[1,0],"IsExpert":1,"ID":1003,"FrontBackType":2,"SpecialAvatarID":3701003,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23000,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1003}, +{"TraitList":[1001,1006,2007],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1004,"FrontBackType":1,"SpecialAvatarID":3701004,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1004}, +{"TraitList":[1002,2009],"BackendRankList":[100601,100602,100603,100604,100605,100606],"MaxSPIcon":"","ChargeType":[0],"IsExpert":1,"ID":1006,"FrontBackType":0,"SpecialAvatarID":3701006,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23007,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1006}, +{"TraitList":[1003,2008],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1009,"FrontBackType":1,"SpecialAvatarID":3701009,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1009}, +{"TraitList":[1003,2003],"BackendRankList":[101301,101302,101303,101304,101305,101306],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1013,"FrontBackType":0,"SpecialAvatarID":3701013,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1013}, +{"TraitList":[1013,2004],"BackendRankList":[101401,101402,101403,101404,101405,101406],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1014Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":1014,"FrontBackType":0,"SpecialAvatarID":3701014,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23045,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1014}, +{"TraitList":[1013,2011,3003],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1015,"FrontBackType":1,"SpecialAvatarID":3701015,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1015}, +{"TraitList":[1005,3001],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":11011,"FrontBackType":1,"SpecialAvatarID":3701101,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1101}, +{"TraitList":[1005,2009],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1102,"FrontBackType":1,"SpecialAvatarID":3701102,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1102}, +{"TraitList":[1005,2010],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1104,"FrontBackType":1,"SpecialAvatarID":3701104,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1104}, +{"TraitList":[1005,2005],"BackendRankList":[110501,110502,110503,110504,110505,110506],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1105Ultra.png","ChargeType":[2],"IsExpert":0,"ID":1105,"FrontBackType":0,"SpecialAvatarID":3701105,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1105}, +{"TraitList":[1005,2007],"BackendRankList":[110601,110602,110603,110604,110605,110606],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1107Ultra.png","ChargeType":[2,0],"IsExpert":1,"ID":1106,"FrontBackType":2,"SpecialAvatarID":3701106,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1106}, +{"TraitList":[1005,1006,2008],"BackendRankList":[110801,110802,110803,110804,110805,110806],"MaxSPIcon":"","ChargeType":[],"IsExpert":1,"ID":1108,"FrontBackType":0,"SpecialAvatarID":3701108,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1108}, +{"TraitList":[1004,2001],"BackendRankList":[111201,111202,111203,111204,111205,111206],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":1112,"FrontBackType":2,"SpecialAvatarID":3701112,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23016,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1112}, +{"TraitList":[1007,2011],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":1,"ID":1201,"FrontBackType":1,"SpecialAvatarID":3701201,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1201}, +{"TraitList":[1007,2004],"BackendRankList":[120201,120202,120203,120204,120205,120206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1202Ultra.png","ChargeType":[2],"IsExpert":1,"ID":1202,"FrontBackType":2,"SpecialAvatarID":3701202,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1202}, +{"TraitList":[1006,2005],"BackendRankList":[120301,120302,120303,120304,120305,120306],"MaxSPIcon":"","ChargeType":[1,0],"IsExpert":0,"ID":1203,"FrontBackType":2,"SpecialAvatarID":3701203,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23008,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1203}, +{"TraitList":[1007,2003],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1204,"FrontBackType":1,"SpecialAvatarID":3701204,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1204}, +{"TraitList":[1002,2006],"BackendRankList":[120501,120502,120503,120504,120505,120506],"MaxSPIcon":"","ChargeType":[1,3],"IsExpert":1,"ID":1205,"FrontBackType":2,"SpecialAvatarID":3701205,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23009,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1205}, +{"TraitList":[1007,2005,2009],"BackendRankList":[120801,120802,120803,120804,120805,120806],"MaxSPIcon":"","ChargeType":[1],"IsExpert":0,"ID":1208,"FrontBackType":2,"SpecialAvatarID":3701208,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23011,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1208}, +{"TraitList":[1007,1008,2007],"BackendRankList":[120901,120902,120903,120904,120905,120906],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1209Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":1209,"FrontBackType":2,"SpecialAvatarID":3701209,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23012,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1209}, +{"TraitList":[1008,2006],"BackendRankList":[121201,121202,121203,121204,121205,121206],"MaxSPIcon":"","ChargeType":[3,0],"IsExpert":0,"ID":1212,"FrontBackType":2,"SpecialAvatarID":3701212,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23014,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1212}, +{"TraitList":[1001,1007,2011],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1213,"FrontBackType":1,"SpecialAvatarID":3701213,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1213}, +{"TraitList":[1007,2004,2005],"BackendRankList":[121701,121702,121703,121704,121705,121706],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1217Ultra.png","ChargeType":[2],"IsExpert":0,"ID":1217,"FrontBackType":0,"SpecialAvatarID":3701217,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23017,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1217}, +{"TraitList":[1008,2007,2008],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1218,"FrontBackType":1,"SpecialAvatarID":3701218,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1218}, +{"TraitList":[1008,2001],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1220,"FrontBackType":1,"SpecialAvatarID":3701220,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1220}, +{"TraitList":[1008,2004],"BackendRankList":[122101,122102,122103,122104,122105,122106],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1221Ultra.png","ChargeType":[2,1],"IsExpert":0,"ID":1221,"FrontBackType":2,"SpecialAvatarID":3701221,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23030,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1221}, +{"TraitList":[1008,2002,2005],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1222,"FrontBackType":1,"SpecialAvatarID":3701222,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1222}, +{"TraitList":[1008,2001],"BackendRankList":[122301,122302,122303,122304,122305,122306],"MaxSPIcon":"","ChargeType":[1],"IsExpert":1,"ID":1223,"FrontBackType":2,"SpecialAvatarID":3701223,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1223}, +{"TraitList":[1007,2002],"BackendRankList":[122501,122502,122503,122504,122505,122506],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1225Ultra.png","ChargeType":[2],"IsExpert":0,"ID":1225,"FrontBackType":2,"SpecialAvatarID":3701225,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23035,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1225}, +{"TraitList":[1010,2002,2005],"BackendRankList":[130101,130102,130103,130104,130105,130106],"MaxSPIcon":"","ChargeType":[0],"IsExpert":1,"ID":1301,"FrontBackType":0,"SpecialAvatarID":3701301,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1301}, +{"TraitList":[1003,2002],"BackendRankList":[130301,130302,130303,130304,130305,130306],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":1303,"FrontBackType":2,"SpecialAvatarID":3701303,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23019,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1303}, +{"TraitList":[1004,2001,2010],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1304,"FrontBackType":1,"SpecialAvatarID":3701304,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1304}, +{"TraitList":[1003,1006,2001],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1305,"FrontBackType":1,"SpecialAvatarID":3701305,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1305}, +{"TraitList":[1010,2009,2011],"BackendRankList":[130601,130602,130603,130604,130605,130606],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1306Ultra.png","ChargeType":[2],"IsExpert":0,"ID":1306,"FrontBackType":2,"SpecialAvatarID":3701306,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23021,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1306}, +{"TraitList":[1010,2008,3002],"BackendRankList":[130701,130702,130703,130704,130705,130706],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1307Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":1307,"FrontBackType":2,"SpecialAvatarID":3701307,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23022,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1307}, +{"TraitList":[1009,2007],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1308,"FrontBackType":1,"SpecialAvatarID":3701308,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1308}, +{"TraitList":[1010,2001],"BackendRankList":[130901,130902,130903,130904,130905,130906],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":1309,"FrontBackType":2,"SpecialAvatarID":3701309,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23026,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1309}, +{"TraitList":[1002,2002],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1310,"FrontBackType":1,"SpecialAvatarID":3701310,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1310}, +{"TraitList":[1004,2003],"BackendRankList":[131401,131402,131403,131404,131405,131406],"MaxSPIcon":"","ChargeType":[1],"IsExpert":0,"ID":1314,"FrontBackType":2,"SpecialAvatarID":3701314,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23028,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1314}, +{"TraitList":[1009,2002],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1315,"FrontBackType":1,"SpecialAvatarID":3701315,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1315}, +{"TraitList":[1009,2002],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1317,"FrontBackType":1,"SpecialAvatarID":3701317,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1317}, +{"TraitList":[1003,2003],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1401,"FrontBackType":1,"SpecialAvatarID":3701401,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1401}, +{"TraitList":[1011,2004],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1402,"FrontBackType":1,"SpecialAvatarID":3701402,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1402}, +{"TraitList":[1011,2003,2009],"BackendRankList":[140301,140302,140303,140304,140305,140306],"MaxSPIcon":"","ChargeType":[1],"IsExpert":0,"ID":1403,"FrontBackType":0,"SpecialAvatarID":3701403,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23038,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1403}, +{"TraitList":[1012,2006],"BackendRankList":[140401,140402,140403,140404,140405,140406],"MaxSPIcon":"","ChargeType":[3,1],"IsExpert":0,"ID":1404,"FrontBackType":0,"SpecialAvatarID":3701404,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23039,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1404}, +{"TraitList":[1011,2003],"BackendRankList":[140501,140502,140503,140504,140505,140506],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":1405,"FrontBackType":2,"SpecialAvatarID":3701405,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23041,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1405}, +{"TraitList":[1012,2006],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1407,"FrontBackType":1,"SpecialAvatarID":3701407,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1407}, +{"TraitList":[3005],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1408,"FrontBackType":1,"SpecialAvatarID":3701408,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1408}, +{"TraitList":[1011,2005,2006],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1409,"FrontBackType":1,"SpecialAvatarID":3701409,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1409}, +{"TraitList":[1012,2001,2007],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1406,"FrontBackType":1,"SpecialAvatarID":3701406,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1406}, +{"TraitList":[1011,2008],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1410,"FrontBackType":1,"SpecialAvatarID":3701410,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1410}, +{"TraitList":[1012,2011],"BackendRankList":[141201,141202,141203,141204,141205,141206],"MaxSPIcon":"","ChargeType":[1,0],"IsExpert":0,"ID":1412,"FrontBackType":0,"SpecialAvatarID":3701412,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23048,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1412}, +{"TraitList":[1012,2006],"BackendRankList":[141301,141302,141303,141304,141305,141306],"MaxSPIcon":"","ChargeType":[1,3],"IsExpert":0,"ID":1413,"FrontBackType":0,"SpecialAvatarID":3701413,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23049,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1413}, +{"TraitList":[1012,2010],"BackendRankList":[141401,141402,141403,141404,141405,141406],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1414,"FrontBackType":2,"SpecialAvatarID":3701414,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23051,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1414}, +{"TraitList":[1001,2004,2012],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":8007,"FrontBackType":1,"SpecialAvatarID":3708007,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":8007}, +{"TraitList":[2006,3001],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":11012,"FrontBackType":1,"SpecialAvatarID":3701101,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1101}, +{"TraitList":[1011,1012,3004],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1415,"FrontBackType":1,"SpecialAvatarID":3701415,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1415}, +{"TraitList":[1006,2011,2012],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1501,"FrontBackType":1,"SpecialAvatarID":3701501,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23053,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1501}, +{"TraitList":[1007,2012],"BackendRankList":[150201,150202,150203,150204,150205,150206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1502Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":1502,"FrontBackType":0,"SpecialAvatarID":3701502,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23054,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1502}, +{"TraitList":[1006,2003],"BackendRankList":[130201,130202,130203,130204,130205,130206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1302Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":1302,"FrontBackType":0,"SpecialAvatarID":3701302,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23018,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1302}, +{"TraitList":[1010,2002],"BackendRankList":[132101,132102,132103,132104,132105,132106],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":1321,"FrontBackType":0,"SpecialAvatarID":3701321,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23050,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1321}, +{"TraitList":[1001,2004,2012],"BackendRankList":[800901,800902,800903,800904,800905,800906],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_8009Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":8009,"FrontBackType":2,"SpecialAvatarID":3708009,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":8009}, +{"TraitList":[1009,2001],"BackendRankList":[150401,150402,150403,150404,150405,150406],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1504Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":1504,"FrontBackType":0,"SpecialAvatarID":3701504,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23056,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1504}, +{"TraitList":[1006,2012],"BackendRankList":[150501,150502,150503,150504,150505,150506],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1505Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":1505,"FrontBackType":0,"SpecialAvatarID":3701505,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23058,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1505}, +{"TraitList":[1002,2008],"BackendRankList":[100501,100502,100503,100504,100505,100506],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1005Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":1005,"FrontBackType":0,"SpecialAvatarID":3701005,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23006,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1005}, +{"TraitList":[1002,2012,3006],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":15061,"FrontBackType":1,"SpecialAvatarID":3701506,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1506}, +{"TraitList":[1002,2012,3006],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":15062,"FrontBackType":1,"SpecialAvatarID":3701506,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1506}, +{"TraitList":[1002,2012,3006],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":15063,"FrontBackType":1,"SpecialAvatarID":3701506,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1506}, +{"TraitList":[100502,200302],"BackendRankList":[10040201,10040202,10040203,10040204,10040205,10040206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1004Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":100402,"FrontBackType":0,"SpecialAvatarID":3701004,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23004,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1004}, +{"TraitList":[100802,200202],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":100502,"FrontBackType":1,"SpecialAvatarID":3701005,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1005}, +{"TraitList":[101102,200202],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":110302,"FrontBackType":1,"SpecialAvatarID":3701103,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1103}, +{"TraitList":[100402,200202,201002],"BackendRankList":[11050201,11050202,11050203,11050204,11050205,11050206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1105Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":110502,"FrontBackType":2,"SpecialAvatarID":3701105,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1105}, +{"TraitList":[100402,200802,300502],"BackendRankList":[11070201,11070202,11070203,11070204,11070205,11070206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1107Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":110702,"FrontBackType":0,"SpecialAvatarID":3701107,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23002,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1107}, +{"TraitList":[100602,200102],"BackendRankList":[11120201,11120202,11120203,11120204,11120205,11120206],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":111202,"FrontBackType":0,"SpecialAvatarID":3701112,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23016,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1112}, +{"TraitList":[100402,201002],"BackendRankList":[12030201,12030202,12030203,12030204,12030205,12030206],"MaxSPIcon":"","ChargeType":[1,0],"IsExpert":0,"ID":120302,"FrontBackType":0,"SpecialAvatarID":3701203,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23008,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1203}, +{"TraitList":[100702,200602],"BackendRankList":[12040201,12040202,12040203,12040204,12040205,12040206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1204Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":120402,"FrontBackType":0,"SpecialAvatarID":3701204,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23010,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1204}, +{"TraitList":[100702,200802],"BackendRankList":[12050201,12050202,12050203,12050204,12050205,12050206],"MaxSPIcon":"","ChargeType":[1,3,0],"IsExpert":0,"ID":120502,"FrontBackType":0,"SpecialAvatarID":3701205,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23009,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1205}, +{"TraitList":[100902,200802,201102],"BackendRankList":[12080201,12080202,12080203,12080204,12080205,12080206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1208Ultra.png","ChargeType":[1,2],"IsExpert":0,"ID":120802,"FrontBackType":2,"SpecialAvatarID":3701208,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23011,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1208}, +{"TraitList":[100102,200202],"BackendRankList":[12100201,12100202,12100203,12100204,12100205,12100206],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":121002,"FrontBackType":0,"SpecialAvatarID":3701210,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1210}, +{"TraitList":[100702,200402,201002],"BackendRankList":[12110201,12110202,12110203,12110204,12110205,12110206],"MaxSPIcon":"","ChargeType":[1,0],"IsExpert":0,"ID":121102,"FrontBackType":2,"SpecialAvatarID":3701211,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23013,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1211}, +{"TraitList":[100702,200402],"BackendRankList":[12120201,12120202,12120203,12120204,12120205,12120206],"MaxSPIcon":"","ChargeType":[0,1],"IsExpert":0,"ID":121202,"FrontBackType":0,"SpecialAvatarID":3701212,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23014,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1212}, +{"TraitList":[100102,200502],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":121402,"FrontBackType":1,"SpecialAvatarID":3701214,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1214}, +{"TraitList":[100902,200902,201002],"BackendRankList":[12170201,12170202,12170203,12170204,12170205,12170206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1217Ultra.png","ChargeType":[2,0,1],"IsExpert":0,"ID":121702,"FrontBackType":2,"SpecialAvatarID":3701217,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23017,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1217}, +{"TraitList":[100102,200202],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":121802,"FrontBackType":1,"SpecialAvatarID":3701218,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1218}, +{"TraitList":[100102,200102],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":122002,"FrontBackType":1,"SpecialAvatarID":3701220,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1220}, +{"TraitList":[100102,200802],"BackendRankList":[12210201,12210202,12210203,12210204,12210205,12210206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1221Ultra.png","ChargeType":[2,1],"IsExpert":0,"ID":122102,"FrontBackType":0,"SpecialAvatarID":3701221,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23030,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1221}, +{"TraitList":[100102,200302,201002],"BackendRankList":[12220201,12220202,12220203,12220204,12220205,12220206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1222Ultra.png","ChargeType":[0,2,1],"IsExpert":0,"ID":122202,"FrontBackType":0,"SpecialAvatarID":3701222,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23032,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1222}, +{"TraitList":[100502,200102],"BackendRankList":[12240201,12240202,12240203,12240204,12240205,12240206],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":122402,"FrontBackType":2,"SpecialAvatarID":3701224,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1224}, +{"TraitList":[100402,200502],"BackendRankList":[12250201,12250202,12250203,12250204,12250205,12250206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1225Ultra.png","ChargeType":[0],"IsExpert":0,"ID":122502,"FrontBackType":0,"SpecialAvatarID":3701225,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23035,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1225}, +{"TraitList":[100402,200102,201102],"BackendRankList":[13040201,13040202,13040203,13040204,13040205,13040206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1304Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":130402,"FrontBackType":0,"SpecialAvatarID":3701304,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23023,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1304}, +{"TraitList":[100902,101002,200702],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":130602,"FrontBackType":1,"SpecialAvatarID":3701306,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1306}, +{"TraitList":[101002,200202],"BackendRankList":[13070201,13070202,13070203,13070204,13070205,13070206],"MaxSPIcon":"","ChargeType":[1,0],"IsExpert":0,"ID":130702,"FrontBackType":2,"SpecialAvatarID":3701307,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23022,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1307}, +{"TraitList":[101002,200302],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":130802,"FrontBackType":1,"SpecialAvatarID":3701308,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1308}, +{"TraitList":[101102,200102],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":130902,"FrontBackType":1,"SpecialAvatarID":3701309,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1309}, +{"TraitList":[100802,200502],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":131002,"FrontBackType":1,"SpecialAvatarID":3701310,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1310}, +{"TraitList":[100302,100502,200402],"BackendRankList":[13130201,13130202,13130203,13130204,13130205,13130206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1313Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":131302,"FrontBackType":0,"SpecialAvatarID":3701313,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23034,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1313}, +{"TraitList":[100402,200502],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":131502,"FrontBackType":1,"SpecialAvatarID":3701315,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1315}, +{"TraitList":[101102,200502],"BackendRankList":[13170201,13170202,13170203,13170204,13170205,13170206],"MaxSPIcon":"","ChargeType":[0,1],"IsExpert":0,"ID":131702,"FrontBackType":2,"SpecialAvatarID":3701317,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23033,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1317}, +{"TraitList":[101002,200502],"BackendRankList":[13210201,13210202,13210203,13210204,13210205,13210206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1321Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":132102,"FrontBackType":0,"SpecialAvatarID":3701321,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23050,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1321}, +{"TraitList":[100402,200302],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":140102,"FrontBackType":1,"SpecialAvatarID":3701401,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1401}, +{"TraitList":[100202,200402],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":140202,"FrontBackType":1,"SpecialAvatarID":3701402,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1402}, +{"TraitList":[100902,200102],"BackendRankList":[14030201,14030202,14030203,14030204,14030205,14030206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1403Ultra.png","ChargeType":[2],"IsExpert":0,"ID":140302,"FrontBackType":0,"SpecialAvatarID":3701403,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23038,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1403}, +{"TraitList":[100202,101202,200802],"BackendRankList":[14040201,14040202,14040203,14040204,14040205,14040206],"MaxSPIcon":"","ChargeType":[3,1],"IsExpert":0,"ID":140402,"FrontBackType":0,"SpecialAvatarID":3701404,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23039,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1404}, +{"TraitList":[100202,200402],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":140502,"FrontBackType":1,"SpecialAvatarID":3701405,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1405}, +{"TraitList":[100202,200302],"BackendRankList":[14060201,14060202,14060203,14060204,14060205,14060206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1406Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":140602,"FrontBackType":2,"SpecialAvatarID":3701406,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23043,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1406}, +{"TraitList":[101202,200602],"BackendRankList":[14070201,14070202,14070203,14070204,14070205,14070206],"MaxSPIcon":"","ChargeType":[3],"IsExpert":0,"ID":140702,"FrontBackType":0,"SpecialAvatarID":3701407,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23040,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1407}, +{"TraitList":[101202,300202],"BackendRankList":[14080201,14080202,14080203,14080204,14080205,14080206],"MaxSPIcon":"","ChargeType":[0],"IsExpert":0,"ID":140802,"FrontBackType":0,"SpecialAvatarID":3701408,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23044,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1408}, +{"TraitList":[100202,200602,201002],"BackendRankList":[14090201,14090202,14090203,14090204,14090205,14090206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1409Ultra.png","ChargeType":[2,0,1],"IsExpert":0,"ID":140902,"FrontBackType":0,"SpecialAvatarID":3701409,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23042,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1409}, +{"TraitList":[100202,200202],"BackendRankList":[14100201,14100202,14100203,14100204,14100205,14100206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1410Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":141002,"FrontBackType":0,"SpecialAvatarID":3701410,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23047,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1410}, +{"TraitList":[100902,200402],"BackendRankList":[14120201,14120202,14120203,14120204,14120205,14120206],"MaxSPIcon":"","ChargeType":[1,0],"IsExpert":0,"ID":141202,"FrontBackType":2,"SpecialAvatarID":3701412,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23048,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1412}, +{"TraitList":[300102],"BackendRankList":[14140201,14140202,14140203,14140204,14140205,14140206],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":141402,"FrontBackType":2,"SpecialAvatarID":3701414,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23051,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1414}, +{"TraitList":[101202,200602],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[2],"IsExpert":0,"ID":141502,"FrontBackType":1,"SpecialAvatarID":3701415,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1415}, +{"TraitList":[100302,101102,200702],"BackendRankList":[15010201,15010202,15010203,15010204,15010205,15010206],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":150102,"FrontBackType":0,"SpecialAvatarID":3701501,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23053,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1501}, +{"TraitList":[100602,200702],"BackendRankList":[15020201,15020202,15020203,15020204,15020205,15020206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1502Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":150202,"FrontBackType":2,"SpecialAvatarID":3701502,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23054,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1502}, +{"TraitList":[100302,100602,201102],"BackendRankList":[15030201,15030202,15030203,15030204,15030205,15030206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1503Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":150302,"FrontBackType":2,"SpecialAvatarID":3701503,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23055,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1503}, +{"TraitList":[100302,200102,300302],"BackendRankList":[15040201,15040202,15040203,15040204,15040205,15040206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1504Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":150402,"FrontBackType":2,"SpecialAvatarID":3701504,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23056,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1504}, +{"TraitList":[100302,200902],"BackendRankList":[15050201,15050202,15050203,15050204,15050205,15050206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1505Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":150502,"FrontBackType":0,"SpecialAvatarID":3701505,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23058,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1505}, +{"TraitList":[100302,100802,200702],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":150602,"FrontBackType":1,"SpecialAvatarID":3701506,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1506}, +{"TraitList":[100302,100802,200302],"BackendRankList":[15070201,15070202,15070203,15070204,15070205,15070206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1507Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":150702,"FrontBackType":0,"SpecialAvatarID":3701507,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23059,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1507}, +{"TraitList":[100502,200902],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":151002,"FrontBackType":1,"SpecialAvatarID":3701510,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1510}, +{"TraitList":[100602,200602,200902],"BackendRankList":[15120201,15120202,15120203,15120204,15120205,15120206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1512Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":151202,"FrontBackType":0,"SpecialAvatarID":3701512,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23063,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1512}, +{"TraitList":[100602,200702],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":151302,"FrontBackType":1,"SpecialAvatarID":3701513,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1513}, +{"TraitList":[100502,100802,200902],"BackendRankList":[80090201,80090202,80090203,80090204,80090205,80090206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_8009Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":800902,"FrontBackType":0,"SpecialAvatarID":3708009,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":8009}, +{"TraitList":[100102,200402],"BackendRankList":[12150201,12150202,12150203,12150204,12150205,12150206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1215Ultra.png","ChargeType":[2,0],"IsExpert":0,"ID":121502,"FrontBackType":2,"SpecialAvatarID":3701215,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1215}, +{"TraitList":[100602,200302,300402],"BackendRankList":[13140201,13140202,13140203,13140204,13140205,13140206],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1314Ultra.png","ChargeType":[2,1],"IsExpert":0,"ID":131402,"FrontBackType":2,"SpecialAvatarID":3701314,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23028,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1314}, +{"TraitList":[100202,101002,200602],"BackendRankList":[14130201,14130202,14130203,14130204,14130205,14130206],"MaxSPIcon":"","ChargeType":[1,3],"IsExpert":0,"ID":141302,"FrontBackType":0,"SpecialAvatarID":3701413,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23049,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1413}, +{"TraitList":[1001,3007],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":1510,"FrontBackType":1,"SpecialAvatarID":3701510,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1510}, +{"TraitList":[1002,2006,2007],"BackendRankList":[150701,150702,150703,150704,150705,150706],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1507Ultra.png","ChargeType":[3,1],"IsExpert":0,"ID":1507,"FrontBackType":2,"SpecialAvatarID":3701507,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23059,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1507}, +{"TraitList":[1001,1010,2004],"BackendRankList":[131301,131302,131303,131304,131305,131306],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1313Ultra.png","ChargeType":[2,0,1],"IsExpert":0,"ID":1313,"FrontBackType":0,"SpecialAvatarID":3701313,"Rarity":3,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23034,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1313}, +{"TraitList":[1013,2011],"BackendRankList":[150801,150802,150803,150804,150805,150806],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_1508Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":1508,"FrontBackType":0,"SpecialAvatarID":3701508,"Rarity":1,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23061,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1508}, +{"TraitList":[1013,2004],"BackendRankList":[150901,150902,150903,150904,150905,150906],"MaxSPIcon":"SpriteOutput/BuffIcon/Inlevel/Avatar/Icon1509Ultra.png","ChargeType":[2,1,0],"IsExpert":0,"ID":1509,"FrontBackType":0,"SpecialAvatarID":3701509,"Rarity":2,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":23062,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1509}, +{"TraitList":[1007,2003],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":12041,"FrontBackType":1,"SpecialAvatarID":3701204,"Rarity":1,"IsInPool":true,"IsInBook":false,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1204}, +{"TraitList":[1007,2003],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":12042,"FrontBackType":1,"SpecialAvatarID":3701204,"Rarity":3,"IsInPool":true,"IsInBook":false,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":1,"AvatarID":1204}, +{"TraitList":[100502,100702,300102],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":121302,"FrontBackType":1,"SpecialAvatarID":3701213,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1213}, +{"TraitList":[100502],"BackendRankList":[],"MaxSPIcon":"SpriteOutput/GridFight/BattleIcon/BuffIcon/Icon_GridFight_PamRage.png","ChargeType":[2,1,0],"IsExpert":0,"ID":604202,"FrontBackType":2,"SpecialAvatarID":3706042,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":1,"SeasonID":2,"AvatarID":6042}, +{"TraitList":[200702,300602],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":151112,"FrontBackType":1,"SpecialAvatarID":3701511,"Rarity":4,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1511}, +{"TraitList":[200702,300602],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":151122,"FrontBackType":1,"SpecialAvatarID":3701511,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1511}, +{"TraitList":[200702,300602],"BackendRankList":[],"MaxSPIcon":"","ChargeType":[],"IsExpert":0,"ID":151132,"FrontBackType":1,"SpecialAvatarID":3701511,"Rarity":5,"IsInPool":true,"IsInBook":true,"HealOrShieldDisplay":2,"EquipmentID":0,"IsFakeAvatar":0,"SeasonID":2,"AvatarID":1511} + ] +} + diff --git a/resources/CurrencyWarsEnemyPlans.json b/resources/CurrencyWarsEnemyPlans.json index 052cd8d..fd71b6b 100644 --- a/resources/CurrencyWarsEnemyPlans.json +++ b/resources/CurrencyWarsEnemyPlans.json @@ -10,7 +10,7 @@ ], "source_plan_sha256": "30b4ae1d95103e6f56064f878b936fa7be8e5f5fa7fcfd21606f48fd5134679f", "target_stage_capture_sha256": "dd7332058ab22fe5b658fe42da9fb4f9f1826df73a658821c52fab943eb04f58", - "scope": "Captured native wave parameters joined to current Client stage scalars. Monster identities/stars come from the live saved layer; no reference party copied. Second-node entry only; complete combat modifiers and later progression remain incomplete.", + "scope": "Captured second combat node and current Encounter entry recipes. Encounter formation row verified in matching Beta Client. Monster identities/stars remain the saved selected branch. Later settlement/progression and other divisions remain incomplete.", "entries": [ { "route_id": 2801, @@ -36,6 +36,68 @@ "monster_count": 5 } ] + }, + { + "route_id": 2801, + "chapter_id": 1, + "section_id": 4, + "division_id": 20101, + "is_overclock": false, + "penalty_id": 91113, + "stage_id": 70000006, + "level": 90, + "hard_level_group": 1, + "elite_group": 1802, + "extra_difficulty": 0, + "waves": [ + { + "wave_id": 1, + "formation_wave_id": 5, + "monster_count": 12 + } + ], + "provenance": { + "source_snapshot_sha256": "0e99446633d7ad991f8d092b23976ecfbba3d803718d70492a92a5a1c442c37d", + "source_plan_sha256": "bd4fe4495b4527f448405e24d26249d927b815b61b2839d028cf8e97d79d5c99", + "source_plan_range": [ + 374, + 564 + ], + "target_stage_capture_sha256": "c4f8918783b5cc851001c3e77f6d0624b988f39ee3d826cced2e0c50c4323aaa", + "formation_capture_evidence": "ev_ac0ddf4c7244887fe99edcde069382c076d0f5f96f887bbc44a4bb34b2ab85fc", + "selection_policy": "Encounter elite/formation are node-scoped, independent of option quality in reference BuildEncounterBattlePlan. Penalty remains the saved selected option; reference penalty 91114 captured directly." + } + }, + { + "route_id": 2801, + "chapter_id": 1, + "section_id": 4, + "division_id": 20101, + "is_overclock": false, + "penalty_id": 91114, + "stage_id": 70000006, + "level": 90, + "hard_level_group": 1, + "elite_group": 1802, + "extra_difficulty": 0, + "waves": [ + { + "wave_id": 1, + "formation_wave_id": 5, + "monster_count": 12 + } + ], + "provenance": { + "source_snapshot_sha256": "0e99446633d7ad991f8d092b23976ecfbba3d803718d70492a92a5a1c442c37d", + "source_plan_sha256": "bd4fe4495b4527f448405e24d26249d927b815b61b2839d028cf8e97d79d5c99", + "source_plan_range": [ + 374, + 564 + ], + "target_stage_capture_sha256": "c4f8918783b5cc851001c3e77f6d0624b988f39ee3d826cced2e0c50c4323aaa", + "formation_capture_evidence": "ev_ac0ddf4c7244887fe99edcde069382c076d0f5f96f887bbc44a4bb34b2ab85fc", + "selection_policy": "Encounter elite/formation are node-scoped, independent of option quality in reference BuildEncounterBattlePlan. Penalty remains the saved selected option; reference penalty 91114 captured directly." + } } ] } diff --git a/resources/CurrencyWarsMonsters.json b/resources/CurrencyWarsMonsters.json new file mode 100644 index 0000000..75fe406 --- /dev/null +++ b/resources/CurrencyWarsMonsters.json @@ -0,0 +1,346 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "source_capture_sha256": "842da5c4ecb1db9b71e6127cad13732a2fe0aabf8c03e15c12404c618544a2df", + "scope": "Current saved run camps and its reference encounter camp only; not all monster rows.", + "encounter_camp_policy": "uniform_compatible_active_camp_same_tier", + "entries": [ + { + "Star3EliteGroup3": 1903, + "Star4EliteGroup3": 1904, + "Star2EliteGroup3": 1902, + "MonsterID": 1014016, + "Star1EliteGroup3": 1901, + "MonsterTier": 5 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 3024031, + "Star1EliteGroup3": 851, + "MonsterTier": 5 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 3024032, + "Star1EliteGroup3": 851, + "MonsterTier": 6 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 5014021, + "Star1EliteGroup3": 851, + "MonsterTier": 6 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 101201023, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 101202113, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 101203019, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 101301027, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 101302037, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 1903, + "Star4EliteGroup3": 1904, + "Star2EliteGroup3": 1902, + "MonsterID": 101401201, + "Star1EliteGroup3": 1901, + "MonsterTier": 6 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 102301021, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 102302009, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 200201014, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 200203009, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 1903, + "Star4EliteGroup3": 1904, + "Star2EliteGroup3": 1902, + "MonsterID": 200402202, + "Star1EliteGroup3": 1901, + "MonsterTier": 6 + }, + { + "Star3EliteGroup3": 1903, + "Star4EliteGroup3": 1904, + "Star2EliteGroup3": 1902, + "MonsterID": 200402403, + "Star1EliteGroup3": 1901, + "MonsterTier": 5 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 201101005, + "Star1EliteGroup3": 851, + "MonsterTier": 1 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 201102005, + "Star1EliteGroup3": 851, + "MonsterTier": 1 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 201201013, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 201301103, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 201302014, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 202302016, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 300201010, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 300203016, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 300303009, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 300304003, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 300305008, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 301202004, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501201001, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501203002, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501209002, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501304002, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501305001, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501306003, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501307002, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 501402003, + "Star1EliteGroup3": 851, + "MonsterTier": 5 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 802201002, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 802202005, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 802203002, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 803201013, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 803202014, + "Star1EliteGroup3": 851, + "MonsterTier": 2 + }, + { + "Star3EliteGroup3": 853, + "Star4EliteGroup3": 854, + "Star2EliteGroup3": 852, + "MonsterID": 803301015, + "Star1EliteGroup3": 851, + "MonsterTier": 3 + } + ] +} diff --git a/resources/CurrencyWarsNodeTransitions.json b/resources/CurrencyWarsNodeTransitions.json index ea34499..4c52f72 100644 --- a/resources/CurrencyWarsNodeTransitions.json +++ b/resources/CurrencyWarsNodeTransitions.json @@ -13,6 +13,7 @@ "stage_id": 70000001 }, { + "capture_method": "Native administrative move to the next known route node, followed by RoundBegin; only the next node layer/action are reused, not its balances or party. Queue values are opaque server-issued cursor values and remain after the preceding consumed action.", "chapter_id": 1, "division_id": 20101, "is_overclock": false, @@ -22,12 +23,36 @@ "round_pending_wire": "MBCqK7gBKAFAAVoiMggIBRD+rxUYAVoD/q8Vag0IBBDKzQgYASoDqAYBeMrNCFoiMggIBRD+rxUYAVoD/q8Vag0IBBD2zwgYASoDqAYBePbPCFoiMggIBRD+rxUYAVoD/q8Vag0IBBCykAYYASoDqAYBeLKQBloiMggIBRCAsBUYAVoDgLAVag0IBBDmtgcYASoDqAYBeOa2B1oiMggIBRD9rxUYAVoD/a8Vag0IBBC2rQcYASoDqAYBeLatBw==", "route_id": 2801, "section_id": 2, - "stage_id": 70000003, - "capture_method": "Native administrative move to the next known route node, followed by RoundBegin; only the next node layer/action are reused, not its balances or party. Queue values are opaque server-issued cursor values and remain after the preceding consumed action." + "stage_id": 70000003 + }, + { + "chapter_id": 1, + "division_id": 20101, + "is_overclock": false, + "next_level_wire": "Io0C4gKJAlAEWn8KblgBYgcIy/igMDABYgcIy/igMDABYgcIuYLkMDACYgcIy/igMDABYgcIy/igMDABYgcI/+igMDABYgcI/+igMDABYgcIy/igMDABYgcIy/igMDABYgcIo/amMDADYgcI/+igMDABYgcIo/amMDACQgYKBAgBGAZQp1hY6ccFWoMBCm5YAWIHCMv4oDAwAWIHCMHxoDAwAWIHCP/ooDAwAWIHCP/ooDAwAWIHCLmC5DAwAmIHCP/ooDAwAWIHCMHxoDAwAWIHCMv4oDAwAWIHCP/ooDAwAWIHCMv4oDAwAWIHCJX+pjAwA2IHCJX+pjAwAkIKCggIBRDtsxUYAVCoWFjqxwUwBGAB", + "next_pending_wire": "MBSiJgA=", + "penalty_id": 0, + "round_pending_wire": "MBWqCwJwAQ==", + "route_id": 2801, + "section_id": 3, + "stage_id": 70000005 + }, + { + "capture_method": "Native administrative move from current Encounter to the next ordered route node, then RoundBegin. Uses captured next layer/action only. Penalty comes from selected active Beta row. Cursor rebased after existing captured actions using native sequential-counter semantics; no reference party or balances copied.", + "chapter_id": 1, + "division_id": 20101, + "is_overclock": false, + "next_level_wire": "IkPiAkBQFVo6CjRYAWIICOnXyP0CMAFiCAjp18j9AjABYggI6dfI/QIwAWIICOnXyP0CMAFiCAjp18j9AjABWKzQBWgBMAVgAQ==", + "next_pending_wire": "MBaiJgA=", + "penalty_id": 91113, + "round_pending_wire": "MBfiZAA=", + "route_id": 2801, + "section_id": 4, + "stage_id": 70000006 } ], "format_version": 1, - "scope": "Captured Standard first-to-second combat and second-to-third supply node definitions. Runtime computes rewards from uploaded combat statistics and never replaces party or inventory.", + "scope": "Standard opening combat, Supply, and selected current Encounter transitions. Other nodes/divisions remain incomplete.", "source_binary_sha256": "a02743d89dd75a024f83e37b35ed125f1781a90e70bfb47341dd81ff3d541858", "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", "target_client_version": "4.6.53" diff --git a/resources/CurrencyWarsOrbRecipes.json b/resources/CurrencyWarsOrbRecipes.json new file mode 100644 index 0000000..ded7771 --- /dev/null +++ b/resources/CurrencyWarsOrbRecipes.json @@ -0,0 +1,8976 @@ +{ + "format_version": 1, + "source_kind": "reference-server-authored-orb-recipes", + "binary_sha256": "235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86", + "excel_json_sha256": "ee011f39af3040124873d461ff49af1623fd9655d9ba0d98c0a877247318030f", + "custom_json_sha256": "5a5fb5bf4335b7bc84dbecfbf0e0b12ae6f25a1603bc68b534e3c75490d8bbf3", + "limitations": [ + "Reference-authored recipes are not a claim of captured Client reward odds. Unsupported reward kinds are rejected without consuming an Orb." + ], + "orbs": [ + { + "id": 100, + "bonus_id": 20001 + }, + { + "id": 101, + "bonus_id": 20002 + }, + { + "id": 102, + "bonus_id": 20022 + }, + { + "id": 103, + "bonus_id": 20023 + }, + { + "id": 197, + "bonus_id": 1 + }, + { + "id": 198, + "bonus_id": 20026 + }, + { + "id": 199, + "bonus_id": 20011 + }, + { + "id": 200, + "bonus_id": 20003 + }, + { + "id": 201, + "bonus_id": 20004 + }, + { + "id": 202, + "bonus_id": 20015 + }, + { + "id": 203, + "bonus_id": 30000 + }, + { + "id": 204, + "bonus_id": 20016 + }, + { + "id": 205, + "bonus_id": 207 + }, + { + "id": 206, + "bonus_id": 20017 + }, + { + "id": 207, + "bonus_id": 20018 + }, + { + "id": 208, + "bonus_id": 20027 + }, + { + "id": 300, + "bonus_id": 20005 + }, + { + "id": 301, + "bonus_id": 20006 + }, + { + "id": 302, + "bonus_id": 208 + }, + { + "id": 303, + "bonus_id": 20021 + }, + { + "id": 304, + "bonus_id": 20024 + }, + { + "id": 305, + "bonus_id": 20025 + }, + { + "id": 306, + "bonus_id": 20028 + }, + { + "id": 307, + "bonus_id": 20029 + }, + { + "id": 400, + "bonus_id": 20007 + }, + { + "id": 401, + "bonus_id": 20008 + }, + { + "id": 1201, + "bonus_id": 21001 + }, + { + "id": 1202, + "bonus_id": 21002 + }, + { + "id": 1203, + "bonus_id": 21003 + }, + { + "id": 1301, + "bonus_id": 21004 + }, + { + "id": 1302, + "bonus_id": 21005 + }, + { + "id": 111064, + "bonus_id": 11064 + }, + { + "id": 120031, + "bonus_id": 20031 + }, + { + "id": 121006, + "bonus_id": 21006 + }, + { + "id": 121007, + "bonus_id": 21007 + }, + { + "id": 121008, + "bonus_id": 21008 + }, + { + "id": 121009, + "bonus_id": 21009 + }, + { + "id": 121010, + "bonus_id": 21010 + }, + { + "id": 121011, + "bonus_id": 21011 + }, + { + "id": 121012, + "bonus_id": 21012 + }, + { + "id": 121013, + "bonus_id": 21013 + }, + { + "id": 121014, + "bonus_id": 21014 + }, + { + "id": 121015, + "bonus_id": 21015 + }, + { + "id": 121016, + "bonus_id": 21016 + }, + { + "id": 121017, + "bonus_id": 21017 + }, + { + "id": 121018, + "bonus_id": 21018 + }, + { + "id": 121019, + "bonus_id": 21019 + }, + { + "id": 121020, + "bonus_id": 21020 + }, + { + "id": 121021, + "bonus_id": 21021 + }, + { + "id": 121022, + "bonus_id": 21022 + }, + { + "id": 121023, + "bonus_id": 21023 + }, + { + "id": 121027, + "bonus_id": 21027 + }, + { + "id": 121029, + "bonus_id": 21029 + }, + { + "id": 123001, + "bonus_id": 23001 + }, + { + "id": 123002, + "bonus_id": 23002 + }, + { + "id": 123003, + "bonus_id": 23003 + }, + { + "id": 123004, + "bonus_id": 23004 + }, + { + "id": 123005, + "bonus_id": 23005 + }, + { + "id": 123006, + "bonus_id": 23006 + }, + { + "id": 123007, + "bonus_id": 23007 + }, + { + "id": 123008, + "bonus_id": 23008 + }, + { + "id": 123009, + "bonus_id": 23009 + }, + { + "id": 120030, + "bonus_id": 20030 + }, + { + "id": 123101, + "bonus_id": 23101 + }, + { + "id": 123102, + "bonus_id": 23102 + }, + { + "id": 123103, + "bonus_id": 23103 + }, + { + "id": 123104, + "bonus_id": 23104 + }, + { + "id": 123105, + "bonus_id": 23105 + }, + { + "id": 123106, + "bonus_id": 23106 + }, + { + "id": 123107, + "bonus_id": 23107 + }, + { + "id": 123108, + "bonus_id": 23108 + }, + { + "id": 123111, + "bonus_id": 23111 + }, + { + "id": 200001, + "bonus_id": 101 + }, + { + "id": 200002, + "bonus_id": 102 + }, + { + "id": 200003, + "bonus_id": 103 + }, + { + "id": 200004, + "bonus_id": 104 + }, + { + "id": 200005, + "bonus_id": 105 + }, + { + "id": 200006, + "bonus_id": 210 + }, + { + "id": 200007, + "bonus_id": 211 + }, + { + "id": 200008, + "bonus_id": 223 + }, + { + "id": 200009, + "bonus_id": 224 + }, + { + "id": 200010, + "bonus_id": 225 + }, + { + "id": 200011, + "bonus_id": 226 + }, + { + "id": 200012, + "bonus_id": 227 + }, + { + "id": 200013, + "bonus_id": 228 + }, + { + "id": 200014, + "bonus_id": 205 + }, + { + "id": 200015, + "bonus_id": 206 + }, + { + "id": 200016, + "bonus_id": 212 + }, + { + "id": 200017, + "bonus_id": 218 + }, + { + "id": 200018, + "bonus_id": 219 + }, + { + "id": 200019, + "bonus_id": 106 + }, + { + "id": 200020, + "bonus_id": 107 + }, + { + "id": 200021, + "bonus_id": 108 + }, + { + "id": 200022, + "bonus_id": 109 + }, + { + "id": 200023, + "bonus_id": 110 + }, + { + "id": 200024, + "bonus_id": 111 + }, + { + "id": 200025, + "bonus_id": 112 + }, + { + "id": 200026, + "bonus_id": 113 + }, + { + "id": 200027, + "bonus_id": 114 + }, + { + "id": 200028, + "bonus_id": 115 + }, + { + "id": 200029, + "bonus_id": 350201 + }, + { + "id": 200030, + "bonus_id": 350202 + }, + { + "id": 200031, + "bonus_id": 350203 + }, + { + "id": 200032, + "bonus_id": 350204 + }, + { + "id": 200033, + "bonus_id": 350205 + }, + { + "id": 200034, + "bonus_id": 350206 + }, + { + "id": 200035, + "bonus_id": 350207 + }, + { + "id": 200036, + "bonus_id": 350208 + }, + { + "id": 200037, + "bonus_id": 350701 + }, + { + "id": 140021, + "bonus_id": 40021 + }, + { + "id": 140022, + "bonus_id": 40022 + }, + { + "id": 140023, + "bonus_id": 40023 + }, + { + "id": 190291, + "bonus_id": 90291 + }, + { + "id": 190292, + "bonus_id": 90292 + }, + { + "id": 190271, + "bonus_id": 90271 + }, + { + "id": 190272, + "bonus_id": 90272 + }, + { + "id": 190273, + "bonus_id": 90273 + }, + { + "id": 190274, + "bonus_id": 90274 + }, + { + "id": 190275, + "bonus_id": 90275 + }, + { + "id": 190281, + "bonus_id": 90281 + }, + { + "id": 190282, + "bonus_id": 90282 + }, + { + "id": 190283, + "bonus_id": 90283 + }, + { + "id": 190284, + "bonus_id": 90284 + }, + { + "id": 190285, + "bonus_id": 90285 + }, + { + "id": 190293, + "bonus_id": 90293 + }, + { + "id": 190294, + "bonus_id": 90294 + }, + { + "id": 190295, + "bonus_id": 90295 + }, + { + "id": 190296, + "bonus_id": 90296 + }, + { + "id": 190297, + "bonus_id": 90297 + }, + { + "id": 190298, + "bonus_id": 90298 + }, + { + "id": 198001, + "bonus_id": 98001 + }, + { + "id": 198002, + "bonus_id": 98002 + }, + { + "id": 198003, + "bonus_id": 98003 + }, + { + "id": 198004, + "bonus_id": 98004 + }, + { + "id": 198005, + "bonus_id": 98005 + }, + { + "id": 198006, + "bonus_id": 98006 + }, + { + "id": 198007, + "bonus_id": 98007 + }, + { + "id": 198008, + "bonus_id": 98008 + }, + { + "id": 198009, + "bonus_id": 98009 + }, + { + "id": 198010, + "bonus_id": 98010 + }, + { + "id": 198011, + "bonus_id": 98011 + }, + { + "id": 198012, + "bonus_id": 98012 + }, + { + "id": 198013, + "bonus_id": 98013 + }, + { + "id": 198014, + "bonus_id": 98014 + }, + { + "id": 198015, + "bonus_id": 98015 + }, + { + "id": 198016, + "bonus_id": 98016 + }, + { + "id": 198017, + "bonus_id": 98017 + }, + { + "id": 198018, + "bonus_id": 98018 + }, + { + "id": 198019, + "bonus_id": 98019 + }, + { + "id": 198020, + "bonus_id": 98020 + }, + { + "id": 101001, + "bonus_id": 1001 + }, + { + "id": 101003, + "bonus_id": 1003 + }, + { + "id": 101004, + "bonus_id": 1004 + }, + { + "id": 101005, + "bonus_id": 1005 + }, + { + "id": 101006, + "bonus_id": 1006 + }, + { + "id": 101009, + "bonus_id": 1009 + }, + { + "id": 101013, + "bonus_id": 1013 + }, + { + "id": 101014, + "bonus_id": 1014 + }, + { + "id": 101015, + "bonus_id": 1015 + }, + { + "id": 101101, + "bonus_id": 1101 + }, + { + "id": 101102, + "bonus_id": 1102 + }, + { + "id": 101104, + "bonus_id": 1104 + }, + { + "id": 101105, + "bonus_id": 1105 + }, + { + "id": 101106, + "bonus_id": 1106 + }, + { + "id": 101108, + "bonus_id": 1108 + }, + { + "id": 101112, + "bonus_id": 1112 + }, + { + "id": 101201, + "bonus_id": 1201 + }, + { + "id": 101203, + "bonus_id": 1203 + }, + { + "id": 101204, + "bonus_id": 1204 + }, + { + "id": 101205, + "bonus_id": 1205 + }, + { + "id": 101208, + "bonus_id": 1208 + }, + { + "id": 101209, + "bonus_id": 1209 + }, + { + "id": 101212, + "bonus_id": 1212 + }, + { + "id": 101213, + "bonus_id": 1213 + }, + { + "id": 101217, + "bonus_id": 1217 + }, + { + "id": 101218, + "bonus_id": 1218 + }, + { + "id": 101220, + "bonus_id": 1220 + }, + { + "id": 101221, + "bonus_id": 1221 + }, + { + "id": 101222, + "bonus_id": 1222 + }, + { + "id": 101223, + "bonus_id": 1223 + }, + { + "id": 101225, + "bonus_id": 1225 + }, + { + "id": 101302, + "bonus_id": 1302 + }, + { + "id": 101303, + "bonus_id": 1303 + }, + { + "id": 101304, + "bonus_id": 1304 + }, + { + "id": 101305, + "bonus_id": 1305 + }, + { + "id": 101306, + "bonus_id": 1306 + }, + { + "id": 101307, + "bonus_id": 1307 + }, + { + "id": 101308, + "bonus_id": 1308 + }, + { + "id": 101309, + "bonus_id": 1309 + }, + { + "id": 101310, + "bonus_id": 1310 + }, + { + "id": 101313, + "bonus_id": 1313 + }, + { + "id": 101314, + "bonus_id": 1314 + }, + { + "id": 101315, + "bonus_id": 1315 + }, + { + "id": 101317, + "bonus_id": 1317 + }, + { + "id": 101401, + "bonus_id": 1401 + }, + { + "id": 101402, + "bonus_id": 1402 + }, + { + "id": 101403, + "bonus_id": 1403 + }, + { + "id": 101404, + "bonus_id": 1404 + }, + { + "id": 101405, + "bonus_id": 1405 + }, + { + "id": 101406, + "bonus_id": 1406 + }, + { + "id": 101407, + "bonus_id": 1407 + }, + { + "id": 101408, + "bonus_id": 1408 + }, + { + "id": 101409, + "bonus_id": 1409 + }, + { + "id": 101410, + "bonus_id": 1410 + }, + { + "id": 101412, + "bonus_id": 1412 + }, + { + "id": 101413, + "bonus_id": 1413 + }, + { + "id": 101414, + "bonus_id": 1414 + }, + { + "id": 101415, + "bonus_id": 1415 + }, + { + "id": 108007, + "bonus_id": 8007 + }, + { + "id": 211001, + "bonus_id": 201001 + }, + { + "id": 211003, + "bonus_id": 201003 + }, + { + "id": 211004, + "bonus_id": 201004 + }, + { + "id": 211005, + "bonus_id": 201005 + }, + { + "id": 211006, + "bonus_id": 201006 + }, + { + "id": 211009, + "bonus_id": 201009 + }, + { + "id": 211013, + "bonus_id": 201013 + }, + { + "id": 211014, + "bonus_id": 201014 + }, + { + "id": 211015, + "bonus_id": 201015 + }, + { + "id": 211101, + "bonus_id": 201101 + }, + { + "id": 211102, + "bonus_id": 201102 + }, + { + "id": 211104, + "bonus_id": 201104 + }, + { + "id": 211105, + "bonus_id": 201105 + }, + { + "id": 211106, + "bonus_id": 201106 + }, + { + "id": 211108, + "bonus_id": 201108 + }, + { + "id": 211112, + "bonus_id": 201112 + }, + { + "id": 211203, + "bonus_id": 201203 + }, + { + "id": 211204, + "bonus_id": 201204 + }, + { + "id": 211205, + "bonus_id": 201205 + }, + { + "id": 211208, + "bonus_id": 201208 + }, + { + "id": 211209, + "bonus_id": 201209 + }, + { + "id": 211212, + "bonus_id": 201212 + }, + { + "id": 211213, + "bonus_id": 201213 + }, + { + "id": 211217, + "bonus_id": 201217 + }, + { + "id": 211218, + "bonus_id": 201218 + }, + { + "id": 211220, + "bonus_id": 201220 + }, + { + "id": 211221, + "bonus_id": 201221 + }, + { + "id": 211222, + "bonus_id": 201222 + }, + { + "id": 211223, + "bonus_id": 201223 + }, + { + "id": 211225, + "bonus_id": 201225 + }, + { + "id": 211302, + "bonus_id": 201302 + }, + { + "id": 211303, + "bonus_id": 201303 + }, + { + "id": 211304, + "bonus_id": 201304 + }, + { + "id": 211305, + "bonus_id": 201305 + }, + { + "id": 211306, + "bonus_id": 201306 + }, + { + "id": 211307, + "bonus_id": 201307 + }, + { + "id": 211308, + "bonus_id": 201308 + }, + { + "id": 211309, + "bonus_id": 201309 + }, + { + "id": 211310, + "bonus_id": 201310 + }, + { + "id": 211313, + "bonus_id": 201313 + }, + { + "id": 211314, + "bonus_id": 201314 + }, + { + "id": 211315, + "bonus_id": 201315 + }, + { + "id": 211317, + "bonus_id": 201317 + }, + { + "id": 211401, + "bonus_id": 201401 + }, + { + "id": 211402, + "bonus_id": 201402 + }, + { + "id": 211403, + "bonus_id": 201403 + }, + { + "id": 211404, + "bonus_id": 201404 + }, + { + "id": 211405, + "bonus_id": 201405 + }, + { + "id": 211406, + "bonus_id": 201406 + }, + { + "id": 211407, + "bonus_id": 201407 + }, + { + "id": 211408, + "bonus_id": 201408 + }, + { + "id": 211409, + "bonus_id": 201409 + }, + { + "id": 211410, + "bonus_id": 201410 + }, + { + "id": 211412, + "bonus_id": 201412 + }, + { + "id": 211413, + "bonus_id": 201413 + }, + { + "id": 211414, + "bonus_id": 201414 + }, + { + "id": 211415, + "bonus_id": 201415 + }, + { + "id": 218007, + "bonus_id": 208007 + }, + { + "id": 311001, + "bonus_id": 301001 + }, + { + "id": 311003, + "bonus_id": 301003 + }, + { + "id": 311004, + "bonus_id": 301004 + }, + { + "id": 311005, + "bonus_id": 301005 + }, + { + "id": 311006, + "bonus_id": 301006 + }, + { + "id": 311009, + "bonus_id": 301009 + }, + { + "id": 311013, + "bonus_id": 301013 + }, + { + "id": 311014, + "bonus_id": 301014 + }, + { + "id": 311015, + "bonus_id": 301015 + }, + { + "id": 311101, + "bonus_id": 301101 + }, + { + "id": 311102, + "bonus_id": 301102 + }, + { + "id": 311104, + "bonus_id": 301104 + }, + { + "id": 311105, + "bonus_id": 301105 + }, + { + "id": 311106, + "bonus_id": 301106 + }, + { + "id": 311108, + "bonus_id": 301108 + }, + { + "id": 311112, + "bonus_id": 301112 + }, + { + "id": 311203, + "bonus_id": 301203 + }, + { + "id": 311204, + "bonus_id": 301204 + }, + { + "id": 311205, + "bonus_id": 301205 + }, + { + "id": 311208, + "bonus_id": 301208 + }, + { + "id": 311209, + "bonus_id": 301209 + }, + { + "id": 311212, + "bonus_id": 301212 + }, + { + "id": 311213, + "bonus_id": 301213 + }, + { + "id": 311217, + "bonus_id": 301217 + }, + { + "id": 311218, + "bonus_id": 301218 + }, + { + "id": 311220, + "bonus_id": 301220 + }, + { + "id": 311221, + "bonus_id": 301221 + }, + { + "id": 311222, + "bonus_id": 301222 + }, + { + "id": 311223, + "bonus_id": 301223 + }, + { + "id": 311225, + "bonus_id": 301225 + }, + { + "id": 311302, + "bonus_id": 301302 + }, + { + "id": 311303, + "bonus_id": 301303 + }, + { + "id": 311304, + "bonus_id": 301304 + }, + { + "id": 311305, + "bonus_id": 301305 + }, + { + "id": 311306, + "bonus_id": 301306 + }, + { + "id": 311307, + "bonus_id": 301307 + }, + { + "id": 311308, + "bonus_id": 301308 + }, + { + "id": 311309, + "bonus_id": 301309 + }, + { + "id": 311310, + "bonus_id": 301310 + }, + { + "id": 311313, + "bonus_id": 301313 + }, + { + "id": 311314, + "bonus_id": 301314 + }, + { + "id": 311315, + "bonus_id": 301315 + }, + { + "id": 311317, + "bonus_id": 301317 + }, + { + "id": 311401, + "bonus_id": 301401 + }, + { + "id": 311402, + "bonus_id": 301402 + }, + { + "id": 311403, + "bonus_id": 301403 + }, + { + "id": 311404, + "bonus_id": 301404 + }, + { + "id": 311405, + "bonus_id": 301405 + }, + { + "id": 311406, + "bonus_id": 301406 + }, + { + "id": 311407, + "bonus_id": 301407 + }, + { + "id": 311408, + "bonus_id": 301408 + }, + { + "id": 311409, + "bonus_id": 301409 + }, + { + "id": 311410, + "bonus_id": 301410 + }, + { + "id": 311412, + "bonus_id": 301412 + }, + { + "id": 311413, + "bonus_id": 301413 + }, + { + "id": 311414, + "bonus_id": 301414 + }, + { + "id": 311415, + "bonus_id": 301415 + }, + { + "id": 318007, + "bonus_id": 308007 + }, + { + "id": 200038, + "bonus_id": 204 + }, + { + "id": 101501, + "bonus_id": 1501 + }, + { + "id": 101502, + "bonus_id": 1502 + }, + { + "id": 211501, + "bonus_id": 201501 + }, + { + "id": 211502, + "bonus_id": 201502 + }, + { + "id": 311501, + "bonus_id": 301501 + }, + { + "id": 311502, + "bonus_id": 301502 + }, + { + "id": 101202, + "bonus_id": 1202 + }, + { + "id": 101301, + "bonus_id": 1301 + }, + { + "id": 211201, + "bonus_id": 201201 + }, + { + "id": 211202, + "bonus_id": 201202 + }, + { + "id": 211301, + "bonus_id": 201301 + }, + { + "id": 311201, + "bonus_id": 301201 + }, + { + "id": 311202, + "bonus_id": 301202 + }, + { + "id": 311301, + "bonus_id": 301301 + }, + { + "id": 308, + "bonus_id": 99990 + }, + { + "id": 101321, + "bonus_id": 1321 + }, + { + "id": 101504, + "bonus_id": 1504 + }, + { + "id": 101505, + "bonus_id": 1505 + }, + { + "id": 101506, + "bonus_id": 1506 + }, + { + "id": 211321, + "bonus_id": 201321 + }, + { + "id": 211504, + "bonus_id": 201504 + }, + { + "id": 211505, + "bonus_id": 201505 + }, + { + "id": 211506, + "bonus_id": 201506 + }, + { + "id": 311321, + "bonus_id": 301321 + }, + { + "id": 311504, + "bonus_id": 301504 + }, + { + "id": 311505, + "bonus_id": 301505 + }, + { + "id": 311506, + "bonus_id": 301506 + }, + { + "id": 108009, + "bonus_id": 8009 + }, + { + "id": 218009, + "bonus_id": 208009 + }, + { + "id": 318009, + "bonus_id": 308009 + }, + { + "id": 190299, + "bonus_id": 90299 + }, + { + "id": 122006, + "bonus_id": 22006 + }, + { + "id": 122007, + "bonus_id": 22007 + }, + { + "id": 111079, + "bonus_id": 11079 + }, + { + "id": 111080, + "bonus_id": 11080 + }, + { + "id": 111081, + "bonus_id": 11081 + }, + { + "id": 111082, + "bonus_id": 11082 + }, + { + "id": 111083, + "bonus_id": 11083 + }, + { + "id": 101507, + "bonus_id": 1507 + }, + { + "id": 101508, + "bonus_id": 1508 + }, + { + "id": 101509, + "bonus_id": 1509 + }, + { + "id": 101510, + "bonus_id": 1510 + }, + { + "id": 211507, + "bonus_id": 201507 + }, + { + "id": 211508, + "bonus_id": 201508 + }, + { + "id": 211509, + "bonus_id": 201509 + }, + { + "id": 211510, + "bonus_id": 201510 + }, + { + "id": 311507, + "bonus_id": 301507 + }, + { + "id": 311508, + "bonus_id": 301508 + }, + { + "id": 311509, + "bonus_id": 301509 + }, + { + "id": 311510, + "bonus_id": 301510 + }, + { + "id": 101210, + "bonus_id": 1210 + }, + { + "id": 211210, + "bonus_id": 201210 + }, + { + "id": 311210, + "bonus_id": 301210 + }, + { + "id": 101503, + "bonus_id": 1503 + }, + { + "id": 211503, + "bonus_id": 201503 + }, + { + "id": 311503, + "bonus_id": 301503 + }, + { + "id": 123151, + "bonus_id": 23151 + }, + { + "id": 123152, + "bonus_id": 23152 + }, + { + "id": 123153, + "bonus_id": 23153 + }, + { + "id": 123154, + "bonus_id": 23154 + }, + { + "id": 123155, + "bonus_id": 23155 + }, + { + "id": 123156, + "bonus_id": 23156 + }, + { + "id": 123157, + "bonus_id": 23157 + }, + { + "id": 123158, + "bonus_id": 23158 + }, + { + "id": 123159, + "bonus_id": 23159 + }, + { + "id": 123160, + "bonus_id": 23160 + }, + { + "id": 106042, + "bonus_id": 6042 + }, + { + "id": 101107, + "bonus_id": 1107 + }, + { + "id": 211107, + "bonus_id": 201107 + }, + { + "id": 311107, + "bonus_id": 301107 + }, + { + "id": 101214, + "bonus_id": 1214 + }, + { + "id": 211214, + "bonus_id": 201214 + }, + { + "id": 311214, + "bonus_id": 301214 + }, + { + "id": 216042, + "bonus_id": 206042 + }, + { + "id": 316042, + "bonus_id": 306042 + }, + { + "id": 120054, + "bonus_id": 20054 + }, + { + "id": 120056, + "bonus_id": 20056 + }, + { + "id": 120044, + "bonus_id": 20044 + }, + { + "id": 120045, + "bonus_id": 20045 + }, + { + "id": 120055, + "bonus_id": 20055 + }, + { + "id": 120057, + "bonus_id": 20057 + }, + { + "id": 120046, + "bonus_id": 20046 + }, + { + "id": 120047, + "bonus_id": 20047 + }, + { + "id": 101511, + "bonus_id": 1511 + }, + { + "id": 211511, + "bonus_id": 201511 + }, + { + "id": 311511, + "bonus_id": 301511 + }, + { + "id": 101103, + "bonus_id": 1103 + }, + { + "id": 101211, + "bonus_id": 1211 + }, + { + "id": 101215, + "bonus_id": 1215 + }, + { + "id": 101224, + "bonus_id": 1224 + }, + { + "id": 101512, + "bonus_id": 1512 + }, + { + "id": 101513, + "bonus_id": 1513 + }, + { + "id": 211103, + "bonus_id": 201103 + }, + { + "id": 211211, + "bonus_id": 201211 + }, + { + "id": 211215, + "bonus_id": 201215 + }, + { + "id": 211224, + "bonus_id": 201224 + }, + { + "id": 211512, + "bonus_id": 201512 + }, + { + "id": 211513, + "bonus_id": 201513 + }, + { + "id": 311103, + "bonus_id": 301103 + }, + { + "id": 311211, + "bonus_id": 301211 + }, + { + "id": 311215, + "bonus_id": 301215 + }, + { + "id": 311224, + "bonus_id": 301224 + }, + { + "id": 311512, + "bonus_id": 301512 + }, + { + "id": 311513, + "bonus_id": 301513 + }, + { + "id": 123201, + "bonus_id": 23201 + }, + { + "id": 123202, + "bonus_id": 23202 + }, + { + "id": 123203, + "bonus_id": 23203 + }, + { + "id": 123204, + "bonus_id": 23204 + }, + { + "id": 123205, + "bonus_id": 23205 + }, + { + "id": 123206, + "bonus_id": 23206 + }, + { + "id": 123207, + "bonus_id": 23207 + }, + { + "id": 123208, + "bonus_id": 23208 + }, + { + "id": 123209, + "bonus_id": 23209 + }, + { + "id": 123210, + "bonus_id": 23210 + }, + { + "id": 123211, + "bonus_id": 23211 + }, + { + "id": 123212, + "bonus_id": 23212 + }, + { + "id": 123213, + "bonus_id": 23213 + }, + { + "id": 123214, + "bonus_id": 23214 + }, + { + "id": 123215, + "bonus_id": 23215 + }, + { + "id": 123216, + "bonus_id": 23216 + }, + { + "id": 123217, + "bonus_id": 23217 + }, + { + "id": 123218, + "bonus_id": 23218 + }, + { + "id": 123219, + "bonus_id": 23219 + }, + { + "id": 123220, + "bonus_id": 23220 + }, + { + "id": 123221, + "bonus_id": 23221 + }, + { + "id": 123222, + "bonus_id": 23222 + }, + { + "id": 123223, + "bonus_id": 23223 + }, + { + "id": 123224, + "bonus_id": 23224 + }, + { + "id": 123225, + "bonus_id": 23225 + }, + { + "id": 123226, + "bonus_id": 23226 + }, + { + "id": 123227, + "bonus_id": 23227 + }, + { + "id": 123228, + "bonus_id": 23228 + }, + { + "id": 123229, + "bonus_id": 23229 + }, + { + "id": 123230, + "bonus_id": 23230 + }, + { + "id": 123231, + "bonus_id": 23231 + }, + { + "id": 123232, + "bonus_id": 23232 + }, + { + "id": 123233, + "bonus_id": 23233 + }, + { + "id": 123234, + "bonus_id": 23234 + }, + { + "id": 123235, + "bonus_id": 23235 + }, + { + "id": 123236, + "bonus_id": 23236 + }, + { + "id": 123237, + "bonus_id": 23237 + }, + { + "id": 123238, + "bonus_id": 23238 + }, + { + "id": 123239, + "bonus_id": 23239 + }, + { + "id": 123240, + "bonus_id": 23240 + }, + { + "id": 123241, + "bonus_id": 23241 + }, + { + "id": 123242, + "bonus_id": 23242 + }, + { + "id": 123243, + "bonus_id": 23243 + }, + { + "id": 123244, + "bonus_id": 23244 + }, + { + "id": 123245, + "bonus_id": 23245 + }, + { + "id": 123246, + "bonus_id": 23246 + }, + { + "id": 123247, + "bonus_id": 23247 + }, + { + "id": 123248, + "bonus_id": 23248 + }, + { + "id": 123249, + "bonus_id": 23249 + }, + { + "id": 123250, + "bonus_id": 23250 + }, + { + "id": 123251, + "bonus_id": 23251 + }, + { + "id": 123252, + "bonus_id": 23252 + }, + { + "id": 123253, + "bonus_id": 23253 + }, + { + "id": 123254, + "bonus_id": 23254 + }, + { + "id": 123255, + "bonus_id": 23255 + }, + { + "id": 123256, + "bonus_id": 23256 + }, + { + "id": 123257, + "bonus_id": 23257 + }, + { + "id": 123258, + "bonus_id": 23258 + }, + { + "id": 123259, + "bonus_id": 23259 + }, + { + "id": 123260, + "bonus_id": 23260 + }, + { + "id": 123261, + "bonus_id": 23261 + }, + { + "id": 123262, + "bonus_id": 23262 + }, + { + "id": 123263, + "bonus_id": 23263 + }, + { + "id": 123264, + "bonus_id": 23264 + }, + { + "id": 123265, + "bonus_id": 23265 + }, + { + "id": 123266, + "bonus_id": 23266 + }, + { + "id": 123267, + "bonus_id": 23267 + }, + { + "id": 123268, + "bonus_id": 23268 + }, + { + "id": 123269, + "bonus_id": 23269 + }, + { + "id": 123270, + "bonus_id": 23270 + }, + { + "id": 123271, + "bonus_id": 23271 + }, + { + "id": 123272, + "bonus_id": 23272 + }, + { + "id": 123273, + "bonus_id": 23273 + }, + { + "id": 123274, + "bonus_id": 23274 + }, + { + "id": 123275, + "bonus_id": 23275 + }, + { + "id": 123276, + "bonus_id": 23276 + }, + { + "id": 123277, + "bonus_id": 23277 + }, + { + "id": 123278, + "bonus_id": 23278 + }, + { + "id": 123279, + "bonus_id": 23279 + }, + { + "id": 123280, + "bonus_id": 23280 + }, + { + "id": 123281, + "bonus_id": 23281 + }, + { + "id": 123282, + "bonus_id": 23282 + }, + { + "id": 123283, + "bonus_id": 23283 + }, + { + "id": 123284, + "bonus_id": 23284 + }, + { + "id": 123285, + "bonus_id": 23285 + }, + { + "id": 123286, + "bonus_id": 23286 + }, + { + "id": 123287, + "bonus_id": 23287 + }, + { + "id": 123288, + "bonus_id": 23288 + }, + { + "id": 123289, + "bonus_id": 23289 + }, + { + "id": 123290, + "bonus_id": 23290 + }, + { + "id": 123291, + "bonus_id": 23291 + }, + { + "id": 123292, + "bonus_id": 23292 + }, + { + "id": 123293, + "bonus_id": 23293 + }, + { + "id": 123294, + "bonus_id": 23294 + }, + { + "id": 123295, + "bonus_id": 23295 + }, + { + "id": 123296, + "bonus_id": 23296 + }, + { + "id": 123297, + "bonus_id": 23297 + }, + { + "id": 123298, + "bonus_id": 23298 + }, + { + "id": 123299, + "bonus_id": 23299 + }, + { + "id": 123300, + "bonus_id": 23300 + }, + { + "id": 123301, + "bonus_id": 23301 + }, + { + "id": 123302, + "bonus_id": 131 + } + ], + "basic_bonuses": [ + { + "id": 1, + "kind": "Gold", + "amount": 1 + }, + { + "id": 2, + "kind": "Refresh", + "amount": 1 + }, + { + "id": 3, + "kind": "Exp", + "amount": 1 + }, + { + "id": 4, + "kind": "GlobalHp", + "amount": 0 + }, + { + "id": 101, + "kind": "RandomAvatar", + "amount": 1 + }, + { + "id": 102, + "kind": "RandomAvatar", + "amount": 2 + }, + { + "id": 103, + "kind": "RandomAvatar", + "amount": 3 + }, + { + "id": 104, + "kind": "RandomAvatar", + "amount": 4 + }, + { + "id": 105, + "kind": "RandomAvatar", + "amount": 5 + }, + { + "id": 106, + "kind": "RandomAvatar", + "amount": 1 + }, + { + "id": 107, + "kind": "RandomAvatar", + "amount": 2 + }, + { + "id": 108, + "kind": "RandomAvatar", + "amount": 3 + }, + { + "id": 109, + "kind": "RandomAvatar", + "amount": 4 + }, + { + "id": 110, + "kind": "RandomAvatar", + "amount": 5 + }, + { + "id": 111, + "kind": "RandomAvatar", + "amount": 1 + }, + { + "id": 112, + "kind": "RandomAvatar", + "amount": 2 + }, + { + "id": 113, + "kind": "RandomAvatar", + "amount": 3 + }, + { + "id": 114, + "kind": "RandomAvatar", + "amount": 4 + }, + { + "id": 115, + "kind": "RandomAvatar", + "amount": 5 + }, + { + "id": 116, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 117, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 118, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 119, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 120, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 121, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 122, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 123, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 124, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 125, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 126, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 127, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 128, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 129, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 130, + "kind": "AllAvatarByRarity", + "amount": 0 + }, + { + "id": 131, + "kind": "RandomAvatar", + "amount": 0 + }, + { + "id": 350101, + "kind": "Item", + "amount": 350101 + }, + { + "id": 350102, + "kind": "Item", + "amount": 350102 + }, + { + "id": 350103, + "kind": "Item", + "amount": 350103 + }, + { + "id": 350104, + "kind": "Item", + "amount": 350104 + }, + { + "id": 350105, + "kind": "Item", + "amount": 350105 + }, + { + "id": 350106, + "kind": "Item", + "amount": 350106 + }, + { + "id": 350107, + "kind": "Item", + "amount": 0 + }, + { + "id": 350108, + "kind": "Item", + "amount": 0 + }, + { + "id": 350109, + "kind": "TrailblazeShopCoin", + "amount": 1 + }, + { + "id": 350110, + "kind": "Item", + "amount": 1 + }, + { + "id": 350111, + "kind": "Item", + "amount": 1 + }, + { + "id": 350112, + "kind": "Item", + "amount": 0 + }, + { + "id": 350113, + "kind": "Item", + "amount": 0 + }, + { + "id": 350114, + "kind": "Item", + "amount": 0 + }, + { + "id": 350115, + "kind": "Item", + "amount": 0 + }, + { + "id": 350116, + "kind": "Item", + "amount": 0 + }, + { + "id": 350117, + "kind": "Item", + "amount": 0 + }, + { + "id": 350118, + "kind": "Item", + "amount": 0 + }, + { + "id": 350119, + "kind": "Item", + "amount": 0 + }, + { + "id": 99989, + "kind": "Item", + "amount": 0 + }, + { + "id": 99999, + "kind": "Item", + "amount": 0 + }, + { + "id": 99998, + "kind": "Item", + "amount": 0 + }, + { + "id": 99997, + "kind": "Item", + "amount": 0 + }, + { + "id": 99996, + "kind": "Item", + "amount": 0 + }, + { + "id": 99995, + "kind": "Item", + "amount": 0 + }, + { + "id": 99994, + "kind": "Item", + "amount": 0 + }, + { + "id": 99993, + "kind": "Item", + "amount": 0 + }, + { + "id": 99992, + "kind": "Item", + "amount": 0 + }, + { + "id": 99991, + "kind": "Item", + "amount": 0 + }, + { + "id": 99990, + "kind": "Item", + "amount": 0 + }, + { + "id": 201, + "kind": "Item", + "amount": 350101 + }, + { + "id": 202, + "kind": "Item", + "amount": 350102 + }, + { + "id": 203, + "kind": "Item", + "amount": 350103 + }, + { + "id": 204, + "kind": "Item", + "amount": 350104 + }, + { + "id": 205, + "kind": "Item", + "amount": 350105 + }, + { + "id": 206, + "kind": "Item", + "amount": 350106 + }, + { + "id": 207, + "kind": "Item", + "amount": 99999 + }, + { + "id": 208, + "kind": "Item", + "amount": 99998 + }, + { + "id": 209, + "kind": "Item", + "amount": 99997 + }, + { + "id": 210, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 211, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 212, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 213, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 214, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 215, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 216, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 217, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 218, + "kind": "RandomEquipByFunc", + "amount": 0 + }, + { + "id": 219, + "kind": "RandomEquipByFunc", + "amount": 0 + }, + { + "id": 220, + "kind": "Item", + "amount": 0 + }, + { + "id": 221, + "kind": "Item", + "amount": 0 + }, + { + "id": 222, + "kind": "Item", + "amount": 0 + }, + { + "id": 223, + "kind": "Item", + "amount": 0 + }, + { + "id": 224, + "kind": "Item", + "amount": 0 + }, + { + "id": 225, + "kind": "Item", + "amount": 0 + }, + { + "id": 226, + "kind": "Item", + "amount": 0 + }, + { + "id": 227, + "kind": "Item", + "amount": 0 + }, + { + "id": 228, + "kind": "Item", + "amount": 0 + }, + { + "id": 229, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 230, + "kind": "RandomEquipByCategory", + "amount": 0 + }, + { + "id": 231, + "kind": "Item", + "amount": 0 + }, + { + "id": 232, + "kind": "Item", + "amount": 0 + }, + { + "id": 233, + "kind": "SpotLightReplaceCnt", + "amount": 0 + }, + { + "id": 234, + "kind": "ElationGoods", + "amount": 0 + }, + { + "id": 235, + "kind": "ElationGoods", + "amount": 0 + }, + { + "id": 236, + "kind": "ElationGoods", + "amount": 0 + }, + { + "id": 237, + "kind": "ElationGoods", + "amount": 0 + }, + { + "id": 238, + "kind": "ElationGoods", + "amount": 0 + }, + { + "id": 239, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 240, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 241, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 242, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 243, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 244, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 245, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 246, + "kind": "ElationItem", + "amount": 0 + }, + { + "id": 247, + "kind": "SpotLightFreeRefreshCnt", + "amount": 0 + }, + { + "id": 12011123, + "kind": "SpecificAvatarWithRandomEquip", + "amount": 0 + }, + { + "id": 13011258, + "kind": "SpecificAvatarWithEquip", + "amount": 0 + }, + { + "id": 13082516, + "kind": "SpecificAvatarWithEquip", + "amount": 0 + }, + { + "id": 15011327, + "kind": "SpecificAvatarWithEquip", + "amount": 0 + }, + { + "id": 300, + "kind": "Orb", + "amount": 0 + }, + { + "id": 301, + "kind": "Orb", + "amount": 0 + }, + { + "id": 302, + "kind": "Orb", + "amount": 0 + }, + { + "id": 303, + "kind": "Orb", + "amount": 0 + }, + { + "id": 304, + "kind": "Orb", + "amount": 0 + }, + { + "id": 305, + "kind": "Orb", + "amount": 0 + }, + { + "id": 330, + "kind": "Orb", + "amount": 0 + }, + { + "id": 331, + "kind": "Orb", + "amount": 0 + }, + { + "id": 332, + "kind": "Orb", + "amount": 0 + }, + { + "id": 333, + "kind": "Orb", + "amount": 0 + }, + { + "id": 334, + "kind": "Orb", + "amount": 0 + }, + { + "id": 335, + "kind": "Orb", + "amount": 0 + }, + { + "id": 336, + "kind": "Orb", + "amount": 0 + }, + { + "id": 337, + "kind": "Orb", + "amount": 0 + }, + { + "id": 338, + "kind": "Orb", + "amount": 0 + }, + { + "id": 339, + "kind": "Orb", + "amount": 0 + }, + { + "id": 340, + "kind": "Orb", + "amount": 0 + }, + { + "id": 341, + "kind": "Orb", + "amount": 0 + }, + { + "id": 360, + "kind": "Orb", + "amount": 0 + }, + { + "id": 361, + "kind": "Orb", + "amount": 0 + }, + { + "id": 362, + "kind": "Orb", + "amount": 0 + }, + { + "id": 363, + "kind": "Orb", + "amount": 0 + }, + { + "id": 364, + "kind": "Orb", + "amount": 0 + }, + { + "id": 365, + "kind": "Orb", + "amount": 0 + }, + { + "id": 366, + "kind": "Orb", + "amount": 0 + }, + { + "id": 367, + "kind": "Orb", + "amount": 0 + }, + { + "id": 368, + "kind": "Orb", + "amount": 0 + }, + { + "id": 369, + "kind": "Orb", + "amount": 0 + }, + { + "id": 370, + "kind": "Orb", + "amount": 0 + }, + { + "id": 380, + "kind": "Orb", + "amount": 0 + }, + { + "id": 381, + "kind": "Orb", + "amount": 0 + }, + { + "id": 1001, + "kind": "SpecificAvatar", + "amount": 1001 + }, + { + "id": 1003, + "kind": "SpecificAvatar", + "amount": 1003 + }, + { + "id": 1004, + "kind": "SpecificAvatar", + "amount": 1004 + }, + { + "id": 1005, + "kind": "SpecificAvatar", + "amount": 1005 + }, + { + "id": 1006, + "kind": "SpecificAvatar", + "amount": 1006 + }, + { + "id": 1009, + "kind": "SpecificAvatar", + "amount": 1009 + }, + { + "id": 1013, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 1014, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 1015, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 1101, + "kind": "SpecificAvatar", + "amount": 1101 + }, + { + "id": 1102, + "kind": "SpecificAvatar", + "amount": 1102 + }, + { + "id": 1104, + "kind": "SpecificAvatar", + "amount": 1104 + }, + { + "id": 1105, + "kind": "SpecificAvatar", + "amount": 1105 + }, + { + "id": 1106, + "kind": "SpecificAvatar", + "amount": 1106 + }, + { + "id": 1108, + "kind": "SpecificAvatar", + "amount": 1108 + }, + { + "id": 1112, + "kind": "SpecificAvatar", + "amount": 1112 + }, + { + "id": 1201, + "kind": "SpecificAvatar", + "amount": 1201 + }, + { + "id": 1202, + "kind": "SpecificAvatar", + "amount": 1202 + }, + { + "id": 1203, + "kind": "SpecificAvatar", + "amount": 1203 + }, + { + "id": 1204, + "kind": "SpecificAvatar", + "amount": 1204 + }, + { + "id": 1205, + "kind": "SpecificAvatar", + "amount": 1205 + }, + { + "id": 1208, + "kind": "SpecificAvatar", + "amount": 1208 + }, + { + "id": 1209, + "kind": "SpecificAvatar", + "amount": 1209 + }, + { + "id": 1210, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1212, + "kind": "SpecificAvatar", + "amount": 1212 + }, + { + "id": 1213, + "kind": "SpecificAvatar", + "amount": 1213 + }, + { + "id": 1217, + "kind": "SpecificAvatar", + "amount": 1217 + }, + { + "id": 1218, + "kind": "SpecificAvatar", + "amount": 1218 + }, + { + "id": 1220, + "kind": "SpecificAvatar", + "amount": 1220 + }, + { + "id": 1221, + "kind": "SpecificAvatar", + "amount": 1221 + }, + { + "id": 1222, + "kind": "SpecificAvatar", + "amount": 1222 + }, + { + "id": 1223, + "kind": "SpecificAvatar", + "amount": 1223 + }, + { + "id": 1225, + "kind": "SpecificAvatar", + "amount": 1225 + }, + { + "id": 1301, + "kind": "SpecificAvatar", + "amount": 1301 + }, + { + "id": 1302, + "kind": "SpecificAvatar", + "amount": 1302 + }, + { + "id": 1303, + "kind": "SpecificAvatar", + "amount": 1303 + }, + { + "id": 1304, + "kind": "SpecificAvatar", + "amount": 1304 + }, + { + "id": 1305, + "kind": "SpecificAvatar", + "amount": 1305 + }, + { + "id": 1306, + "kind": "SpecificAvatar", + "amount": 1306 + }, + { + "id": 1307, + "kind": "SpecificAvatar", + "amount": 1307 + }, + { + "id": 1308, + "kind": "SpecificAvatar", + "amount": 1308 + }, + { + "id": 1309, + "kind": "SpecificAvatar", + "amount": 1309 + }, + { + "id": 1310, + "kind": "SpecificAvatar", + "amount": 1310 + }, + { + "id": 1313, + "kind": "SpecificAvatar", + "amount": 1313 + }, + { + "id": 1314, + "kind": "SpecificAvatar", + "amount": 1314 + }, + { + "id": 1315, + "kind": "SpecificAvatar", + "amount": 1315 + }, + { + "id": 1317, + "kind": "SpecificAvatar", + "amount": 1317 + }, + { + "id": 1321, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1401, + "kind": "SpecificAvatar", + "amount": 1401 + }, + { + "id": 1402, + "kind": "SpecificAvatar", + "amount": 1402 + }, + { + "id": 1403, + "kind": "SpecificAvatar", + "amount": 1403 + }, + { + "id": 1404, + "kind": "SpecificAvatar", + "amount": 1404 + }, + { + "id": 1405, + "kind": "SpecificAvatar", + "amount": 1405 + }, + { + "id": 1406, + "kind": "SpecificAvatar", + "amount": 1406 + }, + { + "id": 1407, + "kind": "SpecificAvatar", + "amount": 1407 + }, + { + "id": 1408, + "kind": "SpecificAvatar", + "amount": 1408 + }, + { + "id": 1409, + "kind": "SpecificAvatar", + "amount": 1409 + }, + { + "id": 1410, + "kind": "SpecificAvatar", + "amount": 1410 + }, + { + "id": 1412, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 1413, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 1414, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 1415, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 1501, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 1502, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 1503, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 6042, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1107, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201107, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301107, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1214, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201214, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301214, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 206042, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 306042, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1504, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1505, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1506, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1507, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1508, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1509, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1510, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1511, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 8007, + "kind": "SpecificAvatar", + "amount": 8007 + }, + { + "id": 8009, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 9001, + "kind": "Gold", + "amount": 1 + }, + { + "id": 9002, + "kind": "RandomAvatar", + "amount": 1 + }, + { + "id": 9003, + "kind": "RandomAvatar", + "amount": 2 + }, + { + "id": 9004, + "kind": "RandomAvatar", + "amount": 3 + }, + { + "id": 9005, + "kind": "RandomAvatar", + "amount": 4 + }, + { + "id": 9006, + "kind": "RandomAvatar", + "amount": 5 + }, + { + "id": 9007, + "kind": "Refresh", + "amount": 1 + }, + { + "id": 101001, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101003, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101004, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101005, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101013, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101014, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101015, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101101, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101102, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101104, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101105, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101106, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101108, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101112, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101201, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101202, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101203, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101204, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101205, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101208, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101209, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101212, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101213, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101217, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101218, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101220, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101221, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101222, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101223, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101225, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101301, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101302, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101303, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101304, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101305, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101306, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101307, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101308, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101309, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101310, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101313, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101314, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101315, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101317, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101401, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101402, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101403, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101404, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101405, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101406, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101407, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101408, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101409, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101410, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101412, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101413, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101414, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101415, + "kind": "Orb", + "amount": 0 + }, + { + "id": 108007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120030, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121008, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121010, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121011, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121012, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121013, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121014, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121015, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121016, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121017, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121018, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121019, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121020, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121021, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121022, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121023, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123001, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123002, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123003, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123004, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123005, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123008, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123101, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123102, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123103, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123104, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123105, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123106, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123107, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123108, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123111, + "kind": "Orb", + "amount": 0 + }, + { + "id": 140021, + "kind": "Orb", + "amount": 0 + }, + { + "id": 140022, + "kind": "Orb", + "amount": 0 + }, + { + "id": 140023, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190291, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190292, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190293, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190294, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190295, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190296, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190297, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190298, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198001, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198002, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198003, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198004, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198005, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198008, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198010, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198011, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198012, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198013, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200001, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200002, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200003, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200004, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200005, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211001, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211003, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211004, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211005, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211013, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211014, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211015, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211101, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211102, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211104, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211105, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211106, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211108, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211112, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211201, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211202, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211203, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211204, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211205, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211208, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211209, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211212, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211213, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211217, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211218, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211220, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211221, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211222, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211223, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211225, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211301, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211302, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211303, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211304, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211305, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211306, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211307, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211308, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211309, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211310, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211313, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211314, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211315, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211317, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211401, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211402, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211403, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211404, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211405, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211406, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211407, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211408, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211409, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211410, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211412, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211413, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211414, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211415, + "kind": "Orb", + "amount": 0 + }, + { + "id": 218007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311001, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311003, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311004, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311005, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311013, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311014, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311015, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311101, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311102, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311104, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311105, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311106, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311108, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311112, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311201, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311202, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311203, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311204, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311205, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311208, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311209, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311212, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311213, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311217, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311218, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311220, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311221, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311222, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311223, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311225, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311301, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311302, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311303, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311304, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311305, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311306, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311307, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311308, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311309, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311310, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311313, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311314, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311315, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311317, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311401, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311402, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311403, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311404, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311405, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311406, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311407, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311408, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311409, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311410, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311412, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311413, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311414, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311415, + "kind": "Orb", + "amount": 0 + }, + { + "id": 318007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 350201, + "kind": "Item", + "amount": 350201 + }, + { + "id": 350202, + "kind": "Item", + "amount": 350202 + }, + { + "id": 350203, + "kind": "Item", + "amount": 350203 + }, + { + "id": 350204, + "kind": "Item", + "amount": 350204 + }, + { + "id": 350205, + "kind": "Item", + "amount": 350205 + }, + { + "id": 350206, + "kind": "Item", + "amount": 350206 + }, + { + "id": 350207, + "kind": "Item", + "amount": 350207 + }, + { + "id": 350208, + "kind": "Item", + "amount": 350208 + }, + { + "id": 350601, + "kind": "Item", + "amount": 0 + }, + { + "id": 350602, + "kind": "Item", + "amount": 0 + }, + { + "id": 350701, + "kind": "Item", + "amount": 0 + }, + { + "id": 35030101, + "kind": "Item", + "amount": 35040101 + }, + { + "id": 35030102, + "kind": "Item", + "amount": 35040102 + }, + { + "id": 35030103, + "kind": "Item", + "amount": 35040103 + }, + { + "id": 35030104, + "kind": "Item", + "amount": 35040104 + }, + { + "id": 35030105, + "kind": "Item", + "amount": 35040105 + }, + { + "id": 35030106, + "kind": "Item", + "amount": 35040106 + }, + { + "id": 35030107, + "kind": "Item", + "amount": 35040107 + }, + { + "id": 35030108, + "kind": "Item", + "amount": 35040108 + }, + { + "id": 35030202, + "kind": "Item", + "amount": 35040202 + }, + { + "id": 35030203, + "kind": "Item", + "amount": 35040203 + }, + { + "id": 35030204, + "kind": "Item", + "amount": 35040204 + }, + { + "id": 35030205, + "kind": "Item", + "amount": 35040205 + }, + { + "id": 35030206, + "kind": "Item", + "amount": 35040206 + }, + { + "id": 35030207, + "kind": "Item", + "amount": 35040207 + }, + { + "id": 35030208, + "kind": "Item", + "amount": 35040208 + }, + { + "id": 35030303, + "kind": "Item", + "amount": 35040303 + }, + { + "id": 35030304, + "kind": "Item", + "amount": 35040304 + }, + { + "id": 35030305, + "kind": "Item", + "amount": 35040305 + }, + { + "id": 35030306, + "kind": "Item", + "amount": 35040306 + }, + { + "id": 35030307, + "kind": "Item", + "amount": 35040307 + }, + { + "id": 35030308, + "kind": "Item", + "amount": 35040101 + }, + { + "id": 35030404, + "kind": "Item", + "amount": 35040102 + }, + { + "id": 35030405, + "kind": "Item", + "amount": 35040103 + }, + { + "id": 35030406, + "kind": "Item", + "amount": 35040104 + }, + { + "id": 35030407, + "kind": "Item", + "amount": 35040105 + }, + { + "id": 35030408, + "kind": "Item", + "amount": 35040106 + }, + { + "id": 35030505, + "kind": "Item", + "amount": 35040107 + }, + { + "id": 35030506, + "kind": "Item", + "amount": 35040108 + }, + { + "id": 35030507, + "kind": "Item", + "amount": 35040202 + }, + { + "id": 35030508, + "kind": "Item", + "amount": 35040203 + }, + { + "id": 35030606, + "kind": "Item", + "amount": 35040204 + }, + { + "id": 35030607, + "kind": "Item", + "amount": 35040205 + }, + { + "id": 35030608, + "kind": "Item", + "amount": 35040206 + }, + { + "id": 35030707, + "kind": "Item", + "amount": 35040207 + }, + { + "id": 35030708, + "kind": "Item", + "amount": 35040208 + }, + { + "id": 35030808, + "kind": "Item", + "amount": 35040303 + }, + { + "id": 35040101, + "kind": "Item", + "amount": 35040101 + }, + { + "id": 35040102, + "kind": "Item", + "amount": 35040102 + }, + { + "id": 35040103, + "kind": "Item", + "amount": 35040103 + }, + { + "id": 35040104, + "kind": "Item", + "amount": 35040104 + }, + { + "id": 35040105, + "kind": "Item", + "amount": 35040105 + }, + { + "id": 35040106, + "kind": "Item", + "amount": 35040106 + }, + { + "id": 35040107, + "kind": "Item", + "amount": 35040107 + }, + { + "id": 35040108, + "kind": "Item", + "amount": 35040108 + }, + { + "id": 35040202, + "kind": "Item", + "amount": 35040202 + }, + { + "id": 35040203, + "kind": "Item", + "amount": 35040203 + }, + { + "id": 35040204, + "kind": "Item", + "amount": 35040204 + }, + { + "id": 35040205, + "kind": "Item", + "amount": 35040205 + }, + { + "id": 35040206, + "kind": "Item", + "amount": 35040206 + }, + { + "id": 35040207, + "kind": "Item", + "amount": 35040207 + }, + { + "id": 35040208, + "kind": "Item", + "amount": 35040208 + }, + { + "id": 35040303, + "kind": "Item", + "amount": 35040303 + }, + { + "id": 35040304, + "kind": "Item", + "amount": 35040304 + }, + { + "id": 35040305, + "kind": "Item", + "amount": 35040305 + }, + { + "id": 35040306, + "kind": "Item", + "amount": 35040306 + }, + { + "id": 35040307, + "kind": "Item", + "amount": 35040307 + }, + { + "id": 35040308, + "kind": "Item", + "amount": 35040308 + }, + { + "id": 35040404, + "kind": "Item", + "amount": 35040404 + }, + { + "id": 35040405, + "kind": "Item", + "amount": 35040405 + }, + { + "id": 35040406, + "kind": "Item", + "amount": 35040406 + }, + { + "id": 35040407, + "kind": "Item", + "amount": 35040407 + }, + { + "id": 35040408, + "kind": "Item", + "amount": 35040408 + }, + { + "id": 35040505, + "kind": "Item", + "amount": 35040505 + }, + { + "id": 35040506, + "kind": "Item", + "amount": 35040506 + }, + { + "id": 35040507, + "kind": "Item", + "amount": 35040507 + }, + { + "id": 35040508, + "kind": "Item", + "amount": 35040508 + }, + { + "id": 35040606, + "kind": "Item", + "amount": 35040606 + }, + { + "id": 35040607, + "kind": "Item", + "amount": 35040607 + }, + { + "id": 35040608, + "kind": "Item", + "amount": 35040608 + }, + { + "id": 35040707, + "kind": "Item", + "amount": 35040707 + }, + { + "id": 35040708, + "kind": "Item", + "amount": 35040708 + }, + { + "id": 35040808, + "kind": "Item", + "amount": 35040808 + }, + { + "id": 35051001, + "kind": "Item", + "amount": 35051001 + }, + { + "id": 35051003, + "kind": "Item", + "amount": 35051003 + }, + { + "id": 35051005, + "kind": "Item", + "amount": 35051005 + }, + { + "id": 35051006, + "kind": "Item", + "amount": 35051006 + }, + { + "id": 35051007, + "kind": "Item", + "amount": 35051007 + }, + { + "id": 35051008, + "kind": "Item", + "amount": 35051008 + }, + { + "id": 35051010, + "kind": "Item", + "amount": 35051010 + }, + { + "id": 35051011, + "kind": "Item", + "amount": 35051011 + }, + { + "id": 35051012, + "kind": "Item", + "amount": 35051012 + }, + { + "id": 35051013, + "kind": "Item", + "amount": 0 + }, + { + "id": 35052001, + "kind": "Item", + "amount": 35052001 + }, + { + "id": 35052002, + "kind": "Item", + "amount": 35052002 + }, + { + "id": 35052003, + "kind": "Item", + "amount": 35052003 + }, + { + "id": 35052004, + "kind": "Item", + "amount": 35052004 + }, + { + "id": 35052005, + "kind": "Item", + "amount": 35052005 + }, + { + "id": 35052006, + "kind": "Item", + "amount": 35052006 + }, + { + "id": 35052007, + "kind": "Item", + "amount": 35052007 + }, + { + "id": 35052008, + "kind": "Item", + "amount": 35052008 + }, + { + "id": 35052009, + "kind": "Item", + "amount": 35052009 + }, + { + "id": 35052010, + "kind": "Item", + "amount": 35052010 + }, + { + "id": 35052011, + "kind": "Item", + "amount": 35052011 + }, + { + "id": 35052012, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100202, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100102, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100302, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100902, + "kind": "Item", + "amount": 0 + }, + { + "id": 355101002, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100802, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100402, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100502, + "kind": "Item", + "amount": 0 + }, + { + "id": 355100602, + "kind": "Item", + "amount": 0 + }, + { + "id": 355101202, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200102, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200402, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200802, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200302, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200602, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200202, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200502, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200902, + "kind": "Item", + "amount": 0 + }, + { + "id": 355200702, + "kind": "Item", + "amount": 0 + }, + { + "id": 355201102, + "kind": "Item", + "amount": 0 + }, + { + "id": 355201002, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030101, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030102, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030103, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030105, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030106, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030108, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030202, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030205, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030207, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030208, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030303, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030306, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030307, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030406, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030408, + "kind": "Item", + "amount": 0 + }, + { + "id": 47030508, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040101, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040102, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040103, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040105, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040106, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040108, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040202, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040205, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040207, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040208, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040303, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040306, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040307, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040406, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040408, + "kind": "Item", + "amount": 0 + }, + { + "id": 47040508, + "kind": "Item", + "amount": 0 + }, + { + "id": 353001, + "kind": "Item", + "amount": 0 + }, + { + "id": 353002, + "kind": "Item", + "amount": 0 + }, + { + "id": 353003, + "kind": "Item", + "amount": 0 + }, + { + "id": 353004, + "kind": "Item", + "amount": 0 + }, + { + "id": 353005, + "kind": "Item", + "amount": 0 + }, + { + "id": 353101, + "kind": "Item", + "amount": 0 + }, + { + "id": 353102, + "kind": "Item", + "amount": 0 + }, + { + "id": 353103, + "kind": "Item", + "amount": 0 + }, + { + "id": 353104, + "kind": "Item", + "amount": 0 + }, + { + "id": 353105, + "kind": "Item", + "amount": 0 + }, + { + "id": 353106, + "kind": "Item", + "amount": 0 + }, + { + "id": 35130999, + "kind": "Item", + "amount": 0 + }, + { + "id": 352101, + "kind": "Item", + "amount": 0 + }, + { + "id": 352201, + "kind": "Item", + "amount": 0 + }, + { + "id": 352301, + "kind": "Item", + "amount": 0 + }, + { + "id": 352302, + "kind": "Item", + "amount": 0 + }, + { + "id": 352303, + "kind": "Item", + "amount": 0 + }, + { + "id": 352304, + "kind": "Item", + "amount": 0 + }, + { + "id": 352401, + "kind": "Item", + "amount": 0 + }, + { + "id": 352402, + "kind": "Item", + "amount": 0 + }, + { + "id": 352404, + "kind": "Item", + "amount": 0 + }, + { + "id": 352405, + "kind": "Item", + "amount": 0 + }, + { + "id": 352406, + "kind": "Item", + "amount": 0 + }, + { + "id": 352501, + "kind": "Item", + "amount": 0 + }, + { + "id": 352502, + "kind": "Item", + "amount": 0 + }, + { + "id": 352503, + "kind": "Item", + "amount": 0 + }, + { + "id": 352504, + "kind": "Item", + "amount": 0 + }, + { + "id": 352505, + "kind": "Item", + "amount": 0 + }, + { + "id": 352506, + "kind": "Item", + "amount": 0 + }, + { + "id": 352507, + "kind": "Item", + "amount": 0 + }, + { + "id": 352601, + "kind": "Item", + "amount": 0 + }, + { + "id": 352602, + "kind": "Item", + "amount": 0 + }, + { + "id": 352603, + "kind": "Item", + "amount": 0 + }, + { + "id": 352604, + "kind": "Item", + "amount": 0 + }, + { + "id": 352605, + "kind": "Item", + "amount": 0 + }, + { + "id": 352606, + "kind": "Item", + "amount": 0 + }, + { + "id": 352607, + "kind": "Item", + "amount": 0 + }, + { + "id": 352608, + "kind": "Item", + "amount": 0 + }, + { + "id": 352701, + "kind": "Item", + "amount": 0 + }, + { + "id": 352702, + "kind": "Item", + "amount": 0 + }, + { + "id": 352703, + "kind": "Item", + "amount": 0 + }, + { + "id": 352704, + "kind": "Item", + "amount": 0 + }, + { + "id": 352705, + "kind": "Item", + "amount": 0 + }, + { + "id": 352706, + "kind": "Item", + "amount": 0 + }, + { + "id": 352801, + "kind": "Item", + "amount": 0 + }, + { + "id": 352802, + "kind": "Item", + "amount": 0 + }, + { + "id": 352803, + "kind": "Item", + "amount": 0 + }, + { + "id": 352804, + "kind": "Item", + "amount": 0 + }, + { + "id": 352901, + "kind": "Item", + "amount": 0 + }, + { + "id": 353201, + "kind": "Item", + "amount": 0 + }, + { + "id": 353202, + "kind": "Item", + "amount": 0 + }, + { + "id": 353203, + "kind": "Item", + "amount": 0 + }, + { + "id": 353204, + "kind": "Item", + "amount": 0 + }, + { + "id": 353205, + "kind": "Item", + "amount": 0 + }, + { + "id": 353206, + "kind": "Item", + "amount": 0 + }, + { + "id": 201001, + "kind": "SpecificAvatar", + "amount": 1001 + }, + { + "id": 201003, + "kind": "SpecificAvatar", + "amount": 1003 + }, + { + "id": 201004, + "kind": "SpecificAvatar", + "amount": 1004 + }, + { + "id": 201005, + "kind": "SpecificAvatar", + "amount": 1005 + }, + { + "id": 201006, + "kind": "SpecificAvatar", + "amount": 1006 + }, + { + "id": 201009, + "kind": "SpecificAvatar", + "amount": 1009 + }, + { + "id": 201013, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 201014, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 201015, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 201101, + "kind": "SpecificAvatar", + "amount": 1101 + }, + { + "id": 201102, + "kind": "SpecificAvatar", + "amount": 1102 + }, + { + "id": 201104, + "kind": "SpecificAvatar", + "amount": 1104 + }, + { + "id": 201105, + "kind": "SpecificAvatar", + "amount": 1105 + }, + { + "id": 201106, + "kind": "SpecificAvatar", + "amount": 1106 + }, + { + "id": 201108, + "kind": "SpecificAvatar", + "amount": 1108 + }, + { + "id": 201112, + "kind": "SpecificAvatar", + "amount": 1112 + }, + { + "id": 201201, + "kind": "SpecificAvatar", + "amount": 1201 + }, + { + "id": 201202, + "kind": "SpecificAvatar", + "amount": 1202 + }, + { + "id": 201203, + "kind": "SpecificAvatar", + "amount": 1203 + }, + { + "id": 201204, + "kind": "SpecificAvatar", + "amount": 1204 + }, + { + "id": 201205, + "kind": "SpecificAvatar", + "amount": 1205 + }, + { + "id": 201208, + "kind": "SpecificAvatar", + "amount": 1208 + }, + { + "id": 201209, + "kind": "SpecificAvatar", + "amount": 1209 + }, + { + "id": 201210, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201212, + "kind": "SpecificAvatar", + "amount": 1212 + }, + { + "id": 201213, + "kind": "SpecificAvatar", + "amount": 1213 + }, + { + "id": 201217, + "kind": "SpecificAvatar", + "amount": 1217 + }, + { + "id": 201218, + "kind": "SpecificAvatar", + "amount": 1218 + }, + { + "id": 201220, + "kind": "SpecificAvatar", + "amount": 1220 + }, + { + "id": 201221, + "kind": "SpecificAvatar", + "amount": 1221 + }, + { + "id": 201222, + "kind": "SpecificAvatar", + "amount": 1222 + }, + { + "id": 201223, + "kind": "SpecificAvatar", + "amount": 1223 + }, + { + "id": 201225, + "kind": "SpecificAvatar", + "amount": 1225 + }, + { + "id": 201301, + "kind": "SpecificAvatar", + "amount": 1301 + }, + { + "id": 201302, + "kind": "SpecificAvatar", + "amount": 1302 + }, + { + "id": 201303, + "kind": "SpecificAvatar", + "amount": 1303 + }, + { + "id": 201304, + "kind": "SpecificAvatar", + "amount": 1304 + }, + { + "id": 201305, + "kind": "SpecificAvatar", + "amount": 1305 + }, + { + "id": 201306, + "kind": "SpecificAvatar", + "amount": 1306 + }, + { + "id": 201307, + "kind": "SpecificAvatar", + "amount": 1307 + }, + { + "id": 201308, + "kind": "SpecificAvatar", + "amount": 1308 + }, + { + "id": 201309, + "kind": "SpecificAvatar", + "amount": 1309 + }, + { + "id": 201310, + "kind": "SpecificAvatar", + "amount": 1310 + }, + { + "id": 201313, + "kind": "SpecificAvatar", + "amount": 1313 + }, + { + "id": 201314, + "kind": "SpecificAvatar", + "amount": 1314 + }, + { + "id": 201315, + "kind": "SpecificAvatar", + "amount": 1315 + }, + { + "id": 201317, + "kind": "SpecificAvatar", + "amount": 1317 + }, + { + "id": 201321, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201401, + "kind": "SpecificAvatar", + "amount": 1401 + }, + { + "id": 201402, + "kind": "SpecificAvatar", + "amount": 1402 + }, + { + "id": 201403, + "kind": "SpecificAvatar", + "amount": 1403 + }, + { + "id": 201404, + "kind": "SpecificAvatar", + "amount": 1404 + }, + { + "id": 201405, + "kind": "SpecificAvatar", + "amount": 1405 + }, + { + "id": 201406, + "kind": "SpecificAvatar", + "amount": 1406 + }, + { + "id": 201407, + "kind": "SpecificAvatar", + "amount": 1407 + }, + { + "id": 201408, + "kind": "SpecificAvatar", + "amount": 1408 + }, + { + "id": 201409, + "kind": "SpecificAvatar", + "amount": 1409 + }, + { + "id": 201410, + "kind": "SpecificAvatar", + "amount": 1410 + }, + { + "id": 201412, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 201413, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 201414, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 201415, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 208007, + "kind": "SpecificAvatar", + "amount": 8007 + }, + { + "id": 208009, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301001, + "kind": "SpecificAvatar", + "amount": 1001 + }, + { + "id": 301003, + "kind": "SpecificAvatar", + "amount": 1003 + }, + { + "id": 301004, + "kind": "SpecificAvatar", + "amount": 1004 + }, + { + "id": 301005, + "kind": "SpecificAvatar", + "amount": 1005 + }, + { + "id": 301006, + "kind": "SpecificAvatar", + "amount": 1006 + }, + { + "id": 301009, + "kind": "SpecificAvatar", + "amount": 1009 + }, + { + "id": 301013, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 301014, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 301015, + "kind": "SpecificAvatar", + "amount": 1013 + }, + { + "id": 301101, + "kind": "SpecificAvatar", + "amount": 1101 + }, + { + "id": 301102, + "kind": "SpecificAvatar", + "amount": 1102 + }, + { + "id": 301104, + "kind": "SpecificAvatar", + "amount": 1104 + }, + { + "id": 301105, + "kind": "SpecificAvatar", + "amount": 1105 + }, + { + "id": 301106, + "kind": "SpecificAvatar", + "amount": 1106 + }, + { + "id": 301108, + "kind": "SpecificAvatar", + "amount": 1108 + }, + { + "id": 301112, + "kind": "SpecificAvatar", + "amount": 1112 + }, + { + "id": 301201, + "kind": "SpecificAvatar", + "amount": 1201 + }, + { + "id": 301202, + "kind": "SpecificAvatar", + "amount": 1202 + }, + { + "id": 301203, + "kind": "SpecificAvatar", + "amount": 1203 + }, + { + "id": 301204, + "kind": "SpecificAvatar", + "amount": 1204 + }, + { + "id": 301205, + "kind": "SpecificAvatar", + "amount": 1205 + }, + { + "id": 301208, + "kind": "SpecificAvatar", + "amount": 1208 + }, + { + "id": 301209, + "kind": "SpecificAvatar", + "amount": 1209 + }, + { + "id": 301210, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301212, + "kind": "SpecificAvatar", + "amount": 1212 + }, + { + "id": 301213, + "kind": "SpecificAvatar", + "amount": 1213 + }, + { + "id": 301217, + "kind": "SpecificAvatar", + "amount": 1217 + }, + { + "id": 301218, + "kind": "SpecificAvatar", + "amount": 1218 + }, + { + "id": 301220, + "kind": "SpecificAvatar", + "amount": 1220 + }, + { + "id": 301221, + "kind": "SpecificAvatar", + "amount": 1221 + }, + { + "id": 301222, + "kind": "SpecificAvatar", + "amount": 1222 + }, + { + "id": 301223, + "kind": "SpecificAvatar", + "amount": 1223 + }, + { + "id": 301225, + "kind": "SpecificAvatar", + "amount": 1225 + }, + { + "id": 301301, + "kind": "SpecificAvatar", + "amount": 1301 + }, + { + "id": 301302, + "kind": "SpecificAvatar", + "amount": 1302 + }, + { + "id": 301303, + "kind": "SpecificAvatar", + "amount": 1303 + }, + { + "id": 301304, + "kind": "SpecificAvatar", + "amount": 1304 + }, + { + "id": 301305, + "kind": "SpecificAvatar", + "amount": 1305 + }, + { + "id": 301306, + "kind": "SpecificAvatar", + "amount": 1306 + }, + { + "id": 301307, + "kind": "SpecificAvatar", + "amount": 1307 + }, + { + "id": 301308, + "kind": "SpecificAvatar", + "amount": 1308 + }, + { + "id": 301309, + "kind": "SpecificAvatar", + "amount": 1309 + }, + { + "id": 301310, + "kind": "SpecificAvatar", + "amount": 1310 + }, + { + "id": 301313, + "kind": "SpecificAvatar", + "amount": 1313 + }, + { + "id": 301314, + "kind": "SpecificAvatar", + "amount": 1314 + }, + { + "id": 301315, + "kind": "SpecificAvatar", + "amount": 1315 + }, + { + "id": 301317, + "kind": "SpecificAvatar", + "amount": 1317 + }, + { + "id": 301321, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301401, + "kind": "SpecificAvatar", + "amount": 1401 + }, + { + "id": 301402, + "kind": "SpecificAvatar", + "amount": 1402 + }, + { + "id": 301403, + "kind": "SpecificAvatar", + "amount": 1403 + }, + { + "id": 301404, + "kind": "SpecificAvatar", + "amount": 1404 + }, + { + "id": 301405, + "kind": "SpecificAvatar", + "amount": 1405 + }, + { + "id": 301406, + "kind": "SpecificAvatar", + "amount": 1406 + }, + { + "id": 301407, + "kind": "SpecificAvatar", + "amount": 1407 + }, + { + "id": 301408, + "kind": "SpecificAvatar", + "amount": 1408 + }, + { + "id": 301409, + "kind": "SpecificAvatar", + "amount": 1409 + }, + { + "id": 301410, + "kind": "SpecificAvatar", + "amount": 1410 + }, + { + "id": 301412, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 301413, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 301414, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 301415, + "kind": "SpecificAvatar", + "amount": 1412 + }, + { + "id": 308007, + "kind": "SpecificAvatar", + "amount": 8007 + }, + { + "id": 308009, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 198014, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198015, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198016, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198017, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198018, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198019, + "kind": "Orb", + "amount": 0 + }, + { + "id": 198020, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200008, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200010, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200011, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200012, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200013, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200014, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200015, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200016, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200017, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200018, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200019, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200020, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200021, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200022, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200023, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200024, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200025, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200026, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200027, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200028, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200029, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200030, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200031, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200032, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200033, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200034, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200035, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200036, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200037, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121027, + "kind": "Orb", + "amount": 0 + }, + { + "id": 121029, + "kind": "Orb", + "amount": 0 + }, + { + "id": 306, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190271, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190272, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190273, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190274, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190275, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190281, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190282, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190283, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190284, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190285, + "kind": "Orb", + "amount": 0 + }, + { + "id": 111064, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120031, + "kind": "Orb", + "amount": 0 + }, + { + "id": 200038, + "kind": "Orb", + "amount": 0 + }, + { + "id": 201501, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201503, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201502, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201504, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201505, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201506, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201507, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201508, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201509, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201510, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201511, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301501, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301503, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301502, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301504, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301505, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301506, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301507, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301508, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301509, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301510, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301511, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1103, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1211, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1215, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1224, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1512, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 1513, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201103, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201211, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201215, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201224, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201512, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 201513, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301103, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301211, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301215, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301224, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301512, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 301513, + "kind": "SpecificAvatar", + "amount": 0 + }, + { + "id": 101501, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101502, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211501, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211502, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311501, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311502, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101321, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101504, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101505, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101506, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211321, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211504, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211505, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211506, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311321, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311504, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311505, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311506, + "kind": "Orb", + "amount": 0 + }, + { + "id": 108009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 218009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 318009, + "kind": "Orb", + "amount": 0 + }, + { + "id": 190299, + "kind": "Orb", + "amount": 0 + }, + { + "id": 122006, + "kind": "Orb", + "amount": 0 + }, + { + "id": 122007, + "kind": "Orb", + "amount": 0 + }, + { + "id": 111079, + "kind": "Orb", + "amount": 0 + }, + { + "id": 111080, + "kind": "Orb", + "amount": 0 + }, + { + "id": 111081, + "kind": "Orb", + "amount": 0 + }, + { + "id": 111082, + "kind": "Orb", + "amount": 0 + }, + { + "id": 111083, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101507, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101508, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101509, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101510, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211507, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211508, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211509, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211510, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311507, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311508, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311509, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311510, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101210, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211210, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311210, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101503, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211503, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311503, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123151, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123152, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123153, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123154, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123155, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123156, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123157, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123158, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123159, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123160, + "kind": "Orb", + "amount": 0 + }, + { + "id": 106042, + "kind": "Orb", + "amount": 0 + }, + { + "id": 216042, + "kind": "Orb", + "amount": 0 + }, + { + "id": 316042, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101107, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211107, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311107, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101214, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211214, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311214, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120054, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120056, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120044, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120045, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120055, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120057, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120046, + "kind": "Orb", + "amount": 0 + }, + { + "id": 120047, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101511, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211511, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311511, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101103, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101211, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101215, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101224, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101512, + "kind": "Orb", + "amount": 0 + }, + { + "id": 101513, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211103, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211211, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211215, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211224, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211512, + "kind": "Orb", + "amount": 0 + }, + { + "id": 211513, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311103, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311211, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311215, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311224, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311512, + "kind": "Orb", + "amount": 0 + }, + { + "id": 311513, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123201, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123202, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123203, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123204, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123205, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123206, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123207, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123208, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123209, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123210, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123211, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123212, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123213, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123214, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123215, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123216, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123217, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123218, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123219, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123220, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123221, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123222, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123223, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123224, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123225, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123226, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123227, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123228, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123229, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123230, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123231, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123232, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123233, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123234, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123235, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123236, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123237, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123238, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123239, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123240, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123241, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123242, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123243, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123244, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123245, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123246, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123247, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123248, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123249, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123250, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123251, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123252, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123253, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123254, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123255, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123256, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123257, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123258, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123259, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123260, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123261, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123262, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123263, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123264, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123265, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123266, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123267, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123268, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123269, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123270, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123271, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123272, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123273, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123274, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123275, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123276, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123277, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123278, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123279, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123280, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123281, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123282, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123283, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123284, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123285, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123286, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123287, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123288, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123289, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123290, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123291, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123292, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123293, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123294, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123295, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123296, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123297, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123298, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123299, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123300, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123301, + "kind": "Orb", + "amount": 0 + }, + { + "id": 123302, + "kind": "Orb", + "amount": 0 + } + ], + "equipment": [ + { + "id": 350201, + "category": "Basic" + }, + { + "id": 350202, + "category": "Basic" + }, + { + "id": 350203, + "category": "Basic" + }, + { + "id": 350204, + "category": "Basic" + }, + { + "id": 350205, + "category": "Basic" + }, + { + "id": 350206, + "category": "Basic" + }, + { + "id": 350207, + "category": "Basic" + }, + { + "id": 350208, + "category": "Basic" + }, + { + "id": 35100001, + "category": "TraitSpecial" + }, + { + "id": 35100002, + "category": "TraitSpecial" + }, + { + "id": 35100003, + "category": "TraitSpecial" + }, + { + "id": 35100011, + "category": "TraitSpecial" + }, + { + "id": 35100012, + "category": "TraitSpecial" + }, + { + "id": 35100013, + "category": "TraitSpecial" + }, + { + "id": 350601, + "category": "Material" + }, + { + "id": 350602, + "category": "Material" + }, + { + "id": 350701, + "category": "Crown" + }, + { + "id": 35051001, + "category": "Emblem" + }, + { + "id": 35051003, + "category": "Emblem" + }, + { + "id": 35051005, + "category": "Emblem" + }, + { + "id": 35051006, + "category": "Emblem" + }, + { + "id": 35051007, + "category": "Emblem" + }, + { + "id": 35051008, + "category": "Emblem" + }, + { + "id": 35051010, + "category": "Emblem" + }, + { + "id": 35051011, + "category": "Emblem" + }, + { + "id": 35051012, + "category": "Emblem" + }, + { + "id": 35052001, + "category": "Emblem" + }, + { + "id": 35052002, + "category": "Emblem" + }, + { + "id": 35052003, + "category": "Emblem" + }, + { + "id": 35052004, + "category": "Emblem" + }, + { + "id": 35052005, + "category": "Emblem" + }, + { + "id": 35052006, + "category": "Emblem" + }, + { + "id": 35052007, + "category": "Emblem" + }, + { + "id": 35052008, + "category": "Emblem" + }, + { + "id": 35052009, + "category": "Emblem" + }, + { + "id": 35052010, + "category": "Emblem" + }, + { + "id": 35052011, + "category": "Emblem" + }, + { + "id": 352101, + "category": "Trash" + }, + { + "id": 352201, + "category": "GoldTrash" + }, + { + "id": 35052012, + "category": "Emblem" + }, + { + "id": 352301, + "category": "Hack" + }, + { + "id": 352302, + "category": "Hack" + }, + { + "id": 352303, + "category": "Hack" + }, + { + "id": 352401, + "category": "Hack" + }, + { + "id": 352402, + "category": "Hack" + }, + { + "id": 352404, + "category": "Hack" + }, + { + "id": 352405, + "category": "Hack" + }, + { + "id": 352406, + "category": "Hack" + }, + { + "id": 352501, + "category": "Hack" + }, + { + "id": 352502, + "category": "Hack" + }, + { + "id": 352503, + "category": "Hack" + }, + { + "id": 352504, + "category": "Hack" + }, + { + "id": 352505, + "category": "Hack" + }, + { + "id": 352506, + "category": "Hack" + }, + { + "id": 352304, + "category": "Hack" + }, + { + "id": 352507, + "category": "Hack" + }, + { + "id": 35030101, + "category": "Craftable" + }, + { + "id": 35030102, + "category": "Craftable" + }, + { + "id": 35030103, + "category": "Craftable" + }, + { + "id": 35030104, + "category": "Craftable" + }, + { + "id": 35030105, + "category": "Craftable" + }, + { + "id": 35030106, + "category": "Craftable" + }, + { + "id": 35030107, + "category": "Craftable" + }, + { + "id": 35030108, + "category": "Craftable" + }, + { + "id": 35030202, + "category": "Craftable" + }, + { + "id": 35030203, + "category": "Craftable" + }, + { + "id": 35030204, + "category": "Craftable" + }, + { + "id": 35030205, + "category": "Craftable" + }, + { + "id": 35030206, + "category": "Craftable" + }, + { + "id": 35030207, + "category": "Craftable" + }, + { + "id": 35030208, + "category": "Craftable" + }, + { + "id": 35030303, + "category": "Craftable" + }, + { + "id": 35030304, + "category": "Craftable" + }, + { + "id": 35030305, + "category": "Craftable" + }, + { + "id": 35030306, + "category": "Craftable" + }, + { + "id": 35030307, + "category": "Craftable" + }, + { + "id": 35030308, + "category": "Craftable" + }, + { + "id": 35030404, + "category": "Craftable" + }, + { + "id": 35030405, + "category": "Craftable" + }, + { + "id": 35030406, + "category": "Craftable" + }, + { + "id": 35030407, + "category": "Craftable" + }, + { + "id": 35030408, + "category": "Craftable" + }, + { + "id": 35030505, + "category": "Craftable" + }, + { + "id": 35030506, + "category": "Craftable" + }, + { + "id": 35030507, + "category": "Craftable" + }, + { + "id": 35030508, + "category": "Craftable" + }, + { + "id": 35030606, + "category": "Craftable" + }, + { + "id": 35030607, + "category": "Craftable" + }, + { + "id": 35030608, + "category": "Craftable" + }, + { + "id": 35030707, + "category": "Craftable" + }, + { + "id": 35030708, + "category": "Craftable" + }, + { + "id": 35030808, + "category": "Craftable" + }, + { + "id": 35040101, + "category": "Radiant" + }, + { + "id": 35040102, + "category": "Radiant" + }, + { + "id": 35040103, + "category": "Radiant" + }, + { + "id": 35040104, + "category": "Radiant" + }, + { + "id": 35040105, + "category": "Radiant" + }, + { + "id": 35040106, + "category": "Radiant" + }, + { + "id": 35040107, + "category": "Radiant" + }, + { + "id": 35040108, + "category": "Radiant" + }, + { + "id": 35040202, + "category": "Radiant" + }, + { + "id": 35040203, + "category": "Radiant" + }, + { + "id": 35040204, + "category": "Radiant" + }, + { + "id": 35040205, + "category": "Radiant" + }, + { + "id": 35040206, + "category": "Radiant" + }, + { + "id": 35040207, + "category": "Radiant" + }, + { + "id": 35040208, + "category": "Radiant" + }, + { + "id": 35040303, + "category": "Radiant" + }, + { + "id": 35040304, + "category": "Radiant" + }, + { + "id": 35040305, + "category": "Radiant" + }, + { + "id": 35040306, + "category": "Radiant" + }, + { + "id": 35040307, + "category": "Radiant" + }, + { + "id": 35040308, + "category": "Radiant" + }, + { + "id": 35040404, + "category": "Radiant" + }, + { + "id": 35040405, + "category": "Radiant" + }, + { + "id": 35040406, + "category": "Radiant" + }, + { + "id": 35040407, + "category": "Radiant" + }, + { + "id": 35040408, + "category": "Radiant" + }, + { + "id": 35040505, + "category": "Radiant" + }, + { + "id": 35040506, + "category": "Radiant" + }, + { + "id": 35040507, + "category": "Radiant" + }, + { + "id": 35040508, + "category": "Radiant" + }, + { + "id": 35040606, + "category": "Radiant" + }, + { + "id": 35040607, + "category": "Radiant" + }, + { + "id": 35040608, + "category": "Radiant" + }, + { + "id": 35040707, + "category": "Radiant" + }, + { + "id": 35040708, + "category": "Radiant" + }, + { + "id": 35040808, + "category": "Radiant" + }, + { + "id": 352601, + "category": "FateEquip" + }, + { + "id": 352602, + "category": "FateEquip" + }, + { + "id": 352603, + "category": "FateEquip" + }, + { + "id": 352604, + "category": "FateEquip" + }, + { + "id": 352605, + "category": "FateEquip" + }, + { + "id": 352606, + "category": "FateEquip" + }, + { + "id": 352607, + "category": "FateEquip" + }, + { + "id": 352701, + "category": "FateEquip" + }, + { + "id": 352702, + "category": "FateEquip" + }, + { + "id": 352703, + "category": "FateEquip" + }, + { + "id": 352704, + "category": "FateEquip" + }, + { + "id": 352801, + "category": "FateEquip" + }, + { + "id": 352802, + "category": "FateEquip" + }, + { + "id": 352803, + "category": "FateEquip" + }, + { + "id": 352804, + "category": "FateEquip" + }, + { + "id": 352608, + "category": "FateEquip" + }, + { + "id": 35051013, + "category": "Emblem" + }, + { + "id": 352901, + "category": "Other" + }, + { + "id": 352705, + "category": "FateEquip" + }, + { + "id": 352706, + "category": "FateEquip" + }, + { + "id": 35130999, + "category": "Intrinsic" + }, + { + "id": 355100202, + "category": "Emblem" + }, + { + "id": 355100102, + "category": "Emblem" + }, + { + "id": 355100302, + "category": "Emblem" + }, + { + "id": 355100902, + "category": "Emblem" + }, + { + "id": 355101002, + "category": "Emblem" + }, + { + "id": 355100802, + "category": "Emblem" + }, + { + "id": 355100402, + "category": "Emblem" + }, + { + "id": 355100502, + "category": "Emblem" + }, + { + "id": 355100602, + "category": "Emblem" + }, + { + "id": 355101202, + "category": "Emblem" + }, + { + "id": 355200102, + "category": "Emblem" + }, + { + "id": 355200402, + "category": "Emblem" + }, + { + "id": 355200802, + "category": "Emblem" + }, + { + "id": 355200302, + "category": "Emblem" + }, + { + "id": 355200602, + "category": "Emblem" + }, + { + "id": 355200202, + "category": "Emblem" + }, + { + "id": 355200502, + "category": "Emblem" + }, + { + "id": 355200902, + "category": "Emblem" + }, + { + "id": 355200702, + "category": "Emblem" + }, + { + "id": 355201102, + "category": "Emblem" + }, + { + "id": 355201002, + "category": "Emblem" + }, + { + "id": 47030103, + "category": "Craftable" + }, + { + "id": 47030105, + "category": "Craftable" + }, + { + "id": 47030106, + "category": "Craftable" + }, + { + "id": 47030202, + "category": "Craftable" + }, + { + "id": 47030205, + "category": "Craftable" + }, + { + "id": 47030207, + "category": "Craftable" + }, + { + "id": 47030208, + "category": "Craftable" + }, + { + "id": 47030303, + "category": "Craftable" + }, + { + "id": 47030306, + "category": "Craftable" + }, + { + "id": 47030307, + "category": "Craftable" + }, + { + "id": 47030406, + "category": "Craftable" + }, + { + "id": 47030408, + "category": "Craftable" + }, + { + "id": 47040103, + "category": "Radiant" + }, + { + "id": 47040105, + "category": "Radiant" + }, + { + "id": 47040106, + "category": "Radiant" + }, + { + "id": 47040202, + "category": "Radiant" + }, + { + "id": 47040205, + "category": "Radiant" + }, + { + "id": 47040207, + "category": "Radiant" + }, + { + "id": 47040208, + "category": "Radiant" + }, + { + "id": 47040303, + "category": "Radiant" + }, + { + "id": 47040306, + "category": "Radiant" + }, + { + "id": 47040307, + "category": "Radiant" + }, + { + "id": 47040406, + "category": "Radiant" + }, + { + "id": 47040408, + "category": "Radiant" + }, + { + "id": 353001, + "category": "SpotLightEquip" + }, + { + "id": 353002, + "category": "SpotLightEquip" + }, + { + "id": 353003, + "category": "SpotLightEquip" + }, + { + "id": 47030108, + "category": "Craftable" + }, + { + "id": 47040108, + "category": "Radiant" + }, + { + "id": 353101, + "category": "Food" + }, + { + "id": 353102, + "category": "Food" + }, + { + "id": 353103, + "category": "Food" + }, + { + "id": 353104, + "category": "Food" + }, + { + "id": 353105, + "category": "Food" + }, + { + "id": 353106, + "category": "Food" + }, + { + "id": 47030101, + "category": "Craftable" + }, + { + "id": 47030102, + "category": "Craftable" + }, + { + "id": 47030508, + "category": "Craftable" + }, + { + "id": 47040101, + "category": "Radiant" + }, + { + "id": 47040102, + "category": "Radiant" + }, + { + "id": 47040508, + "category": "Radiant" + }, + { + "id": 353004, + "category": "SpotLightEquip" + }, + { + "id": 353005, + "category": "Other" + }, + { + "id": 353201, + "category": "Trailblaze" + }, + { + "id": 353202, + "category": "Trailblaze" + }, + { + "id": 353203, + "category": "Trailblaze" + }, + { + "id": 353204, + "category": "Trailblaze" + }, + { + "id": 353205, + "category": "Trailblaze" + }, + { + "id": 353206, + "category": "Trailblaze" + }, + { + "id": 353301, + "category": "Hack" + }, + { + "id": 353302, + "category": "Hack" + }, + { + "id": 353303, + "category": "Hack" + }, + { + "id": 353304, + "category": "Hack" + }, + { + "id": 353401, + "category": "Hack" + }, + { + "id": 353402, + "category": "Hack" + }, + { + "id": 353403, + "category": "Hack" + }, + { + "id": 353404, + "category": "Hack" + }, + { + "id": 353501, + "category": "Hack" + }, + { + "id": 353502, + "category": "Hack" + }, + { + "id": 353503, + "category": "Hack" + }, + { + "id": 353504, + "category": "Hack" + }, + { + "id": 353601, + "category": "Hack" + }, + { + "id": 353405, + "category": "Hack" + }, + { + "id": 353406, + "category": "Hack" + }, + { + "id": 353407, + "category": "Hack" + }, + { + "id": 353408, + "category": "Hack" + }, + { + "id": 353505, + "category": "Hack" + }, + { + "id": 353506, + "category": "Hack" + }, + { + "id": 353507, + "category": "Hack" + }, + { + "id": 353508, + "category": "Hack" + }, + { + "id": 353006, + "category": "SpotLightEquip" + } + ], + "recipes": [ + { + "ID": 102, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "Item", + "ItemID": 350103, + "Count": 1 + } + ] + ] + }, + { + "ID": 103, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "Item", + "ItemID": 350101, + "Count": 1 + } + ] + ] + }, + { + "ID": 120031, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "Item", + "ItemID": 99998, + "Count": 1 + } + ] + ] + }, + { + "ID": 197, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "Gold", + "Amount": 1 + } + ] + ] + }, + { + "ID": 199, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "Gold", + "Amount": 2 + } + ] + ] + }, + { + "ID": 200001, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "RandomRole", + "Rarity": 1, + "Count": 1 + } + ] + ] + }, + { + "ID": 200005, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "RandomRole", + "Rarity": 5, + "Count": 1 + } + ] + ] + }, + { + "ID": 200013, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "Item", + "ItemID": 99991, + "Count": 1 + } + ] + ] + }, + { + "ID": 200015, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "Item", + "ItemID": 350106, + "Count": 1 + } + ] + ] + }, + { + "ID": 200027, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "RandomRole", + "Rarity": 4, + "Count": 1, + "Star": 3 + } + ] + ] + }, + { + "ID": 203, + "Status": "Implemented", + "Engine": "Orb", + "Choices": [ + [ + { + "Reward": "RandomEquip", + "Category": "Basic", + "Count": 1 + } + ] + ] + }, + { + "ID": 204, + "Status": "Implemented", + "Engine": "Orb", + "Chapters": [ + 1 + ], + "Choices": [ + [ + { + "Reward": "Gold", + "Amount": 3 + }, + { + "Reward": "RandomRole", + "Rarity": 2, + "Count": 1 + } + ], + [ + { + "Reward": "RandomEquip", + "Category": "Basic", + "Count": 1 + } + ] + ] + }, + { + "ID": 205, + "Status": "Implemented", + "Engine": "Orb", + "Chapters": [ + 1, + 2 + ], + "Choices": [ + [ + { + "Reward": "Item", + "ItemID": 99999, + "Count": 1 + } + ] + ] + }, + { + "ID": 206, + "Status": "Implemented", + "Engine": "Orb", + "Chapters": [ + 1, + 2 + ], + "Choices": [ + [ + { + "Reward": "RandomRole", + "Rarity": 2, + "Count": 1 + } + ] + ] + }, + { + "ID": 207, + "Status": "Implemented", + "Engine": "Orb", + "Chapters": [ + 2 + ], + "Choices": [ + [ + { + "Reward": "RandomRole", + "Rarity": 3, + "Count": 1, + "Star": 2 + } + ], + [ + { + "Reward": "RandomRole", + "Rarity": 4, + "Count": 1 + } + ] + ] + }, + { + "ID": 208, + "Status": "Implemented", + "Engine": "Orb", + "Chapters": [ + 3 + ], + "Choices": [ + [ + { + "Reward": "RandomRole", + "Rarity": 4, + "Count": 1 + } + ], + [ + { + "Reward": "RandomRole", + "Rarity": 4, + "Count": 2 + } + ] + ] + } + ] +} diff --git a/resources/CurrencyWarsReferenceEnemies.json b/resources/CurrencyWarsReferenceEnemies.json new file mode 100644 index 0000000..a359605 --- /dev/null +++ b/resources/CurrencyWarsReferenceEnemies.json @@ -0,0 +1,390 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "reference_executable_sha256": "235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86", + "excel_dump_sha256": "ee011f39af3040124873d461ff49af1623fd9655d9ba0d98c0a877247318030f", + "source_functions": { + "boss_layer": "gfRouteCreateNode RVA 0xcdd7b6-0xcddad8", + "elite_group": "gfRouteEliteGroup RVA 0xce0de0-0xce1238", + "camp_counts": "gfRouteCreateNode RVA0xcdd525; static []int32 at VA0x143156210,0x143156230,0x143156250", + "star_weights": "gfRouteRandomStar RVA0xcdf0e0; static []int32 at VA0x1431561b0,0x1431561d0,0x1431561f0", + "minion_filter": "gfRouteMinions RVA0xcdb020" + }, + "policy": { + "first_chapter_boss_star": 2, + "later_chapter_boss_star": 3, + "first_chapter": 1, + "base_elite_group": 1801, + "alternate_route_threshold": 2000, + "alternate_base_elite_group": 1905, + "camp_monster_max_tier": 4, + "monster_max_tier": 2, + "first_monster_count": 3, + "later_monster_count": 5, + "camp_wave_counts": [ + [ + 4, + 5 + ], + [ + 6, + 5 + ], + [ + 8 + ] + ], + "chapter_star_weights": [ + [ + 85, + 15, + 0 + ], + [ + 55, + 35, + 10 + ], + [ + 40, + 40, + 20 + ] + ] + }, + "monster_tiers": { + "800101020": 1, + "800102021": 1, + "800104004": 1, + "800105007": 1, + "100203025": 2, + "100204030": 2, + "100205028": 2, + "100301039": 3, + "1004016": 5, + "100401201": 6, + "1004028": 5, + "100402301": 6, + "101201023": 2, + "101202113": 2, + "101203019": 2, + "101301027": 3, + "101302037": 3, + "1014016": 5, + "101401201": 6, + "102201019": 2, + "102202029": 2, + "102301021": 3, + "102302009": 3, + "200201014": 2, + "200203009": 2, + "200401202": 6, + "2004015": 5, + "200402403": 5, + "200402202": 6, + "201101005": 1, + "201102005": 1, + "201201013": 2, + "201301103": 3, + "201302014": 3, + "202201016": 2, + "202202012": 2, + "202204006": 2, + "202205008": 2, + "202206014": 2, + "202211011": 2, + "202301015": 3, + "202302016": 3, + "202303018": 3, + "202401012": 5, + "202401203": 6, + "300101007": 1, + "300102007": 1, + "300201010": 2, + "300203016": 2, + "300204008": 2, + "300301009": 3, + "300302009": 3, + "300401003": 5, + "300401101": 6, + "300303009": 3, + "300304003": 3, + "300305008": 3, + "300303103": 0, + "300304104": 0, + "300305103": 0, + "300303301": 0, + "300304301": 0, + "300305301": 0, + "300402004": 5, + "300402201": 6, + "301202004": 2, + "301301009": 3, + "302401011": 5, + "302401104": 6, + "302402204": 5, + "401201014": 2, + "401202007": 2, + "401203007": 2, + "401204004": 2, + "401301007": 3, + "302402301": 6, + "401401202": 5, + "401401501": 6, + "401402003": 5, + "401402201": 6, + "401403001": 5, + "402201002": 2, + "402301004": 3, + "402302003": 3, + "403201001": 2, + "403203001": 2, + "403204001": 2, + "403205001": 2, + "403301003": 3, + "403302001": 3, + "403303001": 3, + "401403101": 6, + "403401003": 5, + "4034016": 6, + "800201022": 2, + "800301021": 3, + "800302025": 3, + "800303021": 3, + "800304017": 3, + "800305021": 3, + "801201034": 2, + "801202016": 2, + "801203011": 2, + "800205801": 2, + "800205802": 2, + "800205803": 2, + "800210901": 3, + "800205102": 4, + "800205202": 4, + "800205303": 4, + "800205103": 4, + "800205203": 4, + "800205304": 4, + "800210902": 3, + "3024031": 5, + "3024032": 6, + "403302005": 3, + "404401001": 5, + "404401002": 6, + "405201003": 2, + "405202001": 2, + "405301004": 3, + "405302001": 3, + "406201006": 2, + "406202001": 2, + "406301002": 3, + "406401001": 5, + "406401101": 6, + "501201001": 2, + "501203002": 2, + "501204001": 2, + "501205001": 2, + "501206001": 2, + "501301001": 3, + "501303001": 3, + "501401001": 5, + "5014012": 6, + "802201002": 2, + "802202005": 2, + "802203002": 2, + "4032028": 2, + "100402302": 6, + "501209002": 2, + "501304002": 3, + "501305001": 3, + "501402003": 5, + "502301001": 3, + "502401001": 5, + "803201013": 2, + "803202014": 2, + "803301015": 3, + "501210001": 2, + "5014021": 6, + "5024012": 6, + "800205075": 2, + "501403001": 5, + "5014032": 6, + "502302003": 3, + "501202003": 2, + "501211003": 2, + "8032020": 2, + "8033010": 2, + "503201004": 2, + "502302008": 3, + "403202801": 2, + "203401004": 5, + "2034017": 6, + "503401003": 5, + "5034012": 6, + "803401006": 5, + "8034013": 6, + "501306003": 3, + "501307002": 3, + "803302003": 3, + "503301001": 3, + "503201005": 2, + "803204002": 2, + "801204003": 2, + "503204001": 2, + "203301010": 3, + "203201005": 2, + "203202006": 2, + "803202016": 2, + "803301018": 2 + }, + "elite_groups": [ + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 1801, + 1802, + 1803, + 1804, + 1805, + 1806, + 1807, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1854, + 1855, + 1856, + 1857, + 1858, + 1859, + 1860, + 1861, + 1862, + 1863, + 1864, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1875, + 1876, + 1877, + 1878, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1901, + 1902, + 1903, + 1904, + 1905, + 1906, + 1907, + 1908, + 1909, + 1910, + 1911, + 1912, + 1913, + 1914, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1924, + 1925, + 1926, + 1927, + 1928, + 1929, + 1930, + 1931 + ] +} diff --git a/resources/CurrencyWarsReferenceNodes.json b/resources/CurrencyWarsReferenceNodes.json new file mode 100644 index 0000000..94aaf44 --- /dev/null +++ b/resources/CurrencyWarsReferenceNodes.json @@ -0,0 +1,4862 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "provenance": { + "reference_executable_sha256": "235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86", + "excel_dump_sha256": "ee011f39af3040124873d461ff49af1623fd9655d9ba0d98c0a877247318030f", + "source_table": "grid_fight_node_template", + "source_functions": [ + "gfPendingAdvanceNode", + "gfFxHEnterNode", + "gfRouteCreateNode" + ] + }, + "templates": [ + { + "NodeTemplateID": 10011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 10012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 10013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90012, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 10016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 90013, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10017, + "StageID": 70000007, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90014, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90101, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 10021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90021, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90022, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 10024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 90023, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10025, + "StageID": 70000014, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90024, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90102, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 10031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90031, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90032, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 10034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 90033, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10035, + "StageID": 70000021, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90034, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 10037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90103, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 20012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 20013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90012, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 20016, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 90013, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20017, + "StageID": 70000007, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90014, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90101, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90021, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90022, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 20024, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 90023, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20025, + "StageID": 70000014, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90024, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90102, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90031, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90032, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 20034, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 90033, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20035, + "StageID": 70000021, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90034, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90103, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 80111, + "StageID": 70000101, + "NodeType": "CampMonster", + "ParamList": [ + 801101 + ], + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80112, + "StageID": 70000102, + "NodeType": "CampMonster", + "ParamList": [ + 801102 + ], + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80113, + "StageID": 70000103, + "NodeType": "CampMonster", + "ParamList": [ + 801103 + ], + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80114, + "StageID": 70000104, + "NodeType": "CampMonster", + "ParamList": [ + 801104 + ], + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80115, + "StageID": 70000105, + "NodeType": "CampMonster", + "ParamList": [ + 801105 + ], + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80116, + "StageID": 70000106, + "NodeType": "Monster", + "ParamList": [ + 801106 + ], + "PenaltyBonusRuleID": 99001, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80117, + "StageID": 70000107, + "NodeType": "Boss", + "ParamList": [ + 801107 + ], + "PenaltyBonusRuleID": 90101, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20111, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92301, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 20112, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92011, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20113, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 20114, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 92012, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20115, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92201, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20116, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92101, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 20121, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92021, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20122, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 20123, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 92022, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20124, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92202, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20125, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92102, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 20131, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92031, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20132, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 20133, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 92032, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20134, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92203, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 20135, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92103 + }, + { + "NodeTemplateID": 100011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 100012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 100013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90012, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 100016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 90013, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100017, + "StageID": 70000007, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90014, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90101, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90021, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90022, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 100024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 90023, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100025, + "StageID": 70000014, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90024, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90102, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90031, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90032, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 100034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 90033, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100035, + "StageID": 70000021, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90034, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 100037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90103, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 110012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 110013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90012, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 110016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 90013, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110017, + "StageID": 70000007, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90014, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90101, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90021, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90022, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 110024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 90023, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110025, + "StageID": 70000014, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90024, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90102, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90031, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90032, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 110034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 90033, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110035, + "StageID": 70000021, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90034, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 110037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90103, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 120012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 120013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90012, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 120016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90013, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120017, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 90014, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90101, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90021, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90022, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 120024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90023, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120025, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 90024, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90102, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90031, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90032, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 120034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90033, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120035, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 90034, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 120037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90103, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 130012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 130013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90015, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90016, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 130016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90017, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130017, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 123 + ], + "PenaltyBonusRuleID": 90018, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90104, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90025, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90026, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 130024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90027, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130025, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 223 + ], + "PenaltyBonusRuleID": 90028, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90105, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90035, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90036, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 130034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90037, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130035, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 323 + ], + "PenaltyBonusRuleID": 90038, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 130037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90106, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 140012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 140013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90015, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90016, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 140016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90017, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140017, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 90018, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90104, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90025, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90026, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 140024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90027, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140025, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 90028, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90105, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90035, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90036, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 140034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90037, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140035, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 90038, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 140037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90106, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 150012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 150013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90015, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90016, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 150016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90017, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150017, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 90018, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90201, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90104, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90025, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90026, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 150024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90027, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150025, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 90028, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90202, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90105, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90035, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90036, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 150034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90037, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150035, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 90038, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90203, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 150037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90106, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90303, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 160012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90304, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 160013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90015, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90016, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 160016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90017, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160017, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 90018, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90204, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90104, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90025, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90026, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 160024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90027, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160025, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 90028, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90205, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90105, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90035, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90036, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 160034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90037, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160035, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 90038, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90206, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 160037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90106, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90303, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 170012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90304, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 170013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90015, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90016, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 170016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90017, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170017, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 90018, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90204, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90104, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90025, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90026, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 170024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90027, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170025, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 90028, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90205, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90105, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90035, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90036, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 170034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90037, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170035, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 90038, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90206, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 170037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90106, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90303, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 180012, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90304, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 180013, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90015, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180014, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90016, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180015, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 180016, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90017, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180017, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 90018, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180018, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90204, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180019, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90104, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90025, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180022, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90026, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180023, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 180024, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90027, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180025, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 90028, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180026, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90205, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180027, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90105, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90035, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180032, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90036, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180033, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 180034, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90037, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180035, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 90038, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180036, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90206, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180037, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90106, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 200011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92301, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 200012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92011, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 200014, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 92012, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92201, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92101, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 200021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92021, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 200023, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 92022, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92202, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92102, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 200031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92031, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 200033, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 92032, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92203, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 200035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92103 + }, + { + "NodeTemplateID": 210011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92301, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 210012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92011, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 210014, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 92012, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92201, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92101, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 210021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92021, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 210023, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 92022, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92202, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92102, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 210031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92031, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 210033, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 92032, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92203, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 210035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92103 + }, + { + "NodeTemplateID": 220011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92301, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 220012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92011, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 220014, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 92012, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92201, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92101, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 220021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92021, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 220023, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 92022, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92202, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92102, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 220031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92031, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 220033, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 92032, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92203, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 220035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92103 + }, + { + "NodeTemplateID": 230011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92301, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 230012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92013, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 230014, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 123 + ], + "PenaltyBonusRuleID": 92014, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92201, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92104, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 230021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92023, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 230023, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 223 + ], + "PenaltyBonusRuleID": 92024, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92202, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92105, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 230031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92033, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 230033, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 323 + ], + "PenaltyBonusRuleID": 92034, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92203, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 230035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92106 + }, + { + "NodeTemplateID": 240011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92301, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 240012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92013, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 240014, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 92014, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92201, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92104, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 240021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92023, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 240023, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 92024, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92202, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92105, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 240031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92033, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 240033, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 92034, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92203, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 240035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92106 + }, + { + "NodeTemplateID": 250011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92301, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 250012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92013, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 250014, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 92014, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92201, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92104, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 250021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92023, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 250023, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 92024, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92202, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92105, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 250031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92033, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 250033, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 92034, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92203, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 250035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92106 + }, + { + "NodeTemplateID": 260011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92302, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 260012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92013, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 260014, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 92014, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92204, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92104, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 260021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92023, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 260023, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 92024, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92205, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92105, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 260031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92033, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 260033, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 92034, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92206, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 260035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92106 + }, + { + "NodeTemplateID": 270011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92302, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 270012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92013, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 270014, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 92014, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92204, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92104, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 270021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92023, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 270023, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 92024, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92205, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92105, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 270031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92033, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 270033, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 92034, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92206, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 270035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92106 + }, + { + "NodeTemplateID": 280011, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92302, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 280012, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92013, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280013, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 280014, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 92014, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280015, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92204, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280016, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92104, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 280021, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92023, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280022, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 280023, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 92024, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280024, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92205, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280025, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92105, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 280031, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92033, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280032, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 280033, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 313 + ], + "PenaltyBonusRuleID": 92034, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280034, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92206, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280035, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 92106 + }, + { + "NodeTemplateID": 80211, + "StageID": 70000108, + "NodeType": "Monster", + "ParamList": [ + 802101 + ], + "PenaltyBonusRuleID": 99002, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80212, + "StageID": 70000109, + "NodeType": "CampMonster", + "ParamList": [ + 802102 + ], + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80213, + "StageID": 70000110, + "NodeType": "Supply", + "ParamList": [ + 1 + ], + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80214, + "StageID": 70000111, + "NodeType": "CampMonster", + "ParamList": [ + 802103 + ], + "PenaltyBonusRuleID": 90012, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80215, + "StageID": 70000112, + "NodeType": "Monster", + "ParamList": [ + 802104 + ], + "PenaltyBonusRuleID": 99003, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80216, + "StageID": 70000113, + "NodeType": "Boss", + "ParamList": [ + 802105 + ], + "PenaltyBonusRuleID": 99005, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80221, + "StageID": 70000114, + "NodeType": "CampMonster", + "ParamList": [ + 802201 + ], + "PenaltyBonusRuleID": 90021, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80222, + "StageID": 70000115, + "NodeType": "Supply", + "ParamList": [ + 2 + ], + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80223, + "StageID": 70000116, + "NodeType": "CampMonster", + "ParamList": [ + 802202 + ], + "PenaltyBonusRuleID": 90022, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80224, + "StageID": 70000117, + "NodeType": "Monster", + "ParamList": [ + 802203 + ], + "PenaltyBonusRuleID": 99004, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80225, + "StageID": 70000118, + "NodeType": "Boss", + "ParamList": [ + 802204 + ], + "PenaltyBonusRuleID": 99006, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80311, + "StageID": 70000119, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90301, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 80312, + "StageID": 70000120, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90302, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 80313, + "StageID": 70000121, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90011, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80314, + "StageID": 70000122, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90012, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80315, + "StageID": 70000123, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 80316, + "StageID": 70000124, + "NodeType": "CampMonster", + "ParamList": [ + 103 + ], + "PenaltyBonusRuleID": 90013, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80317, + "StageID": 70000125, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90014, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80318, + "StageID": 70000126, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 99007, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80319, + "StageID": 70000127, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90101, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80321, + "StageID": 70000128, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90021, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80322, + "StageID": 70000129, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90022, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80323, + "StageID": 70000130, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 80324, + "StageID": 70000131, + "NodeType": "CampMonster", + "ParamList": [ + 203 + ], + "PenaltyBonusRuleID": 90023, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80325, + "StageID": 70000132, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90024, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80326, + "StageID": 70000133, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 99008, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80327, + "StageID": 70000134, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90102, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80331, + "StageID": 70000135, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90031, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80332, + "StageID": 70000136, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90032, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80333, + "StageID": 70000137, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 80334, + "StageID": 70000138, + "NodeType": "CampMonster", + "ParamList": [ + 303 + ], + "PenaltyBonusRuleID": 90033, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80335, + "StageID": 70000139, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90034, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80336, + "StageID": 70000140, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 99009, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 80337, + "StageID": 70000141, + "NodeType": "Boss", + "ParamList": [ + 305 + ], + "PenaltyBonusRuleID": 90103, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180111, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 90303, + "BasicGoldRewardNum": 3 + }, + { + "NodeTemplateID": 180112, + "StageID": 70000002, + "NodeType": "Monster", + "ParamList": [ + 901 + ], + "PenaltyBonusRuleID": 90304, + "BasicGoldRewardNum": 4 + }, + { + "NodeTemplateID": 180113, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90015, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180114, + "StageID": 70000004, + "NodeType": "CampMonster", + "ParamList": [ + 102 + ], + "PenaltyBonusRuleID": 90016, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180115, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 180116, + "StageID": 70000006, + "NodeType": "CampMonster", + "ParamList": [ + 104 + ], + "PenaltyBonusRuleID": 90017, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180117, + "StageID": 70000007, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 90018, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180118, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 90204, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180119, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 90104, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180121, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "PenaltyBonusRuleID": 90025, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180122, + "StageID": 70000011, + "NodeType": "CampMonster", + "ParamList": [ + 202 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90026, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180123, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 180124, + "StageID": 70000013, + "NodeType": "CampMonster", + "ParamList": [ + 204 + ], + "PenaltyBonusRuleID": 90027, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180125, + "StageID": 70000014, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 90028, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180126, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 90205, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180127, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 90105, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180131, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "PenaltyBonusRuleID": 90035, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180132, + "StageID": 70000018, + "NodeType": "CampMonster", + "ParamList": [ + 302 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 90036, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180133, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 180134, + "StageID": 70000020, + "NodeType": "CampMonster", + "ParamList": [ + 304 + ], + "PenaltyBonusRuleID": 90037, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180135, + "StageID": 70000021, + "NodeType": "EliteBranch", + "ParamList": [ + 333 + ], + "PenaltyBonusRuleID": 90038, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180136, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 90206, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 180137, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 3051 + ], + "PenaltyBonusRuleID": 90106, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 280111, + "StageID": 70000001, + "NodeType": "Monster", + "ParamList": [ + 900 + ], + "PenaltyBonusRuleID": 92302, + "BasicGoldRewardNum": 5 + }, + { + "NodeTemplateID": 280112, + "StageID": 70000003, + "NodeType": "CampMonster", + "ParamList": [ + 101 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92013, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280113, + "StageID": 70000005, + "NodeType": "Supply", + "ParamList": [ + 1 + ] + }, + { + "NodeTemplateID": 280114, + "StageID": 70000006, + "NodeType": "EliteBranch", + "ParamList": [ + 113 + ], + "PenaltyBonusRuleID": 92014, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280115, + "StageID": 70000008, + "NodeType": "Monster", + "ParamList": [ + 902 + ], + "PenaltyBonusRuleID": 92204, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280116, + "StageID": 70000009, + "NodeType": "Boss", + "ParamList": [ + 105 + ], + "PenaltyBonusRuleID": 92104, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 280121, + "StageID": 70000010, + "NodeType": "CampMonster", + "ParamList": [ + 201 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92023, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280122, + "StageID": 70000012, + "NodeType": "Supply", + "ParamList": [ + 2 + ] + }, + { + "NodeTemplateID": 280123, + "StageID": 70000013, + "NodeType": "EliteBranch", + "ParamList": [ + 213 + ], + "PenaltyBonusRuleID": 92024, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280124, + "StageID": 70000015, + "NodeType": "Monster", + "ParamList": [ + 903 + ], + "PenaltyBonusRuleID": 92205, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280125, + "StageID": 70000016, + "NodeType": "Boss", + "ParamList": [ + 205 + ], + "PenaltyBonusRuleID": 92105, + "BasicGoldRewardNum": 15 + }, + { + "NodeTemplateID": 280131, + "StageID": 70000017, + "NodeType": "CampMonster", + "ParamList": [ + 301 + ], + "IsAugment": 1, + "PenaltyBonusRuleID": 92033, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280132, + "StageID": 70000019, + "NodeType": "Supply", + "ParamList": [ + 3 + ] + }, + { + "NodeTemplateID": 280133, + "StageID": 70000020, + "NodeType": "EliteBranch", + "ParamList": [ + 333 + ], + "PenaltyBonusRuleID": 92034, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280134, + "StageID": 70000022, + "NodeType": "Monster", + "ParamList": [ + 904 + ], + "PenaltyBonusRuleID": 92206, + "BasicGoldRewardNum": 10 + }, + { + "NodeTemplateID": 280135, + "StageID": 70000023, + "NodeType": "Boss", + "ParamList": [ + 3051 + ], + "PenaltyBonusRuleID": 92106 + } + ] +} diff --git a/resources/CurrencyWarsReferencePenalties.json b/resources/CurrencyWarsReferencePenalties.json new file mode 100644 index 0000000..a1752fb --- /dev/null +++ b/resources/CurrencyWarsReferencePenalties.json @@ -0,0 +1,809 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "source_kind": "reference-implementation; captured current rules take precedence", + "reference_executable_sha256": "235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86", + "excel_dump_sha256": "ee011f39af3040124873d461ff49af1623fd9655d9ba0d98c0a877247318030f", + "source_table": "grid_fight_penalty_rule", + "penalty_rules": [ + { + "ID": 1, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90001, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90002, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90201, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90202, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90203, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90301, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90302, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92201, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92202, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92203, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92301, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 99001, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90204, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90205, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90206, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90303, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90304, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92204, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92205, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92206, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 92302, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 99002, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 99003, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 99004, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 99005, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 4, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 99006, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 6, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 99007, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 99008, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 99009, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 0, + "ProgressPenaltyCoefficient": 0 + }, + { + "ID": 90011, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90012, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90013, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90014, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90015, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90016, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90017, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90018, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90021, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90022, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90023, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90024, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90025, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90026, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90027, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90028, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90031, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90032, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90033, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90034, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90035, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90036, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90037, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90038, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90101, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 4, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90102, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 6, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90103, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 8, + "ThresholdPassBasicPlayerHPPenalty": 20, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 90104, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 20, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 90105, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 30, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 90106, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 40, + "ThresholdPassBasicPlayerHPPenalty": 20, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91101, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 3, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91102, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 3, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91103, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 3, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91104, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 3, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91105, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91106, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91107, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91108, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91111, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91112, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91113, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91114, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 91201, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 5, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91202, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 5, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91203, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 5, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91204, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 5, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91205, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91206, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91207, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91208, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91211, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91212, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91213, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91214, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 25, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 91301, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 7, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91302, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 7, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91303, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 7, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91304, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 7, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91305, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91306, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91307, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91308, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91311, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91312, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91313, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 91314, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 35, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 92011, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 92012, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 92013, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 92014, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 92021, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 92022, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 92023, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 92024, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 92031, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 92032, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 92033, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 92034, + "ThresholdPosition": 0, + "ThresholdFailPlayerHPPenalty": 0, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 92101, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 4, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 92102, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 6, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 92103, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 8, + "ThresholdPassBasicPlayerHPPenalty": 20, + "ProgressPenaltyCoefficient": 20 + }, + { + "ID": 92104, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 20, + "ThresholdPassBasicPlayerHPPenalty": 10, + "ProgressPenaltyCoefficient": 10 + }, + { + "ID": 92105, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 30, + "ThresholdPassBasicPlayerHPPenalty": 15, + "ProgressPenaltyCoefficient": 15 + }, + { + "ID": 92106, + "ThresholdPosition": 33, + "ThresholdFailPlayerHPPenalty": 40, + "ThresholdPassBasicPlayerHPPenalty": 20, + "ProgressPenaltyCoefficient": 20 + } + ] +} diff --git a/resources/CurrencyWarsRewards.json b/resources/CurrencyWarsRewards.json new file mode 100644 index 0000000..6e0eeec --- /dev/null +++ b/resources/CurrencyWarsRewards.json @@ -0,0 +1,13828 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "source_capture_sha256": "ba72565b89a84c84f393ac535dd36572d07201558c5cabd57e8e88b0154c18e4", + "evidence_id": "ev_5383ae0f4984b2420e00cb35fe5fe4553f052111bdec2ca42ea48f87cfed6dc7", + "source": "Named native flat table getters traced from current Client FromBinary consumers; managed callback, bounded row serialization; no gameplay factory or scene graph", + "tables": { + "orb": [ + { + "BonusID": 20001, + "OrbID": 100, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20002, + "OrbID": 101, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20022, + "OrbID": 102, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20023, + "OrbID": 103, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1, + "OrbID": 197, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20026, + "OrbID": 198, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20011, + "OrbID": 199, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20003, + "OrbID": 200, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20004, + "OrbID": 201, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20015, + "OrbID": 202, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 30000, + "OrbID": 203, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20016, + "OrbID": 204, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 207, + "OrbID": 205, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20017, + "OrbID": 206, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20018, + "OrbID": 207, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20027, + "OrbID": 208, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20005, + "OrbID": 300, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20006, + "OrbID": 301, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 208, + "OrbID": 302, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20021, + "OrbID": 303, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20024, + "OrbID": 304, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20025, + "OrbID": 305, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20028, + "OrbID": 306, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20029, + "OrbID": 307, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20007, + "OrbID": 400, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20008, + "OrbID": 401, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21001, + "OrbID": 1201, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21002, + "OrbID": 1202, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21003, + "OrbID": 1203, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21004, + "OrbID": 1301, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21005, + "OrbID": 1302, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 11064, + "OrbID": 111064, + "Type": 3, + "OrbName": { + "hash": 136385672, + "hash64": 6684469065860326459 + } + }, + { + "BonusID": 20031, + "OrbID": 120031, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21006, + "OrbID": 121006, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21007, + "OrbID": 121007, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21008, + "OrbID": 121008, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21009, + "OrbID": 121009, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21010, + "OrbID": 121010, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21011, + "OrbID": 121011, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21012, + "OrbID": 121012, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21013, + "OrbID": 121013, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21014, + "OrbID": 121014, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21015, + "OrbID": 121015, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21016, + "OrbID": 121016, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21017, + "OrbID": 121017, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21018, + "OrbID": 121018, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21019, + "OrbID": 121019, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21020, + "OrbID": 121020, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21021, + "OrbID": 121021, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21022, + "OrbID": 121022, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21023, + "OrbID": 121023, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21027, + "OrbID": 121027, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 21029, + "OrbID": 121029, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23001, + "OrbID": 123001, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23002, + "OrbID": 123002, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23003, + "OrbID": 123003, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23004, + "OrbID": 123004, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23005, + "OrbID": 123005, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23006, + "OrbID": 123006, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23007, + "OrbID": 123007, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23008, + "OrbID": 123008, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23009, + "OrbID": 123009, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20030, + "OrbID": 120030, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23101, + "OrbID": 123101, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23102, + "OrbID": 123102, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23103, + "OrbID": 123103, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23104, + "OrbID": 123104, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23105, + "OrbID": 123105, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23106, + "OrbID": 123106, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23107, + "OrbID": 123107, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23108, + "OrbID": 123108, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23111, + "OrbID": 123111, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 101, + "OrbID": 200001, + "Type": 1, + "OrbName": { + "hash": 994589440, + "hash64": 9753487630578117160 + } + }, + { + "BonusID": 102, + "OrbID": 200002, + "Type": 1, + "OrbName": { + "hash": 994589443, + "hash64": 6051216931305157907 + } + }, + { + "BonusID": 103, + "OrbID": 200003, + "Type": 2, + "OrbName": { + "hash": 994589442, + "hash64": 4821971982791601748 + } + }, + { + "BonusID": 104, + "OrbID": 200004, + "Type": 2, + "OrbName": { + "hash": 994589437, + "hash64": 2677543262011458650 + } + }, + { + "BonusID": 105, + "OrbID": 200005, + "Type": 3, + "OrbName": { + "hash": 994589436, + "hash64": 11268950705174388153 + } + }, + { + "BonusID": 210, + "OrbID": 200006, + "Type": 2, + "OrbName": { + "hash": 994589439, + "hash64": 14049715582886757045 + } + }, + { + "BonusID": 211, + "OrbID": 200007, + "Type": 3, + "OrbName": { + "hash": 994589438, + "hash64": 1012652664430118534 + } + }, + { + "BonusID": 223, + "OrbID": 200008, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 224, + "OrbID": 200009, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 225, + "OrbID": 200010, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 226, + "OrbID": 200011, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 227, + "OrbID": 200012, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 228, + "OrbID": 200013, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 205, + "OrbID": 200014, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 206, + "OrbID": 200015, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 212, + "OrbID": 200016, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 218, + "OrbID": 200017, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 219, + "OrbID": 200018, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 106, + "OrbID": 200019, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 107, + "OrbID": 200020, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 108, + "OrbID": 200021, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 109, + "OrbID": 200022, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 110, + "OrbID": 200023, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 111, + "OrbID": 200024, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 112, + "OrbID": 200025, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 113, + "OrbID": 200026, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 114, + "OrbID": 200027, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 115, + "OrbID": 200028, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350201, + "OrbID": 200029, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350202, + "OrbID": 200030, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350203, + "OrbID": 200031, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350204, + "OrbID": 200032, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350205, + "OrbID": 200033, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350206, + "OrbID": 200034, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350207, + "OrbID": 200035, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350208, + "OrbID": 200036, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 350701, + "OrbID": 200037, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 40021, + "OrbID": 140021, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 40022, + "OrbID": 140022, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 40023, + "OrbID": 140023, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90291, + "OrbID": 190291, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90292, + "OrbID": 190292, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90271, + "OrbID": 190271, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90272, + "OrbID": 190272, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90273, + "OrbID": 190273, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90274, + "OrbID": 190274, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90275, + "OrbID": 190275, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90281, + "OrbID": 190281, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90282, + "OrbID": 190282, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90283, + "OrbID": 190283, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90284, + "OrbID": 190284, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90285, + "OrbID": 190285, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90293, + "OrbID": 190293, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90294, + "OrbID": 190294, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90295, + "OrbID": 190295, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90296, + "OrbID": 190296, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90297, + "OrbID": 190297, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90298, + "OrbID": 190298, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98001, + "OrbID": 198001, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98002, + "OrbID": 198002, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98003, + "OrbID": 198003, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98004, + "OrbID": 198004, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98005, + "OrbID": 198005, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98006, + "OrbID": 198006, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98007, + "OrbID": 198007, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98008, + "OrbID": 198008, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98009, + "OrbID": 198009, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98010, + "OrbID": 198010, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98011, + "OrbID": 198011, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98012, + "OrbID": 198012, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98013, + "OrbID": 198013, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98014, + "OrbID": 198014, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98015, + "OrbID": 198015, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98016, + "OrbID": 198016, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98017, + "OrbID": 198017, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98018, + "OrbID": 198018, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98019, + "OrbID": 198019, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 98020, + "OrbID": 198020, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1001, + "OrbID": 101001, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1003, + "OrbID": 101003, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1004, + "OrbID": 101004, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1005, + "OrbID": 101005, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1006, + "OrbID": 101006, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1009, + "OrbID": 101009, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1013, + "OrbID": 101013, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1014, + "OrbID": 101014, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1015, + "OrbID": 101015, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1101, + "OrbID": 101101, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1102, + "OrbID": 101102, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1104, + "OrbID": 101104, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1105, + "OrbID": 101105, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1106, + "OrbID": 101106, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1108, + "OrbID": 101108, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1112, + "OrbID": 101112, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1201, + "OrbID": 101201, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1203, + "OrbID": 101203, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1204, + "OrbID": 101204, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1205, + "OrbID": 101205, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1208, + "OrbID": 101208, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1209, + "OrbID": 101209, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1212, + "OrbID": 101212, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1213, + "OrbID": 101213, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1217, + "OrbID": 101217, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1218, + "OrbID": 101218, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1220, + "OrbID": 101220, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1221, + "OrbID": 101221, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1222, + "OrbID": 101222, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1223, + "OrbID": 101223, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1225, + "OrbID": 101225, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1302, + "OrbID": 101302, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1303, + "OrbID": 101303, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1304, + "OrbID": 101304, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1305, + "OrbID": 101305, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1306, + "OrbID": 101306, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1307, + "OrbID": 101307, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1308, + "OrbID": 101308, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1309, + "OrbID": 101309, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1310, + "OrbID": 101310, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1313, + "OrbID": 101313, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1314, + "OrbID": 101314, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1315, + "OrbID": 101315, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1317, + "OrbID": 101317, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1401, + "OrbID": 101401, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1402, + "OrbID": 101402, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1403, + "OrbID": 101403, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1404, + "OrbID": 101404, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1405, + "OrbID": 101405, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1406, + "OrbID": 101406, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1407, + "OrbID": 101407, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1408, + "OrbID": 101408, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1409, + "OrbID": 101409, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1410, + "OrbID": 101410, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1412, + "OrbID": 101412, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1413, + "OrbID": 101413, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1414, + "OrbID": 101414, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1415, + "OrbID": 101415, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 8007, + "OrbID": 108007, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201001, + "OrbID": 211001, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201003, + "OrbID": 211003, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201004, + "OrbID": 211004, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201005, + "OrbID": 211005, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201006, + "OrbID": 211006, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201009, + "OrbID": 211009, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201013, + "OrbID": 211013, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201014, + "OrbID": 211014, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201015, + "OrbID": 211015, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201101, + "OrbID": 211101, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201102, + "OrbID": 211102, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201104, + "OrbID": 211104, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201105, + "OrbID": 211105, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201106, + "OrbID": 211106, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201108, + "OrbID": 211108, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201112, + "OrbID": 211112, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201203, + "OrbID": 211203, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201204, + "OrbID": 211204, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201205, + "OrbID": 211205, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201208, + "OrbID": 211208, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201209, + "OrbID": 211209, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201212, + "OrbID": 211212, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201213, + "OrbID": 211213, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201217, + "OrbID": 211217, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201218, + "OrbID": 211218, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201220, + "OrbID": 211220, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201221, + "OrbID": 211221, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201222, + "OrbID": 211222, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201223, + "OrbID": 211223, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201225, + "OrbID": 211225, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201302, + "OrbID": 211302, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201303, + "OrbID": 211303, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201304, + "OrbID": 211304, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201305, + "OrbID": 211305, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201306, + "OrbID": 211306, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201307, + "OrbID": 211307, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201308, + "OrbID": 211308, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201309, + "OrbID": 211309, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201310, + "OrbID": 211310, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201313, + "OrbID": 211313, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201314, + "OrbID": 211314, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201315, + "OrbID": 211315, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201317, + "OrbID": 211317, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201401, + "OrbID": 211401, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201402, + "OrbID": 211402, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201403, + "OrbID": 211403, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201404, + "OrbID": 211404, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201405, + "OrbID": 211405, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201406, + "OrbID": 211406, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201407, + "OrbID": 211407, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201408, + "OrbID": 211408, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201409, + "OrbID": 211409, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201410, + "OrbID": 211410, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201412, + "OrbID": 211412, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201413, + "OrbID": 211413, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201414, + "OrbID": 211414, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201415, + "OrbID": 211415, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 208007, + "OrbID": 218007, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301001, + "OrbID": 311001, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301003, + "OrbID": 311003, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301004, + "OrbID": 311004, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301005, + "OrbID": 311005, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301006, + "OrbID": 311006, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301009, + "OrbID": 311009, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301013, + "OrbID": 311013, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301014, + "OrbID": 311014, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301015, + "OrbID": 311015, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301101, + "OrbID": 311101, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301102, + "OrbID": 311102, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301104, + "OrbID": 311104, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301105, + "OrbID": 311105, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301106, + "OrbID": 311106, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301108, + "OrbID": 311108, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301112, + "OrbID": 311112, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301203, + "OrbID": 311203, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301204, + "OrbID": 311204, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301205, + "OrbID": 311205, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301208, + "OrbID": 311208, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301209, + "OrbID": 311209, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301212, + "OrbID": 311212, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301213, + "OrbID": 311213, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301217, + "OrbID": 311217, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301218, + "OrbID": 311218, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301220, + "OrbID": 311220, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301221, + "OrbID": 311221, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301222, + "OrbID": 311222, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301223, + "OrbID": 311223, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301225, + "OrbID": 311225, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301302, + "OrbID": 311302, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301303, + "OrbID": 311303, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301304, + "OrbID": 311304, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301305, + "OrbID": 311305, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301306, + "OrbID": 311306, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301307, + "OrbID": 311307, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301308, + "OrbID": 311308, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301309, + "OrbID": 311309, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301310, + "OrbID": 311310, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301313, + "OrbID": 311313, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301314, + "OrbID": 311314, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301315, + "OrbID": 311315, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301317, + "OrbID": 311317, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301401, + "OrbID": 311401, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301402, + "OrbID": 311402, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301403, + "OrbID": 311403, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301404, + "OrbID": 311404, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301405, + "OrbID": 311405, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301406, + "OrbID": 311406, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301407, + "OrbID": 311407, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301408, + "OrbID": 311408, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301409, + "OrbID": 311409, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301410, + "OrbID": 311410, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301412, + "OrbID": 311412, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301413, + "OrbID": 311413, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301414, + "OrbID": 311414, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301415, + "OrbID": 311415, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 308007, + "OrbID": 318007, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 204, + "OrbID": 200038, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1501, + "OrbID": 101501, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1502, + "OrbID": 101502, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201501, + "OrbID": 211501, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201502, + "OrbID": 211502, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301501, + "OrbID": 311501, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301502, + "OrbID": 311502, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1202, + "OrbID": 101202, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1301, + "OrbID": 101301, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201201, + "OrbID": 211201, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201202, + "OrbID": 211202, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201301, + "OrbID": 211301, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301201, + "OrbID": 311201, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301202, + "OrbID": 311202, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301301, + "OrbID": 311301, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 99990, + "OrbID": 308, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1321, + "OrbID": 101321, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1504, + "OrbID": 101504, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1505, + "OrbID": 101505, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1506, + "OrbID": 101506, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201321, + "OrbID": 211321, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201504, + "OrbID": 211504, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201505, + "OrbID": 211505, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201506, + "OrbID": 211506, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301321, + "OrbID": 311321, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301504, + "OrbID": 311504, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301505, + "OrbID": 311505, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301506, + "OrbID": 311506, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 8009, + "OrbID": 108009, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 208009, + "OrbID": 218009, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 308009, + "OrbID": 318009, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 90299, + "OrbID": 190299, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 22006, + "OrbID": 122006, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 22007, + "OrbID": 122007, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 11079, + "OrbID": 111079, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 11080, + "OrbID": 111080, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 11081, + "OrbID": 111081, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 11082, + "OrbID": 111082, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 11083, + "OrbID": 111083, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1507, + "OrbID": 101507, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1508, + "OrbID": 101508, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1509, + "OrbID": 101509, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1510, + "OrbID": 101510, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201507, + "OrbID": 211507, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201508, + "OrbID": 211508, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201509, + "OrbID": 211509, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201510, + "OrbID": 211510, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301507, + "OrbID": 311507, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301508, + "OrbID": 311508, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301509, + "OrbID": 311509, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301510, + "OrbID": 311510, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1210, + "OrbID": 101210, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201210, + "OrbID": 211210, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301210, + "OrbID": 311210, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1503, + "OrbID": 101503, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201503, + "OrbID": 211503, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301503, + "OrbID": 311503, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23151, + "OrbID": 123151, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23152, + "OrbID": 123152, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23153, + "OrbID": 123153, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23154, + "OrbID": 123154, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23155, + "OrbID": 123155, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23156, + "OrbID": 123156, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23157, + "OrbID": 123157, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23158, + "OrbID": 123158, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23159, + "OrbID": 123159, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23160, + "OrbID": 123160, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 6042, + "OrbID": 106042, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1107, + "OrbID": 101107, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201107, + "OrbID": 211107, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301107, + "OrbID": 311107, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1214, + "OrbID": 101214, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201214, + "OrbID": 211214, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301214, + "OrbID": 311214, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 206042, + "OrbID": 216042, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 306042, + "OrbID": 316042, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20054, + "OrbID": 120054, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20056, + "OrbID": 120056, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20044, + "OrbID": 120044, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20045, + "OrbID": 120045, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20055, + "OrbID": 120055, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20057, + "OrbID": 120057, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20046, + "OrbID": 120046, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 20047, + "OrbID": 120047, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1511, + "OrbID": 101511, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201511, + "OrbID": 211511, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301511, + "OrbID": 311511, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1103, + "OrbID": 101103, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1211, + "OrbID": 101211, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1215, + "OrbID": 101215, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1224, + "OrbID": 101224, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1512, + "OrbID": 101512, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 1513, + "OrbID": 101513, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201103, + "OrbID": 211103, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201211, + "OrbID": 211211, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201215, + "OrbID": 211215, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201224, + "OrbID": 211224, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201512, + "OrbID": 211512, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 201513, + "OrbID": 211513, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301103, + "OrbID": 311103, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301211, + "OrbID": 311211, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301215, + "OrbID": 311215, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301224, + "OrbID": 311224, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301512, + "OrbID": 311512, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 301513, + "OrbID": 311513, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23201, + "OrbID": 123201, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23202, + "OrbID": 123202, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23203, + "OrbID": 123203, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23204, + "OrbID": 123204, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23205, + "OrbID": 123205, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23206, + "OrbID": 123206, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23207, + "OrbID": 123207, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23208, + "OrbID": 123208, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23209, + "OrbID": 123209, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23210, + "OrbID": 123210, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23211, + "OrbID": 123211, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23212, + "OrbID": 123212, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23213, + "OrbID": 123213, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23214, + "OrbID": 123214, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23215, + "OrbID": 123215, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23216, + "OrbID": 123216, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23217, + "OrbID": 123217, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23218, + "OrbID": 123218, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23219, + "OrbID": 123219, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23220, + "OrbID": 123220, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23221, + "OrbID": 123221, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23222, + "OrbID": 123222, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23223, + "OrbID": 123223, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23224, + "OrbID": 123224, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23225, + "OrbID": 123225, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23226, + "OrbID": 123226, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23227, + "OrbID": 123227, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23228, + "OrbID": 123228, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23229, + "OrbID": 123229, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23230, + "OrbID": 123230, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23231, + "OrbID": 123231, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23232, + "OrbID": 123232, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23233, + "OrbID": 123233, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23234, + "OrbID": 123234, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23235, + "OrbID": 123235, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23236, + "OrbID": 123236, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23237, + "OrbID": 123237, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23238, + "OrbID": 123238, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23239, + "OrbID": 123239, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23240, + "OrbID": 123240, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23241, + "OrbID": 123241, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23242, + "OrbID": 123242, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23243, + "OrbID": 123243, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23244, + "OrbID": 123244, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23245, + "OrbID": 123245, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23246, + "OrbID": 123246, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23247, + "OrbID": 123247, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23248, + "OrbID": 123248, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23249, + "OrbID": 123249, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23250, + "OrbID": 123250, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23251, + "OrbID": 123251, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23252, + "OrbID": 123252, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23253, + "OrbID": 123253, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23254, + "OrbID": 123254, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23255, + "OrbID": 123255, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23256, + "OrbID": 123256, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23257, + "OrbID": 123257, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23258, + "OrbID": 123258, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23259, + "OrbID": 123259, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23260, + "OrbID": 123260, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23261, + "OrbID": 123261, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23262, + "OrbID": 123262, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23263, + "OrbID": 123263, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23264, + "OrbID": 123264, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23265, + "OrbID": 123265, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23266, + "OrbID": 123266, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23267, + "OrbID": 123267, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23268, + "OrbID": 123268, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23269, + "OrbID": 123269, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23270, + "OrbID": 123270, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23271, + "OrbID": 123271, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23272, + "OrbID": 123272, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23273, + "OrbID": 123273, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23274, + "OrbID": 123274, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23275, + "OrbID": 123275, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23276, + "OrbID": 123276, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23277, + "OrbID": 123277, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23278, + "OrbID": 123278, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23279, + "OrbID": 123279, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23280, + "OrbID": 123280, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23281, + "OrbID": 123281, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23282, + "OrbID": 123282, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23283, + "OrbID": 123283, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23284, + "OrbID": 123284, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23285, + "OrbID": 123285, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23286, + "OrbID": 123286, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23287, + "OrbID": 123287, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23288, + "OrbID": 123288, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23289, + "OrbID": 123289, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23290, + "OrbID": 123290, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23291, + "OrbID": 123291, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23292, + "OrbID": 123292, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23293, + "OrbID": 123293, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23294, + "OrbID": 123294, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23295, + "OrbID": 123295, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23296, + "OrbID": 123296, + "Type": 4, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23297, + "OrbID": 123297, + "Type": 3, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23298, + "OrbID": 123298, + "Type": 2, + "OrbName": { + "hash": 0, + "hash64": 0 + } + }, + { + "BonusID": 23299, + "OrbID": 123299, + "Type": 1, + "OrbName": { + "hash": 0, + "hash64": 0 + } + } + ], + "consumable": [ + { + "ConsumableParamList": [], + "IfStack": true, + "IfConsume": true, + "ID": 350101, + "ConsumableRule": 0, + "ConsumableDesc": { + "hash": 999082529, + "hash64": 15298412367088846627 + } + }, + { + "ConsumableParamList": [], + "IfStack": false, + "IfConsume": false, + "ID": 350102, + "ConsumableRule": 0, + "ConsumableDesc": { + "hash": 999082532, + "hash64": 12264024043971668447 + } + }, + { + "ConsumableParamList": [], + "IfStack": true, + "IfConsume": true, + "ID": 350103, + "ConsumableRule": 1, + "ConsumableDesc": { + "hash": 999082531, + "hash64": 16380897784992424888 + } + }, + { + "ConsumableParamList": [], + "IfStack": false, + "IfConsume": true, + "ID": 350104, + "ConsumableRule": 2, + "ConsumableDesc": { + "hash": 999082526, + "hash64": 7150554313729921518 + } + }, + { + "ConsumableParamList": [ + 3, + 1 + ], + "IfStack": true, + "IfConsume": true, + "ID": 350105, + "ConsumableRule": 3, + "ConsumableDesc": { + "hash": 999082525, + "hash64": 7644875178084974559 + } + }, + { + "ConsumableParamList": [ + 5, + 1 + ], + "IfStack": true, + "IfConsume": true, + "ID": 350106, + "ConsumableRule": 3, + "ConsumableDesc": { + "hash": 999082528, + "hash64": 9187583903335043829 + } + }, + { + "ConsumableParamList": [ + 4 + ], + "IfStack": false, + "IfConsume": true, + "ID": 350107, + "ConsumableRule": 4, + "ConsumableDesc": { + "hash": 999082527, + "hash64": 12818461315544430552 + } + }, + { + "ConsumableParamList": [ + 1, + 15 + ], + "IfStack": false, + "IfConsume": false, + "ID": 350110, + "ConsumableRule": 5, + "ConsumableDesc": { + "hash": -567001411, + "hash64": 713418105576456486 + } + }, + { + "ConsumableParamList": [ + 1, + 1 + ], + "IfStack": true, + "IfConsume": true, + "ID": 350108, + "ConsumableRule": 3, + "ConsumableDesc": { + "hash": 999082538, + "hash64": 10804664708134104217 + } + }, + { + "ConsumableParamList": [], + "IfStack": false, + "IfConsume": true, + "ID": 350111, + "ConsumableRule": 6, + "ConsumableDesc": { + "hash": -567001412, + "hash64": 7335057684893909668 + } + }, + { + "ConsumableParamList": [ + 1, + 1, + 100502 + ], + "IfStack": true, + "IfConsume": true, + "ID": 350112, + "ConsumableRule": 3, + "ConsumableDesc": { + "hash": -567001409, + "hash64": 4910134044864935209 + } + }, + { + "ConsumableParamList": [ + 3, + 1, + 100502 + ], + "IfStack": true, + "IfConsume": true, + "ID": 350113, + "ConsumableRule": 3, + "ConsumableDesc": { + "hash": -567001410, + "hash64": 8335528315943132870 + } + }, + { + "ConsumableParamList": [ + 5, + 1, + 100502 + ], + "IfStack": true, + "IfConsume": true, + "ID": 350114, + "ConsumableRule": 3, + "ConsumableDesc": { + "hash": -567001415, + "hash64": 10601773952332475402 + } + }, + { + "ConsumableParamList": [], + "IfStack": true, + "IfConsume": true, + "ID": 350115, + "ConsumableRule": 0, + "ConsumableDesc": { + "hash": -567001416, + "hash64": 6875161791693790132 + } + }, + { + "ConsumableParamList": [], + "IfStack": true, + "IfConsume": true, + "ID": 350116, + "ConsumableRule": 1, + "ConsumableDesc": { + "hash": -567001413, + "hash64": 12012968500067741772 + } + }, + { + "ConsumableParamList": [], + "IfStack": false, + "IfConsume": true, + "ID": 350117, + "ConsumableRule": 2, + "ConsumableDesc": { + "hash": -567001414, + "hash64": 8120690066557776171 + } + }, + { + "ConsumableParamList": [], + "IfStack": true, + "IfConsume": true, + "ID": 350118, + "ConsumableRule": 8, + "ConsumableDesc": { + "hash": -567001403, + "hash64": 13701325505483718996 + } + }, + { + "ConsumableParamList": [], + "IfStack": true, + "IfConsume": true, + "ID": 350119, + "ConsumableRule": 7, + "ConsumableDesc": { + "hash": -567001404, + "hash64": 1762362107055617815 + } + } + ], + "forge": [ + { + "ParamList": [ + 1 + ], + "ForgeDesc": { + "hash": 1419323344, + "hash64": 4771493019422090940 + }, + "FuncType": 1, + "EquipNum": 4, + "ID": 99999, + "EquipCategory": 1, + "ForgeTypeDesc": { + "hash": 1199806882, + "hash64": 12254417321308275778 + } + }, + { + "ParamList": [ + 2 + ], + "ForgeDesc": { + "hash": -146760597, + "hash64": 4937002973536357794 + }, + "FuncType": 1, + "EquipNum": 4, + "ID": 99998, + "EquipCategory": 2, + "ForgeTypeDesc": { + "hash": -366277059, + "hash64": 8589886984925649818 + } + }, + { + "ParamList": [ + 7 + ], + "ForgeDesc": { + "hash": -99706430, + "hash64": 14263819086078868238 + }, + "FuncType": 1, + "EquipNum": 4, + "ID": 99997, + "EquipCategory": 7, + "ForgeTypeDesc": { + "hash": 1650145576, + "hash64": 13156037715805142784 + } + }, + { + "ParamList": [ + 1, + 1 + ], + "ForgeDesc": { + "hash": -1665790371, + "hash64": 14033383379622544142 + }, + "FuncType": 2, + "EquipNum": 4, + "ID": 99996, + "EquipCategory": 1, + "ForgeTypeDesc": { + "hash": 84061635, + "hash64": 7693593641213035302 + } + }, + { + "ParamList": [ + 2, + 1 + ], + "ForgeDesc": { + "hash": -1262505844, + "hash64": 17131573491470788833 + }, + "FuncType": 2, + "EquipNum": 4, + "ID": 99995, + "EquipCategory": 1, + "ForgeTypeDesc": { + "hash": -1482022306, + "hash64": 13423555826593071818 + } + }, + { + "ParamList": [ + 3, + 1 + ], + "ForgeDesc": { + "hash": 1466377511, + "hash64": 13253257534790185312 + }, + "FuncType": 2, + "EquipNum": 4, + "ID": 99994, + "EquipCategory": 1, + "ForgeTypeDesc": { + "hash": 1246861049, + "hash64": 15620507551600485860 + } + }, + { + "ParamList": [ + 4, + 1 + ], + "ForgeDesc": { + "hash": -2069074898, + "hash64": 13070089961102453716 + }, + "FuncType": 2, + "EquipNum": 4, + "ID": 99993, + "EquipCategory": 1, + "ForgeTypeDesc": { + "hash": -319222892, + "hash64": 6274961835139800885 + } + }, + { + "ParamList": [ + 5, + 1 + ], + "ForgeDesc": { + "hash": 659808457, + "hash64": 12014413591636146206 + }, + "FuncType": 2, + "EquipNum": 4, + "ID": 99992, + "EquipCategory": 1, + "ForgeTypeDesc": { + "hash": -1885306833, + "hash64": 17987294268242077429 + } + }, + { + "ParamList": [ + 3 + ], + "ForgeDesc": { + "hash": 1063092984, + "hash64": 4425507222559381151 + }, + "FuncType": 1, + "EquipNum": 4, + "ID": 99991, + "EquipCategory": 3, + "ForgeTypeDesc": { + "hash": 843576522, + "hash64": 12864003785331040786 + } + }, + { + "ParamList": [ + 4, + 4 + ], + "ForgeDesc": { + "hash": -502990957, + "hash64": 5143641911753690946 + }, + "FuncType": 3, + "EquipNum": 4, + "ID": 99990, + "EquipCategory": 3, + "ForgeTypeDesc": { + "hash": -722507419, + "hash64": 12459814098337210246 + } + }, + { + "ParamList": [ + 1 + ], + "ForgeDesc": { + "hash": 1419323343, + "hash64": 1071272885122973950 + }, + "FuncType": 1, + "EquipNum": 4, + "ID": 99989, + "EquipCategory": 1, + "ForgeTypeDesc": { + "hash": 1199806881, + "hash64": 12940619383019214485 + } + } + ], + "item": [ + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350101.png", + "ItemName": { + "hash": 1215152599, + "hash64": 10537163807765380095 + }, + "ItemPriority": 1, + "ID": 350101 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350102.png", + "ItemName": { + "hash": 1215152602, + "hash64": 12731587311536209756 + }, + "ItemPriority": 2, + "ID": 350102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350103.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350103.png", + "ItemName": { + "hash": 1215152601, + "hash64": 16933631694056275331 + }, + "ItemPriority": 1, + "ID": 350103 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350104.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350104.png", + "ItemName": { + "hash": 1215152604, + "hash64": 13894306391687286133 + }, + "ItemPriority": 4, + "ID": 350104 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350105.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350105.png", + "ItemName": { + "hash": 1215152603, + "hash64": 5917345053526182305 + }, + "ItemPriority": 3, + "ID": 350105 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350106.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350106.png", + "ItemName": { + "hash": 1215152606, + "hash64": 10065403088807770034 + }, + "ItemPriority": 4, + "ID": 350106 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350201.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350201.png", + "ItemName": { + "hash": 1215152698, + "hash64": 13765384773341896605 + }, + "ItemPriority": 1, + "ID": 350201 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350202.png", + "ItemName": { + "hash": 1215152695, + "hash64": 13662274869029521041 + }, + "ItemPriority": 1, + "ID": 350202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350203.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350203.png", + "ItemName": { + "hash": 1215152696, + "hash64": 7047773456376257537 + }, + "ItemPriority": 1, + "ID": 350203 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350204.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350204.png", + "ItemName": { + "hash": 1215152701, + "hash64": 2177478917530981948 + }, + "ItemPriority": 1, + "ID": 350204 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350205.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350205.png", + "ItemName": { + "hash": 1215152702, + "hash64": 6319762105141414533 + }, + "ItemPriority": 1, + "ID": 350205 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350206.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350206.png", + "ItemName": { + "hash": 1215152699, + "hash64": 13123244775458978398 + }, + "ItemPriority": 1, + "ID": 350206 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350207.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350207.png", + "ItemName": { + "hash": 1215152700, + "hash64": 330379905393369999 + }, + "ItemPriority": 1, + "ID": 350207 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350208.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350208.png", + "ItemName": { + "hash": 1215152705, + "hash64": 9931547911307860101 + }, + "ItemPriority": 1, + "ID": 350208 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030107.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030107.png", + "ItemName": { + "hash": -2056105197, + "hash64": 12893034770288089787 + }, + "ItemPriority": 5, + "ID": 35100001 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030203.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030203.png", + "ItemName": { + "hash": -2056105196, + "hash64": 6973936301556821634 + }, + "ItemPriority": 5, + "ID": 35100002 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030307.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030307.png", + "ItemName": { + "hash": -2056105195, + "hash64": 5935913011623226177 + }, + "ItemPriority": 5, + "ID": 35100003 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030107.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030107.png", + "ItemName": { + "hash": -490021256, + "hash64": 3293073406521598453 + }, + "ItemPriority": 5, + "ID": 35100011 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030203.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030203.png", + "ItemName": { + "hash": -490021255, + "hash64": 9140809426553338514 + }, + "ItemPriority": 5, + "ID": 35100012 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030307.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030307.png", + "ItemName": { + "hash": -490021254, + "hash64": 12651412974978534483 + }, + "ItemPriority": 5, + "ID": 35100013 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350601.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350601.png", + "ItemName": { + "hash": 1215152830, + "hash64": 15563902436530543536 + }, + "ItemPriority": 6, + "ID": 350601 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350602.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350602.png", + "ItemName": { + "hash": 1215152827, + "hash64": 7864679557585908449 + }, + "ItemPriority": 6, + "ID": 350602 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350701.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350701.png", + "ItemName": { + "hash": 1215152797, + "hash64": 1501233572312841421 + }, + "ItemPriority": 4, + "ID": 350701 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051001.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051001.png", + "ItemName": { + "hash": -833210186, + "hash64": 3154524443447472618 + }, + "ItemPriority": 3, + "ID": 35051001 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051003.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051003.png", + "ItemName": { + "hash": -833210184, + "hash64": 10121089980222835624 + }, + "ItemPriority": 3, + "ID": 35051003 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051005.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051005.png", + "ItemName": { + "hash": -833210190, + "hash64": 790447500062714915 + }, + "ItemPriority": 3, + "ID": 35051005 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051006.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051006.png", + "ItemName": { + "hash": -833210187, + "hash64": 13918828736772452527 + }, + "ItemPriority": 3, + "ID": 35051006 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051007.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051007.png", + "ItemName": { + "hash": -833210188, + "hash64": 14800595254090590314 + }, + "ItemPriority": 3, + "ID": 35051007 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051008.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051008.png", + "ItemName": { + "hash": -833210177, + "hash64": 2533362962399934222 + }, + "ItemPriority": 3, + "ID": 35051008 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051010.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051010.png", + "ItemName": { + "hash": 732873756, + "hash64": 283136375016544996 + }, + "ItemPriority": 3, + "ID": 35051010 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051011.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051011.png", + "ItemName": { + "hash": 732873755, + "hash64": 18115644629917871033 + }, + "ItemPriority": 3, + "ID": 35051011 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051012.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051012.png", + "ItemName": { + "hash": 732873758, + "hash64": 12786303580485985569 + }, + "ItemPriority": 3, + "ID": 35051012 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052001.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052001.png", + "ItemName": { + "hash": 1875470193, + "hash64": 1977839237079548951 + }, + "ItemPriority": 3, + "ID": 35052001 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052002.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052002.png", + "ItemName": { + "hash": 1875470196, + "hash64": 5248466236128067162 + }, + "ItemPriority": 3, + "ID": 35052002 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052003.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052003.png", + "ItemName": { + "hash": 1875470195, + "hash64": 9988538395353271302 + }, + "ItemPriority": 3, + "ID": 35052003 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052004.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052004.png", + "ItemName": { + "hash": 1875470190, + "hash64": 13377812302195177050 + }, + "ItemPriority": 3, + "ID": 35052004 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052005.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052005.png", + "ItemName": { + "hash": 1875470189, + "hash64": 4471980907540584750 + }, + "ItemPriority": 3, + "ID": 35052005 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052006.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052006.png", + "ItemName": { + "hash": 1875470192, + "hash64": 14483448202040283844 + }, + "ItemPriority": 3, + "ID": 35052006 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052007.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052007.png", + "ItemName": { + "hash": 1875470191, + "hash64": 1566812063174570929 + }, + "ItemPriority": 3, + "ID": 35052007 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052008.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052008.png", + "ItemName": { + "hash": 1875470202, + "hash64": 7654122488939224577 + }, + "ItemPriority": 3, + "ID": 35052008 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052009.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052009.png", + "ItemName": { + "hash": 1875470201, + "hash64": 6971112093062975130 + }, + "ItemPriority": 3, + "ID": 35052009 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052010.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052010.png", + "ItemName": { + "hash": 309386253, + "hash64": 14573815754074335353 + }, + "ItemPriority": 3, + "ID": 35052010 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052011.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052011.png", + "ItemName": { + "hash": 309386252, + "hash64": 11446158655433687341 + }, + "ItemPriority": 3, + "ID": 35052011 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_WeaponBox1.png", + "ItemName": { + "hash": 575915162, + "hash64": 4076583635281141073 + }, + "ItemPriority": 1, + "ID": 99999 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_WeaponBox2.png", + "ItemName": { + "hash": -990168779, + "hash64": 10646809876480222043 + }, + "ItemPriority": 2, + "ID": 99998 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_WeaponBox3.png", + "ItemName": { + "hash": 1026253856, + "hash64": 18083634048213666107 + }, + "ItemPriority": 5, + "ID": 99997 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_RoleBox1.png", + "ItemName": { + "hash": -539830085, + "hash64": 9199674294804075900 + }, + "ItemPriority": 1, + "ID": 99996 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_RoleBox2.png", + "ItemName": { + "hash": -2105914026, + "hash64": 7631658240414014664 + }, + "ItemPriority": 2, + "ID": 99995 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_RoleBox3.png", + "ItemName": { + "hash": 622969329, + "hash64": 12207836160818775053 + }, + "ItemPriority": 3, + "ID": 99994 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_RoleBox4.png", + "ItemName": { + "hash": -943114612, + "hash64": 7724444325969219142 + }, + "ItemPriority": 4, + "ID": 99993 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_RoleBox5.png", + "ItemName": { + "hash": 1785768743, + "hash64": 17508381747676214332 + }, + "ItemPriority": 5, + "ID": 99992 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_StarBook.png", + "ItemName": { + "hash": 219684802, + "hash64": 2202525391360922685 + }, + "ItemPriority": 3, + "ID": 99991 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350107.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350107.png", + "ItemName": { + "hash": 1215152605, + "hash64": 7304855603195412475 + }, + "ItemPriority": 4, + "ID": 350107 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352101.png", + "ItemName": { + "hash": 932827597, + "hash64": 8064869336596898890 + }, + "ItemPriority": 2, + "ID": 352101 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352201.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352201.png", + "ItemName": { + "hash": 932827696, + "hash64": 11394752748830131754 + }, + "ItemPriority": 2, + "ID": 352201 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/GridFight_ExpertContract1.png", + "ItemName": { + "hash": -1346399139, + "hash64": 8749374739993668445 + }, + "ItemPriority": 3, + "ID": 99990 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35052012.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35052012.png", + "ItemName": { + "hash": 309386255, + "hash64": 8075019522764782009 + }, + "ItemPriority": 3, + "ID": 35052012 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352301.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352301.png", + "ItemName": { + "hash": 932827663, + "hash64": 14791059865448358940 + }, + "ItemPriority": 10, + "ID": 352301 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352302.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352302.png", + "ItemName": { + "hash": 932827662, + "hash64": 273257181948380076 + }, + "ItemPriority": 10, + "ID": 352302 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352303.png", + "ItemName": { + "hash": 932827661, + "hash64": 10815779022250704801 + }, + "ItemPriority": 10, + "ID": 352303 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352301.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352301.png", + "ItemName": { + "hash": 932827762, + "hash64": 5261087792498678297 + }, + "ItemPriority": 10, + "ID": 352401 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352402.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352402.png", + "ItemName": { + "hash": 932827763, + "hash64": 15711649667433153294 + }, + "ItemPriority": 10, + "ID": 352402 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352404.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352404.png", + "ItemName": { + "hash": 932827757, + "hash64": 7480920138995937087 + }, + "ItemPriority": 10, + "ID": 352404 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352405.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352405.png", + "ItemName": { + "hash": 932827758, + "hash64": 15724832661363928105 + }, + "ItemPriority": 10, + "ID": 352405 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352304.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352304.png", + "ItemName": { + "hash": 932827759, + "hash64": 125614044811972761 + }, + "ItemPriority": 10, + "ID": 352406 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352301.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352301.png", + "ItemName": { + "hash": 932827729, + "hash64": 3126608065507370444 + }, + "ItemPriority": 10, + "ID": 352501 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352402.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352402.png", + "ItemName": { + "hash": 932827732, + "hash64": 5903862458590791143 + }, + "ItemPriority": 10, + "ID": 352502 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352404.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352404.png", + "ItemName": { + "hash": 932827731, + "hash64": 4338665941092654969 + }, + "ItemPriority": 10, + "ID": 352503 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352405.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352405.png", + "ItemName": { + "hash": 932827726, + "hash64": 13114880622199092114 + }, + "ItemPriority": 10, + "ID": 352504 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352302.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352302.png", + "ItemName": { + "hash": 932827725, + "hash64": 2525973362863770322 + }, + "ItemPriority": 10, + "ID": 352505 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352304.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352304.png", + "ItemName": { + "hash": 932827728, + "hash64": 16955924430013180619 + }, + "ItemPriority": 10, + "ID": 352506 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352304.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352304.png", + "ItemName": { + "hash": 932827668, + "hash64": 4942809743895534381 + }, + "ItemPriority": 10, + "ID": 352304 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352507.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352507.png", + "ItemName": { + "hash": 932827727, + "hash64": 13650481139774207575 + }, + "ItemPriority": 10, + "ID": 352507 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030101.png", + "ItemName": { + "hash": -2137174246, + "hash64": 4753753304001308095 + }, + "ItemPriority": 2, + "ID": 35030101 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030102.png", + "ItemName": { + "hash": -2137174249, + "hash64": 14367940758852748718 + }, + "ItemPriority": 2, + "ID": 35030102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030103.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030103.png", + "ItemName": { + "hash": -2137174248, + "hash64": 7433392837895615547 + }, + "ItemPriority": 2, + "ID": 35030103 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030104.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030104.png", + "ItemName": { + "hash": -2137174243, + "hash64": 14940551553297516929 + }, + "ItemPriority": 2, + "ID": 35030104 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030105.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030105.png", + "ItemName": { + "hash": -2137174242, + "hash64": 11479608286323992051 + }, + "ItemPriority": 2, + "ID": 35030105 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030106.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030106.png", + "ItemName": { + "hash": -2137174245, + "hash64": 3466130484025661257 + }, + "ItemPriority": 2, + "ID": 35030106 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030107.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030107.png", + "ItemName": { + "hash": -2137174244, + "hash64": 14121657075393170100 + }, + "ItemPriority": 2, + "ID": 35030107 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030108.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030108.png", + "ItemName": { + "hash": -2137174239, + "hash64": 10639435433697728666 + }, + "ItemPriority": 2, + "ID": 35030108 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030202.png", + "ItemName": { + "hash": -2137174342, + "hash64": 17576381106424885129 + }, + "ItemPriority": 2, + "ID": 35030202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030203.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030203.png", + "ItemName": { + "hash": -2137174343, + "hash64": 2985794999196287361 + }, + "ItemPriority": 2, + "ID": 35030203 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030204.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030204.png", + "ItemName": { + "hash": -2137174340, + "hash64": 9093204666602936138 + }, + "ItemPriority": 2, + "ID": 35030204 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030205.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030205.png", + "ItemName": { + "hash": -2137174341, + "hash64": 3530432521041892763 + }, + "ItemPriority": 2, + "ID": 35030205 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030206.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030206.png", + "ItemName": { + "hash": -2137174338, + "hash64": 15535057428455513841 + }, + "ItemPriority": 2, + "ID": 35030206 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030207.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030207.png", + "ItemName": { + "hash": -2137174339, + "hash64": 12330985261097262787 + }, + "ItemPriority": 2, + "ID": 35030207 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030208.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030208.png", + "ItemName": { + "hash": -2137174336, + "hash64": 16476294199327989745 + }, + "ItemPriority": 2, + "ID": 35030208 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030303.png", + "ItemName": { + "hash": -2137174310, + "hash64": 8226656638579579027 + }, + "ItemPriority": 2, + "ID": 35030303 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030304.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030304.png", + "ItemName": { + "hash": -2137174309, + "hash64": 15214326865493459448 + }, + "ItemPriority": 2, + "ID": 35030304 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030305.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030305.png", + "ItemName": { + "hash": -2137174308, + "hash64": 9955946504957992210 + }, + "ItemPriority": 2, + "ID": 35030305 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030306.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030306.png", + "ItemName": { + "hash": -2137174307, + "hash64": 8861175070895941298 + }, + "ItemPriority": 2, + "ID": 35030306 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030307.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030307.png", + "ItemName": { + "hash": -2137174306, + "hash64": 9423284037926110886 + }, + "ItemPriority": 2, + "ID": 35030307 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030308.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030308.png", + "ItemName": { + "hash": -2137174305, + "hash64": 7800278139045433218 + }, + "ItemPriority": 2, + "ID": 35030308 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030404.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030404.png", + "ItemName": { + "hash": -2137174150, + "hash64": 7033658795053726603 + }, + "ItemPriority": 2, + "ID": 35030404 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030405.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030405.png", + "ItemName": { + "hash": -2137174151, + "hash64": 3419512588666068466 + }, + "ItemPriority": 2, + "ID": 35030405 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030406.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030406.png", + "ItemName": { + "hash": -2137174152, + "hash64": 11602936488492024515 + }, + "ItemPriority": 2, + "ID": 35030406 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030407.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030407.png", + "ItemName": { + "hash": -2137174153, + "hash64": 1375952477467903081 + }, + "ItemPriority": 2, + "ID": 35030407 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030408.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030408.png", + "ItemName": { + "hash": -2137174138, + "hash64": 4294385594571807609 + }, + "ItemPriority": 2, + "ID": 35030408 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030505.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030505.png", + "ItemName": { + "hash": -2137174118, + "hash64": 4618097977905037709 + }, + "ItemPriority": 2, + "ID": 35030505 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030506.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030506.png", + "ItemName": { + "hash": -2137174121, + "hash64": 13972328400394452684 + }, + "ItemPriority": 2, + "ID": 35030506 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030507.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030507.png", + "ItemName": { + "hash": -2137174120, + "hash64": 11748690564198685172 + }, + "ItemPriority": 2, + "ID": 35030507 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030508.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030508.png", + "ItemName": { + "hash": -2137174107, + "hash64": 15851484458782318361 + }, + "ItemPriority": 2, + "ID": 35030508 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030606.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030606.png", + "ItemName": { + "hash": -2137174214, + "hash64": 3520986219812074469 + }, + "ItemPriority": 2, + "ID": 35030606 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030607.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030607.png", + "ItemName": { + "hash": -2137174215, + "hash64": 14405991796067637167 + }, + "ItemPriority": 2, + "ID": 35030607 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030608.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030608.png", + "ItemName": { + "hash": -2137174204, + "hash64": 14255044080183922274 + }, + "ItemPriority": 2, + "ID": 35030608 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030707.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030707.png", + "ItemName": { + "hash": -2137174182, + "hash64": 7641061050978073298 + }, + "ItemPriority": 2, + "ID": 35030707 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030708.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030708.png", + "ItemName": { + "hash": -2137174173, + "hash64": 4840425977768102163 + }, + "ItemPriority": 2, + "ID": 35030708 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030808.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030808.png", + "ItemName": { + "hash": -2137174022, + "hash64": 12049793762852813704 + }, + "ItemPriority": 2, + "ID": 35030808 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030101.png", + "ItemName": { + "hash": -2137170981, + "hash64": 2164438687840252386 + }, + "ItemPriority": 5, + "ID": 35040101 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030102.png", + "ItemName": { + "hash": -2137170978, + "hash64": 6970654965768959487 + }, + "ItemPriority": 5, + "ID": 35040102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030103.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030103.png", + "ItemName": { + "hash": -2137170979, + "hash64": 15062113260828791093 + }, + "ItemPriority": 5, + "ID": 35040103 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030104.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030104.png", + "ItemName": { + "hash": -2137170984, + "hash64": 1332341447942636546 + }, + "ItemPriority": 5, + "ID": 35040104 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030105.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030105.png", + "ItemName": { + "hash": -2137170985, + "hash64": 15573855903157760943 + }, + "ItemPriority": 5, + "ID": 35040105 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030106.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030106.png", + "ItemName": { + "hash": -2137170982, + "hash64": 11437296364952844266 + }, + "ItemPriority": 5, + "ID": 35040106 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030107.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030107.png", + "ItemName": { + "hash": -2137170983, + "hash64": 8498466153294794459 + }, + "ItemPriority": 5, + "ID": 35040107 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030108.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030108.png", + "ItemName": { + "hash": -2137170972, + "hash64": 17882692801665436522 + }, + "ItemPriority": 5, + "ID": 35040108 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030202.png", + "ItemName": { + "hash": -2137171013, + "hash64": 7033586997253611939 + }, + "ItemPriority": 5, + "ID": 35040202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030203.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030203.png", + "ItemName": { + "hash": -2137171012, + "hash64": 10779479277318753368 + }, + "ItemPriority": 5, + "ID": 35040203 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030204.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030204.png", + "ItemName": { + "hash": -2137171015, + "hash64": 11697097457652975167 + }, + "ItemPriority": 5, + "ID": 35040204 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030205.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030205.png", + "ItemName": { + "hash": -2137171014, + "hash64": 3060373199118488743 + }, + "ItemPriority": 5, + "ID": 35040205 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030206.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030206.png", + "ItemName": { + "hash": -2137171017, + "hash64": 636425740351670504 + }, + "ItemPriority": 5, + "ID": 35040206 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030207.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030207.png", + "ItemName": { + "hash": -2137171016, + "hash64": 5267947315936409273 + }, + "ItemPriority": 5, + "ID": 35040207 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030208.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030208.png", + "ItemName": { + "hash": -2137171003, + "hash64": 423966330980206139 + }, + "ItemPriority": 5, + "ID": 35040208 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030303.png", + "ItemName": { + "hash": -2137170917, + "hash64": 5063461159318406587 + }, + "ItemPriority": 5, + "ID": 35040303 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030304.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030304.png", + "ItemName": { + "hash": -2137170918, + "hash64": 15782807851562653401 + }, + "ItemPriority": 5, + "ID": 35040304 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030305.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030305.png", + "ItemName": { + "hash": -2137170919, + "hash64": 4307433661371764754 + }, + "ItemPriority": 5, + "ID": 35040305 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030306.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030306.png", + "ItemName": { + "hash": -2137170920, + "hash64": 15366131061507002747 + }, + "ItemPriority": 5, + "ID": 35040306 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030307.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030307.png", + "ItemName": { + "hash": -2137170921, + "hash64": 8771556079705355920 + }, + "ItemPriority": 5, + "ID": 35040307 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030308.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030308.png", + "ItemName": { + "hash": -2137170906, + "hash64": 6176962565063012713 + }, + "ItemPriority": 5, + "ID": 35040308 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030404.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030404.png", + "ItemName": { + "hash": -2137171205, + "hash64": 5196149288585172879 + }, + "ItemPriority": 5, + "ID": 35040404 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030405.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030405.png", + "ItemName": { + "hash": -2137171204, + "hash64": 5870616992469836062 + }, + "ItemPriority": 5, + "ID": 35040405 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030406.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030406.png", + "ItemName": { + "hash": -2137171203, + "hash64": 9561038691228527972 + }, + "ItemPriority": 5, + "ID": 35040406 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030407.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030407.png", + "ItemName": { + "hash": -2137171202, + "hash64": 13773762781287765203 + }, + "ItemPriority": 5, + "ID": 35040407 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030408.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030408.png", + "ItemName": { + "hash": -2137171201, + "hash64": 5536002929559591829 + }, + "ItemPriority": 5, + "ID": 35040408 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030505.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030505.png", + "ItemName": { + "hash": -2137171109, + "hash64": 6498605581063549464 + }, + "ItemPriority": 5, + "ID": 35040505 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030506.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030506.png", + "ItemName": { + "hash": -2137171106, + "hash64": 17512241355699637972 + }, + "ItemPriority": 5, + "ID": 35040506 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030507.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030507.png", + "ItemName": { + "hash": -2137171107, + "hash64": 8946801919960481610 + }, + "ItemPriority": 5, + "ID": 35040507 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030508.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030508.png", + "ItemName": { + "hash": -2137171104, + "hash64": 17395562103947985127 + }, + "ItemPriority": 5, + "ID": 35040508 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030606.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030606.png", + "ItemName": { + "hash": -2137171141, + "hash64": 13562319658322408457 + }, + "ItemPriority": 5, + "ID": 35040606 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030607.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030607.png", + "ItemName": { + "hash": -2137171140, + "hash64": 15209536025538418705 + }, + "ItemPriority": 5, + "ID": 35040607 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030608.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030608.png", + "ItemName": { + "hash": -2137171135, + "hash64": 11110249506212892025 + }, + "ItemPriority": 5, + "ID": 35040608 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030707.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030707.png", + "ItemName": { + "hash": -2137171045, + "hash64": 6851600782478716182 + }, + "ItemPriority": 5, + "ID": 35040707 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030708.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030708.png", + "ItemName": { + "hash": -2137171038, + "hash64": 10163154724351210384 + }, + "ItemPriority": 5, + "ID": 35040708 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030808.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030808.png", + "ItemName": { + "hash": -2137170821, + "hash64": 6908262438791650923 + }, + "ItemPriority": 5, + "ID": 35040808 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352601.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352601.png", + "ItemName": { + "hash": 932827828, + "hash64": 6398428086887830920 + }, + "ItemPriority": 11, + "ID": 352601 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352602.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352602.png", + "ItemName": { + "hash": 932827825, + "hash64": 16051373887674207581 + }, + "ItemPriority": 11, + "ID": 352602 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352603.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352603.png", + "ItemName": { + "hash": 932827826, + "hash64": 420792529717566807 + }, + "ItemPriority": 11, + "ID": 352603 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352604.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352604.png", + "ItemName": { + "hash": 932827823, + "hash64": 2226907700480271562 + }, + "ItemPriority": 11, + "ID": 352604 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352605.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352605.png", + "ItemName": { + "hash": 932827824, + "hash64": 7621381592764664880 + }, + "ItemPriority": 11, + "ID": 352605 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352606.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352606.png", + "ItemName": { + "hash": 932827821, + "hash64": 16552026931312655268 + }, + "ItemPriority": 11, + "ID": 352606 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352607.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352607.png", + "ItemName": { + "hash": 932827822, + "hash64": 5964223350085397870 + }, + "ItemPriority": 11, + "ID": 352607 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352601.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352601.png", + "ItemName": { + "hash": 932827795, + "hash64": 8050540291341657004 + }, + "ItemPriority": 11, + "ID": 352701 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352602.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352602.png", + "ItemName": { + "hash": 932827794, + "hash64": 4854143464867617407 + }, + "ItemPriority": 11, + "ID": 352702 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352603.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352603.png", + "ItemName": { + "hash": 932827793, + "hash64": 6884354066394131306 + }, + "ItemPriority": 11, + "ID": 352703 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352604.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352604.png", + "ItemName": { + "hash": 932827792, + "hash64": 14413333149020592306 + }, + "ItemPriority": 11, + "ID": 352704 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352601.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352601.png", + "ItemName": { + "hash": 932827894, + "hash64": 7911677371790277505 + }, + "ItemPriority": 11, + "ID": 352801 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352602.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352602.png", + "ItemName": { + "hash": 932827895, + "hash64": 13012764084789568183 + }, + "ItemPriority": 11, + "ID": 352802 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352603.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352603.png", + "ItemName": { + "hash": 932827896, + "hash64": 12017522458174985746 + }, + "ItemPriority": 11, + "ID": 352803 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352604.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352604.png", + "ItemName": { + "hash": 932827897, + "hash64": 14907791427812329178 + }, + "ItemPriority": 11, + "ID": 352804 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352608.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352608.png", + "ItemName": { + "hash": 932827835, + "hash64": 4227615324172754148 + }, + "ItemPriority": 11, + "ID": 352608 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35051013.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35051013.png", + "ItemName": { + "hash": 732873757, + "hash64": 13466566190747925723 + }, + "ItemPriority": 3, + "ID": 35051013 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352608.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352608.png", + "ItemName": { + "hash": 932827861, + "hash64": 2551510969390062111 + }, + "ItemPriority": 9, + "ID": 352901 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352606.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352606.png", + "ItemName": { + "hash": 932827791, + "hash64": 16626270076516948239 + }, + "ItemPriority": 11, + "ID": 352705 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352606.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352606.png", + "ItemName": { + "hash": 932827790, + "hash64": 5706510313411474904 + }, + "ItemPriority": 11, + "ID": 352706 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35130999.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35130999.png", + "ItemName": { + "hash": -133789454, + "hash64": 2459975664580879564 + }, + "ItemPriority": 14, + "ID": 35130999 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100202.png", + "ItemName": { + "hash": -780736137, + "hash64": 5342458547742543703 + }, + "ItemPriority": 3, + "ID": 355100202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100102.png", + "ItemName": { + "hash": 523225778, + "hash64": 12828388011131461553 + }, + "ItemPriority": 3, + "ID": 355100102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100302.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100302.png", + "ItemName": { + "hash": -2084698052, + "hash64": 15356915327111398654 + }, + "ItemPriority": 3, + "ID": 355100302 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100902.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100902.png", + "ItemName": { + "hash": -606074230, + "hash64": 768619540039734392 + }, + "ItemPriority": 3, + "ID": 355100902 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355101002.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355101002.png", + "ItemName": { + "hash": 1827187724, + "hash64": 12585944437327196296 + }, + "ItemPriority": 3, + "ID": 355101002 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100802.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100802.png", + "ItemName": { + "hash": 697887685, + "hash64": 15829024771659489190 + }, + "ItemPriority": 3, + "ID": 355100802 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100402.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100402.png", + "ItemName": { + "hash": 1262537689, + "hash64": 3320471277641134978 + }, + "ItemPriority": 3, + "ID": 355100402 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100502.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100502.png", + "ItemName": { + "hash": -41424226, + "hash64": 7177490054060610967 + }, + "ItemPriority": 3, + "ID": 355100502 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355100602.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355100602.png", + "ItemName": { + "hash": -1345386141, + "hash64": 4295976723206835201 + }, + "ItemPriority": 3, + "ID": 355100602 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355101202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355101202.png", + "ItemName": { + "hash": -780736106, + "hash64": 14145742683654775610 + }, + "ItemPriority": 3, + "ID": 355101202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200102.png", + "ItemName": { + "hash": 523228979, + "hash64": 11460104370880240014 + }, + "ItemPriority": 3, + "ID": 355200102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200402.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200402.png", + "ItemName": { + "hash": 1262540890, + "hash64": 12414866917532997311 + }, + "ItemPriority": 3, + "ID": 355200402 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200802.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200802.png", + "ItemName": { + "hash": 697890886, + "hash64": 9421347126514391026 + }, + "ItemPriority": 3, + "ID": 355200802 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200302.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200302.png", + "ItemName": { + "hash": -2084694851, + "hash64": 794223368297653879 + }, + "ItemPriority": 3, + "ID": 355200302 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200602.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200602.png", + "ItemName": { + "hash": -1345382940, + "hash64": 15875650139095629038 + }, + "ItemPriority": 3, + "ID": 355200602 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200202.png", + "ItemName": { + "hash": -780732936, + "hash64": 17177326203969762914 + }, + "ItemPriority": 3, + "ID": 355200202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200502.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200502.png", + "ItemName": { + "hash": -41421025, + "hash64": 488717198981688340 + }, + "ItemPriority": 3, + "ID": 355200502 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200902.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200902.png", + "ItemName": { + "hash": -606071029, + "hash64": 15960797654778745652 + }, + "ItemPriority": 3, + "ID": 355200902 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355200702.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355200702.png", + "ItemName": { + "hash": 1645622441, + "hash64": 3314944177648735577 + }, + "ItemPriority": 3, + "ID": 355200702 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355201102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355201102.png", + "ItemName": { + "hash": 523229076, + "hash64": 16260410970939767847 + }, + "ItemPriority": 3, + "ID": 355201102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/355201002.png", + "IconPath": "SpriteOutput/GridFight/Equipment/355201002.png", + "ItemName": { + "hash": 1827190991, + "hash64": 14277694089675594836 + }, + "ItemPriority": 3, + "ID": 355201002 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350108.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350108.png", + "ItemName": { + "hash": -350931341, + "hash64": 5697441745545972991 + }, + "ItemPriority": 4, + "ID": 350110 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350110.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350110.png", + "ItemName": { + "hash": 1215152608, + "hash64": 10405641779598495007 + }, + "ItemPriority": 3, + "ID": 350108 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350111.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350111.png", + "ItemName": { + "hash": -350931342, + "hash64": 10365843206409714648 + }, + "ItemPriority": 4, + "ID": 350111 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030103.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030103.png", + "ItemName": { + "hash": 197617311, + "hash64": 52220769415969692 + }, + "ItemPriority": 2, + "ID": 47030103 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/47030105.png", + "IconPath": "SpriteOutput/GridFight/Equipment/47030105.png", + "ItemName": { + "hash": 197617313, + "hash64": 16277017809838115833 + }, + "ItemPriority": 2, + "ID": 47030105 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030106.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030106.png", + "ItemName": { + "hash": 197617314, + "hash64": 13274361694204367398 + }, + "ItemPriority": 2, + "ID": 47030106 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030202.png", + "ItemName": { + "hash": 197617341, + "hash64": 16586138761493901599 + }, + "ItemPriority": 2, + "ID": 47030202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030205.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030205.png", + "ItemName": { + "hash": 197617346, + "hash64": 14084261692303432834 + }, + "ItemPriority": 2, + "ID": 47030205 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030207.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030207.png", + "ItemName": { + "hash": 197617344, + "hash64": 2074041779395990987 + }, + "ItemPriority": 2, + "ID": 47030207 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030208.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030208.png", + "ItemName": { + "hash": 197617351, + "hash64": 13637268535782466059 + }, + "ItemPriority": 2, + "ID": 47030208 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030303.png", + "ItemName": { + "hash": 197617373, + "hash64": 207572041872265153 + }, + "ItemPriority": 2, + "ID": 47030303 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/47030306.png", + "IconPath": "SpriteOutput/GridFight/Equipment/47030306.png", + "ItemName": { + "hash": 197617376, + "hash64": 14446503467284828639 + }, + "ItemPriority": 2, + "ID": 47030306 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030307.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030307.png", + "ItemName": { + "hash": 197617377, + "hash64": 2125492042932954934 + }, + "ItemPriority": 2, + "ID": 47030307 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/47030406.png", + "IconPath": "SpriteOutput/GridFight/Equipment/47030406.png", + "ItemName": { + "hash": 197617407, + "hash64": 15512160187535593482 + }, + "ItemPriority": 2, + "ID": 47030406 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030408.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030408.png", + "ItemName": { + "hash": 197617417, + "hash64": 13517613531713601000 + }, + "ItemPriority": 2, + "ID": 47030408 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350110.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350110.png", + "ItemName": { + "hash": -350931339, + "hash64": 12594088925123657764 + }, + "ItemPriority": 1, + "ID": 350112 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350105.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350105.png", + "ItemName": { + "hash": -350931340, + "hash64": 179059722935891000 + }, + "ItemPriority": 3, + "ID": 350113 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350106.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350106.png", + "ItemName": { + "hash": -350931337, + "hash64": 5750081480161390818 + }, + "ItemPriority": 4, + "ID": 350114 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030103.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030103.png", + "ItemName": { + "hash": 197624928, + "hash64": 12923107418268247739 + }, + "ItemPriority": 5, + "ID": 47040103 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/47030105.png", + "IconPath": "SpriteOutput/GridFight/Equipment/47030105.png", + "ItemName": { + "hash": 197624926, + "hash64": 123421348184649824 + }, + "ItemPriority": 5, + "ID": 47040105 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030106.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030106.png", + "ItemName": { + "hash": 197624925, + "hash64": 18042207640204521339 + }, + "ItemPriority": 5, + "ID": 47040106 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030202.png", + "ItemName": { + "hash": 197624770, + "hash64": 9581327283880452996 + }, + "ItemPriority": 5, + "ID": 47040202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030205.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030205.png", + "ItemName": { + "hash": 197624765, + "hash64": 962324544281451194 + }, + "ItemPriority": 5, + "ID": 47040205 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030207.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030207.png", + "ItemName": { + "hash": 197624767, + "hash64": 4936248076896288604 + }, + "ItemPriority": 5, + "ID": 47040207 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030208.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030208.png", + "ItemName": { + "hash": 197624776, + "hash64": 270978890171256143 + }, + "ItemPriority": 5, + "ID": 47040208 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030303.png", + "ItemName": { + "hash": 197624866, + "hash64": 1995404872339759056 + }, + "ItemPriority": 5, + "ID": 47040303 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/47030306.png", + "IconPath": "SpriteOutput/GridFight/Equipment/47030306.png", + "ItemName": { + "hash": 197624863, + "hash64": 6385326854357829228 + }, + "ItemPriority": 5, + "ID": 47040306 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030307.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030307.png", + "ItemName": { + "hash": 197624862, + "hash64": 12813644550264163082 + }, + "ItemPriority": 5, + "ID": 47040307 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/47030406.png", + "IconPath": "SpriteOutput/GridFight/Equipment/47030406.png", + "ItemName": { + "hash": 197624704, + "hash64": 1405887433974485888 + }, + "ItemPriority": 5, + "ID": 47040406 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030408.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030408.png", + "ItemName": { + "hash": 197624710, + "hash64": 9666492789651530600 + }, + "ItemPriority": 5, + "ID": 47040408 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030202.png", + "ItemName": { + "hash": -2058177751, + "hash64": 15341129743748733903 + }, + "ItemPriority": 15, + "ID": 353001 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030303.png", + "ItemName": { + "hash": -2058177750, + "hash64": 15490906555394979523 + }, + "ItemPriority": 15, + "ID": 353002 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030101.png", + "ItemName": { + "hash": -2058177749, + "hash64": 18038293179259433060 + }, + "ItemPriority": 15, + "ID": 353003 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350101.png", + "ItemName": { + "hash": -350931338, + "hash64": 9449495376850005861 + }, + "ItemPriority": 1, + "ID": 350115 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350103.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350103.png", + "ItemName": { + "hash": -350931335, + "hash64": 12377436243276927602 + }, + "ItemPriority": 1, + "ID": 350116 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350104.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350104.png", + "ItemName": { + "hash": -350931336, + "hash64": 10749059222834304282 + }, + "ItemPriority": 4, + "ID": 350117 + }, + { + "SmallIconPath": "", + "IconPath": "SpriteOutput/GridFight/GridItem/99989.png", + "ItemName": { + "hash": 575915161, + "hash64": 12417528780555923556 + }, + "ItemPriority": 3, + "ID": 99989 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030108_S2.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030108_S2.png", + "ItemName": { + "hash": 197617316, + "hash64": 17794236274440595515 + }, + "ItemPriority": 2, + "ID": 47030108 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030108_S2.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030108_S2.png", + "ItemName": { + "hash": 197624939, + "hash64": 4561656666260447802 + }, + "ItemPriority": 5, + "ID": 47040108 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350118.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350118.png", + "ItemName": { + "hash": -350931333, + "hash64": 14842252627364900336 + }, + "ItemPriority": 3, + "ID": 350118 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/350119.png", + "IconPath": "SpriteOutput/GridFight/Equipment/350119.png", + "ItemName": { + "hash": -350931334, + "hash64": 10578343404104237382 + }, + "ItemPriority": 4, + "ID": 350119 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353101.png", + "ItemName": { + "hash": -2058177784, + "hash64": 359098350706560386 + }, + "ItemPriority": 12, + "ID": 353101 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353102.png", + "ItemName": { + "hash": -2058177781, + "hash64": 1467740147326759613 + }, + "ItemPriority": 12, + "ID": 353102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353103.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353103.png", + "ItemName": { + "hash": -2058177782, + "hash64": 11289015632905635173 + }, + "ItemPriority": 12, + "ID": 353103 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353104.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353104.png", + "ItemName": { + "hash": -2058177779, + "hash64": 12063294671190506339 + }, + "ItemPriority": 12, + "ID": 353104 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353105.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353105.png", + "ItemName": { + "hash": -2058177780, + "hash64": 11588022838048628233 + }, + "ItemPriority": 12, + "ID": 353105 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353106.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353106.png", + "ItemName": { + "hash": -2058177777, + "hash64": 7290152836612514777 + }, + "ItemPriority": 12, + "ID": 353106 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030101.png", + "ItemName": { + "hash": 197617309, + "hash64": 12028523353620652237 + }, + "ItemPriority": 2, + "ID": 47030101 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030102.png", + "ItemName": { + "hash": 197617310, + "hash64": 3606656931827352750 + }, + "ItemPriority": 2, + "ID": 47030102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030508.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030508.png", + "ItemName": { + "hash": 197617448, + "hash64": 8289076936657566800 + }, + "ItemPriority": 2, + "ID": 47030508 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030101.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030101.png", + "ItemName": { + "hash": 197624930, + "hash64": 17926930113661441101 + }, + "ItemPriority": 5, + "ID": 47040101 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030102.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030102.png", + "ItemName": { + "hash": 197624929, + "hash64": 8109329787144772837 + }, + "ItemPriority": 5, + "ID": 47040102 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/35030508.png", + "IconPath": "SpriteOutput/GridFight/Equipment/35030508.png", + "ItemName": { + "hash": 197624807, + "hash64": 11855949691153844553 + }, + "ItemPriority": 5, + "ID": 47040508 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353004.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353004.png", + "ItemName": { + "hash": -2058177748, + "hash64": 5601139095888508024 + }, + "ItemPriority": 15, + "ID": 353004 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353005.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353005.png", + "ItemName": { + "hash": -2058177747, + "hash64": 665200847433705588 + }, + "ItemPriority": 9, + "ID": 353005 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353201.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353201.png", + "ItemName": { + "hash": -2058177685, + "hash64": 9588849495385705384 + }, + "ItemPriority": 13, + "ID": 353201 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353202.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353202.png", + "ItemName": { + "hash": -2058177688, + "hash64": 15845504264808245736 + }, + "ItemPriority": 13, + "ID": 353202 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353203.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353203.png", + "ItemName": { + "hash": -2058177687, + "hash64": 6208148106203525429 + }, + "ItemPriority": 13, + "ID": 353203 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353204.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353204.png", + "ItemName": { + "hash": -2058177682, + "hash64": 196475313625589953 + }, + "ItemPriority": 13, + "ID": 353204 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353205.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353205.png", + "ItemName": { + "hash": -2058177681, + "hash64": 7977342302813215441 + }, + "ItemPriority": 13, + "ID": 353205 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353206.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353206.png", + "ItemName": { + "hash": -2058177684, + "hash64": 3617575743114347840 + }, + "ItemPriority": 13, + "ID": 353206 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352301.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352301.png", + "ItemName": { + "hash": -2058177718, + "hash64": 17408039490472393328 + }, + "ItemPriority": 10, + "ID": 353301 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352302.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352302.png", + "ItemName": { + "hash": -2058177719, + "hash64": 12286889492754211123 + }, + "ItemPriority": 10, + "ID": 353302 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352303.png", + "ItemName": { + "hash": -2058177720, + "hash64": 5675495973699551292 + }, + "ItemPriority": 10, + "ID": 353303 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352405.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352405.png", + "ItemName": { + "hash": -2058177713, + "hash64": 542710603403589245 + }, + "ItemPriority": 10, + "ID": 353304 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352301.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352301.png", + "ItemName": { + "hash": -2058177619, + "hash64": 3402958726884489268 + }, + "ItemPriority": 10, + "ID": 353401 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352302.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352302.png", + "ItemName": { + "hash": -2058177618, + "hash64": 7304399446421794776 + }, + "ItemPriority": 10, + "ID": 353402 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352303.png", + "ItemName": { + "hash": -2058177617, + "hash64": 13100189406579516054 + }, + "ItemPriority": 10, + "ID": 353403 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352405.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352405.png", + "ItemName": { + "hash": -2058177624, + "hash64": 805813080216641657 + }, + "ItemPriority": 10, + "ID": 353404 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352301.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352301.png", + "ItemName": { + "hash": -2058177652, + "hash64": 6986123815783198720 + }, + "ItemPriority": 10, + "ID": 353501 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352302.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352302.png", + "ItemName": { + "hash": -2058177649, + "hash64": 9750372869872375110 + }, + "ItemPriority": 10, + "ID": 353502 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352303.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352303.png", + "ItemName": { + "hash": -2058177650, + "hash64": 7533852549872235265 + }, + "ItemPriority": 10, + "ID": 353503 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352405.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352405.png", + "ItemName": { + "hash": -2058177655, + "hash64": 12283317667634223334 + }, + "ItemPriority": 10, + "ID": 353504 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352507.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352507.png", + "ItemName": { + "hash": -2058177553, + "hash64": 7775182342001541702 + }, + "ItemPriority": 10, + "ID": 353601 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352304.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352304.png", + "ItemName": { + "hash": -2058177623, + "hash64": 13446106523305044192 + }, + "ItemPriority": 10, + "ID": 353405 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352402.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352402.png", + "ItemName": { + "hash": -2058177622, + "hash64": 184719678160728382 + }, + "ItemPriority": 10, + "ID": 353406 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353407.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353407.png", + "ItemName": { + "hash": -2058177621, + "hash64": 16182506125473063627 + }, + "ItemPriority": 10, + "ID": 353407 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352404.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352404.png", + "ItemName": { + "hash": -2058177612, + "hash64": 3508933061458667965 + }, + "ItemPriority": 10, + "ID": 353408 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352304.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352304.png", + "ItemName": { + "hash": -2058177656, + "hash64": 9117004947787079624 + }, + "ItemPriority": 10, + "ID": 353505 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352402.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352402.png", + "ItemName": { + "hash": -2058177653, + "hash64": 13135008979598711562 + }, + "ItemPriority": 10, + "ID": 353506 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353407.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353407.png", + "ItemName": { + "hash": -2058177654, + "hash64": 3512792558586426727 + }, + "ItemPriority": 10, + "ID": 353507 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/352404.png", + "IconPath": "SpriteOutput/GridFight/Equipment/352404.png", + "ItemName": { + "hash": -2058177643, + "hash64": 3082276767565843225 + }, + "ItemPriority": 10, + "ID": 353508 + }, + { + "SmallIconPath": "SpriteOutput/GridFight/EquipmentSmall/353006.png", + "IconPath": "SpriteOutput/GridFight/Equipment/353006.png", + "ItemName": { + "hash": -2058177746, + "hash64": 11186777168239216373 + }, + "ItemPriority": 15, + "ID": 353006 + } + ], + "combination": [ + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 201 + ], + "BonusID": 11001 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 203 + ], + "BonusID": 11002 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 201 + ], + "BonusID": 11003 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 203 + ], + "BonusID": 11004 + }, + { + "BonusNumberList": [ + 60000, + 10000 + ], + "CombinationBonusList": [ + 1, + 201 + ], + "BonusID": 11005 + }, + { + "BonusNumberList": [ + 60000, + 10000 + ], + "CombinationBonusList": [ + 1, + 203 + ], + "BonusID": 11006 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 103 + ], + "BonusID": 11007 + }, + { + "BonusNumberList": [ + 10000, + 20000 + ], + "CombinationBonusList": [ + 205, + 102 + ], + "BonusID": 11008 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 206, + 103 + ], + "BonusID": 11009 + }, + { + "BonusNumberList": [ + 80000, + 10000 + ], + "CombinationBonusList": [ + 1, + 201 + ], + "BonusID": 11010 + }, + { + "BonusNumberList": [ + 80000, + 10000 + ], + "CombinationBonusList": [ + 1, + 203 + ], + "BonusID": 11011 + }, + { + "BonusNumberList": [ + 40000, + 10000 + ], + "CombinationBonusList": [ + 1, + 104 + ], + "BonusID": 11012 + }, + { + "BonusNumberList": [ + 20000, + 20000 + ], + "CombinationBonusList": [ + 1, + 103 + ], + "BonusID": 11013 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11014 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 350602, + 203 + ], + "BonusID": 11015 + }, + { + "BonusNumberList": [ + 50000, + 10000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11016 + }, + { + "BonusNumberList": [ + 20000, + 20000 + ], + "CombinationBonusList": [ + 1, + 104 + ], + "BonusID": 11017 + }, + { + "BonusNumberList": [ + 30000, + 30000 + ], + "CombinationBonusList": [ + 1, + 103 + ], + "BonusID": 11018 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 35030404 + ], + "BonusID": 11019 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 206, + 205 + ], + "BonusID": 11020 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 108 + ], + "BonusID": 11021 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 101 + ], + "BonusID": 11900 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 101, + 103 + ], + "BonusID": 11901 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 102 + ], + "BonusID": 11902 + }, + { + "BonusNumberList": [ + 30000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 61001 + }, + { + "BonusNumberList": [ + 30000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 20012, + 11900 + ], + "BonusID": 90000 + }, + { + "BonusNumberList": [ + 50000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 90001 + }, + { + "BonusNumberList": [ + 100000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 90002 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 90101 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 90102 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 90103 + }, + { + "BonusNumberList": [ + 60000, + 20000, + 10000, + 11000, + 10000, + 1000, + 6600 + ], + "CombinationBonusList": [ + 1, + 20019, + 336, + 333, + 335, + 364, + 303 + ], + "BonusID": 90201 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 13000, + 12000, + 1000, + 6700 + ], + "CombinationBonusList": [ + 1, + 335, + 20020, + 337, + 333, + 364, + 303 + ], + "BonusID": 90202 + }, + { + "BonusNumberList": [ + 100000, + 10000, + 6000, + 20000, + 5000, + 1500, + 6700 + ], + "CombinationBonusList": [ + 1, + 120031, + 333, + 341, + 333, + 365, + 303 + ], + "BonusID": 90203 + }, + { + "BonusNumberList": [ + 10000, + 11000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 302, + 333, + 334, + 303 + ], + "BonusID": 90301 + }, + { + "BonusNumberList": [ + 10000, + 11000, + 10000, + 1200 + ], + "CombinationBonusList": [ + 302, + 333, + 334, + 363 + ], + "BonusID": 90302 + }, + { + "BonusNumberList": [ + 100000, + 20000 + ], + "CombinationBonusList": [ + 1, + 104 + ], + "BonusID": 11022 + }, + { + "BonusNumberList": [ + 130000, + 10000 + ], + "CombinationBonusList": [ + 1, + 105 + ], + "BonusID": 11023 + }, + { + "BonusNumberList": [ + 20000, + 20000 + ], + "CombinationBonusList": [ + 1, + 207 + ], + "BonusID": 11024 + }, + { + "BonusNumberList": [ + 40000, + 10000 + ], + "CombinationBonusList": [ + 1, + 208 + ], + "BonusID": 11025 + }, + { + "BonusNumberList": [ + 40000, + 10000 + ], + "CombinationBonusList": [ + 1, + 35030404 + ], + "BonusID": 11026 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 207, + 203 + ], + "BonusID": 11027 + }, + { + "BonusNumberList": [ + 80000, + 10000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11028 + }, + { + "BonusNumberList": [ + 70000, + 10000 + ], + "CombinationBonusList": [ + 1, + 110 + ], + "BonusID": 11029 + }, + { + "BonusNumberList": [ + 100000, + 20000 + ], + "CombinationBonusList": [ + 1, + 104 + ], + "BonusID": 11030 + }, + { + "BonusNumberList": [ + 30000, + 20000 + ], + "CombinationBonusList": [ + 1, + 207 + ], + "BonusID": 11031 + }, + { + "BonusNumberList": [ + 120000, + 10000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11032 + }, + { + "BonusNumberList": [ + 30000, + 30000 + ], + "CombinationBonusList": [ + 1, + 205 + ], + "BonusID": 11033 + }, + { + "BonusNumberList": [ + 10000, + 20000 + ], + "CombinationBonusList": [ + 104, + 207 + ], + "BonusID": 11034 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 208 + ], + "BonusID": 11035 + }, + { + "BonusNumberList": [ + 50000, + 10000 + ], + "CombinationBonusList": [ + 1, + 208 + ], + "BonusID": 11036 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 204 + ], + "BonusID": 11037 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 30000 + ], + "BonusID": 11038 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 102 + ], + "BonusID": 11039 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1220, + 350201, + 1305, + 101 + ], + "BonusID": 40001 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1409, + 350205, + 1507, + 101 + ], + "BonusID": 40002 + }, + { + "BonusNumberList": [ + 60000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1402, + 350208, + 1217, + 101 + ], + "BonusID": 40003 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1001, + 1510, + 350204, + 101 + ], + "BonusID": 40004 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1009, + 1303, + 350208, + 101 + ], + "BonusID": 40005 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1105, + 1102, + 350206, + 101 + ], + "BonusID": 40006 + }, + { + "BonusNumberList": [ + 30000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1302, + 1305, + 350207, + 101 + ], + "BonusID": 40007 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1213, + 1217, + 350202, + 101 + ], + "BonusID": 40008 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1218, + 1222, + 350205, + 101 + ], + "BonusID": 40009 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1402, + 1403, + 350201, + 101 + ], + "BonusID": 40010 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1406, + 1412, + 350203, + 101 + ], + "BonusID": 40011 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1317, + 1225, + 350207, + 101 + ], + "BonusID": 40012 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1013, + 1405, + 350204, + 101 + ], + "BonusID": 40013 + }, + { + "BonusNumberList": [ + 30000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1507, + 1308, + 350203, + 101 + ], + "BonusID": 40014 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 1013, + 1403, + 1304 + ], + "BonusID": 40015 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 1013, + 1403 + ], + "BonusID": 40016 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 207 + ], + "BonusID": 40017 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 40018 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 40019 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 40020 + }, + { + "BonusNumberList": [ + 30000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23001 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 101, + 1 + ], + "BonusID": 23002 + }, + { + "BonusNumberList": [ + 10000, + 40000 + ], + "CombinationBonusList": [ + 205, + 2 + ], + "BonusID": 23003 + }, + { + "BonusNumberList": [ + 10000, + 50000 + ], + "CombinationBonusList": [ + 1401, + 1 + ], + "BonusID": 23004 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 207 + ], + "BonusID": 23005 + }, + { + "BonusNumberList": [ + 240000 + ], + "CombinationBonusList": [ + 3 + ], + "BonusID": 23006 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 35030404, + 227 + ], + "BonusID": 23007 + }, + { + "BonusNumberList": [ + 10000, + 120000 + ], + "CombinationBonusList": [ + 350701, + 1 + ], + "BonusID": 23008 + }, + { + "BonusNumberList": [ + 60000, + 20000 + ], + "CombinationBonusList": [ + 204, + 35040404 + ], + "BonusID": 23009 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123001 + ], + "BonusID": 23031 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 123002, + 120030 + ], + "BonusID": 23032 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123003 + ], + "BonusID": 23033 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123004 + ], + "BonusID": 23034 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123005 + ], + "BonusID": 23035 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123006 + ], + "BonusID": 23036 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123007 + ], + "BonusID": 23037 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123008 + ], + "BonusID": 23038 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123009 + ], + "BonusID": 23039 + }, + { + "BonusNumberList": [ + 30000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23101 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 210 + ], + "BonusID": 23102 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 205, + 21041 + ], + "BonusID": 23103 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 207 + ], + "BonusID": 23104 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 21028 + ], + "BonusID": 23105 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 212, + 203 + ], + "BonusID": 23106 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 204 + ], + "BonusID": 23107 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 350701 + ], + "BonusID": 23108 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 211415, + 211112, + 211015, + 211307, + 211221 + ], + "BonusID": 23109 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123101 + ], + "BonusID": 23131 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123102 + ], + "BonusID": 23132 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123103 + ], + "BonusID": 23133 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123104 + ], + "BonusID": 23134 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123105 + ], + "BonusID": 23135 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123106 + ], + "BonusID": 23136 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123107 + ], + "BonusID": 23137 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123108 + ], + "BonusID": 23138 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123111 + ], + "BonusID": 23139 + }, + { + "BonusNumberList": [ + 80000, + 20000, + 10000, + 2000, + 20000, + 1200, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 20019, + 336, + 368, + 333, + 364, + 303, + 304 + ], + "BonusID": 90211 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 2000, + 10000, + 1200, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 335, + 20020, + 369, + 335, + 364, + 303, + 304 + ], + "BonusID": 90212 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 10000, + 2000, + 1800, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 362, + 335, + 341, + 369, + 365, + 303, + 304 + ], + "BonusID": 90213 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 333, + 334 + ], + "BonusID": 90311 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000, + 2500, + 10000 + ], + "CombinationBonusList": [ + 1, + 333, + 334, + 363, + 304 + ], + "BonusID": 90312 + }, + { + "BonusNumberList": [ + 4500 + ], + "CombinationBonusList": [ + 2 + ], + "BonusID": 24000 + }, + { + "BonusNumberList": [ + 100000, + 20000 + ], + "CombinationBonusList": [ + 1, + 211 + ], + "BonusID": 11040 + }, + { + "BonusNumberList": [ + 200000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 204, + 30000 + ], + "BonusID": 11041 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 30000 + ], + "CombinationBonusList": [ + 1, + 204, + 207 + ], + "BonusID": 11042 + }, + { + "BonusNumberList": [ + 150000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 227, + 226, + 30000 + ], + "BonusID": 11043 + }, + { + "BonusNumberList": [ + 40000, + 40000, + 40000 + ], + "CombinationBonusList": [ + 1, + 205, + 103 + ], + "BonusID": 11044 + }, + { + "BonusNumberList": [ + 100000, + 20000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11045 + }, + { + "BonusNumberList": [ + 100000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 350602, + 350601 + ], + "BonusID": 11046 + }, + { + "BonusNumberList": [ + 100000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 217, + 203, + 207 + ], + "BonusID": 11047 + }, + { + "BonusNumberList": [ + 250000, + 20000 + ], + "CombinationBonusList": [ + 1, + 211 + ], + "BonusID": 11048 + }, + { + "BonusNumberList": [ + 300000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 204, + 30000 + ], + "BonusID": 11049 + }, + { + "BonusNumberList": [ + 120000, + 10000, + 40000 + ], + "CombinationBonusList": [ + 1, + 204, + 207 + ], + "BonusID": 11050 + }, + { + "BonusNumberList": [ + 200000, + 40000 + ], + "CombinationBonusList": [ + 1, + 227 + ], + "BonusID": 11051 + }, + { + "BonusNumberList": [ + 160000, + 10000, + 40000 + ], + "CombinationBonusList": [ + 1, + 206, + 104 + ], + "BonusID": 11052 + }, + { + "BonusNumberList": [ + 250000, + 20000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11053 + }, + { + "BonusNumberList": [ + 100000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 350602, + 350601, + 30000 + ], + "BonusID": 11054 + }, + { + "BonusNumberList": [ + 50000, + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 228, + 203 + ], + "BonusID": 11055 + }, + { + "BonusNumberList": [ + 200000, + 10000 + ], + "CombinationBonusList": [ + 1, + 113 + ], + "BonusID": 11056 + }, + { + "BonusNumberList": [ + 120000, + 20000 + ], + "CombinationBonusList": [ + 1, + 110 + ], + "BonusID": 11057 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 92101 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 92102 + }, + { + "BonusNumberList": [ + 50000, + 20000, + 10000, + 10000, + 8000, + 1500, + 10000 + ], + "CombinationBonusList": [ + 1, + 20019, + 336, + 335, + 333, + 364, + 303 + ], + "BonusID": 92201 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 13000, + 5000, + 1500, + 10000 + ], + "CombinationBonusList": [ + 1, + 335, + 20020, + 337, + 333, + 364, + 303 + ], + "BonusID": 92202 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 6000, + 20000, + 6000, + 2000, + 10000 + ], + "CombinationBonusList": [ + 1, + 362, + 333, + 341, + 333, + 365, + 303 + ], + "BonusID": 92203 + }, + { + "BonusNumberList": [ + 30000, + 20000, + 20000, + 10000, + 1500 + ], + "CombinationBonusList": [ + 302, + 333, + 334, + 303, + 363 + ], + "BonusID": 92301 + }, + { + "BonusNumberList": [ + 60000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 40021 + }, + { + "BonusNumberList": [ + 80000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 40022 + }, + { + "BonusNumberList": [ + 120000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 40023 + }, + { + "BonusNumberList": [ + 80000, + 20000, + 10000, + 2000, + 20000, + 1500, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 20019, + 336, + 368, + 333, + 364, + 303, + 304 + ], + "BonusID": 90221 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 2000, + 10000, + 1500, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 335, + 20020, + 369, + 335, + 364, + 303, + 304 + ], + "BonusID": 90222 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 10000, + 2000, + 2000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 362, + 335, + 341, + 369, + 365, + 303, + 304 + ], + "BonusID": 90223 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1314, + 1304 + ], + "BonusID": 40024 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1108, + 1005 + ], + "BonusID": 40025 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1306, + 1213 + ], + "BonusID": 40026 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1504, + 1406 + ], + "BonusID": 98001 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1220, + 1406 + ], + "BonusID": 98002 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1304, + 1314 + ], + "BonusID": 98003 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1309 + ], + "BonusID": 98004 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1302 + ], + "BonusID": 98005 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 302, + 198001, + 198002, + 198003, + 198004, + 198005 + ], + "BonusID": 99001 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 333, + 334 + ], + "BonusID": 90321 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000, + 2500, + 10000 + ], + "CombinationBonusList": [ + 1, + 333, + 334, + 363, + 304 + ], + "BonusID": 90322 + }, + { + "BonusNumberList": [ + 60000, + 20000, + 10000, + 11000, + 10000, + 1000, + 6600, + 10000 + ], + "CombinationBonusList": [ + 1, + 20019, + 336, + 333, + 335, + 364, + 303, + 304 + ], + "BonusID": 90204 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 13000, + 12000, + 1000, + 6700, + 10000 + ], + "CombinationBonusList": [ + 1, + 335, + 20020, + 337, + 333, + 364, + 303, + 304 + ], + "BonusID": 90205 + }, + { + "BonusNumberList": [ + 100000, + 10000, + 6000, + 20000, + 5000, + 1500, + 6700, + 10000 + ], + "CombinationBonusList": [ + 1, + 120031, + 333, + 341, + 333, + 365, + 303, + 304 + ], + "BonusID": 90206 + }, + { + "BonusNumberList": [ + 10000, + 11000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 302, + 333, + 334, + 303 + ], + "BonusID": 90303 + }, + { + "BonusNumberList": [ + 10000, + 11000, + 10000, + 1200, + 10000 + ], + "CombinationBonusList": [ + 302, + 333, + 334, + 363, + 304 + ], + "BonusID": 90304 + }, + { + "BonusNumberList": [ + 50000, + 20000, + 10000, + 10000, + 8000, + 1500, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 20019, + 336, + 335, + 333, + 364, + 303, + 304 + ], + "BonusID": 92204 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 13000, + 5000, + 1500, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 335, + 20020, + 337, + 333, + 364, + 303, + 304 + ], + "BonusID": 92205 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 6000, + 20000, + 6000, + 2000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 362, + 333, + 341, + 333, + 365, + 303, + 304 + ], + "BonusID": 92206 + }, + { + "BonusNumberList": [ + 30000, + 20000, + 20000, + 10000, + 1500, + 10000 + ], + "CombinationBonusList": [ + 302, + 333, + 334, + 303, + 363, + 304 + ], + "BonusID": 92302 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 198006, + 198007, + 198008, + 198009 + ], + "BonusID": 99002 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 198010, + 198011, + 198012, + 198013 + ], + "BonusID": 99003 + }, + { + "BonusNumberList": [ + 150000, + 10000, + 20000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 305, + 337, + 198017, + 198018 + ], + "BonusID": 99004 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1013, + 1303 + ], + "BonusID": 98006 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1314 + ], + "BonusID": 98007 + }, + { + "BonusNumberList": [ + 30000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 98008 + }, + { + "BonusNumberList": [ + 30000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 98009 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1013 + ], + "BonusID": 98010 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 198019 + ], + "BonusID": 99005 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 1108 + ], + "BonusID": 98011 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1403, + 1404 + ], + "BonusID": 98012 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 350201 + ], + "BonusID": 98013 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 202 + ], + "BonusID": 98014 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 211004, + 211310, + 211204, + 211101 + ], + "BonusID": 23110 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 23109, + 23110 + ], + "BonusID": 23111 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 350202 + ], + "BonusID": 98015 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 207 + ], + "BonusID": 98016 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 207 + ], + "BonusID": 98017 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 350202 + ], + "BonusID": 98018 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 350208, + 1401, + 1405 + ], + "BonusID": 98019 + }, + { + "BonusNumberList": [ + 720000, + 200000 + ], + "CombinationBonusList": [ + 3, + 1 + ], + "BonusID": 98020 + }, + { + "BonusNumberList": [ + 60000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 200033, + 336, + 200030, + 101413 + ], + "BonusID": 99007 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 35030407, + 35030203 + ], + "BonusID": 11058 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000, + 13000, + 12000, + 10000 + ], + "CombinationBonusList": [ + 1, + 335, + 20020, + 337, + 333, + 303 + ], + "BonusID": 99008 + }, + { + "BonusNumberList": [ + 100000, + 10000, + 6000, + 20000, + 6000, + 10000 + ], + "CombinationBonusList": [ + 1, + 362, + 333, + 341, + 333, + 200012 + ], + "BonusID": 99009 + }, + { + "BonusNumberList": [ + 600000, + 600000 + ], + "CombinationBonusList": [ + 1, + 3 + ], + "BonusID": 11059 + }, + { + "BonusNumberList": [ + 60000, + 60000 + ], + "CombinationBonusList": [ + 35051011, + 35051012 + ], + "BonusID": 11060 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 311402, + 311403, + 311404, + 311405, + 311406, + 311407, + 311408, + 311409 + ], + "BonusID": 11061 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 311410, + 311412, + 311413, + 311414, + 318007 + ], + "BonusID": 11062 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 11061, + 11062 + ], + "BonusID": 11063 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 350601, + 350602 + ], + "BonusID": 11064 + }, + { + "BonusNumberList": [ + 10000, + 600000 + ], + "CombinationBonusList": [ + 350701, + 1 + ], + "BonusID": 11065 + }, + { + "BonusNumberList": [ + 10000, + 20000, + 100000 + ], + "CombinationBonusList": [ + 350701, + 35030404, + 1 + ], + "BonusID": 11066 + }, + { + "BonusNumberList": [ + 10000, + 20000, + 100000 + ], + "CombinationBonusList": [ + 350701, + 350107, + 1 + ], + "BonusID": 11067 + }, + { + "BonusNumberList": [ + 10000, + 30000, + 20000 + ], + "CombinationBonusList": [ + 350701, + 228, + 203 + ], + "BonusID": 11068 + }, + { + "BonusNumberList": [ + 10000, + 60000, + 20000 + ], + "CombinationBonusList": [ + 350701, + 205, + 208 + ], + "BonusID": 11069 + }, + { + "BonusNumberList": [ + 20000, + 60000, + 20000 + ], + "CombinationBonusList": [ + 206, + 227, + 35030404 + ], + "BonusID": 11070 + }, + { + "BonusNumberList": [ + 10000, + 250000, + 200000 + ], + "CombinationBonusList": [ + 350701, + 2, + 1 + ], + "BonusID": 11071 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1306, + 1213, + 350202, + 101 + ], + "BonusID": 40027 + }, + { + "BonusNumberList": [ + 10000, + 200000 + ], + "CombinationBonusList": [ + 350701, + 1 + ], + "BonusID": 11072 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 50000 + ], + "CombinationBonusList": [ + 350701, + 35030404, + 1 + ], + "BonusID": 11073 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 50000 + ], + "CombinationBonusList": [ + 350701, + 350107, + 1 + ], + "BonusID": 11074 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 350701, + 228, + 203 + ], + "BonusID": 11075 + }, + { + "BonusNumberList": [ + 10000, + 30000 + ], + "CombinationBonusList": [ + 350701, + 205 + ], + "BonusID": 11076 + }, + { + "BonusNumberList": [ + 10000, + 20000, + 10000, + 50000 + ], + "CombinationBonusList": [ + 206, + 227, + 35030404, + 1 + ], + "BonusID": 11077 + }, + { + "BonusNumberList": [ + 10000, + 100000, + 100000 + ], + "CombinationBonusList": [ + 350701, + 2, + 1 + ], + "BonusID": 11078 + }, + { + "BonusNumberList": [ + 30000, + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 103, + 30000 + ], + "BonusID": 40028 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 301310, + 301005, + 301507, + 301006 + ], + "BonusID": 11079 + }, + { + "BonusNumberList": [ + 90000, + 10000 + ], + "CombinationBonusList": [ + 204, + 202 + ], + "BonusID": 11080 + }, + { + "BonusNumberList": [ + 30000, + 990000 + ], + "CombinationBonusList": [ + 228, + 203 + ], + "BonusID": 11081 + }, + { + "BonusNumberList": [ + 30000, + 9990000 + ], + "CombinationBonusList": [ + 350701, + 3 + ], + "BonusID": 11082 + }, + { + "BonusNumberList": [ + 30000, + 30000 + ], + "CombinationBonusList": [ + 350602, + 350601 + ], + "BonusID": 11083 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 205 + ], + "BonusID": 23140 + }, + { + "BonusNumberList": [ + 720000 + ], + "CombinationBonusList": [ + 3 + ], + "BonusID": 23141 + }, + { + "BonusNumberList": [ + 40000 + ], + "CombinationBonusList": [ + 35051013 + ], + "BonusID": 23142 + }, + { + "BonusNumberList": [ + 90000 + ], + "CombinationBonusList": [ + 200005 + ], + "BonusID": 23143 + }, + { + "BonusNumberList": [ + 1000000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23144 + }, + { + "BonusNumberList": [ + 80000 + ], + "CombinationBonusList": [ + 231 + ], + "BonusID": 23145 + }, + { + "BonusNumberList": [ + 40000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 11903 + }, + { + "BonusNumberList": [ + 400000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23146 + }, + { + "BonusNumberList": [ + 750000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23147 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 206 + ], + "BonusID": 23148 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 350701 + ], + "BonusID": 23149 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 206 + ], + "BonusID": 23150 + }, + { + "BonusNumberList": [ + 80000, + 80000, + 40000 + ], + "CombinationBonusList": [ + 1, + 1, + 2 + ], + "BonusID": 11084 + }, + { + "BonusNumberList": [ + 80000, + 40000, + 10000 + ], + "CombinationBonusList": [ + 1, + 2, + 30000 + ], + "BonusID": 11085 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 30000, + 30000 + ], + "BonusID": 11086 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 2, + 30000, + 30000 + ], + "BonusID": 11087 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 21058, + 21059 + ], + "BonusID": 11088 + }, + { + "BonusNumberList": [ + 30000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23151 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 101, + 102, + 103 + ], + "BonusID": 23152 + }, + { + "BonusNumberList": [ + 10000, + 30000, + 10000 + ], + "CombinationBonusList": [ + 104, + 1, + 203 + ], + "BonusID": 23153 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 207, + 205 + ], + "BonusID": 23154 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 21060 + ], + "BonusID": 23155 + }, + { + "BonusNumberList": [ + 10000, + 80000, + 10000 + ], + "CombinationBonusList": [ + 233, + 247, + 212 + ], + "BonusID": 23156 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 204, + 350107, + 203 + ], + "BonusID": 23157 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 350701 + ], + "BonusID": 23158 + }, + { + "BonusNumberList": [ + 300000, + 10000 + ], + "CombinationBonusList": [ + 1, + 209 + ], + "BonusID": 23159 + }, + { + "BonusNumberList": [ + 990000, + 30000 + ], + "CombinationBonusList": [ + 1, + 1511 + ], + "BonusID": 23160 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123151 + ], + "BonusID": 23161 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123152 + ], + "BonusID": 23162 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123153 + ], + "BonusID": 23163 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123154 + ], + "BonusID": 23164 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123155 + ], + "BonusID": 23165 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123156 + ], + "BonusID": 23166 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123157 + ], + "BonusID": 23167 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123158 + ], + "BonusID": 23168 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123159 + ], + "BonusID": 23169 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 123160 + ], + "BonusID": 23170 + }, + { + "BonusNumberList": [ + 300000 + ], + "CombinationBonusList": [ + 350109 + ], + "BonusID": 11904 + }, + { + "BonusNumberList": [ + 600000 + ], + "CombinationBonusList": [ + 350109 + ], + "BonusID": 11905 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 30000 + ], + "CombinationBonusList": [ + 101, + 102, + 103 + ], + "BonusID": 11089 + }, + { + "BonusNumberList": [ + 20000, + 20000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 101, + 102, + 103, + 106 + ], + "BonusID": 11090 + }, + { + "BonusNumberList": [ + 20000, + 20000, + 20000 + ], + "CombinationBonusList": [ + 101, + 102, + 103 + ], + "BonusID": 11091 + }, + { + "BonusNumberList": [ + 30000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 101, + 106, + 103 + ], + "BonusID": 11092 + }, + { + "BonusNumberList": [ + 20000, + 20000, + 20000 + ], + "CombinationBonusList": [ + 101, + 102, + 103 + ], + "BonusID": 11093 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 101, + 102, + 103, + 106 + ], + "BonusID": 11094 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 101, + 102, + 103, + 107 + ], + "BonusID": 11095 + }, + { + "BonusNumberList": [ + 10000, + 40000, + 10000 + ], + "CombinationBonusList": [ + 101, + 102, + 103 + ], + "BonusID": 11096 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 101, + 102, + 108 + ], + "BonusID": 11097 + }, + { + "BonusNumberList": [ + 30000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 101, + 102, + 103, + 104 + ], + "BonusID": 11098 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 102, + 107, + 104 + ], + "BonusID": 11099 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 20000, + 10000 + ], + "CombinationBonusList": [ + 102, + 107, + 103, + 104 + ], + "BonusID": 11100 + }, + { + "BonusNumberList": [ + 10000, + 40000, + 10000 + ], + "CombinationBonusList": [ + 102, + 106, + 104 + ], + "BonusID": 11101 + }, + { + "BonusNumberList": [ + 10000, + 20000, + 30000 + ], + "CombinationBonusList": [ + 101, + 104, + 103 + ], + "BonusID": 11102 + }, + { + "BonusNumberList": [ + 20000, + 20000, + 20000 + ], + "CombinationBonusList": [ + 102, + 104, + 106 + ], + "BonusID": 11103 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 20000, + 10000 + ], + "CombinationBonusList": [ + 102, + 104, + 103, + 107 + ], + "BonusID": 11104 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 102, + 104, + 103, + 111 + ], + "BonusID": 11105 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 102, + 104, + 108, + 103 + ], + "BonusID": 11106 + }, + { + "BonusNumberList": [ + 10000, + 20000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 102, + 104, + 107, + 101 + ], + "BonusID": 11107 + }, + { + "BonusNumberList": [ + 30000, + 30000 + ], + "CombinationBonusList": [ + 102, + 104 + ], + "BonusID": 11108 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 103, + 104, + 101, + 102, + 105 + ], + "BonusID": 11109 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 105, + 103, + 112 + ], + "BonusID": 11110 + }, + { + "BonusNumberList": [ + 10000, + 20000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 105, + 108, + 101, + 102 + ], + "BonusID": 11111 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 105, + 108, + 107, + 106 + ], + "BonusID": 11112 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 105, + 104, + 108, + 106 + ], + "BonusID": 11113 + }, + { + "BonusNumberList": [ + 20000, + 40000 + ], + "CombinationBonusList": [ + 105, + 104 + ], + "BonusID": 11114 + }, + { + "BonusNumberList": [ + 10000, + 30000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 105, + 104, + 107, + 106 + ], + "BonusID": 11115 + }, + { + "BonusNumberList": [ + 20000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 105, + 111, + 101, + 103 + ], + "BonusID": 11116 + }, + { + "BonusNumberList": [ + 40000, + 20000 + ], + "CombinationBonusList": [ + 105, + 103 + ], + "BonusID": 11117 + }, + { + "BonusNumberList": [ + 10000, + 60000, + 10000 + ], + "CombinationBonusList": [ + 105, + 106, + 103 + ], + "BonusID": 11118 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 105, + 109, + 108 + ], + "BonusID": 11119 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 105, + 109, + 107, + 103 + ], + "BonusID": 11120 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 20000, + 10000 + ], + "CombinationBonusList": [ + 110, + 104, + 103, + 101 + ], + "BonusID": 11121 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 22018, + 20058, + 30000, + 30000 + ], + "BonusID": 11122 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 80000 + ], + "CombinationBonusList": [ + 22018, + 20058, + 30000, + 1 + ], + "BonusID": 11123 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 80000, + 80000 + ], + "CombinationBonusList": [ + 22018, + 20058, + 1, + 1 + ], + "BonusID": 11124 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 22019, + 20058, + 30000, + 30000 + ], + "BonusID": 11125 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 80000 + ], + "CombinationBonusList": [ + 22019, + 20058, + 30000, + 1 + ], + "BonusID": 11126 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 80000, + 80000 + ], + "CombinationBonusList": [ + 22019, + 20058, + 1, + 1 + ], + "BonusID": 11127 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1501, + 1503, + 1313 + ], + "BonusID": 23171 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1505, + 1506, + 1507, + 1504 + ], + "BonusID": 23172 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1503, + 1313, + 1505 + ], + "BonusID": 23173 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1501, + 1506, + 1507, + 1504 + ], + "BonusID": 23174 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1313, + 1505, + 1506 + ], + "BonusID": 23175 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1501, + 1503, + 1507, + 1504 + ], + "BonusID": 23176 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1505, + 1506, + 1501 + ], + "BonusID": 23177 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1503, + 1313, + 1507, + 1504 + ], + "BonusID": 23178 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1506, + 1501, + 1503 + ], + "BonusID": 23179 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1313, + 1505, + 1507, + 1504 + ], + "BonusID": 23180 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1501, + 1313, + 1507 + ], + "BonusID": 23181 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1503, + 1505, + 1506, + 1504 + ], + "BonusID": 23182 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1503, + 1505, + 1504 + ], + "BonusID": 23183 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1501, + 1313, + 1506, + 1507 + ], + "BonusID": 23184 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 203 + ], + "BonusID": 23185 + }, + { + "BonusNumberList": [ + 30000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23186 + }, + { + "BonusNumberList": [ + 60000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23187 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 210 + ], + "BonusID": 23188 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 22021 + ], + "BonusID": 23189 + }, + { + "BonusNumberList": [ + 80000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23190 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 22022 + ], + "BonusID": 23191 + }, + { + "BonusNumberList": [ + 30000, + 20000 + ], + "CombinationBonusList": [ + 105, + 1 + ], + "BonusID": 23192 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1501, + 1306, + 1502 + ], + "BonusID": 23193 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1501, + 1306, + 1506 + ], + "BonusID": 23194 + }, + { + "BonusNumberList": [ + 180000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23195 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 80000 + ], + "CombinationBonusList": [ + 210, + 201, + 1 + ], + "BonusID": 23196 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 210, + 203 + ], + "BonusID": 23197 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 350701 + ], + "BonusID": 23198 + }, + { + "BonusNumberList": [ + 10000, + 30000 + ], + "CombinationBonusList": [ + 350107, + 104 + ], + "BonusID": 23199 + }, + { + "BonusNumberList": [ + 10000, + 100000 + ], + "CombinationBonusList": [ + 350104, + 1 + ], + "BonusID": 23200 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1221, + 1222, + 350202, + 101 + ], + "BonusID": 42001 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1405, + 1404, + 350201, + 101 + ], + "BonusID": 42002 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1505, + 1503, + 350202, + 101 + ], + "BonusID": 42003 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1004, + 1313, + 350208, + 101 + ], + "BonusID": 42004 + }, + { + "BonusNumberList": [ + 60000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1112, + 1503, + 350201, + 101 + ], + "BonusID": 42005 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1220, + 1112, + 350201, + 101 + ], + "BonusID": 42006 + }, + { + "BonusNumberList": [ + 60000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1210, + 1307, + 350203, + 101 + ], + "BonusID": 42007 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1401, + 1222, + 350204, + 101 + ], + "BonusID": 42008 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1405, + 1313, + 350202, + 101 + ], + "BonusID": 42009 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1310, + 1225, + 350207, + 101 + ], + "BonusID": 42010 + }, + { + "BonusNumberList": [ + 60000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1204, + 1413, + 350202, + 101 + ], + "BonusID": 42011 + }, + { + "BonusNumberList": [ + 50000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1306, + 1501, + 350208, + 101 + ], + "BonusID": 42012 + }, + { + "BonusNumberList": [ + 30000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1221, + 1208, + 350206, + 101 + ], + "BonusID": 42013 + }, + { + "BonusNumberList": [ + 40000, + 10000, + 10000, + 10000, + 20000 + ], + "CombinationBonusList": [ + 1, + 1505, + 1512, + 350208, + 101 + ], + "BonusID": 42014 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 235 + ], + "BonusID": 11129 + }, + { + "BonusNumberList": [ + 60000, + 10000 + ], + "CombinationBonusList": [ + 1, + 235 + ], + "BonusID": 11130 + }, + { + "BonusNumberList": [ + 80000, + 10000 + ], + "CombinationBonusList": [ + 1, + 235 + ], + "BonusID": 11131 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 236 + ], + "BonusID": 11132 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 236 + ], + "BonusID": 11133 + }, + { + "BonusNumberList": [ + 60000, + 10000 + ], + "CombinationBonusList": [ + 1, + 236 + ], + "BonusID": 11134 + }, + { + "BonusNumberList": [ + 80000, + 10000 + ], + "CombinationBonusList": [ + 1, + 236 + ], + "BonusID": 11135 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 234 + ], + "BonusID": 11136 + }, + { + "BonusNumberList": [ + 40000, + 10000 + ], + "CombinationBonusList": [ + 1, + 234 + ], + "BonusID": 11137 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 238 + ], + "BonusID": 11138 + }, + { + "BonusNumberList": [ + 30000, + 10000 + ], + "CombinationBonusList": [ + 1, + 238 + ], + "BonusID": 11139 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 350602, + 236 + ], + "BonusID": 11140 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 203, + 236 + ], + "BonusID": 11141 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 234, + 236 + ], + "BonusID": 11142 + }, + { + "BonusNumberList": [ + 20000, + 20000 + ], + "CombinationBonusList": [ + 1, + 234 + ], + "BonusID": 11143 + }, + { + "BonusNumberList": [ + 30000, + 20000 + ], + "CombinationBonusList": [ + 1, + 234 + ], + "BonusID": 11144 + }, + { + "BonusNumberList": [ + 10000, + 20000 + ], + "CombinationBonusList": [ + 104, + 234 + ], + "BonusID": 11145 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 237 + ], + "BonusID": 11146 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 235 + ], + "BonusID": 11128 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 20053 + ], + "BonusID": 11147 + }, + { + "BonusNumberList": [ + 40000, + 10000 + ], + "CombinationBonusList": [ + 1, + 20053 + ], + "BonusID": 11148 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 350602, + 203 + ], + "BonusID": 11149 + }, + { + "BonusNumberList": [ + 80000, + 20000 + ], + "CombinationBonusList": [ + 1, + 104 + ], + "BonusID": 11150 + }, + { + "BonusNumberList": [ + 100000, + 10000 + ], + "CombinationBonusList": [ + 1, + 105 + ], + "BonusID": 11151 + }, + { + "BonusNumberList": [ + 80000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 207, + 203 + ], + "BonusID": 11152 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 35030404 + ], + "BonusID": 11153 + }, + { + "BonusNumberList": [ + 60000, + 10000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11154 + }, + { + "BonusNumberList": [ + 80000, + 10000 + ], + "CombinationBonusList": [ + 1, + 110 + ], + "BonusID": 11155 + }, + { + "BonusNumberList": [ + 100000, + 10000 + ], + "CombinationBonusList": [ + 1, + 206 + ], + "BonusID": 11156 + }, + { + "BonusNumberList": [ + 20000, + 20000 + ], + "CombinationBonusList": [ + 1, + 208 + ], + "BonusID": 11157 + }, + { + "BonusNumberList": [ + 20000, + 10000 + ], + "CombinationBonusList": [ + 1, + 204 + ], + "BonusID": 11158 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 206, + 205 + ], + "BonusID": 11159 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123202 + ], + "BonusID": 23201 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123203 + ], + "BonusID": 23202 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123204 + ], + "BonusID": 23203 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123205 + ], + "BonusID": 23204 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123206 + ], + "BonusID": 23205 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123207 + ], + "BonusID": 23206 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123208 + ], + "BonusID": 23207 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123209 + ], + "BonusID": 23208 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123210 + ], + "BonusID": 23209 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123211 + ], + "BonusID": 23210 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123212 + ], + "BonusID": 23211 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123213 + ], + "BonusID": 23212 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123214 + ], + "BonusID": 23213 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123215 + ], + "BonusID": 23214 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123216 + ], + "BonusID": 23215 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123217 + ], + "BonusID": 23216 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123218 + ], + "BonusID": 23217 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123219 + ], + "BonusID": 23218 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123220 + ], + "BonusID": 23219 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123221 + ], + "BonusID": 23220 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123222 + ], + "BonusID": 23221 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123223 + ], + "BonusID": 23222 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123224 + ], + "BonusID": 23223 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123225 + ], + "BonusID": 23224 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123226 + ], + "BonusID": 23225 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123227 + ], + "BonusID": 23226 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123228 + ], + "BonusID": 23227 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123229 + ], + "BonusID": 23228 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22023, + 123230 + ], + "BonusID": 23229 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 22023 + ], + "BonusID": 23230 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123232 + ], + "BonusID": 23231 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123233 + ], + "BonusID": 23232 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123234 + ], + "BonusID": 23233 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123235 + ], + "BonusID": 23234 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123236 + ], + "BonusID": 23235 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123237 + ], + "BonusID": 23236 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123238 + ], + "BonusID": 23237 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123239 + ], + "BonusID": 23238 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123240 + ], + "BonusID": 23239 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123241 + ], + "BonusID": 23240 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123242 + ], + "BonusID": 23241 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123243 + ], + "BonusID": 23242 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123244 + ], + "BonusID": 23243 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123245 + ], + "BonusID": 23244 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123246 + ], + "BonusID": 23245 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123247 + ], + "BonusID": 23246 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123248 + ], + "BonusID": 23247 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123249 + ], + "BonusID": 23248 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123250 + ], + "BonusID": 23249 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123251 + ], + "BonusID": 23250 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123252 + ], + "BonusID": 23251 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123253 + ], + "BonusID": 23252 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123254 + ], + "BonusID": 23253 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123255 + ], + "BonusID": 23254 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123256 + ], + "BonusID": 23255 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123257 + ], + "BonusID": 23256 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123258 + ], + "BonusID": 23257 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123259 + ], + "BonusID": 23258 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 22024, + 123260 + ], + "BonusID": 23259 + }, + { + "BonusNumberList": [ + 10000 + ], + "CombinationBonusList": [ + 22024 + ], + "BonusID": 23260 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123262 + ], + "BonusID": 23261 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123263 + ], + "BonusID": 23262 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123264 + ], + "BonusID": 23263 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123265 + ], + "BonusID": 23264 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123266 + ], + "BonusID": 23265 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123267 + ], + "BonusID": 23266 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123268 + ], + "BonusID": 23267 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123269 + ], + "BonusID": 23268 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123270 + ], + "BonusID": 23269 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123271 + ], + "BonusID": 23270 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123272 + ], + "BonusID": 23271 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123273 + ], + "BonusID": 23272 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123274 + ], + "BonusID": 23273 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123275 + ], + "BonusID": 23274 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123276 + ], + "BonusID": 23275 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123277 + ], + "BonusID": 23276 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123278 + ], + "BonusID": 23277 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123279 + ], + "BonusID": 23278 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123280 + ], + "BonusID": 23279 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123281 + ], + "BonusID": 23280 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123282 + ], + "BonusID": 23281 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123283 + ], + "BonusID": 23282 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123284 + ], + "BonusID": 23283 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123285 + ], + "BonusID": 23284 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123286 + ], + "BonusID": 23285 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123287 + ], + "BonusID": 23286 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123288 + ], + "BonusID": 23287 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123289 + ], + "BonusID": 23288 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201, + 123290 + ], + "BonusID": 23289 + }, + { + "BonusNumberList": [ + 10000, + 10000 + ], + "CombinationBonusList": [ + 203, + 201 + ], + "BonusID": 23290 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 301313, + 301503, + 301504, + 301505, + 301506, + 301507 + ], + "BonusID": 23291 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 301306, + 301501, + 301502, + 301506, + 301513 + ], + "BonusID": 23292 + }, + { + "BonusNumberList": [ + 100000 + ], + "CombinationBonusList": [ + 350602 + ], + "BonusID": 23293 + }, + { + "BonusNumberList": [ + 500000, + 1000000 + ], + "CombinationBonusList": [ + 1, + 4 + ], + "BonusID": 23294 + }, + { + "BonusNumberList": [ + 500000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 1, + 123201, + 123231, + 123261 + ], + "BonusID": 23295 + }, + { + "BonusNumberList": [ + 10000, + 50000 + ], + "CombinationBonusList": [ + 350701, + 123297 + ], + "BonusID": 23296 + }, + { + "BonusNumberList": [ + 20000, + 150000, + 10000 + ], + "CombinationBonusList": [ + 123298, + 1, + 22025 + ], + "BonusID": 23297 + }, + { + "BonusNumberList": [ + 20000, + 50000, + 10000 + ], + "CombinationBonusList": [ + 123299, + 1, + 22026 + ], + "BonusID": 23298 + }, + { + "BonusNumberList": [ + 20000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 23299 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 22027, + 20058, + 350107, + 350107 + ], + "BonusID": 11160 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 120000 + ], + "CombinationBonusList": [ + 22027, + 20058, + 350107, + 1 + ], + "BonusID": 11161 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 120000, + 120000 + ], + "CombinationBonusList": [ + 22027, + 20058, + 1, + 1 + ], + "BonusID": 11162 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 10000 + ], + "CombinationBonusList": [ + 22028, + 20058, + 350107, + 350107 + ], + "BonusID": 11163 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 10000, + 120000 + ], + "CombinationBonusList": [ + 22028, + 20058, + 350107, + 1 + ], + "BonusID": 11164 + }, + { + "BonusNumberList": [ + 10000, + 10000, + 120000, + 120000 + ], + "CombinationBonusList": [ + 22028, + 20058, + 1, + 1 + ], + "BonusID": 11165 + }, + { + "BonusNumberList": [ + 990000 + ], + "CombinationBonusList": [ + 1 + ], + "BonusID": 11166 + } + ] + } +} diff --git a/resources/CurrencyWarsRoleCompatibility.json b/resources/CurrencyWarsRoleCompatibility.json new file mode 100644 index 0000000..23a8a54 --- /dev/null +++ b/resources/CurrencyWarsRoleCompatibility.json @@ -0,0 +1,297 @@ +{ + "format_version": 1, + "source_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "target_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "capture_sha256": "dfabf383ea63611deca7d0f75c998bc4dcbc15365202a5b5aa28d9487c855132", + "source": "Current Client GetHandBookAllRoleConfig DefaultRole, complete existing star configs; no new role ID inferred from avatar arithmetic.", + "entries": [ + { + "previous_role_id": 151102, + "current_role_id": 151112, + "variants": [ + { + "Config": { + "TraitList": [ + 200702, + 300602 + ], + "BackendRankList": [], + "MaxSPIcon": "", + "ChargeType": [], + "IsExpert": 0, + "ID": 151112, + "FrontBackType": 1, + "SpecialAvatarID": 3701511, + "Rarity": 4, + "IsInPool": true, + "IsInBook": true, + "HealOrShieldDisplay": 2, + "EquipmentID": 0, + "IsFakeAvatar": 0, + "SeasonID": 2, + "AvatarID": 1511 + }, + "Price": 4, + "MaxStar": 3, + "Star": 1, + "SaleQuoteKnown": false, + "StarConfig": { + "ShowStanceList": [], + "FrontShowSkillIDList": [ + 1511129901, + 1511122001, + 1511129801 + ], + "SkillOverrideDest": [ + 1511129901, + 1511122001, + 1511129801 + ], + "BackParamList": [], + "AIPath": "Config/ConfigAI/ComplexSkillAIGlobalGroup/GridFight/4.7/Avatar_GridFight_S2_Nihilux_10_ComplexSkillAI.json", + "GeneralPropertyModifyList": [ + { + "Value": "0", + "PropertyType": 1017 + }, + { + "Value": "0", + "PropertyType": 1045 + }, + { + "Value": "0.4500000004", + "PropertyType": 1010 + }, + { + "Value": "0.3000000002", + "PropertyType": 1021 + } + ], + "BackAbilityName": "StageAbility_GridFight_S2_Nihilux_10", + "JsonOverrideConfig": "Config/ConfigCharacter/GridFight/4.7/Avatar_GridFight_S2_Nihilux_10_Config.json", + "BackShowSkillIDList": [], + "SkillOverrideSrc": [ + 0, + 151120, + 0 + ], + "BESkillIDList": [], + "BackOneWordDesc": { + "hash": 0, + "hash64": 0 + }, + "FrontOneWordDesc": { + "hash": 1722272047, + "hash64": 9804706595767047015 + }, + "BackSpeedRewrite": "0", + "LuckDamage": "1", + "BackMaxSP": "0", + "BackSpeedAddedRatio": "0", + "BackInitialEnergyBar": "0", + "ExtraHealBase": "60", + "BEID": 62558, + "ExtraShieldBase": "60", + "BackEnergyBar": "0", + "BackPowerBase": "0", + "BackInitialSP": "0", + "LuckChance": "0.0500000000", + "FrontPowerBase": "175", + "ID": 151112, + "Star": 1, + "StanceDamageDisplay": "0" + }, + "ServantStarConfig": null + }, + { + "Config": { + "TraitList": [ + 200702, + 300602 + ], + "BackendRankList": [], + "MaxSPIcon": "", + "ChargeType": [], + "IsExpert": 0, + "ID": 151112, + "FrontBackType": 1, + "SpecialAvatarID": 3701511, + "Rarity": 4, + "IsInPool": true, + "IsInBook": true, + "HealOrShieldDisplay": 2, + "EquipmentID": 0, + "IsFakeAvatar": 0, + "SeasonID": 2, + "AvatarID": 1511 + }, + "Price": 4, + "MaxStar": 3, + "Star": 2, + "SaleQuoteKnown": false, + "StarConfig": { + "ShowStanceList": [], + "FrontShowSkillIDList": [ + 1511129902, + 1511122002, + 1511129802 + ], + "SkillOverrideDest": [ + 1511129902, + 1511122002, + 1511129802 + ], + "BackParamList": [], + "AIPath": "Config/ConfigAI/ComplexSkillAIGlobalGroup/GridFight/4.7/Avatar_GridFight_S2_Nihilux_10_ComplexSkillAI.json", + "GeneralPropertyModifyList": [ + { + "Value": "0", + "PropertyType": 1017 + }, + { + "Value": "0", + "PropertyType": 1045 + }, + { + "Value": "0.8850000004", + "PropertyType": 1010 + }, + { + "Value": "0.4300000004", + "PropertyType": 1021 + } + ], + "BackAbilityName": "StageAbility_GridFight_S2_Nihilux_10", + "JsonOverrideConfig": "Config/ConfigCharacter/GridFight/4.7/Avatar_GridFight_S2_Nihilux_10_Config.json", + "BackShowSkillIDList": [], + "SkillOverrideSrc": [ + 0, + 151120, + 0 + ], + "BESkillIDList": [], + "BackOneWordDesc": { + "hash": 0, + "hash64": 0 + }, + "FrontOneWordDesc": { + "hash": 1722272044, + "hash64": 1012694226729375065 + }, + "BackSpeedRewrite": "0", + "LuckDamage": "1", + "BackMaxSP": "0", + "BackSpeedAddedRatio": "0", + "BackInitialEnergyBar": "0", + "ExtraHealBase": "60", + "BEID": 62558, + "ExtraShieldBase": "60", + "BackEnergyBar": "0", + "BackPowerBase": "0", + "BackInitialSP": "0", + "LuckChance": "0.0500000000", + "FrontPowerBase": "280", + "ID": 151112, + "Star": 2, + "StanceDamageDisplay": "0" + }, + "ServantStarConfig": null + }, + { + "Config": { + "TraitList": [ + 200702, + 300602 + ], + "BackendRankList": [], + "MaxSPIcon": "", + "ChargeType": [], + "IsExpert": 0, + "ID": 151112, + "FrontBackType": 1, + "SpecialAvatarID": 3701511, + "Rarity": 4, + "IsInPool": true, + "IsInBook": true, + "HealOrShieldDisplay": 2, + "EquipmentID": 0, + "IsFakeAvatar": 0, + "SeasonID": 2, + "AvatarID": 1511 + }, + "Price": 4, + "MaxStar": 3, + "Star": 3, + "SaleQuoteKnown": false, + "StarConfig": { + "ShowStanceList": [], + "FrontShowSkillIDList": [ + 1511129903, + 1511122003, + 1511129803 + ], + "SkillOverrideDest": [ + 1511129903, + 1511122003, + 1511129803 + ], + "BackParamList": [], + "AIPath": "Config/ConfigAI/ComplexSkillAIGlobalGroup/GridFight/4.7/Avatar_GridFight_S2_Nihilux_10_ComplexSkillAI.json", + "GeneralPropertyModifyList": [ + { + "Value": "0", + "PropertyType": 1017 + }, + { + "Value": "0", + "PropertyType": 1045 + }, + { + "Value": "1.3200000002", + "PropertyType": 1010 + }, + { + "Value": "0.5600000005", + "PropertyType": 1021 + } + ], + "BackAbilityName": "StageAbility_GridFight_S2_Nihilux_10", + "JsonOverrideConfig": "Config/ConfigCharacter/GridFight/4.7/Avatar_GridFight_S2_Nihilux_10_Config.json", + "BackShowSkillIDList": [], + "SkillOverrideSrc": [ + 0, + 151120, + 0 + ], + "BESkillIDList": [], + "BackOneWordDesc": { + "hash": 0, + "hash64": 0 + }, + "FrontOneWordDesc": { + "hash": 1722272045, + "hash64": 17814795680808471452 + }, + "BackSpeedRewrite": "0", + "LuckDamage": "1", + "BackMaxSP": "0", + "BackSpeedAddedRatio": "0", + "BackInitialEnergyBar": "0", + "ExtraHealBase": "60", + "BEID": 62558, + "ExtraShieldBase": "60", + "BackEnergyBar": "0", + "BackPowerBase": "0", + "BackInitialSP": "0", + "LuckChance": "0.0500000000", + "FrontPowerBase": "385", + "ID": 151112, + "Star": 3, + "StanceDamageDisplay": "0" + }, + "ServantStarConfig": null + } + ] + } + ] +} diff --git a/resources/CurrencyWarsSettlementRules.json b/resources/CurrencyWarsSettlementRules.json index 2f7fc45..8e60dd4 100644 --- a/resources/CurrencyWarsSettlementRules.json +++ b/resources/CurrencyWarsSettlementRules.json @@ -1,9 +1,7 @@ { - "format_version": 1, - "target_client_version": "4.6.53", - "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", "capture_sha256": "db1956ea89e23c35a5e5a5bcc01bbde4e931eeb0c58763980d737bf0b654965e", - "scope": "Current active node penalty and complete active player victory ranges. Other penalty rows require their own target capture. Talent/modifier post-battle healing remains unimplemented.", + "format_version": 1, + "node_penalty_capture_sha256": "2ff388e588877bdb2f5cbb8cd22122c7d87312da8b6a60f8817e06be8154c1b5", "penalty_rules": [ { "HPProgressValueList": [ @@ -54,8 +52,42 @@ "ThresholdPassBasicPlayerHPPenalty": 5, "ProgressPenaltyCoefficient": 10, "AvatarReviveDelayLose": "0.2500000002" + }, + { + "HPProgressValueList": [ + 0, + 0, + 0, + 0, + 100, + 100 + ], + "ProgressValueList": [ + 2, + 3, + 10, + 15, + 0, + 0 + ], + "TotalTurn": "15", + "ID": 91113, + "ThresholdPosition": 25, + "ThresholdFailPlayerHPPenalty": 15, + "ThresholdPassBasicPlayerHPPenalty": 5, + "ProgressPenaltyCoefficient": 10, + "AvatarReviveDelayLose": "0.2500000002" } ], + "scope": "Current active node penalty and complete active player victory ranges. Other penalty rows require their own target capture. Talent/modifier post-battle healing remains unimplemented.", + "streak_node_types": [ + "CampMonster", + "EliteBranch", + "Boss" + ], + "streak_policy_source": "March7thHoney public source fe00bdbda3c28ca33d01f171566aa35b5ab95083; normal Monster non-increment corroborated by native contrast replays.", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "target_client_version": "4.6.53", "victory_rules": [ { "Range": "0-1", @@ -81,12 +113,5 @@ "Low": 6, "Up": 4294967295 } - ], - "streak_node_types": [ - "CampMonster", - "EliteBranch", - "Boss" - ], - "streak_policy_source": "March7thHoney public source fe00bdbda3c28ca33d01f171566aa35b5ab95083; normal Monster non-increment corroborated by native contrast replays.", - "node_penalty_capture_sha256": "2ff388e588877bdb2f5cbb8cd22122c7d87312da8b6a60f8817e06be8154c1b5" + ] } diff --git a/resources/CurrencyWarsTrialAvatars.json b/resources/CurrencyWarsTrialAvatars.json new file mode 100644 index 0000000..54c1eb1 --- /dev/null +++ b/resources/CurrencyWarsTrialAvatars.json @@ -0,0 +1,50 @@ +{ + "format_version": 1, + "target_client_version": "4.6.53", + "target_assembly_sha256": "c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144", + "source_capture_sha256": "5576e6c85927b3053e6db13fe5a551d5754f18d97e1733e5ee8399f6da56c96c", + "scope": "Current catalog fake-avatar trials at captured world levels. SpecialAvatarExcelTable.GetData, bounded flat-row access; no scene loader. Other trial profiles remain uncaptured.", + "entries": [ + { + "OverrideProperty": [], + "LevelAreaPrefab": "", + "JsonPath": "", + "AnchorName": "", + "AIPath": "", + "AbilityNameList": [], + "PlayerJsonPath": "", + "ExRankIDList": [], + "CustomSkillTreeKey": "None", + "AvatarSkinID": 0, + "IsUseWorldLevel": true, + "HaveActionDelay": true, + "HasLeaveHint": false, + "LockMazeSkill": false, + "Level": 80, + "Rank": 0, + "AvatarID": 6042, + "EquipmentID": 24000, + "SkillTreeTemplate": 3, + "IsProtected": false, + "HasJoinHint": false, + "IsAutoBattle": false, + "PlaneID": 0, + "EquipmentRank": 1, + "RelicSubValue": 11515, + "Promotion": 6, + "WorldLevel": 6, + "EnhancedID": 0, + "RelicPropertyType": 612915, + "Type": 1, + "EquipmentPromotion": 6, + "RelicPropertyTypeExtra": 632515, + "DisableSwitch": false, + "LockBattleInfo": false, + "RelicMainValue": 4444515, + "SpecialAvatarID": 3706042, + "PlayerID": 6042, + "MainMissionID": 0, + "EquipmentLevel": 80 + } + ] +} diff --git a/resources/EidolonConfig.json b/resources/EidolonConfig.json index 61879bf..8647bfd 100644 --- a/resources/EidolonConfig.json +++ b/resources/EidolonConfig.json @@ -5545,6 +5545,301 @@ } ], "max_rank": 6 + }, + "1511": { + "max_rank": 6, + "ranks": [ + { + "rank": 1, + "cost": [ + { + "ItemID": 11511, + "ItemNum": 1 + } + ] + }, + { + "rank": 2, + "cost": [ + { + "ItemID": 11511, + "ItemNum": 1 + } + ] + }, + { + "rank": 3, + "cost": [ + { + "ItemID": 11511, + "ItemNum": 1 + } + ] + }, + { + "rank": 4, + "cost": [ + { + "ItemID": 11511, + "ItemNum": 1 + } + ] + }, + { + "rank": 5, + "cost": [ + { + "ItemID": 11511, + "ItemNum": 1 + } + ] + }, + { + "rank": 6, + "cost": [ + { + "ItemID": 11511, + "ItemNum": 1 + } + ] + } + ] + }, + "1014": { + "max_rank": 6, + "ranks": [ + { + "rank": 1, + "cost": [ + { + "ItemID": 11014, + "ItemNum": 1 + } + ] + }, + { + "rank": 2, + "cost": [ + { + "ItemID": 11014, + "ItemNum": 1 + } + ] + }, + { + "rank": 3, + "cost": [ + { + "ItemID": 11014, + "ItemNum": 1 + } + ] + }, + { + "rank": 4, + "cost": [ + { + "ItemID": 11014, + "ItemNum": 1 + } + ] + }, + { + "rank": 5, + "cost": [ + { + "ItemID": 11014, + "ItemNum": 1 + } + ] + }, + { + "rank": 6, + "cost": [ + { + "ItemID": 11014, + "ItemNum": 1 + } + ] + } + ] + }, + "1015": { + "max_rank": 6, + "ranks": [ + { + "rank": 1, + "cost": [ + { + "ItemID": 11015, + "ItemNum": 1 + } + ] + }, + { + "rank": 2, + "cost": [ + { + "ItemID": 11015, + "ItemNum": 1 + } + ] + }, + { + "rank": 3, + "cost": [ + { + "ItemID": 11015, + "ItemNum": 1 + } + ] + }, + { + "rank": 4, + "cost": [ + { + "ItemID": 11015, + "ItemNum": 1 + } + ] + }, + { + "rank": 5, + "cost": [ + { + "ItemID": 11015, + "ItemNum": 1 + } + ] + }, + { + "rank": 6, + "cost": [ + { + "ItemID": 11015, + "ItemNum": 1 + } + ] + } + ] + }, + "1508": { + "max_rank": 6, + "ranks": [ + { + "rank": 1, + "cost": [ + { + "ItemID": 11508, + "ItemNum": 1 + } + ] + }, + { + "rank": 2, + "cost": [ + { + "ItemID": 11508, + "ItemNum": 1 + } + ] + }, + { + "rank": 3, + "cost": [ + { + "ItemID": 11508, + "ItemNum": 1 + } + ] + }, + { + "rank": 4, + "cost": [ + { + "ItemID": 11508, + "ItemNum": 1 + } + ] + }, + { + "rank": 5, + "cost": [ + { + "ItemID": 11508, + "ItemNum": 1 + } + ] + }, + { + "rank": 6, + "cost": [ + { + "ItemID": 11508, + "ItemNum": 1 + } + ] + } + ] + }, + "1509": { + "max_rank": 6, + "ranks": [ + { + "rank": 1, + "cost": [ + { + "ItemID": 11509, + "ItemNum": 1 + } + ] + }, + { + "rank": 2, + "cost": [ + { + "ItemID": 11509, + "ItemNum": 1 + } + ] + }, + { + "rank": 3, + "cost": [ + { + "ItemID": 11509, + "ItemNum": 1 + } + ] + }, + { + "rank": 4, + "cost": [ + { + "ItemID": 11509, + "ItemNum": 1 + } + ] + }, + { + "rank": 5, + "cost": [ + { + "ItemID": 11509, + "ItemNum": 1 + } + ] + }, + { + "rank": 6, + "cost": [ + { + "ItemID": 11509, + "ItemNum": 1 + } + ] + } + ] } }, "source": { @@ -5555,7 +5850,21 @@ "resources/AvatarConfig.json" ], "note": "Normal E1-E6 costs joined by AvatarID against local Client AvatarConfig for every avatar with six source rank entries, and verified as ItemSubType Eidolon. Client config variants without rank entries are excluded. EX materials remain limited to client-verified entries.", - "revision": "312b4597691e0a29cf9828a15b592757dba86949" + "revision": "312b4597691e0a29cf9828a15b592757dba86949", + "current_client_additions": { + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "client_catalog_evidence": "ev_9ea0f171c212f18ef6442f116c0bd14dd3ba08a3c583141c9bad58a5d2c7bd27", + "rank_capture_sha256": "01cf5bcfe13f1e02182e6687ec9dd665bd061bb884bd6d95e0a89646fa5a035e", + "item_capture_sha256": "b7e87f836a5e600df547b4e5185dd1e74cbd3012be0e474482538b1e13f35521", + "method": "AvatarRankConfigExcelTable.GetData by AvatarConfig RankIDList; ItemHelper.GetItem exact cost IDs", + "avatar_ids": [ + 1014, + 1015, + 1508, + 1509, + 1511 + ] + } }, "ex_materials": { "1204": { diff --git a/resources/GachaBannerMapping.json b/resources/GachaBannerMapping.json new file mode 100644 index 0000000..ab4e79d --- /dev/null +++ b/resources/GachaBannerMapping.json @@ -0,0 +1,602 @@ +{ + "format_version": 1, + "source": "Generated from freesr-data.json avatars + resources/EidolonConfig.json by tools/build_gacha_banner_mapping.py; stable IDs: existing pairs preserved, new avatars get max+1.", + "note": "Custom per-character banner mapping for the custom gacha presentation. Banner IDs use a 900000+ sandbox namespace that cannot collide with the Client captured GachaBasicInfo rows (1001/4001/2001/2002/3001/3002). Draws grant the mapped avatar; duplicates convert at its configured first Eidolon cost; first acquisition of a not-yet-owned avatar is rejected until the avatar acquisition path exists.", + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "banners": [ + { + "gacha_id": 900001, + "avatar_id": 1001, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900002, + "avatar_id": 1002, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900003, + "avatar_id": 1003, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900004, + "avatar_id": 1004, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900005, + "avatar_id": 1005, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900006, + "avatar_id": 1006, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900007, + "avatar_id": 1008, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900008, + "avatar_id": 1009, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900009, + "avatar_id": 1013, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900010, + "avatar_id": 1101, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900011, + "avatar_id": 1102, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900012, + "avatar_id": 1103, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900013, + "avatar_id": 1104, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900014, + "avatar_id": 1105, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900015, + "avatar_id": 1106, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900016, + "avatar_id": 1107, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900017, + "avatar_id": 1108, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900018, + "avatar_id": 1109, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900019, + "avatar_id": 1110, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900020, + "avatar_id": 1111, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900021, + "avatar_id": 1112, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900022, + "avatar_id": 1201, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900023, + "avatar_id": 1202, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900024, + "avatar_id": 1203, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900025, + "avatar_id": 1204, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900026, + "avatar_id": 1205, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900027, + "avatar_id": 1206, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900028, + "avatar_id": 1207, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900029, + "avatar_id": 1208, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900030, + "avatar_id": 1209, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900031, + "avatar_id": 1210, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900032, + "avatar_id": 1211, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900033, + "avatar_id": 1212, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900034, + "avatar_id": 1213, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900035, + "avatar_id": 1214, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900036, + "avatar_id": 1215, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900037, + "avatar_id": 1217, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900038, + "avatar_id": 1218, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900039, + "avatar_id": 1220, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900040, + "avatar_id": 1221, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900041, + "avatar_id": 1222, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900042, + "avatar_id": 1223, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900043, + "avatar_id": 1224, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900044, + "avatar_id": 1225, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900045, + "avatar_id": 1301, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900046, + "avatar_id": 1302, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900047, + "avatar_id": 1303, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900048, + "avatar_id": 1304, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900049, + "avatar_id": 1305, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900050, + "avatar_id": 1306, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900051, + "avatar_id": 1307, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900052, + "avatar_id": 1308, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900053, + "avatar_id": 1309, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900054, + "avatar_id": 1310, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900055, + "avatar_id": 1312, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900056, + "avatar_id": 1313, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900057, + "avatar_id": 1314, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900058, + "avatar_id": 1315, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900059, + "avatar_id": 1317, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900060, + "avatar_id": 1321, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900061, + "avatar_id": 1401, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900062, + "avatar_id": 1402, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900063, + "avatar_id": 1403, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900064, + "avatar_id": 1404, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900065, + "avatar_id": 1405, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900066, + "avatar_id": 1406, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900067, + "avatar_id": 1407, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900068, + "avatar_id": 1408, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900069, + "avatar_id": 1409, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900070, + "avatar_id": 1410, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900071, + "avatar_id": 1412, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900072, + "avatar_id": 1413, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900073, + "avatar_id": 1414, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900074, + "avatar_id": 1415, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900075, + "avatar_id": 1501, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900076, + "avatar_id": 1502, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900077, + "avatar_id": 1503, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900078, + "avatar_id": 1504, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900079, + "avatar_id": 1505, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900080, + "avatar_id": 1506, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900081, + "avatar_id": 1507, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900082, + "avatar_id": 1510, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900083, + "avatar_id": 1512, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900084, + "avatar_id": 1513, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900085, + "avatar_id": 8001, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900086, + "avatar_id": 8002, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900087, + "avatar_id": 8003, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900088, + "avatar_id": 8004, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900089, + "avatar_id": 8005, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900090, + "avatar_id": 8006, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900091, + "avatar_id": 8007, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900092, + "avatar_id": 8008, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900093, + "avatar_id": 8009, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900094, + "avatar_id": 8010, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900095, + "avatar_id": 1014, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900096, + "avatar_id": 1015, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900097, + "avatar_id": 1508, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900098, + "avatar_id": 1509, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + }, + { + "gacha_id": 900099, + "avatar_id": 1511, + "roster_available": true, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config" + } + ] +} diff --git a/resources/GachaLootCatalog.json b/resources/GachaLootCatalog.json new file mode 100644 index 0000000..38b5e80 --- /dev/null +++ b/resources/GachaLootCatalog.json @@ -0,0 +1,688 @@ +{ + "format_version": 1, + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "source": "Current Client ItemHelper.GetItem(candidate ID).Row.Rarity, bounded non-battle capture; candidate IDs from InventoryItemConfig, no rarity inference from IDs", + "capture_sha256": "670db85891614e978826f7e288ac001b2ca585360d84df8afbf7900d3211ed7f", + "lightcones": [ + { + "id": 20000, + "rarity": 3 + }, + { + "id": 20001, + "rarity": 3 + }, + { + "id": 20002, + "rarity": 3 + }, + { + "id": 20003, + "rarity": 3 + }, + { + "id": 20004, + "rarity": 3 + }, + { + "id": 20005, + "rarity": 3 + }, + { + "id": 20006, + "rarity": 3 + }, + { + "id": 20007, + "rarity": 3 + }, + { + "id": 20008, + "rarity": 3 + }, + { + "id": 20009, + "rarity": 3 + }, + { + "id": 20010, + "rarity": 3 + }, + { + "id": 20011, + "rarity": 3 + }, + { + "id": 20012, + "rarity": 3 + }, + { + "id": 20013, + "rarity": 3 + }, + { + "id": 20014, + "rarity": 3 + }, + { + "id": 20015, + "rarity": 3 + }, + { + "id": 20016, + "rarity": 3 + }, + { + "id": 20017, + "rarity": 3 + }, + { + "id": 20018, + "rarity": 3 + }, + { + "id": 20019, + "rarity": 3 + }, + { + "id": 20020, + "rarity": 3 + }, + { + "id": 20021, + "rarity": 3 + }, + { + "id": 20022, + "rarity": 3 + }, + { + "id": 20023, + "rarity": 3 + }, + { + "id": 20024, + "rarity": 3 + }, + { + "id": 21000, + "rarity": 4 + }, + { + "id": 21001, + "rarity": 4 + }, + { + "id": 21002, + "rarity": 4 + }, + { + "id": 21003, + "rarity": 4 + }, + { + "id": 21004, + "rarity": 4 + }, + { + "id": 21005, + "rarity": 4 + }, + { + "id": 21006, + "rarity": 4 + }, + { + "id": 21007, + "rarity": 4 + }, + { + "id": 21008, + "rarity": 4 + }, + { + "id": 21009, + "rarity": 4 + }, + { + "id": 21010, + "rarity": 4 + }, + { + "id": 21011, + "rarity": 4 + }, + { + "id": 21012, + "rarity": 4 + }, + { + "id": 21013, + "rarity": 4 + }, + { + "id": 21014, + "rarity": 4 + }, + { + "id": 21015, + "rarity": 4 + }, + { + "id": 21016, + "rarity": 4 + }, + { + "id": 21017, + "rarity": 4 + }, + { + "id": 21018, + "rarity": 4 + }, + { + "id": 21019, + "rarity": 4 + }, + { + "id": 21020, + "rarity": 4 + }, + { + "id": 21021, + "rarity": 4 + }, + { + "id": 21022, + "rarity": 4 + }, + { + "id": 21023, + "rarity": 4 + }, + { + "id": 21024, + "rarity": 4 + }, + { + "id": 21025, + "rarity": 4 + }, + { + "id": 21026, + "rarity": 4 + }, + { + "id": 21027, + "rarity": 4 + }, + { + "id": 21028, + "rarity": 4 + }, + { + "id": 21029, + "rarity": 4 + }, + { + "id": 21030, + "rarity": 4 + }, + { + "id": 21031, + "rarity": 4 + }, + { + "id": 21032, + "rarity": 4 + }, + { + "id": 21033, + "rarity": 4 + }, + { + "id": 21034, + "rarity": 4 + }, + { + "id": 21035, + "rarity": 4 + }, + { + "id": 21036, + "rarity": 4 + }, + { + "id": 21037, + "rarity": 4 + }, + { + "id": 21038, + "rarity": 4 + }, + { + "id": 21039, + "rarity": 4 + }, + { + "id": 21040, + "rarity": 4 + }, + { + "id": 21041, + "rarity": 4 + }, + { + "id": 21042, + "rarity": 4 + }, + { + "id": 21043, + "rarity": 4 + }, + { + "id": 21044, + "rarity": 4 + }, + { + "id": 21045, + "rarity": 4 + }, + { + "id": 21046, + "rarity": 4 + }, + { + "id": 21047, + "rarity": 4 + }, + { + "id": 21048, + "rarity": 4 + }, + { + "id": 21050, + "rarity": 4 + }, + { + "id": 21051, + "rarity": 4 + }, + { + "id": 21052, + "rarity": 4 + }, + { + "id": 21053, + "rarity": 4 + }, + { + "id": 21054, + "rarity": 4 + }, + { + "id": 21055, + "rarity": 4 + }, + { + "id": 21056, + "rarity": 4 + }, + { + "id": 21057, + "rarity": 4 + }, + { + "id": 21058, + "rarity": 4 + }, + { + "id": 21060, + "rarity": 4 + }, + { + "id": 21061, + "rarity": 4 + }, + { + "id": 21062, + "rarity": 4 + }, + { + "id": 21064, + "rarity": 4 + }, + { + "id": 21065, + "rarity": 4 + }, + { + "id": 21066, + "rarity": 4 + }, + { + "id": 22000, + "rarity": 4 + }, + { + "id": 22001, + "rarity": 4 + }, + { + "id": 22002, + "rarity": 4 + }, + { + "id": 22003, + "rarity": 4 + }, + { + "id": 22004, + "rarity": 4 + }, + { + "id": 22005, + "rarity": 4 + }, + { + "id": 22006, + "rarity": 4 + }, + { + "id": 22007, + "rarity": 4 + }, + { + "id": 22008, + "rarity": 4 + }, + { + "id": 23000, + "rarity": 5 + }, + { + "id": 23001, + "rarity": 5 + }, + { + "id": 23002, + "rarity": 5 + }, + { + "id": 23003, + "rarity": 5 + }, + { + "id": 23004, + "rarity": 5 + }, + { + "id": 23005, + "rarity": 5 + }, + { + "id": 23006, + "rarity": 5 + }, + { + "id": 23007, + "rarity": 5 + }, + { + "id": 23008, + "rarity": 5 + }, + { + "id": 23009, + "rarity": 5 + }, + { + "id": 23010, + "rarity": 5 + }, + { + "id": 23011, + "rarity": 5 + }, + { + "id": 23012, + "rarity": 5 + }, + { + "id": 23013, + "rarity": 5 + }, + { + "id": 23014, + "rarity": 5 + }, + { + "id": 23015, + "rarity": 5 + }, + { + "id": 23016, + "rarity": 5 + }, + { + "id": 23017, + "rarity": 5 + }, + { + "id": 23018, + "rarity": 5 + }, + { + "id": 23019, + "rarity": 5 + }, + { + "id": 23020, + "rarity": 5 + }, + { + "id": 23021, + "rarity": 5 + }, + { + "id": 23022, + "rarity": 5 + }, + { + "id": 23023, + "rarity": 5 + }, + { + "id": 23024, + "rarity": 5 + }, + { + "id": 23025, + "rarity": 5 + }, + { + "id": 23026, + "rarity": 5 + }, + { + "id": 23027, + "rarity": 5 + }, + { + "id": 23028, + "rarity": 5 + }, + { + "id": 23029, + "rarity": 5 + }, + { + "id": 23030, + "rarity": 5 + }, + { + "id": 23031, + "rarity": 5 + }, + { + "id": 23032, + "rarity": 5 + }, + { + "id": 23033, + "rarity": 5 + }, + { + "id": 23034, + "rarity": 5 + }, + { + "id": 23035, + "rarity": 5 + }, + { + "id": 23036, + "rarity": 5 + }, + { + "id": 23037, + "rarity": 5 + }, + { + "id": 23038, + "rarity": 5 + }, + { + "id": 23039, + "rarity": 5 + }, + { + "id": 23040, + "rarity": 5 + }, + { + "id": 23041, + "rarity": 5 + }, + { + "id": 23042, + "rarity": 5 + }, + { + "id": 23043, + "rarity": 5 + }, + { + "id": 23044, + "rarity": 5 + }, + { + "id": 23045, + "rarity": 5 + }, + { + "id": 23046, + "rarity": 5 + }, + { + "id": 23047, + "rarity": 5 + }, + { + "id": 23048, + "rarity": 5 + }, + { + "id": 23049, + "rarity": 5 + }, + { + "id": 23050, + "rarity": 5 + }, + { + "id": 23051, + "rarity": 5 + }, + { + "id": 23052, + "rarity": 5 + }, + { + "id": 23053, + "rarity": 5 + }, + { + "id": 23054, + "rarity": 5 + }, + { + "id": 23055, + "rarity": 5 + }, + { + "id": 23056, + "rarity": 5 + }, + { + "id": 23057, + "rarity": 5 + }, + { + "id": 23058, + "rarity": 5 + }, + { + "id": 23059, + "rarity": 5 + }, + { + "id": 23060, + "rarity": 5 + }, + { + "id": 23061, + "rarity": 5 + }, + { + "id": 23062, + "rarity": 5 + }, + { + "id": 23063, + "rarity": 5 + }, + { + "id": 23064, + "rarity": 5 + }, + { + "id": 24000, + "rarity": 5 + }, + { + "id": 24001, + "rarity": 5 + }, + { + "id": 24002, + "rarity": 5 + }, + { + "id": 24003, + "rarity": 5 + }, + { + "id": 24004, + "rarity": 5 + }, + { + "id": 24005, + "rarity": 5 + }, + { + "id": 24006, + "rarity": 5 + } + ] +} diff --git a/resources/GachaSandboxPolicy.json b/resources/GachaSandboxPolicy.json new file mode 100644 index 0000000..c3a02f4 --- /dev/null +++ b/resources/GachaSandboxPolicy.json @@ -0,0 +1,41 @@ +{ + "source": "Per-character limited sandbox banners using current Client art and roster. User requested featured five-star within80 and four-star-or-higher within10; base rates and three-four-star rotations are explicit sandbox configuration.", + "allowed_draw_counts": [ + 1, + 10 + ], + "charge_currency": false, + "duplicate_reward": "configured_first_eidolon_cost", + "sandbox_draw_pool": { + "source": "imported_roster", + "first_acquisition": "reject", + "note": "2026-10-24: draws on asset-verified browsable banners (Standard 1001, Novice 4001) pick uniformly from the live imported roster in freesr-data.json. Every pick is a duplicate-material grant at the avatar's configured first Eidolon cost; no IDs are embedded here and first acquisition of a not-yet-owned avatar remains unsupported. This is a sandbox pool so the installed banners can draw at all; per-character featured banners still require the custom presentation path." + }, + "verified_banner_prefabs": [ + "UI/Drawcard/GachaPanel/StandardGacha_1001.prefab", + "UI/Drawcard/GachaPanel/NoviceGacha_4001.prefab" + ], + "asset_verification": { + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "method": "RPG.Client.GlobalVars.s_AssetMgr.Exists, one captured path per heartbeat, no loading", + "source": "Player.log [GAC_GACHA_ASSET_EXISTS] 2026-10-24", + "standard": true, + "novice": true, + "captured_limited_character_and_lightcone_prefabs": false + }, + "asset_verification_note": "2026-10-24 Player.log: all six captured banner prefab paths were checked via RPG.Client.GlobalVars.s_AssetMgr.Exists without loading. Standard and Novice exist; all four captured limited character/lightcone prefabs (UI/Drawcard/GachaPanelLimited/*) are absent from the installed asset manifest. The captured Seele prefab UI/Drawcard/GachaPanelLimited/AvatarGacha_1102.prefab previously caused UIPrefabLoader ArgumentNullException inside GachaMainPage._create_pools_panel when sent. Do not enable a prefab solely because it exists in the flat table.", + "mapped_banner_preview_count": 0, + "native_presentation": { + "enabled": true, + "template_gacha_id": 1001, + "source": "Current initialized Standard-pool native cloning and GetInfo pre-bind restoration; user confirmed one-banner native frame, splash art and horizontal thumbnail on 2026-10-25. Five-star mapped tabs only, with three matching sandbox four-star cards; full multi-tab draw/exit still awaiting Client confirmation." + }, + "limited_rules": { + "source": "User guarantee requirements; configurable sandbox base rates, no official Beta probability evidence. Avatar rarity: AvatarConfig.json. Three-star Light Cones: current Client ItemRow capture in GachaLootCatalog.json. Three featured four-star avatars rotate deterministically over imported mapped rarity-four roster; generated sandbox rotations, not official rate-up lineups. Shared limited-character pity; >=4 resets ten-pull counter; no soft pity or off-banner five-stars.", + "rate_scale": 1000000, + "five_star_rate": 6000, + "four_star_rate": 51000, + "five_star_pity": 80, + "four_star_pity": 10 + } +} diff --git a/resources/MissionCompatibility.json b/resources/MissionCompatibility.json index 54c6621..c181fb1 100644 --- a/resources/MissionCompatibility.json +++ b/resources/MissionCompatibility.json @@ -1,7 +1,144 @@ { "unsupported_sub_mission_ids_by_client_version": { "4.6.53": [ - 103380210 + 103380210, + 104010267, + 104010268, + 104020209, + 104020216, + 104020220, + 104020221, + 104020906, + 104021303, + 105430609, + 105440015, + 105440314, + 105450114, + 201150113, + 205400411, + 205400414, + 205400906, + 205400931, + 401550506, + 401550507, + 424030608, + 434051001, + 434051220, + 434051221, + 434051222, + 434051223, + 434051224, + 434051233, + 434051303, + 800121006, + 800121007, + 800122104, + 800122204, + 800122603, + 800122610, + 800125110, + 800125111, + 800220202, + 800220203, + 800221307, + 800326103, + 801410801, + 801410802, + 802021302, + 802240236, + 802240237, + 802612004, + 803010503, + 803520202, + 803520207, + 803520302, + 803520307, + 993001001, + 993001002, + 993001003, + 993001004, + 993001005, + 993001006, + 993001007, + 993001008, + 999900001, + 999900002, + 999900003, + 999900004, + 999900005, + 999900006, + 999900007, + 999992001 + ], + "4.6.54": [ + 103380210, + 104010267, + 104010268, + 104020209, + 104020216, + 104020220, + 104020221, + 104020906, + 104021303, + 105430609, + 105440015, + 105440314, + 105450114, + 201150113, + 205400411, + 205400414, + 205400906, + 205400931, + 401550506, + 401550507, + 424030608, + 434051001, + 434051220, + 434051221, + 434051222, + 434051223, + 434051224, + 434051233, + 434051303, + 800121006, + 800121007, + 800122104, + 800122204, + 800122603, + 800122610, + 800125110, + 800125111, + 800220202, + 800220203, + 800221307, + 800326103, + 801410801, + 801410802, + 802021302, + 802240236, + 802240237, + 802612004, + 803010503, + 803520202, + 803520207, + 803520302, + 803520307, + 993001001, + 993001002, + 993001003, + 993001004, + 993001005, + 993001006, + 993001007, + 993001008, + 999900001, + 999900002, + 999900003, + 999900004, + 999900005, + 999900006, + 999900007, + 999992001 ] }, "provenance": [ @@ -9,6 +146,113 @@ "client_version": "4.6.53", "sub_mission_id": 103380210, "evidence": "The Client Player.log reports MissionJsonTable cannot find SubMissionInfoConfig for this ID while processing GetMissionDataScRsp." + }, + { + "client_version": "4.6.54", + "sub_mission_id": 104010267, + "evidence": "Player.log 2026-10-24 14:2x (runtime 4.6.54, assembly 4aa08a07...): MissionJsonTable cannot find SubMissionInfoConfig SubMissionID=104010267, followed by SubMissionData.InitConfigInfo null config and MainMissionData.AddSubMission sort-comparator NullReferenceException inside MissionModule._OnCmdGetMissionDataScRsp. Listed under 4.6.53 as well because server.json currently configures client_version 4.6.53 while the running Client is 4.6.54, so the exclusion must apply under the configured key." + }, + { + "client_version": "4.6.54", + "sub_mission_id": 104010268, + "evidence": "Player.log 2026-10-24 15:07 fresh login (runtime 4.6.54): MissionJsonTable cannot find SubMissionInfoConfig SubMissionID=104010268, same comparator NullReferenceException path as 104010267. Other 1040102xx IDs sent in the same response produced no config errors." + }, + { + "client_version": "4.6.54", + "sub_mission_id": 104020209, + "evidence": "Player.log 2026-10-24 15:2x relogin: MissionJsonTable cannot find SubMissionInfoConfig SubMissionID=104020209 with the same MainMissionData.AddSubMission comparator NRE. A scripts/mission_probe.lua chunked probe of GetSubMissionRow over all pushed IDs is staged and will enumerate the full missing set on the next Client process start." + }, + { + "client_version": "4.6.54", + "sub_mission_id": 104020216, + "evidence": "Player.log 2026-10-24 15:4x relogin: same missing-config NRE path. Fourth observed ID; the staged scripts/mission_probe.lua will enumerate the complete missing set on the next Client process start." + }, + { + "client_version": "4.6.54", + "sub_mission_id": 104020220, + "evidence": "UI recovery audit 2026-10-24: the latest completed Client session still reports 'subMissionInfoConfig not found. 104020220' at Player.log line 1744 followed by MainMissionData.AddSubMission comparator InvalidOperationException/NullReferenceException at line 1763 inside _OnCmdGetMissionDataScRsp. Preserved log SHA256: 8ff959198e40ef9db3da5bdb5e1cde5e902b40581a03a9046cb2151562cfae4e. Keep the existing exclusions; this is one additional observed missing config, not proof of a complete Client-valid sub-mission catalog. Mirrored under configured 4.6.53 because the server configuration still selects that compatibility key for this running .54 installation." + } + ], + "complete_audits": [ + { + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "runtime_client_version": "4.6.54", + "configured_compatibility_key": "4.6.53", + "catalog_sha256": "caf7fd83fb0abb942396860ef992ca199080be84c00cebc826e31c8c4514102a", + "capture_sha256": "4bbab0c25aa840104ca9703e1dac279523f8753ff87ec29fe8d7c9c53f2e2f22", + "checked": 14784, + "valid": 14716, + "missing": [ + 103380210, + 104010267, + 104010268, + 104020209, + 104020216, + 104020220, + 104020221, + 104020906, + 104021303, + 105430609, + 105440015, + 105440314, + 105450114, + 201150113, + 205400411, + 205400414, + 205400906, + 205400931, + 401550506, + 401550507, + 424030608, + 434051001, + 434051220, + 434051221, + 434051222, + 434051223, + 434051224, + 434051233, + 434051303, + 800121006, + 800121007, + 800122104, + 800122204, + 800122603, + 800122610, + 800125110, + 800125111, + 800220202, + 800220203, + 800221307, + 800326103, + 801410801, + 801410802, + 802021302, + 802240236, + 802240237, + 802612004, + 803010503, + 803520202, + 803520207, + 803520302, + 803520307, + 993001001, + 993001002, + 993001003, + 993001004, + 993001005, + 993001006, + 993001007, + 993001008, + 999900001, + 999900002, + 999900003, + 999900004, + 999900005, + 999900006, + 999900007, + 999992001 + ], + "source": "MissionModule.GetSubMissionInfoConfig for every outgoing subMissionIds entry; four lookups per render frame, 2ms budget. Config cache alone was only 297 entries and was NOT used as an allowlist. Mirrored into the configured .53 compatibility key because the base resources retain that revision; this does not certify a full .53 recapture." } ] } diff --git a/resources/PreviewAssetAvailability.json b/resources/PreviewAssetAvailability.json new file mode 100644 index 0000000..45ee9f0 --- /dev/null +++ b/resources/PreviewAssetAvailability.json @@ -0,0 +1,305 @@ +{ + "format_version": 1, + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "source": "Current AssetMgr.Exists queries, eight captured paths per heartbeat, no asset loading; Player.log [GAC_EVENT_ASSET] END observed | 2026-10-24 evening: limited gacha tab icons (8 paths) checked via the same bounded AssetMgr.Exists probe — all absent, consistent with the absent GachaPanelLimited prefabs.", + "paths": { + "Assets/AsbRes/UI/Quest/Widget/QuestBlindBoxPanel.prefab": false, + "SpriteOutput/Quest/TabIcon/BtnAbyssAlternation.png": true, + "SpriteOutput/Quest/TabIcon/BtnAbyssReward_1207.png": true, + "SpriteOutput/Quest/TabIcon/BtnActivityActive.png": true, + "SpriteOutput/Quest/TabIcon/BtnActivityMarble.png": true, + "SpriteOutput/Quest/TabIcon/BtnActivityRelicBox.png": true, + "SpriteOutput/Quest/TabIcon/BtnAmphoreusCurio.png": true, + "SpriteOutput/Quest/TabIcon/BtnAnniversarySevenDayVersion0210.png": true, + "SpriteOutput/Quest/TabIcon/BtnAntiVirus.png": true, + "SpriteOutput/Quest/TabIcon/BtnBelogogSubmit.png": true, + "SpriteOutput/Quest/TabIcon/BtnBoxingClubResonance.png": true, + "SpriteOutput/Quest/TabIcon/BtnCakeCatch.png": true, + "SpriteOutput/Quest/TabIcon/BtnChallengeBossReward_1214.png": true, + "SpriteOutput/Quest/TabIcon/BtnChallengeStoryReward_1110.png": true, + "SpriteOutput/Quest/TabIcon/BtnChenLingBattle.png": true, + "SpriteOutput/Quest/TabIcon/BtnClockPark.png": true, + "SpriteOutput/Quest/TabIcon/BtnComicDessert.png": true, + "SpriteOutput/Quest/TabIcon/BtnDoubleCocoon.png": true, + "SpriteOutput/Quest/TabIcon/BtnEvolveBuild.png": true, + "SpriteOutput/Quest/TabIcon/BtnEvolveBuildSC.png": true, + "SpriteOutput/Quest/TabIcon/BtnExpeditionBattle.png": true, + "SpriteOutput/Quest/TabIcon/BtnFantasticStory.png": true, + "SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop.png": true, + "SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop2Set.png": true, + "SpriteOutput/Quest/TabIcon/BtnFinalityBattle.png": true, + "SpriteOutput/Quest/TabIcon/BtnFistClubQuestMission.png": true, + "SpriteOutput/Quest/TabIcon/BtnFourthWorldRaidCollectionGame.png": true, + "SpriteOutput/Quest/TabIcon/BtnGridFightS1.png": true, + "SpriteOutput/Quest/TabIcon/BtnGridFightS2.png": true, + "SpriteOutput/Quest/TabIcon/BtnImgSingleTask.png": true, + "SpriteOutput/Quest/TabIcon/BtnLocalLegend.png": true, + "SpriteOutput/Quest/TabIcon/BtnPhotoExhibition.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuesAlley.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuesHeliobus.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuesPlayerReturn.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestActivityElationBattle.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestActivityStrongChallenge.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestAetherDivide.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestAmphoreusActivityTimeLimit.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestB51Racing.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestBlindBox.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestCakeRace.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestChenLingFes.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestChimera.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestChimeraDuel.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestColleague.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestDiceCombat.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestDiceCombatV2.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestDrinkMaker.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestDrinkMakerSecond.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestElfRestaurant.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestExploitMission.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestFeverTime.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestFightFest.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestGraffiti.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestGuessTheSilhouetteTask.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestHarmonyHero.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestHipplen.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestMatchThree.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestMechCraft.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestMedicineAssignment.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestMiniGame.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestMonopoly.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestMuseum.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestMusicRhythm.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestNewbieMission.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestParkour.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestPenaconyActivityTimeLimit.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestPixAir.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestPlanarcadiaActivityTimeLimit.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestPlanetFes.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRealityShow.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestReturnRecallVer470.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRogueNous.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial10.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial11.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial12.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial13.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial14.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial15.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial17.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial19.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial2.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial21.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial23.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial25.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial27.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial28.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial3.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial30.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial32.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial4.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial5.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial6.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial7.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial8.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial9.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestSpaceZoo.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestStarBattle.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestStarChallenge.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestStarChallengeV2.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestSwordTraining.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestTeamTower.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestTelevision.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestTouringCarPhoto.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestTrainParty.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestTrashCanSummon.png": true, + "SpriteOutput/Quest/TabIcon/BtnQuestTreasureTrotter.png": true, + "SpriteOutput/Quest/TabIcon/BtnRogueDlcQuestBannerSmall1.png": true, + "SpriteOutput/Quest/TabIcon/BtnRogueM9.png": true, + "SpriteOutput/Quest/TabIcon/BtnRogueMagic.png": true, + "SpriteOutput/Quest/TabIcon/BtnRogueReward.png": true, + "SpriteOutput/Quest/TabIcon/BtnRogueTournPersona.png": true, + "SpriteOutput/Quest/TabIcon/BtnRogueTourntBannerSmall1.png": true, + "SpriteOutput/Quest/TabIcon/BtnRogueTourntBannerSmall2.png": true, + "SpriteOutput/Quest/TabIcon/BtnRoleStrengthen.png": true, + "SpriteOutput/Quest/TabIcon/BtnRoleStrengthen2.png": true, + "SpriteOutput/Quest/TabIcon/BtnRoleStrengthen3.png": true, + "SpriteOutput/Quest/TabIcon/BtnSecondWorldRaidCollection.png": true, + "SpriteOutput/Quest/TabIcon/BtnTVSeason2.png": true, + "SpriteOutput/Quest/TabIcon/BtnTresureDungeon.png": true, + "SpriteOutput/Quest/TabIcon/BtnVoracityInvasion.png": true, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory130.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory140.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory160.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory200.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory260.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory300.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory310.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnQuestPrincipalLineBanner.png": false, + "SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnSubStory140.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayReward2.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayRewardPanelVersion0120.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0130.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0131.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0140.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0150.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0160.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0200.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0220.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0230.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0240.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0250.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0260.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0270.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0300.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0310.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0330.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVervionDH.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSingleTimeRewardVersion0200.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSingleTimeRewardVersion0250.png": false, + "SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSingleTimeRewardVersion0300.png": false, + "SpriteOutput/UI/Quest/ExpeditionAboutBoothill/ImgExpeditionAboutBoothillBanner.png": true, + "SpriteOutput/UI/Quest/ExpeditionAboutRanger/ImgExpeditionAboutRangerBanner.png": true, + "UI/Quest/GridFight/QuestGridFightPanel.prefab": true, + "UI/Quest/GridFight/QuestGridFightS2Panel.prefab": true, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0120.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0130.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0131.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0140.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0150.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0160.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0200.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0220.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0230.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0240.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0250.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0260.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0270.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0300.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0310.prefab": false, + "UI/Quest/SevenDay/SevenDayRewardPanelVersion0330.prefab": false, + "UI/Quest/SingleTimeReward/SingleTimeRewardPanelVersion0200.prefab": false, + "UI/Quest/SingleTimeReward/SingleTimeRewardPanelVersion0250.prefab": false, + "UI/Quest/SingleTimeReward/SingleTimeRewardPanelVersion0300.prefab": false, + "UI/Quest/StoryPanel/QuestMainStory260Panel.prefab": false, + "UI/Quest/StoryPanel/QuestMainStory300Panel.prefab": false, + "UI/Quest/StoryPanel/QuestMainStory310Panel.prefab": false, + "UI/Quest/TreasureDungeon/Widget/QuestTreasureDungeonPanel.prefab": true, + "UI/Quest/Widget/ActivityStrongChallengePanel.prefab": true, + "UI/Quest/Widget/AmphoreusActivityQuestTimeLimitPanel.prefab": true, + "UI/Quest/Widget/AnniversarySevenDayRewardPanelVersion0210.prefab": true, + "UI/Quest/Widget/FantasticStoryPanel.prefab": true, + "UI/Quest/Widget/FightFestPanel.prefab": true, + "UI/Quest/Widget/PenaconyActivityQuestTimeLimitPanel.prefab": true, + "UI/Quest/Widget/PlanarcadiaActivityQuestTimeLimitPanel.prefab": true, + "UI/Quest/Widget/PlayerReturnPanel.prefab": true, + "UI/Quest/Widget/PlayerReturnRecallPanel_Ver470.prefab": true, + "UI/Quest/Widget/QuestAbyssPanel.prefab": true, + "UI/Quest/Widget/QuestActivityActivePanel.prefab": true, + "UI/Quest/Widget/QuestActivityElationBattlePanel.prefab": true, + "UI/Quest/Widget/QuestActivityMarblePanel.prefab": true, + "UI/Quest/Widget/QuestActivityRelicBoxPanel.prefab": true, + "UI/Quest/Widget/QuestAetherDividePanel.prefab": true, + "UI/Quest/Widget/QuestAlleyPanel.prefab": true, + "UI/Quest/Widget/QuestAmphoreusCurioPanel.prefab": true, + "UI/Quest/Widget/QuestAntiVirusPanel.prefab": true, + "UI/Quest/Widget/QuestB51RacingPanel.prefab": true, + "UI/Quest/Widget/QuestBelobogSubmitPanel.prefab": true, + "UI/Quest/Widget/QuestBoxingClubPanel.prefab": true, + "UI/Quest/Widget/QuestBoxingClubResonancePanel_Resident.prefab": true, + "UI/Quest/Widget/QuestCakeCatchPanel.prefab": true, + "UI/Quest/Widget/QuestCakeRacePanel.prefab": true, + "UI/Quest/Widget/QuestChallengeBoss.prefab": true, + "UI/Quest/Widget/QuestChallengeBossPanel.prefab": true, + "UI/Quest/Widget/QuestChallengeStoryAlternationPanel.prefab": true, + "UI/Quest/Widget/QuestChallengeStoryPanel.prefab": true, + "UI/Quest/Widget/QuestChenLingBattlePanel.prefab": true, + "UI/Quest/Widget/QuestChenLingFesPanel.prefab": true, + "UI/Quest/Widget/QuestChimeraDuelPanel.prefab": true, + "UI/Quest/Widget/QuestChimeraPanel.prefab": true, + "UI/Quest/Widget/QuestClockParkPanel.prefab": true, + "UI/Quest/Widget/QuestColleaguePanel.prefab": false, + "UI/Quest/Widget/QuestComicDessertPanel.prefab": true, + "UI/Quest/Widget/QuestDiceCombatPanel.prefab": true, + "UI/Quest/Widget/QuestDoubleFarmCocoonAnnivPanel.prefab": true, + "UI/Quest/Widget/QuestDoubleFarmCocoonPanel.prefab": true, + "UI/Quest/Widget/QuestDrinkMakerPanel.prefab": true, + "UI/Quest/Widget/QuestDrinkMakerSecondPanel.prefab": true, + "UI/Quest/Widget/QuestEvolveBuildPanel.prefab": true, + "UI/Quest/Widget/QuestEvolveBuildSCPanel.prefab": true, + "UI/Quest/Widget/QuestExpeditionBattlePanel.prefab": true, + "UI/Quest/Widget/QuestExploitMissionPanel.prefab": true, + "UI/Quest/Widget/QuestFarmMultipleDrop2SetPanel.prefab": true, + "UI/Quest/Widget/QuestFarmMultipleDropPanel.prefab": true, + "UI/Quest/Widget/QuestFarmTripleDrop2SetPanel.prefab": true, + "UI/Quest/Widget/QuestFarmTripleDropPanel.prefab": true, + "UI/Quest/Widget/QuestFeverTimeChallengePanel.prefab": true, + "UI/Quest/Widget/QuestFinalityBattlePanel.prefab": true, + "UI/Quest/Widget/QuestFistClubPaperPanel.prefab": true, + "UI/Quest/Widget/QuestFourthWorldRaidCollectionPanel.prefab": true, + "UI/Quest/Widget/QuestGraffitiPixelPanel.prefab": true, + "UI/Quest/Widget/QuestGuessTheSilhouettePanel.prefab": true, + "UI/Quest/Widget/QuestHarmonyHeroPanel.prefab": true, + "UI/Quest/Widget/QuestHeliobusPanel.prefab": true, + "UI/Quest/Widget/QuestHipplenPanel.prefab": true, + "UI/Quest/Widget/QuestIdleLivePanel.prefab": true, + "UI/Quest/Widget/QuestLocalLegendPanel.prefab": true, + "UI/Quest/Widget/QuestMainStory130Panel.prefab": true, + "UI/Quest/Widget/QuestMainStory140Panel.prefab": true, + "UI/Quest/Widget/QuestMainStory160Panel.prefab": true, + "UI/Quest/Widget/QuestMainStory200Panel.prefab": true, + "UI/Quest/Widget/QuestMatchThreePanel.prefab": true, + "UI/Quest/Widget/QuestMechCraftPanel.prefab": true, + "UI/Quest/Widget/QuestMedicineAssignmentPanel.prefab": true, + "UI/Quest/Widget/QuestMiniGamePanel.prefab": true, + "UI/Quest/Widget/QuestMonopolyPanel.prefab": true, + "UI/Quest/Widget/QuestMuseumPanel.prefab": true, + "UI/Quest/Widget/QuestMusicRhythm.prefab": true, + "UI/Quest/Widget/QuestNewbieMissionPanel.prefab": true, + "UI/Quest/Widget/QuestPanelExpeditionAboutBoothill.prefab": true, + "UI/Quest/Widget/QuestPanelExpeditionAboutRanger.prefab": true, + "UI/Quest/Widget/QuestParkourPanel.prefab": true, + "UI/Quest/Widget/QuestPhotoExhibitionPanel.prefab": true, + "UI/Quest/Widget/QuestPixAirPanel.prefab": true, + "UI/Quest/Widget/QuestPlanetFesPanel.prefab": true, + "UI/Quest/Widget/QuestPrincipalLineBannerPanel.prefab": true, + "UI/Quest/Widget/QuestRealityShowPanel.prefab": true, + "UI/Quest/Widget/QuestRogueDlcPanel.prefab": true, + "UI/Quest/Widget/QuestRogueEndlessPanel.prefab": true, + "UI/Quest/Widget/QuestRogueMagicPanel.prefab": true, + "UI/Quest/Widget/QuestRogueNousDlcPanel.prefab": true, + "UI/Quest/Widget/QuestRoguePlanet7Panel.prefab": true, + "UI/Quest/Widget/QuestRoguePlanet8Panel.prefab": true, + "UI/Quest/Widget/QuestRoguePlanet9Panel.prefab": true, + "UI/Quest/Widget/QuestRogueRewardPanel.prefab": true, + "UI/Quest/Widget/QuestRogueTourn1Panel.prefab": true, + "UI/Quest/Widget/QuestRogueTournPersonaPanel.prefab": true, + "UI/Quest/Widget/QuestRogueTournTitanPanel.prefab": true, + "UI/Quest/Widget/QuestRoleStrengthenPanel.prefab": true, + "UI/Quest/Widget/QuestSecondWorldRaidCollectionPanel.prefab": true, + "UI/Quest/Widget/QuestSpaceZooPanel.prefab": true, + "UI/Quest/Widget/QuestStarChallengePanel.prefab": true, + "UI/Quest/Widget/QuestStarChallengeV2Panel.prefab": true, + "UI/Quest/Widget/QuestSubStory140Panel.prefab": true, + "UI/Quest/Widget/QuestSwordTrainingPanel.prefab": true, + "UI/Quest/Widget/QuestTeamTowerPanel.prefab": true, + "UI/Quest/Widget/QuestTelevisionPanel.prefab": true, + "UI/Quest/Widget/QuestTelevisionSeason2Panel.prefab": true, + "UI/Quest/Widget/QuestTouringCarPhotoPanel.prefab": true, + "UI/Quest/Widget/QuestTrainPartyPanel.prefab": true, + "UI/Quest/Widget/QuestTrashCanSummonPanel.prefab": true, + "UI/Quest/Widget/QuestTreasureTrotterPanel.prefab": true, + "UI/Quest/Widget/RoleTrialPanel.prefab": true, + "UI/Quest/Widget/SevenDayRewardPanel.prefab": true, + "UI/Quest/Widget/SevenDayRewardPanelVersion.prefab": true, + "UI/Quest/Widget/SingleTaskActivityPanel.prefab": true, + "UI/Quest/Widget/VoracityInvasionQuestPanel.prefab": false, + "UI/UI3D/ElfRestaurant/Prefabs/UI3D_QuestElfRestaurant.prefab": true, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1102.png": false, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1102_Selected.png": false, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1204.png": false, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1204_Selected.png": false, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23001.png": false, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23001_Selected.png": false, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23010.png": false, + "SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23010_Selected.png": false + } +} \ No newline at end of file diff --git a/resources/PreviewGameplayCatalog.json b/resources/PreviewGameplayCatalog.json new file mode 100644 index 0000000..a7a761b --- /dev/null +++ b/resources/PreviewGameplayCatalog.json @@ -0,0 +1,577 @@ +{ + "format_version": 1, + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "evidence_id": "ev_9ea0f171c212f18ef6442f116c0bd14dd3ba08a3c583141c9bad58a5d2c7bd27", + "source": "Current Client named flat tables; exact getter disassembly retained in battle_diagnostics/preview-*-getter.asm; bounded managed callback capture", + "tables": { + "gacha": [ + {"PrefabPath":"UI/Drawcard/GachaPanel/StandardGacha_1001.prefab","EndTime":"","PoolLabelIconSelected":"SpriteOutput/DrawCardPic/GachaTabIcon/TabIcon_Standard_Selected.png","StartTime":"","PoolLabelIcon":"SpriteOutput/DrawCardPic/GachaTabIcon/TabIcon_Standard.png","GachaType":1,"SortID":99,"GachaID":1001,"PoolDesc":{"hash":-573241471,"hash64":1121704090967857799},"PoolDescFTC":{"hash":-1259942478,"hash64":6970163302865048869},"TypeTitle":{"hash":684974156,"hash64":10012362747660649297},"PoolName":{"hash":2040134860,"hash64":12642828881931173103}}, + {"PrefabPath":"UI/Drawcard/GachaPanel/NoviceGacha_4001.prefab","EndTime":"","PoolLabelIconSelected":"SpriteOutput/DrawCardPic/GachaTabIcon/TabIcon_Novice_Selected.png","StartTime":"","PoolLabelIcon":"SpriteOutput/DrawCardPic/GachaTabIcon/TabIcon_Novice.png","GachaType":2,"SortID":1,"GachaID":4001,"PoolDesc":{"hash":92358784,"hash64":13113094041792250269},"PoolDescFTC":{"hash":1769329773,"hash64":6682982103413155220},"TypeTitle":{"hash":1027493017,"hash64":12992035607736039415},"PoolName":{"hash":2040134697,"hash64":16076008841484912183}}, + {"PrefabPath":"UI/Drawcard/GachaPanelLimited/AvatarGacha_1102.prefab","EndTime":"","PoolLabelIconSelected":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1102_Selected.png","StartTime":"","PoolLabelIcon":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1102.png","GachaType":11,"SortID":2,"GachaID":2001,"PoolDesc":{"hash":-2126297669,"hash64":12575760539773716760},"PoolDescFTC":{"hash":-1996685483,"hash64":9461473220466468630},"TypeTitle":{"hash":910428004,"hash64":16335421618088345187},"PoolName":{"hash":2040134763,"hash64":10466444443325460861}}, + {"PrefabPath":"UI/Drawcard/GachaPanelLimited/LightConeGacha_23001.prefab","EndTime":"","PoolLabelIconSelected":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23001_Selected.png","StartTime":"","PoolLabelIcon":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23001.png","GachaType":12,"SortID":4,"GachaID":3001,"PoolDesc":{"hash":-1037410444,"hash64":13567216986870304529},"PoolDescFTC":{"hash":1107923144,"hash64":12441093686588219336},"TypeTitle":{"hash":-641761534,"hash64":689370920993170148},"PoolName":{"hash":2040134794,"hash64":10051276577110162368}}, + {"PrefabPath":"UI/Drawcard/GachaPanelLimited/AvatarGacha_1204.prefab","EndTime":"","PoolLabelIconSelected":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1204_Selected.png","StartTime":"","PoolLabelIcon":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_1204.png","GachaType":11,"SortID":3,"GachaID":2002,"PoolDesc":{"hash":-2126297669,"hash64":12575760539773716760},"PoolDescFTC":{"hash":-1996685483,"hash64":9461473220466468630},"TypeTitle":{"hash":910428004,"hash64":16335421618088345187},"PoolName":{"hash":474050822,"hash64":9253952357381402356}}, + {"PrefabPath":"UI/Drawcard/GachaPanelLimited/LightConeGacha_23010.prefab","EndTime":"","PoolLabelIconSelected":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23010_Selected.png","StartTime":"","PoolLabelIcon":"SpriteOutput/DrawCardPic/GachaTabIconLimited/TabIcon_LightCone_23010.png","GachaType":12,"SortID":5,"GachaID":3002,"PoolDesc":{"hash":-1037410444,"hash64":13567216986870304529},"PoolDescFTC":{"hash":1107923144,"hash64":12441093686588219336},"TypeTitle":{"hash":-641761534,"hash64":689370920993170148},"PoolName":{"hash":474050853,"hash64":3268726668422334764}} + ], + "parkour": [ + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_1_0.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[3],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_1_0.asset","LevelRegionState":2.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897464,"hash64":2687868557309787501},"StoryLevel":true,"UnlockType":1,"TargetRank":3,"RailBallLimit":1,"Name":{"hash":-1250727382,"hash64":1045523278266222914},"FinishDisplay":{"hash":-2079567616,"hash64":17652283284798684579},"LapCount":3,"NextStorySubMissionID":0,"UnlockParam":803320103,"ID":1}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_1_1.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[1],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_1_1.asset","LevelRegionState":3.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897465,"hash64":1809351272621639991},"StoryLevel":true,"UnlockType":2,"TargetRank":3,"RailBallLimit":1,"Name":{"hash":-1250727379,"hash64":16238534445353706426},"FinishDisplay":{"hash":649315739,"hash64":6299321604395073582},"LapCount":3,"NextStorySubMissionID":803320202,"UnlockParam":1,"ID":2}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_2_0.png","TriggerCarTaskUnlock":"8203","GameAssetPathOnClear":"","BGMIDList":[2],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_2_0.asset","LevelRegionState":1.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897466,"hash64":2510254104740706313},"StoryLevel":true,"UnlockType":1,"TargetRank":3,"RailBallLimit":2,"Name":{"hash":-1250727380,"hash64":8969388287312595047},"FinishDisplay":{"hash":-916768202,"hash64":242815164892900699},"LapCount":3,"NextStorySubMissionID":0,"UnlockParam":803320202,"ID":3}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_2_1.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[1],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_2_1.asset","LevelRegionState":9.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897467,"hash64":11038922053585918603},"StoryLevel":true,"UnlockType":2,"TargetRank":3,"RailBallLimit":2,"Name":{"hash":-1250727385,"hash64":7136258066268715431},"FinishDisplay":{"hash":1455884793,"hash64":4607543158260580186},"LapCount":3,"NextStorySubMissionID":803320204,"UnlockParam":3,"ID":4}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_3_0.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[3],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_3_0.asset","LevelRegionState":4.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897468,"hash64":2576062474192497144},"StoryLevel":true,"UnlockType":1,"TargetRank":3,"RailBallLimit":3,"Name":{"hash":-1250727386,"hash64":2823988835946211861},"FinishDisplay":{"hash":-110199148,"hash64":13314275615034091528},"LapCount":3,"NextStorySubMissionID":0,"UnlockParam":803320204,"ID":5}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_3_1.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[1],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_3_1.asset","LevelRegionState":10.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897469,"hash64":16297716815005053228},"StoryLevel":true,"UnlockType":2,"TargetRank":3,"RailBallLimit":3,"Name":{"hash":-1250727383,"hash64":10970957314445384419},"FinishDisplay":{"hash":-1676283089,"hash64":15500092777426241590},"LapCount":3,"NextStorySubMissionID":803320206,"UnlockParam":5,"ID":6}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_4_0.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[4],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_4_0.asset","LevelRegionState":5.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897470,"hash64":8496746437362541134},"StoryLevel":true,"UnlockType":1,"TargetRank":3,"RailBallLimit":4,"Name":{"hash":-1250727384,"hash64":11882157571845076729},"FinishDisplay":{"hash":1052600266,"hash64":3712803958148307122},"LapCount":3,"NextStorySubMissionID":0,"UnlockParam":803320206,"ID":7}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_4_1.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[4],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_4_1.asset","LevelRegionState":15.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897455,"hash64":15993367827917134499},"StoryLevel":true,"UnlockType":2,"TargetRank":3,"RailBallLimit":4,"Name":{"hash":-1250727373,"hash64":13422624029542943102},"FinishDisplay":{"hash":-157253315,"hash64":10927285865605615502},"LapCount":7,"NextStorySubMissionID":0,"UnlockParam":7,"ID":8}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_4_2.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[4],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_4_2.asset","LevelRegionState":8.0,"MinimapAngle":45.0,"Desc":{"hash":-1758897456,"hash64":18162553219051123589},"StoryLevel":true,"UnlockType":2,"TargetRank":3,"RailBallLimit":4,"Name":{"hash":-1250727374,"hash64":1421461969440758669},"FinishDisplay":{"hash":-1723337256,"hash64":14821890953864301600},"LapCount":3,"NextStorySubMissionID":803320208,"UnlockParam":8,"ID":9}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_5_2.png","TriggerCarTaskUnlock":"8204","GameAssetPathOnClear":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_5_5.asset","BGMIDList":[1,2,3],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_5_2.asset","LevelRegionState":14.0,"MinimapAngle":45.0,"Desc":{"hash":-356074504,"hash64":17482785417144331299},"StoryLevel":false,"UnlockType":1,"TargetRank":3,"RailBallLimit":0,"Name":{"hash":658727738,"hash64":8573226141786736395},"FinishDisplay":{"hash":1524993712,"hash64":379273008815689015},"LapCount":3,"NextStorySubMissionID":0,"UnlockParam":803320208,"ID":10}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_5_1.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_5_4.asset","BGMIDList":[1,2,3],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_5_1.asset","LevelRegionState":11.0,"MinimapAngle":45.0,"Desc":{"hash":1210009437,"hash64":17785068727577999898},"StoryLevel":false,"UnlockType":2,"TargetRank":3,"RailBallLimit":0,"Name":{"hash":-2070155617,"hash64":15245917958894656875},"FinishDisplay":{"hash":1524993713,"hash64":9476975580879033216},"LapCount":3,"NextStorySubMissionID":803320210,"UnlockParam":10,"ID":11}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_5_0.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_5_3.asset","BGMIDList":[1,2,3],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_5_0.asset","LevelRegionState":12.0,"MinimapAngle":45.0,"Desc":{"hash":806724910,"hash64":17586182094301814629},"StoryLevel":false,"UnlockType":1,"TargetRank":1,"RailBallLimit":0,"Name":{"hash":1821527152,"hash64":13197861235979115772},"FinishDisplay":{"hash":1524993710,"hash64":613926418287328215},"LapCount":3,"NextStorySubMissionID":803320212,"UnlockParam":803320210,"ID":12}, + {"MinimapResPath":"SpriteOutput/Quest/Parkour/MiniMap/Minimap_Guide.png","TriggerCarTaskUnlock":"","GameAssetPathOnClear":"","BGMIDList":[2],"GameAssetPath":"Activity/Parkour/RoadMapInfo/ParkourGame_Level_Guide.asset","LevelRegionState":13.0,"MinimapAngle":45.0,"Desc":{"hash":0,"hash64":0},"StoryLevel":true,"UnlockType":1,"TargetRank":3,"RailBallLimit":1,"Name":{"hash":-1861392213,"hash64":7145274276957008742},"FinishDisplay":{"hash":1688621157,"hash64":11232979145137302910},"LapCount":2,"NextStorySubMissionID":0,"UnlockParam":803320101,"ID":10001} + ], + "panels": [ + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayReward2.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/SevenDayRewardPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251713569,"hash64":13731166576056034340},"TagDesc":{"hash":1452015932,"hash64":4551139714852869785},"IntroDesc":{"hash":-916758154,"hash64":16859379134862628959},"PanelID":10014,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661041984,"hash64":3846159296087366346},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3010,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestExploitMission.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestExploitMissionPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251713570,"hash64":18144651702017477567},"TagDesc":{"hash":1452015933,"hash64":7349981485819362875},"IntroDesc":{"hash":-916758155,"hash64":15464813054158496947},"PanelID":10015,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661041983,"hash64":16673659716976943329},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestNewbieMission.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestNewbieMissionPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251713571,"hash64":10688705037927944168},"TagDesc":{"hash":1452015934,"hash64":3343685732135299011},"IntroDesc":{"hash":-916758152,"hash64":15968298844148356015},"PanelID":10016,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661041982,"hash64":9660212072859838257},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnImgSingleTask.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/SingleTaskActivityPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251713572,"hash64":4818250149874515380},"TagDesc":{"hash":1452015935,"hash64":15375091111434106529},"IntroDesc":{"hash":-916758153,"hash64":1730303069366163817},"PanelID":10017,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":1002,"GuideVideoID":0,"TitleName":{"hash":-1661041981,"hash64":1360920070625838418},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":2000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVervionDH.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/SevenDayRewardPanelVersion.prefab","DisplayItemList":[],"TabName":{"hash":-1251713565,"hash64":6892157710660150506},"TagDesc":{"hash":1452015944,"hash64":8859784809920484680},"IntroDesc":{"hash":-916758142,"hash64":17766334078669776865},"PanelID":10018,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661041980,"hash64":8060181103687458761},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3011,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuesPlayerReturn.png","UnlockConditions":"[PlayerLevel:10],[FinishMainMission:1010403]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/PlayerReturnPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251713566,"hash64":1848838664533409806},"TagDesc":{"hash":1452015945,"hash64":16180348015073708504},"IntroDesc":{"hash":-916758143,"hash64":11012421547480575098},"PanelID":10019,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661041979,"hash64":6514068436703454917},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5910,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnDoubleCocoon.png","UnlockConditions":"[FinishMainMission:4010121]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestDoubleFarmCocoonPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848429046,"hash64":18038521740833014204},"TagDesc":{"hash":1855300463,"hash64":2554012710763029084},"IntroDesc":{"hash":649325791,"hash64":17411034274239437416},"PanelID":10020,"IsSocialShow":0,"PanelDesc":{"hash":1427255767,"hash64":8057198103170378194},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257757461,"hash64":13123904825575252353},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestFarmMultipleDropPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848429047,"hash64":8311605524519449019},"TagDesc":{"hash":1855300464,"hash64":15969963223782720815},"IntroDesc":{"hash":649325790,"hash64":18382756865018690422},"PanelID":10021,"IsSocialShow":0,"PanelDesc":{"hash":1427255766,"hash64":10880259075993288973},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257757460,"hash64":12856444114748185266},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayRewardPanelVersion0120.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0120.prefab","DisplayItemList":[],"TabName":{"hash":-848429049,"hash64":7365987040297943043},"TagDesc":{"hash":1855300466,"hash64":15718754635576539439},"IntroDesc":{"hash":649325792,"hash64":12298977471336847692},"PanelID":10023,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257757458,"hash64":4964670325722848972},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3012,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop2Set.png","UnlockConditions":"[FinishMainMission:1011502]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestFarmMultipleDrop2SetPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848429042,"hash64":14562752323231177123},"TagDesc":{"hash":1855300459,"hash64":16922535218968124713},"IntroDesc":{"hash":649325787,"hash64":14589173100824076592},"PanelID":10024,"IsSocialShow":0,"PanelDesc":{"hash":1427255763,"hash64":2173285738031261048},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257757457,"hash64":15855496099238464796},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnAbyssReward_1207.png","UnlockConditions":"[QuestClose:3000018]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestAbyssPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848429043,"hash64":16322715748833785014},"TagDesc":{"hash":1855300460,"hash64":16858696276197602106},"IntroDesc":{"hash":649325786,"hash64":12351922264388026192},"PanelID":10025,"IsSocialShow":0,"PanelDesc":{"hash":1427255762,"hash64":2413407491557653451},"ActivityThemeID":1002,"GuideVideoID":0,"TitleName":{"hash":-1257757456,"hash64":17808186525817236065},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":2000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop2Set.png","UnlockConditions":"[FinishMainMission:1011502]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestFarmMultipleDrop2SetPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848429044,"hash64":13403079524769116676},"TagDesc":{"hash":1855300461,"hash64":16070969328739284032},"IntroDesc":{"hash":649325789,"hash64":12562993003451623316},"PanelID":10026,"IsSocialShow":0,"PanelDesc":{"hash":1427255765,"hash64":2831870832138286237},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257757455,"hash64":9307417931283913557},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0130.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0130.prefab","DisplayItemList":[],"TabName":{"hash":-848429038,"hash64":4537818411807485657},"TagDesc":{"hash":1855300471,"hash64":12023640126606887007},"IntroDesc":{"hash":649325799,"hash64":15761078189911228714},"PanelID":10028,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257757453,"hash64":12806873988234739791},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3013,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0140.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0140.prefab","DisplayItemList":[],"TabName":{"hash":1880454307,"hash64":13616462377343355659},"TagDesc":{"hash":289216524,"hash64":15563426562370505926},"IntroDesc":{"hash":-2079557562,"hash64":16003080364423285901},"PanelID":10032,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471125896,"hash64":14011837088685793586},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3014,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0150.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0150.prefab","DisplayItemList":[],"TabName":{"hash":1880454312,"hash64":12447160596467479466},"TagDesc":{"hash":289216519,"hash64":12034229885673482748},"IntroDesc":{"hash":-2079557569,"hash64":11106598401291229454},"PanelID":10035,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471125899,"hash64":12067702742880652017},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3015,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0131.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0131.prefab","DisplayItemList":[],"TabName":{"hash":1880454316,"hash64":4242545004655595850},"TagDesc":{"hash":289216531,"hash64":2287089921056082192},"IntroDesc":{"hash":-2079557557,"hash64":8795000396522562169},"PanelID":10039,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471125903,"hash64":11315364130656261742},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3016,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0160.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0160.prefab","DisplayItemList":[],"TabName":{"hash":-2011228460,"hash64":2322520275747167099},"TagDesc":{"hash":1048731409,"hash64":17580238975590456546},"IntroDesc":{"hash":-513473623,"hash64":2297759676391979136},"PanelID":10040,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064326515,"hash64":18105743023619293128},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3017,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnChallengeStoryReward_1110.png","UnlockConditions":"[FinishMainMission:4020102]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestChallengeStoryPanel.prefab","DisplayItemList":[],"TabName":{"hash":-2011228461,"hash64":5813875418310740995},"TagDesc":{"hash":1048731410,"hash64":11545281923978868234},"IntroDesc":{"hash":-513473624,"hash64":18428632387629151256},"PanelID":10041,"IsSocialShow":0,"PanelDesc":{"hash":264456352,"hash64":14291512129108651724},"ActivityThemeID":1002,"GuideVideoID":0,"TitleName":{"hash":-2064326514,"hash64":11242513817150673127},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":2001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestReturnRecallVer470.png","UnlockConditions":"[PlayerLevel:10],[FinishMainMission:1010403]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/PlayerReturnRecallPanel_Ver470.prefab","DisplayItemList":[],"TabName":{"hash":-2011228463,"hash64":8884037102649228527},"TagDesc":{"hash":1048731412,"hash64":10191037175582054800},"IntroDesc":{"hash":-513473622,"hash64":5902145530357028863},"PanelID":10043,"IsSocialShow":0,"PanelDesc":{"hash":264456354,"hash64":14022653518444142795},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064326512,"hash64":16534429872534459526},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0200.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0200.prefab","DisplayItemList":[],"TabName":{"hash":-2011228459,"hash64":7264851288476723696},"TagDesc":{"hash":1048731408,"hash64":17942321433978541429},"IntroDesc":{"hash":-513473626,"hash64":5367192332889561549},"PanelID":10047,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064326508,"hash64":1763462406000846532},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":3018,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSingleTimeRewardVersion0200.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SingleTimeReward/SingleTimeRewardPanelVersion0200.prefab","DisplayItemList":[],"TabName":{"hash":-2011228452,"hash64":17851071100772844173},"TagDesc":{"hash":1048731417,"hash64":11912046546417956069},"IntroDesc":{"hash":-513473615,"hash64":14467921903264967833},"PanelID":10048,"IsSocialShow":0,"PanelDesc":{"hash":264456361,"hash64":7170773374340417806},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064326507,"hash64":17967390329652948718},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7800,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnAnniversarySevenDayVersion0210.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/AnniversarySevenDayRewardPanelVersion0210.prefab","DisplayItemList":[],"TabName":{"hash":717654894,"hash64":13997804752625869041},"TagDesc":{"hash":-517352531,"hash64":7563294005214732259},"IntroDesc":{"hash":1052610317,"hash64":5490301275320278739},"PanelID":10051,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":1001,"GuideVideoID":0,"TitleName":{"hash":664556841,"hash64":288477884976181506},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7999,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestFarmTripleDropPanel.prefab","DisplayItemList":[],"TabName":{"hash":717654893,"hash64":14731801458223891764},"TagDesc":{"hash":-517352530,"hash64":7696410940249032980},"IntroDesc":{"hash":1052610320,"hash64":16562124220165347576},"PanelID":10052,"IsSocialShow":0,"PanelDesc":{"hash":1830540296,"hash64":6934424617112053385},"ActivityThemeID":1004,"GuideVideoID":0,"TitleName":{"hash":664556842,"hash64":3509406345407979428},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop2Set.png","UnlockConditions":"[FinishMainMission:1011502]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestFarmTripleDrop2SetPanel.prefab","DisplayItemList":[],"TabName":{"hash":717654892,"hash64":18074820268732094444},"TagDesc":{"hash":-517352529,"hash64":1660001344896560565},"IntroDesc":{"hash":1052610319,"hash64":2886609972944051099},"PanelID":10053,"IsSocialShow":0,"PanelDesc":{"hash":1830540295,"hash64":4382720572593882993},"ActivityThemeID":1004,"GuideVideoID":0,"TitleName":{"hash":664556843,"hash64":9082290594637127293},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnDoubleCocoon.png","UnlockConditions":"[FinishMainMission:4010121]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestDoubleFarmCocoonAnnivPanel.prefab","DisplayItemList":[],"TabName":{"hash":717654899,"hash64":5211187838199041645},"TagDesc":{"hash":-517352536,"hash64":14147512810338146166},"IntroDesc":{"hash":1052610314,"hash64":13154257827830019839},"PanelID":10054,"IsSocialShow":0,"PanelDesc":{"hash":1830540290,"hash64":6195764279477160859},"ActivityThemeID":1004,"GuideVideoID":0,"TitleName":{"hash":664556844,"hash64":16554674281469335770},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0220.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0220.prefab","DisplayItemList":[],"TabName":{"hash":717654897,"hash64":8439170204372049299},"TagDesc":{"hash":-517352534,"hash64":10963753479096767015},"IntroDesc":{"hash":1052610316,"hash64":6260171460354442328},"PanelID":10056,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":664556846,"hash64":1131402863459817116},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7999,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0230.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0230.prefab","DisplayItemList":[],"TabName":{"hash":717654896,"hash64":9441470743548153340},"TagDesc":{"hash":-517352533,"hash64":1760457860322949133},"IntroDesc":{"hash":1052610315,"hash64":12384246057629002961},"PanelID":10057,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":664556847,"hash64":13135880553537017965},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0240.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0240.prefab","DisplayItemList":[],"TabName":{"hash":717654903,"hash64":8791607866459265627},"TagDesc":{"hash":-517352524,"hash64":18441632286106824611},"IntroDesc":{"hash":1052610326,"hash64":15968472946245146866},"PanelID":10058,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":664556848,"hash64":9303563540758192755},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0250.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0250.prefab","DisplayItemList":[],"TabName":{"hash":717654902,"hash64":17151394400224954776},"TagDesc":{"hash":-517352523,"hash64":3275093416817401485},"IntroDesc":{"hash":1052610325,"hash64":12358478656115578335},"PanelID":10059,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":664556849,"hash64":10616049675474109491},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0260.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0260.prefab","DisplayItemList":[],"TabName":{"hash":1120939422,"hash64":18336277173518325984},"TagDesc":{"hash":-114068005,"hash64":460103524945296920},"IntroDesc":{"hash":-1676273037,"hash64":7996118636640566119},"PanelID":10060,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1067841367,"hash64":684469296770698805},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnAbyssAlternation.png","UnlockConditions":"[FinishMainMission:4020103]|[FinishMainMission:4010106]|[FinishSubMission:801710102]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestChallengeBoss.prefab","DisplayItemList":[{"ItemNum":800,"ItemID":1},{"ItemNum":600,"ItemID":262},{"ItemNum":24,"ItemID":213},{"ItemNum":12,"ItemID":223},{"ItemNum":24,"ItemID":233},{"ItemNum":96,"ItemID":261},{"ItemNum":360000,"ItemID":2}],"TabName":{"hash":1120939421,"hash64":1810258419384036598},"TagDesc":{"hash":-114068004,"hash64":17207892370118712825},"IntroDesc":{"hash":-1676273038,"hash64":8513659939764471866},"PanelID":10061,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":1002,"GuideVideoID":0,"TitleName":{"hash":1067841368,"hash64":17134728875326032727},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":2002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnChallengeBossReward_1214.png","UnlockConditions":"[FinishMainMission:4020103]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestChallengeBossPanel.prefab","DisplayItemList":[{"ItemNum":300,"ItemID":1},{"ItemNum":1,"ItemID":236}],"TabName":{"hash":1120939420,"hash64":13680614607861957538},"TagDesc":{"hash":-114068003,"hash64":646390809649969762},"IntroDesc":{"hash":-1676273035,"hash64":12508728771866359384},"PanelID":10062,"IsSocialShow":0,"PanelDesc":{"hash":-898343059,"hash64":10485389374447908564},"ActivityThemeID":1002,"GuideVideoID":0,"TitleName":{"hash":1067841369,"hash64":4148020628686069262},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":2000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestHarmonyHero.png","UnlockConditions":"[FinishMainMission:1011403]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestHarmonyHeroPanel.prefab","DisplayItemList":[],"TabName":{"hash":1120939430,"hash64":15408829637558637481},"TagDesc":{"hash":-114067997,"hash64":92981517484238319},"IntroDesc":{"hash":-1676273029,"hash64":18017995655129908911},"PanelID":10068,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1067841375,"hash64":6275122232382639609},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7910,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSingleTimeRewardVersion0250.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SingleTimeReward/SingleTimeRewardPanelVersion0250.prefab","DisplayItemList":[],"TabName":{"hash":-445144521,"hash64":14772952968835094697},"TagDesc":{"hash":-1680151944,"hash64":17097635880400565139},"IntroDesc":{"hash":-110189094,"hash64":12676989638376695920},"PanelID":10072,"IsSocialShow":0,"PanelDesc":{"hash":667740882,"hash64":15430311315409694367},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-498242572,"hash64":7908060704622700654},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7999,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0270.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0270.prefab","DisplayItemList":[],"TabName":{"hash":670600728,"hash64":8609832843769694134},"TagDesc":{"hash":-920637059,"hash64":12142189133548164047},"IntroDesc":{"hash":1455894845,"hash64":4259731707013927864},"PanelID":10080,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":261272313,"hash64":13068800717298495176},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0300.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0300.prefab","DisplayItemList":[],"TabName":{"hash":670600727,"hash64":6574435333603203011},"TagDesc":{"hash":-920637058,"hash64":15612420937361424923},"IntroDesc":{"hash":1455894844,"hash64":10738375163611851258},"PanelID":10081,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":261272314,"hash64":5462493112457817924},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSingleTimeRewardVersion0300.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SingleTimeReward/SingleTimeRewardPanelVersion0300.prefab","DisplayItemList":[],"TabName":{"hash":670600731,"hash64":959921074997115660},"TagDesc":{"hash":-920637062,"hash64":5139643639029613935},"IntroDesc":{"hash":1455894840,"hash64":1501641024419665835},"PanelID":10085,"IsSocialShow":0,"PanelDesc":{"hash":-1348681760,"hash64":17969698949422025970},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":261272318,"hash64":3134256640663619071},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7999,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0310.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0310.prefab","DisplayItemList":[],"TabName":{"hash":670600735,"hash64":14833074553539598540},"TagDesc":{"hash":-920637050,"hash64":5625230225665745108},"IntroDesc":{"hash":1455894852,"hash64":7562643829322923194},"PanelID":10089,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":261272322,"hash64":8960681353295797625},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/SignInRewardTabIcon/BtnSevenDayVersion0330.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/SevenDay/SevenDayRewardPanelVersion0330.prefab","DisplayItemList":[],"TabName":{"hash":314370274,"hash64":10959539114750872029},"TagDesc":{"hash":-1276867325,"hash64":16441160259970900276},"IntroDesc":{"hash":1812125235,"hash64":11284972107946145593},"PanelID":10107,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94958073,"hash64":16817077236121494258},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7900,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnDoubleCocoon.png","UnlockConditions":"[FinishMainMission:4010121]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestDoubleFarmCocoonPanel.prefab","DisplayItemList":[],"TabName":{"hash":314370279,"hash64":6355888309770711577},"TagDesc":{"hash":-1276867314,"hash64":12027500720983359714},"IntroDesc":{"hash":1812125244,"hash64":13531410679299697046},"PanelID":10108,"IsSocialShow":0,"PanelDesc":{"hash":-1704912076,"hash64":9036265258079948528},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94958070,"hash64":13618402234889129291},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFarmMultipleDrop.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestFarmMultipleDropPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251713671,"hash64":495703840304713454},"TagDesc":{"hash":1452016034,"hash64":16883002040724287450},"IntroDesc":{"hash":-916758116,"hash64":8950947264164061913},"PanelID":10113,"IsSocialShow":0,"PanelDesc":{"hash":-138828140,"hash64":11407038036615107001},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661042018,"hash64":12702170995994355684},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnVoracityInvasion.png","UnlockConditions":"[FinishMainMission:4010121]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/VoracityInvasionQuestPanel.prefab","DisplayItemList":[],"TabName":{"hash":-895483310,"hash64":9283106114397703960},"TagDesc":{"hash":1808246393,"hash64":10727456439343424436},"IntroDesc":{"hash":-1272988479,"hash64":12026743143719492299},"PanelID":10190,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1304811659,"hash64":14830323571246972864},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":8020,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364990,"hash64":18058796072312069806},"TagDesc":{"hash":-1276866265,"hash64":2123750315133859648},"IntroDesc":{"hash":1812128407,"hash64":4724912999884437757},"PanelID":20001,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952669,"hash64":14496328347656614726},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial2.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364991,"hash64":6364273533316827774},"TagDesc":{"hash":0,"hash64":0},"IntroDesc":{"hash":1812128404,"hash64":15656337272110407214},"PanelID":20002,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952670,"hash64":17521663844905000963},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnAntiVirus.png","UnlockConditions":"[PlayerLevel:22]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestAntiVirusPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314368192,"hash64":7141569005947716326},"TagDesc":{"hash":-1276865243,"hash64":16887427058538254081},"IntroDesc":{"hash":1812127381,"hash64":13163143809412049762},"PanelID":30002,"IsSocialShow":0,"PanelDesc":{"hash":-1704909939,"hash64":133412946668938724},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94955871,"hash64":12347707712394219048},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestStarBattle.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestBoxingClubPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":110112},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314371524,"hash64":12940622280411700266},"TagDesc":{"hash":-1276872799,"hash64":5391111567739207},"IntroDesc":{"hash":1812121873,"hash64":16487884175942477451},"PanelID":40001,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94950491,"hash64":8986616752158838095},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFistClubQuestMission.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1011001]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestFistClubPaperPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374724,"hash64":7451408625375885435},"TagDesc":{"hash":-1276871775,"hash64":10819069244324185444},"IntroDesc":{"hash":1812120849,"hash64":17558874772396983134},"PanelID":50000,"IsSocialShow":0,"PanelDesc":{"hash":-1704916471,"hash64":1317323295984209135},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953691,"hash64":7233769978613177674},"PanelBrief":{"hash":1243686130,"hash64":4178094589979202380},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestGraffiti.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestGraffitiPixelPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":22000},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":110406},{"ItemNum":0,"ItemID":110112},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374723,"hash64":8886993059839892206},"TagDesc":{"hash":-1276871774,"hash64":10354691937801683248},"IntroDesc":{"hash":0,"hash64":0},"PanelID":50001,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953690,"hash64":10732282928463511339},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6000,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMuseum.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestMuseumPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374722,"hash64":15861427262847265544},"TagDesc":{"hash":-1276871773,"hash64":12606801483739487755},"IntroDesc":{"hash":1812120851,"hash64":9303829234261393076},"PanelID":50002,"IsSocialShow":0,"PanelDesc":{"hash":-1704916469,"hash64":17361247655270011673},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953689,"hash64":5931880735491309044},"PanelBrief":{"hash":80886716,"hash64":16484434737819888472},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial2.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364992,"hash64":1617096922273722003},"TagDesc":{"hash":-1276866267,"hash64":9967975143706140574},"IntroDesc":{"hash":1812128405,"hash64":4412191721863913947},"PanelID":20003,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952671,"hash64":2732835493612073538},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestTreasureTrotter.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1010701]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestTreasureTrotterPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":110112}],"TabName":{"hash":314368194,"hash64":14152839747845666455},"TagDesc":{"hash":-1276865245,"hash64":8752535282640213837},"IntroDesc":{"hash":1812127379,"hash64":14359939569911566773},"PanelID":30004,"IsSocialShow":0,"PanelDesc":{"hash":-1704909941,"hash64":14720864018000874951},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94955865,"hash64":15860046343427502838},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial3.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364994,"hash64":9044422036282518926},"TagDesc":{"hash":-1276866269,"hash64":13841569378212595655},"IntroDesc":{"hash":1812128403,"hash64":2955614635863328897},"PanelID":20005,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952665,"hash64":17961796856230485169},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5003,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial4.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364995,"hash64":10958185966154236446},"TagDesc":{"hash":-1276866270,"hash64":16353588976372589963},"IntroDesc":{"hash":1812128400,"hash64":537345788954569594},"PanelID":20006,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952666,"hash64":16011899437812811178},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5004,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial3.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364996,"hash64":14830531138316350487},"TagDesc":{"hash":-1276866271,"hash64":5689438601706291515},"IntroDesc":{"hash":1812128401,"hash64":2542586250799442644},"PanelID":20007,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952667,"hash64":16468053732584435787},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5005,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial5.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364997,"hash64":16484686120402744317},"TagDesc":{"hash":-1276866256,"hash64":4968430996086236708},"IntroDesc":{"hash":1812128414,"hash64":9607294556781711275},"PanelID":20008,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952660,"hash64":2721452124360671275},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5006,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial6.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":314364998,"hash64":18438359525460901517},"TagDesc":{"hash":-1276866257,"hash64":5986532751981532090},"IntroDesc":{"hash":1812128415,"hash64":6290356819533412706},"PanelID":20009,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94952661,"hash64":779555525443632960},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5007,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial6.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718952,"hash64":3491936296972219609},"TagDesc":{"hash":1452017091,"hash64":81551061363750729},"IntroDesc":{"hash":-916754949,"hash64":17082754632781431664},"PanelID":20010,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036609,"hash64":8003932236478239390},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial7.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718951,"hash64":15948384787847363301},"TagDesc":{"hash":1452017090,"hash64":4541926109083459648},"IntroDesc":{"hash":-916754948,"hash64":12464790516417269843},"PanelID":20011,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036610,"hash64":9823230094774086800},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5007,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial8.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718950,"hash64":8042955350393251016},"TagDesc":{"hash":1452017089,"hash64":13939186059946777087},"IntroDesc":{"hash":-916754951,"hash64":4952201228254132588},"PanelID":20012,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036611,"hash64":1378204574690287515},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5007,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial7.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718949,"hash64":1360725275373330545},"TagDesc":{"hash":1452017088,"hash64":2784459012909641176},"IntroDesc":{"hash":-916754950,"hash64":11113799325280122212},"PanelID":20013,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036612,"hash64":16043689179696145678},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial7.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":0,"hash64":0},"TagDesc":{"hash":1452017086,"hash64":4800943728564340939},"IntroDesc":{"hash":0,"hash64":0},"PanelID":20015,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":0,"hash64":0},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial9.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718946,"hash64":8202582324178402847},"TagDesc":{"hash":1452017085,"hash64":8897914523058973054},"IntroDesc":{"hash":-916754955,"hash64":8102073599473446220},"PanelID":20016,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036607,"hash64":692577523422648089},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial10.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718945,"hash64":6687663910558412797},"TagDesc":{"hash":1452017084,"hash64":2278757086279590128},"IntroDesc":{"hash":-916754954,"hash64":14406553208895924658},"PanelID":20017,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036608,"hash64":12318766644983559967},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial10.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718944,"hash64":7174705532040010635},"TagDesc":{"hash":1452017099,"hash64":1010933016882159816},"IntroDesc":{"hash":-916754941,"hash64":5589531951458777811},"PanelID":20018,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036601,"hash64":7486926693244415715},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial11.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-1251718943,"hash64":17795767684161446688},"TagDesc":{"hash":1452017098,"hash64":8043662812385550436},"IntroDesc":{"hash":-916754940,"hash64":9400180225430267367},"PanelID":20019,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661036602,"hash64":8793943384994448914},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial12.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848434425,"hash64":7741337260686747099},"TagDesc":{"hash":1855301618,"hash64":3357155756449017337},"IntroDesc":{"hash":649328992,"hash64":831986872802131755},"PanelID":20020,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257752082,"hash64":15881281056973311113},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial11.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848434424,"hash64":15301241890831176443},"TagDesc":{"hash":1855301617,"hash64":16081264026715388716},"IntroDesc":{"hash":649328993,"hash64":12620269240012846717},"PanelID":20021,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257752083,"hash64":6438855121514234953},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial13.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848434423,"hash64":6872977674315337279},"TagDesc":{"hash":1855301616,"hash64":853604425301092505},"IntroDesc":{"hash":649328990,"hash64":111286247783105660},"PanelID":20022,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257752084,"hash64":15522997504187736750},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial14.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848434422,"hash64":4482413131217387128},"TagDesc":{"hash":1855301615,"hash64":13628015353464762907},"IntroDesc":{"hash":649328991,"hash64":8850027010754035792},"PanelID":20023,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257752085,"hash64":8611369104064034367},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial13.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848434421,"hash64":7960501948240769993},"TagDesc":{"hash":1855301614,"hash64":15435437348075971756},"IntroDesc":{"hash":649328988,"hash64":1213972594286815273},"PanelID":20024,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257752078,"hash64":16779249772213031372},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial15.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-848434418,"hash64":15221469464054403890},"TagDesc":{"hash":1855301611,"hash64":6520656076639057573},"IntroDesc":{"hash":649328987,"hash64":12399570837441269808},"PanelID":20027,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257752081,"hash64":4855901531926620632},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial17.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":1880448930,"hash64":12066737311053147975},"TagDesc":{"hash":289217677,"hash64":12005352447609456641},"IntroDesc":{"hash":-2079554363,"hash64":12869362119428101209},"PanelID":20030,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471131273,"hash64":18000169217432012596},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial19.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":1880448933,"hash64":15789923788054233552},"TagDesc":{"hash":289217674,"hash64":7142342395200618100},"IntroDesc":{"hash":-2079554364,"hash64":981897325179830157},"PanelID":20033,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471131270,"hash64":1076917395080309742},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial21.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":1880448936,"hash64":17385186872289387124},"TagDesc":{"hash":289217671,"hash64":3033790300120498689},"IntroDesc":{"hash":-2079554369,"hash64":9834860093586678480},"PanelID":20036,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471131275,"hash64":17697716025022134348},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial23.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":1880448939,"hash64":5379746904198248866},"TagDesc":{"hash":289217684,"hash64":750121742853163124},"IntroDesc":{"hash":-2079554354,"hash64":15408030117816134300},"PanelID":20039,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471131280,"hash64":17672818025466830709},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial25.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-2011233837,"hash64":5897018921821444040},"TagDesc":{"hash":1048732562,"hash64":4165912349301958344},"IntroDesc":{"hash":-513470424,"hash64":809270309845627215},"PanelID":20042,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064321138,"hash64":17985342786096091839},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial27.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-2011233833,"hash64":1445233204189723195},"TagDesc":{"hash":1048732558,"hash64":14904379311340070931},"IntroDesc":{"hash":-513470428,"hash64":18216019087125670858},"PanelID":20046,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064321134,"hash64":17118140307299332166},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial28.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":-2011233830,"hash64":17499767063103097651},"TagDesc":{"hash":1048732571,"hash64":16744179085251858185},"IntroDesc":{"hash":-513470413,"hash64":13988654866479023348},"PanelID":20049,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064321129,"hash64":16808701646222093881},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial30.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":717649518,"hash64":9105220392497137122},"TagDesc":{"hash":-517351379,"hash64":13639819672774194491},"IntroDesc":{"hash":1052613517,"hash64":5971459576057969978},"PanelID":20052,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":664562217,"hash64":6673739271806521499},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRoleTrial32.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/RoleTrialPanel.prefab","DisplayItemList":[],"TabName":{"hash":717649522,"hash64":1455031615792287880},"TagDesc":{"hash":-517351383,"hash64":10452799365165328988},"IntroDesc":{"hash":1052613513,"hash64":9316076952519284387},"PanelID":20056,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":664562221,"hash64":11803616428994188170},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5008,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnAbyssAlternation.png","UnlockConditions":"[WorldLevel:6]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestChallengeStoryAlternationPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":122004},{"ItemNum":0,"ItemID":226005},{"ItemNum":1200,"ItemID":263},{"ItemNum":1,"ItemID":239},{"ItemNum":3,"ItemID":236}],"TabName":{"hash":1618326905,"hash64":13912361952195906577},"TagDesc":{"hash":27095650,"hash64":3820198549468778871},"IntroDesc":{"hash":-896551972,"hash64":6488923456256347820},"PanelID":21001,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1209009246,"hash64":17443283559594841194},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":2001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestGuessTheSilhouetteTask.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1010701]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestGuessTheSilhouettePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":110112}],"TabName":{"hash":314368196,"hash64":633116471895038533},"TagDesc":{"hash":-1276865247,"hash64":14209443188469990920},"IntroDesc":{"hash":1812127377,"hash64":10181693940834217087},"PanelID":30006,"IsSocialShow":0,"PanelDesc":{"hash":-1704909943,"hash64":1006181481526801583},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94955867,"hash64":16771194069770229114},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMedicineAssignment.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1010206]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestMedicineAssignmentPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314368195,"hash64":18102080956107988657},"TagDesc":{"hash":-1276865246,"hash64":7522371181251372742},"IntroDesc":{"hash":1812127376,"hash64":15191606870383993198},"PanelID":30007,"IsSocialShow":0,"PanelDesc":{"hash":-1704909944,"hash64":12683883294473427639},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94955866,"hash64":4069320629773391115},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuesAlley.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestAlleyPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":1206},{"ItemNum":0,"ItemID":221001},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110112},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374721,"hash64":12734332197428029661},"TagDesc":{"hash":-1276871772,"hash64":7155175618806391409},"IntroDesc":{"hash":1812120850,"hash64":14725221998332358221},"PanelID":50003,"IsSocialShow":1,"PanelDesc":{"hash":-1704916470,"hash64":3798069804649129000},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953688,"hash64":15491666760084542169},"PanelBrief":{"hash":1646970657,"hash64":222949554162299268},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestColleague.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestColleaguePanel.prefab","DisplayItemList":[],"TabName":{"hash":596689992,"hash64":3299870650006661438},"TagDesc":{"hash":0,"hash64":0},"IntroDesc":{"hash":0,"hash64":0},"PanelID":22001,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":0,"hash64":0},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":4000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestColleague.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestColleaguePanel.prefab","DisplayItemList":[],"TabName":{"hash":596689993,"hash64":16442956769707418474},"TagDesc":{"hash":0,"hash64":0},"IntroDesc":{"hash":0,"hash64":0},"PanelID":22002,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":0,"hash64":0},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":4000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestColleague.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestColleaguePanel.prefab","DisplayItemList":[],"TabName":{"hash":596689994,"hash64":13921055117226280416},"TagDesc":{"hash":0,"hash64":0},"IntroDesc":{"hash":0,"hash64":0},"PanelID":22003,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":0,"hash64":0},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":4000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnTresureDungeon.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/TreasureDungeon/Widget/QuestTreasureDungeonPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":220001},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":110153},{"ItemNum":0,"ItemID":110152},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374720,"hash64":17254633540916953279},"TagDesc":{"hash":-1276871771,"hash64":17522662577644211362},"IntroDesc":{"hash":1812120853,"hash64":3912749263082467382},"PanelID":50004,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953695,"hash64":786142621146035856},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnQuestPrincipalLineBanner.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestPrincipalLineBannerPanel.prefab","DisplayItemList":[],"TabName":{"hash":314375880,"hash64":13720047445234045578},"TagDesc":{"hash":-1276859731,"hash64":8905606848543498119},"IntroDesc":{"hash":1812134941,"hash64":10513914101002808620},"PanelID":80001,"IsSocialShow":0,"PanelDesc":{"hash":-1704902379,"hash64":10117435377655710549},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94946135,"hash64":7430903102398608867},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory130.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestMainStory130Panel.prefab","DisplayItemList":[],"TabName":{"hash":314375877,"hash64":14323153209293651453},"TagDesc":{"hash":-1276859728,"hash64":38043312540846678},"IntroDesc":{"hash":1812134942,"hash64":2191191144377181739},"PanelID":80002,"IsSocialShow":0,"PanelDesc":{"hash":-1704902378,"hash64":9725145151431736296},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94946132,"hash64":6175910662700700556},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory140.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestMainStory140Panel.prefab","DisplayItemList":[],"TabName":{"hash":314375878,"hash64":9959908175344416436},"TagDesc":{"hash":-1276859729,"hash64":9668385752567288709},"IntroDesc":{"hash":1812134943,"hash64":8083130773721305518},"PanelID":80003,"IsSocialShow":0,"PanelDesc":{"hash":-1704902377,"hash64":6668046871319994097},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94946133,"hash64":3461466114792337936},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnSubStory140.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestSubStory140Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":22},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110112},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314375883,"hash64":4567262560364634948},"TagDesc":{"hash":-1276859734,"hash64":2037766660726575376},"IntroDesc":{"hash":1812134936,"hash64":10636668730322752558},"PanelID":80004,"IsSocialShow":0,"PanelDesc":{"hash":-1704902384,"hash64":10751330304040483700},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94946130,"hash64":15043504853771960556},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory160.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestMainStory160Panel.prefab","DisplayItemList":[],"TabName":{"hash":314375884,"hash64":13790409568017029523},"TagDesc":{"hash":-1276859735,"hash64":3785909986284017260},"IntroDesc":{"hash":1812134937,"hash64":17506971053604677759},"PanelID":80005,"IsSocialShow":0,"PanelDesc":{"hash":-1704902383,"hash64":17581688995895394234},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94946131,"hash64":15963925480662566355},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:1034210]","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory260.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/StoryPanel/QuestMainStory260Panel.prefab","DisplayItemList":[],"TabName":{"hash":-1251708064,"hash64":7882486042183266450},"TagDesc":{"hash":1452023627,"hash64":15348757084448608789},"IntroDesc":{"hash":-916748413,"hash64":4802378066626008911},"PanelID":80012,"IsSocialShow":0,"PanelDesc":{"hash":-138818437,"hash64":16112497255673080640},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661030073,"hash64":8024916423900450704},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":true,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:1040114]","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory300.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/StoryPanel/QuestMainStory300Panel.prefab","DisplayItemList":[],"TabName":{"hash":-1251708058,"hash64":15602095218364463461},"TagDesc":{"hash":1452023621,"hash64":11501737113769414374},"IntroDesc":{"hash":-916748419,"hash64":6115733587559485198},"PanelID":80014,"IsSocialShow":0,"PanelDesc":{"hash":-138818443,"hash64":5437706515144401852},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661030071,"hash64":318299805441289954},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":true,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:1021702]|[RealFinishMainMission:1036106]","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory200.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestMainStory200Panel.prefab","DisplayItemList":[],"TabName":{"hash":-1251708057,"hash64":8639672224078750778},"TagDesc":{"hash":1452023620,"hash64":17338778924372994229},"IntroDesc":{"hash":-916748418,"hash64":2650036478307568949},"PanelID":80015,"IsSocialShow":0,"PanelDesc":{"hash":-138818442,"hash64":4331987141137262198},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661030072,"hash64":10584146560800872259},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":true,"DailyHint":false,"FinishType":2}, + {"FinishConditions":"[FinishMainMission:1040213]","TabIcon":"SpriteOutput/Quest/TabIcon/MainStoryTabIcon/BtnMainStory310.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/StoryPanel/QuestMainStory310Panel.prefab","DisplayItemList":[],"TabName":{"hash":-1251708060,"hash64":2543878140042520117},"TagDesc":{"hash":1452023623,"hash64":11296365096700948790},"IntroDesc":{"hash":-916748417,"hash64":8190265338769965702},"PanelID":80016,"IsSocialShow":0,"PanelDesc":{"hash":-138818441,"hash64":12849645058434458323},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661030069,"hash64":3957640601514771350},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":true,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestAetherDivide.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,3],"UIPrefab":"UI/Quest/Widget/QuestAetherDividePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":309001},{"ItemNum":0,"ItemID":220002},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110113},{"ItemNum":0,"ItemID":110112},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374719,"hash64":9461469025770401432},"TagDesc":{"hash":-1276871770,"hash64":8756007903458415916},"IntroDesc":{"hash":1812120852,"hash64":2568394488776807594},"PanelID":50005,"IsSocialShow":1,"PanelDesc":{"hash":-1704916468,"hash64":17493620776479937618},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953694,"hash64":12277208203113825771},"PanelBrief":{"hash":484171243,"hash64":11995110396611917673},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFantasticStory.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/FantasticStoryPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":140310},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110112},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314371521,"hash64":290054038731601089},"TagDesc":{"hash":-1276872796,"hash64":11030796785472146053},"IntroDesc":{"hash":1812121874,"hash64":8339329726228095153},"PanelID":40002,"IsSocialShow":1,"PanelDesc":{"hash":-1704915446,"hash64":6799218339915072049},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94950488,"hash64":7664236194919254528},"PanelBrief":{"hash":-183519,"hash64":7721928477578990965},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[FinishQuest:3000015]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueReward.png","UnlockConditions":"[FinishMainMission:4030010]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueRewardPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":24006},{"ItemNum":0,"ItemID":24005},{"ItemNum":0,"ItemID":24004},{"ItemNum":0,"ItemID":24003},{"ItemNum":0,"ItemID":24002},{"ItemNum":0,"ItemID":24001},{"ItemNum":0,"ItemID":24000},{"ItemNum":0,"ItemID":271}],"TabName":{"hash":314369346,"hash64":491606682145329931},"TagDesc":{"hash":-1276870621,"hash64":12654603779447506949},"IntroDesc":{"hash":1812124051,"hash64":11829062867686010833},"PanelID":60001,"IsSocialShow":0,"PanelDesc":{"hash":-1704913269,"hash64":12580640537799703491},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94948313,"hash64":7465492012114084959},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1000,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":2}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueReward.png","UnlockConditions":"[FinishMainMission:1021101]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRoguePlanet7Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":503},{"ItemNum":0,"ItemID":83094},{"ItemNum":0,"ItemID":83104},{"ItemNum":0,"ItemID":1013}],"TabName":{"hash":314369341,"hash64":18297115733019551108},"TagDesc":{"hash":-1276870616,"hash64":11888087008487025236},"IntroDesc":{"hash":1812124054,"hash64":11118513508991194861},"PanelID":60004,"IsSocialShow":0,"PanelDesc":{"hash":-1704913266,"hash64":13355207549989185052},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94948316,"hash64":14282960103135853117},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueDlcQuestBannerSmall1.png","UnlockConditions":"[FinishMainMission:8013103]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueDlcPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":300041},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314369348,"hash64":1217833957801706637},"TagDesc":{"hash":-1276870623,"hash64":6189950109561376451},"IntroDesc":{"hash":1812124049,"hash64":12708987162155471954},"PanelID":60003,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94948315,"hash64":12372100283705574627},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueReward.png","UnlockConditions":"[FinishMainMission:1021201]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRoguePlanet8Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":503},{"ItemNum":0,"ItemID":83114},{"ItemNum":0,"ItemID":83124}],"TabName":{"hash":314369342,"hash64":100993340590182335},"TagDesc":{"hash":-1276870617,"hash64":9344132758994178964},"IntroDesc":{"hash":1812124055,"hash64":940604425839902545},"PanelID":60005,"IsSocialShow":0,"PanelDesc":{"hash":-1704913265,"hash64":6010920454975438813},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94948317,"hash64":16406624481743793225},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueReward.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueEndlessPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":110123},{"ItemNum":0,"ItemID":110122},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314369343,"hash64":14007641734810738219},"TagDesc":{"hash":-1276870618,"hash64":3616547061311449152},"IntroDesc":{"hash":1812124052,"hash64":7122561002400048645},"PanelID":60006,"IsSocialShow":0,"PanelDesc":{"hash":-1704913268,"hash64":8933575275388163014},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94948318,"hash64":11332115520016931079},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRogueNous.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:4030009]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueNousDlcPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314369344,"hash64":10186453093168212296},"TagDesc":{"hash":-1276870619,"hash64":3480415022293984768},"IntroDesc":{"hash":1812124053,"hash64":8608170079530829900},"PanelID":60007,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94948319,"hash64":10026094825374259424},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueM9.png","UnlockConditions":"[FinishMainMission:1011502]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRoguePlanet9Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":503},{"ItemNum":0,"ItemID":83134},{"ItemNum":0,"ItemID":83144},{"ItemNum":0,"ItemID":1013}],"TabName":{"hash":314369353,"hash64":587878801415277958},"TagDesc":{"hash":-1276870612,"hash64":4782519799646862564},"IntroDesc":{"hash":1812124058,"hash64":8449338056712318462},"PanelID":60008,"IsSocialShow":0,"PanelDesc":{"hash":-1704913262,"hash64":13710792188618792057},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94948304,"hash64":4700295634870489804},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[RogueTournExpLevel:100]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueTourntBannerSmall1.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:4030009]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueTourn1Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":24004},{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":503},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":221006},{"ItemNum":0,"ItemID":202018},{"ItemNum":0,"ItemID":250601},{"ItemNum":0,"ItemID":250602},{"ItemNum":0,"ItemID":250604},{"ItemNum":0,"ItemID":110101},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251714595,"hash64":8121419221910086345},"TagDesc":{"hash":1452012734,"hash64":11723419739151798365},"IntroDesc":{"hash":-916759304,"hash64":4792926463463512535},"PanelID":60011,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661032254,"hash64":9264757783892765662},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6005,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueMagic.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:4030009]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueMagicPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":250603},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251714598,"hash64":2581707197074344425},"TagDesc":{"hash":1452012737,"hash64":8110541643256867975},"IntroDesc":{"hash":-916759303,"hash64":16044387992260635807},"PanelID":60016,"IsSocialShow":0,"PanelDesc":{"hash":-138829327,"hash64":7758014079483419152},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661032259,"hash64":4807495213239719741},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1000,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueTourntBannerSmall2.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueTournTitanPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":250605},{"ItemNum":0,"ItemID":202042},{"ItemNum":0,"ItemID":202031},{"ItemNum":0,"ItemID":250606},{"ItemNum":0,"ItemID":24005},{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":503},{"ItemNum":0,"ItemID":110101},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251714597,"hash64":2764112358186248493},"TagDesc":{"hash":1452012736,"hash64":15782491507146885685},"IntroDesc":{"hash":-916759302,"hash64":10220558759178034080},"PanelID":60017,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661032260,"hash64":18308466962500295015},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5998,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRogueTournPersona.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRogueTournPersonaPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":250609},{"ItemNum":0,"ItemID":202049},{"ItemNum":0,"ItemID":250610},{"ItemNum":0,"ItemID":24006},{"ItemNum":0,"ItemID":101},{"ItemNum":0,"ItemID":503},{"ItemNum":0,"ItemID":110101},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":295602}],"TabName":{"hash":-1251714588,"hash64":18441075383413597076},"TagDesc":{"hash":1452012743,"hash64":4481288673606061172},"IntroDesc":{"hash":-916759297,"hash64":8721319055470494228},"PanelID":60018,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661032245,"hash64":6395397600177976897},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":1003,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuesHeliobus.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,3],"UIPrefab":"UI/Quest/Widget/QuestHeliobusPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":22001},{"ItemNum":0,"ItemID":221003},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110173},{"ItemNum":0,"ItemID":110172},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374718,"hash64":5467629361359907290},"TagDesc":{"hash":-1276871769,"hash64":6613189108663410943},"IntroDesc":{"hash":1812120855,"hash64":10815080528824815390},"PanelID":50006,"IsSocialShow":1,"PanelDesc":{"hash":-1704916465,"hash64":5251471298526232750},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953693,"hash64":7438444011628927723},"PanelBrief":{"hash":2050255184,"hash64":11287830201753770984},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnBoxingClubResonance.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1011001]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestBoxingClubResonancePanel_Resident.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":140363},{"ItemNum":0,"ItemID":110112},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314371522,"hash64":631061653374899878},"TagDesc":{"hash":-1276872797,"hash64":10271455632672063997},"IntroDesc":{"hash":1812121875,"hash64":1827752966667167506},"PanelID":40003,"IsSocialShow":1,"PanelDesc":{"hash":-1704915445,"hash64":2987410565772833320},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94950489,"hash64":16729839567184605816},"PanelBrief":{"hash":-1566267460,"hash64":16112544612286661776},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestActivityStrongChallenge.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/ActivityStrongChallengePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314371519,"hash64":13853416440467434157},"TagDesc":{"hash":-1276872794,"hash64":9749952916070982092},"IntroDesc":{"hash":1812121876,"hash64":4386657337072312383},"PanelID":40004,"IsSocialShow":0,"PanelDesc":{"hash":-1704915444,"hash64":1222659422471007302},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94950494,"hash64":9015520900344144536},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestSpaceZoo.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestSpaceZooPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":220003},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":405020},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314368198,"hash64":13017697730206608099},"TagDesc":{"hash":-1276865233,"hash64":13575706865405981394},"IntroDesc":{"hash":1812127391,"hash64":4083852214818315361},"PanelID":30008,"IsSocialShow":1,"PanelDesc":{"hash":-1704909929,"hash64":1316250725050745208},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94955861,"hash64":6904245878607438392},"PanelBrief":{"hash":-514679384,"hash64":13248354643696940203},"SortWeight":6000,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[FinishQuest:6017240],[QuestClose:6017201],[QuestClose:6017202],[QuestClose:6017203],[QuestClose:6017204],[QuestClose:6017205],[QuestClose:6017206],[QuestClose:6017207],[QuestClose:6017208],[QuestClose:6017209],[QuestClose:6017210],[QuestClose:6017211],[QuestClose:6017212],[QuestClose:6017221],[QuestClose:6017222],[QuestClose:6017223],[QuestClose:6017224],[QuestClose:6017225],[QuestClose:6017226],[QuestClose:6017227],[QuestClose:6017228],[QuestClose:6017229],[QuestClose:6017230],[QuestClose:6017101],[QuestClose:6017102]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMiniGame.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestMiniGamePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":309002},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374717,"hash64":8245866543874821043},"TagDesc":{"hash":-1276871768,"hash64":13252850249318256689},"IntroDesc":{"hash":1812120854,"hash64":16429102712517293141},"PanelID":50007,"IsSocialShow":1,"PanelDesc":{"hash":-1704916466,"hash64":17722115106594423866},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953692,"hash64":9347067615548202825},"PanelBrief":{"hash":-678628171,"hash64":10422212012693432349},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestTelevision.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestTelevisionPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314371520,"hash64":2829796115077341637},"TagDesc":{"hash":-1276872795,"hash64":3391949501778571653},"IntroDesc":{"hash":1812121877,"hash64":5987490679323117641},"PanelID":40005,"IsSocialShow":0,"PanelDesc":{"hash":-1704915443,"hash64":16529435017849435608},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94950495,"hash64":9976595640189016955},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[QuestClose:6000601],[QuestClose:6000602],[QuestClose:6000603],[QuestClose:6000604],[QuestClose:6000605],[QuestClose:6000606],[QuestClose:6000607],[QuestClose:6000608],[QuestClose:6000609],[QuestClose:6000610],[QuestClose:6000611],[QuestClose:6000612],[QuestClose:6000613],[QuestClose:6000614],[QuestClose:6000615],[QuestClose:6000616],[QuestClose:6000617],[QuestClose:6000618],[QuestClose:6000619],[QuestClose:6000620]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestPenaconyActivityTimeLimit.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/PenaconyActivityQuestTimeLimitPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":201},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251715751,"hash64":16642009770763879375},"TagDesc":{"hash":1452018114,"hash64":12490884500353327739},"IntroDesc":{"hash":-916755972,"hash64":7548242125226664045},"PanelID":30010,"IsSocialShow":0,"PanelDesc":{"hash":-138825996,"hash64":6177283820983054589},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661039810,"hash64":13536137058078561429},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[FinishQuest:6021131],[FinishQuest:6021132],[QuestClose:6021101],[QuestClose:6021102],[QuestClose:6021103],[QuestClose:6021104],[QuestClose:6021105],[QuestClose:6021106],[QuestClose:6021107],[QuestClose:6021108],[QuestClose:6021109],[QuestClose:6021110],[QuestClose:6021111],[QuestClose:6021112],[QuestClose:6021113],[QuestClose:6021114],[QuestClose:6021115],[QuestClose:6021116],[QuestClose:6021117],[QuestClose:6021118],[QuestClose:6021119],[QuestClose:6021120],[QuestClose:6021121],[QuestClose:6021122],[QuestClose:6021123],[QuestClose:6021124],[QuestClose:6021125],[QuestClose:6021126],[QuestClose:6021127],[QuestClose:6021128],[QuestClose:6021129],[QuestClose:6021130],[QuestClose:6021133]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMonopoly.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestMonopolyPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":221005},{"ItemNum":0,"ItemID":202016},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374732,"hash64":8246259951098857569},"TagDesc":{"hash":-1276871767,"hash64":10707011179830778102},"IntroDesc":{"hash":1812120857,"hash64":17430224845735353040},"PanelID":50008,"IsSocialShow":0,"PanelDesc":{"hash":-1704916463,"hash64":803140440647253567},"ActivityThemeID":1001,"GuideVideoID":0,"TitleName":{"hash":-94953683,"hash64":10187579985356399438},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7800,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":true,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestDrinkMaker.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestDrinkMakerPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":309003},{"ItemNum":0,"ItemID":220004},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314374731,"hash64":3503070769302499609},"TagDesc":{"hash":-1276871766,"hash64":2506294914542361152},"IntroDesc":{"hash":1812120856,"hash64":17759222643272242768},"PanelID":50009,"IsSocialShow":1,"PanelDesc":{"hash":-1704916464,"hash64":14612291792960716158},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953682,"hash64":17610800354133347453},"PanelBrief":{"hash":-1128966865,"hash64":9321437218632616984},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6019101],[QuestClose:6019102],[QuestClose:6019103],[QuestClose:6019104],[QuestClose:6019105],[QuestClose:6019106],[QuestClose:6019107],[QuestClose:6019108],[QuestClose:6019109],[QuestClose:6019110],[QuestClose:6019111],[QuestClose:6019112],[QuestClose:6019113],[QuestClose:6019114],[QuestClose:6019115],[QuestClose:6019116],[QuestClose:6019117],[QuestClose:6019118],[QuestClose:6019122],[QuestClose:6019123],[QuestClose:6019124],[QuestClose:6019125],[QuestClose:6019126],[QuestClose:6019127],[QuestClose:6019128]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestFeverTime.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestFeverTimeChallengePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709217,"hash64":304082065774179829},"TagDesc":{"hash":1452011580,"hash64":5324859760815368309},"IntroDesc":{"hash":-916762506,"hash64":15891402584887553435},"PanelID":50010,"IsSocialShow":0,"PanelDesc":{"hash":-138832530,"hash64":5302843783295682651},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037632,"hash64":9354158777372818102},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnEvolveBuild.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestEvolveBuildPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110192},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709218,"hash64":5377987181058722136},"TagDesc":{"hash":1452011581,"hash64":11284566018330567366},"IntroDesc":{"hash":-916762507,"hash64":6053068967271354920},"PanelID":50011,"IsSocialShow":0,"PanelDesc":{"hash":-138832531,"hash64":13081376417756382378},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037631,"hash64":1871822898102358017},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6022101],[QuestClose:6022102],[QuestClose:6022103],[QuestClose:6022104],[QuestClose:6022105],[QuestClose:6022106],[QuestClose:6022107],[QuestClose:6022108],[QuestClose:6022109],[QuestClose:6022110],[QuestClose:6022112],[QuestClose:6022117],[QuestClose:6022118],[QuestClose:6022119],[QuestClose:6022123],[QuestClose:6022124],[QuestClose:6022125],[QuestClose:6022126],[QuestClose:6022127],[QuestClose:6022128],[QuestClose:6022129],[QuestClose:6022130],[QuestClose:6022131],[QuestClose:6022132],[QuestClose:6022133],[QuestClose:6022134],[QuestClose:6022135],[QuestClose:6022136]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnClockPark.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestClockParkPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":22002},{"ItemNum":0,"ItemID":220005},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110232},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709219,"hash64":18114629494858650857},"TagDesc":{"hash":1452011582,"hash64":6892524411738717304},"IntroDesc":{"hash":-916762504,"hash64":2222372862439881412},"PanelID":50012,"IsSocialShow":1,"PanelDesc":{"hash":-138832528,"hash64":15365240354700708304},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037630,"hash64":11491282390897186504},"PanelBrief":{"hash":80886717,"hash64":1796175351926868612},"SortWeight":6000,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:8022302]","TabIcon":"SpriteOutput/UI/Quest/ExpeditionAboutBoothill/ImgExpeditionAboutBoothillBanner.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1010206]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestPanelExpeditionAboutBoothill.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709220,"hash64":12453192614635894552},"TagDesc":{"hash":1452011583,"hash64":17879698761711921320},"IntroDesc":{"hash":-916762505,"hash64":5672127188046145202},"PanelID":50013,"IsSocialShow":0,"PanelDesc":{"hash":-138832529,"hash64":7390091892471155634},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037629,"hash64":7681696612917945336},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMatchThree.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestMatchThreePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":309004},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110182},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709221,"hash64":8458284104823035951},"TagDesc":{"hash":1452011584,"hash64":1959033759643382763},"IntroDesc":{"hash":-916762502,"hash64":2820982884936413402},"PanelID":50014,"IsSocialShow":1,"PanelDesc":{"hash":-138832526,"hash64":12135007347820845434},"ActivityThemeID":0,"GuideVideoID":16001,"TitleName":{"hash":-1661037636,"hash64":9153753261442534879},"PanelBrief":{"hash":-1081912697,"hash64":11480420388374693716},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6025103],[QuestClose:6025130],[QuestClose:6025122],[QuestClose:6025123],[QuestClose:6025124],[QuestClose:6025126],[QuestClose:6025127]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestSwordTraining.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestSwordTrainingPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":220006},{"ItemNum":0,"ItemID":11224},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110183},{"ItemNum":0,"ItemID":110182},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709222,"hash64":8990711814498726531},"TagDesc":{"hash":1452011585,"hash64":7521458243440724125},"IntroDesc":{"hash":-916762503,"hash64":17097506477781824602},"PanelID":50015,"IsSocialShow":1,"PanelDesc":{"hash":-138832527,"hash64":15261813096133285005},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037635,"hash64":16320152507821518010},"PanelBrief":{"hash":484171244,"hash64":3020608669896250884},"SortWeight":6000,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestStarChallenge.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestStarChallengePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":110202},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709223,"hash64":4409980433132750507},"TagDesc":{"hash":1452011586,"hash64":5599494084952804663},"IntroDesc":{"hash":-916762500,"hash64":17446888278122139576},"PanelID":50016,"IsSocialShow":0,"PanelDesc":{"hash":-138832524,"hash64":13188670403698538942},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037634,"hash64":13645035558105019947},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6029119],[QuestClose:6029101],[QuestClose:6029102],[QuestClose:6029103],[QuestClose:6029104],[QuestClose:6029105],[QuestClose:6029106],[QuestClose:6029107],[QuestClose:6029108],[QuestClose:6029109],[QuestClose:6029110],[QuestClose:6029111],[QuestClose:6029112],[QuestClose:6029113],[QuestClose:6029114],[QuestClose:6029115],[QuestClose:6029116],[QuestClose:6029117],[QuestClose:6029118]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestTouringCarPhoto.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestTouringCarPhotoPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110182},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709224,"hash64":5315548600992224979},"TagDesc":{"hash":1452011587,"hash64":11010178439920195509},"IntroDesc":{"hash":-916762501,"hash64":5972190333728482614},"PanelID":50017,"IsSocialShow":0,"PanelDesc":{"hash":-138832525,"hash64":12494924380281726162},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037633,"hash64":10211182188562160742},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishQuest:6027152],[QuestClose:6027205],[QuestClose:6027209],[QuestClose:6027213],[QuestClose:6027218],[QuestClose:6027219]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestFightFest.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,3],"UIPrefab":"UI/Quest/Widget/FightFestPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":251001},{"ItemNum":0,"ItemID":221007},{"ItemNum":0,"ItemID":11224},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110192},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251709209,"hash64":15397443228328790007},"TagDesc":{"hash":1452011588,"hash64":8508748527719653960},"IntroDesc":{"hash":-916762498,"hash64":8799373143382984355},"PanelID":50018,"IsSocialShow":1,"PanelDesc":{"hash":-138832522,"hash64":11753295142204430072},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661037624,"hash64":15823228488008041059},"PanelBrief":{"hash":1599916491,"hash64":7509949019658408490},"SortWeight":6000,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6026170],[QuestClose:6026171],[QuestClose:6026172],[QuestClose:6026173],[QuestClose:6026174],[QuestClose:6026181],[QuestClose:6026182],[QuestClose:6026183],[QuestClose:6026184],[QuestClose:6026185],[QuestClose:6026186],[QuestClose:6026187],[QuestClose:6026188],[QuestClose:6026189],[QuestClose:6026190],[QuestClose:6026191],[QuestClose:6026192],[QuestClose:6026193],[QuestClose:6026194],[QuestClose:6026195],[QuestClose:6026175]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestTrashCanSummon.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestTrashCanSummonPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-848424690,"hash64":3168995082755226653},"TagDesc":{"hash":1855296107,"hash64":17607340744058631250},"IntroDesc":{"hash":649321435,"hash64":13898981811228258951},"PanelID":50020,"IsSocialShow":0,"PanelDesc":{"hash":1427251411,"hash64":12128531424952563615},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257753105,"hash64":8980985552670466072},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishQuest:6028240],[QuestClose:6028101],[QuestClose:6028201],[QuestClose:6028202],[QuestClose:6028203],[QuestClose:6028204],[QuestClose:6028205],[QuestClose:6028206],[QuestClose:6028207],[QuestClose:6028208],[QuestClose:6028209],[QuestClose:6028210],[QuestClose:6028211],[QuestClose:6028212],[QuestClose:6028221],[QuestClose:6028222],[QuestClose:6028223],[QuestClose:6028224],[QuestClose:6028225],[QuestClose:6028226],[QuestClose:6028227],[QuestClose:6028228],[QuestClose:6028229],[QuestClose:6028230],[QuestClose:6028231],[QuestClose:6028232]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnSecondWorldRaidCollection.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestSecondWorldRaidCollectionPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110242},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-848424691,"hash64":1520830242709935770},"TagDesc":{"hash":1855296108,"hash64":5174287196872272490},"IntroDesc":{"hash":649321434,"hash64":4583042364089122356},"PanelID":50021,"IsSocialShow":1,"PanelDesc":{"hash":1427251410,"hash64":1328419222392606384},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257753104,"hash64":6510527477674340112},"PanelBrief":{"hash":-1485197227,"hash64":10809711615024428984},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6029201],[QuestClose:6029202],[QuestClose:6029203],[QuestClose:6029204],[QuestClose:6029205],[QuestClose:6029210],[QuestClose:6029211],[QuestClose:6029212],[QuestClose:6029213],[QuestClose:6029214],[QuestClose:6029215],[QuestClose:6029221],[QuestClose:6029222],[QuestClose:6029223],[QuestClose:6029231],[QuestClose:6029232],[QuestClose:6029233],[QuestClose:6029234],[QuestClose:6029235],[QuestClose:6029236]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMusicRhythm.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestMusicRhythm.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":220007},{"ItemNum":0,"ItemID":22003},{"ItemNum":0,"ItemID":121003},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110202},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-848424692,"hash64":752140227794981187},"TagDesc":{"hash":1855296109,"hash64":15010067808616890297},"IntroDesc":{"hash":649321437,"hash64":3448821533827562985},"PanelID":50022,"IsSocialShow":1,"PanelDesc":{"hash":1427251413,"hash64":4763470641582921445},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257753103,"hash64":1493326583890849090},"PanelBrief":{"hash":80886714,"hash64":6768495497720781172},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:8026207],[FinishQuest:6018011]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnBelogogSubmit.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestBelobogSubmitPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":402010},{"ItemNum":0,"ItemID":402015},{"ItemNum":0,"ItemID":402013},{"ItemNum":0,"ItemID":402012},{"ItemNum":0,"ItemID":402011},{"ItemNum":0,"ItemID":402009},{"ItemNum":0,"ItemID":402014},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251715752,"hash64":13603780287628283810},"TagDesc":{"hash":1452018115,"hash64":1648634418355727326},"IntroDesc":{"hash":-916755973,"hash64":2494386144336853628},"PanelID":30011,"IsSocialShow":0,"PanelDesc":{"hash":-138825997,"hash64":11935363324557523410},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661039809,"hash64":14592829992473565240},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishQuest:6029601]","TabIcon":"SpriteOutput/UI/Quest/ExpeditionAboutRanger/ImgExpeditionAboutRangerBanner.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1010206]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestPanelExpeditionAboutRanger.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251715749,"hash64":10348365584528222390},"TagDesc":{"hash":1452018112,"hash64":3150344522080317229},"IntroDesc":{"hash":-916755974,"hash64":15364063273334071450},"PanelID":30012,"IsSocialShow":0,"PanelDesc":{"hash":-138825998,"hash64":12541342997824731756},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661039812,"hash64":9041504710977525764},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6029357],[FinishQuest:6029359],[QuestClose:6029321],[QuestClose:6029322],[QuestClose:6029323],[QuestClose:6029324],[QuestClose:6029325],[QuestClose:6029326],[QuestClose:6029327],[QuestClose:6029328],[QuestClose:6029329]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestTrainParty.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestTrainPartyPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":252001},{"ItemNum":0,"ItemID":309007},{"ItemNum":0,"ItemID":221008},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110232},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-848424694,"hash64":3703536782109642395},"TagDesc":{"hash":1855296111,"hash64":16512779561984102561},"IntroDesc":{"hash":649321439,"hash64":12874285763524177376},"PanelID":50024,"IsSocialShow":1,"PanelDesc":{"hash":1427251415,"hash64":864584872507678901},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257753109,"hash64":5965500934392406211},"PanelBrief":{"hash":-1081912700,"hash64":16470892775074686509},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:8027209],[QuestClose:6029501],[QuestClose:6029502],[QuestClose:6029503],[QuestClose:6029504],[QuestClose:6029505],[QuestClose:6029506],[QuestClose:6029507],[QuestClose:6029508]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnPhotoExhibition.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestPhotoExhibitionPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-848424695,"hash64":15134084010179943606},"TagDesc":{"hash":1855296112,"hash64":3068173113578437822},"IntroDesc":{"hash":649321438,"hash64":7226081456581939852},"PanelID":50025,"IsSocialShow":1,"PanelDesc":{"hash":1427251414,"hash64":8454782870391772943},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257753108,"hash64":13020914446863380537},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6029701],[QuestClose:6029801],[QuestClose:6029802],[QuestClose:6029803],[QuestClose:6029804],[QuestClose:6029805],[QuestClose:6029806],[QuestClose:6029807],[QuestClose:6029808],[QuestClose:6029809],[QuestClose:6029810],[QuestClose:6029821],[QuestClose:6029822],[QuestClose:6029823],[QuestClose:6029824],[QuestClose:6029825],[QuestClose:6029826],[QuestClose:6029827],[QuestClose:6029828],[QuestClose:6029829],[QuestClose:6029830],[QuestClose:6029840]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFourthWorldRaidCollectionGame.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestFourthWorldRaidCollectionPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233}],"TabName":{"hash":-848424696,"hash64":8314688455229116717},"TagDesc":{"hash":1855296113,"hash64":15665379516311509434},"IntroDesc":{"hash":649321441,"hash64":7247924161095699024},"PanelID":50026,"IsSocialShow":1,"PanelDesc":{"hash":1427251417,"hash64":5077119966254632830},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257753107,"hash64":8862215689344143142},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6001,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6000801],[QuestClose:6000802],[QuestClose:6000803],[QuestClose:6000804],[QuestClose:6000805],[QuestClose:6000806],[QuestClose:6000807],[QuestClose:6000808],[QuestClose:6000809],[QuestClose:6000810],[QuestClose:6000811],[QuestClose:6000812],[QuestClose:6000813],[QuestClose:6000814],[QuestClose:6000815],[QuestClose:6000816],[QuestClose:6000817],[QuestClose:6000818],[QuestClose:6000819],[QuestClose:6000820],[QuestClose:6000821]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnTVSeason2.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestTelevisionSeason2Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110252},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":314371517,"hash64":11281654090984813692},"TagDesc":{"hash":-1276872792,"hash64":16235087465151487334},"IntroDesc":{"hash":1812121878,"hash64":9640696593780738398},"PanelID":40006,"IsSocialShow":1,"PanelDesc":{"hash":-1704915442,"hash64":6958823594015929178},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94950492,"hash64":7935023037242990453},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6029841],[QuestClose:6029842],[QuestClose:6029843],[QuestClose:6029844],[QuestClose:6029845],[QuestClose:6029846],[QuestClose:6029847],[QuestClose:6029848],[QuestClose:6029849],[QuestClose:6029850],[QuestClose:6029851],[QuestClose:6029852],[QuestClose:6029853],[QuestClose:6029854],[QuestClose:6029855],[QuestClose:6029856],[QuestClose:6029857],[QuestClose:6029858],[QuestClose:6029859],[QuestClose:6029860]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestAmphoreusActivityTimeLimit.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/AmphoreusActivityQuestTimeLimitPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":110202},{"ItemNum":0,"ItemID":233}],"TabName":{"hash":-1251715750,"hash64":4030004696910562214},"TagDesc":{"hash":1452018113,"hash64":14949839885607315809},"IntroDesc":{"hash":-916755975,"hash64":4354630503739517033},"PanelID":30013,"IsSocialShow":0,"PanelDesc":{"hash":-138825999,"hash64":16072518184429898619},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661039811,"hash64":2169877770425394549},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[QuestClose:6050201],[QuestClose:6050202],[QuestClose:6050203],[QuestClose:6050204],[QuestClose:6050206],[QuestClose:6050207],[QuestClose:6050208],[QuestClose:6050209],[QuestClose:6050210],[QuestClose:6050211],[QuestClose:6050212],[QuestClose:6050213],[QuestClose:6050214],[QuestClose:6050215],[QuestClose:6050216],[QuestClose:6050217],[QuestClose:6050218],[QuestClose:6050219],[QuestClose:6050220],[QuestClose:6050221],[QuestClose:6050222],[QuestClose:6050223],[QuestClose:6050224],[QuestClose:6050225],[QuestClose:6050226],[QuestClose:6050227],[QuestClose:6050121],[QuestClose:6050122],[QuestClose:6050123],[QuestClose:6050124],[QuestClose:6050125],[QuestClose:6050102],[QuestClose:6050103],[QuestClose:6050104],[QuestClose:6050105],[QuestClose:6050106],[QuestClose:6050107],[QuestClose:6050108],[QuestClose:6050109],[QuestClose:6050110]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestPlanetFes.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestPlanetFesPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":22004},{"ItemNum":0,"ItemID":121004},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110252},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-848424682,"hash64":5208708284700061435},"TagDesc":{"hash":1855296115,"hash64":3087307311305499894},"IntroDesc":{"hash":649321443,"hash64":9462376273714423341},"PanelID":50028,"IsSocialShow":1,"PanelDesc":{"hash":1427251419,"hash64":8140529406565502885},"ActivityThemeID":1003,"GuideVideoID":0,"TitleName":{"hash":-1257753097,"hash64":4978237476719160110},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6005,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:8031407],[FinishQuest:6018013]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnAmphoreusCurio.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestAmphoreusCurioPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":403013},{"ItemNum":0,"ItemID":402033},{"ItemNum":0,"ItemID":402032},{"ItemNum":0,"ItemID":401032},{"ItemNum":0,"ItemID":408440},{"ItemNum":0,"ItemID":408439},{"ItemNum":0,"ItemID":401031},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-1251715747,"hash64":6793420030815866063},"TagDesc":{"hash":1452018110,"hash64":17106966369433917559},"IntroDesc":{"hash":-916755976,"hash64":6138521685619118143},"PanelID":30014,"IsSocialShow":0,"PanelDesc":{"hash":-138826000,"hash64":16452088437602696647},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1661039806,"hash64":16212492524315058613},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6051000],[QuestClose:6051001],[QuestClose:6051002],[QuestClose:6051003],[QuestClose:6051011],[QuestClose:6051012],[QuestClose:6051013],[QuestClose:6051014],[QuestClose:6051015],[QuestClose:6051016],[QuestClose:6051017],[QuestClose:6051018],[QuestClose:6051020],[FinishQuest:6051023]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnActivityMarble.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestActivityMarblePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110252},{"ItemNum":0,"ItemID":251002}],"TabName":{"hash":-848424683,"hash64":7561963378597885500},"TagDesc":{"hash":1855296116,"hash64":260102790042531358},"IntroDesc":{"hash":649321442,"hash64":13798430383815700870},"PanelID":50029,"IsSocialShow":1,"PanelDesc":{"hash":1427251418,"hash64":12738078888693015958},"ActivityThemeID":0,"GuideVideoID":20001,"TitleName":{"hash":-1257753096,"hash64":13498719250948316921},"PanelBrief":{"hash":-1128966867,"hash64":7600034926358083655},"SortWeight":6003,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6060100],[QuestClose:6060101],[QuestClose:6060102],[QuestClose:6060103],[QuestClose:6060104],[QuestClose:6060105],[QuestClose:6060106],[QuestClose:6060107],[QuestClose:6060108],[QuestClose:6060109],[QuestClose:6060110],[QuestClose:6060111],[QuestClose:6060112],[QuestClose:6060113],[QuestClose:6060114],[QuestClose:6060115],[QuestClose:6060116],[QuestClose:6060117],[QuestClose:6060118],[QuestClose:6060119],[QuestClose:6060120],[QuestClose:6060121],[QuestClose:6060122],[QuestClose:6060123],[QuestClose:6060124],[QuestClose:6060125],[QuestClose:6060126],[QuestClose:6060127],[QuestClose:6060128]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestStarChallengeV2.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestStarChallengeV2Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":110202},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":1880458662,"hash64":5962629575234808500},"TagDesc":{"hash":289212169,"hash64":6722118987235500957},"IntroDesc":{"hash":-2079561919,"hash64":10278187283926227879},"PanelID":50033,"IsSocialShow":1,"PanelDesc":{"hash":-1301631943,"hash64":14330020595542678225},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471130253,"hash64":610975640562862677},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[FinishQuest:6029918],[QuestClose:6029906],[QuestClose:6029912],[QuestClose:6029916],[QuestClose:6029919],[QuestClose:6029928]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestChimera.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestChimeraPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":220008},{"ItemNum":0,"ItemID":309008},{"ItemNum":0,"ItemID":110232}],"TabName":{"hash":1880458661,"hash64":8579290181363793485},"TagDesc":{"hash":289212170,"hash64":2141028018983078205},"IntroDesc":{"hash":-2079561916,"hash64":7624657633201346116},"PanelID":50034,"IsSocialShow":1,"PanelDesc":{"hash":-1301631940,"hash64":1298885251895109357},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471130246,"hash64":12944787375085222041},"PanelBrief":{"hash":-1081912699,"hash64":8213795462780777322},"SortWeight":6003,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6070216],[QuestClose:6070217],[QuestClose:6070218],[QuestClose:6070219],[QuestClose:6070220],[QuestClose:6070221],[QuestClose:6070222],[QuestClose:6070223],[QuestClose:6070224],[QuestClose:6070225],[QuestClose:6070226],[QuestClose:6070227],[QuestClose:6070228],[QuestClose:6070229],[QuestClose:6070230],[QuestClose:6070231],[QuestClose:6070232],[QuestClose:6070233],[QuestClose:6070241],[QuestClose:6070242],[QuestClose:6070243],[QuestClose:6070244],[QuestClose:6070236]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnEvolveBuildSC.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestEvolveBuildSCPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":202033},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":309009},{"ItemNum":0,"ItemID":110252}],"TabName":{"hash":1880458660,"hash64":5098558615037895293},"TagDesc":{"hash":289212171,"hash64":6958941324876306889},"IntroDesc":{"hash":-2079561917,"hash64":16672802850442942044},"PanelID":50035,"IsSocialShow":1,"PanelDesc":{"hash":-1301631941,"hash64":10569168226900115019},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471130247,"hash64":862008975618419686},"PanelBrief":{"hash":484171242,"hash64":12362345746774459219},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6051100],[QuestClose:6051101],[QuestClose:6051102],[QuestClose:6051103],[QuestClose:6051104],[QuestClose:6051105],[QuestClose:6051106],[QuestClose:6051107],[QuestClose:6051108],[QuestClose:6051109],[QuestClose:6051110],[QuestClose:6051111],[QuestClose:6051112],[QuestClose:6051113],[QuestClose:6051114],[QuestClose:6051115],[QuestClose:6051116],[QuestClose:6051117]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestParkour.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestParkourPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":1880458672,"hash64":4669483862160398371},"TagDesc":{"hash":289212175,"hash64":1938106008416346913},"IntroDesc":{"hash":-2079561913,"hash64":9361900660767531930},"PanelID":50039,"IsSocialShow":1,"PanelDesc":{"hash":-1301631937,"hash64":1716090247786198218},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1471130259,"hash64":5274515772813532503},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6070401],[QuestClose:6070402],[QuestClose:6070403],[QuestClose:6070404],[QuestClose:6070405],[QuestClose:6070406],[QuestClose:6070407],[QuestClose:6070408],[QuestClose:6070411],[QuestClose:6070412],[QuestClose:6070413],[QuestClose:6070414],[QuestClose:6070415],[QuestClose:6070416],[QuestClose:6070417],[QuestClose:6070418],[FinishMainMission:8034101]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMatchThree.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestMatchThreePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110182},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":202035}],"TabName":{"hash":-2011224105,"hash64":18277399626893269600},"TagDesc":{"hash":1048727054,"hash64":15590542831565870134},"IntroDesc":{"hash":-513477980,"hash64":14906175760211806613},"PanelID":50041,"IsSocialShow":1,"PanelDesc":{"hash":264451996,"hash64":13665772890350404371},"ActivityThemeID":0,"GuideVideoID":20002,"TitleName":{"hash":-2064322158,"hash64":1771446633457748186},"PanelBrief":{"hash":-1485197221,"hash64":844831733065630253},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6070316],[QuestClose:6070317],[QuestClose:6070318],[QuestClose:6070319],[QuestClose:6070320],[QuestClose:6070321],[QuestClose:6070322],[QuestClose:6070323],[QuestClose:6070324],[QuestClose:6070851],[QuestClose:6070852],[QuestClose:6070854],[QuestClose:6070861],[QuestClose:6070862],[QuestClose:6070863],[QuestClose:6070864],[QuestClose:6070871],[QuestClose:6070872],[QuestClose:6070873],[QuestClose:6070874],[QuestClose:6070881],[QuestClose:6070882],[QuestClose:6070883],[QuestClose:6070884],[QuestClose:6070891],[QuestClose:6070393],[QuestClose:6070394],[QuestClose:6070395],[QuestClose:6070396],[QuestClose:6070397],[FinishMainMission:8035105]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestElfRestaurant.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/UI3D/ElfRestaurant/Prefabs/UI3D_QuestElfRestaurant.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":221012},{"ItemNum":0,"ItemID":22005},{"ItemNum":0,"ItemID":121005}],"TabName":{"hash":-2011224106,"hash64":4095160213085154342},"TagDesc":{"hash":1048727055,"hash64":2719574792065474821},"IntroDesc":{"hash":-513477977,"hash64":16891265086765086182},"PanelID":50042,"IsSocialShow":1,"PanelDesc":{"hash":264451999,"hash64":18416708382573371390},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064322157,"hash64":5358519477364594771},"PanelBrief":{"hash":80886720,"hash64":6583811983564864406},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishQuest:6071001],[FinishQuest:6071002]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestAmphoreusActivityTimeLimit.png","UnlockConditions":"","ActivityTagList":[1,3],"UIPrefab":"UI/Quest/Widget/AmphoreusActivityQuestTimeLimitPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":250607},{"ItemNum":0,"ItemID":250608},{"ItemNum":0,"ItemID":110182}],"TabName":{"hash":-2011224109,"hash64":5070134393616235709},"TagDesc":{"hash":1048727058,"hash64":13437136952585634196},"IntroDesc":{"hash":-513477976,"hash64":7471792020978707478},"PanelID":50045,"IsSocialShow":1,"PanelDesc":{"hash":264452000,"hash64":17868047706278429065},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064322162,"hash64":14794283837123402767},"PanelBrief":{"hash":484171247,"hash64":15716583475878076924},"SortWeight":7930,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRoleStrengthen.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRoleStrengthenPanel.prefab","DisplayItemList":[],"TabName":{"hash":-2011224111,"hash64":9363466144940244331},"TagDesc":{"hash":1048727060,"hash64":11963676554402597008},"IntroDesc":{"hash":-513477974,"hash64":13590686741019759009},"PanelID":50047,"IsSocialShow":0,"PanelDesc":{"hash":264452002,"hash64":16245485439221790963},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064322160,"hash64":8310023205940432802},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5800,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[QuestClose:6070613],[QuestClose:6070614],[QuestClose:6070615],[QuestClose:6070616],[QuestClose:6070617],[QuestClose:6070618],[QuestClose:6070612],[QuestClose:6070637],[QuestClose:6070619]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestDrinkMakerSecond.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestDrinkMakerSecondPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110232},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":717659244,"hash64":2394589505436403215},"TagDesc":{"hash":-517356881,"hash64":16453200683685260850},"IntroDesc":{"hash":1052605967,"hash64":14640611627714653738},"PanelID":50057,"IsSocialShow":1,"PanelDesc":{"hash":1830535943,"hash64":5453556181282670705},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":664561195,"hash64":457918584139325004},"PanelBrief":{"hash":-678628166,"hash64":1621251175958386590},"SortWeight":6002,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[FinishQuest:6070901]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMedicineAssignment.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestMedicineAssignmentPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":1120943776,"hash64":4437880667438573284},"TagDesc":{"hash":-114072359,"hash64":13387473717026938376},"IntroDesc":{"hash":-1676277391,"hash64":16466825323028101815},"PanelID":50062,"IsSocialShow":0,"PanelDesc":{"hash":-898347415,"hash64":2533328282400992302},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1067845725,"hash64":3782277409522256649},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnGridFightS1.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/GridFight/QuestGridFightPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":238},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":202041},{"ItemNum":0,"ItemID":110101},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":295601}],"TabName":{"hash":1618334463,"hash64":6896042815692211638},"TagDesc":{"hash":27092316,"hash64":2382166180456239949},"IntroDesc":{"hash":-896557354,"hash64":7693488975416237801},"PanelID":71002,"IsSocialShow":0,"PanelDesc":{"hash":1286091086,"hash64":15318506444232829493},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1209010400,"hash64":4397076525114349993},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5999,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6071101],[QuestClose:6071102],[QuestClose:6071103],[QuestClose:6071104],[QuestClose:6071105],[QuestClose:6071106],[QuestClose:6071107],[QuestClose:6071108],[QuestClose:6071109],[QuestClose:6071110],[QuestClose:6071111],[QuestClose:6071112],[QuestClose:6071113],[QuestClose:6071114],[QuestClose:6071115],[QuestClose:6071116],[QuestClose:6071117],[QuestClose:6071118],[QuestClose:6071119],[FinishMainMission:8036104]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestHipplen.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestHipplenPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":110252},{"ItemNum":0,"ItemID":202040}],"TabName":{"hash":1120943775,"hash64":11586132683987273998},"TagDesc":{"hash":-114072358,"hash64":3571374029061846399},"IntroDesc":{"hash":-1676277392,"hash64":7141609595391604108},"PanelID":50063,"IsSocialShow":1,"PanelDesc":{"hash":-898347416,"hash64":1454506668409130604},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1067845726,"hash64":13196003465255183590},"PanelBrief":{"hash":1646970659,"hash64":1416449840702990881},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6070911],[QuestClose:6070912],[QuestClose:6070913],[QuestClose:6070921],[QuestClose:6070922],[QuestClose:6070923],[QuestClose:6070931],[QuestClose:6070932],[QuestClose:6070933],[QuestClose:6070941],[QuestClose:6070942],[QuestClose:6070943],[QuestClose:6070951],[QuestClose:6070952],[QuestClose:6070953],[QuestClose:6070961],[QuestClose:6070962],[QuestClose:6070963],[QuestClose:6070971],[QuestClose:6070972],[QuestClose:6070973],[QuestClose:6070999]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestActivityElationBattle.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestActivityElationBattlePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":110212},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":1120943774,"hash64":8227518303751728758},"TagDesc":{"hash":-114072357,"hash64":9733520726127978242},"IntroDesc":{"hash":-1676277389,"hash64":7079198567069696558},"PanelID":50064,"IsSocialShow":1,"PanelDesc":{"hash":-898347413,"hash64":8144496238012914506},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1067845719,"hash64":8623538350530096737},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":true,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6071201],[QuestClose:6071202],[QuestClose:6071203],[QuestClose:6071204],[QuestClose:6071205],[QuestClose:6071211]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnActivityMarble.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestEvolveBuildSCPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110252},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":1120943771,"hash64":1577888752794302866},"TagDesc":{"hash":-114072354,"hash64":5291466961340371188},"IntroDesc":{"hash":-1676277388,"hash64":4866885868230172816},"PanelID":50067,"IsSocialShow":1,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1067845722,"hash64":2927461906676664772},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6073001],[QuestClose:6073002],[QuestClose:6073003],[QuestClose:6073004],[QuestClose:6073005],[QuestClose:6073006],[QuestClose:6073007],[QuestClose:6073008],[QuestClose:6073009],[FinishMainMission:8037202]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestCakeRace.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestCakeRacePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":110252},{"ItemNum":0,"ItemID":227002}],"TabName":{"hash":1120943786,"hash64":16324057696465344265},"TagDesc":{"hash":-114072353,"hash64":1752076008357463878},"IntroDesc":{"hash":-1676277385,"hash64":5113715265137103304},"PanelID":50068,"IsSocialShow":1,"PanelDesc":{"hash":-898347409,"hash64":17861952873189987132},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1067845731,"hash64":3562846335412181750},"PanelBrief":{"hash":1599916492,"hash64":12025644648475729391},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6072113],[QuestClose:6072114],[QuestClose:6072115],[QuestClose:6072116],[QuestClose:6072117],[QuestClose:6072118],[QuestClose:6072119],[QuestClose:6072120],[QuestClose:6072121],[QuestClose:6072122],[QuestClose:6072123],[QuestClose:6072124],[QuestClose:6072125],[QuestClose:6072126],[QuestClose:6072127],[QuestClose:6072128],[QuestClose:6072129],[QuestClose:6072130],[QuestClose:6072131],[QuestClose:6072132],[QuestClose:6072137],[QuestClose:6072146],[QuestClose:6072147],[QuestClose:6072148],[QuestClose:6072149],[QuestClose:6072150],[QuestClose:6072151],[QuestClose:6072152],[QuestClose:6072153],[QuestClose:6072154],[QuestClose:6072155],[QuestClose:6072156],[QuestClose:6072157],[QuestClose:6072158],[QuestClose:6072159],[QuestClose:6072160]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnLocalLegend.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestLocalLegendPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":-445140163,"hash64":2011424153139510462},"TagDesc":{"hash":-1680156302,"hash64":16953594646558454192},"IntroDesc":{"hash":-110193452,"hash64":3982436946326073539},"PanelID":50070,"IsSocialShow":1,"PanelDesc":{"hash":667736524,"hash64":18259561069008679525},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-498238218,"hash64":9169014149406526135},"PanelBrief":{"hash":1243686133,"hash64":676402354613315621},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnActivityRelicBox.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestActivityRelicBoxPanel.prefab","DisplayItemList":[],"TabName":{"hash":-445140165,"hash64":10631102614161703035},"TagDesc":{"hash":-1680156300,"hash64":1047189004850882462},"IntroDesc":{"hash":-110193450,"hash64":6608172212858547674},"PanelID":50072,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-498238216,"hash64":710638285054939279},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5998,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[QuestClose:6075001],[QuestClose:6075002],[QuestClose:6075003],[QuestClose:6075004],[QuestClose:6075005],[QuestClose:6075006],[QuestClose:6075007],[QuestClose:6075008],[QuestClose:6075009],[QuestClose:6075010],[QuestClose:6075011],[QuestClose:6075012],[QuestClose:6075013],[QuestClose:6075014],[QuestClose:6075015],[QuestClose:6075016],[QuestClose:6075017],[QuestClose:6075018],[QuestClose:6075019],[FinishQuest:6075020],[FinishMainMission:8040101]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestDiceCombat.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestDiceCombatPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":110262},{"ItemNum":0,"ItemID":227005},{"ItemNum":0,"ItemID":309010}],"TabName":{"hash":-445140166,"hash64":10044513473880102342},"TagDesc":{"hash":-1680156299,"hash64":9130044867721622975},"IntroDesc":{"hash":-110193451,"hash64":7993744737913747963},"PanelID":50073,"IsSocialShow":1,"PanelDesc":{"hash":667736525,"hash64":8652372522314969284},"ActivityThemeID":0,"GuideVideoID":50073,"TitleName":{"hash":-498238215,"hash64":2616061111640002103},"PanelBrief":{"hash":1646970660,"hash64":15253114942336417187},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6074001],[QuestClose:6074002],[QuestClose:6074003],[QuestClose:6074004],[QuestClose:6074005],[QuestClose:6074006],[QuestClose:6074007],[QuestClose:6074008],[QuestClose:6074009],[QuestClose:6074010],[QuestClose:6074011],[QuestClose:6074012],[QuestClose:6074013],[QuestClose:6074014],[QuestClose:6074015],[QuestClose:6074016],[QuestClose:6074017],[QuestClose:6074018],[QuestClose:6074019],[QuestClose:6074020],[QuestClose:6074021],[QuestClose:6074022],[QuestClose:6074023],[FinishMainMission:8038108]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestChimeraDuel.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestChimeraDuelPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":110222},{"ItemNum":0,"ItemID":220009}],"TabName":{"hash":-445140167,"hash64":10595838108849825400},"TagDesc":{"hash":-1680156298,"hash64":1133456985970888045},"IntroDesc":{"hash":-110193448,"hash64":9469423012316764070},"PanelID":50074,"IsSocialShow":1,"PanelDesc":{"hash":667736528,"hash64":15558500750630633545},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-498238222,"hash64":12947399311807191911},"PanelBrief":{"hash":-1081912695,"hash64":15289702391228869580},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRoleStrengthen2.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRoleStrengthenPanel.prefab","DisplayItemList":[],"TabName":{"hash":-445140156,"hash64":17339932577720591001},"TagDesc":{"hash":-1680156293,"hash64":12294635109491130489},"IntroDesc":{"hash":-110193445,"hash64":6543263797424454570},"PanelID":50079,"IsSocialShow":0,"PanelDesc":{"hash":667736531,"hash64":8959451460299085975},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-498238209,"hash64":13793872313107886294},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5930,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[FinishMainMission:8042106],[QuestClose:8062101],[QuestClose:8062102],[QuestClose:8062103],[QuestClose:8062104],[QuestClose:8062105],[QuestClose:8062106],[QuestClose:8062107],[QuestClose:8062201],[QuestClose:8062202],[QuestClose:8062203],[QuestClose:8062204],[QuestClose:8062205],[QuestClose:8062301],[QuestClose:8062302],[QuestClose:8062303],[QuestClose:8062304],[QuestClose:8062305],[QuestClose:8062306],[QuestClose:8062401],[QuestClose:8062402],[QuestClose:8062403],[QuestClose:8062404],[QuestClose:8062405],[QuestClose:8062501],[QuestClose:8062502],[QuestClose:8062503],[QuestClose:8062504],[QuestClose:8062505],[QuestClose:8062506]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestPlanetFes.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestIdleLivePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":22007},{"ItemNum":0,"ItemID":121007},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110262},{"ItemNum":0,"ItemID":295611},{"ItemNum":0,"ItemID":2}],"TabName":{"hash":670605084,"hash64":3478784351521897340},"TagDesc":{"hash":-920641415,"hash64":3715870167169029570},"IntroDesc":{"hash":1455890489,"hash64":1715094071438983888},"PanelID":50080,"IsSocialShow":1,"PanelDesc":{"hash":-1348686111,"hash64":2810274075034293749},"ActivityThemeID":1004,"GuideVideoID":0,"TitleName":{"hash":261276669,"hash64":14352643213026278385},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6005,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6076001],[QuestClose:6076002],[QuestClose:6076003],[QuestClose:6076004],[QuestClose:6076005],[QuestClose:6076006],[QuestClose:6076007],[QuestClose:6076008],[QuestClose:6076009],[QuestClose:6076010],[QuestClose:6076011],[QuestClose:6076012],[QuestClose:6076013],[QuestClose:6076014],[QuestClose:6076015]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestPlanarcadiaActivityTimeLimit.png","UnlockConditions":"[PlayerLevel:21],[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/PlanarcadiaActivityQuestTimeLimitPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":110262},{"ItemNum":0,"ItemID":233}],"TabName":{"hash":670605079,"hash64":15421897741117627020},"TagDesc":{"hash":-920641410,"hash64":8403434250998055876},"IntroDesc":{"hash":1455890492,"hash64":15156291593255155881},"PanelID":50085,"IsSocialShow":0,"PanelDesc":{"hash":-1348686108,"hash64":721068339556399843},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":261276666,"hash64":3133062588735493461},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5920,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnActivityActive.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestActivityActivePanel.prefab","DisplayItemList":[],"TabName":{"hash":670605078,"hash64":9913730933107319109},"TagDesc":{"hash":-920641409,"hash64":13028088269772409266},"IntroDesc":{"hash":1455890495,"hash64":11171527898770699963},"PanelID":50086,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":261276667,"hash64":7360984141478145164},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6010,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[QuestClose:6080000],[QuestClose:6080001],[QuestClose:6080002],[QuestClose:6080003],[QuestClose:6080004],[QuestClose:6080005],[QuestClose:6080006],[QuestClose:6080007],[QuestClose:6080008],[QuestClose:6080009],[QuestClose:6080010],[QuestClose:6080011],[FinishQuest:6080012],[FinishMainMission:8041102]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnChenLingBattle.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestChenLingBattlePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110272},{"ItemNum":0,"ItemID":220010}],"TabName":{"hash":-895478859,"hash64":1097760761907954197},"TagDesc":{"hash":1808241942,"hash64":15375694188313007552},"IntroDesc":{"hash":-1272992864,"hash64":10403411107938378818},"PanelID":50092,"IsSocialShow":1,"PanelDesc":{"hash":217397832,"hash64":3884700144666787224},"ActivityThemeID":0,"GuideVideoID":50092,"TitleName":{"hash":-1304807270,"hash64":10254101123659427412},"PanelBrief":{"hash":80886709,"hash64":10010674079585120662},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnCakeCatch.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestCakeCatchPanel.prefab","DisplayItemList":[],"TabName":{"hash":-895478861,"hash64":6574384354919728397},"TagDesc":{"hash":1808241944,"hash64":4035641365907811975},"IntroDesc":{"hash":-1272992862,"hash64":12006690803432934839},"PanelID":50094,"IsSocialShow":0,"PanelDesc":{"hash":217397834,"hash64":5238553053641942117},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1304807276,"hash64":8941584531727916485},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5998,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnActivityRelicBox.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestActivityRelicBoxPanel.prefab","DisplayItemList":[],"TabName":{"hash":-895478850,"hash64":3975268508518749605},"TagDesc":{"hash":1808241949,"hash64":7606696570037578040},"IntroDesc":{"hash":-1272992859,"hash64":3137782300613595875},"PanelID":50099,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1304807263,"hash64":16391110989602387472},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5997,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnRoleStrengthen3.png","UnlockConditions":"[FinishMainMission:1000510]","ActivityTagList":[],"UIPrefab":"UI/Quest/Widget/QuestRoleStrengthenPanel.prefab","DisplayItemList":[],"TabName":{"hash":314374627,"hash64":1077028159665901489},"TagDesc":{"hash":-1276871678,"hash64":10521679199206086163},"IntroDesc":{"hash":1812120880,"hash64":16857442864788493554},"PanelID":50100,"IsSocialShow":0,"PanelDesc":{"hash":-1704916440,"hash64":11900189382414016537},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953722,"hash64":17885353688420204852},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5930,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":false,"FinishType":0}, + {"FinishConditions":"[QuestClose:6081001],[QuestClose:6081002],[QuestClose:6081003],[QuestClose:6081004],[QuestClose:6081005],[QuestClose:6081006],[QuestClose:6081007],[QuestClose:6081008],[QuestClose:6081009],[QuestClose:6081010],[QuestClose:6081011],[QuestClose:6081012],[QuestClose:6081013],[QuestClose:6081014],[QuestClose:6081015],[QuestClose:6081016],[QuestClose:6081101],[QuestClose:6081102],[QuestClose:6081103],[QuestClose:6081104],[QuestClose:6081105],[QuestClose:6081106],[QuestClose:6081107],[QuestClose:6081108],[QuestClose:6081109],[FinishMainMission:8042202]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestDiceCombatV2.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestDiceCombatPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110262}],"TabName":{"hash":314374628,"hash64":5347851262732727826},"TagDesc":{"hash":-1276871679,"hash64":62709592767807898},"IntroDesc":{"hash":1812120881,"hash64":3958057633066029530},"PanelID":50101,"IsSocialShow":1,"PanelDesc":{"hash":-1704916439,"hash64":16410665679968365552},"ActivityThemeID":0,"GuideVideoID":50101,"TitleName":{"hash":-94953723,"hash64":8443888814914560302},"PanelBrief":{"hash":1263889106,"hash64":2149015801870877254},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6083000], [QuestClose:6083001], [QuestClose:6083002], [QuestClose:6083003], [QuestClose:6083004], [QuestClose:6083005], [QuestClose:6083006], [QuestClose:6083007], [QuestClose:6083008], [QuestClose:6083009], [QuestClose:6083010], [QuestClose:6083011], [QuestClose:6083012], [QuestClose:6083013], [QuestClose:6083014], [QuestClose:6083015], [QuestClose:6083016]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnExpeditionBattle.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestExpeditionBattlePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":235}],"TabName":{"hash":314374621,"hash64":2094333369230491835},"TagDesc":{"hash":-1276871672,"hash64":11739327628585667923},"IntroDesc":{"hash":1812120886,"hash64":12567095598753636075},"PanelID":50106,"IsSocialShow":1,"PanelDesc":{"hash":-1704916434,"hash64":8359758202806873163},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-94953724,"hash64":15455047986771230602},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6086001],[QuestClose:6086002],[QuestClose:6086003],[QuestClose:6086004],[QuestClose:6086005],[QuestClose:6086006],[QuestClose:6086007],[QuestClose:6086008],[QuestClose:6086009],[QuestClose:6086010],[QuestClose:6086011],[QuestClose:6086012],[QuestClose:6086013],[QuestClose:6086014]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestChenLingFes.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestChenLingFesPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110312}],"TabName":{"hash":314374622,"hash64":1381082418260032532},"TagDesc":{"hash":-1276871673,"hash64":15421112573002061938},"IntroDesc":{"hash":1812120887,"hash64":1397215431784488512},"PanelID":50107,"IsSocialShow":1,"PanelDesc":{"hash":-1704916433,"hash64":466098003163582753},"ActivityThemeID":0,"GuideVideoID":50107,"TitleName":{"hash":-94953725,"hash64":4157160185701209041},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6051200],[QuestClose:6051201],[QuestClose:6051202],[QuestClose:6051203],[QuestClose:6051204],[QuestClose:6051205],[QuestClose:6051206],[QuestClose:6051207],[QuestClose:6051208],[QuestClose:6051209],[QuestClose:6051211],[QuestClose:6051212],[QuestClose:6051213],[QuestClose:6051214],[QuestClose:6051215],[QuestClose:6051221],[QuestClose:6051222],[QuestClose:6051223],[QuestClose:6051224],[QuestClose:6051225],[QuestClose:6051226],[QuestClose:6051227],[QuestClose:6051228],[QuestClose:6051229],[QuestClose:6051230],[QuestClose:6051233]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestB51Racing.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestB51RacingPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110262}],"TabName":{"hash":-1251709313,"hash64":9238417335849675207},"TagDesc":{"hash":1452011676,"hash64":13061202506282449041},"IntroDesc":{"hash":-916762474,"hash64":10386092363828754143},"PanelID":50111,"IsSocialShow":1,"PanelDesc":{"hash":-138832498,"hash64":11422330580879926730},"ActivityThemeID":0,"GuideVideoID":5011104,"TitleName":{"hash":-1661037664,"hash64":3265456048449077031},"PanelBrief":{"hash":1263889107,"hash64":7141162385098297822},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6085000],[QuestClose:6085001],[QuestClose:6085002],[QuestClose:6085003],[QuestClose:6085004],[QuestClose:6085005],[QuestClose:6085006],[QuestClose:6085007],[QuestClose:6085008],[QuestClose:6085009],[QuestClose:6085010],[QuestClose:6085011]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestPixAir.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestPixAirPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110312},{"ItemNum":0,"ItemID":220012}],"TabName":{"hash":-1251709316,"hash64":10826192025220988733},"TagDesc":{"hash":1452011679,"hash64":6974445125800299864},"IntroDesc":{"hash":-916762473,"hash64":14403557522556996348},"PanelID":50112,"IsSocialShow":1,"PanelDesc":{"hash":-138832497,"hash64":4835770118395330025},"ActivityThemeID":0,"GuideVideoID":50201,"TitleName":{"hash":-1661037661,"hash64":16479921834632441907},"PanelBrief":{"hash":1667173634,"hash64":7605490882364907913},"SortWeight":5999,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6087019],[QuestClose:6087110],[QuestClose:6087111]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestTeamTower.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[2],"UIPrefab":"UI/Quest/Widget/QuestTeamTowerPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110292}],"TabName":{"hash":-1251709318,"hash64":15086008169609972755},"TagDesc":{"hash":1452011681,"hash64":12532505297336221363},"IntroDesc":{"hash":-916762471,"hash64":1931396367281687432},"PanelID":50114,"IsSocialShow":1,"PanelDesc":{"hash":-138832495,"hash64":1579050372348647964},"ActivityThemeID":0,"GuideVideoID":5011412,"TitleName":{"hash":-1661037667,"hash64":6494210642399399382},"PanelBrief":{"hash":504374220,"hash64":3703228586495952800},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6088039]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestAmphoreusActivityTimeLimit.png","UnlockConditions":"","ActivityTagList":[1,3],"UIPrefab":"UI/Quest/Widget/AmphoreusActivityQuestTimeLimitPanel.prefab","DisplayItemList":[],"TabName":{"hash":0,"hash64":0},"TagDesc":{"hash":1452011683,"hash64":11641390584242863613},"IntroDesc":{"hash":0,"hash64":0},"PanelID":50116,"IsSocialShow":0,"PanelDesc":{"hash":0,"hash64":0},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":0,"hash64":0},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7930,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6088098],[QuestClose:6088099],[QuestClose:6088100],[QuestClose:6088101],[QuestClose:6088102],[QuestClose:6088103],[QuestClose:6088104],[QuestClose:6088105],[QuestClose:6088106],[QuestClose:6088107],[QuestClose:6088108],[QuestClose:6088109],[QuestClose:6088110],[QuestClose:6088111],[QuestClose:6088112],[QuestClose:6088113],[QuestClose:6088114],[QuestClose:6088115],[QuestClose:6088116],[QuestClose:6088117],[QuestClose:6088118],[QuestClose:6088119],[QuestClose:6088120]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestMechCraft.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestMechCraftPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110262}],"TabName":{"hash":1880458566,"hash64":6958762709850968366},"TagDesc":{"hash":289212265,"hash64":6356781738128993832},"IntroDesc":{"hash":-2079561887,"hash64":14993727815020313233},"PanelID":50132,"IsSocialShow":0,"PanelDesc":{"hash":-1301631911,"hash64":7838961971473879696},"ActivityThemeID":0,"GuideVideoID":5011501,"TitleName":{"hash":1471130221,"hash64":8990547442537511700},"PanelBrief":{"hash":1667173632,"hash64":17685192940558252969},"SortWeight":6000,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6088076],[QuestClose:6088077],[QuestClose:6088078],[QuestClose:6088079],[QuestClose:6088080],[QuestClose:6088081],[QuestClose:6088083],[QuestClose:6088082],[QuestClose:6088084],[QuestClose:6088085],[QuestClose:6088086],[QuestClose:6088087],[QuestClose:6088088],[QuestClose:6088089],[QuestClose:6088090],[QuestClose:6088091],[QuestClose:6088093],[QuestClose:6088092],[QuestClose:6088094],[QuestClose:6088095],[QuestClose:6088097]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnFinalityBattle.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestFinalityBattlePanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":235}],"TabName":{"hash":-848424790,"hash64":2020947863102223095},"TagDesc":{"hash":1855296207,"hash64":2349639060947297221},"IntroDesc":{"hash":649321471,"hash64":8875466170839851322},"PanelID":50125,"IsSocialShow":1,"PanelDesc":{"hash":1427251447,"hash64":8528019054498995946},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-1257753141,"hash64":12091384579636820950},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":6002,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6089009]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestBlindBox.png","UnlockConditions":"[PlayerLevel:4]","ActivityTagList":[2],"UIPrefab":"Assets/AsbRes/UI/Quest/Widget/QuestBlindBoxPanel.prefab","DisplayItemList":[],"TabName":{"hash":1880458564,"hash64":7162233255424057948},"TagDesc":{"hash":289212267,"hash64":2281984265029881739},"IntroDesc":{"hash":-2079561885,"hash64":18066099345062556358},"PanelID":50134,"IsSocialShow":1,"PanelDesc":{"hash":-1301631909,"hash64":10488518913253269111},"ActivityThemeID":0,"GuideVideoID":50134,"TitleName":{"hash":1471130215,"hash64":17914699929276421376},"PanelBrief":{"hash":504374218,"hash64":9115749791523785104},"SortWeight":5998,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":1}, + {"FinishConditions":"[QuestClose:6090001],[QuestClose:6090002],[QuestClose:6090003],[QuestClose:6090004],[QuestClose:6090005],[QuestClose:6090014]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnComicDessert.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[1,2],"UIPrefab":"UI/Quest/Widget/QuestComicDessertPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110262},{"ItemNum":0,"ItemID":220013}],"TabName":{"hash":-2011224203,"hash64":143653261616862737},"TagDesc":{"hash":1048727152,"hash64":12792277204756641822},"IntroDesc":{"hash":-513477946,"hash64":371340828572968049},"PanelID":50142,"IsSocialShow":1,"PanelDesc":{"hash":264452030,"hash64":16371201956872104074},"ActivityThemeID":0,"GuideVideoID":50142,"TitleName":{"hash":-2064322188,"hash64":6776000284612996632},"PanelBrief":{"hash":1667173637,"hash64":5145875987409035365},"SortWeight":5995,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"[QuestClose:6091004],[QuestClose:6091008],[QuestClose:6091012],[QuestClose:6091016],[QuestClose:6091020],[QuestClose:6091001],[QuestClose:6091005],[QuestClose:6091009],[QuestClose:6091013],[QuestClose:6091017]","TabIcon":"SpriteOutput/Quest/TabIcon/BtnQuestRealityShow.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[3],"UIPrefab":"UI/Quest/Widget/QuestRealityShowPanel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":232},{"ItemNum":0,"ItemID":235}],"TabName":{"hash":-2011224202,"hash64":14823125606058724992},"TagDesc":{"hash":1048727151,"hash64":15619511379028546692},"IntroDesc":{"hash":-513477945,"hash64":1322893454136302397},"PanelID":50143,"IsSocialShow":1,"PanelDesc":{"hash":264452031,"hash64":1600970577232848821},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":-2064322189,"hash64":16072777867870293061},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":5990,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0}, + {"FinishConditions":"","TabIcon":"SpriteOutput/Quest/TabIcon/BtnGridFightS2.png","UnlockConditions":"[PlayerLevel:21]","ActivityTagList":[],"UIPrefab":"UI/Quest/GridFight/QuestGridFightS2Panel.prefab","DisplayItemList":[{"ItemNum":0,"ItemID":1},{"ItemNum":0,"ItemID":238},{"ItemNum":0,"ItemID":236},{"ItemNum":0,"ItemID":241},{"ItemNum":0,"ItemID":235},{"ItemNum":0,"ItemID":202057},{"ItemNum":0,"ItemID":110101},{"ItemNum":0,"ItemID":213},{"ItemNum":0,"ItemID":223},{"ItemNum":0,"ItemID":233},{"ItemNum":0,"ItemID":110},{"ItemNum":0,"ItemID":2},{"ItemNum":0,"ItemID":295612}],"TabName":{"hash":1618334365,"hash64":17291913157591856011},"TagDesc":{"hash":27092414,"hash64":13397076571444060725},"IntroDesc":{"hash":-896557320,"hash64":8860294821098531498},"PanelID":71101,"IsSocialShow":0,"PanelDesc":{"hash":1286091120,"hash64":2609388873090199741},"ActivityThemeID":0,"GuideVideoID":0,"TitleName":{"hash":1209010370,"hash64":2086210264175052577},"PanelBrief":{"hash":0,"hash64":0},"SortWeight":7005,"DisplayItemManualSort":false,"IsSkipSwitchStoryLine":false,"DailyHint":true,"FinishType":0} + ], + "activities": [ + {"ResidentModuleList":[],"ActivityModuleIDList":[1001201],"EarlyAccessContentID":0,"ActivityID":10012,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1001402,1001401],"EarlyAccessContentID":0,"ActivityID":10014,"ActivityPanelID":10014}, + {"ResidentModuleList":[1001501],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10015,"ActivityPanelID":10015}, + {"ResidentModuleList":[1001601],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10016,"ActivityPanelID":10016}, + {"ResidentModuleList":[1001701],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10017,"ActivityPanelID":10017}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1001801,1001802],"EarlyAccessContentID":0,"ActivityID":10018,"ActivityPanelID":10018}, + {"ResidentModuleList":[1001901],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10019,"ActivityPanelID":10019}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10020,"ActivityPanelID":10020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10021,"ActivityPanelID":10021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002301],"EarlyAccessContentID":0,"ActivityID":10023,"ActivityPanelID":10023}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002401],"EarlyAccessContentID":0,"ActivityID":10024,"ActivityPanelID":10024}, + {"ResidentModuleList":[1002501],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10025,"ActivityPanelID":10025}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601,1002602],"EarlyAccessContentID":0,"ActivityID":10026,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601,1002602],"EarlyAccessContentID":0,"ActivityID":10027,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002801],"EarlyAccessContentID":0,"ActivityID":10028,"ActivityPanelID":10028}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10029,"ActivityPanelID":10021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1003001],"EarlyAccessContentID":0,"ActivityID":10030,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10031,"ActivityPanelID":10020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1003201],"EarlyAccessContentID":0,"ActivityID":10032,"ActivityPanelID":10032}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601,1002602],"EarlyAccessContentID":0,"ActivityID":10033,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1003401],"EarlyAccessContentID":0,"ActivityID":10034,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1003601],"EarlyAccessContentID":0,"ActivityID":10036,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1004201],"EarlyAccessContentID":0,"ActivityID":10042,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1003501],"EarlyAccessContentID":0,"ActivityID":10035,"ActivityPanelID":10035}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10037,"ActivityPanelID":10020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601,1002602],"EarlyAccessContentID":0,"ActivityID":10038,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1003901],"EarlyAccessContentID":0,"ActivityID":10039,"ActivityPanelID":10039}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1004001],"EarlyAccessContentID":0,"ActivityID":10040,"ActivityPanelID":10040}, + {"ResidentModuleList":[1004101],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10041,"ActivityPanelID":10041}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10043,"ActivityPanelID":10021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601,1002602],"EarlyAccessContentID":0,"ActivityID":10044,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1004501],"EarlyAccessContentID":0,"ActivityID":10045,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005401],"EarlyAccessContentID":0,"ActivityID":10054,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1004601],"EarlyAccessContentID":0,"ActivityID":10046,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005501],"EarlyAccessContentID":0,"ActivityID":10055,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1004701],"EarlyAccessContentID":0,"ActivityID":10047,"ActivityPanelID":10047}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1004801],"EarlyAccessContentID":0,"ActivityID":10048,"ActivityPanelID":10048}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10049,"ActivityPanelID":10020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601,1002602,1002603],"EarlyAccessContentID":0,"ActivityID":10050,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005101],"EarlyAccessContentID":0,"ActivityID":10051,"ActivityPanelID":10051}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005201],"EarlyAccessContentID":0,"ActivityID":10052,"ActivityPanelID":10052}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005301],"EarlyAccessContentID":0,"ActivityID":10053,"ActivityPanelID":10053}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005601],"EarlyAccessContentID":0,"ActivityID":10056,"ActivityPanelID":10056}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005701],"EarlyAccessContentID":0,"ActivityID":10057,"ActivityPanelID":10057}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005801],"EarlyAccessContentID":0,"ActivityID":10058,"ActivityPanelID":10058}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1005901],"EarlyAccessContentID":0,"ActivityID":10059,"ActivityPanelID":10059}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1006001],"EarlyAccessContentID":0,"ActivityID":10060,"ActivityPanelID":10060}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10061,"ActivityPanelID":10020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10062,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1006301],"EarlyAccessContentID":0,"ActivityID":10063,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10064,"ActivityPanelID":10021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10065,"ActivityPanelID":10026}, + {"ResidentModuleList":[1006201],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10066,"ActivityPanelID":10062}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1006701],"EarlyAccessContentID":0,"ActivityID":10067,"ActivityPanelID":0}, + {"ResidentModuleList":[1006801],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":10068,"ActivityPanelID":10068}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1006901],"EarlyAccessContentID":0,"ActivityID":10069,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10070,"ActivityPanelID":10020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10071,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1007201],"EarlyAccessContentID":0,"ActivityID":10072,"ActivityPanelID":10072}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10073,"ActivityPanelID":10021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10074,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1007501],"EarlyAccessContentID":0,"ActivityID":10075,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10077,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10078,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1007901],"EarlyAccessContentID":0,"ActivityID":10079,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1008001],"EarlyAccessContentID":0,"ActivityID":10080,"ActivityPanelID":10080}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1008001],"EarlyAccessContentID":0,"ActivityID":10081,"ActivityPanelID":10081}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10082,"ActivityPanelID":10021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10083,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1008401],"EarlyAccessContentID":0,"ActivityID":10084,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1008501],"EarlyAccessContentID":0,"ActivityID":10085,"ActivityPanelID":10085}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1008601],"EarlyAccessContentID":0,"ActivityID":10086,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002001],"EarlyAccessContentID":0,"ActivityID":10087,"ActivityPanelID":10020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10088,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1008001],"EarlyAccessContentID":0,"ActivityID":10089,"ActivityPanelID":10089}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1009001],"EarlyAccessContentID":0,"ActivityID":10090,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10091,"ActivityPanelID":10021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10092,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010101],"EarlyAccessContentID":0,"ActivityID":10101,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010301],"EarlyAccessContentID":0,"ActivityID":10103,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010401],"EarlyAccessContentID":0,"ActivityID":10104,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010601],"EarlyAccessContentID":0,"ActivityID":10106,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1008001],"EarlyAccessContentID":0,"ActivityID":10107,"ActivityPanelID":10107}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010801],"EarlyAccessContentID":0,"ActivityID":10108,"ActivityPanelID":10108}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10109,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1011201],"EarlyAccessContentID":0,"ActivityID":10112,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10113,"ActivityPanelID":10113}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10114,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010801],"EarlyAccessContentID":0,"ActivityID":10115,"ActivityPanelID":10108}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1011601],"EarlyAccessContentID":0,"ActivityID":10116,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10117,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1012201],"EarlyAccessContentID":0,"ActivityID":10122,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10123,"ActivityPanelID":10113}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10124,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1012601],"EarlyAccessContentID":0,"ActivityID":10126,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1012701],"EarlyAccessContentID":0,"ActivityID":10127,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010801],"EarlyAccessContentID":0,"ActivityID":10129,"ActivityPanelID":10108}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10130,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10132,"ActivityPanelID":10113}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10133,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1013401],"EarlyAccessContentID":0,"ActivityID":10134,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010801],"EarlyAccessContentID":0,"ActivityID":10135,"ActivityPanelID":10108}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1013701],"EarlyAccessContentID":0,"ActivityID":10137,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1012601],"EarlyAccessContentID":0,"ActivityID":10138,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10139,"ActivityPanelID":10113}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10140,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10143,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010801],"EarlyAccessContentID":0,"ActivityID":10144,"ActivityPanelID":10108}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1014501],"EarlyAccessContentID":0,"ActivityID":10145,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1015801],"EarlyAccessContentID":0,"ActivityID":10158,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1012601],"EarlyAccessContentID":0,"ActivityID":10167,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1016801],"EarlyAccessContentID":0,"ActivityID":10168,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10170,"ActivityPanelID":10113}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10171,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010801],"EarlyAccessContentID":0,"ActivityID":10174,"ActivityPanelID":10108}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10175,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1017601],"EarlyAccessContentID":0,"ActivityID":10176,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1012601],"EarlyAccessContentID":0,"ActivityID":10179,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10180,"ActivityPanelID":10113}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10181,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1018201],"EarlyAccessContentID":0,"ActivityID":10182,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1018301],"EarlyAccessContentID":0,"ActivityID":10183,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1018401],"EarlyAccessContentID":0,"ActivityID":10184,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1010801],"EarlyAccessContentID":0,"ActivityID":10187,"ActivityPanelID":10108}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10188,"ActivityPanelID":10026}, + {"ResidentModuleList":[1019002],"ActivityModuleIDList":[1019001],"EarlyAccessContentID":0,"ActivityID":10190,"ActivityPanelID":10190}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002101],"EarlyAccessContentID":0,"ActivityID":10191,"ActivityPanelID":10113}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1002601],"EarlyAccessContentID":0,"ActivityID":10192,"ActivityPanelID":10026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[1012601],"EarlyAccessContentID":0,"ActivityID":10196,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000101],"EarlyAccessContentID":0,"ActivityID":20001,"ActivityPanelID":20001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000202],"EarlyAccessContentID":0,"ActivityID":20002,"ActivityPanelID":20002}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000401],"EarlyAccessContentID":0,"ActivityID":20004,"ActivityPanelID":20003}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000501,2000502,2000503,2000504,2000505],"EarlyAccessContentID":0,"ActivityID":20005,"ActivityPanelID":20005}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000601,2000602,2000603,2000604,2000605],"EarlyAccessContentID":0,"ActivityID":20006,"ActivityPanelID":20006}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000501,2000604,2000601,2000701],"EarlyAccessContentID":0,"ActivityID":20007,"ActivityPanelID":20007}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000801,2000802,2000803,2000804,2000805],"EarlyAccessContentID":0,"ActivityID":20008,"ActivityPanelID":20008}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2000901,2000902,2000903,2000504,2000905],"EarlyAccessContentID":0,"ActivityID":20009,"ActivityPanelID":20009}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001001,2000901,2000801,2000902],"EarlyAccessContentID":0,"ActivityID":20010,"ActivityPanelID":20010}, + {"ResidentModuleList":[2001101,2001102,2001103,2001104,2001105,2001106,2001107,2001108,2001109],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":20011,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001201,2000604,2000503,2001202,2001203],"EarlyAccessContentID":0,"ActivityID":20012,"ActivityPanelID":20011}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001301,2001302,2001303,2000602,2001304],"EarlyAccessContentID":0,"ActivityID":20013,"ActivityPanelID":20012}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001201,2001301,2001302,2001401],"EarlyAccessContentID":0,"ActivityID":20014,"ActivityPanelID":20013}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001601,2001602,2000603,2000903,2001603],"EarlyAccessContentID":0,"ActivityID":20016,"ActivityPanelID":20016}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001701,2001702,2001703,2000902,2000804,2001704],"EarlyAccessContentID":0,"ActivityID":20017,"ActivityPanelID":20017}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001701,2001601,2001703,2001801],"EarlyAccessContentID":0,"ActivityID":20018,"ActivityPanelID":20018}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2001901,2001902,2000502,2000802,2000504],"EarlyAccessContentID":0,"ActivityID":20019,"ActivityPanelID":20019}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2002001,2002002,2000501,2002003,2001302,2000503],"EarlyAccessContentID":0,"ActivityID":20020,"ActivityPanelID":20020}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2002101,2001902,2002002,2002003],"EarlyAccessContentID":0,"ActivityID":20021,"ActivityPanelID":20021}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2002201,2002202,2000801,2002303,2001202,2001602],"EarlyAccessContentID":0,"ActivityID":20022,"ActivityPanelID":20022}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2002301,2002302,2000901,2000804,2000803,2001303],"EarlyAccessContentID":0,"ActivityID":20023,"ActivityPanelID":20023}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2002401,2002202,2002302,2002303],"EarlyAccessContentID":0,"ActivityID":20024,"ActivityPanelID":20024}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2002700,2002501,2002502,2002601],"EarlyAccessContentID":0,"ActivityID":20027,"ActivityPanelID":20027}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2003000,2002801,2002901,2002803],"EarlyAccessContentID":0,"ActivityID":20030,"ActivityPanelID":20030}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2003300,2003101,2003201],"EarlyAccessContentID":0,"ActivityID":20033,"ActivityPanelID":20033}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2003600,2003401,2003501],"EarlyAccessContentID":0,"ActivityID":20036,"ActivityPanelID":20036}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2003900,2003701,2003801],"EarlyAccessContentID":0,"ActivityID":20039,"ActivityPanelID":20039}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2004200,2004001,2004101,2004002],"EarlyAccessContentID":0,"ActivityID":20042,"ActivityPanelID":20042}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2004401],"EarlyAccessContentID":0,"ActivityID":20046,"ActivityPanelID":20046}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2004701,2004801],"EarlyAccessContentID":0,"ActivityID":20049,"ActivityPanelID":20049}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2005001,2005101],"EarlyAccessContentID":0,"ActivityID":20052,"ActivityPanelID":20052}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2008007],"EarlyAccessContentID":0,"ActivityID":20053,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2005401,2005501],"EarlyAccessContentID":0,"ActivityID":20056,"ActivityPanelID":20056}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100101],"EarlyAccessContentID":0,"ActivityID":21001,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100201],"EarlyAccessContentID":0,"ActivityID":21002,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100301],"EarlyAccessContentID":0,"ActivityID":21003,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100401],"EarlyAccessContentID":0,"ActivityID":21004,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100501],"EarlyAccessContentID":0,"ActivityID":21005,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100601],"EarlyAccessContentID":0,"ActivityID":21006,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100701],"EarlyAccessContentID":0,"ActivityID":21007,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100801],"EarlyAccessContentID":0,"ActivityID":21008,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2100901],"EarlyAccessContentID":0,"ActivityID":21009,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2101001],"EarlyAccessContentID":0,"ActivityID":21010,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2101101],"EarlyAccessContentID":0,"ActivityID":21011,"ActivityPanelID":21001}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3000201],"EarlyAccessContentID":0,"ActivityID":30002,"ActivityPanelID":30002}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3000206],"EarlyAccessContentID":0,"ActivityID":30003,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[4000101,4000102,4000103,4000104,4000105,4000106,4000107,4000108,4000109,4000110],"EarlyAccessContentID":0,"ActivityID":40001,"ActivityPanelID":40001}, + {"ResidentModuleList":[4000208],"ActivityModuleIDList":[4000201,4000202,4000203,4000204,4000205,4000206,4000207],"EarlyAccessContentID":0,"ActivityID":40002,"ActivityPanelID":40002}, + {"ResidentModuleList":[4000301,4000302,4000303,4000304,4000305,4000306,4000307],"ActivityModuleIDList":[4000308],"EarlyAccessContentID":0,"ActivityID":40003,"ActivityPanelID":40003}, + {"ResidentModuleList":[],"ActivityModuleIDList":[4000401,4000402,4000403,4000404,4000405],"EarlyAccessContentID":0,"ActivityID":40004,"ActivityPanelID":40004}, + {"ResidentModuleList":[],"ActivityModuleIDList":[4000501,4000502,4000503,4000504,4000505],"EarlyAccessContentID":0,"ActivityID":40005,"ActivityPanelID":40005}, + {"ResidentModuleList":[5000002,5000003,5000004,5000005,5000006,5000007,5000008,5000009,5000010,5000011,5000013],"ActivityModuleIDList":[5000001,5000012],"EarlyAccessContentID":0,"ActivityID":50000,"ActivityPanelID":50000}, + {"ResidentModuleList":[5000105,5000106,5000107],"ActivityModuleIDList":[5000101,5000102,5000103,5000104,5000108,5000109],"EarlyAccessContentID":0,"ActivityID":50001,"ActivityPanelID":50001}, + {"ResidentModuleList":[5000201,5000202,5000203,5000204],"ActivityModuleIDList":[5000210,5000211],"EarlyAccessContentID":0,"ActivityID":50002,"ActivityPanelID":50002}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3000401,3000402,3000403,3000404,3000405,3000406,3000407,3000408],"EarlyAccessContentID":0,"ActivityID":30004,"ActivityPanelID":30004}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3000501,3000502,3000503,3000504,3000505,3000506,3000507,3000508],"EarlyAccessContentID":0,"ActivityID":30005,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3000601,3000602,3000603,3000604,3000605,3000606,3000607],"EarlyAccessContentID":0,"ActivityID":30006,"ActivityPanelID":30006}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3000701,3000702,3000703,3000704,3000705,3000706,3000707],"EarlyAccessContentID":0,"ActivityID":30007,"ActivityPanelID":30007}, + {"ResidentModuleList":[6000101],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":60001,"ActivityPanelID":60001}, + {"ResidentModuleList":[6000302],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":60003,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6000401],"EarlyAccessContentID":0,"ActivityID":60004,"ActivityPanelID":60004}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6000501],"EarlyAccessContentID":0,"ActivityID":60005,"ActivityPanelID":60005}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6000601,6000602,6000603,6000604,6000605,6000606],"EarlyAccessContentID":0,"ActivityID":60006,"ActivityPanelID":60006}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6000701],"EarlyAccessContentID":0,"ActivityID":60007,"ActivityPanelID":60003}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6000801],"EarlyAccessContentID":0,"ActivityID":60008,"ActivityPanelID":60007}, + {"ResidentModuleList":[6000901],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":60009,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001001],"EarlyAccessContentID":0,"ActivityID":60010,"ActivityPanelID":60008}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001101],"EarlyAccessContentID":200002,"ActivityID":60011,"ActivityPanelID":60011}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001201],"EarlyAccessContentID":200002,"ActivityID":60012,"ActivityPanelID":60011}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001301],"EarlyAccessContentID":200002,"ActivityID":60013,"ActivityPanelID":60011}, + {"ResidentModuleList":[6001402],"ActivityModuleIDList":[6001401],"EarlyAccessContentID":0,"ActivityID":60014,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001501],"EarlyAccessContentID":0,"ActivityID":60015,"ActivityPanelID":60016}, + {"ResidentModuleList":[6001601],"ActivityModuleIDList":[],"EarlyAccessContentID":0,"ActivityID":60016,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001701],"EarlyAccessContentID":200002,"ActivityID":60017,"ActivityPanelID":60017}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001801],"EarlyAccessContentID":0,"ActivityID":60018,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6001901],"EarlyAccessContentID":200002,"ActivityID":60019,"ActivityPanelID":60017}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6002001],"EarlyAccessContentID":200002,"ActivityID":60020,"ActivityPanelID":60017}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6002101],"EarlyAccessContentID":200002,"ActivityID":60021,"ActivityPanelID":60017}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6002201],"EarlyAccessContentID":200002,"ActivityID":60022,"ActivityPanelID":60018}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6002301],"EarlyAccessContentID":0,"ActivityID":60023,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[6002401],"EarlyAccessContentID":200002,"ActivityID":60024,"ActivityPanelID":60018}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7000101],"EarlyAccessContentID":0,"ActivityID":70001,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7000101],"EarlyAccessContentID":0,"ActivityID":70002,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7000101],"EarlyAccessContentID":0,"ActivityID":70003,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7000101],"EarlyAccessContentID":0,"ActivityID":70004,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7000101],"EarlyAccessContentID":0,"ActivityID":70005,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7000101],"EarlyAccessContentID":0,"ActivityID":70006,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[9990101,9990102],"EarlyAccessContentID":0,"ActivityID":99901,"ActivityPanelID":0}, + {"ResidentModuleList":[5000301,5000302,5000303,5000304],"ActivityModuleIDList":[5000300,5000305],"EarlyAccessContentID":0,"ActivityID":50003,"ActivityPanelID":50003}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200101,2200102],"EarlyAccessContentID":0,"ActivityID":22001,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200201,2200202],"EarlyAccessContentID":0,"ActivityID":22002,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200201],"EarlyAccessContentID":0,"ActivityID":22003,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200301,2200401],"EarlyAccessContentID":0,"ActivityID":22004,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200301,2200501,2200401],"EarlyAccessContentID":0,"ActivityID":22005,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200301,2200601],"EarlyAccessContentID":0,"ActivityID":22006,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200301,2200701],"EarlyAccessContentID":0,"ActivityID":22007,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[2200301,2200801],"EarlyAccessContentID":0,"ActivityID":22008,"ActivityPanelID":0}, + {"ResidentModuleList":[5000408],"ActivityModuleIDList":[5000401,5000402,5000403,5000404,5000405,5000406],"EarlyAccessContentID":0,"ActivityID":50004,"ActivityPanelID":50004}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000101],"EarlyAccessContentID":0,"ActivityID":80001,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000201],"EarlyAccessContentID":0,"ActivityID":80002,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000301],"EarlyAccessContentID":0,"ActivityID":80003,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000401],"EarlyAccessContentID":0,"ActivityID":80004,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000501],"EarlyAccessContentID":0,"ActivityID":80005,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000601],"EarlyAccessContentID":0,"ActivityID":80006,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000701],"EarlyAccessContentID":0,"ActivityID":80007,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000801],"EarlyAccessContentID":0,"ActivityID":80008,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8000901],"EarlyAccessContentID":0,"ActivityID":80009,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8001001],"EarlyAccessContentID":200003,"ActivityID":80010,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8001101],"EarlyAccessContentID":200003,"ActivityID":80011,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8001201],"EarlyAccessContentID":200004,"ActivityID":80012,"ActivityPanelID":80012}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8001401],"EarlyAccessContentID":0,"ActivityID":80014,"ActivityPanelID":80014}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8001501],"EarlyAccessContentID":0,"ActivityID":80015,"ActivityPanelID":80015}, + {"ResidentModuleList":[],"ActivityModuleIDList":[8001601],"EarlyAccessContentID":0,"ActivityID":80016,"ActivityPanelID":80016}, + {"ResidentModuleList":[5000501,5000502,5000503,5000504,5000505],"ActivityModuleIDList":[5000500,5000506],"EarlyAccessContentID":0,"ActivityID":50005,"ActivityPanelID":50005}, + {"ResidentModuleList":[5000601,5000602,5000603,5000604,5000605],"ActivityModuleIDList":[5000606],"EarlyAccessContentID":0,"ActivityID":50006,"ActivityPanelID":50006}, + {"ResidentModuleList":[3000801],"ActivityModuleIDList":[3000800],"EarlyAccessContentID":0,"ActivityID":30008,"ActivityPanelID":30008}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3000901,3000902,3000903,3000904,3000905,3000906,3000907],"EarlyAccessContentID":0,"ActivityID":30009,"ActivityPanelID":0}, + {"ResidentModuleList":[5000702],"ActivityModuleIDList":[5000701],"EarlyAccessContentID":0,"ActivityID":50007,"ActivityPanelID":50007}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3001001],"EarlyAccessContentID":0,"ActivityID":30010,"ActivityPanelID":30010}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5000801,5000802,5000803,5000804],"EarlyAccessContentID":0,"ActivityID":50008,"ActivityPanelID":50008}, + {"ResidentModuleList":[5000902],"ActivityModuleIDList":[5000901],"EarlyAccessContentID":0,"ActivityID":50009,"ActivityPanelID":50009}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5001001,5001002,5001003,5001004,5001005,5001006],"EarlyAccessContentID":0,"ActivityID":50010,"ActivityPanelID":50010}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5001101],"EarlyAccessContentID":0,"ActivityID":50011,"ActivityPanelID":50011}, + {"ResidentModuleList":[5001202],"ActivityModuleIDList":[5001201],"EarlyAccessContentID":0,"ActivityID":50012,"ActivityPanelID":50012}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5001301,5001302],"EarlyAccessContentID":0,"ActivityID":50013,"ActivityPanelID":50013}, + {"ResidentModuleList":[5001401],"ActivityModuleIDList":[5001400],"EarlyAccessContentID":0,"ActivityID":50014,"ActivityPanelID":50014}, + {"ResidentModuleList":[5001501],"ActivityModuleIDList":[5001500],"EarlyAccessContentID":150015,"ActivityID":50015,"ActivityPanelID":50015}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5001601,5001602,5001603,5001604,5001605,5001606,5001607,5001608],"EarlyAccessContentID":0,"ActivityID":50016,"ActivityPanelID":50016}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5001701,5001705,5001703,5001706,5001704,5001702],"EarlyAccessContentID":150017,"ActivityID":50017,"ActivityPanelID":50017}, + {"ResidentModuleList":[5001802],"ActivityModuleIDList":[5001801],"EarlyAccessContentID":150018,"ActivityID":50018,"ActivityPanelID":50018}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5001901],"EarlyAccessContentID":0,"ActivityID":50019,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5002001,5002002,5002003,5002004,5002005],"EarlyAccessContentID":0,"ActivityID":50020,"ActivityPanelID":50020}, + {"ResidentModuleList":[5002102],"ActivityModuleIDList":[5002101],"EarlyAccessContentID":150021,"ActivityID":50021,"ActivityPanelID":50021}, + {"ResidentModuleList":[5002202],"ActivityModuleIDList":[5002201],"EarlyAccessContentID":130013,"ActivityID":50022,"ActivityPanelID":50022}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5002301],"EarlyAccessContentID":0,"ActivityID":50023,"ActivityPanelID":10043}, + {"ResidentModuleList":[5002402],"ActivityModuleIDList":[5002401],"EarlyAccessContentID":150024,"ActivityID":50024,"ActivityPanelID":50024}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5002501,5002502,5002503,5002504,5002505,5002506,5002507],"EarlyAccessContentID":150025,"ActivityID":50025,"ActivityPanelID":50025}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3001101,3001102,3001103,3001104,3001105,3001106,3001107],"EarlyAccessContentID":130011,"ActivityID":30011,"ActivityPanelID":30011}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3001201,3001202],"EarlyAccessContentID":130012,"ActivityID":30012,"ActivityPanelID":30012}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3001301],"EarlyAccessContentID":0,"ActivityID":30013,"ActivityPanelID":30013}, + {"ResidentModuleList":[5002602],"ActivityModuleIDList":[5002601],"EarlyAccessContentID":150026,"ActivityID":50026,"ActivityPanelID":50026}, + {"ResidentModuleList":[],"ActivityModuleIDList":[4000603,4000602,4000601,4000604,4000605],"EarlyAccessContentID":140006,"ActivityID":40006,"ActivityPanelID":40006}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5002701],"EarlyAccessContentID":0,"ActivityID":50027,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5002801,5002802,5002803],"EarlyAccessContentID":0,"ActivityID":50028,"ActivityPanelID":50028}, + {"ResidentModuleList":[],"ActivityModuleIDList":[3001401,3001402,3001403,3001404,3001405,3001406,3001407],"EarlyAccessContentID":130014,"ActivityID":30014,"ActivityPanelID":30014}, + {"ResidentModuleList":[5002902],"ActivityModuleIDList":[5002900,5002901],"EarlyAccessContentID":150029,"ActivityID":50029,"ActivityPanelID":50029}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5003001],"EarlyAccessContentID":0,"ActivityID":50030,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5003101],"EarlyAccessContentID":0,"ActivityID":50031,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5003301,5003302,5003303,5003304,5003305,5003306,5003307],"EarlyAccessContentID":0,"ActivityID":50033,"ActivityPanelID":50033}, + {"ResidentModuleList":[],"ActivityModuleIDList":[9999800,2001702,2001703,2001601,2001701],"EarlyAccessContentID":0,"ActivityID":99998,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[9999901,9999902,9999903],"EarlyAccessContentID":0,"ActivityID":99999,"ActivityPanelID":0}, + {"ResidentModuleList":[5003402],"ActivityModuleIDList":[5003401],"EarlyAccessContentID":150034,"ActivityID":50034,"ActivityPanelID":50034}, + {"ResidentModuleList":[5003502],"ActivityModuleIDList":[5003501],"EarlyAccessContentID":150035,"ActivityID":50035,"ActivityPanelID":50035}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5003601],"EarlyAccessContentID":0,"ActivityID":50036,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5003701],"EarlyAccessContentID":0,"ActivityID":50037,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5003801],"EarlyAccessContentID":0,"ActivityID":50038,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5003901],"EarlyAccessContentID":150039,"ActivityID":50039,"ActivityPanelID":50039}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5004001],"EarlyAccessContentID":0,"ActivityID":50040,"ActivityPanelID":10043}, + {"ResidentModuleList":[5004102],"ActivityModuleIDList":[5004100,5004101],"EarlyAccessContentID":150041,"ActivityID":50041,"ActivityPanelID":50041}, + {"ResidentModuleList":[5004202],"ActivityModuleIDList":[5004201],"EarlyAccessContentID":150042,"ActivityID":50042,"ActivityPanelID":50042}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5004301],"EarlyAccessContentID":0,"ActivityID":50043,"ActivityPanelID":0}, + {"ResidentModuleList":[5004502],"ActivityModuleIDList":[5004501],"EarlyAccessContentID":150045,"ActivityID":50045,"ActivityPanelID":50045}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5004701],"EarlyAccessContentID":0,"ActivityID":50047,"ActivityPanelID":50047}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5005701],"EarlyAccessContentID":150057,"ActivityID":50057,"ActivityPanelID":50057}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5005801],"EarlyAccessContentID":0,"ActivityID":50058,"ActivityPanelID":10043}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5006001],"EarlyAccessContentID":0,"ActivityID":50060,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5006201,5006202],"EarlyAccessContentID":0,"ActivityID":50062,"ActivityPanelID":50062}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7100001],"EarlyAccessContentID":0,"ActivityID":71000,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7100101],"EarlyAccessContentID":0,"ActivityID":71001,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7100201],"EarlyAccessContentID":171002,"ActivityID":71002,"ActivityPanelID":71002}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7100301],"EarlyAccessContentID":171002,"ActivityID":71003,"ActivityPanelID":71002}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7100401],"EarlyAccessContentID":171002,"ActivityID":71004,"ActivityPanelID":71002}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7100501],"EarlyAccessContentID":171002,"ActivityID":71005,"ActivityPanelID":71002}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7110001],"EarlyAccessContentID":0,"ActivityID":71100,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7110101],"EarlyAccessContentID":171002,"ActivityID":71101,"ActivityPanelID":71101}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7110301],"EarlyAccessContentID":0,"ActivityID":71103,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[7110501],"EarlyAccessContentID":0,"ActivityID":71105,"ActivityPanelID":0}, + {"ResidentModuleList":[5006302],"ActivityModuleIDList":[5006301],"EarlyAccessContentID":150063,"ActivityID":50063,"ActivityPanelID":50063}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5006401],"EarlyAccessContentID":150064,"ActivityID":50064,"ActivityPanelID":50064}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5006601],"EarlyAccessContentID":0,"ActivityID":50066,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5006701],"EarlyAccessContentID":150067,"ActivityID":50067,"ActivityPanelID":50067}, + {"ResidentModuleList":[5006802],"ActivityModuleIDList":[5006801],"EarlyAccessContentID":150068,"ActivityID":50068,"ActivityPanelID":50068}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5006901],"EarlyAccessContentID":0,"ActivityID":50069,"ActivityPanelID":0}, + {"ResidentModuleList":[5007007],"ActivityModuleIDList":[5007000,5007001,5007002,5007003,5007004,5007005],"EarlyAccessContentID":150070,"ActivityID":50070,"ActivityPanelID":50070}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5007201],"EarlyAccessContentID":0,"ActivityID":50072,"ActivityPanelID":50072}, + {"ResidentModuleList":[5007302],"ActivityModuleIDList":[5007301],"EarlyAccessContentID":150073,"ActivityID":50073,"ActivityPanelID":50073}, + {"ResidentModuleList":[5007402],"ActivityModuleIDList":[5007401],"EarlyAccessContentID":150071,"ActivityID":50074,"ActivityPanelID":50074}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5007501],"EarlyAccessContentID":0,"ActivityID":50075,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5007801],"EarlyAccessContentID":0,"ActivityID":50078,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5007901],"EarlyAccessContentID":0,"ActivityID":50079,"ActivityPanelID":50079}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5008001,5008002,5008003,5008004,5008005],"EarlyAccessContentID":0,"ActivityID":50080,"ActivityPanelID":50080}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5008101],"EarlyAccessContentID":0,"ActivityID":50081,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5008501],"EarlyAccessContentID":0,"ActivityID":50085,"ActivityPanelID":50085}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5008601],"EarlyAccessContentID":0,"ActivityID":50086,"ActivityPanelID":50086}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5008701],"EarlyAccessContentID":0,"ActivityID":50087,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5008801],"EarlyAccessContentID":0,"ActivityID":50088,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5008901],"EarlyAccessContentID":0,"ActivityID":50089,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5009101],"EarlyAccessContentID":0,"ActivityID":50091,"ActivityPanelID":0}, + {"ResidentModuleList":[5009202],"ActivityModuleIDList":[5009201],"EarlyAccessContentID":150074,"ActivityID":50092,"ActivityPanelID":50092}, + {"ResidentModuleList":[5009402],"ActivityModuleIDList":[5009401],"EarlyAccessContentID":0,"ActivityID":50094,"ActivityPanelID":50094}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5009501],"EarlyAccessContentID":0,"ActivityID":50095,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5009701],"EarlyAccessContentID":0,"ActivityID":50097,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5009901],"EarlyAccessContentID":0,"ActivityID":50099,"ActivityPanelID":50099}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5010001],"EarlyAccessContentID":0,"ActivityID":50100,"ActivityPanelID":50100}, + {"ResidentModuleList":[5010102],"ActivityModuleIDList":[5010101],"EarlyAccessContentID":150075,"ActivityID":50101,"ActivityPanelID":50101}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5010301],"EarlyAccessContentID":0,"ActivityID":50103,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5010601,5010602,5010603,5010604],"EarlyAccessContentID":0,"ActivityID":50106,"ActivityPanelID":50106}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5010701],"EarlyAccessContentID":150077,"ActivityID":50107,"ActivityPanelID":50107}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5010801],"EarlyAccessContentID":0,"ActivityID":50108,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5010901,5010902,5010903,5010904,5010905,5010906,5010907],"EarlyAccessContentID":0,"ActivityID":50109,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5011001],"EarlyAccessContentID":0,"ActivityID":50110,"ActivityPanelID":0}, + {"ResidentModuleList":[5011102],"ActivityModuleIDList":[5011101],"EarlyAccessContentID":150079,"ActivityID":50111,"ActivityPanelID":50111}, + {"ResidentModuleList":[5011202],"ActivityModuleIDList":[5011201],"EarlyAccessContentID":150076,"ActivityID":50112,"ActivityPanelID":50112}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5011301],"EarlyAccessContentID":0,"ActivityID":50113,"ActivityPanelID":0}, + {"ResidentModuleList":[5011402],"ActivityModuleIDList":[5011401],"EarlyAccessContentID":150078,"ActivityID":50114,"ActivityPanelID":50114}, + {"ResidentModuleList":[5011602],"ActivityModuleIDList":[5011601],"EarlyAccessContentID":200010,"ActivityID":50116,"ActivityPanelID":50116}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5012301],"EarlyAccessContentID":0,"ActivityID":50123,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5012501,5012502,5012503,5012504,5012505],"EarlyAccessContentID":0,"ActivityID":50125,"ActivityPanelID":50125}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5012601],"EarlyAccessContentID":0,"ActivityID":50126,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5012701],"EarlyAccessContentID":0,"ActivityID":50127,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5012901],"EarlyAccessContentID":0,"ActivityID":50129,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5013001],"EarlyAccessContentID":0,"ActivityID":50130,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5013101],"EarlyAccessContentID":0,"ActivityID":50131,"ActivityPanelID":0}, + {"ResidentModuleList":[5013202],"ActivityModuleIDList":[5013201],"EarlyAccessContentID":150132,"ActivityID":50132,"ActivityPanelID":50132}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5013301],"EarlyAccessContentID":0,"ActivityID":50133,"ActivityPanelID":0}, + {"ResidentModuleList":[5013402],"ActivityModuleIDList":[5013401],"EarlyAccessContentID":150134,"ActivityID":50134,"ActivityPanelID":50134}, + {"ResidentModuleList":[5013502],"ActivityModuleIDList":[5013501],"EarlyAccessContentID":0,"ActivityID":50135,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5013701],"EarlyAccessContentID":0,"ActivityID":50137,"ActivityPanelID":0}, + {"ResidentModuleList":[5014202],"ActivityModuleIDList":[5014201],"EarlyAccessContentID":150135,"ActivityID":50142,"ActivityPanelID":50142}, + {"ResidentModuleList":[5014311,5014312,5014313,5014314,5014315],"ActivityModuleIDList":[5014301,5014302,5014303,5014304,5014305],"EarlyAccessContentID":0,"ActivityID":50143,"ActivityPanelID":50143}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5015401],"EarlyAccessContentID":0,"ActivityID":50154,"ActivityPanelID":0}, + {"ResidentModuleList":[],"ActivityModuleIDList":[5012701],"EarlyAccessContentID":0,"ActivityID":50157,"ActivityPanelID":0} + ] + } +} diff --git a/resources/PrydwenEndgameTeams.json b/resources/PrydwenEndgameTeams.json index d1223f2..dcf53f7 100644 --- a/resources/PrydwenEndgameTeams.json +++ b/resources/PrydwenEndgameTeams.json @@ -5,46 +5,186 @@ "license": "MIT", "attribution": "Processed data shown on Prydwen; credit LvlUrArti", "dataset_version": "4.6.2", - "collect_date": "2026-10-14", - "challenge_version": "4.6.1", - "challenge_name": "Crossing the Afterlife" + "collect_date": "2026-10-14" + }, + "protocol": { + "request_type_routes": { + "2": "moc", + "3": "pf", + "4": "as", + "5": "aa" + }, + "mapping_note": "Type 2 is retained for MoC; Types 3-5 are inferred mode routes pending Client packet confirmation." }, "avatar_aliases": { "march-7th-evernight": "evernight", - "dan-heng-permansor-terrae": "danhengpt" + "dan-heng-permansor-terrae": "danhengpt", + "firefly": "sam", + "tingyun-fugue": "fugue", + "the-dahlia": "dahlia" }, - "mode": "moc", - "floor": 12, - "stages": [ - { - "stage": 1, - "rank": 1, - "characters": [ - "silver-wolf-lv-999", - "sparxie", - "yao-guang", - "pearl" + "modes": { + "moc": { + "dataset_version": "4.6.2", + "challenge_version": "4.6.1", + "challenge_name": "Crossing the Afterlife", + "floor": 12, + "stages": [ + { + "stage": "12-1", + "rank": 1, + "characters": [ + "silver-wolf-lv-999", + "sparxie", + "yao-guang", + "pearl" + ] + }, + { + "stage": "12-2", + "rank": 1, + "characters": [ + "castorice", + "march-7th-evernight", + "cyrene", + "hyacine" + ] + }, + { + "stage": "12-3", + "rank": 1, + "characters": [ + "himeko-nova", + "sparkle", + "sunday", + "dan-heng-permansor-terrae" + ] + } ] }, - { - "stage": 2, - "rank": 1, - "characters": [ - "castorice", - "march-7th-evernight", - "cyrene", - "hyacine" + "pf": { + "dataset_version": "4.6.2", + "challenge_version": "4.5.1", + "challenge_name": "Domain Genesis", + "floor": 4, + "stages": [ + { + "stage": "4-1", + "rank": 1, + "characters": [ + "castorice", + "march-7th-evernight", + "cyrene", + "hyacine" + ] + }, + { + "stage": "4-2", + "rank": 1, + "characters": [ + "silver-wolf-lv-999", + "sparxie", + "yao-guang", + "huohuo" + ] + }, + { + "stage": "4-3", + "rank": 1, + "characters": [ + "himeko-nova", + "sparkle", + "sunday", + "dan-heng-permansor-terrae" + ] + } ] }, - { - "stage": 3, - "rank": 1, - "characters": [ - "himeko-nova", - "sparkle", - "sunday", - "dan-heng-permansor-terrae" + "as": { + "dataset_version": "4.6.2", + "challenge_version": "4.6.1", + "challenge_name": "Dominance of Oblivion", + "floor": 4, + "stages": [ + { + "stage": "4-1", + "rank": 1, + "characters": [ + "silver-wolf-lv-999", + "sparxie", + "yao-guang", + "pearl" + ] + }, + { + "stage": "4-2", + "rank": 1, + "characters": [ + "silver-wolf-lv-999", + "sparxie", + "yao-guang", + "pearl" + ] + }, + { + "stage": "4-3", + "rank": 1, + "characters": [ + "castorice", + "march-7th-evernight", + "cyrene", + "hyacine" + ] + } + ] + }, + "aa": { + "dataset_version": "4.6.2", + "challenge_version": "4.6.1", + "challenge_name": "Return to Roots", + "floor": 2, + "stages": [ + { + "stage": "1-1", + "rank": 1, + "characters": [ + "silver-wolf-lv-999", + "sparxie", + "yao-guang", + "pearl" + ] + }, + { + "stage": "1-2", + "rank": 1, + "characters": [ + "castorice", + "march-7th-evernight", + "cyrene", + "hyacine" + ] + }, + { + "stage": "1-3", + "rank": 1, + "characters": [ + "firefly", + "tingyun-fugue", + "the-dahlia", + "lingsha" + ] + }, + { + "stage": "2-1", + "rank": 1, + "characters": [ + "silver-wolf-lv-999", + "sparxie", + "yao-guang", + "pearl" + ] + } ] } - ] + } } diff --git a/resources/StellaJumpConfig.json b/resources/StellaJumpConfig.json new file mode 100644 index 0000000..636758d --- /dev/null +++ b/resources/StellaJumpConfig.json @@ -0,0 +1,24 @@ +{ + "format_version": 1, + "client_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "evidence_id": "ev_d386c17ef9699a51b67d219e9bcdce55dfb395c1fdcf4c6e40fa6d9c17a71119", + "source": "Current Client ChenLingGameBoyCaseRow flat table, all 16 rows; see preview-gameboy-getter.asm", + "cases": [ + {"CheatCodeList":"WWDDASDW","RankingsNPCList":[1,2,3,4],"GameBoyThemeID":"01","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-1250097303,"hash64":5790321781566483320},"GameBoyNameID":{"hash":-1784526046,"hash64":17804661510867958164},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":28,"SettlementTitleID":{"hash":764038290,"hash64":13186066336154128023},"FDCheatEntityID":17,"CheatQuestID":2200641,"FDHardEntityID":17,"GameBoyCaseID":1}, + {"CheatCodeList":"AASSDDWW","RankingsNPCList":[5,6,7,8],"GameBoyThemeID":"02","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-1653381830,"hash64":15297881892713550639},"GameBoyNameID":{"hash":-1784526043,"hash64":2852032376041904676},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":316,"SettlementTitleID":{"hash":764038293,"hash64":15399406198068268329},"FDCheatEntityID":9,"CheatQuestID":2200643,"FDHardEntityID":9,"GameBoyCaseID":2}, + {"CheatCodeList":"WDSAWDSA","RankingsNPCList":[9,10,11,12],"GameBoyThemeID":"03","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-87297889,"hash64":2562778870731937490},"GameBoyNameID":{"hash":-1784526044,"hash64":10331466851340351937},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":217,"SettlementTitleID":{"hash":764038292,"hash64":11187089871486751119},"FDCheatEntityID":9,"CheatQuestID":2200644,"FDHardEntityID":9,"GameBoyCaseID":3}, + {"CheatCodeList":"SSWWDADW","RankingsNPCList":[13,14,15,16],"GameBoyThemeID":"04","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-490582416,"hash64":13212521077122113483},"GameBoyNameID":{"hash":-1784526041,"hash64":291305836721008398},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":201,"SettlementTitleID":{"hash":764038295,"hash64":4804965191049292593},"FDCheatEntityID":21,"CheatQuestID":2200645,"FDHardEntityID":21,"GameBoyCaseID":4}, + {"CheatCodeList":"SDWAWADS","RankingsNPCList":[17,18,19,20],"GameBoyThemeID":"05","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":1075501525,"hash64":13250835613397360523},"GameBoyNameID":{"hash":-1784526042,"hash64":8540793530315087080},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":99,"SettlementTitleID":{"hash":764038294,"hash64":2560331461490258394},"FDCheatEntityID":17,"CheatQuestID":2200652,"FDHardEntityID":17,"GameBoyCaseID":5}, + {"CheatCodeList":"AWDSDWAS","RankingsNPCList":[21,22,23,24],"GameBoyThemeID":"06","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":672216998,"hash64":15484568258127122834},"GameBoyNameID":{"hash":-1784526039,"hash64":9057087214447680060},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":149,"SettlementTitleID":{"hash":764038297,"hash64":11200327759390850432},"FDCheatEntityID":17,"CheatQuestID":2200653,"FDHardEntityID":17,"GameBoyCaseID":6}, + {"CheatCodeList":"WADSDWSA","RankingsNPCList":[25,26,27,28],"GameBoyThemeID":"07","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-2056666357,"hash64":10055866289444434485},"GameBoyNameID":{"hash":-1784526040,"hash64":5198719383683009366},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":62,"SettlementTitleID":{"hash":764038296,"hash64":240470319698435756},"FDCheatEntityID":9,"CheatQuestID":2200654,"FDHardEntityID":9,"GameBoyCaseID":7}, + {"CheatCodeList":"DASWWSDA","RankingsNPCList":[29,30,31,32],"GameBoyThemeID":"08","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":1835016412,"hash64":955802013933564997},"GameBoyNameID":{"hash":-1784526053,"hash64":10605417009902223452},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":65,"SettlementTitleID":{"hash":764038299,"hash64":6486791935039177330},"FDCheatEntityID":9,"CheatQuestID":2200655,"FDHardEntityID":9,"GameBoyCaseID":8}, + {"CheatCodeList":"ASDWDSAW","RankingsNPCList":[33,34,35,36],"GameBoyThemeID":"09","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-893866943,"hash64":14835954467029955515},"GameBoyNameID":{"hash":-1784526054,"hash64":3696337303282159172},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":36,"SettlementTitleID":{"hash":764038298,"hash64":5088400804746480591},"FDCheatEntityID":9,"CheatQuestID":2200656,"FDHardEntityID":9,"GameBoyCaseID":9}, + {"CheatCodeList":"WSDDAWSA","RankingsNPCList":[37,38,39,40],"GameBoyThemeID":"10","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":1478786053,"hash64":5593766634421475972},"GameBoyNameID":{"hash":-218442104,"hash64":11122166913890161887},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":22,"SettlementTitleID":{"hash":-1964845064,"hash64":9677585650409036356},"FDCheatEntityID":9,"CheatQuestID":2200657,"FDHardEntityID":9,"GameBoyCaseID":10}, + {"CheatCodeList":"ADSWDSWA","RankingsNPCList":[41,42,43,44],"GameBoyThemeID":"11","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-1250097302,"hash64":1339064248483880792},"GameBoyNameID":{"hash":-218442105,"hash64":15322595436253139353},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":103,"SettlementTitleID":{"hash":-1964845065,"hash64":7599976030021133192},"FDCheatEntityID":17,"CheatQuestID":2200659,"FDHardEntityID":17,"GameBoyCaseID":11}, + {"CheatCodeList":"DSAWASDW","RankingsNPCList":[45,46,47,48],"GameBoyThemeID":"12","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-1653381829,"hash64":7099828129959119701},"GameBoyNameID":{"hash":-218442102,"hash64":17427777428931681861},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":195,"SettlementTitleID":{"hash":-1964845062,"hash64":14359814483997256028},"FDCheatEntityID":17,"CheatQuestID":2200661,"FDHardEntityID":17,"GameBoyCaseID":12}, + {"CheatCodeList":"SADWADSW","RankingsNPCList":[49,50,51,52],"GameBoyThemeID":"13","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-87297888,"hash64":1300334042219148964},"GameBoyNameID":{"hash":-218442103,"hash64":12825179565948106076},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":95,"SettlementTitleID":{"hash":-1964845063,"hash64":8340048201173576075},"FDCheatEntityID":17,"CheatQuestID":2200662,"FDHardEntityID":17,"GameBoyCaseID":13}, + {"CheatCodeList":"WADSDASA","RankingsNPCList":[53,54,55,56],"GameBoyThemeID":"14","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":-490582415,"hash64":13411909298182862015},"GameBoyNameID":{"hash":-218442100,"hash64":16679937082849348672},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":453,"SettlementTitleID":{"hash":-1964845060,"hash64":7479687422847937752},"FDCheatEntityID":9,"CheatQuestID":2200663,"FDHardEntityID":9,"GameBoyCaseID":14}, + {"CheatCodeList":"DWSASDWA","RankingsNPCList":[57,58,59,60],"GameBoyThemeID":"15","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":1075501526,"hash64":6829608567207994184},"GameBoyNameID":{"hash":-218442101,"hash64":814084027661868662},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":74,"SettlementTitleID":{"hash":-1964845061,"hash64":16018403863811305804},"FDCheatEntityID":21,"CheatQuestID":2200664,"FDHardEntityID":21,"GameBoyCaseID":15}, + {"CheatCodeList":"SDWAWDSA","RankingsNPCList":[61,62,63,64],"GameBoyThemeID":"16","GameBoyChallengeIDList":[7,5,6],"CoverImagePath":"SpriteOutput/AvatarDrawCardResult/1212.png","CheatSettlementTitleID":{"hash":672216999,"hash64":14575120387392909024},"GameBoyNameID":{"hash":-218442098,"hash64":4440630263438484200},"ChallengeTimeLimit":60.0,"FDCheatInstanceID":110002,"FDHardInstanceID":110001,"FDGroupID":150,"SettlementTitleID":{"hash":-1964845058,"hash64":16722449954201667411},"FDCheatEntityID":9,"CheatQuestID":2200666,"FDHardEntityID":9,"GameBoyCaseID":16} + ] +} diff --git a/run.ps1 b/run.ps1 index 3a14f40..d64e0eb 100644 --- a/run.ps1 +++ b/run.ps1 @@ -21,15 +21,17 @@ function Resolve-ProjectPath([string]$Path) { if ([IO.Path]::IsPathRooted($Path)) { return [IO.Path]::GetFullPath($Path) } return [IO.Path]::GetFullPath((Join-Path $PSScriptRoot $Path)) } -function Stop-ProjectServer([string]$Name) { - $target = Resolve-ProjectPath ($Name + '.exe') +function Stop-ProjectServerAt([string]$Name, [string]$Target) { Get-Process -Name $Name -ErrorAction SilentlyContinue | ForEach-Object { - if ($_.Path -and [string]::Equals($_.Path, $target, [StringComparison]::OrdinalIgnoreCase)) { + if ($_.Path -and [string]::Equals($_.Path, $Target, [StringComparison]::OrdinalIgnoreCase)) { Stop-Process -Id $_.Id -ErrorAction Stop - if (-not $_.WaitForExit(5000)) { throw "Server did not stop: $target" } + if (-not $_.WaitForExit(5000)) { throw "Server did not stop: $Target" } } } } +function Stop-ProjectServer([string]$Name) { + Stop-ProjectServerAt $Name (Resolve-ProjectPath ($Name + '.exe')) +} function Start-ProjectServer([string]$Name) { $path = Resolve-ProjectPath ($Name + '.exe') if (-not (Test-Path -LiteralPath $path -PathType Leaf)) { throw "$Name is not built. Run build first." } @@ -40,18 +42,29 @@ function Start-ProjectServer([string]$Name) { } function Build-Servers { $go = Resolve-GoToolchain $settings.launcher + $shipDirectory = Resolve-ProjectPath 'for ship' + New-Item -ItemType Directory -Path $shipDirectory -Force | Out-Null foreach ($name in @('gameserver', 'sdkserver')) { $next = Resolve-ProjectPath ($name + '-go.next.exe') & $go build -o $next ('./cmd/' + $name) if ($LASTEXITCODE -ne 0) { throw "Build failed: $name. Existing binaries were not replaced." } + + $shipName = $name + '-go' + $shipNext = Join-Path $shipDirectory ($shipName + '.next.exe') + & $go build -tags ship -o $shipNext ('./cmd/' + $name) + if ($LASTEXITCODE -ne 0) { throw "Shipping build failed: $name. Existing binaries were not replaced." } } foreach ($name in @('gameserver-go', 'sdkserver-go')) { $next = Resolve-ProjectPath ($name + '.next.exe') $target = Resolve-ProjectPath ($name + '.exe') + $shipNext = Join-Path $shipDirectory ($name + '.next.exe') + $shipTarget = Join-Path $shipDirectory ($name + '.exe') Stop-ProjectServer $name + Stop-ProjectServerAt $name $shipTarget Move-Item -LiteralPath $next -Destination $target -Force + Move-Item -LiteralPath $shipNext -Destination $shipTarget -Force } - Write-Host 'Build successful. Binaries are in the project root.' + Write-Host "Build successful. Standard binaries are in the project root; self-contained binaries are in '$shipDirectory'." } function Start-External([string]$Setting, [string]$EnvironmentName) { $path = [Environment]::GetEnvironmentVariable($EnvironmentName) @@ -155,6 +168,7 @@ try { Write-Host '[1] Build, start servers and game (default)' Write-Host '[2] Start servers | [3] SDK only | [4] Game server only' Write-Host '[5] Start servers and proxy | [6] Build only | [7] Exit | [8] Stop servers' + Write-Host '[9] Check/install Go build requirement' $Action = Read-Host 'Select' if ([string]::IsNullOrWhiteSpace($Action)) { $Action = '1' } } @@ -165,7 +179,7 @@ try { { $_ -in @('4','gs') } { Start-ProjectServer 'gameserver-go'; break } { $_ -in @('5','proxy') } { Start-ProjectServer 'sdkserver-go'; Start-ProjectServer 'gameserver-go'; Start-External 'proxy_path' 'GAC_PROXY_PATH'; break } { $_ -in @('6','build') } { Build-Servers; break } - 'requirements' { $go = Resolve-GoToolchain $settings.launcher; Write-Host "Go ready: $go"; break } + { $_ -in @('9','requirements') } { $go = Resolve-GoToolchain $settings.launcher; Write-Host "Go ready: $go"; break } '7' { break } { $_ -in @('8','stop') } { Stop-ProjectServer 'sdkserver-go'; Stop-ProjectServer 'gameserver-go'; break } default { throw "Unknown action: $Action" } diff --git a/scripts/facecam_probe_temp.lua b/scripts/facecam_probe_temp.lua new file mode 100644 index 0000000..a29cd57 --- /dev/null +++ b/scripts/facecam_probe_temp.lua @@ -0,0 +1,20 @@ +if not _G.__GAC_FACECAM_PROBE_BATTLE then + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or not typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + _G.__GAC_FACECAM_PROBE_BATTLE=true + local t=phase:GetType() + CS.UnityEngine.Debug.Log('[FaceCam battle] phase='..tostring(t)) + for _,members in ipairs({t:GetFields(flags),t:GetProperties(flags)}) do + for i=0,math.min(members.Length-1,199) do + local m=members[i];local n=tostring(m.Name):lower() + if n:find('actor') or n:find('entity') or n:find('avatar') or n:find('turn') or n:find('battle') or n:find('stage') then + CS.UnityEngine.Debug.Log('[FaceCam battle] member='..tostring(m.Name)..' detail='..tostring(m)) + end + end + end + end) + if not ok then _G.__GAC_FACECAM_PROBE_BATTLE=true;CS.UnityEngine.Debug.Log('[FaceCam battle] error='..tostring(err)) end +end diff --git a/scripts/freecam.lua b/scripts/freecam.lua index 183b151..33e4592 100644 --- a/scripts/freecam.lua +++ b/scripts/freecam.lua @@ -9,7 +9,28 @@ local GameObject = CS.UnityEngine.GameObject _G.__FREECAM_ENABLED = _G.__FREECAM_ENABLED or false _G.__FREECAM_SPEED = _G.__FREECAM_SPEED or 15.0 -local RAINBOW_TEXT = "นี่คือเวอร์ชั่นทดสอบของเกย์ Honkai Star Gay" +local WATERMARK_PREFIX = "นี่คือเวอร์ชั่นทดสอบของเกย์ " +local WATERMARK_NAME = "Honkai Star Gay" + +-- A closely spaced hue gradient sweeps from right to left. +-- Keep the server name, UID, and the Freecam controls independent. +local function rainbow_watermark(now) + local parts = {WATERMARK_PREFIX} + for i = 1, #WATERMARK_NAME do + local h = ((now * 0.12 + (i - 1) * 0.035) % 1) * 6 + local x = 1 - math.abs(h % 2 - 1) + local r, g, b + if h < 1 then r, g, b = 1, x, 0 + elseif h < 2 then r, g, b = x, 1, 0 + elseif h < 3 then r, g, b = 0, 1, x + elseif h < 4 then r, g, b = 0, x, 1 + elseif h < 5 then r, g, b = x, 0, 1 + else r, g, b = 1, 0, x end + parts[#parts + 1] = string.format("%s", + math.floor(r * 255 + 0.5), math.floor(g * 255 + 0.5), math.floor(b * 255 + 0.5), WATERMARK_NAME:sub(i, i)) + end + return table.concat(parts) +end local function show_ui(msg) pcall(function() @@ -41,6 +62,42 @@ local function get_active_cam() return nil end +-- Resolve the character through the active camera's own follow target. A +-- humanoid head bone gives a model-relative point as the character moves. +-- Do not guess a world position if the Client has no usable target. +local function facecam_target(cam) + local ok, head, root = pcall(function() + local brain = cam:GetComponent(typeof(CS.Cinemachine.CinemachineBrain)) + local virtual = brain and brain.ActiveVirtualCamera + local follow = virtual and virtual.Follow + if not follow then return nil, nil end + local animator = follow:GetComponentInChildren(typeof(CS.UnityEngine.Animator)) + if not animator and follow.root then + animator = follow.root:GetComponentInChildren(typeof(CS.UnityEngine.Animator)) + end + if not animator or not animator.isHuman then return nil, nil end + local bone = animator:GetBoneTransform(CS.UnityEngine.HumanBodyBones.Head) + return bone, animator.transform + end) + if ok then return head, root end + return nil, nil +end + +local function update_facecam(cam, settings) + local head, root = _G.__FC_FACE_HEAD, _G.__FC_FACE_ROOT + if not head or not root or not head.gameObject.activeInHierarchy then return false end + local distance = tonumber(settings.distance) or 2 + distance = math.max(0.5, math.min(5, distance)) + local target = head.position + local direction = root.forward + local position = target + direction * distance + cam.transform.position = position + cam.transform.rotation = CS.UnityEngine.Quaternion.LookRotation(target - position, Vector3.up) + _G.__FC_POS = cam.transform.position + _G.__FC_EULER = cam.transform.eulerAngles + return true +end + -- Detach only the active camera brain and restore its recorded state. Virtual -- cameras continue updating animation/effect state; do not scan/disable every -- virtual camera on each render frame. @@ -174,17 +231,42 @@ function _G.__FREECAM_TICK() _G.__FC_LAST_TIME = nil local cam = get_active_cam() if _G.__FREECAM_ENABLED then + local settings = _G.__GAC_CAMERA_SETTINGS or {mode="freecam", distance=2} + if settings.mode == "facecam" then + local head, root + if cam then head, root = facecam_target(cam) end + if not head or not root then + _G.__FREECAM_ENABLED = false + show_ui("FaceCam: character head unavailable") + CS.UnityEngine.Debug.Log("[FaceCam] active camera follow target has no humanoid head") + return + end + _G.__FC_FACE_HEAD, _G.__FC_FACE_ROOT = head, root + end if cam then _G.__FC_POS = cam.transform.position _G.__FC_EULER = cam.transform.eulerAngles set_cinemachine_enabled(cam, false) end - show_ui("[FreeCam: ON] Speed: " .. string.format("%.1f", _G.__FREECAM_SPEED) .. " | Arrows: Fly | PgUp/PgDn: Up/Down | RMB: Look") + if settings.mode == "facecam" then + show_ui("[FaceCam: ON] | Tab: Close") + else + show_ui("[FreeCam: ON] Speed: " .. string.format("%.1f", _G.__FREECAM_SPEED) .. " | Arrows: Fly | PgUp/PgDn: Up/Down | RMB: Look") + end else if cam then set_cinemachine_enabled(cam, true) end - show_ui(RAINBOW_TEXT) + _G.__FC_FACE_HEAD, _G.__FC_FACE_ROOT = nil, nil + show_ui(rainbow_watermark(Time.unscaledTime or 0)) + end + end + + if not _G.__FREECAM_ENABLED then + local now = Time.unscaledTime or 0 + if now >= (_G.__FC_WATERMARK_NEXT or 0) then + _G.__FC_WATERMARK_NEXT = now + 0.05 + show_ui(rainbow_watermark(now)) end end @@ -197,6 +279,16 @@ function _G.__FREECAM_TICK() if _G.__FREECAM_ENABLED then local cam = get_active_cam() if cam then + local settings = _G.__GAC_CAMERA_SETTINGS or {mode="freecam", distance=2} + if settings.mode == "facecam" then + if not update_facecam(cam, settings) then + set_cinemachine_enabled(cam, true) + _G.__FREECAM_ENABLED = false + _G.__FC_FACE_HEAD, _G.__FC_FACE_ROOT = nil, nil + show_ui("FaceCam: character unavailable") + end + return + end set_cinemachine_enabled(cam, false) if not _G.__FC_POS then @@ -287,7 +379,7 @@ if not _G.__FREECAM_REGISTERED then end if not _G.__FREECAM_ENABLED then - show_ui(RAINBOW_TEXT) + show_ui(rainbow_watermark(Time.unscaledTime or 0)) end -- Restore the in-memory controls before the Client tears down its settings. diff --git a/scripts/ping_rainbow.lua b/scripts/ping_rainbow.lua new file mode 100644 index 0000000..581cfed --- /dev/null +++ b/scripts/ping_rainbow.lua @@ -0,0 +1,190 @@ +-- Color only the captured latency widget. Signal sprites contain all bars in +-- one atlas image: three UV slices preserve its alpha without replacing art. +do + local CS=CS + local U=CS.UnityEngine + local UI=U.UI + local VERSION=7 + local SPEED,SPACING=0.16,0.13 + local PATHS={ + 'UIRoot/Page/MazeMainPage(Clone)/RightTopArea/NetStatusPanel/NetStatusPanel(Clone)', + 'UIRoot/Page/BattleGamePhaseUI(Clone)/FunctionArea/NetStatusPanel/NetStatusPanel', + } + local old=_G.__GAC_PING_RAINBOW_STATE + local function event(target,name,op,fn) + return pcall(function()target[name](op,fn)end) + end + if old and old.version~=VERSION then + if old.callback then + -- v5 tried both event binding forms; remove both possible subscriptions. + for _,entry in ipairs({{U.Camera,'onPreRender'},{U.Camera,'onPreCull'},{U.Application,'onBeforeRender'},{U.Canvas,'willRenderCanvases'}})do + event(entry[1],entry[2],'-',old.callback);event(entry[1],entry[2],'-',old.callback) + end + end + if old.dispose then pcall(old.dispose)end + old=nil + end + local s=old or {version=VERSION,targets={},nextScan=0,lastFrame=-1,nextColor=0} + _G.__GAC_PING_RAINBOW_STATE=s + local function log(message)U.Debug.Log('[GaC Ping Colors] '..message)end + local function color(h,a) + local v=(h%1)*6;local x=1-math.abs(v%2-1) + if v<1 then return U.Color(1,x,0,a) + elseif v<2 then return U.Color(x,1,0,a) + elseif v<3 then return U.Color(0,1,x,a) + elseif v<4 then return U.Color(0,x,1,a) + elseif v<5 then return U.Color(x,0,1,a) + else return U.Color(1,0,x,a)end + end + local function dispose_target(target) + for _,icon in ipairs(target.icons or {})do + for _,slice in ipairs(icon.slices or {})do pcall(function()U.Object.Destroy(slice.gameObject)end)end + if icon.mask then pcall(function()U.Object.Destroy(icon.mask)end)end + pcall(function()icon.image.enabled=icon.enabled;icon.image.color=icon.color end) + end + if target.text then pcall(function() + if target.text.text==target.rendered then target.text.text=target.base or ''end + target.text.color=target.textColor;target.text.supportRichText=target.rich + end)end + if target.mesh then pcall(function()U.Object.Destroy(target.mesh)end)end + end + s.dispose=function()for _,target in pairs(s.targets)do dispose_target(target)end;s.targets={}end + local function white_mask(sprite) + local r=sprite.textureRect + local width,height=math.floor(r.width),math.floor(r.height) + if width<=0 or height<=0 or width>128 or height>128 then error('signal mask outside small-widget bound')end + local texture,temporary + local previous=U.RenderTexture.active + local ok,err=pcall(function() + local source=sprite.texture + temporary=U.RenderTexture.GetTemporary(width,height,0,U.RenderTextureFormat.ARGB32) + U.Graphics.Blit(source,temporary,U.Vector2(r.width/source.width,r.height/source.height),U.Vector2(r.x/source.width,r.y/source.height)) + U.RenderTexture.active=temporary + texture=U.Texture2D(width,height,U.TextureFormat.RGBA32,false) + texture:ReadPixels(U.Rect(0,0,width,height),0,0) + local pixels=texture:GetPixels32() + for i=0,pixels.Length-1 do pixels[i]=U.Color32(255,255,255,pixels[i].a)end + texture:SetPixels32(pixels);texture:Apply(false,true) + texture.name='GaCPingAlphaMask';texture.filterMode=U.FilterMode.Bilinear + texture.wrapMode=U.TextureWrapMode.Clamp + end) + U.RenderTexture.active=previous + if temporary then U.RenderTexture.ReleaseTemporary(temporary)end + if not ok then if texture then U.Object.Destroy(texture)end;error(err)end + return texture + end + local function make_slices(icon) + local sprite=icon.image.sprite + if not sprite then error('signal sprite unavailable')end + if sprite.packingRotation~=U.SpritePackingRotation.None then error('rotated signal atlas not supported')end + local rect=sprite.textureRect + if sprite.textureRectOffset.x~=0 or sprite.textureRectOffset.y~=0 or rect.width~=sprite.rect.width or rect.height~=sprite.rect.height then error('trimmed signal sprite not supported')end + icon.mask=white_mask(sprite) + for i=0,2 do + local go=U.GameObject('GaCPingColorSlice'..tostring(i),typeof(U.RectTransform),typeof(UI.RawImage)) + local rt=go:GetComponent(typeof(U.RectTransform)) + -- Track immediately so a later binding failure cannot leave an overlay. + local raw=go:GetComponent(typeof(UI.RawImage));icon.slices[#icon.slices+1]=raw + rt:SetParent(icon.image.transform,false) + rt.anchorMin=U.Vector2(i/3,0);rt.anchorMax=U.Vector2((i+1)/3,1) + rt.offsetMin=U.Vector2.zero;rt.offsetMax=U.Vector2.zero + raw.raycastTarget=false;raw.texture=icon.mask + raw.uvRect=U.Rect(i/3,0,1/3,1) + end + icon.image.enabled=false + end + local function discover(path) + local root=U.GameObject.Find(path) + if not root then return end + local target={root=root,id=root:GetInstanceID(),icons={}} + local ok,err=pcall(function() + local connected=root.transform:Find('Connected') + if not connected then error('Connected node unavailable')end + local time=connected:Find('Time');target.text=time and time:GetComponent(typeof(UI.Text)) + if not target.text then error('latency Text unavailable')end + target.textColor=target.text.color;target.rich=target.text.supportRichText + target.mesh=U.Mesh();target.mesh.name='GaCPingLatencyColors' + for _,name in ipairs({'Level1','Level2','Level3'})do + local t=connected:Find(name);local img=t and t:GetComponent(typeof(UI.Image)) + if img then target.icons[#target.icons+1]={image=img,enabled=img.enabled,color=img.color,slices={}}end + end + if #target.icons==0 then error('signal level Images unavailable')end + end) + if not ok then dispose_target(target);error(err)end + log('READY '..path..' icons='..tostring(#target.icons)..' mode=white-alpha-slices/text-vertex-colors real-latency=true') + return target + end + _G.__GAC_PING_RAINBOW_TICK=function() + local frame=U.Time.frameCount + if s.lastFrame==frame then return end;s.lastFrame=frame + local now=U.Time.unscaledTime + for _,path in ipairs(PATHS)do + local ok,err=pcall(function() + local target=s.targets[path] + if target then + local alive=pcall(function()return target.root.transform.childCount end) + if not alive then dispose_target(target);s.targets[path]=nil;target=nil end + end + if not target and now>=s.nextScan then target=discover(path);s.targets[path]=target end + if not target or not target.root.activeInHierarchy then return end + local phase=(now*SPEED)%1 + for _,icon in ipairs(target.icons)do + if icon.image.gameObject.activeInHierarchy then + if #icon.slices==0 then make_slices(icon)end + for i,slice in ipairs(icon.slices)do slice.color=color(phase+(i-1)*SPACING,icon.color.a)end + end + end + -- Color the freshly generated native glyph mesh at the canvas boundary. + -- Never rewrite latency text: number changes cannot expose an untagged + -- cyan/white frame between a native setter and a rich-text repaint. + local text=target.text;target.base=tostring(text.text or '') + -- Unity 2019 exposes SetMesh but no CanvasRenderer.GetMesh. Its Text + -- generator retains the same glyph quads used by Text.OnPopulateMesh. + -- Captured here: "10ms" has 16 vertices, all four quads populated; this + -- engine does not append the unused quad found in older uGUI sources. + local verts=text.cachedTextGenerator.verts + local count=verts.Count + if count>0 and count<=512 and count%4==0 then + if target.vertexCount~=count then + target.mesh:Clear() + target.vertexCount=count + target.positions=CS.System.Array.CreateInstance(typeof(U.Vector3),count) + target.uvs=CS.System.Array.CreateInstance(typeof(U.Vector2),count) + target.colors=CS.System.Array.CreateInstance(typeof(U.Color32),count) + target.indices=CS.System.Array.CreateInstance(typeof(CS.System.Int32),count/4*6) + for q=0,count/4-1 do + local v=q*4;local t=q*6 + target.indices[t]=v;target.indices[t+1]=v+1;target.indices[t+2]=v+2 + target.indices[t+3]=v+2;target.indices[t+4]=v+3;target.indices[t+5]=v + end + end + local scale=1/text.pixelsPerUnit + local offset=text:PixelAdjustPoint(U.Vector2.zero) + for i=0,count-1 do + local vertex=verts[i];local pos=vertex.position + target.positions[i]=U.Vector3(pos.x*scale+offset.x,pos.y*scale+offset.y,pos.z*scale) + target.uvs[i]=U.Vector2(vertex.uv0.x,vertex.uv0.y) + local c=color(phase+(3+math.floor(i/4))*SPACING,1) + target.colors[i]=U.Color32(math.floor(c.r*255+0.5),math.floor(c.g*255+0.5),math.floor(c.b*255+0.5),vertex.color.a) + end + target.mesh.vertices=target.positions;target.mesh.uv=target.uvs + target.mesh.colors32=target.colors;target.mesh.triangles=target.indices + text.canvasRenderer:SetMesh(target.mesh) + end + end) + if not ok then + if s.targets[path]then dispose_target(s.targets[path]);s.targets[path]=nil end + if s.error~=tostring(err)then s.error=tostring(err);log('ERROR '..s.error)end + end + end + if now>=s.nextScan then s.nextScan=now+1 end + end + if not s.callback then + s.callback=function()if _G.__GAC_PING_RAINBOW_TICK then _G.__GAC_PING_RAINBOW_TICK()end end + s.registered=event(U.Canvas,'willRenderCanvases','+',s.callback) + if not s.registered then s.registered=event(U.Application,'onBeforeRender','+',s.callback)end + log('CALLBACK registered='..tostring(s.registered)) + end + -- The heartbeat only installs/replaces the callback. A heartbeat-time paint + -- must not suppress the later canvas paint for that same frame. +end diff --git a/tools/AI TOOLBOX/skills/SKILL.md b/tools/AI TOOLBOX/skills/SKILL.md index 9092ca5..0bc635a 100644 --- a/tools/AI TOOLBOX/skills/SKILL.md +++ b/tools/AI TOOLBOX/skills/SKILL.md @@ -5,7 +5,7 @@ description: คู่มือ Honkai Star Rail Private Server (GaC-hkrpg-go # คู่มือ HSR Private Server — บทเรียนที่พิสูจน์แล้ว (อัปเดตล่าสุด: 2026-10-07) -> **สถานะปัจจุบัน:** เซิร์ฟเวอร์หลักคือ **`C:\Users\Phitchayut\Desktop\GaC-hkrpg-go` (ภาษา Go, client 4.6.51)** +> **สถานะปัจจุบัน:** เซิร์ฟเวอร์หลักคือ **`C:\Users\Phitchayut\Desktop\GaC-hkrpg-go` (ภาษา Go, client 4.6.5)** > โปรเจกต์ Rust `GaC-hkrpg-ps` เป็นตัวต้นทาง/reference — โค้ด Rust ล่าสุดแตกตัวกับ proto ใน repo (ดูหัวข้อ 10) > เอกสารฉบับเต็มของตัว Go อยู่ที่ `GaC-hkrpg-go/README.md` diff --git a/tools/__pycache__/compare_cw_reference_protocol.cpython-314.pyc b/tools/__pycache__/compare_cw_reference_protocol.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e17e95d14fb4dd5e63193bc714b8f3fd90a59650 GIT binary patch literal 9092 zcmb_CZE#apcK3ZqmL-2k{=g;>EZblZU^xc!WgHUY55Qg<@oZ!Q0_9nHwjSt<_aqxT zfhuXIYntrDY_i3f*_kyPIx(GOaoU|pwoRvOJL!^{wvi$`GB0eWGyRo+32t}e{nMWF zq$dgE&}1iXM)%x%?z#7#d(XM&o^!8uloT5Ye82qH|2Y4kgpmKjg7(pw%<>3iVuT|R za*lA+F)Bi-kdDwQWFibe`WSmu7tz%q4RcI?v>;-rAskypB88j|QsY?@r{8~y5HF0l zk(@Qwl9tQ>Ku6W9KU=}%@s3a+%u9k*5=I0`2zmr-$B@-4$R0@yM?#Wp9Ty`$Ys7~X z;gBo>Zepu!^*}SxFL?7vt+EiY_uD9ib?^}%z>-`y?(py~52Z~NpdNk<{FcWc;c1?U zktPzNowSqLO>?A*_zfY(Nz9~sDiKaK*twsv`yJM;1_nfe;iYa^tP zY$5}6J+aZA{B}BMP!7N4E0DC&F`|yX2S%rz6i4#=bJA;Zl1~w4ob&+eWE!Ba0Uhv8 zuf?O2$>VHanlqG*jaDdFNm^lpd_Yi4K|ziPUUy_7EZFo4D}}~oMIQ!Sbt2BxDLER+Je-os&`!<~sH< zMnJ1%m=FM|7+WAuG7CwA_1R~oQphLtowH~tFtW|iDlgs zd(Tij%39(=9@UQ{`!cE?1|@P7X!soDD3?JiaWu#5!_nZY`6hbyJJRdEBfb7H z^eFdLpJqzJl&eUqa-g7AeGXjORUd5EvQ;Q3Iw~KU)n(o8gMpWFo_JvDa2Q-|sSX;|;6wdh|rAgKc`nVD7*+6+M8Tz+#qE;qp3!nS2=<)jEc-Hh6r8OxSG!irm1`q8Iy77k z{_&R4(Ut2(%W3lBD!#+`)mrNu{5H1ovEx^A>+Dn$6E0nQ4Y{hFc_)nHNN!{;=K{@2 ze~un4mxEwKtDU9XdZ(d@K1Xv;Xe+O+G@Pkx%8uLcy^OojS;#%O|Iiw4_r+ZK^vq=HcMm8qpAG{n!3E+3$rbs%)=V9*m@l0q&Z__z&eM` zPV?G3)SEs9Dqx42!E%89;29I8!{#Qv)}IDpFKn)dx*8H?!n!ak=JExZJe|ct4fgY--ch9Wor8JK(G)~~CW!v@YdOcj z!x}ELlhzJL?GVgtv0q?#fV|)a!$?1Da2jeK(FKP&$BCBHv`eL5r7Mr4$0Hr0QQcto zBeDB#=v$55>wv2m86@4{q+PVE6&Hgkp`*0wq(by|v2LyK$w`BQ3NAy&c+i(f4DL31 z!ShjP3tXsXgAUUo*~5sGjl%F4f8s5sxod%+hUx<}x~-U%>R@mcCzIo{zje`SZzS*{&Otv$fav zU)w*^{^Qmglb@CC`uoc(pO)=fkx?05E;~TIQQ4xuWj+9=D-;w$BW^M16)rurgatsU znu~tO@GycaYZ#nlH(WQM$LY#$S&o8D50@d@Hq!+9C`P^3$o2)D<7QQbg`#Prcq%I} z@Sj6e-nf)D?m(XT&_>D#1mYc4AfSe-80d#)1sf(k){oV(vLk`#1geqG71ZO$5v_ks z*)tv=_-}A(XMCtMZ8{yG^R^d67C?oguKF_E9(tJDTeO5y?FU6M9OdP1R2~&0)dSkb zNSgsj7eC6N4W1tfUe zrk6t!+zx5%!fO}ODt1%A&{I%U7`RHcQBpJHW!yF+nR~Cc zjE*T=zLgkN?pvY#*D-Qa58QyvAnl}&AisHY0cNnI)^#vYN)y(0GV0}+tx#cjuUBC& z2otiR6C*-EmewPqIzK-w_|+9viUyx^bh-Pw1_s)XbSZ`Cn5lk}R0ou{B8B1=YFJ@q zK?o}Jr4fam7*QB7-3k>=Z#w;`6pDsrh4us#dL*FeRNJgt)dsxC#4i@hX!8*qzI=^k zz|mv_tQt&usi=5r&vfUjPv0xAS~3*9X1HpYuAQ!YwRFi;G=2EhgEO_WyMDUkUU~IB zOWz&(PV+~)JHvM^9|^y@oV4^^)lbn&rsCK3UETM}f$8Dvqt`}X7Z*%5K)zI2b^X+} zQ-68-Y8PCCmY9DuI@P{ZYJP3(>e%$f>tol(UcEAFdAsUH)m-iEt+%!=)Hctbc>nZ! zr|%Re_w>gdCsK~n3CHR98DG*NF6MndpVF$&xZk`;OqB++B#{UR^JefH!No^dTEKnT+nVEpjVuwiN2pBSs4@?;rARvIkEGG?l9$QO})c z_{6E_;{$_tcKoK~pGuOao?ltUQ}pG^DoU}a+ThNq$M-!8jN$vGAxI^-dLoa^K{^ds zm0!5;(G2e-7H;1P>?LbAe(> z>$_JR$vk$+{a^eqe70?hftN->A7nu(X_rPpae@&C7A2*??e>N|ZnshdHqZ@ZYNdqd z1t<;DAW~K+uTtI(&la88$1?{$ttiHBDHIrpNT4uEVRkzyMoHkk?%|0DJa>}xGoHn1(xJ!z*eD9VTHv7l0+C!^5dY?g|x*l*6apG z+3@Ov?5Af|klA9=AU48SO?nzz8a)uti(Vd9O~T7J=>#TtLQ8lDCUs+iXMckldEabFnYSd&TTo?4BQ_uaLw&?aRZzksIDL`$UIkULlHn)53%HobgiS>u3n5o``p?b+!JSCc*)#&wTA$?s;x;%l;4QKL{?i_9eFT zU2mUme^Z(=#>@Nf7n@%>ImO<$*3b65RXT4;Sa+qYT-?gN7yaPG-P(V+e0MOpkDFrR zMVk_ank7?7ytFoDs{71T_j%QZYs@sYR9^8$+w76Q>Y1l*_AOOBnX1^FsMtKq&r|Oj z=bPhO_AFHFUD~j5hI-uykEhiezbb{q`f0$?@8Eu?zVh#=;K4FUT>n;o9rD)+DB9NiwXP1q+JGqM8RBwcus)x3MCf^ z5v=A3dIY6(f)1ca5kOs#mJk`FClQH2Ep?$%1VNtAE=V6iaDqOHPVWhL%T$|lY2+XS zy_{r*5qKG|4uFRd5ST}Fv7RNE&Y73a#4U}By2ccHAi*B^aPvQI|GVvX{PBUa@pHbo zcro53#V21_Xnk>ky_}`rzNp)tV)rK4y}yjSKlwM4ciQ6UP6_dmKs-1B-M>I};siRV zE(CpaKhAjnaZGg%`aWCu>gLzB|Hby{^Eb<9Prdcz+>0M}B-BGO`3#?ISf|*2;e)c#Ez`+i)u&Vv62T2e>NrpdwKplciI{?@VAlC`lrD=qP zAVW9Gt}Gv;NaYB%vP|Q4S$SY5700QS2h}RQ+zgiQBTE&xP5)7A8E4o3i{(j7cek?u zJ}zqDTJ#_9(?gm#WZ@3feOjT1R57^SXgl3*Tan~}9wZ)<%a{ZpK_@bTPGS0hEFBGn zM*V_a{g=UTbVNcgNE*Qe?v;sZfw4&vc50OUa+o4)(bVY$rs^JR`15Xf?Psf1 HNBI8$tu!+A literal 0 HcmV?d00001 diff --git a/tools/__pycache__/dump_embedded_proto.cpython-314.pyc b/tools/__pycache__/dump_embedded_proto.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9dde358a2cf9e57e7ace60511396ea0c87795c31 GIT binary patch literal 5297 zcmbUlTWs6b^-`oHN|fbyoVVrJNvzDVk=St@$7`F|ahy4IRoaodR+T`Tv@OSy7?Scs zD;5>cR=_JdG%X4=8wxZ72F$<)G(h`7RdS^=-ukgG|20X6VShW95+%iR zQ(zb1eV%*nJ&$`H{E@TFj-Xup{2x=D3_}0J1EZMookt>c5{N|#3Lus^M<|5eniP}X zk_ri}=^Qm+R?PJnhCF8(uqxI8TA}L^OVuI8#+sqFvlghCmmRFN>ji{(ID0pGnQ1^B z`J(`uXw*M99Uou?j(2gc2p1N3mk=Hmcpf_ap=qH{kjJEus6-`?6jh?G*^n|BjVUf+ zP8f?Rp~!?Qq{yx@PLe``)H>uQG|Iy%lWvpdVrCgyo9HO$ru_JL&-!_ zD+mh&N_ml|z{DI3u6<1%c||x$h*SV|{TWo1!$R<5Zs^5pGFYAy68~eo?xO;x7X3lx zp(q0Rt@$k|VBczgYXOt~Bz9mtUebekxT%0bJcix4K|S(PTVZ}o^{Bx)gn(|dmjrdy zKs_xZ7T^Hohi9KFB{-0Q+iPLT76SlUgEJ+H*^H3CpyWQvfS3gyN{ZJSu$C%(z|=Jh zDh*l!R9XXMO9`DUbpoWugG4~xho6A;b>BegokW}0w$Y&+x3J{p9{4V|Gb;emN;Uyekn77*DKu0NK_axyp z2T-Z$YD8{}WC1+!hBI@bFs6VNiADt1STrn73yR<>8c|oAZgGuAV-emJf(?Y5*}zY4 z1HYgR{J1tKT;WS^V2m61Ic(tfx`9Q%;lLGUw%a7*b={yGEq2@84$UG&#-hBSQRATq zuaVP2L^JEgNwaXGDB!tpD59Gl2_LCdZ{Z^}d%qM74=Z2`Co~HC6bawL%}Dqj(tf

cU>g-qQZ!QG00}m)8i~)RFhgYgl5|@M<`Rm8$pV~n zio}g6QY(zGM#wTS2rQ$s>c+*zi&w*mv)QVe#9-FWBzm(|+itmUx|h$Us@y8$UTD9~ zrR{C&jB{c3YR__Gn%T3`boaFFtW~SFul&ow|aj|F8BS$wsP$D z?zP5ashZBOoSo}+dzSfBUGw6=LT|RbYU%mwv&#+FUIC=sJ9BCqo33ZSuBct#zIRzk zZFeu8Tj-H z>3vX-s`h;6Lf}A-y%t}3{`Jf2&h6^1p1UJ=`&XO4XulWxy!&2@y2F=pzM#@CWSNSk z%IjT;=Op})$KWdzEFY{dkKP6KOdx+@!BZLt>e6ejnMQ`n?FU}i1gJRYO7TIOY7F*WtC0WMTTk6?a#}A$9YxIKmH*D;a z&TTV`)~$I5-nXpO)3uby*wa|Nq0xK%Owgh&B?4HT--{L7!A-?~z?kqf8@*!NfY@@c zm9_Z~8FQXe zE-h>&E6+uN= zV94GuA7{qGe2AA@b;L9TXJIbFLmDSUVqu^vEXXo9A;?4Sy&BC)6F{ykXwFm8L@W$g zJ$NW-)?kp2js=67gX8%ifa!}8_C#=541*_S&64A^W|tr<59;BU9@0pV`XbW>%XMyKRTPHI})d|l=;n}SBI9m-|M^6kr+x-UB=8)xBKw;h%qjKU>rAk7JIHf zmFR<<_{Pb_lNqKV$uy*x#zfzG9YkO62Y&~F)3GE~lQ;v>6Ggu{`08MWs!dY0%lz#T zm8wlsN7o^rrf!wrEKf1646{GU><4^Rjqja(f9TzzI~}Q}u1wSEWYg(XQ{U>eI_%2~ z`;)_dH88GDOskO@bvFJlgyx7-rf(7IHF-_nL52+0``@?`Ob>Gntc{zdFvunNEu@cP zCdku$rkNb%Gvot2dWO^|Pm=&r)k`LRk~Q1jeCgGfmYUSMgKJd>*UZfs3J5xOhhMF} z6HQb7B>?WVD)*ZCP=@MEQk|bDpT_?fU+qynFRK2@bVz{ct(vAMb{-qd|7*W#|F zm)C6jGIVQ_Zv9C4IR0V$ZqGftIuZaZYB#S=htq8lb^fwSx5DAJQ>JywcCG2gp(}^f z+WBQWR4Zpc>b*mK>imN<)$;V}&M$gZ&q&6@B|Ti~{HV%D(osp3XH(I+WbJ&)9{-B^ z*?%5ck>esEJ3tvftJycmSUx*>7;23U2C=3FgYGiv3@l2$xOx^>EL7MWD)_bLo__g6 zG&(UYwCefTXlz_htn{at%d@bD)|DRP#pWs)`~c}8b}sFqd%{sZHZ43Q2>^-XH~Az~ z-;xADe2s?gqw@R6c^@%v&c{YL)- K5>Y#KGJuHrsiUZ>(RNzN6nZ0D3zxiYZe#bc5`sZ{DJf25P^a(9)g zOTU4EMM5X1Dl6-~H}Cc9?$_O~yI;!(t$8K{zyJ8>f1CO{2SWdjKh&RYYw&1{Kq!f5 zB%)D769a@uC_O2XO0N+$N>7QD(rZO6^yGl9UoYzW4WgmnC>ks9Ud@21-z=Id5KR>! z(Q+-1)^=P*D0l}U7rI9HTq^0Ez7kzSwC*TyfPbRxn$1_aInHfq{WZ#0l{>RJrVX_5 zsAh9qfu6G0^bPmcK8e3=Yf3D*W&utMeDzPlz-+^lvu)(&9LR#GR{na-Gyg@0*kDsU z7MXURiMzQ#Bqp+BZZ;Nl2g7_QAT|ZqNW>kE-3-OVI6v(kkMpqV4&CM=;Xqh~Z9*sl zaG{{v*XuQzh9<*;8#cyohIqjph)20_1lGnAv49wk$J{YC8WI%zQ8q9cj)j^6@nFcU zPzePmLPDcE78l(@Ji!M-CS?sMa(p~K?iMFm(apLifxAeEcMFL?AQTD;UUzpiIM9R1 z-bet`z!AsttQd0N!e61A;b15h2zgBxJQ|to7G!hxpudam?)P8rI3kY^vf8hN2z?Qfap;@5CN_|vgMTo6n>se0{G03-NB%6ZWY*htudZag-uQAMINgX*l{vF5b35vbBgE;4Cr0ZVwdy)TyLK9e>lwqSA$N{I zKJyN=I--rLOniCj+)huM)K$*-Ol_El>vvOBPk0L~mH!d{`Jl&V+rh1lhW}#t^VaRt zRiLvs5Hh0uh^c2htt4$JLJ|HyBCdE84LK6z39=&}Xu!G)(KcnA#N+d11v>u{ zz~t`<6WfNFV(iQ=i)S38M6Skwqo?S1q(GGbL#i55ICu_YXA0o_I3U5@ccH=hkwO)k zwils6j~%K0MBST9l`CMZm4HKCt3ZrxFTDZx4yJ%{GR3Xh99S&J982QtXTL%yhhLit zJ4z^bv>5Z4<69hi!CKJa?Q>2N3|K<07rO;g;z~eESVzTRDWy60#-Y-)qh6w~9N(O0 z+Cx6rL&;;h(LY@q+jb7VnJeR5&%_TtdJp{HQ1>de-7?_HpGmb~52~(Q&F}X9Poc9P zIN#;RnEkmpIP7^yUx{jQJ3Vb=4C);PUzB4bDh%yZb;TK((!FesE@X`KzL7F@2iRX( zE_HQ3UG#LA!TLreS=_|2y`z{Z2V6NT%{e})mpJR*@=B$4bg3diHlqaDw;%LfF#Dl@KEym&D$ z0z&Z$x^(a{O1=Xs{7$dl{$nsTF^KOUUH14sWeu_j7dqPv_jfxXJV9Kfo<~98*oD9| zRJ0Pb3wvn#=#E$Evmm6Bo!G{dr3ht-i13C6!MF4Z{H?a;$n>KM1e_i2m=OD$I(d)`!c&JC>f9mzqrHB|LLS2Av< zE*Iaf8(ycvHEYyS1sbZ^izdi(4?1*J9-^!F)`kVqHL%k0BzF*TwA-f!Uj=uh_HjOO zR60-4b-8NZ;SqcWWN%6)Qv(t^fb9(Cu5Qf{z7tPUrAy#X{n4!)A0AbnkxmuLcTyeg z^l*!|qt%A^}|qU!bz`rwX^2J2PM=|-l6Zekp?mu~hF%{uM?L(qpBb8<&t zw~BwKAL&uYzCLxd)5E)@g*iYUW=fmMQIc*|Pe?oIHgyc%grM91pXgNmE;=IvDre8) zx*0JCx(WJ7j`XTjIW-gAggRDx&{#z^a-$LO0-L{_sJu^|+v!_L9STDBf_-T@>ZQ)j zhtUa5ISLaA$RZOYR}qF*9eIw;kevg^FZ>+a#{~hm=U)`?Gtk$I(2S$^HmAOt-Qg%Z z5d!f3uo>WHtT}6~hY!NS#Yf5;PS&zQARM02b`HQVu=TD}IK;Up&NCk^K+{Pk(V!0A z9^XPp$>;O=wqf_6HaB7_`R;M>Zgza4;p*IbfwR-CSWpdYYaq`DM>l*b7iKp$hTM(2 z0#z%wX=Iy6c+R^P^NaE6T}LcKg6=RJCvyvfRh zU)J!@Q$lzq1Vi?gY*K{gA7h1(Y!E<{P+SlMJ)FMI4ZmbkE)nDLh|nBNL^=ON+Jk-vur7!?V9UZx8mN#^>a-0#p~_YOdxU*R6&PC*4WT|z?xrd$ z(2W*ac`|IN2%c#Sc^f6QpeA@cC_x+QJMEe<0Rq-~#n5f>!Vi##l1c9&nZgAa9zX4P zsAM3;BC*7HCw$4q&WTVAYCHT%xoEd+wilZ4E}TaF92k=t{6FpZpflaJ*tN(?!=wLn z=l#|nwtmv_YvrJSU@0g5%v4UyG;CXRJQi}_WFz4qRGV77hYuZ8OHPeYSxP|F34}5* z045)nsf0M*!Q=Fi$NA?b&tR=+NH$LJ;ox|9Vp5zjjYExRJTl!h5#J?6eA5&uGBD^Q zw&e(E;0?zhN$+};{H`(%4y9Ytbw4g$g}V!2vRW{#5bx3OxPl`Sw`F2nfMg16F{uca z$7MzyORWq33h?qnzryl+fY5a!Mm|L792q6y>kQdXO56>JzrDsyXSqAe+#N8S8^mey zmk33mgD(vFYejM2tMd?jvKAN5gbOmsin2~*`H7Io;|MTA9(T(GNYs78EhE{$3PLD4 z7Mb>tvK|U#P|y=(L+Ex`5dHD%vQC&}54RtYwPVv_NZ@hmDqFYef&Q)gVpYp{{s1UT zl+BTFG%T{p-J1z?tHnNHIywed?};j+Qr~mqTH^^Q@@>`llwx5_5c$Mrfe@;FJm3yT zp^k?Od;;JB#(7M{JG0G!;GGiUG1&x_K`2eKP~Ve{Dt7{CL>G=h)lY}!%&?SWz#J_EQb8ptH_ihJuUVWf~@6u;Lg(^Qy`;Bz?TrY1i%DYk(Eg<1a_(z z4e)|>$wuV7Ex+xDl5->^6Jc4y#RcV3$=aLP*Y8|<9#@ihTpW>20XRt*(1w7h00s}D ziebgcy4W~WoADtP`6;z#nG7Uk?dH6e3jir#5X#)LZW5G+m5a9mCa@NMTBgFW@wlwP z3en^JVEH@*K_pXS(-473fP`?fS@Bl<5{Mi`4T=$XoHg<-xWTuF2bYb6259P(kc7k1 zp1*Iav!_mNdSMC+l)nu-vAYv!NKk&0MC)eTz31*emodANJsU<_)>yV;EKBvw*DO#O zW77h=W;~QUy{PuGiC8?TuDx+^s6Kndz>CmeF zgo4SFu{KDCh7Cti)=|CUsGjdxs9DVa(428}E?!)7JePbPFeUrfovyc-Yb>Uvu{dnaqF zUAEQEhcdRttgUs~)|x((v31T;8}7QS`|yhUaQf(C&l3AtZN}ZdY$%`ALZ~*_@7eC! zQqK7vso494q4}W^SxbLuqO>g!Oeo(8oLTbVpw8kq23{SI_J3+%K7$%+O#vB zSPV*4-K+MV2RdZ5&N*H&eP6qwH_aaZ-kntCs=f@Xr>ytW!2O0#;!-aol?-RBmnFmH z^#d*G%6ETnnW{v>Si6=g*Q`CW znvMM8Y<|s3ehrvdTYBFj^-9bL0lZK|Gn z$MmKN4qKfm_DZ(qtnJ9M?MV7&#&&X+S~uj~v)r}Jji-Y1JwL8q2&UWLoBC1nV*97n zOTqi?pG`>@udel7&72;QMuXCLSelBjjmM=zE^D~)Fc0kDp%ooInlT^!pm3q<CIRRTVvcyTJ=qU=0npsYD+CSY+2*1EQK`HwJ(evvHru^kSTfrO`Ru)y?!J_| zvug9ETR-ajs59NU)cvz_KRqX1q(6Hh+jDuj=kn^v_-fDidWq{D*PE_+_U(#nN#k-! zZ)+R1fi;oQXQ&u5*r%g)+)@yFe1%}3@B%$df{#mOb{e&1&=NtdpyzIY8( zk$EvB)s3$@C)O>td(Yo}K2`nB!8Z@ik4Yt-h5Uu?_s{*{+``F4$71V09RJ(ni;Ysz z87UB!qBm9pH|`Hg7cWW7$lAqgl5ceRtY5k{y;d}nwR{H@>OB6yib`B?_J)`99+n{M zz6Yg9YyRVN-#wRdE>OvHt5nl^e(76B-#Pi`Cl_imWzE^LW6Nd7GG!+ghd&*>@BHM7 z!(V8WT zYfbCQQuWJJ{g0jRm;SIcJ+jnr|EhFlRBH1}li^j*l$7|6MAffSFDdY~Yuef@)v`>r z{7ubA4S(IR7`cC3VpwTxO8VAyNldIBz6tnG<9v{60UOc|kQtE=wISJhmTmI2|>}nnQS-k_d$GaM!`^mTe~7mO63UQU>jcLkI0w zb!8)3%?3q4D;xa&C>xIX{g7*!gCQXR$qf$hGlr(7v2cv#r-wWwj~`Sxqf-8bHi*|Y z^8?R5S?~7;;{m@PGE{y75>rU_1_7GKnLEx@MI{fxwH4VAU^zjAN5tbvkVRea-tIV} zq&G_Z#LVF+4#=%t{6r!OLEfiOkae4sWD6ufeju!@$&?T0E+%CS&q6Mtw7Sic@GoM< zN^nzz8|Bet=#0jLiAd-qe;4NPi&uCX8W1@_JR~WCdSpU`{VQbs3YnEQ??2I@WpwCY zQS~o$-30vK4G+$dh_cMitZGWu^9r+hH7j{F>7v!VW68dC%9N#wmZ_qYX`$$S*AHAv yltdM+QoT=KFgvnl*Rt7_G4D_Id`TH*o%hP_mdypC`*_R05hm-}`g^eg;fG?U(WHVvHxL?IbX zA&NLd$b|Yf$tLw}md)@sow1y@%GPEL#wOb+a}AP9C<{F8-*iyc!>=R6z;2D`oAwse zqa$wyjJwpI&qlvSAT)ek7U_sg(&RLsh%+oh#%YR)If-Q07&py| zw9LllVUNpfM3%@nA7|$Td7flMULXZ}KE~6qDW;sBo93bkJ|U5Fv<#Rezw?YtGCYe{ zL5G!Ck)vZ=k|lXjqfMGs=@i)+R%GK5mZT#Q;Evn@$4JCtqy$tlq?m~Nont;iu>@#& zHe$#Ra~ez848Lb@S+FeqNHB$f*;)(X8MRHJkk#l1QI8HWRn@6#i8j-t<27czXqXuJ zbA$x*q`9-+SdGw>_3$;2IN)wXqo7+Mn=u!#8@X&GqC1(_sVPF$xmrwn5sj`F!Mf3b{5s$`SnXo%-GxXL%HQu0 z$X;tj8tOI13h#qv8)D!_H=<^=6Ahb2!LD$q-@FrXgwOqJ44AYHoWU)*;~JPJQZt$) z!_9yZladxZ$ss_U+`+}Kg1uu%6;3nH$?7@H;BH?>CgM^;5O`4ri>JeM7aLin1fvOa zj8ZAn25-VD-jpKxrAp#eok=)=~#jt7DZlEY_uS-aYk{T0WWr48?&-_ z%C|$YFtki7B>+IjJ=M5 zGb6FGV#TME6f1`}60reS9QmUwR+*RSm_meM7mcNg1@EF*G1nvsOf%ZOo7~=%k&{P4 zm%tTCp};H$eu|z?$e|%tdRyj&&?)+4*X-M(5bcWcA(`i6QV3WHLJ3E%g;{WY^I^=&-GdMJtPiE${Kg~d8=3A<+TMB7vN*Av0NC#w|FG==yS9HV z@wk6<-3$*{mMgDbs<=~s)0XpA+_XM5RXM6Q>zbAl_Zt_jxg9lk2A214>}cDpZ%efw z$<+6!D*JQZ>ZO)Du0`8s=YeeJu}?dXtzCU6XF4a+Uf*KL@-Uunz2jcA<#yCB)AzWI z9UUuIR$qPGJ@n9$?H*bmOa(4IJ{L;85rStiVs+m?XA!nZ#Wb2}I+vH-V0aY(>9Y#pZd&WJ1ycyPL!OuW>p>OnzH4x6>d#tu#-q=&* z;rGGiYk>(keyvd!!!6Acp&DZ}Xo6kAoosJLxTgkTJz`KO0l1PL`j=R6gvzN)y*imqW_86=CiHnxAhyiRk90+<25|q0J z#q2>BRa$%wZ(iafaFYC~G$})%1vkxfzCpclp7S*z)!zb>K~Emrb{>@(5TNaQ4T|CH zokqX#hEadv%jm)AKBHfF!{~v+m(io}-F?9=3OXroF(=@Ai#EXb7Ku*=gC$gXADjg@ z!CjzyiU6)wY{BKCb`*b8mBn8n!$hFKAq`vcvjqXYhl@wF{@2+WgP(!^udXvTd)cl9 z8})TqCVTv*mtmUR6|@lfRQ2nyy$lm@qR2uRXZyc$f~pF-{RCCrr+WmU6!sY~uovEe zg>J6IIivdq%3ZSf!~tu)X?BGYXwF)=~9Eb}OIKxDnM5G{dto zXn}MgpP)f`X6G)j%gyi;>>Tp7KzYFhC5nj12{^J&n!36sd?v*%vR4uulwcGK4x^L1 z3$+R;OOWjK2+KnKLyrYvp;q2WIui0s*WoUSivnUh)HZmAi${}IlDaTSDg>!m&#_n8 znBqB2i;UVmCGrU&xf=)U5q?gHu`+ZLBGg3+bss3hXw*dXm_R)}_Ui}X_iP;=14Jv> zss%KGMkdurfuOe7&v6sDqOY{WrxEHW3|qtW>K2cnws;p!M3%k-3Mz)P^RMh z3TyK*O<^@&dmSx6d2RF!Jti^lLcL~4wk(S2%#h+ZISVx~R>a+LNNIq>XNJanW=LH4 z1SAn95WwSkr9{$ZVanv+rx0<)LW@yJ!pzxCE{MC}tvCjv5X4^>#A8a$9L>f312H~A z$E0Ka{KPQ8Nl-vRU;Y}n_!JRk0phd1vDKERX5=kjth{w?sqOwNcV9`DwL!?~^#g?0 zzf!)^|Cdc`Js%HzG?4b4Doo_cyo(LDZY)=R*!ZW7>9VfpW`KUuH})F|5=8V)%U~<< zXFK8X_vU7JDsD(%qHI__nlzH^R6C#!P~PJpe}hUIJuP8{z*!jy$xf7&p-2dM5Fb@a z)au}wA)gzx7BdIuicXzBYF}p&?z} zVOo;dx#`$^Sem5|^d3t7`$?npspqX~4lU3k0E4(CwN46IEtE-(OQP3ERf-|Irem}S zrOfksy3H}bH%{hQsT&{w0bDXx=OdI#W4IKnl^bL9JS+A?%@S^#QI~{`q2?Lk1&(F> zBq$;uXS(7%!;*kioQE_!Hs4=#Z~3`tT819mf;7v^I-8Yp zeH>s4>~8}C`QC)QL!7kE<(u^syXO2N-3li9tN-6j_=HtE7wAABs2)QVRp>mWoDh7?bNzL1nln zic=Dx5EA3!P~@;&mf&7k)oMCaOYnpU_8T^&KeMJ!AP`)z7rXEXFEOEGGBF@Uh zN|gjC_lVW_6GwpBjkaL2p@hRR|E&T0B;E@IwFqDB%J(it-`#fSz`;< ze(^d?V=+l)Fx6i!pv}^%Y-!u4rEPy*vr+o$!pIZvg`1X~-IKL9r0oq$L(4t)MpxVZ zb|PhOcx*rMxfzuQh+la}UIa6)!VF@VQ^YS_iiJqyE&*5%$` z);8Yv-1TH@_oZw1t?f!d#xc=*PW>w&Ui)^PW{5=`NM-y-T-Hp>pQk~<8j~E zGc*3Weem|d_g**yPR<=5zEGe4iurXa<2jwOpWZAjU+TGkNI zkZWqaKX-R-t$lsylXE{mmuqNRn!k5!b;s)DPa0E!@zezKD8S~LcCA~VmzX^lh=q~o zcI2s8E??_NouD2a8PECltu{XL9ZMa*^vD<7?C^hh;|DiZne3s{=|iWphsM)~#xsX5 zWjcb{jlyzWS$`z$k7WGpQ5Cg)PDen|Dz+zGpiRj8v54S9yJ_WuSr?zH!K%7 zEsmRK-j6J`fA8{QDAh9jkbOA0KDZuPzm#&0KekN#=8ImCw1jQPPY*jTSS>%Z4cg(Q z*u!CbRl;GPQ^b`c@lE^yLxw~K9#C(E|HZ%vs3uCpm3__j;H!lf5S_I7*QWI00 z>CDiUnKn@OVQV)5taKN!cUz!ZWQ(dm3J7Qx@WVd%Y1fN(QOcA`W~?k0*aG{q4^C`! zi`|!=JHyMN9k;mz@4a*Gx#!+{&bepKHwT*oUIgXxzyHU(ObDU>!Vjc4YMrO6&{;to z($NCqsA)>4%+{eh%+{$p&6d__vvuh%XdTn;GfjF^51!+kX3ltY&l#`oJ>%1TCXJr< zp9$!J9>lp~NN?ucPzSjts6$u69CQ2 zs+bW~F`pLM$>p?|8%`HAU0z~^l%8VcOeQDg#W6N7UKdqXTo%&>U1aq|v0>U(DW6hr z4tc$t_??2JiW;k^vMygOWLPCv&`fSkx(b4_tWa1|lH$@;Q4mBSY4QyzH;34{g02*F zR?=AUx+LJ;9P;L6olWK0Q~|b=(xr4Nm%GX8Dr`>_V0k5%N{dTkUS~71%BBk{971Qu za}sXSay}zv3o6W$^F!Wq1C&9>Q~Kh7(+CQpmR2Q2m(`>q%Q?gMt|sS`AOu!1f=i;N zrLtl&1GKtsbX)&cO=A^5JTU$)McJ!FxSrnHADJyC^J_t6AhQ;kO_Umv0ZCG4ZWK~aQGFjQy zE?7b?sA*9H4I567qy}J482(xZR4Zu57rArthbQm#mwi1I-@vACpzJ$Xq7OcWQIu{x z2Ll9r;-`yHt-xvGjk*9DE{Xb#IBiiHYtRA3p#=v=jbceqIL9HYV?8-JdbB11yEW*- zJvHDk{9;}!sA4jur6tL5OL_1P-JrZhS3%DV9tV9e;4ZQN-i1}?y`f6FnAE{$28|7C zxUkP@Ac%hi z+*FrX?{HKCo5C!dgL4v9_WU`1`Y-VNh$Oouj;K&P700@Hp~QnP5a6*s#{qL73cgt4 zEiY2A>EY+H&7Fu6o_HJS*{vPH6z339Xl`E!O^FC8t^~H1S$GH6#JiqzD5mjgq~=;T zz%pu9VR&b}lgzbSo*~y1G)l+2?Ge)BJUkQMO`hzQ^YU)ack%im^NnE9Ie(&;a9rHS zH&OKC0z?vN6%W_EKyg8PZQen~xKLt% z%xs{Bd75(%Aua;{{d3f?Tk$3i627{9eTlk4<3nWBZhH~e0y1lQ4xveE$^aYrd4K${ z%|&{3sew+Ec#TlwgiHv~_M(LzvVWzSZ;p>P4A#0A2e~MPxC3N$B?x@Szsg4xm<2EB zLbLM_v|geQKG0~z29D=tYv zB=eMTVw{Zd;lu>#latrwLY(MATpJ&L9b$@Lo%h#p^I}Tm>;&(LpC&WywqcbPz9l|w zkB}bMPWD08scG_$ph^5DG)w$jq-VEqh8DQS6ZISv~z3qKY zZ(dtdi8NWG;dTgwX15S`g1natHfoh~1LZkA57%QL*&8Go(LTgBMxXPxRMJcE^&aHZ zRypEyBf*Vz(u2Cuq+=Fzl=wCog|P#8Oo=A05Zd`DSv9^uXm-o>nOcU(*@YHCA{SMn zZ$&}w$8cZGzC=lA%-M}3YG42|9v?|zA-OFwgM(HEejevI`b|YN7}d(e1w1I5sWpr> zDJh&HYmhK4OPZdPuNj_tj#zY?$@p;5J!EzaI-gn+4L2YFP1Fr{PRwWZMb!hlE(S#m z6oyQ=Faf!!(QGBpNx%piY{>{%8%ox)S08zlilV)DS=9_*PFj+5GfCGpoCo!Mz@T$a zA!4ET48N7cCo@t`)QYWHRT3blU(^RJgffWJV8e^azyfqoOs4_|64mRF3|imiWoBb=6(@S+;P z8B0gck!l)fDL{()BH!~wqN@oJl38(5Rb{n!WO7*%(-`g)^3rz-HG~GBNMOe=0^~7) z8rils#%2LA72615a4D6SGJqM(9b@EEKTgs-juBSnYypyGfC+hvq_Uv;0cUZXtD{28 zcqSeM94NDDA+JkIVhs#}xmkc;HP{6XAY}llnW(EcJ8tdJvLkESkp&;LvEv|syG2>W zc&-3OJ_Pc05GQ2;Qs#)znfbYML&Z~4UOzTsLrc@J8i-m-NqH9Yu$r!d;Q?^MCPf{S z#bu0et&D$2f}_y`M+_zf31CXqM5FnXnk`@m8OM*R(UeRIaypqb{3$_50-HIg;*`el zno}@QGu)O=46iDtgyhwmx~Qpxn8~$tO^{R--nPhSo~Yx@IDj-20tPairv$-prxZoZ z3u-S=OiZR?OlSm8i~3m$eU9f+nr5_40otii&cnU_=FM~XPCCKQ0MEg#bf|FGGr$Cp zM>SlUo>Bqz6ftrP2;fJS$H`aUHN5tt;S}YJ;Va||*k`RvWX{xXNN~e3`Y~KNIVEU@ zSJI?Bi~$@6)G4KP!#kzQOY^3l4dzTro5I&i#W&Xoke$jCnA6W$eqwsE;RJ=6;L31` z*tHEWk71ZK=)aJc>P~NXa9mNa2dVJhK?ajFuP<1I2G9@3RKUu*igCg~tKl}yq8cDWE*C(-+KiH>d2Z@!%93s-zyo4&5HZ}-YXH4wgY`S#^Xpl>tK zR}SpOl9(UNet)(?w{Fs{_k{KHCAxKser?Cs0XYAWiSuDvB)T&DI5c^S-s#-4c5MCl zhVaX`?qAwII9cwT+GN^qxmG8tjQF({XQVZQ|$C|1iD2e808Y z)xVbh*|m-1|2+So?P0ofiYvc4|HMgkU7-GeC=XA4(S*WN)H5%N^j5;JJ_^6O5v?4a z-8?*7`qq{5;e~QIxiV7?v1`3+$xqYw_xf2r6vAbidW1ofE zci6tQsgHf@nQeCDQ|_s|tA!80x6`(# z)c4H?=ePT&%WX5I&`i}IzB7G$dR6#vZpYucD%`#H(Y3Yn>!*LVu-!JYA#V9k;F;gu zf^CL&-RuA9!M{6LIxxQ7G5+Af!xP(+m$pLhRQ=J_%iI3mivPf-|G@fzjfwlC|8(xb znTMHbsIRp5Sn2reZ{|yHUo0iXQs%~X@b>VJ_VFi(AP1V!F>GC?6Gu-aAXIaUgdZZ(bWGgZIEvo58-d z?`;J~s-f0DI8o^6|37iT`2T4bA^uC`#9YYnuc1@Np!qlE6$f8e zuHU3^eX=vox=O4I`ZzA(OPx#(L{tn()uXt=pJ&V%s!re@Mp-!V((&g!>qQdG%5pX* zT4@%1BsJd_W(c)j11&H4Mryu1tXBn&A7&s?-+|sQkoo<|3Np-zC0T&?=t)(EA)G{M zXQ6`YNKs!nXo`O7MO5f9YJQA-kC6xJ&r$n-qv=gF{W;qIrJJG-eaTSN0`(#xuM_OJRBwvnnhkDp;6=|x(SI;R#GCB zRU>I&CA+B?w34p~-@fl4(ryU%eN*!nnZgdEuR_$g4L6>7}m zupG5f(p%&;v}&>#UZdAkkkw1nfIe%G+dT7$mt%v>c}@_+v1n5Z(;H{wOdu4Go)ej= zuoQ~LC5F4e1>#aTI?hNTZo*?Q^s>`%zMqNnq9kzaMD{ITU$ZC#nj_~YA~81T3GjR) z(-E7Ph((*j(Lf{~&bKs6(>%A635yIH2ync_1rIP0 zR^o)_KwOk!6YzjJip&@rjxgbBz0`Ynv$$;v924BV3Jq&>e7sanf)L@=dWd0=G&_7mfl>~~hF&7$ zqzA>xP6i>K9ISAmC*chg<){=^FSu;Wro;A=J=+l~Lfe26Pc{~i5U=qdo_dxPC&}AdCwadBfB0QH=^5o^($YuLjI(SV=4RIs?Gx zKZgr>^_bIWUgtS|jG{(WXo8gPtdzWw2W|7FXGzid=s$1Dn|vl!T?esYcPre<{oddcWg)T@?g@$$(JWZ_! z!2BU#W)tcTQ z#7imsm#HPn%Q}f=eU{ETcj0LAl|IP^Pt%TCgX+Cn3Qs=n!G4h3aUOb>EP0=US~6Lq zrmT(>@IZ)YOph-E$*CtvKAdkfd|F?z&*r0jI$xR3I`pZp)N5(o)OtaWC&->(WofFp z^7cVz!Loyn9KKRpsuk_#t>U#l33Je?w(xiTUL~V_sKsl`H4rsWC#scN5&kcB?vgLD z-+ZSuLsCT8K_7--I!Ml+F5*6z{yB^OVk?{TEp#rP zeycBOdoH2fFj^AvOZykfR*YLWN~)4uJ?WC>q^UWhx6IYPVoA^$Ygxkd5Z^t3r`*7* zQj`wG9~~q>=?JP}UajA)f>>Q&;;6m>8v*N5#80yVuBnk)7#HVH5PjWR zI@f+_YHsqCnWVl#z!mSwBE1d}EYc|a3AQb0P*X_oJUK*;{-`nEwn1Vd8uNBXsId%Q z-W)vgk)yM15RO5>s6swe1K6XwMwK`41e{d0T}5bI!RY}#7yQhdS4fC(lL9vQOmR$U zl4rne!cmDE=LFD+4j^tyz!_53ilOkBBopTatYF1U7>3zYmTvPM+4-2MHz8Z_OMNhb z$}$e;f-4cvSW4DyW%G2RJ!2|fsCi?2v2NAguxe^ZoXA*hbGt83WgJy=CIHTzdgUZO zESnQvo!Ka7lCG9?`JSY0kD~6Gsu*swmDWDrYm0H7j|mV3{r}R&rLm?qStoFOgbi>r zyD%6QZn-^GaO7E)WVwf&xTeQI3QtQ~2XRrn8|iQv$&X)Z-JN zc0nNV%l!cfS6W!#O*j57eJhxH6t*&gqq2yQIRLmu71vWYk z^n=Prh)e^GctDcrc$CLNQfDDnWt!!AE*cbQOo9rA1CqN^rg-?g5U_8{gkN|LR^fR( zLDEG64k)1pPqi?~^m(|eFfMDyBJ8**;PNLx3kSr`fqoQ^5$f=v3r`G&XvSGy)@85l zmo@NlCAcvVyOV&6g8-cj%Elq?RqMgM9v??xWCIj@PRTdIAwb3;mdjMh2o z(*89glQJ@CF+1H)6o=olQUT(iiziEEmybyfn_)_tEU1?k6 z(y29DbJErf&;*sVp3Ib$CyF+i-2-Or>!ptQy@}%>{M_W_>5Q}LiZ)YhUnss>vEi(` zcKW*Sx=D4i?QQc<&5OYs$Crz5cBP#y%coYIt$BFHS-q%xuV~fzT;Zs~^|QV2AA0xD za@j5EcKZiY>6#;Vh}D{7NoR)&sqUjacO4&BtQ_b`H}s|s^enSWx?dE*Ce_fJboQw* zx4+Z%UU$;zxuX37qPnK-cG+z@={k}wKbo{1&6wwYT>1OrkeY8sAT)s^=L=a zjiH-oRvKE^Jf-yOS+pytIV!MFhQ*wt*`C<@!s{4 z^7;Bi$GXXOwRGHpiQmE0#Q?TU{S?W83|)_S5=g^{IO{?|ls_um7UC<<`&# zXI7ezq)U#bnvX2GFom_!x@2h`JSIAlB}bv6y=J~>z8YM#FP*+k-8qrjzGHd!9cQM_ zbEn~JE$QeX{(;D%UgCZ?0SdU^Pasq2rG4PjI&=0aE4oVTxLcZj9$2ou8NOY=>N%Qh zYEM=iOItdU`VJfprx#mSjQf++{znha5Xd=7JbFN*UA@GkzgkZ|daw=c=z|jzD%Ovfl5c{3`>CJwTl!1-A*5Dp7C&@m z&Rs0){Qh7p;P=aVNHCC6MM$$Ri?OKiJ;0T9I7vmqXO--yggzDlCu4ZS(k_fcCXGr1 z_%%Vv$apoe!Jr?gDKOcf5XH}sjFp+r$}AhEgs{Z+I!urL4sT(rfvVfso#5X60wBB+N3MA$w@#?O)Y&&c_Jet{qkeB~n%WlGGf zXeu&h`tmSwS4^7-M6~ajfd|{CWnSsTqDU)EJ-o#names then state.done=true;log('END');return end + local descriptor=names[state.target] + if not state.type then + local assembly=descriptor[1]=='client' and typeof(CS.RPG.Client.GridFightModule).Assembly or typeof(CS.RPG.GameCore.AvatarExcelTable).Assembly + state.type=assembly:GetType(descriptor[2]) + if not state.type then log('MISSING '..descriptor[2]);state.target=state.target+1;return end + log('TYPE '..state.type.FullName) + state.fields=state.type:GetFields(flags);state.methods=nil;state.index=0 + end + for n=1,8 do + if not state.methods then + if state.index>=state.fields.Length then state.methods=state.type:GetMethods(flags);state.index=0 + else + local field=state.fields[state.index];state.index=state.index+1 + if descriptor[1]=='core' or field.Name:lower():find('monster',1,true) then + log('FIELD '..state.type.FullName..' '..field.Name..' '..field.FieldType.FullName) + end + end + else + if state.index>=state.methods.Length then + state.type=nil;state.fields=nil;state.methods=nil;state.index=0;state.target=state.target+1;return + end + local method=state.methods[state.index];state.index=state.index+1 + if method.DeclaringType==state.type and (descriptor[1]=='core' or method.Name=='CreateNPCMonster')then + log('METHOD '..state.type.FullName..' '..tostring(method)..' HANDLE '..tostring(method.MethodHandle.Value)) + end + end + end + end + local ok,err=pcall(tick) + if not ok then _G.__gacAANpcConfigMetadata1={done=true};CS.UnityEngine.Debug.Log('[GAC_AA_NPC_META] ERROR '..tostring(err))end +end diff --git a/tools/aa_round_refresh_metadata.lua b/tools/aa_round_refresh_metadata.lua new file mode 100644 index 0000000..f0ca41e --- /dev/null +++ b/tools/aa_round_refresh_metadata.lua @@ -0,0 +1,15 @@ +-- Exact AA module metadata; eight methods per heartbeat, no refresh calls. +do local function capture() + local s=_G.__gacAaRoundMeta1 or {index=0};_G.__gacAaRoundMeta1=s + if s.done then return end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.ChallengePeakModule + if not module then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_AA_ROUND_META] '..tostring(v))end + if not s.t then s.t=module:GetType();s.methods=s.t:GetMethods(flags);log('TYPE '..s.t.FullName)end + for n=1,8 do + if s.index>=s.methods.Length then s.done=true;log('END');return end + local m=s.methods[s.index];s.index=s.index+1 + if m.DeclaringType==s.t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end +end local ok,e=pcall(capture);if not ok then _G.__gacAaRoundMeta1={done=true};CS.UnityEngine.Debug.Log('[GAC_AA_ROUND_META] ERROR '..tostring(e))end end diff --git a/tools/adventure_final_readiness.lua b/tools/adventure_final_readiness.lua new file mode 100644 index 0000000..5e3f75b --- /dev/null +++ b/tools/adventure_final_readiness.lua @@ -0,0 +1,34 @@ +-- Exact failing AdventurePhase only. Inspect metadata and nullness; no phase +-- setters, scene loads, method invocation, or loading-screen bypass. +do + local function capture() + local s=_G.__gacAdventureFinalReady1 or {offset=0,kind='fields'} + _G.__gacAdventureFinalReady1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or phase:GetType().FullName~='RPG.Client.AdventurePhase'then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_ADVENTURE_FINAL_READY] '..tostring(v))end + if not s.t then s.t=phase:GetType();s.members=s.t:GetFields(flags);log('TYPE '..s.t.FullName)end + for n=1,16 do + if s.offset>=s.members.Length then + if s.kind=='fields'then + s.t=s.t.BaseType + if s.t and s.t.FullName~='System.Object'then s.members=s.t:GetFields(flags);s.offset=0;return end + s.t=phase:GetType();s.members=s.t:GetMethods(flags);s.offset=0;s.kind='methods';return + end + s.done=true;log('END');return + end + local member=s.members[s.offset];s.offset=s.offset+1 + if member.DeclaringType==s.t then + if s.kind=='fields'and not member.IsStatic then + local value=member:GetValue(phase) + log('FIELD '..member.Name..' '..member.FieldType.FullName..' HANDLE '..tostring(member.FieldHandle.Value)..' NULL '..tostring(value==nil)) + elseif s.kind=='methods'then log('METHOD '..member.Name..' HANDLE '..tostring(member.MethodHandle.Value))end + end + end + end + local ok,e=pcall(capture) + if not ok then _G.__gacAdventureFinalReady1={done=true};CS.UnityEngine.Debug.Log('[GAC_ADVENTURE_FINAL_READY] ERROR '..tostring(e))end +end diff --git a/tools/adventure_global_dependencies.lua b/tools/adventure_global_dependencies.lua new file mode 100644 index 0000000..21ad1d9 --- /dev/null +++ b/tools/adventure_global_dependencies.lua @@ -0,0 +1,29 @@ +-- Read only metadata for the exact failing phase and its GlobalVars services. +-- Bounded per heartbeat; no native calls, initialization or phase flag changes. +do + local function capture() + local s=_G.__gacAdventureGlobals1 or {index=0,stage='phase'} + _G.__gacAdventureGlobals1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_ADVENTURE_GLOBALS] '..tostring(v))end + if not s.fields then + s.t=s.stage=='phase' and typeof(CS.RPG.Client.AdventurePhase) or typeof(CS.RPG.Client.GlobalVars) + s.fields=s.t:GetFields(flags) + end + for n=1,12 do + if s.index>=s.fields.Length then + if s.stage=='phase' then s.stage='globals';s.index=0;s.fields=nil;return end + s.done=true;log('END');return + end + local f=s.fields[s.index];s.index=s.index+1 + if (s.stage=='globals' and f.IsStatic) or + (s.stage=='phase' and (f.Name=='k__BackingField' or f.Name=='k__BackingField' or f.Name=='_ReactionSys')) then + local value=f.IsStatic and f:GetValue(nil) or nil + log(s.stage..' FIELD '..f.Name..' TYPE '..f.FieldType.FullName..' HANDLE '..tostring(f.FieldHandle.Value)..' NULL '..tostring(value==nil)) + end + end + end + local ok,e=pcall(capture) + if not ok then _G.__gacAdventureGlobals1={done=true};CS.UnityEngine.Debug.Log('[GAC_ADVENTURE_GLOBALS] ERROR '..tostring(e))end +end diff --git a/tools/build_cw_role_compatibility.py b/tools/build_cw_role_compatibility.py new file mode 100644 index 0000000..d3679ed --- /dev/null +++ b/tools/build_cw_role_compatibility.py @@ -0,0 +1,18 @@ +"""Build an explicit compatibility resource from a completed current-Client capture.""" +import json, hashlib +from pathlib import Path +root = Path(__file__).resolve().parents[1] +capture = root / 'battle_diagnostics/cw54-role-replacement.log' +raw = capture.read_text(encoding='utf-8-sig') +rows = [json.loads(line.split(' ROW ', 1)[1]) for line in raw.splitlines() if '[GAC_CW_REPLACEMENT] ROW ' in line] +if '[GAC_CW_REPLACEMENT] END' not in raw or not rows: + raise ValueError('Capture is incomplete') +old = json.loads((root / 'resources/CurrencyWarsCatalog.json').read_text(encoding='utf-8-sig')) +current = json.loads((root / 'resources/CurrencyWarsCurrentRoles.json').read_text(encoding='utf-8-sig')) +ids = {row['ID'] for row in current['roles']} +target = rows[0]['Config'] +missing = [row['Config'] for row in old['active_handbook_default_roles'] if row['Config']['ID'] not in ids and row['Config']['AvatarID'] == target['AvatarID'] and row['Config']['SeasonID'] == target['SeasonID']] +if len(missing) != 1 or {row['Star'] for row in rows} != set(range(1, rows[0]['MaxStar'] + 1)): + raise ValueError('Replacement identity or star coverage is ambiguous') +resource = {'format_version': 1, 'source_assembly_sha256': old['provenance']['game_assembly_sha256'], 'target_assembly_sha256': current['client_assembly_sha256'], 'capture_sha256': hashlib.sha256(capture.read_bytes()).hexdigest(), 'source': 'Current Client GetHandBookAllRoleConfig DefaultRole, complete existing star configs; no new role ID inferred from avatar arithmetic.', 'entries': [{'previous_role_id': missing[0]['ID'], 'current_role_id': target['ID'], 'variants': rows}]} +(root / 'resources/CurrencyWarsRoleCompatibility.json').write_text(json.dumps(resource, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') diff --git a/tools/build_gacha_banner_mapping.py b/tools/build_gacha_banner_mapping.py new file mode 100644 index 0000000..6dcdffb --- /dev/null +++ b/tools/build_gacha_banner_mapping.py @@ -0,0 +1,110 @@ +"""Regenerate resources/GachaBannerMapping.json from the live import. + +Run from the repository root after the roster changes: + + python tools/build_gacha_banner_mapping.py + +Stable-ID rules: existing (gacha_id -> avatar_id) pairs are preserved exactly; +only avatars missing from the current mapping receive NEW IDs (max+1). Never +re-sort or renumber, so a banner ID always means the same avatar. The mapping +is the backend half of the custom per-character banner presentation: each +banner ID (900001+) maps to one imported avatar with a configured first Eidolon +cost. Nothing here is an official Client banner row. +""" + +import json +import re +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +MAPPING = ROOT / "resources" / "GachaBannerMapping.json" +BANNER_ID_BASE = 900001 + + +def main() -> int: + freesr = json.loads((ROOT / "freesr-data.json").read_text(encoding="utf-8")) + avatars = sorted(int(k) for k in freesr.get("avatars", {}).keys()) + eidolon = json.loads( + (ROOT / "resources" / "EidolonConfig.json").read_text(encoding="utf-8") + ).get("avatars", {}) + catalog = json.loads( + (ROOT / "resources" / "PreviewGameplayCatalog.json").read_text(encoding="utf-8") + ) + client_digest = catalog.get("client_assembly_sha256", "") + if not re.fullmatch(r"[0-9a-f]{64}", client_digest) or not catalog.get("evidence_id"): + raise ValueError("Current captured catalog identity/provenance is missing") + captured_ids = {row["GachaID"] for row in catalog.get("tables", {}).get("gacha", [])} + + drawable = [] + skipped_no_eidolon = [] + for avatar in avatars: + row = eidolon.get(str(avatar)) + ranks = row.get("ranks", []) if row else [] + if not ranks or not ranks[0].get("cost"): + skipped_no_eidolon.append(avatar) + continue + drawable.append(avatar) + + existing = {} + if MAPPING.exists(): + previous = json.loads(MAPPING.read_text(encoding="utf-8")) + if previous.get("client_assembly_sha256") != client_digest: + raise ValueError("Mapping and current captured catalog belong to different Clients") + known_ids = set() + for banner in previous.get("banners", []): + avatar_id, banner_id = banner["avatar_id"], banner["gacha_id"] + if ( + type(avatar_id) is not int or avatar_id <= 0 + or type(banner_id) is not int or not BANNER_ID_BASE <= banner_id <= 0xFFFFFFFF + or avatar_id in existing or banner_id in known_ids or banner_id in captured_ids + ): + raise ValueError("Duplicate, invalid or colliding existing banner identity") + existing[avatar_id] = banner_id + known_ids.add(banner_id) + + used = set(existing.values()) + next_id = max(used, default=BANNER_ID_BASE - 1) + 1 + banners = [] + added = [] + # Retain unavailable identities as disabled reservations. Dropping them + # would allow a smaller future roster to reuse an old character's ID. + for avatar in sorted(set(drawable) | set(existing)): + gacha_id = existing.get(avatar) + if gacha_id is None: + while next_id in used or next_id in captured_ids: + next_id += 1 + if next_id > 0xFFFFFFFF: + raise ValueError("Custom banner identity namespace exhausted") + gacha_id = next_id + used.add(gacha_id) + next_id += 1 + added.append((gacha_id, avatar)) + banners.append( + { + "gacha_id": gacha_id, + "avatar_id": avatar, + "roster_available": avatar in drawable, + "provenance": "sandbox custom banner; avatar from imported roster; not official Client banner config", + } + ) + banners.sort(key=lambda b: b["gacha_id"]) + out = { + "format_version": 1, + "source": "Generated from freesr-data.json avatars + resources/EidolonConfig.json by tools/build_gacha_banner_mapping.py; stable IDs: existing pairs preserved, new avatars get max+1.", + "note": "Custom per-character banner mapping for the custom gacha presentation. Banner IDs use a 900000+ sandbox namespace that cannot collide with the Client captured GachaBasicInfo rows (1001/4001/2001/2002/3001/3002). Draws grant the mapped avatar; duplicates convert at its configured first Eidolon cost; first acquisition of a not-yet-owned avatar is rejected until the avatar acquisition path exists.", + "client_assembly_sha256": client_digest, + "banners": banners, + } + MAPPING.write_text( + json.dumps(out, ensure_ascii=False, indent=1) + chr(10), encoding="utf-8" + ) + print( + f"active banners: {len(drawable)} (reserved identities {len(banners)}, kept {len(existing)}, newly assigned {len(added)}, " + f"skipped without eidolon config: {skipped_no_eidolon})" + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/build_gacha_presentation_probe.py b/tools/build_gacha_presentation_probe.py new file mode 100644 index 0000000..3009d04 --- /dev/null +++ b/tools/build_gacha_presentation_probe.py @@ -0,0 +1,94 @@ +"""Render an explicitly staged, resource-fed native Warp adapter capture. + +This never modifies scripts/, policy or saves. The operator supplies an output +path, then stages that file only after the walking scene is stable. The default +is one banner. --assets-only checks Exists without creating pools or UI. +""" +import argparse +import hashlib +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent + + +def quote(value): + separator = "" + while "]" + separator + "]" in value: + separator += "=" + return "[" + separator + "[" + value + "]" + separator + "]" + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--limit", type=int, default=1) + parser.add_argument("--assets-only", action="store_true") + args = parser.parse_args() + policy = json.loads((ROOT / "resources/GachaSandboxPolicy.json").read_text(encoding="utf-8")) + catalog = json.loads((ROOT / "resources/PreviewGameplayCatalog.json").read_text(encoding="utf-8")) + mapping = json.loads((ROOT / "resources/GachaBannerMapping.json").read_text(encoding="utf-8")) + if mapping["client_assembly_sha256"] != catalog["client_assembly_sha256"]: + raise ValueError("Mapping/captured catalog identity mismatch") + template_id = policy["native_presentation"]["template_gacha_id"] + template = next(row for row in catalog["tables"]["gacha"] if row["GachaID"] == template_id) + if template["PrefabPath"] not in policy["verified_banner_prefabs"]: + raise ValueError("Template has no installed-asset verification") + avatars = {row["AvatarID"]: row for row in json.loads((ROOT / "resources/AvatarConfig.json").read_text(encoding="utf-8"))["avatar_config"]} + active = [row for row in mapping["banners"] if row.get("roster_available", True)] + roster = json.loads((ROOT / 'freesr-data.json').read_text(encoding='utf-8'))['avatars'] + active = [row for row in active if str(row['avatar_id']) in roster] + four = sorted(row['avatar_id'] for row in active if avatars[row['avatar_id']]['Rarity'] == 'CombatPowerAvatarRarityType4') + banners = [row for row in active if avatars[row['avatar_id']]['Rarity'] == 'CombatPowerAvatarRarityType5'] + if len(four) < 3: + raise ValueError('Need three actual imported four-star avatars') + if not 1 <= args.limit <= len(banners): + raise ValueError("Limit must select at least one existing mapped banner") + config_name = "__GAC_GACHA_ASSET_CAPTURE_CONFIG" if args.assets_only else "__GAC_GACHA_PRESENTATION" + rules = policy['limited_rules'] + payload = ["_G." + config_name + "={enabled=true,template_id=" + str(template_id) + ",template_prefab=" + quote(template["PrefabPath"]) + ",rules={five_star_pity="+str(rules['five_star_pity'])+",four_star_pity="+str(rules['four_star_pity'])+"},banners={"] + for index, banner in enumerate(banners[:args.limit], 1): + row = avatars[banner["avatar_id"]] + featured = [four[(index-1+offset) % len(four)] for offset in range(3)] + cards = ','.join('{avatar_id=%d,portrait_path=%s}' % (id, quote(avatars[id]['AvatarGachaResultImgPath'])) for id in featured) + payload.append("{gacha_id=%d,avatar_id=%d,sort_order=%d,art_path=%s,icon_path=%s,four_stars={%s}}," % (banner["gacha_id"], banner["avatar_id"], index, quote(row["AvatarCutinFrontImgPath"]), quote(row["DefaultAvatarHeadIconPath"]), cards)) + payload.append("}}") + adapter = "" if args.assets_only else (ROOT / "internal/gameserver/gacha_presentation.lua").read_text(encoding="utf-8") + digest = hashlib.sha256(("\n".join(payload) + adapter).encode()).hexdigest() + payload.append("_G." + config_name + ".digest=" + quote(digest)) + pity = json.loads((ROOT / 'freesr-data.json').read_text(encoding='utf-8')).get('gacha_limited', {}) + payload.append('_G.' + config_name + '.pity={since_five_star=%d,since_four_star=%d}' % (pity.get('since_five_star', 0), pity.get('since_four_star', 0))) + if args.assets_only: + payload.append(""" +do + local data=_G.__GAC_GACHA_ASSET_CAPTURE_CONFIG + local s=_G.__GAC_GACHA_ART_ASSETS + if not s or s.digest~=data.digest then s={digest=data.digest,index=1};_G.__GAC_GACHA_ART_ASSETS=s end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if phase and not typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then + local ok,err=pcall(function() + for n=1,8 do + local row=data.banners[s.index] + if not row then + if not s.done then CS.UnityEngine.Debug.Log('[GAC_GACHA_ART_ASSET] END count='..#data.banners);s.done=true end + break + end + s.index=s.index+1 + local mgr=CS.RPG.Client.GlobalVars.s_AssetMgr + CS.UnityEngine.Debug.Log('[GAC_GACHA_ART_ASSET] banner='..row.gacha_id..' avatar='..row.avatar_id..' art='..tostring(mgr:Exists(row.art_path))..' icon='..tostring(mgr:Exists(row.icon_path))) + end + end) + if not ok then s.done=true;s.index=#data.banners+1;CS.UnityEngine.Debug.Log('[GAC_GACHA_ART_ASSET] ERROR '..tostring(err)) end + end +end +""") + else: + payload.append(adapter) + args.output.write_text("\n".join(payload) + "\n", encoding="utf-8") + print(f"Rendered {args.limit} mapped banners; assets_only={args.assets_only}; output={args.output}") + + +if __name__ == "__main__": + main() diff --git a/tools/build_glm_beta_handoff.py b/tools/build_glm_beta_handoff.py new file mode 100644 index 0000000..cc0dc69 --- /dev/null +++ b/tools/build_glm_beta_handoff.py @@ -0,0 +1,494 @@ +"""Package the repository's available Beta data and evidence without running it. + +This is an offline handoff builder, not a Client dumper. It never reads saves, +account settings or live process memory. Source files are copied byte-for-byte; +only the separate derived indices normalize large text-hash integers to strings. +""" + +import argparse +import csv +import hashlib +import io +import json +import re +from collections import Counter, defaultdict +from datetime import datetime, timezone +from pathlib import Path +from zipfile import ZIP_DEFLATED, ZipFile + + +POLICY_FILES = { + "ActivityPreviewPolicy.json", "GachaSandboxPolicy.json", "AhaHelpConfig.json", + "CurrencyWarsSpotlightPolicy.json", "TeamPresetConfig.json", +} +ROOT_DATA = ( + "res.json", "teleports.json", "challenge_data.json", "mission_unlocks.json", + "cmd_ids_4_6.json", +) +DOCS = ( + "GLM-BETA-DATA.md", "GLM-BETA-EVENTS.md", "GLM-GACHA-GUIDE.md", + "ZCODE-HANDOFF.md", "offline-gameplay-continuation.md", + "currency-wars-investigation.md", "currency-wars-6900-audit.md", + "currency-wars-coverage.md", "protocol-update.md", "endgame-audit.md", +) +SOURCE_FILES = ( + "internal/common/activity_preview.go", "internal/common/gacha_catalog.go", + "internal/common/stella_jump.go", "internal/common/res.go", + "internal/gameserver/handlers_activity_preview.go", + "internal/gameserver/handlers_gacha.go", "internal/gameserver/handlers_stella_jump.go", + "internal/gameserver/handlers_challenge.go", "internal/gameserver/dispatch.go", +) +EVIDENCE_FILES = { + "gacha-main-page.json", "gacha-main-page.luau", "gacha-main-page.hex", + "luau-bytecode.h", "luau-lvmload.cpp", "glm-beta-targeted-metadata.log", + "glm-beta-textid-metadata.log", "glm-gacha-group-enum.log", + "glm-gacha-groups-current.json", "glm-gacha-group-assets.json", +} +# These are config/type metadata captures, not unrestricted Player.log copies. +PREVIEW_CONFIG_LOGS = { + "preview-gameboy-current.log", "preview-metadata-current.log", + "preview-minigame-current.log", "preview-module-fields-current.log", + "preview-modules-current.log", +} +TOOL_PREFIXES = ( + "preview_", "gacha_", "gameplay_", "fivedim_", "glm_beta", + "cw_current_", "export_cw_", +) +TOOL_FILES = { + "build_glm_beta_handoff.py", "inspect_luau_v4.py", "check_preview_assets.py", + "build_cw_role_compatibility.py", "disassemble_pe_range.py", + "find_pe_direct_calls.py", "find_pe_rip_references.py", + "cw_config_cache_export.lua", "cw_excel_export.lua", + "sync_protocol_commands.py", "audit_protocol_handlers.py", +} +HANDLERS = { + "GetFiveDimMiniGameData", "GetActiveActivityData", "QuestState", + "GetMultipleDropInfo", +} + + +def read_json(path): + return json.loads(path.read_text(encoding="utf-8-sig")) + + +def exact_hashes(value): + """Avoid JavaScript/CSV consumers rounding 64-bit text hashes in indices.""" + if isinstance(value, dict): + return { + key: str(item) if key.lower() == "hash64" and isinstance(item, int) + else exact_hashes(item) + for key, item in value.items() + } + if isinstance(value, list): + return [exact_hashes(item) for item in value] + if isinstance(value, int) and not isinstance(value, bool) and abs(value) > 2**53 - 1: + return str(value) + return value + + +def declared_hashes(value, prefix=""): + result = {} + if isinstance(value, dict): + for key, item in value.items(): + location = f"{prefix}.{key}" if prefix else key + if isinstance(item, str) and "sha256" in key.lower(): + result[location] = item + elif isinstance(item, (dict, list)): + result.update(declared_hashes(item, location)) + elif isinstance(value, list): + for index, item in enumerate(value): + if isinstance(item, (dict, list)): + result.update(declared_hashes(item, f"{prefix}[{index}]")) + return result + + +def collection_counts(value): + if isinstance(value, list): + return {"$": len(value)} + if not isinstance(value, dict): + return {} + result = {key: len(item) for key, item in value.items() if isinstance(item, (dict, list))} + for key in ("tables",): + if isinstance(value.get(key), dict): + result.update({f"{key}.{name}": len(rows) + for name, rows in value[key].items() + if isinstance(rows, (dict, list))}) + return result + + +def classify(path, value, client_hash): + name = path.name + if "Compatibility" in name: + return "compatibility-overlays" + if name in POLICY_FILES or name.endswith("Policy.json"): + return "server-policies" + hashes = declared_hashes(value) + assemblies = {item.lower() for key, item in hashes.items() if "assembly" in key.lower()} + if client_hash in assemblies: + return "current-client-captures" + if assemblies: + return "legacy-client-or-reference" + if isinstance(value, dict): + source = value.get("source") + if isinstance(source, dict) and (source.get("repository") or source.get("url")): + return "external-reference-data" + return "unversioned-server-data" + + +def policy_eligibility(panel, policy, availability): + handler = policy.get(panel.get("UIPrefab", ""), "") + issues = [] + if not handler: + issues.append("family_not_enabled_by_policy") + if availability.get(panel.get("UIPrefab", "")) is not True: + issues.append("prefab_missing_or_unobserved") + if availability.get(panel.get("TabIcon", "")) is not True: + issues.append("tab_icon_missing_or_unobserved") + if panel.get("DisplayItemList"): + issues.append("explicit_display_item_dependencies") + return handler, issues + + +def derive_events(catalog, policy_document, availability_document): + panels = catalog.get("tables", {}).get("panels", []) + activities = catalog.get("tables", {}).get("activities", []) + paths = availability_document.get("paths", {}) + policy = {row.get("prefab", ""): row.get("data_handler", "") + for row in policy_document.get("panels", [])} + linked = defaultdict(list) + unresolved = [] + known = {row["PanelID"] for row in panels} + for activity in activities: + panel_id = activity.get("ActivityPanelID", 0) or activity.get("ActivityID", 0) + if panel_id in known: + linked[panel_id].append(activity) + else: + unresolved.append({"reason": "effective_panel_not_in_captured_panel_table", + "effective_panel_id": panel_id, "activity": activity}) + index, eligible, module_panels = [], {}, defaultdict(set) + for panel in sorted(panels, key=lambda row: row["PanelID"]): + panel_id = panel["PanelID"] + associations = linked[panel_id] + main = sorted({m for a in associations for m in a.get("ActivityModuleIDList", []) if m}) + resident = sorted({m for a in associations for m in a.get("ResidentModuleList", []) if m}) + prefab = panel.get("UIPrefab", "") + handler, issues = policy_eligibility(panel, policy, paths) + row = { + "panel_id": panel_id, + "technical_prefab_name": Path(prefab).stem, + "name_is_localized": False, + "prefab": prefab, + "tab_icon": panel.get("TabIcon", ""), + "activity_ids": sorted({a.get("ActivityID", 0) for a in associations}), + "main_modules": main, + "resident_modules": resident, + "activity_associations": associations, + "unlock_conditions": panel.get("UnlockConditions", ""), + "finish_conditions": panel.get("FinishConditions", ""), + "finish_type": panel.get("FinishType"), + "prefab_asset_exists": paths.get(prefab), + "tab_icon_asset_exists": paths.get(panel.get("TabIcon", "")), + "display_items": panel.get("DisplayItemList", []), + "text_hashes": {k: panel[k] for k in ( + "TabName", "TitleName", "TagDesc", "IntroDesc", "PanelDesc", "PanelBrief") if k in panel}, + "policy_family": prefab if handler else None, + "data_handler": handler or None, + "preview_panel_eligible": not issues, + "preview_exclusion_reasons": issues, + "has_activity_association": bool(associations), + "gameplay_support": "not_established_by_catalog_or_asset_presence", + } + index.append(row) + if not issues: + eligible[panel_id] = (handler, prefab) + for module_id in main + resident: + module_panels[module_id].add(panel_id) + errors = [] + if not policy_document.get("source"): + errors.append("activity preview policy missing") + if not catalog.get("evidence_id"): + errors.append("activity preview catalog provenance missing") + if not availability_document.get("source") or not isinstance(paths, dict): + errors.append("event asset verification missing") + for handler in policy.values(): + if handler not in HANDLERS: + errors.append(f"unsupported preview data handler {handler}") + candidates, conflicts = [], [] + for module_id, panel_ids in sorted(module_panels.items()): + panel_ids = sorted(panel_ids) + signatures = {eligible[p] for p in panel_ids} + if len(signatures) != 1: + conflicts.append({"module_id": module_id, "panel_ids": panel_ids, + "signatures": [{"panel_id": p, "data_handler": eligible[p][0], + "prefab": eligible[p][1]} for p in panel_ids]}) + else: + candidates.append({"module_id": module_id, "panel_id": panel_ids[0], + "data_handler": eligible[panel_ids[0]][0], + "equivalent_candidate_panel_ids": panel_ids}) + if conflicts: + errors.extend(f"activity module {c['module_id']} maps to conflicting panels {c['panel_ids']}" + for c in conflicts) + if policy and not module_panels: + errors.append("no supported activity-preview modules in captured catalog") + schedules = { + "semantics": "Mirror internal/common/activity_preview.go: filter eligible panels; sort module IDs and panel IDs; require identical handler+prefab for every candidate of each module; reject the whole result on any conflict.", + "status": "error" if errors else "ready", + "errors": errors, + "conflicts": conflicts, + "schedules": [] if errors else candidates, + "compatible_candidates_for_diagnosis_only": candidates if errors else [], + "not_a_gameplay_confirmation": True, + } + return exact_hashes(index), exact_hashes(unresolved), schedules + + +def derive_gacha(catalog, policy, group_document, group_assets): + observations = policy.get("asset_verification", {}) + verified_paths = set(policy.get("verified_banner_prefabs", [])) + rows = [] + for row in catalog.get("tables", {}).get("gacha", []): + prefab = row.get("PrefabPath", "") + observed = None + basename = Path(prefab).name + if basename.startswith("StandardGacha_"): + observed = observations.get("standard") + elif basename.startswith("NoviceGacha_"): + observed = observations.get("novice") + elif "/GachaPanelLimited/" in prefab: + observed = observations.get("captured_limited_character_and_lightcone_prefabs") + rows.append({"gacha_id": row.get("GachaID"), "gacha_type": row.get("GachaType"), + "prefab": prefab, "asset_verified": observed, + "browse_enabled_by_policy": prefab in verified_paths, + "original_row": row}) + group_note = "No supplemental current group-table capture is present in this bundle." + if group_document is not None: + group_note = "Use the supplemental capture's declared completion/count. A completed zero-row table is observed empty, not a missing capture. Loaded generic Lua presentation classes do not establish GroupIDs." + return exact_hashes({ + "captured_basic_rows": rows, + "asset_verification_source": observations, + "group_table_capture": group_document, + "generic_group_prefab_asset_observations": group_assets, + "group_capture_note": group_note, + "limitation": "Catalog rows, prefab existence and server browse policy do not establish usable drawing, presentation binding or one banner for every avatar.", + }) + + +class Bundle: + def __init__(self, output): + self.output = output + self.entries = [] + + def add(self, relative, data, provenance, source_relative=None, metadata=None): + target = self.output / relative + target.parent.mkdir(parents=True, exist_ok=True) + with target.open("xb") as stream: + stream.write(data) + entry = {"source_relative": source_relative, "bundle_relative": relative, + "sha256": hashlib.sha256(data).hexdigest(), "size_bytes": len(data), + "provenance_class": provenance} + if metadata: + entry.update(metadata) + self.entries.append(entry) + + def json(self, relative, value, provenance="derived-index"): + data = (json.dumps(value, ensure_ascii=False, indent=2) + "\n").encode("utf-8") + self.add(relative, data, provenance) + + def copy(self, root, source, relative, provenance): + source = source.resolve() + source_relative = source.relative_to(root).as_posix() + data = source.read_bytes() + metadata = None + if source.suffix == ".json": + try: + value = json.loads(data.decode("utf-8-sig")) + metadata = {"declared_hashes": declared_hashes(value), + "collection_counts": collection_counts(value)} + except (ValueError, UnicodeError): + metadata = {"json_parse_status": "invalid_or_non_utf8; original bytes retained"} + self.add(relative, data, provenance, source_relative, metadata) + + +def build(root, output, client_hash, client_label): + root = root.resolve() + output = output.resolve() + archive = output.with_name(output.name + ".zip") + if output.exists() or archive.exists(): + raise ValueError("Output directory and adjacent zip must both be new; existing paths are never overwritten.") + if not (root / "AGENTS.md").is_file() or not (root / "resources").is_dir(): + raise ValueError("Root does not contain the expected repository structure.") + required = [root / "resources" / name for name in ( + "PreviewGameplayCatalog.json", "ActivityPreviewPolicy.json", + "PreviewAssetAvailability.json", "GachaSandboxPolicy.json")] + # The derived indices and their copied raw inputs share the exact same bytes, + # even if another editor changes one of these files during bundle creation. + input_bytes = {path: path.read_bytes() for path in required} + catalog, policy, availability, gacha_policy = [ + json.loads(input_bytes[path].decode("utf-8-sig")) for path in required] + if catalog.get("client_assembly_sha256", "").lower() != client_hash: + raise ValueError("Requested Client SHA differs from the captured preview catalog.") + if availability.get("client_assembly_sha256", "").lower() != client_hash: + raise ValueError("Requested Client SHA differs from the asset availability observations.") + output.mkdir(parents=True, exist_ok=False) + bundle = Bundle(output) + for source in sorted((root / "resources").glob("*.json")): + raw = input_bytes.get(source) + if raw is None: + raw = source.read_bytes() + value = json.loads(raw.decode("utf-8-sig")) + category = classify(source, value, client_hash) + bundle.add(f"data/{category}/resources/{source.name}", raw, category, + source.relative_to(root).as_posix(), + {"declared_hashes": declared_hashes(value), "collection_counts": collection_counts(value)}) + for name in ROOT_DATA: + source = root / name + if source.is_file(): + category = "protocol-reference" if name == "cmd_ids_4_6.json" else "unversioned-server-data" + bundle.copy(root, source, f"data/{category}/root/{name}", category) + proto_root = root / "protocol" / "proto" + for source in sorted(proto_root.iterdir()): + if source.suffix == ".proto" or (source.suffix == ".go" and not source.name.endswith(".pb.go")): + bundle.copy(root, source, f"protocol/{source.name}", "protocol-source-revision-not-full-client-dump") + bundle.copy(root, root / "AGENTS.md", "AGENTS.md", "repository-instructions") + for name in DOCS: + source = root / "docs" / name + if source.is_file(): + bundle.copy(root, source, f"docs/{name}", "chronological-project-documentation") + for name in SOURCE_FILES: + source = root / name + if source.is_file(): + bundle.copy(root, source, f"source/{name}", "selected-current-source; not gameplay verification") + tools_root = root / "tools" + for source in sorted(tools_root.iterdir()): + if (source.is_file() and source.suffix in {".py", ".lua", ".js", ".go"} + and (source.name in TOOL_FILES or source.name.startswith(TOOL_PREFIXES)) + and not source.name.startswith("test_") and not source.name.endswith("_test.go")): + bundle.copy(root, source, f"tools/{source.name}", "offline-or-runtime-research-tool; not executed by bundle") + evidence_root = root / "battle_diagnostics" + if evidence_root.is_dir(): + for source in sorted(evidence_root.iterdir()): + selected = (source.name in EVIDENCE_FILES or source.name in PREVIEW_CONFIG_LOGS + or (source.suffix == ".asm" and source.name.startswith(("preview-", "glm-")))) + if source.is_file() and selected: + bundle.copy(root, source, f"evidence/{source.name}", "selected-config-research-evidence") + group_file = evidence_root / "glm-gacha-groups-current.json" + group_asset_file = evidence_root / "glm-gacha-group-assets.json" + group_document = read_json(group_file) if group_file.is_file() else None + group_assets = read_json(group_asset_file) if group_asset_file.is_file() else None + event_index, unresolved, schedules = derive_events(catalog, policy, availability) + bundle.json("derived/event-index.json", event_index) + bundle.json("derived/unresolved-activities.json", unresolved) + bundle.json("derived/preview-schedules.json", schedules) + bundle.json("derived/gacha-index.json", derive_gacha(catalog, gacha_policy, group_document, group_assets)) + csv_stream = io.StringIO(newline="") + columns = list(event_index[0]) if event_index else ["panel_id"] + writer = csv.DictWriter(csv_stream, fieldnames=columns) + writer.writeheader() + for row in event_index: + writer.writerow({key: json.dumps(value, ensure_ascii=False) if isinstance(value, (dict, list)) else value + for key, value in row.items()}) + bundle.add("derived/event-index.csv", csv_stream.getvalue().encode("utf-8-sig"), "derived-index") + tables = catalog.get("tables", {}) + classes = Counter(entry["provenance_class"] for entry in bundle.entries) + readme = f"""# Beta data handoff for GLM + +Client label supplied by operator: {client_label} + +Current assembly SHA-256: `{client_hash}` + +## Scope + +This bundle contains **all currently available resource JSON files in this checkout**, selected root data, +protocol metadata, research tools and bounded config evidence. It is **not a dump of all Beta game data**. +No game asset bundles, native executable, account settings, `persistent`, `freesr-data.json`, +`server.local.json` or unrestricted player/server logs are included. Tools are copied, never executed. + +Captured current preview tables: {', '.join(f'{name}={len(rows)}' for name, rows in tables.items())}. +Event presence observations: {len(availability.get('paths', {}))} paths. +Event policy families: {len(policy.get('panels', []))}. +Event index: {len(event_index)} captured panels; unresolved activity associations: {len(unresolved)}. +Preview schedule derivation status: **{schedules['status']}**; publishable schedule count: {len(schedules['schedules'])}. + +## Start here + +- `derived/event-index.json` / CSV: technical prefab names, ActivityID-to-PanelID associations, + main/resident modules, raw unlock/finish conditions, item dependencies, observed assets and policy eligibility. + Technical names are **not localized event titles**. Text hashes are retained and 64-bit values are decimal strings. +- `derived/unresolved-activities.json`: ActivityConfig rows whose effective panel is absent from the captured panel table. +- `derived/preview-schedules.json`: deterministic server eligibility/conflict rules from `internal/common/activity_preview.go`. + A conflict rejects the entire Go schedule result; diagnostic candidates are not published partial success. +- `derived/gacha-index.json`: six captured basic rows when present in the source catalog, observed asset presence, + policy browsing status and supplemental current group-table capture/prefab observations when supplied. +- The current group table's explicit completed zero-row capture, if present, means **observed empty**; + generic Lua presentation classes do not supply missing GroupIDs or prove an installed generic prefab. +- `docs/ZCODE-HANDOFF.md` and other documents retain chronology. Some deployment/gameplay status may be superseded. +- `docs/GLM-BETA-DATA.md`, `docs/GLM-BETA-EVENTS.md` and `docs/GLM-GACHA-GUIDE.md` contain the current Thai handoff. +- `source/internal/` includes selected event/gacha/entry handler source for comparison; it is not the whole buildable repository. + +## Provenance and limitations + +- `data/current-client-captures`: an explicit matching assembly hash is present. Coverage is only the rows/tables declared. +- `data/compatibility-overlays`: cross-revision/exclusion mappings, not a recaptured full ruleset. +- `data/server-policies`: operator-defined sandbox choices, not captured official rates or gameplay guarantees. +- `data/legacy-client-or-reference`: explicit different assembly provenance; do not relabel as the current Client. +- `data/external-reference-data`: external repository/dataset sources. +- `data/unversioned-server-data`: no matching assembly proof was found. Presence or successful server use does not establish revision. +- Protocol files retain their own source revision; this bundle does not certify the full protocol against this Client. +- Raw copied files preserve original bytes and numeric JSON tokens. Derived indices stringify 64-bit hashes for readers + that would otherwise round JSON numbers. Never reserialize raw game tables through floating-point JavaScript numbers. +- Asset existence is not gameplay support. Do not expose every historical panel with empty success replies. +- Validate current process/module identity before any runtime investigation. Never reuse old session pointers. +- Keep runtime probes outside `scripts/` when inactive, bound work per frame and avoid broad scene/assembly scans. + +## Manifest + +`manifest.json` records source-relative path, bundle path, SHA-256, size, classification, declared hashes and collection counts. +It deliberately does not hash itself or the zip, avoiding recursive hashes. The zip contains the same bundle contents. +Files by category: {json.dumps(dict(sorted(classes.items())), ensure_ascii=False)}. + +Build and Client gameplay success are separate. Follow AGENTS.md and the user's current authorization before running tests, +deploying or interacting with a live game. Creating this bundle does not run tests or change the server. +""" + bundle.add("README-GLM.md", readme.encode("utf-8"), "handoff-documentation") + manifest = { + "format_version": 1, + "created_at_utc": datetime.now(timezone.utc).isoformat(), + "client_label": client_label, + "client_assembly_sha256": client_hash, + "scope": "all currently available repository resources plus explicitly selected supporting data; not all Beta Client data", + "files": sorted(bundle.entries, key=lambda entry: entry["bundle_relative"]), + "manifest_excludes_own_hash_and_archive_hash": True, + } + with (output / "manifest.json").open("x", encoding="utf-8", newline="\n") as stream: + json.dump(manifest, stream, ensure_ascii=False, indent=2) + stream.write("\n") + with ZipFile(archive, "x", compression=ZIP_DEFLATED) as zipped: + for source in sorted(output.rglob("*")): + if source.is_file(): + zipped.write(source, arcname=f"{output.name}/{source.relative_to(output).as_posix()}") + return output, archive, len(bundle.entries) + 1 + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1]) + parser.add_argument("--output", type=Path, required=True, help="New bundle directory; an adjacent .zip is also created.") + parser.add_argument("--client-sha256", required=True) + parser.add_argument("--client-label", required=True) + args = parser.parse_args() + client_hash = args.client_sha256.lower() + if not re.fullmatch(r"[0-9a-f]{64}", client_hash): + parser.error("--client-sha256 must be exactly 64 hexadecimal characters") + if not args.client_label.strip() or any(c in args.client_label for c in "\r\n"): + parser.error("--client-label must be a nonempty single line") + try: + output, archive, count = build(args.root, args.output, client_hash, args.client_label.strip()) + except (OSError, ValueError, KeyError) as error: + parser.exit(1, f"Handoff build failed: {error}\nExisting paths were not deleted; inspect any newly created partial output before choosing another output.\n") + print(f"Created {count} files: {output}") + print(f"Created archive: {archive}") + print("No Client probes, tests, save writes or server changes were performed.") + + +if __name__ == "__main__": + main() diff --git a/tools/build_mission_config_audit.py b/tools/build_mission_config_audit.py new file mode 100644 index 0000000..2c4988c --- /dev/null +++ b/tools/build_mission_config_audit.py @@ -0,0 +1,67 @@ +"""Prepare a bounded, inactive Client audit from the actual outgoing ID catalog.""" +import argparse +import hashlib +import json +from pathlib import Path + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument('--catalog', type=Path, required=True) +parser.add_argument('--output', type=Path, required=True) +args = parser.parse_args() +raw = args.catalog.read_bytes() +ids = sorted(set(json.loads(raw)['subMissionIds'])) +if not ids or any(not isinstance(i, int) or not 0 < i < 2**32 for i in ids): + raise SystemExit('Invalid outgoing mission catalog') +ranges = [] +for i in ids: + if ranges and ranges[-1][1] + 1 == i: + ranges[-1][1] = i + else: + ranges.append([i, i]) +source = '''-- Temporary: read-only lookup of outgoing sub-missions, at most four per frame. +do + if not _G.__gacMissionAudit1 then + local s={range=1,done=false,checked=0,valid=0,missing={},frame=-1} + _G.__gacMissionAudit1=s + local ranges=__RANGES__ + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_MISSION_AUDIT] '..tostring(v))end + log('BEGIN expected=__COUNT__ catalog_sha256=__HASH__') + s.tick=function() + if s.done then return end + local frame=CS.UnityEngine.Time.frameCount + if s.frame==frame then return end + s.frame=frame + local good,err=pcall(function() + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if phase and typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.MissionModule + local start=CS.UnityEngine.Time.realtimeSinceStartup + for n=1,4 do + local r=ranges[s.range] + if not r then + s.done=true + log('END checked='..s.checked..' valid='..s.valid..' missing='..table.concat(s.missing,',')) + return + end + local id=s.next or r[1] + local cfg=m:GetSubMissionInfoConfig(id) + if cfg then s.valid=s.valid+1 else s.missing[#s.missing+1]=tostring(id)end + s.checked=s.checked+1 + if id==r[2]then s.range=s.range+1;s.next=nil else s.next=id+1 end + if s.checked%1000==0 then log('PROGRESS checked='..s.checked..' valid='..s.valid)end + if CS.UnityEngine.Time.realtimeSinceStartup-start>0.002 then break end + end + end) + if not good then s.done=true;log('ERROR checked='..s.checked..' '..tostring(err))end + end + local ok,e=pcall(function()CS.UnityEngine.Application.onBeforeRender('+',s.tick)end) + if not ok then s.done=true;log('ERROR '..tostring(e))end + end +end +''' +source = source.replace('__RANGES__', '{' + ','.join('{%d,%d}' % tuple(r) for r in ranges) + '}') +source = source.replace('__COUNT__', str(len(ids))).replace('__HASH__', hashlib.sha256(raw).hexdigest()) +args.output.write_text(source, encoding='utf-8') +print(f'Prepared {len(ids)} IDs in {len(ranges)} ranges; {len(source)} bytes') diff --git a/tools/capture_named_baked_modules.js b/tools/capture_named_baked_modules.js new file mode 100644 index 0000000..bf3f62d --- /dev/null +++ b/tools/capture_named_baked_modules.js @@ -0,0 +1,32 @@ +// Passive capture only. Supply GAC_NAMED_BAKED_CAPTURE={output_directory, modules} +// in the caller's private prelude. Each entry is {module, file}; filenames must +// be plain basenames. This does not load or execute any Lua closure itself. +const plan = globalThis.GAC_NAMED_BAKED_CAPTURE; +if (!plan || typeof plan.output_directory !== 'string' || !Array.isArray(plan.modules) || + plan.modules.length < 1 || plan.modules.length > 5) throw Error('Exact bounded capture plan required'); +const requested = new Map(); +for (const entry of plan.modules) { + if (!/^Ui\.[A-Za-z0-9_.]+$/.test(entry.module) || !/^[a-z0-9_-]+\.luau$/.test(entry.file)) + throw Error('Invalid exact module or output basename'); + requested.set('@BakedLua/' + entry.module.replace(/\./g, '/') + '.bytes', entry.file); +} +const module = Process.getModuleByName('xluau.dll'); +const load = module.getExportByName('xluaL_loadbuffer'); +const completed = new Set(); +Interceptor.attach(load, { + onEnter(args) { + try { + const name = args[3].readUtf8String(); + if (!requested.has(name) || completed.has(name)) return; + const size = args[2].toUInt32(); + if (size < 4 || size > 131072) throw Error('Named chunk outside capture size bound'); + const bytes = args[1].readByteArray(size); + const path = plan.output_directory.replace(/[\\/]$/, '') + '/' + requested.get(name); + const output = new File(path, 'wb'); + try { output.write(bytes); output.flush(); } finally { output.close(); } + completed.add(name); + send({kind:'CAPTURED', module:name, path, bytes:size}); + } catch (error) { send({kind:'ERROR', error:String(error)}); } + } +}); +send({kind:'ATTACHED', modules:Array.from(requested.keys()), policy:'passive exact-name loadbuffer capture; no closure execution'}); diff --git a/tools/check_preview_assets.py b/tools/check_preview_assets.py new file mode 100644 index 0000000..e8e4e9a --- /dev/null +++ b/tools/check_preview_assets.py @@ -0,0 +1,24 @@ +"""Prepare a bounded, read-only presence query for captured event paths.""" +import json +from pathlib import Path +root=Path(__file__).resolve().parents[1] +c=json.loads((root/'resources/PreviewGameplayCatalog.json').read_text(encoding='utf-8-sig')) +paths=sorted({p[k] for p in c['tables']['panels'] for k in ('UIPrefab','TabIcon') if p.get(k)}) +source='''-- Asset manifest presence only, eight captured paths per heartbeat; no loading. +do local function capture() + local s=_G.__gacEventAssets1 or {index=1};_G.__gacEventAssets1=s + local paths=PATHS + if s.index>#paths then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + for n=1,8 do + if s.index>#paths then CS.UnityEngine.Debug.Log('[GAC_EVENT_ASSET] END');return end + local path=paths[s.index];s.index=s.index+1 + CS.UnityEngine.Debug.Log('[GAC_EVENT_ASSET] '..tostring(CS.RPG.Client.GlobalVars.s_AssetMgr:Exists(path))..' '..path) + end +end;local ok,e=pcall(capture);if not ok then _G.__gacEventAssets1={index=99999};CS.UnityEngine.Debug.Log('[GAC_EVENT_ASSET] ERROR '..tostring(e))end end +'''.replace('PATHS','{'+','.join(json.dumps(p)for p in paths)+'}') +(root/'tools/event_asset_presence.lua').write_text(source,encoding='utf-8') +print('Captured paths:',len(paths)) diff --git a/tools/comic_dessert_services_metadata.lua b/tools/comic_dessert_services_metadata.lua new file mode 100644 index 0000000..92145b9 --- /dev/null +++ b/tools/comic_dessert_services_metadata.lua @@ -0,0 +1,31 @@ +-- Exact live ComicDessert services, bounded metadata only. +do + local function capture() + local s=_G.__gacComicServicesMeta1 or {index=1,offset=0,kind='fields'} + _G.__gacComicServicesMeta1=s + local names={'NetworkService','CycleConfigRepository','LevelConfigRepository','FeatureUnlockService','ProgressDomainService'} + if s.index>#names then return end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.ComicDessertModule + if not module then return end + local value=module[names[s.index]] + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_COMIC_SERVICES_META] '..tostring(v))end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + if not value then log('MISSING '..names[s.index]);s.index=s.index+1;return end + if not s.t then s.t=value:GetType();s.members=s.t:GetFields(flags);log('TYPE '..names[s.index]..' '..s.t.FullName)end + for n=1,16 do + if s.offset>=s.members.Length then + if s.kind=='fields'then s.kind='methods';s.members=s.t:GetMethods(flags);s.offset=0;return end + s.index=s.index+1;s.t=nil;s.members=nil;s.offset=0;s.kind='fields' + if s.index>#names then log('END')end + return + end + local m=s.members[s.offset];s.offset=s.offset+1 + if m.DeclaringType==s.t then + if s.kind=='fields'then log('FIELD '..m.Name..' '..m.FieldType.FullName) + else log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end + end + end + local ok,e=pcall(capture) + if not ok then _G.__gacComicServicesMeta1={index=99};CS.UnityEngine.Debug.Log('[GAC_COMIC_SERVICES_META] ERROR '..tostring(e))end +end diff --git a/tools/comic_flat_tables_capture.js b/tools/comic_flat_tables_capture.js new file mode 100644 index 0000000..03ded4e --- /dev/null +++ b/tools/comic_flat_tables_capture.js @@ -0,0 +1,41 @@ +// Current .54 SHA 4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6. +// Exact Row.FromBinary -> Add -> lazy GetAll chain in comic-*-current.asm. +// Only two flat config getters; no repository/scene/gameplay constructors. +const module = Process.getModuleByName('GameAssembly.dll'); +const tables = [['cycle', 0x1eafb230], ['level', 0x1e2556c0]]; +for (const [name,rva] of tables) { + if (module.base.add(rva).readU32()!==0x28ec8348) throw Error('Getter differs: '+name); +} +const serializer=module.base.add(0x1d46c040); +const serialize=new NativeFunction(serializer,'pointer',['pointer','pointer']); +const marker='GAC_COMIC_FLAT_TICK'; +let table=0,index=0,count=0,entries=null,done=false,busy=false; +Interceptor.attach(serializer,{ + onEnter(args){ + this.trigger=false;if(done||busy)return; + try{this.trigger=args[0].add(0x10).readS32()===marker.length&&args[0].add(0x14).readUtf16String(marker.length)===marker;}catch(_){} + }, + onLeave(){ + if(!this.trigger||done||busy)return;busy=true; + try{ + if(entries===null){ + const get=new NativeFunction(module.base.add(tables[table][1]),'pointer',['pointer']); + const dict=get(ptr(0));if(dict.isNull())throw Error('Missing dictionary'); + count=dict.add(0x20).readU32();entries=dict.add(0x18).readPointer();index=0; + if(count>256||count>0&&(entries.isNull()||entries.add(0x18).readU32()32768)throw Error('Row size bound'); + rows.push(value.add(0x14).readUtf16String(length)); + } + send({kind:'ROWS',table:tables[table][0],rows}); + if(index>=count){send({kind:'TABLE_END',table:tables[table][0],count});table++;entries=null;if(table===tables.length){done=true;send({kind:'END'});}} + }catch(e){done=true;send({kind:'ERROR',error:String(e)});}finally{busy=false;} + } +}); +send({kind:'ATTACHED',scope:'two exact lazy flat getters, four rows per marker heartbeat',module:module.path}); diff --git a/tools/comic_level_start_metadata.lua b/tools/comic_level_start_metadata.lua new file mode 100644 index 0000000..c658819 --- /dev/null +++ b/tools/comic_level_start_metadata.lua @@ -0,0 +1,48 @@ +-- Exact existing ComicDessert services/Start response only; eight members per +-- non-battle heartbeat. No Start request, callback, constructor or scene call. +do local function capture() + local s=_G.__gacComicStartMetadata1 or {target=1,index=0};_G.__gacComicStartMetadata1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local gm=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=gm and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(gm) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.ComicDessertModule + if not module then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_COMIC_START_METADATA] '..tostring(v))end + if not s.t then + if s.target==1 then + local service=module.NetworkService;s.t=service and service:GetType() + elseif s.target==2 then + local service=module.LevelStartFlowService;s.t=service and service:GetType() + if s.t then + s.nested=s.t:GetNestedTypes(flags) + if s.nested.Length>32 then error('exact start-flow nested-type bound')end + end + elseif s.target==3 then + local network=module.NetworkService + local method=network and network:GetType():GetMethod('OFHMHPKEECI',flags) + local args=method and method.ReturnType:GetGenericArguments() + s.t=args and args.Length==1 and args[0] or nil + s.properties=true + elseif s.nested and s.target-4=s.members.Length then s.target=s.target+1;s.t=nil;s.members=nil;s.properties=false;return end + local member=s.members[s.index];s.index=s.index+1 + if member.DeclaringType==s.t then + if s.properties then + local getter=member:GetGetMethod(true) + log('PROPERTY '..member.Name..' '..member.PropertyType.FullName..' GETTER '..tostring(getter and getter.MethodHandle.Value)) + else + log('METHOD '..tostring(member)..' HANDLE '..tostring(member.MethodHandle.Value)) + end + end + end +end local ok,e=pcall(capture);if not ok then _G.__gacComicStartMetadata1={done=true};CS.UnityEngine.Debug.Log('[GAC_COMIC_START_METADATA] ERROR '..tostring(e))end end diff --git a/tools/comic_progress_metadata.lua b/tools/comic_progress_metadata.lua new file mode 100644 index 0000000..d0fc1d1 --- /dev/null +++ b/tools/comic_progress_metadata.lua @@ -0,0 +1,16 @@ +-- Exact constructed progress services; bounded metadata, no getters with work. +do local function capture() + local s=_G.__gacComicProgressMeta1 or {target=1,index=0};_G.__gacComicProgressMeta1=s + local names={'Progress','ProgressService','LongTailService'} + if s.target>#names then return end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.ComicDessertModule + local value=module and module[names[s.target]];if not value then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_COMIC_PROGRESS_META] '..tostring(v))end + if not s.t then s.t=value:GetType();s.members=s.t:GetMethods(flags);s.index=0;log('TYPE '..names[s.target]..' '..s.t.FullName)end + for n=1,8 do + if s.index>=s.members.Length then s.target=s.target+1;s.t=nil;s.members=nil;return end + local m=s.members[s.index];s.index=s.index+1 + if m.DeclaringType==s.t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end +end local ok,e=pcall(capture);if not ok then _G.__gacComicProgressMeta1={target=99};CS.UnityEngine.Debug.Log('[GAC_COMIC_PROGRESS_META] ERROR '..tostring(e))end end diff --git a/tools/comic_repository_hierarchy.lua b/tools/comic_repository_hierarchy.lua new file mode 100644 index 0000000..aae0239 --- /dev/null +++ b/tools/comic_repository_hierarchy.lua @@ -0,0 +1,31 @@ +-- Read exact repository inheritance; private base fields are not returned by +-- GetField on the concrete type. No repository initialization or constructors. +do local function capture() + local s=_G.__gacComicRepoHierarchy1 or {target=1,index=0};_G.__gacComicRepoHierarchy1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),62) + local names={'CycleConfigRepository','LevelConfigRepository'} + if s.target>#names then s.done=true;return end + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.ComicDessertModule + local value=m and m[names[s.target]];if not value then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_COMIC_REPO_HIERARCHY] '..tostring(v))end + if not s.t then s.t=value:GetType()end + if not s.fields then s.fields=s.t:GetFields(flags);s.index=0;log('TYPE '..names[s.target]..' '..s.t.FullName)end + for n=1,8 do + if s.index>=s.fields.Length then + s.t=s.t.BaseType;s.fields=nil + if not s.t or s.t.FullName=='System.Object'then s.target=s.target+1;s.t=nil end + return + end + local f=s.fields[s.index];s.index=s.index+1 + if not f.IsStatic then + local v=f:GetValue(value) + log('FIELD '..f.Name..' TYPE '..f.FieldType.FullName..' NULL '..tostring(v==nil)) + if v and f.FieldType.FullName:find('System.Collections.Generic.Dictionary',1,true) then + log('DICTIONARY '..names[s.target]..' FIELD '..f.Name..' COUNT '..v.Count) + _G.__GAC_COMIC_CAPTURE_REPOSITORIES=_G.__GAC_COMIC_CAPTURE_REPOSITORIES or {} + _G.__GAC_COMIC_CAPTURE_REPOSITORIES[names[s.target]]=v + end + end + end +end local ok,e=pcall(capture);if not ok then _G.__gacComicRepoHierarchy1={done=true};CS.UnityEngine.Debug.Log('[GAC_COMIC_REPO_HIERARCHY] ERROR '..tostring(e))end end diff --git a/tools/comic_stella_config_capture.lua b/tools/comic_stella_config_capture.lua new file mode 100644 index 0000000..ee762df --- /dev/null +++ b/tools/comic_stella_config_capture.lua @@ -0,0 +1,80 @@ +-- Offline-analysis data capture only; do not keep in the heartbeat scripts/. +-- Reads already constructed repositories. Never initializes a repository, +-- invokes a gameplay method, creates a scene, or changes live state. +do + local function capture() + local s=_G.__gacComicStellaConfig1 or {stage=1,row=0} + _G.__gacComicStellaConfig1=s + if s.stage>5 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + if not manager then return end + local phase=typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local modules=CS.RPG.Client.GlobalVars.s_ModuleManager + local comic=modules and modules.ComicDessertModule + if not comic then return end + local log=function(v) CS.UnityEngine.Debug.Log('[GAC_COMIC_STELLA_CONFIG] '..tostring(v)) end + local function json(v) + local text=CS.Newtonsoft.Json.JsonConvert.SerializeObject(v) + if #text>32768 then error('single configuration exceeds 32768-byte output bound') end + return text + end + if s.stage==1 then + -- Exact existing named method handles, no assembly enumeration. + local t=comic:GetType() + for _,name in ipairs({'_OnGetDataSuccess','_SetUpProgress','_SetUpUpgradeTree'}) do + local method=t:GetMethod(name,flags) + if method then log('METHOD '..t.FullName..' '..tostring(method)..' HANDLE '..tostring(method.MethodHandle.Value)) end + end + local network=comic.NetworkService + local method=network and network:GetType():GetMethod('NPFCAEIAFOM',flags) + if method then log('METHOD '..network:GetType().FullName..' '..tostring(method)..' HANDLE '..tostring(method.MethodHandle.Value)) end + s.stage=2;return + end + if s.stage==2 then + -- Callback parameter supplies the true response type, avoiding xLua placeholders. + local method=comic:GetType():GetMethod('_OnGetDataSuccess',flags) + local parameters=method:GetParameters() + local t=parameters[0].ParameterType + log('RESPONSE_TYPE '..t.FullName) + s.fields=t:GetFields(flags);s.index=0;s.stage=3;return + end + if s.stage==3 then + for n=1,8 do + if s.index>=s.fields.Length then s.fields=nil;s.stage=4;return end + local f=s.fields[s.index];s.index=s.index+1 + log('RESPONSE_FIELD '..f.Name..' '..f.FieldType.FullName) + end + return + end + if s.stage==4 or s.stage==5 then + local name=s.stage==4 and 'CycleConfigRepository' or 'LevelConfigRepository' + local repository=comic[name] + if not repository then log('MISSING '..name);s.stage=s.stage+1;return end + if not s.enumerator then + local t=repository:GetType() + local f=t:GetField('BDBOGJHLEIG',flags) + local dictionary=f and f:GetValue(repository) + if not dictionary then log('MISSING_DICTIONARY '..name);s.stage=s.stage+1;return end + if dictionary.Count>256 then error('repository row bound') end + log('BEGIN '..name..' count='..dictionary.Count) + s.enumerator=dictionary:GetEnumerator();s.row=0 + end + if s.enumerator:MoveNext() then + local pair=s.enumerator.Current;s.row=s.row+1 + log('ROW '..name..' '..json(pair.Value)) + else + s.enumerator:Dispose();s.enumerator=nil + log('END_REPOSITORY '..name..' rows='..s.row);s.stage=s.stage+1 + if s.stage>5 then log('END') end + end + return + end + end + local ok,e=pcall(capture) + if not ok then + _G.__gacComicStellaConfig1={stage=99} + CS.UnityEngine.Debug.Log('[GAC_COMIC_STELLA_CONFIG] ERROR '..tostring(e)) + end +end diff --git a/tools/comic_stella_schema_capture.lua b/tools/comic_stella_schema_capture.lua new file mode 100644 index 0000000..fb15c4a --- /dev/null +++ b/tools/comic_stella_schema_capture.lua @@ -0,0 +1,65 @@ +-- Exact named rows/protobuf properties only, four members per heartbeat. +-- No recursive JsonConvert/config serialization or gameplay calls. +do + local function capture() + local s=_G.__gacComicStellaSchema1 or {target=1,index=0,kind='fields'} + _G.__gacComicStellaSchema1=s + if s.target>4 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + if not manager then return end + local phase=typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local modules=CS.RPG.Client.GlobalVars.s_ModuleManager + local log=function(v) CS.UnityEngine.Debug.Log('[GAC_COMIC_STELLA_SCHEMA] '..tostring(v)) end + if not s.t then + if s.target<=2 then + local name=s.target==1 and 'RPG.GameCore.ComicDessertCycleRow' or 'RPG.GameCore.ComicDessertLevelRow' + s.t=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly:GetType(name) + elseif s.target==3 then + local m=modules.ComicDessertModule:GetType():GetMethod('_OnGetDataSuccess',flags) + s.t=m:GetParameters()[0].ParameterType;s.kind='properties' + else + local five=modules.FiveDimModule + local cfg=five:GetType():GetField('_GameConfig',flags):GetValue(five) + s.value=cfg and cfg:GetType():GetField('PlayerConfig',flags):GetValue(cfg) + s.t=s.value and s.value:GetType() + end + if not s.t then log('MISSING_TARGET '..s.target);s.target=s.target+1;return end + log('TYPE '..s.t.FullName) + s.members=s.kind=='properties' and s.t:GetProperties(flags) or s.t:GetFields(flags) + s.index=0 + end + for n=1,4 do + if s.index>=s.members.Length then + if s.target<=2 and s.kind=='fields' then + local method=s.t:GetMethod('FromBinary',flags) + if method then log('METHOD '..s.t.FullName..' '..tostring(method)..' HANDLE '..tostring(method.MethodHandle.Value)) end + end + log('END_TYPE '..s.t.FullName) + s.target=s.target+1;s.t=nil;s.members=nil;s.value=nil;s.index=0;s.kind='fields' + if s.target>4 then log('END') end + return + end + local member=s.members[s.index];s.index=s.index+1 + if member.DeclaringType==s.t then + if s.kind=='properties' then + local getter=member:GetGetMethod(true) + log('PROPERTY '..member.Name..' '..member.PropertyType.FullName..' GETTER '..(getter and tostring(getter.MethodHandle.Value) or 'nil')) + else + local kind=member.FieldType.FullName + local text='FIELD '..member.Name..' '..kind + if s.value and (kind=='System.UInt32' or kind=='System.Int32' or kind=='System.Single' or kind=='System.Boolean' or kind=='System.String') then + text=text..' VALUE '..tostring(member:GetValue(s.value)) + end + log(text) + end + end + end + end + local ok,e=pcall(capture) + if not ok then + _G.__gacComicStellaSchema1={target=99} + CS.UnityEngine.Debug.Log('[GAC_COMIC_STELLA_SCHEMA] ERROR '..tostring(e)) + end +end diff --git a/tools/comic_table_metadata.lua b/tools/comic_table_metadata.lua new file mode 100644 index 0000000..6f0e596 --- /dev/null +++ b/tools/comic_table_metadata.lua @@ -0,0 +1,18 @@ +-- Named flat configuration tables only; no scene/graph loading. +do local function capture() + local s=_G.__gacComicFlatMeta1 or {target=1,index=0};_G.__gacComicFlatMeta1=s + local names={'RPG.GameCore.ComicDessertCycleExcelTable','RPG.GameCore.ComicDessertLevelExcelTable'} + if s.target>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_COMIC_FLAT_META] '..tostring(v))end + if not s.t then + s.t=typeof(CS.RPG.GameCore.AvatarExcelTable).Assembly:GetType(names[s.target]) + if not s.t then log('MISSING '..names[s.target]);s.target=s.target+1;return end + log('TYPE '..s.t.FullName);s.members=s.t:GetMethods(flags);s.index=0 + end + for n=1,8 do + if s.index>=s.members.Length then s.t=nil;s.members=nil;s.target=s.target+1;return end + local m=s.members[s.index];s.index=s.index+1 + if m.DeclaringType==s.t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end +end local ok,e=pcall(capture);if not ok then _G.__gacComicFlatMeta1={target=99};CS.UnityEngine.Debug.Log('[GAC_COMIC_FLAT_META] ERROR '..tostring(e))end end diff --git a/tools/compare_cw_reference_protocol.py b/tools/compare_cw_reference_protocol.py new file mode 100644 index 0000000..b278b04 --- /dev/null +++ b/tools/compare_cw_reference_protocol.py @@ -0,0 +1,71 @@ +"""Compare reference CW descriptors with the repository's compiled descriptor set.""" +import argparse +import json +import re +from pathlib import Path +from google.protobuf import descriptor_pb2 as d + + +def messages(files): + result = {} + def visit(rows, prefix): + for row in rows: + full = prefix+'.'+row.name + result[full] = row + visit(row.nested_type, full) + for file in files: + visit(file.message_type, '.'+file.package) + return result + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument('--reference', type=Path, required=True) + p.add_argument('--current', type=Path, required=True) + p.add_argument('--commands', type=Path, required=True) + p.add_argument('--output', type=Path, required=True) + args = p.parse_args() + reference = d.FileDescriptorProto.FromString(args.reference.read_bytes()) + current = d.FileDescriptorSet.FromString(args.current.read_bytes()) + fm, cm = messages([reference]), messages(current.file) + current_names = {int(v):k for k,v in re.findall(r'"([^"]+)":\s*(\d+)',args.commands.read_text())} + commands = [{'id':v.number,'ffgo_name':v.name[3:],'current_name':current_names.get(v.number)} for enum in reference.enum_type if enum.name == 'CmdGridFightType' for v in enum.value if v.number] + mapping, conflicts = {}, [] + def match(a,b,seen): + if (a,b) in seen: + return True + seen.add((a,b)) + if a not in fm or b not in cm: + return False + xf, yf = ({v.number:v for v in rows.field} for rows in (fm[a],cm[b])) + if xf.keys()!=yf.keys(): + return False + for num,u in xf.items(): + v=yf[num] + if u.type!=v.type or u.label!=v.label or u.HasField('oneof_index')!=v.HasField('oneof_index'): + return False + if u.type==u.TYPE_MESSAGE and not match(u.type_name,v.type_name,seen): + return False + # Preserve the partition of fields into oneofs, independent of names. + groups = lambda fields: sorted(sorted(v.number for v in fields if v.HasField('oneof_index') and v.oneof_index==i) for i in set(v.oneof_index for v in fields if v.HasField('oneof_index'))) + return groups(fm[a].field)==groups(cm[b].field) + for row in commands: + row['same_name']=row['ffgo_name']==row['current_name'] + a='.'+reference.package+'.'+row['ffgo_name'] + candidates=[k for k in cm if k.rsplit('.',1)[-1]==row['current_name']] + seen=set() + row['wire_shape_equal']=len(candidates)==1 and match(a,candidates[0],seen) + if row['wire_shape_equal']: + for k,v in seen: + if k in mapping and mapping[k]!=v: + conflicts.append([k,mapping[k],v]) + mapping[k]=v + args.output.mkdir(parents=True,exist_ok=True) + provenance={'reference_descriptor_sha256':__import__('hashlib').sha256(args.reference.read_bytes()).hexdigest(),'current_descriptor_sha256':__import__('hashlib').sha256(args.current.read_bytes()).hexdigest(),'limitations':['Equal wire shapes do not establish enum meanings, field semantics, runtime success, or permission to register numeric aliases.']} + (args.output/'cw-command-comparison.json').write_text(json.dumps({'provenance':provenance,'commands':commands},indent=2)) + (args.output/'cw-message-mapping.json').write_text(json.dumps({'provenance':provenance,'messages':mapping,'conflicts':conflicts},indent=2)) + print(json.dumps({'commands':len(commands),'same_names':sum(x['same_name'] for x in commands),'equal_wire_shapes':sum(x['wire_shape_equal'] for x in commands),'mapped_messages':len(mapping),'conflicts':len(conflicts),'shape_differences':[x for x in commands if not x['wire_shape_equal']]})) + + +if __name__=='__main__': + main() diff --git a/tools/cw_active_encounter_capture.lua b/tools/cw_active_encounter_capture.lua new file mode 100644 index 0000000..58f2dd0 --- /dev/null +++ b/tools/cw_active_encounter_capture.lua @@ -0,0 +1,69 @@ +-- Read-only, one-shot probe for the current Currency Wars encounter. +do + local state=_G.__gacCwActiveEncounterCapture7 or {done=false};_G.__gacCwActiveEncounterCapture7=state + if not state.done then + local function log(value)CS.UnityEngine.Debug.Log('[GAC_CW_ACTIVE_ENCOUNTER] '..tostring(value))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local session=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession + if not session then return end + local stage + local fs=session:GetType():GetFields(flags) + for i=0,math.min(fs.Length-1,63)do if fs[i].FieldType.FullName=='RPG.Client.GridFightStage'then stage=fs[i]:GetValue(session);break end end + if not stage or not stage.CurNode then return end + local node=stage.CurNode + local function field(obj,name) + if not obj then return nil end + local all=obj:GetType():GetFields(flags) + for i=0,math.min(all.Length-1,63)do if all[i].Name==name then return all[i]:GetValue(obj)end end + end + local function list(obj) + local array=field(obj,'array');local count=field(obj,'count')or 0;local out={} + if array then for i=0,math.min(count-1,31)do out[#out+1]=array[i]end end + return out + end + local function showRow(tableName,id,getter) + local success,row=pcall(function()return getter(id)end) + if not success then log('TABLE_ERROR '..tableName..' id='..id..' '..tostring(row));return end + if not row then log('TABLE_EMPTY '..tableName..' id='..id);return end + local encodedOK,encoded=pcall(function()return CS.Newtonsoft.Json.JsonConvert.SerializeObject(row)end) + if encodedOK and #tostring(encoded)<=24000 then log('TABLE '..tableName..' id='..id..' '..tostring(encoded))else log('TABLE_ERROR '..tableName..' id='..id..' '..tostring(encoded))end + end + log('PROBE_VERSION=7') + log('BEGIN route='..stage.RouteID..' chapter='..stage.ChapterID..' section='..stage.SectionID..' stage='..node.StageID..' level='..stage.CurMonsterLevel..' base_diff='..stage:GetBaseDiffAddLv()..' current_diff='..stage:GetCurrentMonsterDiffAddLv()..' all_diff='..stage:GetAllDiffAddLv()) + local stageRow=CS.RPG.GameCore.StageExcelTable.GetData(node.StageID) + log('ROW StageExcelTable '..CS.Newtonsoft.Json.JsonConvert.SerializeObject(stageRow)) + local battleField=node:GetType():GetField('_BattleNodeInfo',flags) + local battle=battleField and battleField:GetValue(node) + local branches=list(field(battle,'EOHMIOEPOGP')) + log('BRANCH_COUNT '..#branches) + for branchIndex=1,#branches do + local branch=branches[branchIndex] + local option=field(branch,'DDKGLOFJIHH')or 0 + local penalty=field(branch,'KDCDJDFHIPP')or 0 + local difficulty=field(branch,'PANBGEDCMCH')or 0 + local waveObjects=list(field(branch,'EMGPLPNHBHF')) + log('BRANCH index='..branchIndex..' option='..option..' penalty='..penalty..' extra_difficulty='..difficulty..' waves='..#waveObjects) + for waveIndex=1,#waveObjects do + local wave=waveObjects[waveIndex] + local waveID=field(wave,'BLCIEPPJJCC')or 0 + local monsters=list(field(wave,'ABMPKGNBMNA')) + local summary={} + for monsterIndex=1,#monsters do + local monster=monsters[monsterIndex] + summary[#summary+1]=tostring(field(monster,'OEPOBIODAJH')or 0)..':'..tostring(field(monster,'NNLJKKAEICI')or 0) + end + log('WAVE branch='..branchIndex..' id='..waveID..' count='..#monsters..' monster_id:role_star='..table.concat(summary,',')) + showRow('GridFightFormationWaveExcelTable',waveID,function(id)return CS.RPG.GameCore.GridFightFormationWaveExcelTable.GetData(id)end) + showRow('GridFightFormationWaveConfigExcelTable',waveID,function(id)return CS.RPG.GameCore.GridFightFormationWaveConfigExcelTable.GetData(id)end) + showRow('GridFightEliteGroupExcelTable',waveID,function(id)return CS.RPG.GameCore.GridFightEliteGroupExcelTable.GetData(id)end) + showRow('GridFightEliteGroupConfigExcelTable',waveID,function(id)return CS.RPG.GameCore.GridFightEliteGroupConfigExcelTable.GetData(id)end) + end + end + local penaltyRow=node:GetType():GetProperty('_PenaltyRuleConfigRow',flags) + if penaltyRow then log('ROW PenaltyRule '..CS.Newtonsoft.Json.JsonConvert.SerializeObject(penaltyRow:GetValue(node,nil)))end + log('END');state.done=true + end) + if not ok then log('ERROR '..tostring(err));state.done=true end + end +end diff --git a/tools/cw_active_node_context.lua b/tools/cw_active_node_context.lua new file mode 100644 index 0000000..615d5a4 --- /dev/null +++ b/tools/cw_active_node_context.lua @@ -0,0 +1,105 @@ +-- One-shot, read-only inspection of the active Beta client's current CW node. +-- This inspects only objects reachable from the active node, with bounded depth/counts. +do + local state = _G.__gacCwActiveNodeContext2 or { done = false } + _G.__gacCwActiveNodeContext2 = state + if not state.done then + local lines = {} + local function add(s) + if #lines < 260 then lines[#lines + 1] = tostring(s) end + end + local ok, err = pcall(function() + local flags = CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags), 60) + local session = CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession + if not session then add('NO_SESSION'); return end + local function field(obj, name) + if not obj then return nil end + local fs = obj:GetType():GetFields(flags) + for i = 0, math.min(fs.Length - 1, 79) do + if fs[i].Name == name then return fs[i]:GetValue(obj) end + end + end + local function value(v) + if v == nil then return 'nil' end + local t = type(v) + if t == 'string' or t == 'number' or t == 'boolean' then return tostring(v) end + local success, managed = pcall(function() return v:GetType() end) + if success then + if managed.IsEnum or managed.IsPrimitive then return tostring(v) end + return '<' .. tostring(managed.FullName) .. '>' + end + return '<' .. t .. '>' + end + local function inspect(label, obj, maxFields) + if not obj then add('OBJECT ' .. label .. ' nil'); return end + local ty = obj:GetType() + add('OBJECT ' .. label .. ' ' .. tostring(ty.FullName)) + local fs = ty:GetFields(flags) + local emitted = 0 + for i = 0, math.min(fs.Length - 1, 95) do + local f = fs[i] + if not f.IsStatic and emitted < (maxFields or 48) then + local got, v = pcall(function() return f:GetValue(obj) end) + add('FIELD ' .. label .. '.' .. tostring(f.Name) .. ' ' .. tostring(f.FieldType.FullName) .. '=' .. (got and value(v) or '')) + emitted = emitted + 1 + end + end + end + local stage + local sessionFields = session:GetType():GetFields(flags) + for i = 0, math.min(sessionFields.Length - 1, 79) do + if sessionFields[i].FieldType.FullName == 'RPG.Client.GridFightStage' then + stage = sessionFields[i]:GetValue(session); break + end + end + if not stage or not stage.CurNode then add('NO_ACTIVE_NODE'); return end + local node = stage.CurNode + add('RUN route=' .. tostring(stage.RouteID) .. ' chapter=' .. tostring(stage.ChapterID) .. + ' section=' .. tostring(stage.SectionID) .. ' stage=' .. tostring(node.StageID) .. + ' level=' .. tostring(stage.CurMonsterLevel)) + inspect('stage.levelInfo', field(stage, '_LevelInfo'), 24) + inspect('stage.normalMonsterData', field(stage, 'k__BackingField'), 36) + inspect('stage.powerfulMonsterData', field(stage, 'k__BackingField'), 36) + inspect('stage.route', field(stage, 'Route'), 12) + inspect('node', node, 24) + inspect('node.routeData', field(node, '_RouteNode'), 24) + local battleField = node:GetType():GetField('_BattleNodeInfo', flags) + local battle = battleField and battleField:GetValue(node) + inspect('battle', battle, 16) + local function list(obj) + local arr = field(obj, 'array') or field(obj, '_items') + local count = field(obj, 'count') or field(obj, '_size') or 0 + local out = {} + if arr then for i = 0, math.min(count - 1, 31) do out[#out + 1] = arr[i] end end + return out + end + local branches = list(field(battle, 'EOHMIOEPOGP')) + add('BRANCHES ' .. tostring(#branches)) + for bi = 1, math.min(#branches, 4) do + local branch = branches[bi] + add('BRANCH index=' .. bi .. ' option=' .. value(field(branch, 'DDKGLOFJIHH')) .. + ' penalty=' .. value(field(branch, 'KDCDJDFHIPP')) .. + ' difficulty=' .. value(field(branch, 'PANBGEDCMCH'))) + inspect('branch' .. bi, branch, 16) + local waves = list(field(branch, 'EMGPLPNHBHF')) + for wi = 1, math.min(#waves, 4) do + local wave = waves[wi] + add('WAVE branch=' .. bi .. ' index=' .. wi .. ' id=' .. value(field(wave, 'BLCIEPPJJCC'))) + inspect('wave' .. bi .. '_' .. wi, wave, 16) + local monsters = list(field(wave, 'ABMPKGNBMNA')) + for mi = 1, #monsters do + local monster = monsters[mi] + if (bi == 1 and mi == 10) or (bi == 2 and mi == 11) then + add('MONSTER branch=' .. bi .. ' wave=' .. wi .. ' index=' .. mi .. + ' id=' .. value(field(monster, 'OEPOBIODAJH')) .. ' star=' .. value(field(monster, 'NNLJKKAEICI'))) + inspect('monster' .. bi .. '_' .. wi .. '_' .. mi, monster, 16) + end + end + end + end + end) + if not ok then add('ERROR ' .. tostring(err)) end + CS.UnityEngine.Debug.Log('[GAC_CW_ACTIVE_NODE_CONTEXT]\n' .. table.concat(lines, '\n')) + state.done = true + end +end diff --git a/tools/cw_active_table_rows.lua b/tools/cw_active_table_rows.lua new file mode 100644 index 0000000..2f57dd5 --- /dev/null +++ b/tools/cw_active_table_rows.lua @@ -0,0 +1,70 @@ +-- One-shot, read-only Beta Client lookup for the active CW route/stage rows. +-- IDs passed to these lookups come from the active GridFightStage objects. +do + local state = _G.__gacCwActiveTableRows1 or { done = false } + _G.__gacCwActiveTableRows1 = state + if not state.done then + local lines = {} + local function add(s) if #lines < 24 then lines[#lines + 1] = tostring(s) end end + local function getField(obj, name, flags) + if not obj then return nil end + local fs = obj:GetType():GetFields(flags) + for i = 0, math.min(fs.Length - 1, 95) do + if fs[i].Name == name then return fs[i]:GetValue(obj) end + end + end + local function row(name, id, getter) + local ok, value = pcall(getter) + if not ok then add('ROW_ERROR ' .. name .. ' id=' .. tostring(id) .. ' ' .. tostring(value)); return end + if not value then add('ROW_EMPTY ' .. name .. ' id=' .. tostring(id)); return end + local encodedOK, encoded = pcall(function() return CS.Newtonsoft.Json.JsonConvert.SerializeObject(value) end) + if encodedOK and #tostring(encoded) <= 20000 then + add('ROW ' .. name .. ' id=' .. tostring(id) .. ' ' .. tostring(encoded)) + elseif encodedOK then + add('ROW_TOO_LARGE ' .. name .. ' id=' .. tostring(id) .. ' chars=' .. tostring(#tostring(encoded))) + else + add('ROW_SERIALIZE_ERROR ' .. name .. ' id=' .. tostring(id) .. ' ' .. tostring(encoded)) + end + end + local ok, err = pcall(function() + local flags = CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags), 60) + local session = CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession + if not session then add('NO_SESSION'); return end + local stage + local fs = session:GetType():GetFields(flags) + for i = 0, math.min(fs.Length - 1, 79) do + if fs[i].FieldType.FullName == 'RPG.Client.GridFightStage' then stage = fs[i]:GetValue(session); break end + end + if not stage or not stage.CurNode then add('NO_ACTIVE_NODE'); return end + local node = stage.CurNode + local stageID, routeID = node.StageID, stage.RouteID + local battle = getField(node, '_BattleNodeInfo', flags) + local battleAuxA = getField(battle, 'INGNOGNLFBC', flags) + local battleAuxB = getField(battle, 'LFGIGDPIGJE', flags) + add('RUN route=' .. tostring(routeID) .. ' section=' .. tostring(stage.SectionID) .. + ' stage=' .. tostring(stageID) .. ' level=' .. tostring(stage.CurMonsterLevel) .. + ' battle_aux=' .. tostring(battleAuxA) .. ',' .. tostring(battleAuxB)) + local routeNode = getField(node, '_RouteNode', flags) + local nodeParam = getField(node, '_NodeParam', flags) + local nodeInfo = getField(node, '_NodeInfo', flags) + local displayRow = getField(node, '_DisplayRow', flags) + local routeDisplay = getField(routeNode, 'NMABHKCOLCM', flags) + local routeID = stage.RouteID + row('StageExcelTable', stageID, function() return CS.RPG.GameCore.StageExcelTable.GetData(stageID) end) + row('GridFightStageRouteConfigExcelTable', routeID, function() return CS.RPG.GameCore.GridFightStageRouteConfigExcelTable.GetData(routeID) end) + row('GridFightEnemyDifficultyLvConfigExcelTable(candidate_aux_b)', battleAuxB, function() return CS.RPG.GameCore.GridFightEnemyDifficultyLvConfigExcelTable.GetData(battleAuxB) end) + for label, obj in pairs({nodeParam = nodeParam, nodeInfo = nodeInfo, displayRow = displayRow, routeNode = routeNode, routeDisplay = routeDisplay}) do + if obj then + local encodedOK, encoded = pcall(function() return CS.Newtonsoft.Json.JsonConvert.SerializeObject(obj) end) + if encodedOK and #tostring(encoded) <= 12000 then add('OBJECT ' .. label .. ' ' .. tostring(encoded)) + else add('OBJECT ' .. label .. ' TYPE=' .. tostring(obj:GetType().FullName) .. ' serialize=' .. tostring(encoded)) end + else + add('OBJECT ' .. label .. ' nil') + end + end + end) + if not ok then add('ERROR ' .. tostring(err)) end + CS.UnityEngine.Debug.Log('[GAC_CW_ACTIVE_TABLE_ROWS]\n' .. table.concat(lines, '\n')) + state.done = true + end +end diff --git a/tools/cw_active_wave_table_methods.lua b/tools/cw_active_wave_table_methods.lua new file mode 100644 index 0000000..a32da6a --- /dev/null +++ b/tools/cw_active_wave_table_methods.lua @@ -0,0 +1,26 @@ +-- Inspect only the named CW wave/elite configuration tables and their lookup methods. +do + local state=_G.__gacCwActiveWaveTableMethods1 or {done=false};_G.__gacCwActiveWaveTableMethods1=state + if not state.done then + local lines={} + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local assembly=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly + local names={'StageConfigExcelTable','GridFightFormationWaveExcelTable','GridFightFormationWaveConfigExcelTable','GridFightEliteGroupExcelTable','GridFightEliteGroupConfigExcelTable'} + for _,name in ipairs(names)do + local t=assembly:GetType('RPG.GameCore.'..name) + lines[#lines+1]='TYPE '..name..' '..tostring(t) + if t then + local methods=t:GetMethods(flags) + for i=0,math.min(methods.Length-1,95)do + local m=methods[i] + if m.DeclaringType==t and (m.Name=='GetData'or m.Name=='GetAllData'or m.Name=='GetDataRow'or m.Name=='GetAllRows')then lines[#lines+1]='METHOD '..name..' '..tostring(m)end + end + end + end + end) + if not ok then lines[#lines+1]='ERROR '..tostring(err)end + CS.UnityEngine.Debug.Log('[GAC_CW_WAVE_SCHEMA]\n'..table.concat(lines,'\n')) + state.done=true + end +end diff --git a/tools/cw_battle_avatar_schema.lua b/tools/cw_battle_avatar_schema.lua new file mode 100644 index 0000000..dd7be15 --- /dev/null +++ b/tools/cw_battle_avatar_schema.lua @@ -0,0 +1,21 @@ +-- Named battle data only; metadata reads pause during Battle. +do + local s=_G.__gacCwBattleAvatarSchema1 or {index=1,offset=0};_G.__gacCwBattleAvatarSchema1=s + if s.done then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_BATTLE_AVATAR] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local names={'RPG.GameCore.BattleGridFightAvatarData','RPG.GameCore.GridFightManager'} + local name=names[s.index];if not name then s.done=true;log('END');return end + local a=typeof(CS.RPG.Client.GridFightModule).Assembly;local b=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly + local t=a:GetType(name) or b:GetType(name);if not t then log('MISSING '..name);s.index=s.index+1;return end + if s.offset==0 then local fs=t:GetFields(flags);log('TYPE '..name);for i=0,math.min(fs.Length-1,95)do log('FIELD '..tostring(fs[i]))end end + local ms=t:GetMethods(flags) + for i=s.offset,math.min(s.offset+23,ms.Length-1)do local m=ms[i];if m.DeclaringType==t and (s.index==1 or m.Name:lower():find('spot') or tostring(m):find('BJGJBNJDLIK'))then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + s.offset=s.offset+24;if s.offset>=ms.Length then s.offset=0;s.index=s.index+1 end + end) + if not ok then s.done=true;log('ERROR '..tostring(err))end +end diff --git a/tools/cw_battle_spotlight_wire.lua b/tools/cw_battle_spotlight_wire.lua new file mode 100644 index 0000000..0055681 --- /dev/null +++ b/tools/cw_battle_spotlight_wire.lua @@ -0,0 +1,23 @@ +-- Isolated protobuf setters/getters only; nothing sent to gameplay modules. +do local function capture() + if _G.__gacCwBattleSpotWire1 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local mgr=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=mgr and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(mgr) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + _G.__gacCwBattleSpotWire1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_BATTLE_SPOT_WIRE] '..tostring(x))end + local ok,err=pcall(function() + local t=typeof(CS.ABJGLPCOMMK);local methods=t:GetMethods(flags) + for i=0,math.min(methods.Length-1,31)do + local m=methods[i];local ps=m:GetParameters() + if m.DeclaringType==t and ps.Length==1 and ps[0].ParameterType==typeof(CS.System.UInt32)then + local obj=CS.System.Activator.CreateInstance(t);obj[m.Name](obj,1) + log('SET '..m.Name..' '..CS.System.BitConverter.ToString(CS.Google.Protobuf.MessageExtensions.ToByteArray(obj))) + for j=0,math.min(methods.Length-1,31)do local g=methods[j];if g.DeclaringType==t and g:GetParameters().Length==0 and g.ReturnType==typeof(CS.System.UInt32) and obj[g.Name](obj)==1 then log('GET '..g.Name..' '..tostring(g.MethodHandle.Value))end end + end + end + end) + if not ok then log('ERROR '..tostring(err))end + log('END') +end;capture()end diff --git a/tools/cw_bonfire_context.lua b/tools/cw_bonfire_context.lua new file mode 100644 index 0000000..7e92125 --- /dev/null +++ b/tools/cw_bonfire_context.lua @@ -0,0 +1,16 @@ +-- Inspect only three CW runtime types and current saved game-event object. +do local function capture() + local s=_G.__gacCwBonfireContext1 or {index=1};_G.__gacCwBonfireContext1=s + if s.done then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_BONFIRE_CONTEXT] '..tostring(x))end + local names={'RPG.Client.GridFightGameEventData','RPG.Client.GridFightPendingActionManager','RPG.Client.GridFightPendingSelection'} + local t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType(names[s.index]) + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + if t then + log('TYPE '..t.FullName) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,63)do log('FIELD '..tostring(fs[i]))end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,127)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + if s.index==1 then local session=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession;if session then local f=session:GetType():GetField('_GameEventData',flags);local obj=f and f:GetValue(session);if obj then log('OBJECT '..CS.Newtonsoft.Json.JsonConvert.SerializeObject(obj))end end end + else log('MISSING '..names[s.index])end + s.index=s.index+1;if s.index>#names then s.done=true;log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwBonfireContext1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_BONFIRE_CONTEXT] ERROR '..tostring(e))end end diff --git a/tools/cw_bonfire_dialog_contract.lua b/tools/cw_bonfire_dialog_contract.lua new file mode 100644 index 0000000..8e766b2 --- /dev/null +++ b/tools/cw_bonfire_dialog_contract.lua @@ -0,0 +1,25 @@ +do local function capture() + local s=_G.__gacBonfireDialogContract1 or {i=1};_G.__gacBonfireDialogContract1=s + local targets={ + {'Ui.GridFight.Preparation.Bonfire.GridFightBonfireDialog','_on_load'}, + {'Ui.GridFight.Preparation.Bonfire.GridFightBonfireDialog','_on_enter_ending_phase'}, + {'Ui.GridFight.Preparation.Bonfire.GridFightBonfireEventPanel','_on_load'}, + {'Ui.GridFight.Preparation.Bonfire.GridFightBonfireFinalRewardPanel','_on_btn_take_reward_click'}, + } + local target=targets[s.i];if not target then return end + s.i=s.i+1 + local module=package.loaded[target[1]];local fn=module and module[target[2]] + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_BONFIRE_DIALOG] '..tostring(v))end + if type(fn)~='function' then log('MISSING '..target[1]..' '..target[2]);return end + local raw=string.dump(fn);if #raw>32768 then error('function bound')end + local bytes=CS.System.Array.CreateInstance(typeof(CS.System.Byte),#raw) + for i=1,#raw do bytes[i-1]=raw:byte(i)end + log('BYTECODE '..s.i..' '..CS.System.Convert.ToBase64String(bytes)) + for i=1,16 do + local key,value=debug.getupvalue(fn,i);if not key then break end + log('UPVALUE '..target[2]..' '..key..' '..type(value)) + if type(value)=='table' then + local n=0;for k,v in pairs(value)do n=n+1;if n>80 then break end;if type(v)=='number'then log('CONSTANT '..key..' '..tostring(k)..' '..tostring(v))end end + end + end +end local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_BONFIRE_DIALOG] ERROR '..tostring(e))end end diff --git a/tools/cw_bonfire_live_pending.lua b/tools/cw_bonfire_live_pending.lua new file mode 100644 index 0000000..3ea9f5d --- /dev/null +++ b/tools/cw_bonfire_live_pending.lua @@ -0,0 +1,40 @@ +-- Read only the active dialog's pending instance, not all runtime types. +do local function capture() + if _G.__gacBonfireLivePending1 then return end + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightBonfireDialog') + local lua=page and page.LuaTable;local action=lua and lua._pending_action + if not action then + local session=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession + local manager=session and session.PrepPendingAction + if manager then + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local f=manager:GetType():GetField('_ActionQueue',flags);local queue=f and f:GetValue(manager) + if queue and queue.Count<=16 then + for i=0,queue.Count-1 do local v=queue[i];if v and v:GetType().Name:find('Bonfire',1,true)then action=v;break end end + end + end + if manager and not _G.__gacBonfireManagerMetadata1 then + _G.__gacBonfireManagerMetadata1=true + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local fs=manager:GetType():GetFields(flags) + for i=0,math.min(fs.Length-1,31)do local f=fs[i];local v=f:GetValue(manager);CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PENDING] MANAGER '..f.Name..' '..f.FieldType.FullName..' '..tostring(v))end + end + if not action then return end + end + _G.__gacBonfireLivePending1=true + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PENDING] '..tostring(v))end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local t=action:GetType();log('TYPE '..t.FullName);log('HAS_SELECTED '..tostring(action.HasSelected)) + for _,name in ipairs({'get_HasSelected','Sync','TakeReward','SelectOption','HealHp'})do + local ms=t:GetMethods(flags) + for i=0,math.min(ms.Length-1,127)do local m=ms[i];if m.Name==name then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end + local fs=t:GetFields(flags) + for i=0,math.min(fs.Length-1,31)do + local f=fs[i];local v=f:GetValue(action);log('FIELD '..f.Name..' '..f.FieldType.FullName..' '..tostring(v)) + if f.FieldType.IsEnum then + local names=CS.System.Enum.GetNames(f.FieldType);local values=CS.System.Enum.GetValues(f.FieldType) + for j=0,math.min(names.Length-1,15)do log('ENUM '..names[j]..' '..CS.System.Convert.ToInt32(values:GetValue(j)))end + end + end +end local ok,e=pcall(capture);if not ok then _G.__gacBonfireLivePending1=true;CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PENDING] ERROR '..tostring(e))end end diff --git a/tools/cw_bonfire_phase_contract.lua b/tools/cw_bonfire_phase_contract.lua new file mode 100644 index 0000000..e1884c4 --- /dev/null +++ b/tools/cw_bonfire_phase_contract.lua @@ -0,0 +1,32 @@ +-- Read only: bounded loaded-Lua inventory and exact bonfire enum metadata. +do local function capture() + if _G.__gacBonfirePhaseContract1 then return end + _G.__gacBonfirePhaseContract1=true + local log=function(v) CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PHASE] '..tostring(v)) end + local n=0 + for k,v in pairs(package.loaded) do + n=n+1;if n>8192 then break end + if type(k)=='string' and (k:find('Bonfire',1,true) or k:find('TeaBreak',1,true)) then + log('MODULE '..k..' '..type(v)) + if type(v)=='table' then + local count=0 + for name,fn in pairs(v) do + count=count+1;if count>128 then break end + if type(fn)=='function' then + log('METHOD '..k..' '..tostring(name)) + if tostring(name):lower():find('phase',1,true) or tostring(name):lower():find('refresh',1,true) then + for i=1,16 do + local key,value=debug.getupvalue(fn,i);if not key then break end + log('UPVALUE '..tostring(name)..' '..key..' '..type(value)) + if type(value)=='table' and key:lower():find('phase',1,true) then + for ek,ev in pairs(value) do if type(ev)=='number' or type(ev)=='string' then log('ENUM '..tostring(ek)..' '..tostring(ev))end end + end + end + end + end + end + end + end + end + log('END') +end local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PHASE] ERROR '..tostring(e))end end diff --git a/tools/cw_bonfire_schema.lua b/tools/cw_bonfire_schema.lua new file mode 100644 index 0000000..6c61163 --- /dev/null +++ b/tools/cw_bonfire_schema.lua @@ -0,0 +1,19 @@ +-- Metadata only: inspect the named CW module in batches; no gameplay calls. +do local function capture() + local s=_G.__gacCwBonfireSchema1 or {index=0};_G.__gacCwBonfireSchema1=s + if s.done then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_BONFIRE_SCHEMA] '..tostring(x))end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local t=typeof(CS.RPG.Client.GridFightModule) + if s.index==0 then + local session=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession + if session then local fs=session:GetType():GetFields(flags);for i=0,math.min(fs.Length-1,63)do log('SESSION_FIELD '..tostring(fs[i]))end end + end + local ms=t:GetMethods(flags) + for i=s.index,math.min(s.index+31,ms.Length-1,2047)do + local m=ms[i];local name=m.Name:lower() + if m.DeclaringType==t and (name:find('bonfire')or name:find('healhp')or name:find('teabreak'))then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end + s.index=s.index+32 + if s.index>=ms.Length or s.index>=2048 then s.done=true;log('END inspected='..math.min(ms.Length,2048)..' total='..ms.Length)end +end;local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_CW_BONFIRE_SCHEMA] ERROR '..tostring(e))end end diff --git a/tools/cw_bonfire_sync_metadata.lua b/tools/cw_bonfire_sync_metadata.lua new file mode 100644 index 0000000..00672fa --- /dev/null +++ b/tools/cw_bonfire_sync_metadata.lua @@ -0,0 +1,12 @@ +do local function capture() + local s=_G.__gacBonfireSyncMetadata1 or {i=0};_G.__gacBonfireSyncMetadata1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local t=typeof(CS.RPG.Client.GridFightBonfirePendingAction) + local ms=t:GetMethods(flags) + for i=s.i,math.min(s.i+7,ms.Length-1,127)do + local m=ms[i] + if m.DeclaringType==t then CS.UnityEngine.Debug.Log('[GAC_BONFIRE_SYNC] '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end + s.i=s.i+8;if s.i>=ms.Length or s.i>=128 then s.done=true end +end local ok,e=pcall(capture);if not ok then _G.__gacBonfireSyncMetadata1={done=true};CS.UnityEngine.Debug.Log('[GAC_BONFIRE_SYNC] ERROR '..tostring(e))end end diff --git a/tools/cw_book_activity_metadata.lua b/tools/cw_book_activity_metadata.lua new file mode 100644 index 0000000..3a3f952 --- /dev/null +++ b/tools/cw_book_activity_metadata.lua @@ -0,0 +1,30 @@ +-- Narrow metadata/read-only scalar state from the already resolved CW panel. +-- At most eight members per heartbeat; no assembly scan or gameplay calls. +do local function capture() + local s=_G.__gacCwBookActivityMetadata1 or {index=0,target=1};_G.__gacCwBookActivityMetadata1=s + if s.done then return end + local function log(v)CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_ACTIVITY] '..tostring(v))end + local ok,err=pcall(function() + if not s.objects then + local class=package.loaded['Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem'] + local constants + for i=1,16 do local n,v=debug.getupvalue(class._on_click_go,i);if not n then break end;if n=='_GRID_FIGHT_CONSTANTS'then constants=v;break end end + local panel=CS.RPG.Client.GlobalVars.s_ModuleManager.ActivityModule:GetPanelData(constants.ActivityID) + if not panel or not panel.StateData then error('Resolved CW panel/state unavailable')end + s.objects={panel.StateData,panel};s.flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + end + local value=s.objects[s.target] + if not s.members then + local t=value:GetType();s.members=t:GetFields(s.flags) + log('TYPE '..t.FullName..' FIELDS '..s.members.Length) + end + for i=s.index,math.min(s.index+7,s.members.Length-1)do + local m=s.members[i];local v=m:GetValue(value) + local text=v==nil and 'nil' or (m.FieldType.IsPrimitive or m.FieldType.IsEnum or m.FieldType.FullName=='System.String') and tostring(v) or tostring(m.FieldType.FullName) + log('FIELD '..m.Name..' TYPE '..m.FieldType.FullName..' VALUE '..text) + end + s.index=s.index+8 + if s.index>=s.members.Length or s.index>=64 then s.members=nil;s.index=0;s.target=s.target+1;if s.target>#s.objects then s.done=true;log('END')end end + end) + if not ok then s.done=true;log('ERROR '..tostring(err))end +end;capture()end diff --git a/tools/cw_book_baked_request.lua b/tools/cw_book_baked_request.lua new file mode 100644 index 0000000..013c0dd --- /dev/null +++ b/tools/cw_book_baked_request.lua @@ -0,0 +1,9 @@ +do + local s=_G.__gacCwBookBaked1 or {index=1};_G.__gacCwBookBaked1=s + local names={'Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem','Ui.DailyMission.Rogue.HandbookRogueGotoBtnBehaviour'} + if s.index<=#names then + local name=names[s.index];s.index=s.index+1 + local ok,v=pcall(package.loaders[3],name) + CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_BAKED] '..name..' loaded='..tostring(ok)..' closure='..type(v)) + end +end diff --git a/tools/cw_book_condition_row.lua b/tools/cw_book_condition_row.lua new file mode 100644 index 0000000..b7eb9b2 --- /dev/null +++ b/tools/cw_book_condition_row.lua @@ -0,0 +1,22 @@ +-- Serialize only the live CW ActivityPanelConditionRow; no condition mutation. +do + if not _G.__gacCwBookConditionRowCapture2 then + _G.__gacCwBookConditionRowCapture2=true + local function log(v)CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_CONDITION] '..tostring(v))end + log('BEGIN') + local ok,err=pcall(function() + local class=package.loaded['Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem'] + local constants + for i=1,16 do local n,v=debug.getupvalue(class._on_click_go,i);if not n then break end;if n=='_GRID_FIGHT_CONSTANTS'then constants=v;break end end + local panel=CS.RPG.Client.GlobalVars.s_ModuleManager.ActivityModule:GetPanelData(constants.ActivityID) + local state=panel.StateData + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local f=state:GetType():GetField('k__BackingField',flags) + local row=f:GetValue(state) + local value=CS.Newtonsoft.Json.JsonConvert.SerializeObject(row) + if #value>16384 then error('Condition row exceeds bound')end + log('ROW '..value) + end) + if not ok then log('ERROR '..tostring(err))end + end +end diff --git a/tools/cw_book_entry_capture.lua b/tools/cw_book_entry_capture.lua new file mode 100644 index 0000000..ae422fa --- /dev/null +++ b/tools/cw_book_entry_capture.lua @@ -0,0 +1,39 @@ +-- Read only already loaded, exact Handbook/CW Go callbacks. One function per +-- heartbeat, bounded 32 KiB bytecode; never calls a callback or sends a packet. +do local function capture() + local s=_G.__gacCwBookEntryCapture2 or {index=1};_G.__gacCwBookEntryCapture2=s + local targets={ + {'Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem','_on_click_go'}, + {'Ui.DailyMission.Rogue.HandbookRogueGotoBtnBehaviour','on_btn_go'}, + {'Logic.Goto.GotoCommand.GotoGridFightEntrancePageCommand','execute'}, + {'Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem','_setup_view'}, + } + if s.index>#targets then return end + local target=targets[s.index];s.index=s.index+1 + local function log(v)CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_ENTRY] '..tostring(v))end + local phase='module' + local ok,err=pcall(function() + local class=package.loaded[target[1]] + if type(class)~='table'then log('MISSING_MODULE '..target[1]);return end + phase='function';local fn=class[target[2]] + if type(fn)~='function'then + log('MISSING_FUNCTION '..target[1]..'.'..target[2]) + local count=0;for k,v in pairs(class)do if type(v)=='function'then log('METHOD '..tostring(k));count=count+1;if count>=32 then break end end end + return + end + phase='upvalues' + if type(debug.getupvalue)=='function'then + for i=1,16 do local name,value=debug.getupvalue(fn,i);if not name then break end + log('UPVALUE '..target[2]..' '..name..' '..type(value)..' '..tostring(value)) + end + end + phase='dump';log('DUMP_CAPABILITY '..type(string.dump)..' '..type(debug.getupvalue)) + if type(string.dump)~='function'then return end + local raw=string.dump(fn) + if #raw>32768 then error('Named callback exceeds bytecode bound')end + local bytes=CS.System.Array.CreateInstance(typeof(CS.System.Byte),#raw) + for i=1,#raw do bytes[i-1]=raw:byte(i)end + log('BYTECODE '..target[1]..'.'..target[2]..' '..CS.System.Convert.ToBase64String(bytes)) + end) + if not ok then log('ERROR '..phase..' '..tostring(err))end +end;capture()end diff --git a/tools/cw_book_panel_after_guide.lua b/tools/cw_book_panel_after_guide.lua new file mode 100644 index 0000000..915ed3f --- /dev/null +++ b/tools/cw_book_panel_after_guide.lua @@ -0,0 +1,31 @@ +-- Read exact constants upvalue and its current ActivityPanelData only. +do + if not _G.__gacCwBookPanelStateAfterGuide1 and type(package.loaded['Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem'])=='table' then + _G.__gacCwBookPanelStateAfterGuide1=true + local function log(v)CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_AFTER_GUIDE] '..tostring(v))end + local ok,err=pcall(function() + local class=package.loaded['Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem'] + local fn=class and class._on_click_go + if type(fn)~='function'then error('Book Go callback not loaded')end + local constants + for i=1,16 do local name,value=debug.getupvalue(fn,i);if not name then break end + if name=='_GRID_FIGHT_CONSTANTS'then constants=value;break end + end + if not constants then error('Book Go constants upvalue absent')end + for _,key in ipairs({'ActivityID','GridFightContentID'})do log('CONSTANT '..key..' '..tostring(constants[key]))end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.ActivityModule + local id=constants.ActivityID + local panel=module:GetPanelData(id) + log('PANEL id='..tostring(id)..' present='..tostring(panel~=nil)..' type='..tostring(panel and panel:GetType().FullName)) + if panel then + for _,key in ipairs({'ContentID','IsSkipSwitchStoryLine','IsOpen','PanelID'})do + local good,value=pcall(function()return panel[key]end);log('PANEL_VALUE '..key..' '..tostring(good)..' '..tostring(value)) + end + local state=panel.StateData + log('STATE present='..tostring(state~=nil)..' CurState='..tostring(state and state.CurState)) + end + end) + if not ok then log('ERROR '..tostring(err))end + end +end + diff --git a/tools/cw_book_panel_state.lua b/tools/cw_book_panel_state.lua new file mode 100644 index 0000000..b7b6bed --- /dev/null +++ b/tools/cw_book_panel_state.lua @@ -0,0 +1,30 @@ +-- Read exact constants upvalue and its current ActivityPanelData only. +do + if not _G.__gacCwBookPanelState1 then + _G.__gacCwBookPanelState1=true + local function log(v)CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_PANEL] '..tostring(v))end + local ok,err=pcall(function() + local class=package.loaded['Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem'] + local fn=class and class._on_click_go + if type(fn)~='function'then error('Book Go callback not loaded')end + local constants + for i=1,16 do local name,value=debug.getupvalue(fn,i);if not name then break end + if name=='_GRID_FIGHT_CONSTANTS'then constants=value;break end + end + if not constants then error('Book Go constants upvalue absent')end + for _,key in ipairs({'ActivityID','GridFightContentID'})do log('CONSTANT '..key..' '..tostring(constants[key]))end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.ActivityModule + local id=constants.ActivityID + local panel=module:GetPanelData(id) + log('PANEL id='..tostring(id)..' present='..tostring(panel~=nil)..' type='..tostring(panel and panel:GetType().FullName)) + if panel then + for _,key in ipairs({'ContentID','IsSkipSwitchStoryLine','IsOpen','PanelID'})do + local good,value=pcall(function()return panel[key]end);log('PANEL_VALUE '..key..' '..tostring(good)..' '..tostring(value)) + end + local state=panel.StateData + log('STATE present='..tostring(state~=nil)..' CurState='..tostring(state and state.CurState)) + end + end) + if not ok then log('ERROR '..tostring(err))end + end +end diff --git a/tools/cw_common_baked_request.lua b/tools/cw_common_baked_request.lua new file mode 100644 index 0000000..e5383a8 --- /dev/null +++ b/tools/cw_common_baked_request.lua @@ -0,0 +1,7 @@ +do + if not _G.__gacCwCommonBaked1 then + _G.__gacCwCommonBaked1=true + local ok,v=pcall(package.loaders[3],'Ui.Activity.CommonComponents.CommonActivityGotoBtnBehaviour') + CS.UnityEngine.Debug.Log('[GAC_CW_COMMON_BAKED] loaded='..tostring(ok)..' closure='..type(v)) + end +end diff --git a/tools/cw_config_cache_export.lua b/tools/cw_config_cache_export.lua new file mode 100644 index 0000000..53f1a5c --- /dev/null +++ b/tools/cw_config_cache_export.lua @@ -0,0 +1,25 @@ +-- Cached config wrappers only, eight entries per heartbeat, paused in Battle. +do local function capture() + local s=_G.__gacCwConfigCache1 or {table=1};_G.__gacCwConfigCache1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local phase=CS.RPG.Client.GlobalVars.s_GamePhaseManager + phase=phase and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(phase) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local names={'GridFightForgeConfigs','EquipItemConfigs','ConsumableItemConfigs','NPCConfigs'} + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_CONFIG_CACHE] '..tostring(x))end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule + if not s.iterator then + local dict=module[names[s.table]] + if not dict then log('MISSING '..names[s.table]);s.table=s.table+1;return end + if dict.Count>4096 then error('cache bound exceeded')end + s.iterator=dict:GetEnumerator();log('TABLE '..names[s.table]..' count='..dict.Count) + end + for _=1,8 do + if not s.iterator:MoveNext()then s.iterator:Dispose();s.iterator=nil;s.table=s.table+1;if s.table>#names then s.done=true;log('END')end;return end + local entry=s.iterator.Current;local obj=entry.Value;local field=obj:GetType():GetField('_Row',flags) + local row=field and field:GetValue(obj) + if row then local encoded=CS.Newtonsoft.Json.JsonConvert.SerializeObject(row);if #encoded>32768 then error('row bound exceeded')end;log('ROW '..names[s.table]..' '..tostring(entry.Key)..' '..encoded)end + end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwConfigCache1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_CONFIG_CACHE] ERROR '..tostring(e))end end + diff --git a/tools/cw_current_defaults.lua b/tools/cw_current_defaults.lua new file mode 100644 index 0000000..25a92f7 --- /dev/null +++ b/tools/cw_current_defaults.lua @@ -0,0 +1,23 @@ +-- Read initialized handbook defaults, four families per heartbeat, never Battle. +do local function capture() + local s=_G.__gacCwCurrentDefaults2 or {index=0};_G.__gacCwCurrentDefaults2=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_CURRENT_DEFAULTS] '..tostring(x))end + if not s.rows then + s.rows=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule:GetHandBookAllRoleConfig() + if s.rows.Count>512 then error('handbook bound')end + log('BEGIN '..s.rows.Count) + end + for n=1,4 do + if s.index>=s.rows.Count then s.done=true;log('END');return end + local family=s.rows[s.index];s.index=s.index+1 + local role=family.DefaultRole + local config=role.RoleConfig + log('ROW {"AvatarID":'..config.AvatarID..',"RoleID":'..role.ID..',"Price":'..config.Price..',"Rarity":'..config.Rarity..'}') + end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwCurrentDefaults2={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_CURRENT_DEFAULTS] ERROR '..tostring(e))end end + diff --git a/tools/cw_current_penalty_capture.lua b/tools/cw_current_penalty_capture.lua new file mode 100644 index 0000000..4e4170e --- /dev/null +++ b/tools/cw_current_penalty_capture.lua @@ -0,0 +1,20 @@ +-- Bounded read of the active node's already available penalty row. +do local function capture() + if _G.__gacCwCurrentPenalty1 then return end + local session=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession + if not session then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local fs=session:GetType():GetFields(flags) + for i=0,math.min(fs.Length-1,63)do + if fs[i].FieldType.FullName=='RPG.Client.GridFightStage'then + local stage=fs[i]:GetValue(session) + local node=stage and stage.CurNode + if not node then return end + local property=node:GetType():GetProperty('_PenaltyRuleConfigRow',flags) + if not property then return end + local row=property:GetValue(node,nil) + if row then CS.UnityEngine.Debug.Log('[GAC_CW_CURRENT_PENALTY] '..CS.Newtonsoft.Json.JsonConvert.SerializeObject(row));_G.__gacCwCurrentPenalty1=true end + return + end + end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwCurrentPenalty1=true;CS.UnityEngine.Debug.Log('[GAC_CW_CURRENT_PENALTY] ERROR '..tostring(e))end end diff --git a/tools/cw_current_replacement.lua b/tools/cw_current_replacement.lua new file mode 100644 index 0000000..d1df7ee --- /dev/null +++ b/tools/cw_current_replacement.lua @@ -0,0 +1,27 @@ +-- Research target derived from the missing saved-role comparison, not a game rule. +-- Reads the Client-selected handbook default and its existing star configurations. +do local function capture() + local s=_G.__gacCwReplacement1 or {index=0};_G.__gacCwReplacement1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_REPLACEMENT] '..tostring(x))end + if not s.rows then s.rows=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule:GetHandBookAllRoleConfig();if s.rows.Count>512 then error('bound')end end + if s.role then + local role=s.role;local c=role.RoleConfig + local star=c:GetStarConfig(s.star) + local row=c:GetType():GetField('_Row',flags):GetValue(c) + local starRow=star:GetType():GetField('_Row',flags):GetValue(star) + local servant=star:GetType():GetField('_ServantStarRow',flags):GetValue(star) + local json=CS.Newtonsoft.Json.JsonConvert.SerializeObject + log('ROW {"Config":'..json(row)..',"Price":'..c.Price..',"MaxStar":'..c.MaxStar..',"Star":'..s.star..',"SaleQuoteKnown":false,"StarConfig":'..json(starRow)..',"ServantStarConfig":'..json(servant)..'}') + s.star=s.star+1;if s.star>c.MaxStar then s.done=true;log('END')end;return + end + for n=1,4 do + if s.index>=s.rows.Count then s.done=true;log('ERROR default not found');return end + local role=s.rows[s.index].DefaultRole;s.index=s.index+1 + if role.RoleConfig.AvatarID==1511 then s.role=role;s.star=1;log('DEFAULT '..role.ID);return end + end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwReplacement1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_REPLACEMENT] ERROR '..tostring(e))end end diff --git a/tools/cw_current_response_consumers.lua b/tools/cw_current_response_consumers.lua new file mode 100644 index 0000000..5f4953f --- /dev/null +++ b/tools/cw_current_response_consumers.lua @@ -0,0 +1,33 @@ +-- Metadata only on two established types. Parameter names are current protocol +-- candidates: finding a consumer does not by itself establish request pairing. +-- Keep outside scripts/. No assembly scan, packet sends, hooks or state writes. +do local function capture() + local s=_G.__gacCwResponseConsumers1 or {target=1,index=0,beats=0};_G.__gacCwResponseConsumers1=s + if s.done then return end + s.beats=s.beats+1;if s.beats>100 then s.done=true;return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local f=manager and manager:GetType():GetField('_CurrentPhase',flags) + local phase=f and f:GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_CW_RESPONSE_CONSUMER] '..tostring(v))end + if not s.methods then + if s.target==1 then s.t=typeof(CS.RPG.Client.GridFightModule) + elseif s.target==2 then s.t=typeof(CS.RPG.Client.NetworkManager) + else s.done=true;log('END');return end + s.methods=s.t:GetMethods(flags);s.index=0 + log('TYPE '..s.t.FullName..' count='..s.methods.Length) + end + local start=CS.UnityEngine.Time.realtimeSinceStartup + for n=1,32 do + if s.index>=s.methods.Length then s.methods=nil;s.t=nil;s.target=s.target+1;return end + local m=s.methods[s.index];s.index=s.index+1 + if m.DeclaringType==s.t then + local signature=tostring(m) + if signature:find('PNHDGCBLPGD',1,true)or signature:find('GDHFMHKFEAL',1,true)or signature:find('GridFightEnterBonfireScRsp',1,true)then + log('METHOD '..signature..' HANDLE '..tostring(m.MethodHandle.Value)) + end + end + if CS.UnityEngine.Time.realtimeSinceStartup-start>0.002 then return end + end +end local ok,e=pcall(capture);if not ok then _G.__gacCwResponseConsumers1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_RESPONSE_CONSUMER] ERROR '..tostring(e))end end diff --git a/tools/cw_equipment_parameters.lua b/tools/cw_equipment_parameters.lua new file mode 100644 index 0000000..905f422 --- /dev/null +++ b/tools/cw_equipment_parameters.lua @@ -0,0 +1,12 @@ +-- Parameter metadata only for the exact equipment request helpers. +do local function capture() + if _G.__gacCwEquipmentParams1 then return end;_G.__gacCwEquipmentParams1=true + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local t=typeof(CS.RPG.Client.GridFightEquipInfo) + local ms=t:GetMethods(flags) + for i=0,math.min(ms.Length-1,127)do local m=ms[i] + if m.Name=='TryCraftEquip'or m.Name=='TryDressEquipToRole'then + local ps=m:GetParameters();for j=0,ps.Length-1 do CS.UnityEngine.Debug.Log('[GAC_CW_EQUIPMENT_PARAMS] '..m.Name..' '..j..' '..ps[j].Name..' '..tostring(ps[j].ParameterType))end + end + end +end;local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_CW_EQUIPMENT_PARAMS] ERROR '..tostring(e))end end diff --git a/tools/cw_formation_capture_trigger.lua b/tools/cw_formation_capture_trigger.lua new file mode 100644 index 0000000..84b84c9 --- /dev/null +++ b/tools/cw_formation_capture_trigger.lua @@ -0,0 +1,7 @@ +-- Calls only an already initialized handbook getter, for at most 12 heartbeats. +do local function capture() + local n=_G.__gacCwFormationTrigger1 or 0;if n>=12 then return end + _G.__gacCwFormationTrigger1=n+1 + CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule:GetHandBookAllRoleConfig() +end;capture()end + diff --git a/tools/cw_inventory_consumers.lua b/tools/cw_inventory_consumers.lua new file mode 100644 index 0000000..082ea4b --- /dev/null +++ b/tools/cw_inventory_consumers.lua @@ -0,0 +1,17 @@ +-- Exact inventory consumers, one type per heartbeat; metadata only. +do local function capture() + local s=_G.__gacCwInventoryConsumers2 or {index=1};_G.__gacCwInventoryConsumers2=s + local names={'GridFightOrbServerData','GridFightConsumableInfo','GridFightForgeItemData'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local name=names[s.index];s.index=s.index+1 + local t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType('RPG.Client.'..name) + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_INVENTORY_CONSUMERS] '..tostring(x))end + if not t then log('MISSING '..name);return end;log('TYPE '..t.FullName) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,95)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,159)do local m=ms[i];if m.DeclaringType==t and (m.Name:find('Sync')or m.Name:find('UpdateInfo'))then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwInventoryConsumers2={index=99};CS.UnityEngine.Debug.Log('[GAC_CW_INVENTORY_CONSUMERS] ERROR '..tostring(e))end end diff --git a/tools/cw_inventory_wire_handles.lua b/tools/cw_inventory_wire_handles.lua new file mode 100644 index 0000000..6b38bc7 --- /dev/null +++ b/tools/cw_inventory_wire_handles.lua @@ -0,0 +1,18 @@ +-- Bounded method metadata for one explicitly named inventory type per beat. +do local function capture() + local s=_G.__gacCwInventoryWire3 or {index=1,offset=0};_G.__gacCwInventoryWire3=s + local names={'RPG.Client.GridFightTeam','MMEDLCAENAL','IBPDPCOGDEP','RPG.GameCore.GridFightForgeFuncType','RPG.GameCore.GridFightEquipCategory'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local name=names[s.index] + local t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType(name)or typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly:GetType(name) + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_INVENTORY_WIRE] '..tostring(x))end + if not t then log('MISSING '..name);s.index=s.index+1;return end + if s.offset==0 then log('TYPE '..name);if t.IsEnum then local ns=CS.System.Enum.GetNames(t);local vs=CS.System.Enum.GetValues(t);for i=0,math.min(ns.Length-1,47)do log('ENUM '..name..' '..ns[i]..' '..CS.System.Convert.ToInt32(vs:GetValue(i)))end;s.index=s.index+1;return end end + local ms=t:GetMethods(flags) + for i=s.offset,math.min(s.offset+31,ms.Length-1)do local m=ms[i];if m.DeclaringType==t and (m.Name:find('Forge')or m.Name:find('get_'))then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + s.offset=s.offset+32;if s.offset>=ms.Length then s.offset=0;s.index=s.index+1;if s.index>#names then log('END')end end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwInventoryWire3={index=99};CS.UnityEngine.Debug.Log('[GAC_CW_INVENTORY_WIRE] ERROR '..tostring(e))end end diff --git a/tools/cw_isolated_craft_wire.js b/tools/cw_isolated_craft_wire.js new file mode 100644 index 0000000..5ae00f1 --- /dev/null +++ b/tools/cw_isolated_craft_wire.js @@ -0,0 +1,20 @@ +// Research only; assembly SHA256 c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144. +// Reproduce only the protobuf allocation/empty repeated-field initialization +// at e3a53ba..e3a5415. Objects are isolated and never sent or synced to a module. +const m=Process.getModuleByName('GameAssembly.dll'); +const make=new NativeFunction(m.base.add(0x3f629d0),'pointer',['pointer']); +const encode=new NativeFunction(m.base.add(0x1c8ca3a0),'pointer',['pointer','pointer']); +let done=false; +Interceptor.attach(m.base.add(0xdb5f860),{onLeave(){if(done)return;done=true;try{ + const cls=m.base.add(0x988a200).readPointer(),listClass=m.base.add(0x9877108).readPointer(); + if(cls.isNull()||listClass.isNull()||listClass.add(0xb7).readU8()===0)throw Error('Protobuf class prerequisite is not initialized'); + const statics=listClass.add(0x88).readPointer();if(statics.isNull())throw Error('Repeated-field statics are missing'); + const empty=statics.add(8).readPointer();if(empty.isNull())throw Error('Repeated-field empty array is missing'); + const list=make(listClass);list.add(0x10).writePointer(empty); + const obj=make(cls);obj.add(0x10).writePointer(list); + for(const offset of [0x20,0x24,0x28]){ + obj.add(offset).writeU32(1);const bytes=encode(obj,ptr(0));if(bytes.isNull())throw Error('No wire bytes');const n=bytes.add(0x18).readU32();if(n>64)throw Error('Isolated wire bound');const data=Array.from(new Uint8Array(bytes.add(0x20).readByteArray(n)));send({kind:'WIRE',offset,bytes:data});obj.add(offset).writeU32(0); + } + send({kind:'END'}); +}catch(e){send({kind:'ERROR',error:String(e)});}}}); +send({kind:'ATTACHED',scope:'isolated craft protobufs only'}); diff --git a/tools/cw_monster_capture_trigger.lua b/tools/cw_monster_capture_trigger.lua new file mode 100644 index 0000000..37ca650 --- /dev/null +++ b/tools/cw_monster_capture_trigger.lua @@ -0,0 +1,6 @@ +-- Calls only an already initialized handbook getter, for at most 12 heartbeats. +do local function capture() + local n=_G.__gacCwMonsterTrigger1 or 0;if n>=12 then return end + _G.__gacCwMonsterTrigger1=n+1 + CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule:GetHandBookAllRoleConfig() +end;capture()end diff --git a/tools/cw_monster_handles.lua b/tools/cw_monster_handles.lua new file mode 100644 index 0000000..39be0d9 --- /dev/null +++ b/tools/cw_monster_handles.lua @@ -0,0 +1,12 @@ +-- Bounded metadata for two exact native methods; no constructors/actions. +do local function capture() + if _G.__gacCwMonsterHandles1 then return end;_G.__gacCwMonsterHandles1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_MONSTER_HANDLE] '..tostring(x))end + local ok,err=pcall(function() + local t=typeof(CS.RPG.Client.GridFightMonsterData) + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local ms=t:GetMethods(flags) + for i=0,math.min(ms.Length-1,47)do local m=ms[i];if m.DeclaringType==t and m.Name=='Create'then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end) + if not ok then log('ERROR '..tostring(err))end;log('END') +end;capture()end diff --git a/tools/cw_monster_table_schema.lua b/tools/cw_monster_table_schema.lua new file mode 100644 index 0000000..b13a370 --- /dev/null +++ b/tools/cw_monster_table_schema.lua @@ -0,0 +1,18 @@ +-- Four exact type/assembly lookups, one per heartbeat, metadata only. +do local function capture() + local s=_G.__gacCwMonsterTables3 or {index=1,assembly=1};_G.__gacCwMonsterTables3=s + local names={'GridFightMonsterConfigExcelTable','GridFightMonsterExcelTable'} + if s.index>#names then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_MONSTER_TABLE] '..tostring(x))end + local ok,err=pcall(function() + local assemblies={typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly,typeof(CS.RPG.GameCore.GameCoreConfigLoader).Assembly} + local t=assemblies[s.assembly]:GetType('RPG.GameCore.'..names[s.index]);log('TYPE '..names[s.index]..' assembly='..s.assembly..' '..tostring(t)) + if t then + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,47)do if ms[i].DeclaringType==t then log('METHOD '..tostring(ms[i]))end end + end + end) + if not ok then log('ERROR '..tostring(err))end + s.assembly=s.assembly+1;if s.assembly>2 then s.assembly=1;s.index=s.index+1 end + if s.index>#names then log('END')end +end;capture()end diff --git a/tools/cw_native_craft_capture.js b/tools/cw_native_craft_capture.js new file mode 100644 index 0000000..e9b9e74 --- /dev/null +++ b/tools/cw_native_craft_capture.js @@ -0,0 +1,20 @@ +// Research only, verified assembly SHA256: +// c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144. +// CraftConfigRow.FromBinary -> loader 1e0db310 -> table at GetAll 1e0dadf0. +// Getter/entry layout proven by 1e0db000 (24-byte entries, value at +16). +// Runs on the existing managed handbook callback; no gameplay actions/loaders. +const m=Process.getModuleByName('GameAssembly.dll'); +const check=(rva,expected)=>{const a=Array.from(new Uint8Array(m.base.add(rva).readByteArray(expected.length)));if(a.some((x,i)=>x!==expected[i]))throw Error('Code identity differs');}; +check(0x1e0dadf0,[0x48,0x83,0xec,0x28]);check(0x1d3efb60,[0x56,0x57,0x48,0x83,0xec,0x28]); +const all=new NativeFunction(m.base.add(0x1e0dadf0),'pointer',['pointer']); +const serialize=new NativeFunction(m.base.add(0x1d3efb60),'pointer',['pointer','pointer']); +let index=0,count=0,entries=null,done=false; +Interceptor.attach(m.base.add(0xdb5f860),{onLeave(){if(done)return;try{ + if(entries===null){const d=all(ptr(0));if(d.isNull())throw Error('Craft table is missing');count=d.add(0x20).readU32();entries=d.add(0x18).readPointer();if(count>2048||entries.isNull()||entries.add(0x18).readU32()32768)throw Error('Craft row bound');const json=value.add(0x14).readUtf16String(n);const parsed=JSON.parse(json);if(!parsed.CraftID||!parsed.CraftEquipID||!Array.isArray(parsed.CostEquipList))throw Error('Craft schema differs');send({kind:'ROW',json}); + } + if(index>=count){done=true;send({kind:'END',count});} +}catch(e){done=true;send({kind:'ERROR',error:String(e)});}}}); +send({kind:'ATTACHED',scope:'flat craft rows only'}); diff --git a/tools/cw_native_formation_capture.js b/tools/cw_native_formation_capture.js new file mode 100644 index 0000000..0618d2c --- /dev/null +++ b/tools/cw_native_formation_capture.js @@ -0,0 +1,14 @@ +// Research only: current assembly SHA c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144. +// Wave formation consumer f0c9d50 calls this flat row getter at RVA 1e33bb30. +// Only that getter and the verified existing serializer run; no battle is created. +const ids=globalThis.CW_FORMATION_IDS; +if(!Array.isArray(ids)||!ids.length||ids.length>128||ids.some(x=>!Number.isInteger(x)||x<=0))throw Error('Bounded formation ID plan required'); +const m=Process.getModuleByName('GameAssembly.dll'); +const check=(rva,expected)=>{const b=Array.from(new Uint8Array(m.base.add(rva).readByteArray(expected.length)));if(b.some((x,i)=>x!==expected[i]))throw Error('Entry identity differs');}; +check(0x1e33bb30,[0x56,0x48,0x83,0xec,0x60]);check(0x1d3efb60,[0x56,0x57,0x48,0x83,0xec,0x28]); +const read=new NativeFunction(m.base.add(0x1e33bb30),'pointer',['uint32','pointer']); +const serialize=new NativeFunction(m.base.add(0x1d3efb60),'pointer',['pointer','pointer']); +let index=0,done=false; +Interceptor.attach(m.base.add(0xdb5f860),{onLeave(){if(done)return;try{for(let n=0;n<4&&index65536)throw Error('Row bound');send({kind:'ROW',id,json:v.add(0x14).readUtf16String(length)});}if(index===ids.length){done=true;send({kind:'END',count:index});}}catch(e){done=true;send({kind:'ERROR',error:String(e)});}}}); +send({kind:'BEGIN',count:ids.length}); + diff --git a/tools/cw_native_monster_capture.js b/tools/cw_native_monster_capture.js new file mode 100644 index 0000000..d70c52c --- /dev/null +++ b/tools/cw_native_monster_capture.js @@ -0,0 +1,13 @@ +// Research only: current assembly SHA c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144. +// Create(UInt32,...) calls this flat row getter at RVA 1dee0820 before +// allocating MonsterData. Only that getter and the existing serializer run. +const ids=globalThis.CW_MONSTER_IDS; +if(!Array.isArray(ids)||!ids.length||ids.length>128||ids.some(x=>!Number.isInteger(x)||x<=0))throw Error('Bounded monster ID plan required'); +const m=Process.getModuleByName('GameAssembly.dll'); +const check=(rva,expected)=>{const b=Array.from(new Uint8Array(m.base.add(rva).readByteArray(expected.length)));if(b.some((x,i)=>x!==expected[i]))throw Error('Entry identity differs');}; +check(0x1dee0820,[0x56,0x48,0x83,0xec,0x60]);check(0x1d3efb60,[0x56,0x57,0x48,0x83,0xec,0x28]); +const read=new NativeFunction(m.base.add(0x1dee0820),'pointer',['uint32','pointer']); +const serialize=new NativeFunction(m.base.add(0x1d3efb60),'pointer',['pointer','pointer']); +let index=0,done=false; +Interceptor.attach(m.base.add(0xdb5f860),{onLeave(){if(done)return;try{for(let n=0;n<4&&index65536)throw Error('Row bound');send({kind:'ROW',id,json:v.add(0x14).readUtf16String(length)});}if(index===ids.length){done=true;send({kind:'END',count:index});}}catch(e){done=true;send({kind:'ERROR',error:String(e)});}}}); +send({kind:'BEGIN',count:ids.length}); diff --git a/tools/cw_native_reward_tables.js b/tools/cw_native_reward_tables.js new file mode 100644 index 0000000..670ec86 --- /dev/null +++ b/tools/cw_native_reward_tables.js @@ -0,0 +1,14 @@ +// Research only: revision SHA c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144. +// FromBinary callers and their flat dictionary getters are traced in +// battle_diagnostics/cw-*-flat-*.asm. No scene/gameplay factories are invoked. +const m=Process.getModuleByName('GameAssembly.dll'); +const tables=[['orb',0x1dd79470],['consumable',0x1e88ddc0],['forge',0x1ddfbd20],['item',0x1edcc120],['combination',0x1de23170]]; +for(const [name,rva]of tables){const b=Array.from(new Uint8Array(m.base.add(rva).readByteArray(4)));if(b.join(',')!=='72,131,236,40')throw Error('Getter identity differs: '+name);} +const serialize=new NativeFunction(m.base.add(0x1d3efb60),'pointer',['pointer','pointer']); +let table=0,index=0,count=0,entries=null,done=false; +Interceptor.attach(m.base.add(0xdb5f860),{onLeave(){if(done)return;try{ + if(entries===null){const [name,rva]=tables[table],get=new NativeFunction(m.base.add(rva),'pointer',['pointer']);const d=get(ptr(0));if(d.isNull())throw Error('Missing '+name);count=d.add(0x20).readU32();entries=d.add(0x18).readPointer();index=0;if(count>4096||entries.isNull()||entries.add(0x18).readU32()32768)throw Error('Row serialization bound');send({kind:'ROW',table:tables[table][0],json:v.add(0x14).readUtf16String(length)});} + if(index>=count){send({kind:'TABLE_END',table:tables[table][0],count});table++;entries=null;if(table===tables.length){done=true;send({kind:'END'});}} + }catch(e){done=true;send({kind:'ERROR',error:String(e)});}}}); +send({kind:'ATTACHED',path:m.path,scope:'five named flat reward tables; at most 64 row serializations per managed callback'}); diff --git a/tools/cw_network_upvalue.lua b/tools/cw_network_upvalue.lua new file mode 100644 index 0000000..565afdb --- /dev/null +++ b/tools/cw_network_upvalue.lua @@ -0,0 +1,14 @@ +-- Resolve the loaded preparation callback's named network upvalue, metadata only. +do local function capture() + if _G.__gacCwNetUpvalue1 then return end + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightPreparationPage');local obj=page and page.LuaTable + if type(obj)~='table'then return end;_G.__gacCwNetUpvalue1=true + local f=obj._enter_battle;if type(f)~='function'then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + for i=1,8 do local name,value=debug.getupvalue(f,i);if not name then break end + if name=='GridFightModule'and type(value)=='userdata'then + local t=value:GetType();CS.UnityEngine.Debug.Log('[GAC_CW_NETWORK_UPVALUE] TYPE '..tostring(t.FullName)..' VALUE '..tostring(value)) + local ms=t:GetMethods(flags);for j=0,math.min(ms.Length-1,127)do local m=ms[j];if m.DeclaringType==t then CS.UnityEngine.Debug.Log('[GAC_CW_NETWORK_UPVALUE] METHOD '..tostring(m))end end + end + end +end;local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_CW_NETWORK_UPVALUE] ERROR '..tostring(e))end end diff --git a/tools/cw_orb_bonfire_callbacks.lua b/tools/cw_orb_bonfire_callbacks.lua new file mode 100644 index 0000000..7bdeab1 --- /dev/null +++ b/tools/cw_orb_bonfire_callbacks.lua @@ -0,0 +1,34 @@ +-- Two exact established CW/network types, metadata only. No request sending, +-- callbacks, scene loading, run mutation or assembly/type enumeration. +do local function capture() + local s=_G.__gacCwOrbBonfireCallbacks1 or {target=1,index=0};_G.__gacCwOrbBonfireCallbacks1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local names={'RPG.Client.GridFightModule','RPG.Client.NetworkManager'} + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_CW_ORB_BONFIRE_CALLBACKS] '..tostring(v))end + if s.target>#names then s.done=true;log('END');return end + if not s.methods then + s.t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType(names[s.target]) + if not s.t then log('MISSING '..names[s.target]);s.target=s.target+1;return end + s.methods=s.t:GetMethods(flags);s.index=0 + if s.methods.Length>8192 then error('exact-type method bound')end + log('TYPE '..s.t.FullName..' count='..s.methods.Length) + end + -- Name checks are cheap; limit them independently of the detailed formatting. + -- A time budget also stops the chunk if this Client's reflection is slower. + local start=CS.UnityEngine.Time.realtimeSinceStartup + local formatted=0 + for n=1,64 do + if s.index>=s.methods.Length then s.target=s.target+1;s.methods=nil;s.t=nil;return end + local m=s.methods[s.index];s.index=s.index+1 + local name=m.Name + if m.DeclaringType==s.t and (name:find('Orb',1,true) or name:find('Bonfire',1,true))then + log('METHOD '..s.t.FullName..' '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value)) + formatted=formatted+1 + end + if formatted>=8 or CS.UnityEngine.Time.realtimeSinceStartup-start>0.002 then return end + end +end local ok,e=pcall(capture);if not ok then _G.__gacCwOrbBonfireCallbacks1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_ORB_BONFIRE_CALLBACKS] ERROR '..tostring(e))end end diff --git a/tools/cw_orb_nested_callbacks.lua b/tools/cw_orb_nested_callbacks.lua new file mode 100644 index 0000000..d5aba56 --- /dev/null +++ b/tools/cw_orb_nested_callbacks.lua @@ -0,0 +1,44 @@ +-- Only nested types observed on the established Orb consumer, plus the live +-- session's Bonus object. Metadata only: never invoke a network/gameplay method. +do local function capture() + local s=_G.__gacCwOrbNested1 or {target=1,index=0,stage='fields',beats=0};_G.__gacCwOrbNested1=s + if s.done then return end + s.beats=s.beats+1;if s.beats>64 then s.done=true;return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local names={'<>c__DisplayClass11_0','<>c','OrbSummarizer'} + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_CW_ORB_NESTED] '..tostring(v))end + if s.target>4 then s.done=true;log('END');return end + if not s.t then + if s.target<=#names then + s.t=typeof(CS.RPG.Client.GridFightOrbServerData):GetNestedType(names[s.target],flags) + else + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule + local session=module and module.CurGameSession + local bonus=session and session.Bonus + s.t=bonus and bonus:GetType() + end + if not s.t then log('MISSING_TARGET '..s.target);s.target=s.target+1;return end + s.members=s.t:GetFields(flags);s.index=0;s.stage='fields';log('TYPE '..s.t.FullName) + end + for n=1,8 do + if s.index>=s.members.Length then + if s.stage=='fields'then s.members=s.t:GetMethods(flags);s.index=0;s.stage='methods';return end + s.target=s.target+1;s.t=nil;s.members=nil;return + end + local m=s.members[s.index];s.index=s.index+1 + if m.DeclaringType==s.t then + if s.stage=='fields'then log('FIELD '..m.Name..' '..m.FieldType.FullName) + else + log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value)) + local ps=m:GetParameters() + for i=0,math.min(ps.Length-1,3)do + local t=ps[i].ParameterType + if t.Assembly.FullName:find('RPG.Network.Proto',1,true)then log('PROTO_PARAMETER '..m.Name..' '..t.FullName)end + end + end + end + end +end local ok,e=pcall(capture);if not ok then _G.__gacCwOrbNested1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_ORB_NESTED] ERROR '..tostring(e))end end diff --git a/tools/cw_orb_runtime_metadata.lua b/tools/cw_orb_runtime_metadata.lua new file mode 100644 index 0000000..a806b5f --- /dev/null +++ b/tools/cw_orb_runtime_metadata.lua @@ -0,0 +1,33 @@ +-- Read only the established Orb consumer, eight members per heartbeat. Keep +-- outside scripts/ until deliberately staged by the runtime investigator. +do local function capture() + local state=_G.__gacCwOrbRuntimeMetadata1 or {index=0,beats=0} + _G.__gacCwOrbRuntimeMetadata1=state + if state.done then return end + state.beats=state.beats+1 + local function log(s)CS.UnityEngine.Debug.Log('[GAC_CW_ORB_RUNTIME_META] '..tostring(s))end + if state.beats>36 then state.done=true;state.members=nil;log('END beat budget');return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local f=manager and manager:GetType():GetField('_CurrentPhase',flags) + local phase=f and f:GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + if not state.members then + state.type=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType('RPG.Client.GridFightOrbServerData') + if not state.type then state.done=true;log('MISSING established Orb consumer');return end + state.members=state.type:GetMembers(flags) + if state.members.Length>192 then error('Orb member bound')end + log('TYPE '..state.type.FullName..' members='..state.members.Length) + end + for _=1,8 do + if state.index>=state.members.Length then state.done=true;state.members=nil;state.type=nil;log('END');return end + local m=state.members[state.index];state.index=state.index+1 + if m.DeclaringType==state.type then + if m.MemberType==CS.System.Reflection.MemberTypes.Method then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value)) + else log(tostring(m.MemberType)..' '..tostring(m))end + end + end +end +local ok,e=pcall(capture) +if not ok then _G.__gacCwOrbRuntimeMetadata1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_ORB_RUNTIME_META] ERROR '..tostring(e))end +end diff --git a/tools/cw_orb_wire_fields.lua b/tools/cw_orb_wire_fields.lua new file mode 100644 index 0000000..905e209 --- /dev/null +++ b/tools/cw_orb_wire_fields.lua @@ -0,0 +1,16 @@ +-- Exact protobuf parameter types obtained from the current consumer metadata. +do local function capture() + if _G.__gacCwOrbFields1 then return end;_G.__gacCwOrbFields1=true + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_ORB_FIELDS] '..tostring(x))end + local t=typeof(CS.RPG.Client.GridFightOrbServerData) + local ms=t:GetMethods(flags) + for i=0,math.min(ms.Length-1,95)do local m=ms[i] + if m.Name=='Sync'and m:GetParameters().Length==1 then + local p=m:GetParameters()[0].ParameterType + log('TYPE '..p.FullName..' ASSEMBLY '..p.Assembly.FullName) + if p.Name=='MMEDLCAENAL'then local methods=p:GetMethods(flags);for j=0,math.min(methods.Length-1,95)do local g=methods[j];if g.DeclaringType==p and g.Name:find('get_')then log('METHOD '..g.Name..' HANDLE '..tostring(g.MethodHandle.Value))end end end + end + end + log('END') +end;local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_CW_ORB_FIELDS] ERROR '..tostring(e))end end diff --git a/tools/cw_preparation_bytecode.lua b/tools/cw_preparation_bytecode.lua new file mode 100644 index 0000000..fb900c0 --- /dev/null +++ b/tools/cw_preparation_bytecode.lua @@ -0,0 +1,15 @@ +-- Export three loaded button functions without invoking them or changing UI. +do local function capture() + local s=_G.__gacCwPrepBytecode1 or {index=1};_G.__gacCwPrepBytecode1=s + local names={'_on_start_battle_click','_enter_battle','_check_enter_battle_by_reason'} + if s.index>#names then return end + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightPreparationPage') + local obj=page and page.LuaTable;if type(obj)~='table'then return end + local name=names[s.index];s.index=s.index+1 + local f=obj[name];if type(f)~='function'then return end + local raw=string.dump(f) + if #raw>32768 then CS.UnityEngine.Debug.Log('[GAC_CW_PREP_BYTECODE] TOO_LARGE '..name);return end + local bytes=CS.System.Array.CreateInstance(typeof(CS.System.Byte),#raw) + for i=1,#raw do bytes[i-1]=raw:byte(i)end + CS.UnityEngine.Debug.Log('[GAC_CW_PREP_BYTECODE] '..name..' '..CS.System.Convert.ToBase64String(bytes)) +end;local ok,e=pcall(capture);if not ok then _G.__gacCwPrepBytecode1={index=4};CS.UnityEngine.Debug.Log('[GAC_CW_PREP_BYTECODE] ERROR '..tostring(e))end end diff --git a/tools/cw_preparation_callbacks.lua b/tools/cw_preparation_callbacks.lua new file mode 100644 index 0000000..71b4cdf --- /dev/null +++ b/tools/cw_preparation_callbacks.lua @@ -0,0 +1,25 @@ +-- Read-only closure metadata for the loaded preparation page's button handlers. +do local function capture() + if _G.__gacCwPreparationCallbacks1 then return end + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightPreparationPage') + local obj=page and page.LuaTable;if type(obj)~='table'then return end + _G.__gacCwPreparationCallbacks1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_PREP_CALLBACK] '..tostring(x))end + for _,key in ipairs({'_on_start_battle_click','_enter_battle','_check_enter_battle_by_reason'})do + local f=obj[key];if type(f)=='function'then + for i=1,16 do local name,value=debug.getupvalue(f,i);if not name then break end + local shown=type(value)=='number'and tostring(value)or(type(value)=='string'and value:sub(1,160)or type(value)) + log(key..' UPVALUE '..name..' '..shown) + end + end + end + local visited={} + local function walk(t,depth) + if type(t)~='table'or visited[t]or depth>4 then return end;visited[t]=true + local count=0;for k,v in pairs(t)do + count=count+1;if count>256 then break end + if tostring(k):lower():find('bonfire')or tostring(k):lower():find('tea')then log('KEY '..tostring(k)..' '..type(v))end + if k=='__index'or k=='class'or k=='super'then walk(v,depth+1)end + end;walk(getmetatable(t),depth+1) + end;walk(obj,0) +end;local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_CW_PREP_CALLBACK] ERROR '..tostring(e))end end diff --git a/tools/cw_preparation_lua_methods.lua b/tools/cw_preparation_lua_methods.lua new file mode 100644 index 0000000..09c1a45 --- /dev/null +++ b/tools/cw_preparation_lua_methods.lua @@ -0,0 +1,18 @@ +-- Read the current preparation page's Lua class metadata only. +do local function capture() + if _G.__gacCwPrepLuaMethods1 then return end;_G.__gacCwPrepLuaMethods1=true + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightPreparationPage') + local obj=page and page.LuaTable;if type(obj)~='table'then return end + local visited={} + local function inspect(t,depth) + if type(t)~='table'or visited[t]or depth>4 then return end;visited[t]=true + local count=0 + for k,v in pairs(t)do + count=count+1;if count>192 then break end + if type(v)=='function'then local info=debug.getinfo(v,'S');CS.UnityEngine.Debug.Log('[GAC_CW_PREP_LUA] FUNCTION '..tostring(k)..' '..tostring(info and info.source)..' lines='..tostring(info and info.linedefined)) + elseif (k=='__index'or k=='super'or k=='class')and type(v)=='table'then inspect(v,depth+1)end + end + inspect(getmetatable(t),depth+1) + end + inspect(obj,0) +end;local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_CW_PREP_LUA] ERROR '..tostring(e))end end diff --git a/tools/cw_protobuf_serializer_handle.lua b/tools/cw_protobuf_serializer_handle.lua new file mode 100644 index 0000000..478087a --- /dev/null +++ b/tools/cw_protobuf_serializer_handle.lua @@ -0,0 +1,7 @@ +-- Exact protobuf serializer metadata; no serialization/gameplay invocation. +do local function capture() + if _G.__gacCwProtoSerializeHandle1 then return end;_G.__gacCwProtoSerializeHandle1=true + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local ms=typeof(CS.Google.Protobuf.MessageExtensions):GetMethods(flags) + for i=0,math.min(ms.Length-1,127)do local m=ms[i];if m.Name=='ToByteArray'and m:GetParameters().Length==1 then CS.UnityEngine.Debug.Log('[GAC_CW_PROTO_SERIALIZER] '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end +end;local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_CW_PROTO_SERIALIZER] ERROR '..tostring(e))end end diff --git a/tools/cw_reward_capture_trigger.lua b/tools/cw_reward_capture_trigger.lua new file mode 100644 index 0000000..0ec5fba --- /dev/null +++ b/tools/cw_reward_capture_trigger.lua @@ -0,0 +1,10 @@ +-- Existing initialized handbook getter only, paused during Battle. +do local function capture() + local n=_G.__gacCwRewardTrigger1 or 0;if n>=120 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + _G.__gacCwRewardTrigger1=n+1 + CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule:GetHandBookAllRoleConfig() +end;local ok,e=pcall(capture);if not ok then _G.__gacCwRewardTrigger1=120;CS.UnityEngine.Debug.Log('[GAC_CW_REWARD_TRIGGER] ERROR '..tostring(e))end end diff --git a/tools/cw_reward_inventory_schema.lua b/tools/cw_reward_inventory_schema.lua new file mode 100644 index 0000000..ffade26 --- /dev/null +++ b/tools/cw_reward_inventory_schema.lua @@ -0,0 +1,30 @@ +-- Explicit CW module metadata only. Keep outside scripts/ until a live Client +-- is available. No assembly scan, config getter invocation or run mutation. +do local function capture() + local state=_G.__gacCwRewardInventorySchema1 or {index=0} + _G.__gacCwRewardInventorySchema1=state + if state.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local function log(value)CS.UnityEngine.Debug.Log('[GAC_CW_REWARD_INVENTORY_SCHEMA] '..tostring(value))end + local function relevant(name) + return name:find('Orb') or name:find('Consumable') or name:find('Forge') or name:find('Bonus') or name:find('Reward') + end + if not state.members then + local target=typeof(CS.RPG.Client.GridFightModule) + state.members=target:GetMembers(flags) + if state.members.Length>4096 then error('named module metadata bound exceeded')end + log('TYPE '..target.FullName) + end + -- Bound metadata formatting/logging per heartbeat; never invoke members. + for _=1,32 do + if state.index>=state.members.Length then state.done=true;state.members=nil;log('END');return end + local member=state.members[state.index];state.index=state.index+1 + if relevant(tostring(member.Name))then log(tostring(member.MemberType)..' '..tostring(member))end + end +end +local ok,err=pcall(capture) +if not ok then _G.__gacCwRewardInventorySchema1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_REWARD_INVENTORY_SCHEMA] ERROR '..tostring(err))end +end diff --git a/tools/cw_reward_pool_current_metadata.lua b/tools/cw_reward_pool_current_metadata.lua new file mode 100644 index 0000000..810b954 --- /dev/null +++ b/tools/cw_reward_pool_current_metadata.lua @@ -0,0 +1,30 @@ +-- Exact reward row names recorded by the earlier reward capture tool. Probe +-- their presence in the current target rather than accepting reference RVAs. +do local function capture() + local s=_G.__gacCwRewardPoolCurrent1 or {target=1,index=0,stage='fields'};_G.__gacCwRewardPoolCurrent1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local gm=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=gm and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(gm) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local names={'GridFightBasicBonusPoolConfigRow','GridFightBonusPoolConfigRow','GridFightBonusPoolV2Row','GridFightBasicBonusPoolV2Row'} + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_CW_REWARD_POOL_CURRENT] '..tostring(v))end + if s.target>#names then s.done=true;log('END');return end + if not s.members then + local asm=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly + s.t=asm:GetType('RPG.GameCore.'..names[s.target]) + if not s.t then log('MISSING '..names[s.target]);s.target=s.target+1;return end + s.members=s.t:GetFields(flags);s.index=0;s.stage='fields';log('TYPE '..s.t.FullName) + end + for n=1,8 do + if s.index>=s.members.Length then + if s.stage=='fields'then + local method=s.t:GetMethod('FromBinary',flags) + if method then log('BINARY '..s.t.FullName..' HANDLE '..tostring(method.MethodHandle.Value))end + end + s.target=s.target+1;s.members=nil;s.t=nil;return + end + local member=s.members[s.index];s.index=s.index+1 + if member.DeclaringType==s.t then log('FIELD '..member.Name..' '..member.FieldType.FullName)end + end +end local ok,e=pcall(capture);if not ok then _G.__gacCwRewardPoolCurrent1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_REWARD_POOL_CURRENT] ERROR '..tostring(e))end end diff --git a/tools/cw_reward_row_handles.lua b/tools/cw_reward_row_handles.lua new file mode 100644 index 0000000..2bc4930 --- /dev/null +++ b/tools/cw_reward_row_handles.lua @@ -0,0 +1,26 @@ +-- Named reward row metadata only, two exact types per heartbeat. +do local function capture() + local s=_G.__gacCwRewardRows3 or {index=1};_G.__gacCwRewardRows3=s + local names={'GridFightBasicBonusPoolConfigRow','GridFightBonusPoolConfigRow','GridFightBonusPoolV2Row','GridFightBasicBonusPoolV2Row'} + if s.index>#names then return end + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_REWARD_ROWS] '..tostring(x))end + for _=1,2 do + if s.index>#names then log('END');return end + local name=names[s.index];s.index=s.index+1 + local asm=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly + local t + if name=='GridFightConsumableItemConfig'or name=='GridFightForgeConfig'then + t=typeof(CS.RPG.Client[name]);local fs=t:GetFields(flags) + for i=0,math.min(fs.Length-1,63)do local f=fs[i];if f.FieldType.FullName:find('Row$')then t=f.FieldType;break end end + else t=asm:GetType('RPG.GameCore.'..name)end + log('TYPE '..name..' '..tostring(t)) + if t then + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,63)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,63)do local m=ms[i];if m.DeclaringType==t and m.Name=='FromBinary'then log('BINARY '..t.FullName..' HANDLE '..tostring(m.MethodHandle.Value))end end + end + end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwRewardRows3={index=99};CS.UnityEngine.Debug.Log('[GAC_CW_REWARD_ROWS] ERROR '..tostring(e))end end diff --git a/tools/cw_spotlight_battle_schema.lua b/tools/cw_spotlight_battle_schema.lua new file mode 100644 index 0000000..b83761b --- /dev/null +++ b/tools/cw_spotlight_battle_schema.lua @@ -0,0 +1,19 @@ +-- Specific battle-context types only, metadata only, one type per heartbeat. +do + local s=_G.__gacCwSpotBattleSchema1 or {index=1};_G.__gacCwSpotBattleSchema1=s + if s.done then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_SPOT_BATTLE] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local names={'RPG.Client.GridFightBattleGameContext','RPG.Client.GridFightRoleEffect','RPG.Client.GridFightBattleRole','RPG.Client.GridFightBattleRoleProfile','RPG.GameCore.GridFightSpotLightComponent'} + local name=names[s.index];if not name then s.done=true;log('END');return end;s.index=s.index+1 + local a=typeof(CS.RPG.Client.GridFightModule).Assembly;local b=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly + local t=a:GetType(name) or b:GetType(name);log('TYPE '..name..' '..tostring(t));if not t then return end + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,63)do log('FIELD '..tostring(fs[i]))end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,95)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end) + if not ok then s.done=true;log('ERROR '..tostring(err))end +end diff --git a/tools/cw_spotlight_binding_handles.lua b/tools/cw_spotlight_binding_handles.lua new file mode 100644 index 0000000..7a08619 --- /dev/null +++ b/tools/cw_spotlight_binding_handles.lua @@ -0,0 +1,19 @@ +-- Only the named manager/binding methods, no actions or assembly enumeration. +do + if _G.__gacCwBindingHandles1 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + _G.__gacCwBindingHandles1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_BINDING_HANDLE] '..tostring(x))end + local ok,err=pcall(function() + local t=typeof(CS.RPG.Client.GridFightSpotLightManager) + local ms=t:GetMethods(flags) + for i=0,math.min(ms.Length-1,127)do local m=ms[i];if m.Name=='AddOrUpdate' or m.Name=='GetActiveSpotLightBindingByRoleId' then log(t.FullName..'.'..m.Name..' '..tostring(m.MethodHandle.Value))end end + local t2=typeof(CS.RPG.Client.GridFightSpotLightBinding) + local cs=t2:GetConstructors(flags);for i=0,math.min(cs.Length-1,3)do log('CTOR '..tostring(cs[i])..' '..tostring(cs[i].MethodHandle.Value))end + end) + if not ok then log('ERROR '..tostring(err))end + log('END') +end diff --git a/tools/cw_teabreak_current_consumer.lua b/tools/cw_teabreak_current_consumer.lua new file mode 100644 index 0000000..d520ba4 --- /dev/null +++ b/tools/cw_teabreak_current_consumer.lua @@ -0,0 +1,66 @@ +-- Read-only current-session capture. Keep outside scripts/ until coordinated. +-- Reads only the established Preparation page and live Stage/session metadata. +do local function capture() + local s=_G.__gacCwTeaConsumer1 or {phase=1,index=0,beats=0};_G.__gacCwTeaConsumer1=s + if s.done then return end + s.beats=s.beats+1;if s.beats>32 then s.done=true;return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local gm=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local f=gm and gm:GetType():GetField('_CurrentPhase',flags) + local phase=f and f:GetValue(gm) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_CW_TEA_CONSUMER] '..tostring(v))end + if s.phase==1 then + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightPreparationPage') + local obj=page and page.LuaTable + if type(obj)~='table'then log('NO_LOADED_PREPARATION');s.phase=2;return end + s.obj=obj;s.phase=3;s.index=1;return + end + if s.phase==3 then + local names={'_on_start_battle_click','_enter_battle','_check_enter_battle_by_reason'} + local name=names[s.index];s.index=s.index+1 + if not name then s.obj=nil;s.phase=2;return end + local fn=s.obj[name] + if type(fn)=='function'then + local info=debug.getinfo(fn,'S');log('SOURCE '..name..' '..tostring(info and info.source)) + for i=1,24 do + local k,v=debug.getupvalue(fn,i);if not k then break end + log('UPVALUE '..name..' '..k..' '..type(v)) + end + local raw=string.dump(fn) + if #raw<=32768 then + local bytes=CS.System.Array.CreateInstance(typeof(CS.System.Byte),#raw) + for i=1,#raw do bytes[i-1]=raw:byte(i)end + log('BYTECODE '..name..' '..CS.System.Convert.ToBase64String(bytes)) + else log('FUNCTION_TOO_LARGE '..name)end + else log('NO_FUNCTION '..name)end + return + end + if s.phase==2 then + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule + local session=module and module.CurGameSession + s.obj=session;s.target=1;s.phase=4;s.index=0;return + end + if s.phase==4 then + if not s.obj then log('NO_LIVE_TARGET '..tostring(s.target));s.done=true;return end + if not s.fields then + s.t=s.obj:GetType();s.fields=s.t:GetFields(flags);log('TYPE '..s.t.FullName) + end + for n=1,8 do + if s.index>=s.fields.Length then + if s.target==1 then + s.obj=s.obj.Stage;s.target=2;s.index=0;s.fields=nil;return + end + s.done=true;s.obj=nil;s.fields=nil;log('END');return + end + local field=s.fields[s.index];s.index=s.index+1 + if field.DeclaringType==s.t then + log('FIELD '..field.Name..' '..field.FieldType.FullName) + if field.Name:lower():find('bonfire',1,true)then + local value=field:GetValue(s.obj) + log('BONFIRE_VALUE_TYPE '..field.Name..' '..tostring(value and value:GetType().FullName)) + end + end + end + end +end local ok,e=pcall(capture);if not ok then _G.__gacCwTeaConsumer1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_TEA_CONSUMER] ERROR '..tostring(e))end end diff --git a/tools/cw_teabreak_runtime.lua b/tools/cw_teabreak_runtime.lua new file mode 100644 index 0000000..65412cf --- /dev/null +++ b/tools/cw_teabreak_runtime.lua @@ -0,0 +1,118 @@ +-- Read-only, bounded Tea Break investigation. Keep outside scripts/ until an +-- operator deliberately stages it. Does not send packets or change UI/state. +do local function capture() + local state=_G.__gacCwTeaBreakRuntime2 + if not state then + state={step=1,index=0,beats=0};_G.__gacCwTeaBreakRuntime2=state + end + if state.done then return end + state.beats=state.beats+1 + local function log(s)CS.UnityEngine.Debug.Log('[GAC_CW_TEA_RUNTIME2] '..tostring(s))end + if state.beats>36 then state.done=true;log('END beat budget');return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local gm=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local current=gm and gm:GetType():GetField('_CurrentPhase',flags) + local phase=current and current:GetValue(gm) + if not phase then log('WAIT game phase');return end + if typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + if state.step==1 then + local t=typeof(CS.RPG.Client.GridFightModule) + local p=t:GetProperty('Instance',flags) + if p then local ok,obj=pcall(function()return p:GetValue(nil,nil)end);if ok then state.module=obj end end + if not state.module then + local manager=CS.RPG.Client.GlobalVars.s_ModuleManager + if manager then local ok,obj=pcall(function()return manager.GridFightModule end);if ok then state.module=obj end end + end + log('MODULE '..tostring(state.module and state.module:GetType().FullName)) + state.session=state.module and state.module.CurGameSession + local sf=state.session and state.session:GetType():GetField('_GameEventData',flags) + state.event=sf and sf:GetValue(state.session) + log('EVENT_TYPE '..tostring(state.event and state.event:GetType().FullName)) + local stage=state.session and state.session.Stage + local node=stage and stage.CurNode + if node then + log('NODE route='..tostring(stage.RouteID)..' chapter='..tostring(stage.ChapterID)..' section='..tostring(stage.SectionID)..' bonfire='..tostring(node.IsBonfireNode)) + local ids=node.BonfireEventIds + if ids then + if ids.Count>16 then error('bonfire event bound')end + for i=0,ids.Count-1 do log('BONFIRE_EVENT '..tostring(ids[i]))end + end + local nf=node:GetType():GetField('_NodeParam',flags) + local param=nf and nf:GetValue(node) + if param then + local raw=CS.Newtonsoft.Json.JsonConvert.SerializeObject(param) + if #raw>16384 then error('node parameter bound')end + log('NODE_PARAM '..raw) + end + end + state.types={t.Assembly:GetType('RPG.Client.GridFightGameEventData'),t.Assembly:GetType('RPG.Client.GridFightStageNode')} + state.typeindex=1;state.step=2;return + end + if state.step==2 then + local t=state.types[state.typeindex] + if not t then state.typeindex=state.typeindex+1;if state.typeindex>2 then state.step=3 end;return end + if not state.methods then + log('TYPE '..t.FullName) + if state.typeindex==2 then + for _,name in ipairs({'_RefreshBonfireEventIds','get_IsBonfireNode','get_BonfireEventIds'})do + local m=t:GetMethod(name,flags) + if m then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end + state.step=3;return + end + state.methods=t:GetMethods(flags);state.fields=t:GetFields(flags);state.index=0 + end + for i=state.index,math.min(state.index+7,state.methods.Length-1)do + local m=state.methods[i] + if m.DeclaringType==t then + local n=m.Name:lower() + if state.typeindex==1 or n:find('bonfire')then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end + end + state.index=state.index+8 + if state.index>=state.methods.Length then state.step=4;state.index=0 end + return + end + if state.step==4 then + local t=state.types[state.typeindex] + for i=state.index,math.min(state.index+7,state.fields.Length-1)do + local f=state.fields[i] + if f.DeclaringType==t and not f.IsStatic then + log('FIELD '..tostring(f)) + if state.typeindex==1 and state.event then + local v=f:GetValue(state.event) + if v==nil then log('VALUE '..f.Name..'=nil') + elseif f.FieldType.IsPrimitive or f.FieldType.IsEnum or f.FieldType.FullName=='System.String' then log('VALUE '..f.Name..'='..tostring(v)) + else log('VALUE_TYPE '..f.Name..' '..v:GetType().FullName)end + end + end + end + state.index=state.index+8 + if state.index>=state.fields.Length then + state.typeindex=state.typeindex+1;state.methods=nil;state.fields=nil;state.index=0 + state.step=state.typeindex>2 and 3 or 2 + end + return + end + if state.step==3 then + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightPreparationPage') + local obj=page and page.LuaTable + if type(obj)=='table'then + local names={'_on_start_battle_click','_enter_battle','_check_enter_battle_by_reason'} + for _,name in ipairs(names)do + local fn=obj[name] + if type(fn)=='function'then + log('LUA_FUNCTION '..name) + for i=1,24 do + local key,val=debug.getupvalue(fn,i);if not key then break end + log('LUA_UPVALUE '..name..' '..i..' '..key..' '..type(val)) + end + end + end + else log('NO preparation page')end + state.done=true;state.module=nil;state.session=nil;state.event=nil;log('END') + end +end +local ok,e=pcall(capture) +if not ok then _G.__gacCwTeaBreakRuntime2={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_TEA_RUNTIME2] ERROR '..tostring(e))end +end diff --git a/tools/cw_trait_rows_export.lua b/tools/cw_trait_rows_export.lua new file mode 100644 index 0000000..59c6317 --- /dev/null +++ b/tools/cw_trait_rows_export.lua @@ -0,0 +1,32 @@ +-- IDs are injected from the current revision's captured role configuration. +-- Read config rows only, four traits per heartbeat, never during Battle. +do local function capture() + local s=_G.__gacCwTraitRows1 or {index=1};_G.__gacCwTraitRows1=s + if s.done then return end + local ids=_G.__gacCwTraitCaptureIDs + if type(ids)~='table'or #ids>256 then error('bounded captured trait ID plan required')end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_TRAIT_ROWS] '..tostring(x))end + local function rows(label,obj) + local fs=obj:GetType():GetFields(flags) + for i=0,math.min(fs.Length-1,47)do local f=fs[i] + if not f.IsStatic and f.FieldType.FullName:find('Row$')then local row=f:GetValue(obj);if row then local encoded=CS.Newtonsoft.Json.JsonConvert.SerializeObject(row);if #encoded>32768 then error('trait row bound')end;log(label..' '..encoded)end end + end + end + for _=1,4 do + if s.index>#ids then s.done=true;log('END');return end + local id=ids[s.index];s.index=s.index+1 + local config=module:GetTraitConfig(id) + if config then + rows('BASE',config) + local f=config:GetType():GetField('_layerConfigs',flags);local layers=f and f:GetValue(config) + if layers then if layers.Count>32 then error('trait layer bound')end;for i=0,layers.Count-1 do rows('LAYER',layers[i])end end + local effects=config.TraitEffectList + if effects then for i=0,math.min(effects.Length-1,15)do local effect=module:GetTraitEffectConfig(effects[i]);if effect then rows('EFFECT',effect)end end end + else log('MISSING '..id)end + end +end;local ok,e=pcall(capture);if not ok then _G.__gacCwTraitRows1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_TRAIT_ROWS] ERROR '..tostring(e))end end diff --git a/tools/cw_trial_export.lua b/tools/cw_trial_export.lua new file mode 100644 index 0000000..d27b031 --- /dev/null +++ b/tools/cw_trial_export.lua @@ -0,0 +1,27 @@ +-- Caller supplies IDs/world level from the catalog/world resource. Flat rows +-- only; no avatar creation or level graph. Two lookups per heartbeat. +do local function capture() + local s=_G.__gacCwTrialExport1 or {index=1};_G.__gacCwTrialExport1=s + if s.done then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_TRIAL_ROW] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local plan=_G.__GAC_CW_TRIAL_PLAN;if not plan or #plan>128 then error('bounded capture plan missing')end + if not s.begun then log('BEGIN '..#plan);s.begun=true end + for batch=1,2 do + local request=plan[s.index];if not request then s.done=true;log('END');return end + if s.world==nil then s.world=request.WorldLevel end + local row=CS.RPG.GameCore.SpecialAvatarExcelTable.GetData(request.SpecialAvatarID,s.world) + if row then + if row.SpecialAvatarID~=request.SpecialAvatarID or row.AvatarID~=request.AvatarID or row.WorldLevel~=s.world then error('trial row identity differs')end + local text=tostring(CS.Newtonsoft.Json.JsonConvert.SerializeObject(row));if #text>65536 then error('row exceeds bound')end + log('ROW '..text);s.index=s.index+1;s.world=nil + elseif s.world>0 then s.world=s.world-1 + else error('trial row not found in supported world levels')end + end + end) + if not ok then s.done=true;log('ERROR '..tostring(err))end +end;capture()end diff --git a/tools/cw_trial_table_schema.lua b/tools/cw_trial_table_schema.lua new file mode 100644 index 0000000..fec5c71 --- /dev/null +++ b/tools/cw_trial_table_schema.lua @@ -0,0 +1,19 @@ +-- Metadata for four named flat trial tables only; no rows/loaders invoked. +do + local s=_G.__gacCwTrialSchema1 or 1 + local names={'SpecialAvatarExcelTable','SpecialAvatarRow','SpecialAvatarRelicExcelTable','AvatarExcelTable'} + if s>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + _G.__gacCwTrialSchema1=s+1 + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_TRIAL_SCHEMA] '..tostring(x))end + local ok,err=pcall(function() + local t=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly:GetType('RPG.GameCore.'..names[s]);log('TYPE '..names[s]..' '..tostring(t));if not t then return end + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,47)do log('FIELD '..tostring(fs[i]))end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,47)do if ms[i].DeclaringType==t then log('METHOD '..tostring(ms[i])..' HANDLE '..tostring(ms[i].MethodHandle.Value))end end + end) + if not ok then log('ERROR '..tostring(err))end + if s==#names then log('END')end +end diff --git a/tools/cw_wave_config_identity.lua b/tools/cw_wave_config_identity.lua new file mode 100644 index 0000000..5bb2db9 --- /dev/null +++ b/tools/cw_wave_config_identity.lua @@ -0,0 +1,23 @@ +-- Isolated protobuf conversion only, verified native 166b4da0 / 166b5510: +-- allocates data objects and copies scalar fields; no scene/table/game action. +do local function capture() + if _G.__gacCwWaveConfigIdentity3 then return end;_G.__gacCwWaveConfigIdentity3=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_WAVE_CONFIG_ID] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local p=typeof(CS.RPG.GameCore.BattleInstance):GetMethod('GetCurWaveParam',flags).ReturnType + local helper=p.Assembly:GetType('FKOEECADKFF');local ms=helper:GetMethods(flags);local convert + for i=0,math.min(ms.Length-1,63)do local m=ms[i];if m.ReturnType==p and m:GetParameters().Length==1 then convert=m;break end end + if not convert then error('Named converter missing')end + local sourceType=convert:GetParameters()[0].ParameterType;local raw=CS.System.Activator.CreateInstance(sourceType) + local setters=sourceType:GetMethods(flags);for i=0,math.min(setters.Length-1,95)do local m=setters[i];local ps=m:GetParameters();if m.DeclaringType==sourceType and not m.IsStatic and m.ReturnType==typeof(CS.System.Void) and ps.Length==1 and ps[0].ParameterType==typeof(CS.System.UInt32)then raw[m.Name](raw,1)end end + local args=CS.System.Array.CreateInstance(typeof(CS.System.Object),1);args:SetValue(raw,0) + local invokeFlags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),0) + local converted=convert:Invoke(nil,invokeFlags,nil,args,nil);local config=p:GetField('FGNHFJHBPIM',flags):GetValue(converted) + if not config then error('Isolated conversion has no config reference')end + local t=config:GetType();log('TYPE '..t.FullName..' BASE '..tostring(t.BaseType)) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,31)do log('FIELD '..tostring(fs[i]))end + local methods=t:GetMethods(flags);for i=0,math.min(methods.Length-1,31)do local m=methods[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end) + if not ok then log('ERROR '..tostring(err))end;log('END') +end;capture()end diff --git a/tools/cw_wave_consumer_schema.lua b/tools/cw_wave_consumer_schema.lua new file mode 100644 index 0000000..f91d429 --- /dev/null +++ b/tools/cw_wave_consumer_schema.lua @@ -0,0 +1,29 @@ +-- Metadata only for four named battle data types. No loader/gameplay method +-- is invoked. Inspect at most 32 methods per heartbeat, bounded to 256/type. +do local function capture() + local s=_G.__gacCwWaveConsumer3 or {type=1,method=0};_G.__gacCwWaveConsumer3=s + local names={'RPG.GameCore.GridFightManager','RPG.Client.BattleGamePhase'} + if s.type>#names then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_WAVE_CONSUMER] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local types={typeof(CS.RPG.GameCore.GridFightManager),typeof(CS.RPG.Client.BattleGamePhase)} + local t=types[s.type] + if not t then log('MISSING '..names[s.type]);s.type=s.type+1;s.method=0;return end + if s.method==0 then + log('TYPE '..t.FullName) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,47)do log('FIELD '..tostring(fs[i]))end + end + local ms=t:GetMethods(flags) + for i=s.method,math.min(s.method+31,ms.Length-1,255)do + local m=ms[i] + if m.DeclaringType==t and (m.Name:find('Wave')or m.Name:find('Elite')or m.Name:find('Formation')or m.Name:find('Scene')or m.Name:find('Init'))then + log('METHOD '..t.FullName..' '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value)) + end + end + s.method=s.method+32 + if s.method>=ms.Length or s.method>=256 then log('TYPE_END '..t.FullName..' inspected='..math.min(ms.Length,256)..' total='..ms.Length);s.type=s.type+1;s.method=0 end + end) + if not ok then log('ERROR '..tostring(err));s.type=#names+1 end + if s.type>#names then log('END')end +end;capture()end diff --git a/tools/cw_wave_conversion_schema.lua b/tools/cw_wave_conversion_schema.lua new file mode 100644 index 0000000..15e32e2 --- /dev/null +++ b/tools/cw_wave_conversion_schema.lua @@ -0,0 +1,16 @@ +-- Metadata only for the observed internal wave parameter, its config field, +-- and the exact conversion helper seen in the Client stack. One type/HB. +do local function capture() + local s=_G.__gacCwWaveConversion1 or 1;if s>3 then return end;_G.__gacCwWaveConversion1=s+1 + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_WAVE_CONVERT] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local p=typeof(CS.RPG.GameCore.BattleInstance):GetMethod('GetCurWaveParam',flags).ReturnType + local types={p,p:GetField('FGNHFJHBPIM',flags).FieldType,p.Assembly:GetType('FKOEECADKFF')} + local t=types[s];if not t then log('MISSING '..s);return end;log('TYPE '..t.FullName) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,47)do log('FIELD '..tostring(fs[i]))end + local cs=t:GetConstructors(flags);for i=0,math.min(cs.Length-1,7)do log('CTOR '..tostring(cs[i])..' HANDLE '..tostring(cs[i].MethodHandle.Value))end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,47)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end) + if not ok then log('ERROR '..tostring(err))end;if s==3 then log('END')end +end;capture()end diff --git a/tools/cw_wave_info_schema.lua b/tools/cw_wave_info_schema.lua new file mode 100644 index 0000000..8286986 --- /dev/null +++ b/tools/cw_wave_info_schema.lua @@ -0,0 +1,22 @@ +-- Two named wave/container types only; metadata, 32 methods per heartbeat. +do local function capture() + local s=_G.__gacCwWaveInfo1 or {kind=1,index=0};_G.__gacCwWaveInfo1=s + if s.kind>2 then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_WAVE_INFO] '..tostring(x))end + local ok,err=pcall(function() + local types={typeof(CS.RPG.GameCore.GridFightWaveInfo),typeof(CS.RPG.GameCore.BattleInstance)} + local t=types[s.kind];local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + if s.index==0 then + log('TYPE '..t.FullName) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,63)do log('FIELD '..tostring(fs[i]))end + local cs=t:GetConstructors(flags);for i=0,math.min(cs.Length-1,7)do log('CTOR '..tostring(cs[i])..' HANDLE '..tostring(cs[i].MethodHandle.Value))end + end + local ms=t:GetMethods(flags) + for i=s.index,math.min(s.index+31,ms.Length-1,255)do + local m=ms[i];if m.DeclaringType==t and (s.kind==1 or m.Name:find('Wave')or m.Name:find('Monster')or m.Name:find('Init'))then log('METHOD '..t.FullName..' '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end + s.index=s.index+32;if s.index>=ms.Length or s.index>=256 then log('TYPE_END '..t.FullName..' total='..ms.Length);s.kind=s.kind+1;s.index=0 end + end) + if not ok then log('ERROR '..tostring(err));s.kind=3 end + if s.kind>2 then log('END')end +end;capture()end diff --git a/tools/cw_wave_param_identity.lua b/tools/cw_wave_param_identity.lua new file mode 100644 index 0000000..6a14352 --- /dev/null +++ b/tools/cw_wave_param_identity.lua @@ -0,0 +1,14 @@ +-- Current wave parameter identity and named lineup metadata; no game actions. +do local function capture() + if _G.__gacCwWaveParamIdentity1 then return end;_G.__gacCwWaveParamIdentity1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_WAVE_PARAM_ID] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local m=typeof(CS.RPG.GameCore.BattleInstance):GetMethod('GetCurWaveParam',flags) + local t=m.ReturnType;log('TYPE '..t.FullName) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,47)do local f=fs[i];if f.IsLiteral then log('CONST '..f.Name..' '..tostring(f:GetRawConstantValue()))else log('FIELD '..tostring(f))end end + local ps=t:GetProperties(flags);for i=0,math.min(ps.Length-1,31)do local p=ps[i];local g=p:GetGetMethod(true);log('PROPERTY '..tostring(p)..' HANDLE '..tostring(g and g.MethodHandle.Value))end + local l=typeof(CS.RPG.GameCore.BattleLineupData);log('TYPE '..l.FullName);local fields=l:GetFields(flags);for i=0,math.min(fields.Length-1,63)do log('FIELD '..tostring(fields[i]))end + end) + if not ok then log('ERROR '..tostring(err))end;log('END') +end;capture()end diff --git a/tools/cw_wave_ref_schema.lua b/tools/cw_wave_ref_schema.lua new file mode 100644 index 0000000..b9355ee --- /dev/null +++ b/tools/cw_wave_ref_schema.lua @@ -0,0 +1,13 @@ +-- Named config-reference type from the existing Client stack; metadata only. +do local function capture() + if _G.__gacCwWaveRef1 then return end;_G.__gacCwWaveRef1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_WAVE_REF] '..tostring(x))end + local ok,err=pcall(function() + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local p=typeof(CS.RPG.GameCore.BattleInstance):GetMethod('GetCurWaveParam',flags).ReturnType + local t=p.Assembly:GetType('NMBMHCNGCFG');if not t then log('MISSING');return end;log('TYPE '..t.FullName..' BASE '..tostring(t.BaseType)) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,31)do log('FIELD '..tostring(fs[i]))end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,31)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end) + if not ok then log('ERROR '..tostring(err))end;log('END') +end;capture()end diff --git a/tools/dump_embedded_proto.py b/tools/dump_embedded_proto.py new file mode 100644 index 0000000..4d1042d --- /dev/null +++ b/tools/dump_embedded_proto.py @@ -0,0 +1,70 @@ +"""Read a named embedded FileDescriptorProto without executing its carrier.""" +import argparse +import hashlib +import json +from pathlib import Path +from google.protobuf import descriptor_pb2, json_format + + +def varint(data, pos): + value = 0 + for shift in range(0, 70, 7): + byte = data[pos] + pos += 1 + value |= (byte & 127) << shift + if byte < 128: + return value, pos + raise ValueError('Oversized varint') + + +def extract(data, name): + encoded = name.encode() + occurrences = [] + pos = 0 + while (pos := data.find(encoded, pos)) >= 0: + if len(encoded) < 128 and data[pos-2:pos] == bytes([10, len(encoded)]): + occurrences.append(pos-2) + pos += len(encoded) + valid = [] + for start in occurrences: + pos = start + while pos < min(len(data), start+16*1024*1024): + tag, pos = varint(data, pos) + if tag & 7 != 2 or tag >> 3 not in (1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 14): + break + size, pos = varint(data, pos) + end = pos+size + if end > len(data): + break + if tag >> 3 == 12 and data[pos:end] in (b'proto2', b'proto3'): + desc = descriptor_pb2.FileDescriptorProto.FromString(data[start:end]) + if desc.name == name: + valid.append((start, end, desc)) + break + pos = end + if len(valid) != 1: + raise ValueError(f'Expected one complete descriptor {name}, found {len(valid)}') + return valid[0] + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument('--binary', type=Path, required=True) + p.add_argument('--descriptor', required=True) + p.add_argument('--output', type=Path, required=True) + args = p.parse_args() + data = args.binary.read_bytes() + start, end, desc = extract(data, args.descriptor) + args.output.mkdir(parents=True, exist_ok=True) + stem = Path(args.descriptor).stem + provenance = {'artifact_sha256':hashlib.sha256(data).hexdigest(), 'descriptor':desc.name, 'offset':start, 'length':end-start, 'descriptor_sha256':hashlib.sha256(data[start:end]).hexdigest()} + (args.output/(stem+'.descriptor.pb')).write_bytes(data[start:end]) + (args.output/(stem+'.descriptor.json')).write_text(json.dumps({'provenance':provenance, 'descriptor':json_format.MessageToDict(desc, preserving_proto_field_name=True)}, indent=2), encoding='utf8') + cmds = {v.name:v.number for enum in desc.enum_type if enum.name.startswith('Cmd') for v in enum.value} + if cmds: + (args.output/'cmdids.json').write_text(json.dumps({'provenance':provenance, 'commands':cmds},indent=2), encoding='utf8') + print(json.dumps({**provenance, 'enums':len(desc.enum_type), 'messages':len(desc.message_type), 'commands':len(cmds)})) + + +if __name__ == '__main__': + main() diff --git a/tools/dump_go_workflow.py b/tools/dump_go_workflow.py new file mode 100644 index 0000000..3f6d731 --- /dev/null +++ b/tools/dump_go_workflow.py @@ -0,0 +1,91 @@ +"""Read-only Go pclntab and direct-call inventory for an explicitly selected PE. + +This recovers compiled function names and machine-code call edges, not source +code or proof that a handler succeeds. CmdIDs require separate wire evidence. +""" +import argparse +import hashlib +import json +import pathlib +import struct + +from capstone import Cs, CS_ARCH_X86, CS_MODE_64 +from capstone.x86 import X86_OP_IMM + + +def dump(path, output): + data = path.read_bytes() + pe = struct.unpack_from('= 0: + try: + nfunc, nfiles, text, names, cu, files, pctab, pcln = struct.unpack_from('<8Q', data, start+8) + if 0 < nfunc < 1000000 and 0 < nfiles < 1000000 and start+pcln+(nfunc+1)*8 < len(data): + if text == 0: + text = image_base+next(rva for name,rva,_,_ in sections if name == '.text') + offset(text) + candidates.append((start, nfunc, text, names, pcln)) + except (ValueError, struct.error): + pass + start += 8 + if len(candidates) != 1: + raise ValueError(f'Expected one valid Go1.20+ pclntab, found {len(candidates)}') + header, nfunc, text, names, pcln = candidates[0] + funcs = [] + for i in range(nfunc): + entry, info = struct.unpack_from('#paths then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + for n=1,8 do + if s.index>#paths then CS.UnityEngine.Debug.Log('[GAC_EVENT_ASSET] END');return end + local path=paths[s.index];s.index=s.index+1 + CS.UnityEngine.Debug.Log('[GAC_EVENT_ASSET] '..tostring(CS.RPG.Client.GlobalVars.s_AssetMgr:Exists(path))..' '..path) + end +end;local ok,e=pcall(capture);if not ok then _G.__gacEventAssets1={index=99999};CS.UnityEngine.Debug.Log('[GAC_EVENT_ASSET] ERROR '..tostring(e))end end diff --git a/tools/event_stella_targeted_capture.lua b/tools/event_stella_targeted_capture.lua new file mode 100644 index 0000000..a2f2c54 --- /dev/null +++ b/tools/event_stella_targeted_capture.lua @@ -0,0 +1,49 @@ +-- Temporary analysis only. Keep outside scripts/ unless deliberately dispatched. +-- Twelve members per heartbeat, exact live module types, no scene factory calls. +do + local function capture() + local s=_G.__gacEventStellaMeta1 or {module=1,index=0,kind='fields'} + _G.__gacEventStellaMeta1=s + local names={'ComicDessertModule','ChenLingBattleModule','FiveDimModule'} + if s.module>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + if not manager then return end + local phase=typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local modules=CS.RPG.Client.GlobalVars.s_ModuleManager + if not modules then return end + local value=modules[names[s.module]] + local log=function(v) CS.UnityEngine.Debug.Log('[GAC_EVENT_STELLA_META] '..tostring(v)) end + if not value then log('MISSING '..names[s.module]);s.module=s.module+1;return end + if not s.target then + s.target=value:GetType();s.members=s.target:GetFields(flags) + log('TYPE '..s.target.FullName) + end + for n=1,12 do + if s.index>=s.members.Length then + if s.kind=='fields' then + s.kind='methods';s.index=0;s.members=s.target:GetMethods(flags) + return + end + log('END_TYPE '..s.target.FullName) + s.module=s.module+1;s.target=nil;s.members=nil;s.kind='fields';s.index=0 + if s.module>#names then log('END') end + return + end + local member=s.members[s.index];s.index=s.index+1 + if member.DeclaringType==s.target then + if s.kind=='fields' then + log('FIELD '..member.Name..' '..member.FieldType.FullName) + else + log('METHOD '..tostring(member)..' HANDLE '..tostring(member.MethodHandle.Value)) + end + end + end + end + local ok,e=pcall(capture) + if not ok then + _G.__gacEventStellaMeta1={module=99} + CS.UnityEngine.Debug.Log('[GAC_EVENT_STELLA_META] ERROR '..tostring(e)) + end +end diff --git a/tools/export_comic_dessert_catalog.py b/tools/export_comic_dessert_catalog.py new file mode 100644 index 0000000..39d79e0 --- /dev/null +++ b/tools/export_comic_dessert_catalog.py @@ -0,0 +1,129 @@ +"""Retain complete bounded ComicDessert/FiveDim repository captures offline. + +This does not unlock activities, fabricate initial progress or modify game saves. +An incomplete capture fails rather than generating a misleading catalog. +""" +import argparse +import hashlib +import json +import re +from pathlib import Path + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + inputs = parser.add_mutually_exclusive_group(required=True) + inputs.add_argument('--log', type=Path) + inputs.add_argument('--evidence', type=Path, help='Complete exact flat-getter Frida evidence') + parser.add_argument('--assembly-sha256', required=True) + parser.add_argument('--output', type=Path, required=True) + args = parser.parse_args() + if not re.fullmatch(r'[0-9a-f]{64}', args.assembly_sha256): + raise SystemExit('An exact verified assembly SHA256 is required') + raw = (args.evidence or args.log).read_bytes() + if args.evidence: + evidence = json.loads(raw) + observed = evidence['normalized_result'] + if observed.get('messages_truncated'): + raise SystemExit('Truncated evidence cannot produce a catalog') + tables, counts, complete, scripts = {}, {}, set(), set() + ended = False + for message in observed['messages']: + value = message.get('payload', {}) + if value.get('kind') == 'ATTACHED' and value.get('scope', '').startswith('two exact lazy flat getters'): + scripts.add(message['script_id']) + if message.get('script_id') not in scripts: + continue + kind, name = value.get('kind'), value.get('table') + if kind == 'ERROR': + raise SystemExit('Flat capture failed: ' + value.get('error', 'unknown')) + if kind == 'BEGIN': + if name in tables or name not in ('cycle', 'level') or not 0 < value['count'] <= 256: + raise SystemExit('Unexpected or empty table') + tables[name], counts[name] = [], value['count'] + elif kind == 'ROWS': + if name not in tables or name in complete: + raise SystemExit('Rows outside capture boundaries') + tables[name].extend(json.loads(row) for row in value['rows']) + elif kind == 'TABLE_END': + if name not in tables or len(tables[name]) != counts[name] or value['count'] != counts[name]: + raise SystemExit('Table count mismatch') + complete.add(name) + elif kind == 'END': + ended = True + if len(scripts) != 1 or not ended or complete != {'cycle', 'level'}: + raise SystemExit('Complete single flat capture required') + level_ids = {row['ID'] for row in tables['level']} + if len(level_ids) != len(tables['level']) or len({r['ID'] for r in tables['cycle']}) != len(tables['cycle']): + raise SystemExit('Duplicate configuration IDs') + if any(level not in level_ids for row in tables['cycle'] for level in row['LevelIDList']): + raise SystemExit('Cycle references missing levels') + result = { + 'format_version': 1, + 'client_assembly_sha256': args.assembly_sha256, + 'evidence_id': evidence['evidence_id'], + 'source': 'Current named ComicDessert CycleRow/LevelRow FromBinary -> dictionary Add -> lazy flat GetAll chains; no gameplay or scene factories', + 'capture_sha256': hashlib.sha256(raw).hexdigest(), + 'cycles': tables['cycle'], + 'levels': tables['level'], + } + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(result, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') + print(json.dumps({'cycles': len(tables['cycle']), 'levels': len(tables['level']), 'output': str(args.output)})) + return + marker = '[GAC_COMIC_STELLA_CONFIG] ' + repositories, expected, completed, configs = {}, {}, set(), {} + ended = False + for line in raw.decode('utf-8', errors='replace').splitlines(): + if marker not in line: + continue + value = line.split(marker, 1)[1] + if value.startswith('ERROR '): + raise SystemExit('Capture stopped: ' + value) + if value.startswith('BEGIN '): + match = re.fullmatch(r'BEGIN (\w+) count=(\d+)', value) + if not match or match[1] in repositories: + raise SystemExit('Repeated/incompatible capture: use a single run') + name, count = match[1], int(match[2]) + if count > 256: + raise SystemExit('Repository outside capture bound') + repositories[name], expected[name] = [], count + elif value.startswith('ROW '): + _, name, body = value.split(' ', 2) + if name not in repositories or name in completed: + raise SystemExit('Repository row outside its bounded run') + repositories[name].append(json.loads(body)) + elif value.startswith('END_REPOSITORY '): + match = re.fullmatch(r'END_REPOSITORY (\w+) rows=(\d+)', value) + if not match or match[1] not in repositories: + raise SystemExit('Unexpected repository completion') + name = match[1] + if len(repositories[name]) != int(match[2]) or len(repositories[name]) != expected[name]: + raise SystemExit('Repository row count mismatch: ' + name) + completed.add(name) + elif value.startswith('FIVEDIM_CONFIG '): + _, name, body = value.split(' ', 2) + if name in configs: + raise SystemExit('Duplicate FiveDim config capture: ' + name) + configs[name] = json.loads(body) + elif value == 'END': + ended = True + required = {'CycleConfigRepository', 'LevelConfigRepository'} + if not ended or completed != required or not all(repositories.get(name) for name in required): + raise SystemExit('Complete nonempty cycle and level repositories are required') + result = { + 'format_version': 1, + 'client_assembly_sha256': args.assembly_sha256, + 'source': 'Read-only existing ComicDessert repositories and selected FiveDim config; no gameplay method invocation', + 'capture_sha256': hashlib.sha256(raw).hexdigest(), + 'repositories': repositories, + 'five_dim_config': configs, + } + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(result, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') + print(json.dumps({'output': str(args.output), 'rows': {k: len(v) for k, v in repositories.items()}, + 'five_dim_config': sorted(configs)}, ensure_ascii=False)) + + +if __name__ == '__main__': + main() diff --git a/tools/export_cw_monsters.py b/tools/export_cw_monsters.py new file mode 100644 index 0000000..3e44188 --- /dev/null +++ b/tools/export_cw_monsters.py @@ -0,0 +1,32 @@ +"""Import bounded, identity-checked current Client monster row captures.""" +import argparse +import hashlib +import json +from pathlib import Path + +p = argparse.ArgumentParser(description=__doc__) +for name in ('capture', 'catalog', 'output'): + p.add_argument('--' + name, type=Path, required=True) +a = p.parse_args() +capture = json.loads(a.capture.read_text(encoding='utf-8-sig')) +catalog = json.loads(a.catalog.read_text(encoding='utf-8-sig')) +rows = {} +for item in capture['rows']: + row = item['row'] + key = item['requested_id'] + if key != row['MonsterID'] or key in rows or not key: + raise ValueError('Monster row identity differs/duplicated') + for star in range(1, 5): + if row['Star' + str(star) + 'EliteGroup3'] <= 0: + raise ValueError('Monster star group missing') + rows[key] = row +if len(set(capture['plan'])) != len(capture['plan']) or set(rows) != set(capture['plan']): + raise ValueError('Incomplete monster capture plan') +result = dict(format_version=1, target_client_version=catalog['client_version'], + target_assembly_sha256=catalog['provenance']['game_assembly_sha256'], + source_capture_sha256=hashlib.sha256(a.capture.read_bytes()).hexdigest(), + scope='Current saved run camps and its reference encounter camp only; not all monster rows.', + encounter_camp_policy='uniform_compatible_active_camp_same_tier', + entries=[rows[k] for k in sorted(rows)]) +a.output.write_text(json.dumps(result, indent=2) + '\n', encoding='utf-8') +print('Exported', len(rows), 'current monster rows') diff --git a/tools/export_cw_trials.py b/tools/export_cw_trials.py new file mode 100644 index 0000000..f10a620 --- /dev/null +++ b/tools/export_cw_trials.py @@ -0,0 +1,37 @@ +"""Export completed, identity-checked native SpecialAvatar rows for CW.""" +import argparse +import hashlib +import json +from pathlib import Path + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument('--capture', type=Path, required=True) + p.add_argument('--catalog', type=Path, required=True) + p.add_argument('--output', type=Path, required=True) + a = p.parse_args() + raw = a.capture.read_bytes() + lines = raw.decode('utf-8-sig').splitlines() + if '[GAC_CW_TRIAL_ROW] END' not in lines or any('[GAC_CW_TRIAL_ROW] ERROR' in l for l in lines): + raise ValueError('native trial capture did not complete') + rows = [json.loads(l.split(' ROW ', 1)[1]) for l in lines if '[GAC_CW_TRIAL_ROW] ROW ' in l] + c = json.loads(a.catalog.read_text(encoding='utf-8-sig')) + roles = {r['Config']['SpecialAvatarID']: r['Config']['AvatarID'] for r in c['active_handbook_default_roles']} + seen = set() + for r in rows: + key = r['SpecialAvatarID'], r['WorldLevel'] + if key in seen or roles.get(key[0]) != r['AvatarID'] or not r['Level']: + raise ValueError('native trial identity invalid/duplicate') + seen.add(key) + if not rows: + raise ValueError('trial capture empty') + result = dict(format_version=1, target_client_version=c['client_version'], target_assembly_sha256=c['provenance']['game_assembly_sha256'], + source_capture_sha256=hashlib.sha256(raw).hexdigest(), + scope='Current catalog fake-avatar trials at captured world levels. SpecialAvatarExcelTable.GetData, bounded flat-row access; no scene loader. Other trial profiles remain uncaptured.', entries=rows) + a.output.write_text(json.dumps(result, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') + print(f'Exported {len(rows)} current trial rows') + + +if __name__ == '__main__': + main() diff --git a/tools/export_ffgo_bonfire.py b/tools/export_ffgo_bonfire.py new file mode 100644 index 0000000..de10def --- /dev/null +++ b/tools/export_ffgo_bonfire.py @@ -0,0 +1,58 @@ +"""Project FFGO's labelled Bonfire reference tables without copying a run. + +The target identity is a compatibility gate for the existing server catalog, +not a claim that these rows were captured from that Client assembly. +""" +import argparse +import hashlib +import json +from pathlib import Path + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument('--excel', type=Path, required=True) + p.add_argument('--custom', type=Path, required=True) + p.add_argument('--catalog', type=Path, required=True) + p.add_argument('--source-binary-sha256', required=True) + p.add_argument('--output', type=Path, required=True) + a = p.parse_args() + if len(bytes.fromhex(a.source_binary_sha256)) != 32: + raise ValueError('Expected SHA256 identity') + excel_raw, custom_raw = a.excel.read_bytes(), a.custom.read_bytes() + excel, custom = json.loads(excel_raw), json.loads(custom_raw) + catalog = json.loads(a.catalog.read_bytes()) + def rows(name, fields): + result = [] + for row in excel[name]: + copy = dict(row) + for field in fields: + if field in copy: + copy[field] = int(copy[field]) + result.append(copy) + return result + configs = {k:v for k,v in custom['config_files'].items() + if v.get('Engine') == 'TeaBreakOption'} + result = { + 'format_version': 1, + 'target_client_version': catalog['client_version'], + 'target_assembly_sha256': catalog['provenance']['game_assembly_sha256'], + 'source_binary_sha256': a.source_binary_sha256, + 'source_kind': 'reference-implementation', + 'source': 'FFGO embedded GridFight Excel rows plus FFGO declarative TeaBreakOption recipes; not original Client scripts or a native Client capture.', + 'compatibility_scope': 'Event IDs must also be present on the active Client node; no reference route or saved run is imported. Only explicitly supported effects execute.', + 'source_excel_sha256': hashlib.sha256(excel_raw).hexdigest(), + 'source_custom_sha256': hashlib.sha256(custom_raw).hexdigest(), + 'tables': { + 'events': rows('grid_fight_bonfire_event', ['ID','PetPalID','DialogID']), + 'options': rows('grid_fight_bonfire_event_option', ['EventID','OptionID','DialogID']), + 'heal': rows('grid_fight_bonfire_heal', ['ChapterID','HealNum']), + }, + 'configs': configs, + } + a.output.write_text(json.dumps(result, ensure_ascii=False, indent=2)+'\n', encoding='utf8') + print(json.dumps({k:len(v) for k,v in result['tables'].items()} | {'recipes':len(configs)})) + + +if __name__ == '__main__': + main() diff --git a/tools/export_ffgo_embedded_resources.py b/tools/export_ffgo_embedded_resources.py new file mode 100644 index 0000000..97b22ab --- /dev/null +++ b/tools/export_ffgo_embedded_resources.py @@ -0,0 +1,113 @@ +"""Extract reference Excel/custom data offline; never execute the reference binary. + +Requires protobuf plus the sibling dump_embedded_proto.py. Output is evidence, +not an automatically trusted replacement for current Client configuration. +""" +import argparse +import hashlib +import json +import re +import zlib +from pathlib import Path + +from google.protobuf import descriptor_pool, json_format, message_factory +from dump_embedded_proto import extract + + +def sha(data): + return hashlib.sha256(data).hexdigest() + + +def save_json(path, value): + path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--binary", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + binary = args.binary.read_bytes() + args.output.mkdir(parents=True, exist_ok=True) + pool = descriptor_pool.DescriptorPool() + descriptors = [] + for name in ("gridfight_excel", "rogue_tourn_excel", "resources"): + start, end, desc = extract(binary, "proto/" + name + ".proto") + pool.Add(desc) + descriptors.append({"name": desc.name, "offset": start, + "length": end - start, "sha256": sha(binary[start:end])}) + excel_type = message_factory.GetMessageClass(pool.FindMessageTypeByName("excel.ExcelData")) + manifest = {"format_version": 1, "binary_sha256": sha(binary), + "binary_size": len(binary), "descriptors": descriptors, + "resources": [], "limitations": [ + "Reference binary data; no runtime execution or Client verification.", + "Custom config files are reference-authored rules, not original Client JSON.", + "int64 protobuf fields remain JSON strings to retain exact values."]} + found = set() + # Exact gzip headers, finite carrier size and 64 MiB output cap per candidate. + for match in re.finditer(b"\x1f\x8b\x08\x00", binary): + offset = match.start() + try: + decoder = zlib.decompressobj(31) + raw = decoder.decompress(binary[offset:], 64 * 1024 * 1024) + if not decoder.eof: + continue + compressed_length = len(binary) - offset - len(decoder.unused_data) + if raw.startswith(b"{"): + value = json.loads(raw) + if not isinstance(value, dict) or "config_files" not in value: + continue + stem = "gridfight-custom-data" + else: + message = excel_type.FromString(raw) + if not message.HasField("grid_fight"): + continue + value = json_format.MessageToDict(message, preserving_proto_field_name=True) + stem = "excel-data" + if stem in found: + raise RuntimeError("Ambiguous embedded resource: " + stem) + found.add(stem) + save_json(args.output / (stem + ".json"), value) + if stem == "excel-data": + save_json(args.output / "gridfight-excel-data.json", value["grid_fight"]) + manifest["resources"].append({"output": stem + ".json", "offset": offset, + "compressed_length": compressed_length, "compressed_sha256": sha(binary[offset:offset+compressed_length]), + "uncompressed_length": len(raw), "uncompressed_sha256": sha(raw)}) + except (zlib.error, ValueError, UnicodeError): + continue + except Exception as error: + # A random gzip-like sequence need not be a protobuf resource. + if type(error).__name__ != "DecodeError": + raise + if found != {"excel-data", "gridfight-custom-data"}: + raise RuntimeError("Expected unique Excel and CW custom resources; got " + repr(found)) + # This separate JSON supplement is not part of ExcelData. Locate its named + # root rather than baking in one build's offset or any game identifiers. + supplements = [] + for match in re.finditer(rb'\{\s*"challenge_peak_extra_data"\s*:', binary): + candidate = binary[match.start():match.start()+1024*1024] + try: + # Decode only through the JSON terminator; following PE bytes are + # unrelated and may not be valid UTF-8. + text = candidate.decode("utf-8", errors="surrogateescape") + value, end = json.JSONDecoder().raw_decode(text) + raw = text[:end].encode("utf-8", errors="surrogateescape") + if isinstance(value.get("challenge_peak_extra_data"), list): + supplements.append((match.start(), raw, value)) + except (ValueError, UnicodeError): + continue + if len(supplements) != 1: + raise RuntimeError("Expected unique named Peak scene supplement") + offset, raw, value = supplements[0] + save_json(args.output / "challenge_peak_extra_data.json", { + "binary_sha256": sha(binary), "source_file_offset": hex(offset), + "decoded_byte_length": len(raw), "data": value}) + manifest["resources"].append({"output": "challenge_peak_extra_data.json", + "offset": offset, "uncompressed_length": len(raw), + "uncompressed_sha256": sha(raw), "encoding": "utf-8-json"}) + save_json(args.output / "resource-manifest.json", manifest) + print(json.dumps({"binary_sha256": manifest["binary_sha256"], "resources": manifest["resources"]})) + + +if __name__ == "__main__": + main() diff --git a/tools/export_ffgo_orb_recipes.py b/tools/export_ffgo_orb_recipes.py new file mode 100644 index 0000000..a9d4545 --- /dev/null +++ b/tools/export_ffgo_orb_recipes.py @@ -0,0 +1,22 @@ +"""Extract declarative Orb recipes from explicit, previously decoded reference files.""" +import argparse +import hashlib +import json +from pathlib import Path + +p=argparse.ArgumentParser(description=__doc__) +p.add_argument('--excel',type=Path,required=True) +p.add_argument('--custom',type=Path,required=True) +p.add_argument('--binary-sha256',required=True) +p.add_argument('--output',type=Path,required=True) +a=p.parse_args() +if len(bytes.fromhex(a.binary_sha256))!=32: raise ValueError('Expected SHA256') +excel=json.loads(a.excel.read_text(encoding='utf8')) +custom=json.loads(a.custom.read_text(encoding='utf8')) +orbs=[{'id':int(x['OrbID']),'bonus_id':int(x['BonusID'])} for x in excel['grid_fight_orb']] +base=[{'id':int(x['BonusID']),'kind':x.get('BonusType',''),'amount':int(x.get('BonusTypeParam','0'))} for x in excel['grid_fight_basic_bonus']] +recipes=[v for k,v in custom['config_files'].items() if k.startswith('Orb/') and v.get('Engine')=='Orb'] +equipment=[{'id':int(x['ID']),'category':x.get('EquipCategory','')} for x in excel['grid_fight_equipment']] +out={'format_version':1,'source_kind':'reference-server-authored-orb-recipes','binary_sha256':a.binary_sha256,'excel_json_sha256':hashlib.sha256(a.excel.read_bytes()).hexdigest(),'custom_json_sha256':hashlib.sha256(a.custom.read_bytes()).hexdigest(),'limitations':['Reference-authored recipes are not a claim of captured Client reward odds. Unsupported reward kinds are rejected without consuming an Orb.'], 'orbs':orbs,'basic_bonuses':base,'equipment':equipment,'recipes':recipes} +a.output.write_text(json.dumps(out,indent=2,ensure_ascii=True)+'\n',encoding='utf8') +print(json.dumps({'orbs':len(orbs),'basic_bonuses':len(base),'custom_recipes':len(recipes)})) diff --git a/tools/export_ffgo_penalties.py b/tools/export_ffgo_penalties.py new file mode 100644 index 0000000..41f6fdd --- /dev/null +++ b/tools/export_ffgo_penalties.py @@ -0,0 +1,31 @@ +"""Export labelled reference penalty rules; never imports a saved run.""" +import argparse +import hashlib +import json +from pathlib import Path + +p = argparse.ArgumentParser(description=__doc__) +p.add_argument('--excel', type=Path, required=True) +p.add_argument('--catalog', type=Path, required=True) +p.add_argument('--binary-sha256', required=True) +p.add_argument('--output', type=Path, required=True) +a = p.parse_args() +if len(bytes.fromhex(a.binary_sha256)) != 32: + raise ValueError('Expected SHA256') +raw = a.excel.read_bytes() +c = json.loads(a.catalog.read_bytes()) +fields = ('ID', 'ThresholdPosition', 'ThresholdFailPlayerHPPenalty', + 'ThresholdPassBasicPlayerHPPenalty', 'ProgressPenaltyCoefficient') +rows = [{k: int(r.get(k, 0)) for k in fields} + for r in json.loads(raw)['grid_fight_penalty_rule']] +a.output.write_text(json.dumps({ + 'format_version': 1, + 'target_client_version': c['client_version'], + 'target_assembly_sha256': c['provenance']['game_assembly_sha256'], + 'source_kind': 'reference-implementation; captured current rules take precedence', + 'reference_executable_sha256': a.binary_sha256, + 'excel_dump_sha256': hashlib.sha256(raw).hexdigest(), + 'source_table': 'grid_fight_penalty_rule', + 'penalty_rules': rows, +}, indent=2) + '\n', encoding='utf8') +print(f'Exported {len(rows)} reference penalties') diff --git a/tools/export_gacha_loot_catalog.py b/tools/export_gacha_loot_catalog.py new file mode 100644 index 0000000..d0cc3f9 --- /dev/null +++ b/tools/export_gacha_loot_catalog.py @@ -0,0 +1,36 @@ +"""Export complete current ItemRow rarity evidence for inventory LC candidates.""" +import argparse +import hashlib +import json +import re +from pathlib import Path + +p = argparse.ArgumentParser(description=__doc__) +p.add_argument('--log', type=Path, required=True) +p.add_argument('--inventory', type=Path, required=True) +p.add_argument('--client-catalog', type=Path, required=True) +p.add_argument('--output', type=Path, required=True) +a = p.parse_args() +raw = a.log.read_bytes() +text = raw.decode('utf-8', errors='replace') +expected = {row['id'] for row in json.loads(a.inventory.read_text(encoding='utf-8'))['lightcones']} +identity = json.loads(a.client_catalog.read_text(encoding='utf-8')) +if not re.fullmatch(r'[0-9a-f]{64}', identity.get('client_assembly_sha256', '')) or not identity.get('evidence_id'): + raise SystemExit('Client catalog provenance missing') +rows = {} +for id_text, rarity_text in re.findall(r'\[GAC_LOOT_RARITY\] id=(\d+) rarity=(\d+)', text): + item, rarity = int(id_text), int(rarity_text) + if item not in expected or item in rows or rarity not in (3, 4, 5): + raise SystemExit('Duplicate, invalid or unexpected captured LC') + rows[item] = rarity +if rows.keys() != expected or f'[GAC_LOOT_RARITY] END count={len(expected)}' not in text: + raise SystemExit('Incomplete capture') +resource = { + 'format_version': 1, + 'client_assembly_sha256': identity['client_assembly_sha256'], + 'source': 'Current Client ItemHelper.GetItem(candidate ID).Row.Rarity, bounded non-battle capture; candidate IDs from InventoryItemConfig, no rarity inference from IDs', + 'capture_sha256': hashlib.sha256(raw).hexdigest(), + 'lightcones': [{'id': item, 'rarity': rows[item]} for item in sorted(rows)], +} +a.output.write_text(json.dumps(resource, indent=2) + '\n', encoding='utf-8') +print(json.dumps({'rows': len(rows), 'rarities': {r: sum(v == r for v in rows.values()) for r in (3, 4, 5)}})) diff --git a/tools/find_pe_direct_calls.py b/tools/find_pe_direct_calls.py new file mode 100644 index 0000000..c4fd296 --- /dev/null +++ b/tools/find_pe_direct_calls.py @@ -0,0 +1,21 @@ +"""Find bounded E8/E9 references to an explicit AMD64 PE code RVA, offline.""" +import argparse,re,struct +from pathlib import Path +p=argparse.ArgumentParser(description=__doc__) +p.add_argument('--binary',type=Path,required=True) +p.add_argument('--target',type=lambda x:int(x,0),action='append',required=True) +a=p.parse_args();b=a.binary.read_bytes();pe=struct.unpack_from('1:print('target',hex(target)) + print('\n'.join(hex(x)for x in refs[:128]));print('references',len(refs)) diff --git a/tools/find_pe_displacement.py b/tools/find_pe_displacement.py new file mode 100644 index 0000000..dfd28be --- /dev/null +++ b/tools/find_pe_displacement.py @@ -0,0 +1,37 @@ +"""Offline candidates for a caller-selected 32-bit code displacement. + +Results are byte matches, not proven instructions; disassemble their bounded +functions before making any call or interpretation. +""" +import argparse +import struct +from pathlib import Path + +p = argparse.ArgumentParser(description=__doc__) +p.add_argument('--binary', type=Path, required=True) +p.add_argument('--value', type=lambda s: int(s, 0), required=True) +a = p.parse_args() +b = a.binary.read_bytes() +pe = struct.unpack_from('= 128: + raise SystemExit('Candidate bound reached') + pos += 1 +print('candidates', found) diff --git a/tools/find_pe_immediate_context.py b/tools/find_pe_immediate_context.py new file mode 100644 index 0000000..3c351d0 --- /dev/null +++ b/tools/find_pe_immediate_context.py @@ -0,0 +1,81 @@ +"""Read-only instruction contexts for an exact AMD64 PE immediate candidate. + +Uses exception-table bounds and validates byte candidates against disassembly. +No native execution; output is not a proof of a field/command's semantics. +""" +import argparse +import bisect +import hashlib +import struct +from pathlib import Path +from capstone import Cs, CS_ARCH_X86, CS_MODE_64 + +p = argparse.ArgumentParser(description=__doc__) +p.add_argument('--binary', type=Path, required=True) +p.add_argument('--value', type=lambda s: int(s, 0), required=True) +p.add_argument('--width', type=int, choices=(2, 4), default=4) +p.add_argument('--output', type=Path, required=True) +a = p.parse_args() +b = a.binary.read_bytes() +pe = struct.unpack_from(' 128: + raise SystemExit('Candidate bound reached') +a.output.write_text('\n'.join(lines)+'\n', encoding='utf-8') +print(f'Wrote {len(seen)} instruction contexts to {a.output}') diff --git a/tools/find_pe_rip_references.py b/tools/find_pe_rip_references.py new file mode 100644 index 0000000..0e0377e --- /dev/null +++ b/tools/find_pe_rip_references.py @@ -0,0 +1,26 @@ +"""Read-only references to one explicit AMD64 PE RIP-relative data slot.""" +import argparse +import re +import struct +from pathlib import Path + +p=argparse.ArgumentParser(description=__doc__) +p.add_argument('--binary',type=Path,required=True) +p.add_argument('--target',type=lambda x:int(x,0),required=True) +a=p.parse_args() +b=a.binary.read_bytes() +pe=struct.unpack_from('#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.FiveDimModule + local cfg=m:GetType():GetField('_GameConfig',flags):GetValue(m) + if not cfg then return end + local name=names[s.index];s.index=s.index+1 + local value=cfg:GetType():GetField(name,flags):GetValue(cfg) + local text=CS.Newtonsoft.Json.JsonConvert.SerializeObject(value) + if #text>65536 then error('config output bound')end + CS.UnityEngine.Debug.Log('[GAC_FIVEDIM_MINI_CONFIG] '..name..' '..text) + if s.index>#names then CS.UnityEngine.Debug.Log('[GAC_FIVEDIM_MINI_CONFIG] END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacFiveDimMiniConfig1={index=99};CS.UnityEngine.Debug.Log('[GAC_FIVEDIM_MINI_CONFIG] ERROR '..tostring(e))end end diff --git a/tools/gacha_active_tab_metadata.lua b/tools/gacha_active_tab_metadata.lua new file mode 100644 index 0000000..42d7163 --- /dev/null +++ b/tools/gacha_active_tab_metadata.lua @@ -0,0 +1,17 @@ +-- Read the exact page instance observed in its creation callback. +do + if not _G.__gacActiveTabMeta1 then + local trace=_G.__gacWarpCreateTrace1 + local page=trace and trace.page + if page then + _G.__gacActiveTabMeta1=true + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_ACTIVE_TAB] '..tostring(v))end + log('PAGE_BINDER_NAME '..type(page._binder and page._binder.txt_pool_name)) + local count=0 + for k,tab in pairs(page._gacha_tab_items or {})do + count=count+1;if count>8 then break end + log('TAB '..tostring(k)..' TYPE '..type(tab)..' POOL '..tostring(tab._gacha_pool_data and tab._gacha_pool_data.GachaID)..' CONTENT '..type(tab._binder and tab._binder.node_content)) + end + end + end +end diff --git a/tools/gacha_asset_exists.lua b/tools/gacha_asset_exists.lua new file mode 100644 index 0000000..df4aef6 --- /dev/null +++ b/tools/gacha_asset_exists.lua @@ -0,0 +1,21 @@ +-- Query only six paths from the captured table, one per heartbeat. No loading. +do local function capture() + local s=_G.__gacGachaAssetExists1 or {index=1};_G.__gacGachaAssetExists1=s + local paths={ + 'UI/Drawcard/GachaPanel/StandardGacha_1001.prefab', + 'UI/Drawcard/GachaPanel/NoviceGacha_4001.prefab', + 'UI/Drawcard/GachaPanelLimited/AvatarGacha_1102.prefab', + 'UI/Drawcard/GachaPanelLimited/LightConeGacha_23001.prefab', + 'UI/Drawcard/GachaPanelLimited/AvatarGacha_1204.prefab', + 'UI/Drawcard/GachaPanelLimited/LightConeGacha_23010.prefab' + } + if s.index>#paths then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local path=paths[s.index];s.index=s.index+1 + local result=CS.RPG.Client.GlobalVars.s_AssetMgr:Exists(path) + CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_EXISTS] '..path..' '..tostring(result)) + if s.index>#paths then CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_EXISTS] END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaAssetExists1={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_EXISTS] ERROR '..tostring(e))end end diff --git a/tools/gacha_asset_index_metadata.lua b/tools/gacha_asset_index_metadata.lua new file mode 100644 index 0000000..bb73403 --- /dev/null +++ b/tools/gacha_asset_index_metadata.lua @@ -0,0 +1,21 @@ +-- Read only metadata for named asset services; one type per heartbeat. +do local function capture() + local s=_G.__gacGachaAssetMetadata3 or {index=1};_G.__gacGachaAssetMetadata3=s + local names={'JNLPFBDFNIJ','ODMILIPHJGD','BOPECJBFFNJ'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local name=names[s.index];s.index=s.index+1 + local t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType(name) or CS.System.Type.GetType(name..', RPG.AssetSystem') + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_META] '..tostring(x))end + log('TYPE '..name..' '..tostring(t)) + if t then + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,159)do local f=fs[i];if name~='RPG.Client.GlobalVars' or f.Name:lower():find('asset') then log('FIELD '..f.Name..' '..f.FieldType.FullName)end end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,191)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m))end end + end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaAssetMetadata3={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_META] ERROR '..tostring(e))end end + + diff --git a/tools/gacha_asset_metadata.lua b/tools/gacha_asset_metadata.lua new file mode 100644 index 0000000..caa1c62 --- /dev/null +++ b/tools/gacha_asset_metadata.lua @@ -0,0 +1,19 @@ +-- Read only metadata for named asset services; one type per heartbeat. +do local function capture() + local s=_G.__gacGachaAssetMetadata1 or {index=1};_G.__gacGachaAssetMetadata1=s + local names={'RPG.Client.AssetSystem.AssetSystem','RPG.Client.CachedAssetLoader','RPG.Client.AssetSystem.AsbManifestV5_Managed','RPG.Client.AssetSystem.AssetManager','RPG.Client.GlobalVars'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local name=names[s.index];s.index=s.index+1 + local t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType(name) + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_META] '..tostring(x))end + log('TYPE '..name..' '..tostring(t)) + if t then + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,159)do local f=fs[i];if name~='RPG.Client.GlobalVars' or f.Name:lower():find('asset') then log('FIELD '..f.Name..' '..f.FieldType.FullName)end end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,191)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m))end end + end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaAssetMetadata1={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_META] ERROR '..tostring(e))end end diff --git a/tools/gacha_asset_services.lua b/tools/gacha_asset_services.lua new file mode 100644 index 0000000..1f71d2c --- /dev/null +++ b/tools/gacha_asset_services.lua @@ -0,0 +1,20 @@ +-- Read only metadata for named asset services; one type per heartbeat. +do local function capture() + local s=_G.__gacGachaAssetMetadata2 or {index=1};_G.__gacGachaAssetMetadata2=s + local names={'RPG.Client.AssetMgr','RPG.Client.AssetSystem.AssetLoader','RPG.Client.AssetSystem.AsbManifestV5_Managed'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local name=names[s.index];s.index=s.index+1 + local t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType(name) or CS.System.Type.GetType(name..', RPG.AssetSystem') + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_META] '..tostring(x))end + log('TYPE '..name..' '..tostring(t)) + if t then + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,159)do local f=fs[i];if name~='RPG.Client.GlobalVars' or f.Name:lower():find('asset') then log('FIELD '..f.Name..' '..f.FieldType.FullName)end end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,191)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m))end end + end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaAssetMetadata2={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_ASSET_META] ERROR '..tostring(e))end end + diff --git a/tools/gacha_clone_registration.lua b/tools/gacha_clone_registration.lua new file mode 100644 index 0000000..153994b --- /dev/null +++ b/tools/gacha_clone_registration.lua @@ -0,0 +1,56 @@ +-- Temporary single-banner proof. Uses initialized Standard pool state and +-- native grouping. Caller supplies one resource-backed banner in a separate +-- generated prelude; no IDs or asset paths are invented here. +do + local function run() + if _G.__gacCloneRegistration1 then return end + local banner=_G.__GAC_SINGLE_BANNER_PROOF + if not banner then return end + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.GachaModule + local pools=m and m:GetSortedGachaPoolDatas() + if not pools or pools.Count==0 then return end + _G.__gacCloneRegistration1=true + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_GACHA_CLONE_REGISTER] '..tostring(v))end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local invoke=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),0) + local empty=CS.System.Array.CreateInstance(typeof(CS.System.Object),0) + local clone=typeof(CS.System.Object):GetMethod('MemberwiseClone',flags) + local template=nil + for i=0,pools.Count-1 do + if pools[i].GachaID==banner.gacha_id then log('ALREADY_PRESENT');return end + if pools[i]:GetType().FullName=='RPG.Client.StandardGachaPoolData'then template=pools[i]end + end + if not template then error('initialized Standard template absent')end + local pool=clone:Invoke(template,invoke,nil,empty,nil) + local row=clone:Invoke(template.Row,invoke,nil,empty,nil) + row.GachaID=banner.gacha_id + local base=template:GetType().BaseType + base:GetField('k__BackingField',flags):SetValue(pool,row) + pool.SingleDrawData=clone:Invoke(template.SingleDrawData,invoke,nil,empty,nil) + pool.MultiDrawData=clone:Invoke(template.MultiDrawData,invoke,nil,empty,nil) + local t=m:GetType() + local list=t:GetField('_GachaPoolDatasThisVersion',flags):GetValue(m) + local groups=t:GetField('_GachaGroupDataDict',flags):GetValue(m) + local before={};local it=groups.Keys:GetEnumerator() + while it:MoveNext()do before[tostring(it.Current)]=true end + it:Dispose() + local count=list.Count + local ok,err=pcall(function() + list:Add(pool) + local args=CS.System.Array.CreateInstance(typeof(CS.System.Object),1);args[0]=pool + t:GetMethod('_AddGachaPoolDataToGroupDict',flags):Invoke(m,invoke,nil,args,nil) + if m:GetGachaPoolData(banner.gacha_id)~=pool then error('pool lookup did not retain clone')end + log('REGISTERED pool='..pool.GachaID..' concrete='..pool:GetType().FullName..' pools='..m:GetSortedGachaPoolDatas().Count..' groups='..m:GetSortedGachaGroupDatas().Count) + _G.__GAC_REGISTERED_BANNER_PROOF={pool=pool,banner=banner} + end) + if not ok then + list:Remove(pool) + local remove={};local iter=groups.Keys:GetEnumerator() + while iter:MoveNext()do if not before[tostring(iter.Current)]then remove[#remove+1]=iter.Current end end + iter:Dispose();for _,id in ipairs(remove)do groups:Remove(id)end + log('ROLLED_BACK list='..list.Count..' original='..count..' ERROR '..tostring(err)) + end + end + local ok,e=pcall(run) + if not ok then _G.__gacCloneRegistration1=true;CS.UnityEngine.Debug.Log('[GAC_GACHA_CLONE_REGISTER] ERROR '..tostring(e))end +end diff --git a/tools/gacha_function_constants.lua b/tools/gacha_function_constants.lua new file mode 100644 index 0000000..3d0c9ed --- /dev/null +++ b/tools/gacha_function_constants.lua @@ -0,0 +1,15 @@ +-- Read constants of three already loaded Lua functions, one per heartbeat. +do local function capture() + local s=_G.__gacGachaConstants1 or {index=1};_G.__gacGachaConstants1=s + local names={'_create_pools_panel','_on_tab_change','_refresh'} + if s.index>#names then return end + local m=package.loaded['Ui.Gacha.GachaMainPage'];if type(m)~='table'then return end + local name=names[s.index];s.index=s.index+1 + local fn=m[name];local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GACHA_CONST] '..tostring(x))end + if type(fn)~='function'then log(name..' missing');return end + local ok,util=pcall(require,'jit.util') + if not ok then log('NO_JIT_UTIL '..tostring(util));return end + local info=util.funcinfo(fn);log('FUNCTION '..name..' constants='..tostring(info.gcconsts)) + for i=1,math.min(info.gcconsts or 0,96)do local value=util.funck(fn,-i);if type(value)=='string'then log('STRING '..value)end end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaConstants1={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_CONST] ERROR '..tostring(e))end end diff --git a/tools/gacha_group_validity.lua b/tools/gacha_group_validity.lua new file mode 100644 index 0000000..d83ee3e --- /dev/null +++ b/tools/gacha_group_validity.lua @@ -0,0 +1,19 @@ +-- Inspect native validity methods of the installed clone; read-only. +do local function capture() + if _G.__gacGroupValidity1 then return end + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.GachaModule + if not m then return end + local groups=m:GetSortedGachaGroupDatas() + if groups.Count<1 then return end + _G.__gacGroupValidity1=true + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_GROUP_VALIDITY] '..tostring(v))end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local g=groups[groups.Count-1] + log('TYPE '..g:GetType().FullName) + for _,name in ipairs({'IsValid','IsFeatureClosed'})do + local f=g:GetType():GetMethod(name,flags) + log('METHOD '..name..' HANDLE '..tostring(f and f.MethodHandle.Value)) + end + local fields=g:GetType():GetFields(flags) + for i=0,math.min(fields.Length-1,15)do local f=fields[i];if not f.IsStatic then log('FIELD '..f.Name..' TYPE '..f.FieldType.FullName..' HANDLE '..tostring(f.FieldHandle.Value))end end +end local ok,e=pcall(capture);if not ok then CS.UnityEngine.Debug.Log('[GAC_GROUP_VALIDITY] ERROR '..tostring(e))end end diff --git a/tools/gacha_image_constructor_probe.lua b/tools/gacha_image_constructor_probe.lua new file mode 100644 index 0000000..32814ee --- /dev/null +++ b/tools/gacha_image_constructor_probe.lua @@ -0,0 +1,16 @@ +-- One detached native UI object, immediately destroyed; no live page changes. +do + if not _G.__gacImageCtor1 then + _G.__gacImageCtor1=true + local obj + local ok,e=pcall(function() + obj=CS.UnityEngine.GameObject('GaCDetachedImageProbe',typeof(CS.UnityEngine.RectTransform),typeof(CS.UnityEngine.UI.Image)) + obj:SetActive(false) + local image=obj:GetComponent(typeof(CS.UnityEngine.UI.Image)) + local rect=obj:GetComponent(typeof(CS.UnityEngine.RectTransform)) + CS.UnityEngine.Debug.Log('[GAC_IMAGE_CTOR] image='..tostring(image~=nil)..' rect='..tostring(rect~=nil)) + end) + if obj then CS.UnityEngine.Object.Destroy(obj) end + if not ok then CS.UnityEngine.Debug.Log('[GAC_IMAGE_CTOR] ERROR '..tostring(e))end + end +end diff --git a/tools/gacha_item_data_probe.lua b/tools/gacha_item_data_probe.lua new file mode 100644 index 0000000..fad9b89 --- /dev/null +++ b/tools/gacha_item_data_probe.lua @@ -0,0 +1,42 @@ +-- Named metadata only. No pool/list/UI/save mutation. +do + local function capture() + if _G.__GAC_GACHA_ITEM_DATA_PROBE then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local module=CS.RPG.Client.GlobalVars.s_ModuleManager.GachaModule + local pools=module and module:GetSortedGachaPoolDatas() + if not pools or pools.Count==0 then return end + _G.__GAC_GACHA_ITEM_DATA_PROBE=true + local log=function(value)CS.UnityEngine.Debug.Log('[GAC_GACHA_ITEM_DATA] '..tostring(value))end + local base=pools[0]:GetType() + while base and base.FullName~='RPG.Client.BaseGachaPoolData' do base=base.BaseType end + if not base then error('named pool base absent') end + local item_type=base:GetField('k__BackingField',flags).FieldType:GetElementType() + log('TYPE '..item_type.FullName) + local fs=item_type:GetFields(flags) + for i=0,math.min(fs.Length-1,47) do local f=fs[i];if not f.IsStatic then log('FIELD '..f.Name..' '..f.FieldType.FullName) end end + local ctors=item_type:GetConstructors(flags) + for i=0,math.min(ctors.Length-1,15) do log('CTOR '..tostring(ctors[i])) end + local methods=item_type:GetMethods(flags) + for i=0,math.min(methods.Length-1,127) do + local method=methods[i] + if method.DeclaringType==item_type and (method.Name=='get_ConfigID' or method.Name=='SetData' or method.Name=='set_ConfigID' or method.Name=='Init') then log('METHOD '..tostring(method)) end + end + if methods.Length>128 then log('TRUNCATED ItemData methods='..methods.Length) end + local helper=typeof(CS.RPG.Client.ItemHelper) + local ms=helper:GetMethods(flags) + for i=0,math.min(ms.Length-1,127) do + if ms[i].Name=='GetItem' or ms[i].Name=='CreateItemData' then + local method=ms[i] + log('HELPER '..tostring(method)..' static='..tostring(method.IsStatic)..' return_assignable='..tostring(item_type:IsAssignableFrom(method.ReturnType))) + end + end + if ms.Length>128 then log('TRUNCATED ItemHelper methods='..ms.Length) end + log('END') + end + local ok,err=pcall(capture) + if not ok then CS.UnityEngine.Debug.Log('[GAC_GACHA_ITEM_DATA] ERROR '..tostring(err)) end +end diff --git a/tools/gacha_live_clone_probe.lua b/tools/gacha_live_clone_probe.lua new file mode 100644 index 0000000..142eee7 --- /dev/null +++ b/tools/gacha_live_clone_probe.lua @@ -0,0 +1,92 @@ +-- Inactive research tool: stage only when the Client is walking, then remove. +-- Never mutates a live pool, config row, module list or dictionary. Clones use +-- the same MemberwiseClone/5-argument Invoke path as navigation_profiles.lua. +do + local function capture() + local s=_G.__GAC_GACHA_LIVE_CLONE1 or {phase=1} + _G.__GAC_GACHA_LIVE_CLONE1=s + if s.phase>4 then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GACHA_LIVE_CLONE] '..tostring(x))end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local invoke=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),0) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + if s.phase==1 then + local page=package.loaded['Ui.Gacha.GachaMainPage'] + if type(page)=='table' and type(page._create_pools_panel)=='function' then + for i=1,16 do + local name,value=debug.getupvalue(page._create_pools_panel,i) + if name==nil then break end + if name=='_gacha_module' then s.module=value;break end + end + end + if not s.module then s.module=CS.RPG.Client.GlobalVars.s_ModuleManager.GachaModule end + if not s.module then return end + local pools=s.module:GetSortedGachaPoolDatas() + if not pools or pools.Count==0 then return end + s.template=pools[0] + s.clone=typeof(CS.System.Object):GetMethod('MemberwiseClone',flags) + s.empty=CS.System.Array.CreateInstance(typeof(CS.System.Object),0) + s.pool=s.clone:Invoke(s.template,invoke,nil,s.empty,nil) + s.row=s.clone:Invoke(s.template.Row,invoke,nil,s.empty,nil) + local base=s.template:GetType() + while base and base.FullName~='RPG.Client.BaseGachaPoolData' do base=base.BaseType end + if not base then error('pool base type absent') end + s.base=base + base:GetField('k__BackingField',flags):SetValue(s.pool,s.row) + if s.pool==s.template or s.row==s.template.Row or s.pool.GachaID~=s.template.GachaID then + error('detached clone identity failed') + end + log('DETACHED_OK concrete='..s.pool:GetType().FullName..' id='..s.pool.GachaID..' prefab='..s.pool.PrefabPath) + s.phase=2 + return + end + if s.phase==2 then + local types={s.pool:GetType(),s.base} + for _,t in ipairs(types) do + log('TYPE '..t.FullName) + local fs=t:GetFields(flags) + for i=0,math.min(fs.Length-1,47) do + local f=fs[i] + if f.DeclaringType==t and not f.IsStatic then log('FIELD '..f.Name..' '..f.FieldType.FullName) end + end + end + s.phase=3 + return + end + if s.phase==3 then + local groups=s.module:GetSortedGachaGroupDatas() + if not groups or groups.Count==0 then error('no initialized groups') end + local group=groups[0] + local t=group:GetType() + log('GROUP concrete='..t.FullName..' id='..group.GroupID) + for depth=1,3 do + if not t or t.FullName=='System.Object' then break end + log('TYPE '..t.FullName) + local fs=t:GetFields(flags) + for i=0,math.min(fs.Length-1,47) do + local f=fs[i] + if f.DeclaringType==t and not f.IsStatic then log('FIELD '..f.Name..' '..f.FieldType.FullName) end + end + t=t.BaseType + end + s.phase=4 + return + end + local methods=s.module:GetType():GetMethods(flags) + for i=0,methods.Length-1 do + local m=methods[i] + if m.Name=='_AddGachaPoolDataToGroupDict' then + log('REGISTER_SIGNATURE '..tostring(m)) + end + end + log('END no registration or live mutation performed') + s.module=nil;s.template=nil;s.pool=nil;s.row=nil;s.base=nil;s.phase=5 + end + local ok,err=pcall(capture) + if not ok then + _G.__GAC_GACHA_LIVE_CLONE1={phase=99} + CS.UnityEngine.Debug.Log('[GAC_GACHA_LIVE_CLONE] ERROR '..tostring(err)) + end +end diff --git a/tools/gacha_load_only.lua b/tools/gacha_load_only.lua new file mode 100644 index 0000000..10e4689 --- /dev/null +++ b/tools/gacha_load_only.lua @@ -0,0 +1,14 @@ +-- Ask package searchers for the exact module closure; never execute it and +-- never replace package.loaded. Passive instrumentation retains the loaded bytes. +do local function capture() + local s=_G.__gacGachaLoadOnly1 or {index=1};_G.__gacGachaLoadOnly1=s + if s.index>#package.loaders then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local index=s.index;s.index=s.index+1 + local ok,result=pcall(package.loaders[index],'Ui.Gacha.GachaMainPage') + CS.UnityEngine.Debug.Log('[GAC_GACHA_LOAD_ONLY] '..index..' '..tostring(ok)..' '..type(result)) + if ok and type(result)=='function'then s.index=99 end +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaLoadOnly1={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_LOAD_ONLY] ERROR '..tostring(e))end end diff --git a/tools/gacha_loot_rarity_capture.lua b/tools/gacha_loot_rarity_capture.lua new file mode 100644 index 0000000..c098508 --- /dev/null +++ b/tools/gacha_loot_rarity_capture.lua @@ -0,0 +1,20 @@ +-- Candidate IDs are supplied from the inventory catalog; never infer rarity +-- from ID prefixes. Eight actual ItemRow lookups per non-battle heartbeat. +do local function capture() + local s=_G.__gacLootRarity1 or {index=1};_G.__gacLootRarity1=s + if s.done then return end + local ids=_G.__GAC_LOOT_CANDIDATES;if not ids then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local gm=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=gm and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(gm) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + for n=1,8 do + local id=ids[s.index] + if not id then s.done=true;CS.UnityEngine.Debug.Log('[GAC_LOOT_RARITY] END count='..#ids);return end + s.index=s.index+1 + local item=CS.RPG.Client.ItemHelper.GetItem(id) + if item and item.Row then + CS.UnityEngine.Debug.Log('[GAC_LOOT_RARITY] id='..id..' rarity='..CS.Newtonsoft.Json.JsonConvert.SerializeObject(item.Row.Rarity)) + else CS.UnityEngine.Debug.Log('[GAC_LOOT_RARITY] MISSING id='..id)end + end +end local ok,e=pcall(capture);if not ok then _G.__gacLootRarity1={done=true};CS.UnityEngine.Debug.Log('[GAC_LOOT_RARITY] ERROR '..tostring(e))end end diff --git a/tools/gacha_lua_metadata.lua b/tools/gacha_lua_metadata.lua new file mode 100644 index 0000000..5289a4d --- /dev/null +++ b/tools/gacha_lua_metadata.lua @@ -0,0 +1,12 @@ +-- Read existing page/module tables only; never require or open a page. +do if not _G.__gacGachaLuaMeta1 then + _G.__gacGachaLuaMeta1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GACHA_LUA_META] '..tostring(x))end + local function fields(label,t) + log(label..' '..type(t)..' '..tostring(t));if type(t)~='table'then return end + local n=0;for k,v in pairs(t)do log('FIELD '..tostring(k)..' '..type(v)..' '..tostring(v));n=n+1;if n>=48 then break end end + end + for _,name in ipairs({'Ui.Gacha.GachaMainPage','Ui/Gacha/GachaMainPage','GachaMainPage','BakedLua/Ui/Gacha/GachaMainPage'})do fields(name,package.loaded[name])end + local p=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GachaMainPage');if p then fields('PAGE',p.LuaTable)end + log('END') +end end diff --git a/tools/gacha_native_adapter_metadata.lua b/tools/gacha_native_adapter_metadata.lua new file mode 100644 index 0000000..f199d74 --- /dev/null +++ b/tools/gacha_native_adapter_metadata.lua @@ -0,0 +1,30 @@ +-- Detached template metadata only. Does not register a banner or mutate UI. +do + local function capture() + local s=_G.__gacGachaAdapterMeta1 or {index=1} + _G.__gacGachaAdapterMeta1=s + if s.index>4 then return end + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.GachaModule + if not m then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_GACHA_ADAPTER_META] '..tostring(v))end + local pools=m:GetSortedGachaPoolDatas() + local template=nil + for i=0,pools.Count-1 do if pools[i]:GetType().FullName=='RPG.Client.StandardGachaPoolData' then template=pools[i];break end end + if not template then return end + local values={m,template,template.SingleDrawData,template.Row} + local value=values[s.index];s.index=s.index+1 + if not value then log('MISSING_VALUE');return end + local t=value:GetType();log('TYPE '..t.FullName) + local fs=t:GetFields(flags) + for i=0,math.min(fs.Length-1,63) do + local f=fs[i] + if f.DeclaringType==t then + log('FIELD '..f.Name..' '..f.FieldType.FullName) + end + end + if s.index==5 then log('END')end + end + local ok,e=pcall(capture) + if not ok then _G.__gacGachaAdapterMeta1={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_ADAPTER_META] ERROR '..tostring(e))end +end diff --git a/tools/gacha_owned_prefab_tree.lua b/tools/gacha_owned_prefab_tree.lua new file mode 100644 index 0000000..8e80fd0 --- /dev/null +++ b/tools/gacha_owned_prefab_tree.lua @@ -0,0 +1,37 @@ +-- Only the owned single-banner tab: bounded visual hierarchy/binder read. +do local function capture() + local s=_G.__gacOwnedPrefabTree1 or {queue={},index=1,started=false};_G.__gacOwnedPrefabTree1=s + if s.done then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_OWNED_TREE] '..tostring(v))end + if not s.started then + local page=_G.__gacWarpCreateTrace1 and _G.__gacWarpCreateTrace1.page + local state=_G.__GAC_GACHA_PRESENTATION_STATE + if not page or not state then return end + for _,tab in pairs(page._gacha_tab_items or {})do + local pool=tab._gacha_pool_data + if pool and state.installed[pool.GachaID] and state.installed[pool.GachaID].pool==pool then + local content=tab._binder.node_content + s.queue={{t=content.transform,path='content',depth=0}};s.started=true + for k,v in pairs(tab._binder)do log('BINDER '..tostring(k)..' '..type(v))end + break + end + end + if not s.started then return end + end + for n=1,12 do + local node=s.queue[s.index] + if not node then s.done=true;log('END');return end + s.index=s.index+1 + local t=node.t + local image=t.gameObject:GetComponent(typeof(CS.UnityEngine.UI.Image)) + local text=t.gameObject:GetComponent(typeof(CS.RPG.Client.LocalizedText)) + log(node.path..' active='..tostring(t.gameObject.activeSelf)..' image='..tostring(image and image.sprite and image.sprite.name)..' text='..tostring(text and text.text)) + if node.depth<5 then + for i=0,math.min(t.childCount-1,31)do + if #s.queue>=192 then break end + local child=t:GetChild(i) + if child.name~='GaCCharacterBanner'then s.queue[#s.queue+1]={t=child,path=node.path..'/'..child.name,depth=node.depth+1}end + end + end + end +end local ok,e=pcall(capture);if not ok then _G.__gacOwnedPrefabTree1={done=true};CS.UnityEngine.Debug.Log('[GAC_OWNED_TREE] ERROR '..tostring(e))end end diff --git a/tools/gacha_page_bytecode.lua b/tools/gacha_page_bytecode.lua new file mode 100644 index 0000000..26526d3 --- /dev/null +++ b/tools/gacha_page_bytecode.lua @@ -0,0 +1,18 @@ +-- Export only three already loaded functions. Never opens or invokes a page. +do local function capture() + local s=_G.__gacGachaDump1 or {index=1};_G.__gacGachaDump1=s + local names={'_create_pools_panel','_on_tab_change','_refresh'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local m=package.loaded['Ui.Gacha.GachaMainPage'];if type(m)~='table'then return end + local name=names[s.index];s.index=s.index+1 + local fn=m[name];if type(fn)~='function'then return end + local raw=string.dump(fn) + if #raw>32768 then return end + local bytes=CS.System.Array.CreateInstance(typeof(CS.System.Byte),#raw) + for i=1,#raw do bytes[i-1]=raw:byte(i)end + CS.UnityEngine.Debug.Log('[GAC_GACHA_DUMP] '..name..' '..CS.System.Convert.ToBase64String(bytes)) +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaDump1={index=99};CS.UnityEngine.Debug.Log('[GAC_GACHA_DUMP] ERROR '..tostring(e))end end diff --git a/tools/gacha_page_creation_trace.lua b/tools/gacha_page_creation_trace.lua new file mode 100644 index 0000000..eeb7eb1 --- /dev/null +++ b/tools/gacha_page_creation_trace.lua @@ -0,0 +1,19 @@ +-- Exact page callback trace; does not change tab data or invoke UI lifecycle. +do + if not _G.__gacWarpCreateTrace1 then + local c=require('Ui.Gacha.GachaMainPage') + local original=c._create_pools_panel + if type(original)=='function' then + _G.__gacWarpCreateTrace1={original=original,class=c} + c._create_pools_panel=function(self,...) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_WARP_CREATE] '..tostring(v))end + _G.__gacWarpCreateTrace1.page=self + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.GachaModule + log('BEGIN groups='..tostring(m:GetSortedGachaGroupDatas().Count)) + local result=original(self,...) + log('END panels='..tostring(self._gacha_tab_items and #self._gacha_tab_items)) + return result + end + end + end +end diff --git a/tools/gacha_presentation_metadata.lua b/tools/gacha_presentation_metadata.lua new file mode 100644 index 0000000..ec30cfc --- /dev/null +++ b/tools/gacha_presentation_metadata.lua @@ -0,0 +1,18 @@ +-- Named regression targets only, one per heartbeat; paused during Battle. +do local function capture() + local s=_G.__gacGachaPresentationMetadata1 or {index=1};_G.__gacGachaPresentationMetadata1=s + local names={'RPG.Client.BaseGachaPoolData','RPG.Client.GachaModule','RPG.Client.GachaConfig'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local name=names[s.index];s.index=s.index+1 + local asm=name:find('GameCore') and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + local t=asm:GetType(name);local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_REGRESSION_META] '..tostring(x))end + log('TYPE '..name..' '..tostring(t));if not t then return end + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,159)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,191)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGachaPresentationMetadata1={index=99};CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_REGRESSION_META] ERROR '..tostring(e))end end + diff --git a/tools/gacha_rank_cost_capture.lua b/tools/gacha_rank_cost_capture.lua new file mode 100644 index 0000000..00687c2 --- /dev/null +++ b/tools/gacha_rank_cost_capture.lua @@ -0,0 +1,22 @@ +-- Caller supplies exact rank IDs from the captured AvatarConfig. Bounded, +-- read-only flat-table lookups; no scene mutation or full assembly scan. +do local function capture() + local s=_G.__GacRankCostCapture1 or {i=1};_G.__GacRankCostCapture1=s + if s.done then return end + local ids=_G.__GAC_RANK_CAPTURE_IDS + if type(ids)~='table' or #ids==0 or #ids>64 then error('rank IDs missing or outside bound')end + local mgr=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local phase=mgr and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(mgr) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + for n=1,5 do + local req=ids[s.i];if not req then s.done=true;CS.UnityEngine.Debug.Log('[GAC_RANK_COST] END');return end + s.i=s.i+1 + local row=CS.RPG.GameCore.AvatarRankConfigExcelTable.GetData(req.rank_id) + if not row then CS.UnityEngine.Debug.Log('[GAC_RANK_COST] MISSING avatar='..req.avatar_id..' rank_id='..req.rank_id) + else + local serialized=CS.Newtonsoft.Json.JsonConvert.SerializeObject(row.UnlockCost) + CS.UnityEngine.Debug.Log('[GAC_RANK_COST] ROW {"avatar_id":'..req.avatar_id..',"rank_id":'..row.RankID..',"rank":'..row.Rank..',"cost":'..serialized..'}') + end + end +end local ok,e=pcall(capture);if not ok then _G.__GacRankCostCapture1={done=true};CS.UnityEngine.Debug.Log('[GAC_RANK_COST] ERROR '..tostring(e))end end diff --git a/tools/gacha_rank_item_capture.lua b/tools/gacha_rank_item_capture.lua new file mode 100644 index 0000000..6646467 --- /dev/null +++ b/tools/gacha_rank_item_capture.lua @@ -0,0 +1,23 @@ +-- Caller supplies ItemIDs from the captured rank rows. Read five item rows per +-- non-battle heartbeat, never mutating inventory or scanning other tables. +do local function capture() + local s=_G.__GacRankItemCapture1 or {i=1};_G.__GacRankItemCapture1=s + if s.done then return end + local ids=_G.__GAC_RANK_ITEM_IDS + if type(ids)~='table' or #ids==0 or #ids>64 then error('item IDs missing or outside bound')end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local mgr=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=mgr and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(mgr) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + for n=1,5 do + local id=ids[s.i];if not id then s.done=true;CS.UnityEngine.Debug.Log('[GAC_RANK_ITEM] END');return end + s.i=s.i+1 + local item=CS.RPG.Client.ItemHelper.GetItem(id) + if not item or not item.Row then CS.UnityEngine.Debug.Log('[GAC_RANK_ITEM] MISSING '..id) + else + local row=CS.Newtonsoft.Json.JsonConvert.SerializeObject(item.Row) + if #row>16384 then error('item row size bound')end + CS.UnityEngine.Debug.Log('[GAC_RANK_ITEM] ROW {"requested_id":'..id..',"row":'..row..'}') + end + end +end local ok,e=pcall(capture);if not ok then _G.__GacRankItemCapture1={done=true};CS.UnityEngine.Debug.Log('[GAC_RANK_ITEM] ERROR '..tostring(e))end end diff --git a/tools/gacha_rank_table_metadata.lua b/tools/gacha_rank_table_metadata.lua new file mode 100644 index 0000000..721aabc --- /dev/null +++ b/tools/gacha_rank_table_metadata.lua @@ -0,0 +1,28 @@ +-- Exact named types only; metadata batches are bounded per heartbeat. +do local function capture() + local s=_G.__GacRankMetadata1 or {target=1,index=0};_G.__GacRankMetadata1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local mgr=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=mgr and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(mgr) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase) then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_RANK_METADATA] '..tostring(v))end + local names={'RPG.GameCore.AvatarRankConfigRow','RPG.GameCore.AvatarRankConfigExcelTable'} + if not s.members then + if s.target>#names then s.done=true;log('END');return end + s.t=typeof(CS.RPG.GameCore.AvatarRankConfigRow).Assembly:GetType(names[s.target]) + if not s.t then error('missing exact type '..names[s.target])end + s.members=s.t:GetFields(flags);s.stage='fields';s.index=0;log('TYPE '..s.t.FullName) + end + for n=1,8 do + if s.index>=s.members.Length then + if s.stage=='fields' then s.members=s.t:GetMethods(flags);s.stage='methods';s.index=0;return end + s.target=s.target+1;s.members=nil;s.t=nil;return + end + local m=s.members[s.index];s.index=s.index+1 + if m.DeclaringType==s.t then + if s.stage=='fields' then log('FIELD '..m.Name..' '..m.FieldType.FullName) + else log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end + end + end +end local ok,e=pcall(capture);if not ok then _G.__GacRankMetadata1={done=true};CS.UnityEngine.Debug.Log('[GAC_RANK_METADATA] ERROR '..tostring(e))end end diff --git a/tools/gacha_reddot_metadata.lua b/tools/gacha_reddot_metadata.lua new file mode 100644 index 0000000..4161917 --- /dev/null +++ b/tools/gacha_reddot_metadata.lua @@ -0,0 +1,25 @@ +-- Targeted, read-only metadata for the one failing consumer. Stage only while +-- needed; this does not enumerate assembly types or alter any game state. +do + if _G.__gac_reddot_metadata_done then return end + _G.__gac_reddot_metadata_done=true + local log=function(s) CS.UnityEngine.Debug.Log('[GAC_REDDOT_META] '..tostring(s)) end + local ok,err=pcall(function() + local t=typeof(CS.RPG.Client.GachaInvitationSatisfyRedDotFilter) + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + if not t then error('consumer type unavailable through xLua') end + log('TYPE '..t.FullName..' BASE '..tostring(t.BaseType and t.BaseType.FullName)) + local f=t:GetFields(flags) + for i=0,math.min(f.Length-1,31) do + local x=f[i] + log('FIELD '..x.Name..' '..tostring(x.FieldType.FullName)..' DECLARED '..tostring(x.DeclaringType.FullName)) + end + local m=t:GetMethods(flags) + for i=0,math.min(m.Length-1,47) do + local x=m[i] + if x.DeclaringType==t then log('METHOD '..tostring(x)) end + end + log('END') + end) + if not ok then log('ERROR '..tostring(err)) end +end diff --git a/tools/gacha_refresh_owned_card.lua b/tools/gacha_refresh_owned_card.lua new file mode 100644 index 0000000..99d18a2 --- /dev/null +++ b/tools/gacha_refresh_owned_card.lua @@ -0,0 +1,17 @@ +-- Refresh only the already-owned preview card after a renderer correction. +-- No native list mutation, scene/camera changes, selection or draw command. +do + local page=_G.__gacWarpCreateTrace1 and _G.__gacWarpCreateTrace1.page + local state=_G.__GAC_GACHA_PRESENTATION_STATE + if not _G.__gacRefreshOwnedCard2 and page and state and state.render_current then + _G.__gacRefreshOwnedCard2=true + for _,tab in pairs(page._gacha_tab_items or {})do + local pool=tab._gacha_pool_data + local owned=pool and state.installed[pool.GachaID] + if owned and owned.pool==pool then + local ok,e=pcall(state.render_current,tab,state.by_id[pool.GachaID]) + CS.UnityEngine.Debug.Log('[GAC_OWNED_CARD_REFRESH] '..tostring(ok)..' '..tostring(e)) + end + end + end +end diff --git a/tools/gacha_registered_state.lua b/tools/gacha_registered_state.lua new file mode 100644 index 0000000..dd748d4 --- /dev/null +++ b/tools/gacha_registered_state.lua @@ -0,0 +1,20 @@ +-- Bounded live Warp group snapshot, no registration or UI mutation. +do local function snapshot() + local s=_G.__gacWarpState2 or {beats=0};_G.__gacWarpState2=s + if s.beats>=3 then return end;s.beats=s.beats+1 + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.GachaModule + if not m then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_WARP_STATE] '..tostring(v))end + local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GachaMainPage') + log('PAGE '..tostring(page and page.Trans and page.Trans.gameObject.activeInHierarchy)) + for _,name in ipairs({'_GachaPoolDatasThisVersion','_GachaGroupDatasThisVersion','_GachaGroupDataDict'})do + local v=m:GetType():GetField(name,flags):GetValue(m);log(name..' COUNT '..tostring(v and v.Count)) + end + local pools=m:GetSortedGachaPoolDatas() + for i=0,math.min(pools.Count-1,7)do log('POOL '..tostring(pools[i].GachaID)..' '..pools[i]:GetType().FullName)end + local groups=m:GetSortedGachaGroupDatas() + for i=0,math.min(groups.Count-1,7)do + local g=groups[i];log('GROUP '..tostring(i)..' DEFAULT '..tostring(g.DefaultGachaPoolData and g.DefaultGachaPoolData.GachaID)) + end +end local ok,e=pcall(snapshot);if not ok then CS.UnityEngine.Debug.Log('[GAC_WARP_STATE] ERROR '..tostring(e))end end diff --git a/tools/gacha_sidebar_geometry.lua b/tools/gacha_sidebar_geometry.lua new file mode 100644 index 0000000..74d108a --- /dev/null +++ b/tools/gacha_sidebar_geometry.lua @@ -0,0 +1,17 @@ +do + if not _G.__gacSidebarGeometry1 then + local page=_G.__gacWarpCreateTrace1 and _G.__gacWarpCreateTrace1.page + if page then + _G.__gacSidebarGeometry1=true + for _,tab in pairs(page._gacha_tab_items or {})do + local b=tab._tab_button_panel and tab._tab_button_panel._binder + if b then + for _,key in ipairs({'img_selected_icon','img_unselected_icon'})do + local image=b[key];local r=image.rectTransform + CS.UnityEngine.Debug.Log('[GAC_SIDEBAR_GEOMETRY] pool='..tab._gacha_pool_data.GachaID..' '..key..' rect='..tostring(r.rect)..' parent='..tostring(r.parent.rect)..' aspect='..tostring(image.preserveAspect)) + end + end + end + end + end +end diff --git a/tools/gacha_tab_button_metadata.lua b/tools/gacha_tab_button_metadata.lua new file mode 100644 index 0000000..090cbdd --- /dev/null +++ b/tools/gacha_tab_button_metadata.lua @@ -0,0 +1,19 @@ +-- Exact owned tab button binder only; no sidebar or selection mutation. +do + if not _G.__gacTabButtonMeta1 then + local p=_G.__gacWarpCreateTrace1 and _G.__gacWarpCreateTrace1.page + local s=_G.__GAC_GACHA_PRESENTATION_STATE + if p and s then + _G.__gacTabButtonMeta1=true + for _,tab in pairs(p._gacha_tab_items or {})do + local pool=tab._gacha_pool_data + if pool and s.installed[pool.GachaID] and s.installed[pool.GachaID].pool==pool then + local button=tab._tab_button_panel + if button and button._binder then + for k,v in pairs(button._binder)do CS.UnityEngine.Debug.Log('[GAC_TAB_BUTTON] '..tostring(k)..' '..type(v))end + end + end + end + end + end +end diff --git a/tools/gacha_tab_control_source.lua b/tools/gacha_tab_control_source.lua new file mode 100644 index 0000000..8cac575 --- /dev/null +++ b/tools/gacha_tab_control_source.lua @@ -0,0 +1,15 @@ +-- One exact known G.TabControl method, read-only metadata. +do local function capture() + if _G.__gacGachaTabControlSource1 then return end + if not G or type(G.TabControl)~='table' then return end + _G.__gacGachaTabControlSource1=true + local inspected=0 + for name,value in pairs(package.loaded)do + inspected=inspected+1;if inspected>8192 then break end + if value==G.TabControl then CS.UnityEngine.Debug.Log('[GAC_GACHA_TAB_CONTROL] MODULE '..tostring(name))end + end + for _,name in ipairs({'add_item','remove_item','update_layout'})do + local f=G.TabControl[name] + if type(f)=='function'then local info=debug.getinfo(f,'S');CS.UnityEngine.Debug.Log('[GAC_GACHA_TAB_CONTROL] '..name..' '..tostring(info and info.source))end + end +end local ok,e=pcall(capture);if not ok then _G.__gacGachaTabControlSource1=true;CS.UnityEngine.Debug.Log('[GAC_GACHA_TAB_CONTROL] ERROR '..tostring(e))end end diff --git a/tools/gameplay_loader_metadata.lua b/tools/gameplay_loader_metadata.lua new file mode 100644 index 0000000..97ea40a --- /dev/null +++ b/tools/gameplay_loader_metadata.lua @@ -0,0 +1,16 @@ +-- Read only loader metadata; no loader invocation or require. +do if not _G.__gacLoaderMeta1 then + _G.__gacLoaderMeta1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_LOADER_META] '..tostring(x))end + for _,label in ipairs({'loaders','searchers'})do + local loaders=package[label];log(label..' '..type(loaders)) + if type(loaders)=='table'then for k,fn in pairs(loaders)do + log('LOADER '..tostring(k)..' '..tostring(fn)) + if type(fn)=='function'then for i=1,8 do local name,value=debug.getupvalue(fn,i);if name==nil then break end;log('UP '..tostring(name)..' '..type(value)..' '..tostring(value))end end + end end + end + for _,module in ipairs({'Ui.Gacha.GachaPool.DefaultGachaAvatarPanel','Ui.Gacha.GachaPool.DefaultGachaUpAvatarPanel'})do + log('MODULE '..module);local t=package.loaded[module] + if type(t)=='table'then for k,v in pairs(t)do log('KEY '..tostring(k)..' '..type(v))end end + end +end end diff --git a/tools/gameplay_lua_bindings.lua b/tools/gameplay_lua_bindings.lua new file mode 100644 index 0000000..b56ae29 --- /dev/null +++ b/tools/gameplay_lua_bindings.lua @@ -0,0 +1,19 @@ +-- Bounded inspection of Lua libraries and already loaded presentation modules. +do local function capture() + local s=_G.__gacGameplayBindings1 or {index=1};_G.__gacGameplayBindings1=s + if s.index>3 then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_BINDINGS] '..tostring(x))end + if s.index==1 then + log('LIB string.dump='..type(string.dump)..' debug='..type(debug)) + if type(debug)=='table'then for k,v in pairs(debug)do log('DEBUG '..tostring(k)..' '..type(v))end end + elseif s.index==2 then + local m=package.loaded['Ui.Gacha.GachaMainPage'] + if type(m)=='table'then for k,v in pairs(m)do log('GACHA '..tostring(k)..' '..type(v))end end + else + local n=0;for k,v in pairs(package.loaded)do + local name=tostring(k);if name:find('FiveDim')or name:find('ChenLing')or name:find('Gacha')then log('LOADED '..name..' '..type(v))end + n=n+1;if n>=4096 then log('TRUNCATED');break end + end + end + s.index=s.index+1 +end;local ok,e=pcall(capture);if not ok then _G.__gacGameplayBindings1={index=99};CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_BINDINGS] ERROR '..tostring(e))end end diff --git a/tools/gameplay_lua_upvalues.lua b/tools/gameplay_lua_upvalues.lua new file mode 100644 index 0000000..ca376e0 --- /dev/null +++ b/tools/gameplay_lua_upvalues.lua @@ -0,0 +1,22 @@ +-- Inspect only named loaded functions; does not invoke gameplay callbacks. +do local function capture() + local s=_G.__gacGameplayUpvalues1 or {index=1};_G.__gacGameplayUpvalues1=s + local targets={ + {'Ui.Gacha.GachaMainPage','_create_pools_panel'}, + {'Ui.Gacha.GachaPool.DefaultGachaAvatarPanel','_refresh'}, + {'Ui.Gacha.GachaPool.DefaultGachaUpAvatarPanel','_refresh'}, + {'Ui.Puzzle.FiveDimGame.FiveDimUtils',false}, + {'Ui.Puzzle.FiveDimGame.MiniGameSet.FiveDimMiniGameConst',false}} + if s.index>#targets then return end + local target=targets[s.index];s.index=s.index+1 + local t=package.loaded[target[1]];if type(t)~='table'then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_UPVALUES] '..tostring(x))end + log('MODULE '..target[1]) + if target[2]then + local fn=t[target[2]];if type(fn)~='function'then return end + for i=1,48 do local name,value=debug.getupvalue(fn,i);if name==nil then break end + log('UP '..tostring(name)..' '..type(value)..' '..tostring(value)) + if type(value)=='table'and name~='_ENV'then local n=0;for k,v in pairs(value)do log('KEY '..tostring(k)..' '..type(v)..' '..tostring(v));n=n+1;if n>=80 then break end end end + end + else local n=0;for k,v in pairs(t)do log('KEY '..tostring(k)..' '..type(v)..' '..tostring(v));n=n+1;if n>=128 then break end end end +end;local ok,e=pcall(capture);if not ok then _G.__gacGameplayUpvalues1={index=99};CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_UPVALUES] ERROR '..tostring(e))end end diff --git a/tools/gameplay_regression_metadata.lua b/tools/gameplay_regression_metadata.lua new file mode 100644 index 0000000..8735fe5 --- /dev/null +++ b/tools/gameplay_regression_metadata.lua @@ -0,0 +1,17 @@ +-- Named regression targets only, one per heartbeat; paused during Battle. +do local function capture() + local s=_G.__gacGameplayRegressionMeta1 or {index=1};_G.__gacGameplayRegressionMeta1=s + local names={'RPG.Client.GridFightGuideBook','RPG.Client.GridFightRoleConfig','RPG.GameCore.GridFightRoleConfigExcelTable','RPG.Client.FiveDimModule','RPG.Client.ChenLingGameBoyPuzzleData'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local name=names[s.index];s.index=s.index+1 + local asm=name:find('GameCore') and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + local t=asm:GetType(name);local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_REGRESSION_META] '..tostring(x))end + log('TYPE '..name..' '..tostring(t));if not t then return end + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,159)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,191)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGameplayRegressionMeta1={index=99};CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_REGRESSION_META] ERROR '..tostring(e))end end diff --git a/tools/gameplay_regression_roles.lua b/tools/gameplay_regression_roles.lua new file mode 100644 index 0000000..73a8850 --- /dev/null +++ b/tools/gameplay_regression_roles.lua @@ -0,0 +1,18 @@ +-- Named regression targets only, one per heartbeat; paused during Battle. +do local function capture() + local s=_G.__gacGameplayRegressionMeta2 or {index=1};_G.__gacGameplayRegressionMeta2=s + local names={'RPG.Client.GridFightHandbookRole','RPG.Client.GridFightHandbook','RPG.GameCore.GridFightRoleBasicConfigRow','RPG.GameCore.ChenLingGameBoyCaseRow'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local name=names[s.index];s.index=s.index+1 + local asm=name:find('GameCore') and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + local t=asm:GetType(name);local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_REGRESSION_META] '..tostring(x))end + log('TYPE '..name..' '..tostring(t));if not t then return end + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,159)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,191)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGameplayRegressionMeta2={index=99};CS.UnityEngine.Debug.Log('[GAC_GAMEPLAY_REGRESSION_META] ERROR '..tostring(e))end end + diff --git a/tools/glm_beta_gacha_group_trigger.lua b/tools/glm_beta_gacha_group_trigger.lua new file mode 100644 index 0000000..704685f --- /dev/null +++ b/tools/glm_beta_gacha_group_trigger.lua @@ -0,0 +1,19 @@ +-- Bounded research pulse. Pauses in Battle. No UI or gameplay callbacks. +do local function capture() + local s=_G.__gacGlmGroupPulse2 or {count=0};_G.__gacGlmGroupPulse2=s + if s.count>=8 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + if s.count==0 then + local field=typeof(CS.RPG.GameCore.GachaGroupDataRow):GetField('GroupType',flags) + local t=field.FieldType + for _,name in ipairs({'Normal','Newbie','AvatarUp','WeaponUp','MultiAvatarUp','MultiWeaponUp','Collaboration','CollaborationMerge'})do + local ok,v=pcall(function()return CS.System.Enum.Parse(t,name)end) + if ok then CS.UnityEngine.Debug.Log('[GAC_GLM_GROUP_ENUM] '..name..' '..tostring(CS.System.Convert.ToInt32(v)))end + end + end + s.count=s.count+1 + CS.Newtonsoft.Json.JsonConvert.SerializeObject('GAC_GLM_GROUP_TICK') +end;local ok,e=pcall(capture);if not ok then _G.__gacGlmGroupPulse2={count=99};CS.UnityEngine.Debug.Log('[GAC_GLM_GROUP_ENUM] ERROR '..tostring(e))end end diff --git a/tools/glm_beta_gacha_groups.js b/tools/glm_beta_gacha_groups.js new file mode 100644 index 0000000..1a7ce25 --- /dev/null +++ b/tools/glm_beta_gacha_groups.js @@ -0,0 +1,46 @@ +// Research capture for assembly SHA256 +// 4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6. +// GachaGroupDataRow.FromBinary -> wrapper -> dictionary Add disassembly: +// battle_diagnostics/glm-gacha-group-{add,dictionary}.asm. +// Use the proven flat GetAll accessor (lazy initialization only). No level graph, +// UI or gameplay loader; no dictionary writes by this capture. +const mod = Process.getModuleByName('GameAssembly.dll'); +const serialize = new NativeFunction(mod.base.add(0x1d46c040), 'pointer', ['pointer', 'pointer']); +const marker = 'GAC_GLM_GROUP_TICK'; +let done = false, busy = false, index = 0, count = 0, entries = null; +Interceptor.attach(mod.base.add(0x1d46c040), { + onEnter(args) { + this.trigger = false; + if (done || busy) return; + try { this.trigger = args[0].add(0x10).readS32() === marker.length && args[0].add(0x14).readUtf16String(marker.length) === marker; } catch (_) {} + }, + onLeave() { + if (!this.trigger || busy || done) return; + busy = true; + try { + if (entries === null) { + if(mod.base.add(0x1e852f20).readU32()!==0x28ec8348)throw Error('Flat getter prologue differs'); + const get = new NativeFunction(mod.base.add(0x1e852f20), 'pointer', ['pointer']); + const dict = get(ptr(0)); + if (dict.isNull()) throw Error('Missing gacha group dictionary'); + count = dict.add(0x20).readU32(); entries = dict.add(0x18).readPointer(); + if(count===0){done=true;send({kind:'BEGIN',table:'gacha_groups',count});send({kind:'END',table:'gacha_groups',count});return;} + if (count > 256 || entries.isNull() || entries.add(0x18).readU32() < count) throw Error('Dictionary bound'); + send({kind:'BEGIN', table:'gacha_groups', count}); + } + const rows = []; + for (let n=0; n<8 && index32768) throw Error('Row bound'); + rows.push(value.add(0x14).readUtf16String(length)); + } + send({kind:'ROWS', table:'gacha_groups', rows}); + if (index>=count) {done=true;send({kind:'END',table:'gacha_groups',count});} + } catch (e) {done=true;send({kind:'ERROR',error:String(e)});} + finally {busy=false;} + } +}); +send({kind:'ATTACHED',scope:'one named flat gacha group table; eight rows per managed marker',module:mod.path}); diff --git a/tools/glm_beta_targeted_metadata.lua b/tools/glm_beta_targeted_metadata.lua new file mode 100644 index 0000000..0da1641 --- /dev/null +++ b/tools/glm_beta_targeted_metadata.lua @@ -0,0 +1,27 @@ +-- Research only. Named metadata and three paths found in current GachaMainPage +-- bytecode; no scene loads, no table-wide assembly scans, no UI/gameplay calls. +do local function capture() + local s=_G.__gacGlmBetaMetadata1 or {index=1};_G.__gacGlmBetaMetadata1=s + local names={'RPG.Client.TextID','RPG.Client.ActivityData','RPG.GameCore.GachaGroupDataRow','RPG.Client.BaseGachaGroupData'} + if s.index>#names+1 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GLM_BETA_META] '..tostring(x))end + if s.index==#names+1 then + for _,path in ipairs({'UI/Drawcard/GachaPanel/MultiAvatarGacha.prefab','UI/Drawcard/CollaborationGacha/CollaborationGacha.prefab','UI/Drawcard/CollaborationGacha0440/CollaborationGacha0440.prefab'})do + local ok,value=pcall(function()return CS.RPG.Client.GlobalVars.s_AssetMgr:Exists(path)end) + log('ASSET '..path..' '..tostring(ok)..' '..tostring(value)) + end + else + local name=names[s.index] + local asm=name:find('GameCore') and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + local t=asm:GetType(name);log('TYPE '..name..' '..tostring(t)) + if t then + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,95)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,127)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end + end + s.index=s.index+1;if s.index>#names+1 then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacGlmBetaMetadata1={index=99};CS.UnityEngine.Debug.Log('[GAC_GLM_BETA_META] ERROR '..tostring(e))end end diff --git a/tools/glm_beta_textid_metadata.lua b/tools/glm_beta_textid_metadata.lua new file mode 100644 index 0000000..d8cbccc --- /dev/null +++ b/tools/glm_beta_textid_metadata.lua @@ -0,0 +1,15 @@ +-- Resolve TextID through the known ActivityPanelRow field's assembly identity. +do if not _G.__gacGlmBetaTextID1 then + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if phase and not typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then + _G.__gacGlmBetaTextID1=true + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_GLM_TEXTID_META] '..tostring(x))end + local t=typeof(CS.RPG.GameCore.ActivityPanelRow):GetField('TabName',flags).FieldType + log('TYPE '..t.FullName..' ASSEMBLY '..t.Assembly.FullName) + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,47)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,95)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + log('END') + end +end end diff --git a/tools/go-toolchain.ps1 b/tools/go-toolchain.ps1 index d8c926c..1462d18 100644 --- a/tools/go-toolchain.ps1 +++ b/tools/go-toolchain.ps1 @@ -4,6 +4,10 @@ function Get-GoVersion([string]$Executable) { if ($LASTEXITCODE -ne 0 -or "$output" -notmatch '\bgo(\d+\.\d+(?:\.\d+)?)\b') { return $null } return [version]$Matches[1] } +function Confirm-GoToolchainInstall([version]$Minimum) { + $answer = Read-Host "Go >= $Minimum is required to build. Download and install it now? [y/N]" + return $answer -match '^(?i:y|yes)$' +} function Resolve-GoToolchain($Config) { $directive = Select-String -LiteralPath (Resolve-ProjectPath 'go.mod') -Pattern '^go\s+(\d+\.\d+(?:\.\d+)?)\s*$' | Select-Object -First 1 if (-not $directive) { throw 'go.mod has no valid minimum Go version.' } @@ -30,6 +34,7 @@ function Resolve-GoToolchain($Config) { if ($version -and $version -ge $minimum) { return $cached } } } + if (-not (Confirm-GoToolchainInstall $minimum)) { throw 'Go installation was declined. Install a compatible Go version, then run the build again.' } $machineArch = $env:PROCESSOR_ARCHITEW6432 if (-not $machineArch) { $machineArch = $env:PROCESSOR_ARCHITECTURE } $arch = switch ($machineArch.ToUpperInvariant()) { 'AMD64' {'amd64'} 'ARM64' {'arm64'} 'X86' {'386'} default {throw "Unsupported Windows architecture: $machineArch"} } diff --git a/tools/inspect_luau_v4.py b/tools/inspect_luau_v4.py new file mode 100644 index 0000000..6689430 --- /dev/null +++ b/tools/inspect_luau_v4.py @@ -0,0 +1,92 @@ +"""Read version-4 Luau chunks without executing them. + +Layout: upstream Luau VM/src/lvmload.cpp, Common/include/Luau/Bytecode.h. +Only v4/type1 is accepted; later/custom layouts fail instead of guessing. +""" +import argparse +import json +import struct +from pathlib import Path + + +def inspect(path): + data = Path(path).read_bytes() + offset = 0 + + def read(size): + nonlocal offset + value = data[offset:offset + size] + if len(value) != size: + raise ValueError('truncated chunk') + offset += size + return value + + def byte(): + return read(1)[0] + + def integer(): + value, shift = 0, 0 + while True: + v = byte() + value |= (v & 127) << shift + if v < 128: + return value + shift += 7 + if shift > 28: + raise ValueError('oversized integer') + + if (byte(), byte()) != (4, 1): + raise ValueError('only Luau v4/type1 supported') + strings = [None] + [read(integer()).decode('utf-8', 'replace') for _ in range(integer())] + protos = [] + for index in range(integer()): + stack, params, upvalues, vararg, flags = [byte() for _ in range(5)] + read(integer()) + code = [struct.unpack('> gap) + 1) * 4) + locals_ = [] + ups = [] + if byte(): + for _ in range(integer()): + locals_.append([strings[integer()], integer(), integer(), byte()]) + ups = [strings[integer()] for _ in range(integer())] + protos.append(dict(index=index, name=name, line=line, stack=stack, + params=params, upvalues=ups, children=children, + constants=constants, code=code, locals=locals_)) + main = integer() + if offset != len(data): + raise ValueError(f'unconsumed bytes: {len(data) - offset}') + return dict(main=main, strings=strings, protos=protos) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('path') + parser.add_argument('--output', required=True) + args = parser.parse_args() + Path(args.output).write_text(json.dumps(inspect(args.path), indent=2, ensure_ascii=False), encoding='utf-8') diff --git a/tools/inspect_saved_cw.go b/tools/inspect_saved_cw.go new file mode 100644 index 0000000..a79efdf --- /dev/null +++ b/tools/inspect_saved_cw.go @@ -0,0 +1,76 @@ +// Read-only recovery inspection: decode a saved CW envelope without loading a +// player session, migrating data, contacting the Client or writing persistent. +package main + +import ( + "encoding/json" + "fmt" + "os" + "strconv" + + pb "gac-hkrpg-go/protocol/proto" + "google.golang.org/protobuf/proto" +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintln(os.Stderr, "usage: go run tools/inspect_saved_cw.go ") + os.Exit(2) + } + raw, err := os.ReadFile(os.Args[1]) + if err != nil { + panic(err) + } + var root struct { + CW map[string]struct { + UID uint32 `json:"uid"` + Version string `json:"client_version"` + Assembly string `json:"assembly_sha256"` + Revision uint64 `json:"revision"` + Wire []byte `json:"wire_data"` + } `json:"currency_wars"` + } + if err := json.Unmarshal(raw, &root); err != nil { + panic(err) + } + for key, save := range root.CW { + if key != strconv.FormatUint(uint64(save.UID), 10) { + panic("CW account key differs from envelope UID") + } + var data pb.GridFightGetDataScRsp + if err := proto.Unmarshal(save.Wire, &data); err != nil { + panic(err) + } + if data.Retcode != 0 || data.LFLCDNGALME == nil { + panic("CW response lacks valid permanent metadata") + } + summary := map[string]any{"uid": save.UID, "revision": save.Revision, "client_version": save.Version, "assembly_sha256": save.Assembly, "active_run": data.DHFOFLFCLAH != nil} + if run := data.DHFOFLFCLAH; run != nil { + summary["run_id"] = run.UniqueId + if pending := run.FMIGOKIDKJL; pending != nil { + summary["queue"] = pending.QueuePosition + summary["pending_kind"] = fmt.Sprintf("%T", pending.FGLIODAJFML) + if offer := pending.GetIIDBLCFAAPC(); offer != nil { + summary["bonfire_offer"] = offer + } + } + for _, component := range run.NAGDJGMMCBE { + if component == nil { + continue + } + if stage := component.GetKLCPAAHDPJF(); stage != nil { + summary["route"] = stage.EMOHLJHPOPC + summary["chapter"] = stage.DCAHJELNJNP + summary["section"] = stage.SectionId + summary["boss_info"] = stage.BossInfo + summary["camps"] = stage.HEKMEJLMGFF + } + } + } + out, err := json.Marshal(summary) + if err != nil { + panic(err) + } + fmt.Println(string(out)) + } +} diff --git a/tools/inventory_cw.py b/tools/inventory_cw.py index 52fbae4..c832522 100644 --- a/tools/inventory_cw.py +++ b/tools/inventory_cw.py @@ -49,7 +49,7 @@ def inventory(root): handlers = {} for path in sorted((root / "internal/gameserver").glob("*.go")): text = path.read_text(encoding="utf-8") - for match in re.finditer(r'\b(handleNamed|handle|rawNamed|dummy)\("([^"]+)"', text): + for match in re.finditer(r'\b(cwHandleNamed|cwHandle|handleNamed|handle|rawNamed|dummy)\("([^"]+)"', text): if match[2].startswith("GridFight"): handlers.setdefault(match[2], []).append({ "file": path.relative_to(root).as_posix(), "kind": match[1], @@ -73,8 +73,44 @@ def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--root", type=pathlib.Path, default=pathlib.Path(__file__).resolve().parents[1]) parser.add_argument("--output", type=pathlib.Path, required=True) + parser.add_argument("--reference-root", type=pathlib.Path, + help="Optional source checkout to compare; never executes its server") + parser.add_argument("--markdown", type=pathlib.Path, + help="Write request/pending-action coverage for implementation planning") args = parser.parse_args() result = inventory(args.root.resolve()) + reference = {} + if args.reference_root: + for path in sorted(args.reference_root.rglob("HandlersGridFight*.cs")): + text = path.read_text(encoding="utf-8-sig") + for name in re.findall(r"\[Opcode\(CmdIds\.(\w+CsReq)\)\]", text): + reference.setdefault(name, []).append(path.relative_to(args.reference_root).as_posix()) + result["reference_source_handlers"] = reference + if args.markdown: + requests = sorted(name for name in result['commands'] if name.endswith('CsReq')) + lines = ['# CW dispatcher and source comparison', '', + 'Generated by `tools/inventory_cw.py` from the current revision table and source registrations.', + '**Registration is not gameplay verification.** A registered pending dispatcher still needs each action implemented.', + 'Reference source names are evidence for comparison only; they are not protocol aliases.', '', + '| Current request | Go registration | Reference same name |', + '| --- | --- | --- |'] + for name in requests: + handlers = result['registrations'].get(name.removesuffix('CsReq'), []) + go = ', '.join(f"`{h['file']}:{h['line']}` ({h['kind']})" for h in handlers) or 'Missing' + lines.append(f"| `{name}` | {go} | {'Yes' if name in reference else 'Not matched'} |") + root = args.root.resolve() + dispatcher = (root / 'internal/gameserver/currency_wars_entry_choice.go').read_text(encoding='utf-8') + body = result['types']['GridFightHandleBonfireHealHpCsReq']['body'] + arms = re.findall(r'^\s*\w+\s+(\w+)\s*=\s*\d+;', body, re.M) + lines += ['', '## Pending action arms', '', + '“Referenced” means the dispatcher inspects the field; it does not prove the entire action/effect works.', '', + '| Schema arm | Dispatcher |', '| --- | --- |'] + for arm in arms: + if arm in ('queue_position',): + continue + lines.append(f"| `{arm}` | {'Referenced' if 'req.Get' + arm + '()' in dispatcher else 'Missing'} |") + args.markdown.parent.mkdir(parents=True, exist_ok=True) + args.markdown.write_text('\n'.join(lines) + '\n', encoding='utf-8') args.output.parent.mkdir(parents=True, exist_ok=True) args.output.write_text(json.dumps(result, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") print(f"CW: {len(result['commands'])} commands, {len(result['types'])} reachable declarations, " diff --git a/tools/merge_captured_eidolon.py b/tools/merge_captured_eidolon.py new file mode 100644 index 0000000..e0d17a3 --- /dev/null +++ b/tools/merge_captured_eidolon.py @@ -0,0 +1,97 @@ +"""Merge exact Client Rank/Item capture into existing Eidolon resource. + +Both inputs are read-only bounded probe logs. Rank IDs are joined against the +captured AvatarConfig; each cost must exist as a captured Client ItemRow. The +existing entries and unknown document fields are retained. No player data is +opened or modified. +""" +import argparse +import hashlib +import json +import os +from pathlib import Path + + +def capture(path, prefix): + raw = path.read_bytes() + values = [] + for line in raw.decode('utf-8-sig').splitlines(): + if prefix in line: + values.append(json.loads(line.split(prefix, 1)[1])) + if not values: + raise ValueError(f'No captured rows found in {path}') + return values, hashlib.sha256(raw).hexdigest() + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument('--rank-log', required=True, type=Path) + p.add_argument('--item-log', required=True, type=Path) + p.add_argument('--avatar-config', required=True, type=Path) + p.add_argument('--preview-catalog', required=True, type=Path) + p.add_argument('--eidolon-config', required=True, type=Path) + args = p.parse_args() + rankrows, rankhash = capture(args.rank_log, '[GAC_RANK_COST] ROW ') + itemrows, itemhash = capture(args.item_log, '[GAC_RANK_ITEM] ROW ') + avatars = json.loads(args.avatar_config.read_text(encoding='utf8'))['avatar_config'] + catalog = json.loads(args.preview_catalog.read_text(encoding='utf8')) + identity = catalog.get('client_assembly_sha256', '') + if len(bytes.fromhex(identity)) != 32 or not catalog.get('evidence_id'): + raise ValueError('Captured Client identity is missing') + by_avatar = {} + for avatar in avatars: + aid = int(avatar['AvatarID']) + if aid in by_avatar: + raise ValueError(f'Duplicate AvatarID {aid}') + by_avatar[aid] = avatar + items = {} + for value in itemrows: + iid = int(value['requested_id']) + row = value['row'] + if iid in items or int(row['ID']) != iid or int(row['Rarity']) <= 0: + raise ValueError(f'Invalid or duplicate captured ItemRow {iid}') + items[iid] = row + grouped = {} + for row in rankrows: + aid = int(row['avatar_id']) + avatar = by_avatar.get(aid) + if avatar is None: + raise ValueError(f'Avatar {aid} missing from current config') + rank = int(row['rank']) + expected_ids = avatar.get('RankIDList', []) + if rank < 1 or rank > len(expected_ids) or int(row['rank_id']) != int(expected_ids[rank-1]): + raise ValueError(f'Rank ID mismatch for {aid}/{rank}') + cost = row.get('cost', []) + if not cost or any(int(c['ItemID']) not in items or int(c['ItemNum']) <= 0 for c in cost): + raise ValueError(f'Cost item missing from Client capture for {aid}/{rank}') + if rank in grouped.setdefault(aid, {}): + raise ValueError(f'Duplicate captured rank for {aid}/{rank}') + grouped[aid][rank] = {'rank': rank, 'cost': [{'ItemID': int(c['ItemID']), 'ItemNum': int(c['ItemNum'])} for c in cost]} + data = json.loads(args.eidolon_config.read_text(encoding='utf8')) + table = data['avatars'] + for aid, ranks in grouped.items(): + maximum = int(by_avatar[aid]['MaxRank']) + if set(ranks) != set(range(1, maximum + 1)): + raise ValueError(f'Rank capture incomplete for {aid}') + entry = {'max_rank': maximum, 'ranks': [ranks[i] for i in sorted(ranks)]} + if str(aid) in table and table[str(aid)] != entry: + raise ValueError(f'Existing Eidolon entry {aid} differs; refusing replacement') + table[str(aid)] = entry + if set(items) != {int(c['ItemID']) for r in rankrows for c in r['cost']}: + raise ValueError('Captured item list differs from rank costs') + data.setdefault('source', {})['current_client_additions'] = { + 'client_assembly_sha256': identity, + 'client_catalog_evidence': catalog['evidence_id'], + 'rank_capture_sha256': rankhash, + 'item_capture_sha256': itemhash, + 'method': 'AvatarRankConfigExcelTable.GetData by AvatarConfig RankIDList; ItemHelper.GetItem exact cost IDs', + 'avatar_ids': sorted(grouped), + } + temp = args.eidolon_config.with_name(args.eidolon_config.name + '.tmp') + temp.write_text(json.dumps(data, ensure_ascii=False, indent=2) + '\n', encoding='utf8') + os.replace(temp, args.eidolon_config) + print(f'Merged {len(grouped)} avatars and {len(rankrows)} verified rank rows') + + +if __name__ == '__main__': + main() diff --git a/tools/mission_config_access.lua b/tools/mission_config_access.lua new file mode 100644 index 0000000..6581560 --- /dev/null +++ b/tools/mission_config_access.lua @@ -0,0 +1,21 @@ +-- Named module fields only; no mission updates or scene calls. +do + local function capture() + local s=_G.__gacMissionConfigAccess1 or {offset=0} + _G.__gacMissionConfigAccess1=s + if s.done then return end + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_MISSION_CONFIG_ACCESS] '..tostring(v))end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + if not s.members then + s.t=typeof(CS.RPG.Client.GridFightModule).Assembly:GetType('RPG.Client.MissionModule') + s.members=s.t:GetFields(flags) + end + for n=1,16 do + if s.offset>=s.members.Length then s.done=true;log('END');return end + local f=s.members[s.offset];s.offset=s.offset+1 + if f.DeclaringType==s.t then log('FIELD '..f.Name..' '..f.FieldType.FullName..' STATIC '..tostring(f.IsStatic))end + end + end + local ok,e=pcall(capture) + if not ok then _G.__gacMissionConfigAccess1={done=true};CS.UnityEngine.Debug.Log('[GAC_MISSION_CONFIG_ACCESS] ERROR '..tostring(e))end +end diff --git a/tools/mission_config_function_pointers.lua b/tools/mission_config_function_pointers.lua new file mode 100644 index 0000000..9cbe2ee --- /dev/null +++ b/tools/mission_config_function_pointers.lua @@ -0,0 +1,14 @@ +do + if not _G.__gacMissionPointers2 then + _G.__gacMissionPointers2=true + local ok,e=pcall(function() + local t=typeof(CS.RPG.Client.MissionModule) + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + for _,name in ipairs({'GetSubMissionInfoConfig','GetSubMissionRow','GetMainMissionInfoConfig'})do + local m=t:GetMethod(name,flags) + CS.UnityEngine.Debug.Log('[GAC_MISSION_POINTERS] '..name..' '..tostring(m.MethodHandle.Value)) + end + end) + if not ok then CS.UnityEngine.Debug.Log('[GAC_MISSION_POINTERS] ERROR '..tostring(e))end + end +end diff --git a/tools/mission_config_keys.lua b/tools/mission_config_keys.lua new file mode 100644 index 0000000..437c2f2 --- /dev/null +++ b/tools/mission_config_keys.lua @@ -0,0 +1,34 @@ +-- Read the existing initialized config cache. Never invokes mission loaders. +do + if not _G.__gacMissionConfigKeys1 then + local s={done=false};_G.__gacMissionConfigKeys1=s + local function log(v)CS.UnityEngine.Debug.Log('[GAC_MISSION_CONFIG_KEYS] '..tostring(v))end + local ok,e=pcall(function() + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.MissionModule + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local f=m:GetType():GetField('_SubMissionInfoConfigs',flags) + local d=f:GetValue(m) + if not d or d.Count>100000 then error('missing or oversized initialized cache')end + log('BEGIN count='..d.Count) + s.iterator=d.Keys:GetEnumerator() + s.tick=function() + if s.done then return end + local frame=CS.UnityEngine.Time.frameCount + if s.frame==frame then return end + s.frame=frame + local good,err=pcall(function() + local ids={} + for n=1,128 do + if not s.iterator:MoveNext()then s.done=true;break end + ids[#ids+1]=tostring(s.iterator.Current) + end + if #ids>0 then log('IDS '..table.concat(ids,','))end + if s.done then s.iterator:Dispose();s.iterator=nil;log('END')end + end) + if not good then s.done=true;log('ERROR '..tostring(err))end + end + CS.UnityEngine.Application.onBeforeRender('+',s.tick) + end) + if not ok then s.done=true;log('ERROR '..tostring(e))end + end +end diff --git a/tools/mission_row_readiness.lua b/tools/mission_row_readiness.lua new file mode 100644 index 0000000..5d918c4 --- /dev/null +++ b/tools/mission_row_readiness.lua @@ -0,0 +1,16 @@ +-- Check the observed failing sub-mission against flat/config lookup, no update. +do + if not _G.__gacMissionRowReadiness1 then + _G.__gacMissionRowReadiness1=true + local ok,e=pcall(function() + local m=CS.RPG.Client.GlobalVars.s_ModuleManager.MissionModule + for _,id in ipairs({104020201,104020221}) do + local row=m:GetSubMissionRow(id) + CS.UnityEngine.Debug.Log('[GAC_MISSION_READINESS] id='..id..' row='..tostring(row)) + local cfg=m:GetSubMissionInfoConfig(id) + CS.UnityEngine.Debug.Log('[GAC_MISSION_READINESS] id='..id..' config='..tostring(cfg)) + end + end) + if not ok then CS.UnityEngine.Debug.Log('[GAC_MISSION_READINESS] ERROR '..tostring(e))end + end +end diff --git a/tools/mission_table_metadata.lua b/tools/mission_table_metadata.lua new file mode 100644 index 0000000..2158194 --- /dev/null +++ b/tools/mission_table_metadata.lua @@ -0,0 +1,26 @@ +-- Inactive targeted metadata capture. No mission mutation or factory calls. +do + local function capture() + local s=_G.__gacMissionTableMeta1 or {index=1,offset=0} + _G.__gacMissionTableMeta1=s + local names={'RPG.Client.MissionJsonTable','RPG.GameCore.MissionJsonTable','RPG.Client.MissionModule'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_MISSION_TABLE_META] '..tostring(v))end + if not s.t then + local asm=s.index==2 and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + s.t=asm:GetType(names[s.index]);log('TYPE '..names[s.index]..' '..tostring(s.t)) + if not s.t then s.index=s.index+1;return end + s.members=s.t:GetMethods(flags);s.offset=0 + end + for n=1,20 do + if s.offset>=s.members.Length then s.index=s.index+1;s.t=nil;s.members=nil;s.offset=0;return end + local m=s.members[s.offset];s.offset=s.offset+1 + if m.DeclaringType==s.t and (m.Name:find('SubMission') or m.Name:find('Instance') or m.Name:find('MissionInfo') or m.Name:find('Config')) then + log('METHOD '..tostring(m)..' STATIC '..tostring(m.IsStatic)) + end + end + end + local ok,e=pcall(capture) + if not ok then _G.__gacMissionTableMeta1={index=99};CS.UnityEngine.Debug.Log('[GAC_MISSION_TABLE_META] ERROR '..tostring(e))end +end diff --git a/tools/ping_colors_verify.lua b/tools/ping_colors_verify.lua new file mode 100644 index 0000000..0d86f88 --- /dev/null +++ b/tools/ping_colors_verify.lua @@ -0,0 +1,14 @@ +do + local s=_G.__gacPingColorVerify2 or {n=0};_G.__gacPingColorVerify2=s + if s.n<3 then + s.n=s.n+1 + local p=_G.__GAC_PING_RAINBOW_STATE + if p then for path,t in pairs(p.targets)do + local parts={} + for _,icon in ipairs(t.icons)do if icon.image.gameObject.activeInHierarchy then + parts[#parts+1]='mask='..tostring(icon.mask and icon.mask.name)..' slices='..#icon.slices + end end + CS.UnityEngine.Debug.Log('[GAC_PING_VERIFY2] sample='..s.n..' text='..tostring(t.text.text)..' vertexCount='..tostring(t.vertexCount)..' first='..tostring(t.colors and t.colors[0])..' '..table.concat(parts,' ')) + end end + end +end diff --git a/tools/ping_glyph_capture.lua b/tools/ping_glyph_capture.lua new file mode 100644 index 0000000..6a065a4 --- /dev/null +++ b/tools/ping_glyph_capture.lua @@ -0,0 +1,12 @@ +do + if not _G.__gacPingGlyphCount1 then + _G.__gacPingGlyphCount1=true + local p=_G.__GAC_PING_RAINBOW_STATE + if p then for _,t in pairs(p.targets)do + local g=t.text.cachedTextGenerator + local result='text='..tostring(t.text.text)..' verts='..tostring(g.verts.Count)..' characters='..tostring(g.characterCount)..' visible='..tostring(g.characterCountVisible) + for i=math.max(0,g.verts.Count-8),g.verts.Count-1 do result=result..' v'..i..'='..tostring(g.verts[i].position)..' uv='..tostring(g.verts[i].uv0)end + CS.UnityEngine.Debug.Log('[GAC_PING_GLYPHS] '..result) + end end + end +end diff --git a/tools/ping_sprite_capture.lua b/tools/ping_sprite_capture.lua new file mode 100644 index 0000000..ca58a1c --- /dev/null +++ b/tools/ping_sprite_capture.lua @@ -0,0 +1,14 @@ +do + if not _G.__gacPingSpriteCapture1 then + _G.__gacPingSpriteCapture1=true + local p='UIRoot/Page/MazeMainPage(Clone)/RightTopArea/NetStatusPanel/NetStatusPanel(Clone)/Connected/' + for _,n in ipairs({'Level1','Level2','Level3'})do + local ok,err=pcall(function() + local root=CS.UnityEngine.GameObject.Find(p:gsub('/Connected/$','')) + local t=root and root.transform:Find('Connected/'..n);local g=t and t:GetComponent(typeof(CS.UnityEngine.UI.Image)) + if g and g.sprite then local s=g.sprite;CS.UnityEngine.Debug.Log('[GAC_PING_SPRITE] '..n..' rect='..tostring(s.rect)..' texRect='..tostring(s.textureRect)..' offset='..tostring(s.textureRectOffset)..' rotation='..tostring(s.packingRotation)..' texture='..tostring(s.texture.width)..','..tostring(s.texture.height)..' color='..tostring(g.color))end + end) + if not ok then CS.UnityEngine.Debug.Log('[GAC_PING_SPRITE] ERROR '..tostring(err))end + end + end +end diff --git a/tools/ping_widget_capture.lua b/tools/ping_widget_capture.lua new file mode 100644 index 0000000..e713e52 --- /dev/null +++ b/tools/ping_widget_capture.lua @@ -0,0 +1,30 @@ +-- One named widget per heartbeat, no page/gameplay calls or assembly scan. +do + local s=_G.__gacPingWidgetCapture1 or {index=1};_G.__gacPingWidgetCapture1=s + local paths={ + 'UIRoot/Page/MazeMainPage(Clone)/RightTopArea/NetStatusPanel/NetStatusPanel(Clone)', + 'UIRoot/Page/BattleGamePhaseUI(Clone)/FunctionArea/NetStatusPanel/NetStatusPanel', + } + if s.index<=#paths then + local path=paths[s.index];s.index=s.index+1 + local function log(v)CS.UnityEngine.Debug.Log('[GAC_PING_WIDGET] '..v)end + local ok,err=pcall(function() + local root=CS.UnityEngine.GameObject.Find(path) + log('ROOT '..path..' found='..tostring(root~=nil)) + if not root then return end + local graphics=root:GetComponentsInChildren(typeof(CS.UnityEngine.UI.Graphic),true) + log('COUNT '..tostring(graphics.Length)) + for i=0,math.min(graphics.Length-1,23)do + local g=graphics[i];local t=g.transform;local chain={t.name} + while t.parent and t.gameObject~=root do t=t.parent;table.insert(chain,1,t.name)end + local line='GRAPHIC '..table.concat(chain,'/')..' type='..tostring(g:GetType().FullName)..' active='..tostring(g.gameObject.activeInHierarchy) + local rect=g.rectTransform.rect + line=line..' size='..tostring(rect.width)..','..tostring(rect.height) + pcall(function()line=line..' sprite='..tostring(g.sprite and g.sprite.name)..' imageType='..tostring(g.type)end) + pcall(function()line=line..' text='..tostring(g.text)..' rich='..tostring(g.supportRichText)end) + log(line) + end + end) + if not ok then log('ERROR '..tostring(err))end + end +end diff --git a/tools/preview_capture_trigger.lua b/tools/preview_capture_trigger.lua new file mode 100644 index 0000000..048ac1b --- /dev/null +++ b/tools/preview_capture_trigger.lua @@ -0,0 +1,11 @@ +-- Bounded serialization of one marker; no gameplay/scene factory invocation. +do local function tick() + local s=_G.__gacPreviewTick1 or {count=0};_G.__gacPreviewTick1=s + if s.count>=160 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + s.count=s.count+1 + CS.Newtonsoft.Json.JsonConvert.SerializeObject('GAC_PREVIEW_TICK') +end;local ok,e=pcall(tick);if not ok then _G.__gacPreviewTick1={count=999};CS.UnityEngine.Debug.Log('[GAC_PREVIEW_TICK] '..tostring(e))end end diff --git a/tools/preview_catalog_metadata.lua b/tools/preview_catalog_metadata.lua new file mode 100644 index 0000000..8d53114 --- /dev/null +++ b/tools/preview_catalog_metadata.lua @@ -0,0 +1,29 @@ +-- Exact named types, two per heartbeat. No assembly type enumeration or loaders. +do local function capture() + local s=_G.__gacPreviewMetadata1 or {index=1};_G.__gacPreviewMetadata1=s + local names={ + {'RPG.Client.GachaModule','client'}, {'RPG.Client.ParkourModule','client'}, + {'RPG.GameCore.GachaBasicInfoRow','core'}, {'RPG.GameCore.GachaConfigRow','core'}, + {'RPG.GameCore.GachaBasicInfoConfigRow','core'}, {'RPG.GameCore.GachaBannerConfigRow','core'}, + {'RPG.GameCore.ParkourLevelConfigRow','core'}, {'RPG.GameCore.ActivityPanelRow','core'}, + {'RPG.GameCore.ActivityConfigRow','core'}, {'RPG.GameCore.ActivityModuleRow','core'}, + {'RPG.Client.ActivityModule','client'}, {'RPG.Client.StellaJumpModule','client'} + } + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_PREVIEW_METADATA] '..tostring(x))end + for _=1,2 do + if s.index>#names then log('END');return end + local entry=names[s.index];s.index=s.index+1 + local asm=entry[2]=='core' and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + local t=asm:GetType(entry[1]);log('TYPE '..entry[1]..' '..tostring(t)) + if t then + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,95)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,255)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + end + end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacPreviewMetadata1={index=99};CS.UnityEngine.Debug.Log('[GAC_PREVIEW_METADATA] ERROR '..tostring(e))end end diff --git a/tools/preview_flat_tables.js b/tools/preview_flat_tables.js new file mode 100644 index 0000000..8768bb3 --- /dev/null +++ b/tools/preview_flat_tables.js @@ -0,0 +1,26 @@ +// Research capture for SHA 4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6. +// Exact FromBinary -> Add dictionary -> GetAll chains are retained in +// battle_diagnostics/preview-*-*.asm. Only flat config getters are called. +const mod = Process.getModuleByName('GameAssembly.dll'); +const tables = [['gacha',0x1e159760],['parkour',0x1dfe4ce0],['panels',0x1e4ca860],['activities',0x1dfbc4d0]]; +for (const [name,rva] of tables) { + if (mod.base.add(rva).readU32() !== 0x28ec8348) throw Error('Getter prologue differs: '+name); +} +const serialize = new NativeFunction(mod.base.add(0x1d46c040),'pointer',['pointer','pointer']); +let table=0,index=0,count=0,entries=null,done=false,busy=false; +const marker='GAC_PREVIEW_TICK'; +Interceptor.attach(mod.base.add(0x1d46c040),{ + onEnter(args){this.trigger=false;if(done||busy)return;try{this.trigger=args[0].add(0x10).readS32()===marker.length&&args[0].add(0x14).readUtf16String(marker.length)===marker;}catch(e){}}, + onLeave(){if(!this.trigger||busy||done)return;busy=true;try{ + if(entries===null){const get=new NativeFunction(mod.base.add(tables[table][1]),'pointer',['pointer']);const dict=get(ptr(0));if(dict.isNull())throw Error('Missing dictionary');count=dict.add(0x20).readU32();entries=dict.add(0x18).readPointer();index=0;if(count>4096||entries.isNull()||entries.add(0x18).readU32()32768)throw Error('Serialization bound');rows.push(value.add(0x14).readUtf16String(length)); + } + send({kind:'ROWS',table:tables[table][0],rows}); + if(index>=count){send({kind:'TABLE_END',table:tables[table][0],count});table++;entries=null;if(table===tables.length){done=true;send({kind:'END'});}} + }catch(e){done=true;send({kind:'ERROR',error:String(e)});}finally{busy=false;}} +}); +send({kind:'ATTACHED',path:mod.path,scope:'four named flat config tables, 16 rows per managed marker callback'}); diff --git a/tools/preview_gameboy_metadata.lua b/tools/preview_gameboy_metadata.lua new file mode 100644 index 0000000..4869600 --- /dev/null +++ b/tools/preview_gameboy_metadata.lua @@ -0,0 +1,17 @@ +-- Explicit named platform-game data/config types, one per heartbeat. +do local function capture() + local s=_G.__gacPreviewGameBoy3 or {index=1};_G.__gacPreviewGameBoy3=s + local names={'RPG.GameCore.GachaGroupDataRow','RPG.GameCore.ChenLingGameBoyChallengeRow','RPG.GameCore.ChenLingGameBoyChallengePackRow','RPG.GameCore.ActivityModuleConfigRow'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local name=names[s.index];s.index=s.index+1 + local asm=name:find('GameCore') and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + local t=asm:GetType(name);local log=function(x)CS.UnityEngine.Debug.Log('[GAC_PREVIEW_GAMEBOY] '..tostring(x))end + log('TYPE '..name..' '..tostring(t));if not t then return end + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,95)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,127)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacPreviewGameBoy3={index=99};CS.UnityEngine.Debug.Log('[GAC_PREVIEW_GAMEBOY] ERROR '..tostring(e))end end diff --git a/tools/preview_gameboy_tables.js b/tools/preview_gameboy_tables.js new file mode 100644 index 0000000..b9f0d74 --- /dev/null +++ b/tools/preview_gameboy_tables.js @@ -0,0 +1,26 @@ +// Research capture for SHA 4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6. +// Exact FromBinary -> Add dictionary -> GetAll chains are retained in +// battle_diagnostics/preview-*-*.asm. Only flat config getters are called. +const mod = Process.getModuleByName('GameAssembly.dll'); +const tables = [['gameboy',0x1ded33b0]]; +for (const [name,rva] of tables) { + if (mod.base.add(rva).readU32() !== 0x28ec8348) throw Error('Getter prologue differs: '+name); +} +const serialize = new NativeFunction(mod.base.add(0x1d46c040),'pointer',['pointer','pointer']); +let table=0,index=0,count=0,entries=null,done=false,busy=false; +const marker='GAC_PREVIEW_TICK'; +Interceptor.attach(mod.base.add(0x1d46c040),{ + onEnter(args){this.trigger=false;if(done||busy)return;try{this.trigger=args[0].add(0x10).readS32()===marker.length&&args[0].add(0x14).readUtf16String(marker.length)===marker;}catch(e){}}, + onLeave(){if(!this.trigger||busy||done)return;busy=true;try{ + if(entries===null){const get=new NativeFunction(mod.base.add(tables[table][1]),'pointer',['pointer']);const dict=get(ptr(0));if(dict.isNull())throw Error('Missing dictionary');count=dict.add(0x20).readU32();entries=dict.add(0x18).readPointer();index=0;if(count>4096||entries.isNull()||entries.add(0x18).readU32()32768)throw Error('Serialization bound');rows.push(value.add(0x14).readUtf16String(length)); + } + send({kind:'ROWS',table:tables[table][0],rows}); + if(index>=count){send({kind:'TABLE_END',table:tables[table][0],count});table++;entries=null;if(table===tables.length){done=true;send({kind:'END'});}} + }catch(e){done=true;send({kind:'ERROR',error:String(e)});}finally{busy=false;}} +}); +send({kind:'ATTACHED',path:mod.path,scope:'four named flat config tables, 16 rows per managed marker callback'}); diff --git a/tools/preview_minigame_metadata.lua b/tools/preview_minigame_metadata.lua new file mode 100644 index 0000000..4618971 --- /dev/null +++ b/tools/preview_minigame_metadata.lua @@ -0,0 +1,18 @@ +-- Exact FiveDim module and config rows; one type per heartbeat, paused in Battle. +do local function capture() + local s=_G.__gacPreviewMini1 or {index=1};_G.__gacPreviewMini1=s + local names={'RPG.Client.FiveDimModule','RPG.GameCore.FiveDimMiniGameConfigRow','RPG.GameCore.FiveDimMiniGameLevelConfigRow','RPG.GameCore.MiniGameConfigRow','RPG.GameCore.MiniGameLevelConfigRow','RPG.Client.BaseGachaPoolData','RPG.Client.GachaTimeData'} + if s.index>#names then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local name=names[s.index];s.index=s.index+1 + local asm=name:find('GameCore') and typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly or typeof(CS.RPG.Client.GridFightModule).Assembly + local t=asm:GetType(name) + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_PREVIEW_MINI] '..tostring(x))end + log('TYPE '..name..' '..tostring(t));if not t then return end + local fs=t:GetFields(flags);for i=0,math.min(fs.Length-1,95)do log('FIELD '..fs[i].Name..' '..fs[i].FieldType.FullName)end + local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,255)do local m=ms[i];if m.DeclaringType==t then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end + if s.index>#names then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacPreviewMini1={index=99};CS.UnityEngine.Debug.Log('[GAC_PREVIEW_MINI] ERROR '..tostring(e))end end diff --git a/tools/preview_module_fields.lua b/tools/preview_module_fields.lua new file mode 100644 index 0000000..3f63683 --- /dev/null +++ b/tools/preview_module_fields.lua @@ -0,0 +1,12 @@ +-- One exact manager type; at most 48 cached field descriptions per heartbeat. +do local function capture() + local s=_G.__gacPreviewFieldList1 or {offset=0};_G.__gacPreviewFieldList1=s + if s.done then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local fs=CS.RPG.Client.GlobalVars.s_ModuleManager:GetType():GetFields(flags) + for i=s.offset,math.min(s.offset+47,fs.Length-1,511)do CS.UnityEngine.Debug.Log('[GAC_PREVIEW_FIELD_LIST] '..fs[i].Name..' '..fs[i].FieldType.FullName)end + s.offset=s.offset+48;if s.offset>=fs.Length or s.offset>=512 then s.done=true;CS.UnityEngine.Debug.Log('[GAC_PREVIEW_FIELD_LIST] END count='..fs.Length)end +end;local ok,e=pcall(capture);if not ok then _G.__gacPreviewFieldList1={done=true};CS.UnityEngine.Debug.Log('[GAC_PREVIEW_FIELD_LIST] ERROR '..tostring(e))end end diff --git a/tools/preview_module_metadata.lua b/tools/preview_module_metadata.lua new file mode 100644 index 0000000..cd0735a --- /dev/null +++ b/tools/preview_module_metadata.lua @@ -0,0 +1,19 @@ +-- Exact module manager and named config rows. No assembly type enumeration. +do local function capture() + local s=_G.__gacPreviewModules1 or {index=1};_G.__gacPreviewModules1=s + if s.index>7 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end + local names={'GachaScheduleConfigRow','GachaMappingInfoConfigRow','GachaPoolConfigRow','GachaAvatarConfigRow','GachaUpConfigRow','GachaGroupConfigRow'} + local log=function(x)CS.UnityEngine.Debug.Log('[GAC_PREVIEW_MODULES] '..tostring(x))end + local t + if s.index==1 then t=CS.RPG.Client.GlobalVars.s_ModuleManager:GetType() + else t=typeof(CS.RPG.GameCore.GridFightRoleConfigRow).Assembly:GetType('RPG.GameCore.'..names[s.index-1])end + s.index=s.index+1;log('TYPE '..tostring(t));if not t then return end + local fs=t:GetFields(flags) + for i=0,math.min(fs.Length-1,383)do local f=fs[i];local n=f.Name:lower();if s.index~=2 or n:find('gacha')or n:find('activity')or n:find('parkour')or n:find('stella')or n:find('jump')then log('FIELD '..f.Name..' '..f.FieldType.FullName)end end + if s.index~=2 then local ms=t:GetMethods(flags);for i=0,math.min(ms.Length-1,63)do local m=ms[i];if m.Name=='FromBinary'then log('BINARY '..t.FullName..' HANDLE '..tostring(m.MethodHandle.Value))end end end + if s.index>7 then log('END')end +end;local ok,e=pcall(capture);if not ok then _G.__gacPreviewModules1={index=99};CS.UnityEngine.Debug.Log('[GAC_PREVIEW_MODULES] ERROR '..tostring(e))end end diff --git a/tools/request_cw_baked_modules.lua b/tools/request_cw_baked_modules.lua new file mode 100644 index 0000000..7565556 --- /dev/null +++ b/tools/request_cw_baked_modules.lua @@ -0,0 +1,17 @@ +-- Exact names observed in cw-loaded-lua.log, not inferred Tea Break page names. +-- Pair with the passive tools/capture_named_baked_modules.js hook. Keep outside +-- scripts/ until the runtime investigator deliberately stages this file. +-- One loader closure per heartbeat; never invoke the returned closure. +do + local state=_G.__gacCwBakedLoad1 or {index=1} + _G.__gacCwBakedLoad1=state + local names={ + 'Ui.GridFight.Entrance.S2.GridFightS2EntrancePage', + 'Ui.GridFight.Common.GridFightSeasonPrefabRouter', + } + if state.index<=#names then + local name=names[state.index];state.index=state.index+1 + local ok,value=pcall(package.loaders[3],name) + CS.UnityEngine.Debug.Log('[GAC_CW_BAKED_LOAD] '..name..' '..tostring(ok)..' '..type(value)) + end +end diff --git a/tools/request_cw_bonfire_modules.lua b/tools/request_cw_bonfire_modules.lua new file mode 100644 index 0000000..5e4adad --- /dev/null +++ b/tools/request_cw_bonfire_modules.lua @@ -0,0 +1,14 @@ +-- Ask for exact loaded UI package closures; never execute returned closures. +do + local s=_G.__gacCwBonfireModuleLoad1 or {i=1};_G.__gacCwBonfireModuleLoad1=s + local names={ + 'Ui.GridFight.Preparation.Bonfire.GridFightBonfireDialog', + 'Ui.GridFight.Preparation.Bonfire.GridFightBonfireEventPanel', + 'Ui.GridFight.Preparation.Bonfire.GridFightBonfireFinalRewardPanel', + } + if s.i<=#names then + local name=names[s.i];s.i=s.i+1 + local ok,v=pcall(package.loaders[3],name) + CS.UnityEngine.Debug.Log('[GAC_CW_BONFIRE_LOAD] '..name..' '..tostring(ok)..' '..type(v)) + end +end diff --git a/tools/request_cw_book_modules.lua b/tools/request_cw_book_modules.lua new file mode 100644 index 0000000..1a9e07b --- /dev/null +++ b/tools/request_cw_book_modules.lua @@ -0,0 +1,14 @@ +-- Exact named loader closures only; do not invoke the returned closures. +do + local s=_G.__gacCwBookModuleLoad1 or {index=1};_G.__gacCwBookModuleLoad1=s + local names={ + 'Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem', + 'Ui.DailyMission.Rogue.HandbookRogueGotoBtnBehaviour', + 'Logic.Goto.GotoCommand.GotoGridFightEntrancePageCommand', + } + if s.index<=#names then + local name=names[s.index];s.index=s.index+1 + local ok,value=pcall(package.loaders[3],name) + CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_MODULE_LOAD] '..name..' '..tostring(ok)..' '..type(value)) + end +end diff --git a/tools/request_gacha_main_capture.lua b/tools/request_gacha_main_capture.lua new file mode 100644 index 0000000..a8c4df9 --- /dev/null +++ b/tools/request_gacha_main_capture.lua @@ -0,0 +1,11 @@ +-- Request one known loader closure for passive capture; do not execute it. +do local function capture() + if _G.__gacGachaMainCapture1 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local current=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not current or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(current)then return end + _G.__gacGachaMainCapture1=true + local ok,v=pcall(package.loaders[3],'Ui.Gacha.GachaMainPage') + CS.UnityEngine.Debug.Log('[GAC_GACHA_MAIN_CAPTURE] '..tostring(ok)..' '..type(v)) +end local ok,e=pcall(capture);if not ok then _G.__gacGachaMainCapture1=true;CS.UnityEngine.Debug.Log('[GAC_GACHA_MAIN_CAPTURE] ERROR '..tostring(e))end end diff --git a/tools/request_gacha_tab_control_capture.lua b/tools/request_gacha_tab_control_capture.lua new file mode 100644 index 0000000..50ac137 --- /dev/null +++ b/tools/request_gacha_tab_control_capture.lua @@ -0,0 +1,10 @@ +do local function capture() + if _G.__gacTabControlCapture1 then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager + local current=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) + if not current or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(current)then return end + _G.__gacTabControlCapture1=true + local ok,v=pcall(package.loaders[3],'Ui.Component.TabControl') + CS.UnityEngine.Debug.Log('[GAC_GACHA_TAB_CONTROL_CAPTURE] '..tostring(ok)..' '..type(v)) +end local ok,e=pcall(capture);if not ok then _G.__gacTabControlCapture1=true;CS.UnityEngine.Debug.Log('[GAC_GACHA_TAB_CONTROL_CAPTURE] ERROR '..tostring(e))end end diff --git a/tools/request_named_baked_modules.lua b/tools/request_named_baked_modules.lua new file mode 100644 index 0000000..8e6ae7c --- /dev/null +++ b/tools/request_named_baked_modules.lua @@ -0,0 +1,10 @@ +-- Ask only for three exact package-loader closures; never execute them. +do + local s=_G.__gacNamedBakedLoad1 or {index=1};_G.__gacNamedBakedLoad1=s + local names={'Ui.Gacha.GachaPool.DefaultGachaAvatarPanel','Ui.Gacha.GachaPool.DefaultGachaPoolTabItem','Ui.Activity.ActivityPanel.ComicDessert.ComicDessertActivityPanel'} + if s.index<=#names then + local name=names[s.index];s.index=s.index+1 + local ok,value=pcall(package.loaders[3],name) + CS.UnityEngine.Debug.Log('[GAC_NAMED_BAKED_LOAD] '..name..' '..tostring(ok)..' '..type(value)) + end +end diff --git a/tools/resolve_captured_method_handles.js b/tools/resolve_captured_method_handles.js new file mode 100644 index 0000000..0286687 --- /dev/null +++ b/tools/resolve_captured_method_handles.js @@ -0,0 +1,17 @@ +// Exact named-method records from a caller-selected current-process capture. +// Offset +8 was verified against two independently known exception-bound +// AdventurePhase entrypoints. No assembly enumeration, native calls or writes. +const methods = globalThis.GAC_CAPTURED_METHOD_HANDLES; +if (!Array.isArray(methods) || methods.length < 1 || methods.length > 256) + throw Error('Bounded current-process method handle list required'); +const module = Process.getModuleByName('GameAssembly.dll'); +for (const item of methods) { + if (typeof item.name !== 'string' || !/^0x[0-9a-f]+$/i.test(item.handle)) + throw Error('Invalid exact method record'); + try { + const address = ptr(item.handle).add(8).readPointer(); + if (address.compare(module.base) < 0 || address.compare(module.base.add(module.size)) >= 0) + throw Error('Method pointer is outside selected GameAssembly'); + send({name:item.name, handle:item.handle, rva:address.sub(module.base).toString()}); + } catch (error) { send({name:item.name, error:String(error)}); } +} diff --git a/tools/restore_missing_persistent.py b/tools/restore_missing_persistent.py new file mode 100644 index 0000000..d80e271 --- /dev/null +++ b/tools/restore_missing_persistent.py @@ -0,0 +1,121 @@ +"""Restore explicitly selected missing save sections from a backup. + +Never replaces a present field (including false, zero, null or an empty map). +Uses the same persistent.lock byte-range lock as the Go servers, validates the +expected file digest under that lock, and atomically replaces only persistent. +""" +import argparse +import base64 +import contextlib +import hashlib +import json +import os +from pathlib import Path +import tempfile + + +@contextlib.contextmanager +def save_lock(path): + with path.open('a+b') as lock_file: + if os.name == 'nt': + import ctypes + from ctypes import wintypes + import msvcrt + class Overlapped(ctypes.Structure): + _fields_ = [('Internal', ctypes.c_size_t), ('InternalHigh', ctypes.c_size_t), + ('Offset', wintypes.DWORD), ('OffsetHigh', wintypes.DWORD), + ('hEvent', wintypes.HANDLE)] + kernel = ctypes.WinDLL('kernel32', use_last_error=True) + kernel.LockFileEx.argtypes = [wintypes.HANDLE, wintypes.DWORD, wintypes.DWORD, + wintypes.DWORD, wintypes.DWORD, ctypes.POINTER(Overlapped)] + kernel.LockFileEx.restype = wintypes.BOOL + kernel.UnlockFileEx.argtypes = [wintypes.HANDLE, wintypes.DWORD, wintypes.DWORD, + wintypes.DWORD, ctypes.POINTER(Overlapped)] + kernel.UnlockFileEx.restype = wintypes.BOOL + handle = msvcrt.get_osfhandle(lock_file.fileno()) + overlapped = Overlapped() + # Win32 EXCLUSIVE_LOCK | FAIL_IMMEDIATELY, byte zero, length one. + if not kernel.LockFileEx(handle, 3, 0, 1, 0, ctypes.byref(overlapped)): + raise OSError(ctypes.get_last_error(), 'persistent is locked by another writer') + try: + yield + finally: + kernel.UnlockFileEx(handle, 0, 1, 0, ctypes.byref(overlapped)) + else: + import fcntl + fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) + try: + yield + finally: + fcntl.flock(lock_file.fileno(), fcntl.LOCK_UN) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--root', type=Path, default=Path(__file__).resolve().parents[1]) + parser.add_argument('--source', type=Path, required=True) + parser.add_argument('--expected-sha256', required=True) + parser.add_argument('--keys', nargs='+', required=True) + parser.add_argument('--uid', type=int) + parser.add_argument('--apply', action='store_true') + args = parser.parse_args() + root = args.root.resolve() + target = root / 'persistent' + source_path = args.source.resolve() + if source_path == target or not (root / 'AGENTS.md').is_file(): + raise ValueError('source must be a distinct backup and root must be the repository') + source_bytes = source_path.read_bytes() + source = json.loads(source_bytes) + with save_lock(root / 'persistent.lock'): + before = target.read_bytes() + if hashlib.sha256(before).hexdigest().lower() != args.expected_sha256.lower(): + raise ValueError('persistent changed since the recovery checkpoint; no write performed') + current = json.loads(before) + if not isinstance(current, dict) or not isinstance(source, dict): + raise ValueError('both saves must be JSON objects') + patch, preserved, unavailable = {}, [], [] + for key in args.keys: + if key in current: + preserved.append(key) + elif key not in source: + unavailable.append(key) + else: + patch[key] = source[key] + if 'currency_wars' in patch: + if args.uid is None: + raise ValueError('CW recovery requires an explicit UID') + uid = str(args.uid) + snapshot = patch['currency_wars'].get(uid) + catalog = json.loads((root / 'resources/CurrencyWarsCatalog.json').read_bytes()) + if (not isinstance(snapshot, dict) or snapshot.get('uid') != args.uid + or snapshot.get('format_version') != 1 or not snapshot.get('revision') + or snapshot.get('client_version') != catalog.get('client_version') + or snapshot.get('assembly_sha256') != catalog['provenance']['game_assembly_sha256'] + or not base64.b64decode(snapshot.get('wire_data', ''), validate=True)): + raise ValueError('CW backup does not match the requested account/catalog') + # The explicit recovery UID never imports another account's run. + patch['currency_wars'] = {uid: snapshot} + result = dict(current) + result.update(patch) + summary = {'source_sha256': hashlib.sha256(source_bytes).hexdigest(), + 'before_sha256': hashlib.sha256(before).hexdigest(), + 'restored_keys': sorted(patch), 'preserved_existing_keys': preserved, + 'unavailable_keys': unavailable, 'applied': args.apply} + if args.apply and patch: + payload = (json.dumps(result, ensure_ascii=False, indent=2) + '\n').encode('utf-8') + descriptor, temporary = tempfile.mkstemp(prefix='.gac-recovery-', suffix='.tmp', dir=root) + try: + with os.fdopen(descriptor, 'wb') as stream: + stream.write(payload) + stream.flush() + os.fsync(stream.fileno()) + os.replace(temporary, target) + finally: + if os.path.exists(temporary): + os.unlink(temporary) + summary['after_sha256'] = hashlib.sha256(payload).hexdigest() + print(json.dumps(summary, ensure_ascii=False)) + + +if __name__ == '__main__': + main() diff --git a/tools/trainparty_readiness_metadata.lua b/tools/trainparty_readiness_metadata.lua new file mode 100644 index 0000000..8c4a930 --- /dev/null +++ b/tools/trainparty_readiness_metadata.lua @@ -0,0 +1,23 @@ +-- Inspect one exact failing module, including its initialized data dependencies. +do + local function capture() + local s=_G.__gacTrainPartyReadyMeta1 or {offset=0} + _G.__gacTrainPartyReadyMeta1=s + if s.done then return end + local value=CS.RPG.Client.GlobalVars.s_ModuleManager.TrainPartyModule + if not value then return end + local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) + local log=function(v)CS.UnityEngine.Debug.Log('[GAC_TRAINPARTY_READY_META] '..tostring(v))end + if not s.members then s.members=value:GetType():GetFields(flags)end + for n=1,12 do + if s.offset>=s.members.Length then s.done=true;log('END');return end + local f=s.members[s.offset];s.offset=s.offset+1 + if not f.IsStatic then + local v=f:GetValue(value) + log('FIELD '..f.Name..' '..f.FieldType.FullName..' VALUE '..tostring(v)) + end + end + end + local ok,e=pcall(capture) + if not ok then _G.__gacTrainPartyReadyMeta1={done=true};CS.UnityEngine.Debug.Log('[GAC_TRAINPARTY_READY_META] ERROR '..tostring(e))end +end diff --git a/tools/update_prydwen_endgame_teams.py b/tools/update_prydwen_endgame_teams.py index d5c70d3..a6d8db2 100644 --- a/tools/update_prydwen_endgame_teams.py +++ b/tools/update_prydwen_endgame_teams.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Refresh the MoC recommendation snapshot from the credited Prydwen dataset.""" +"""Refresh bundled Endgame team snapshots from the credited Prydwen dataset.""" from __future__ import annotations @@ -7,19 +7,21 @@ import argparse import datetime as dt import json import pathlib +import re import urllib.request DATASET_ROOT = "https://huggingface.co/datasets/LvlUrArti/MocDataProcessed/resolve/main" +DATASET_API_ROOT = "https://huggingface.co/api/datasets/LvlUrArti/MocDataProcessed" REPOSITORY_ROOT = pathlib.Path(__file__).resolve().parents[1] RESOURCE_PATH = REPOSITORY_ROOT / "resources" / "PrydwenEndgameTeams.json" AVATAR_CONFIG_PATH = REPOSITORY_ROOT / "resources" / "AvatarConfig.json" +MODES = ("moc", "pf", "as", "aa") +DEFAULT_REQUEST_TYPE_ROUTES = {"2": "moc", "3": "pf", "4": "as", "5": "aa"} -def fetch_json(path: str) -> object: - request = urllib.request.Request( - f"{DATASET_ROOT}/{path}", headers={"User-Agent": "GaC-hkrpg-go-recommendations/1.0"} - ) +def fetch_json(url: str) -> object: + request = urllib.request.Request(url, headers={"User-Agent": "GaC-hkrpg-go-recommendations/1.0"}) with urllib.request.urlopen(request, timeout=30) as response: return json.load(response) @@ -31,72 +33,105 @@ def normalized(value: str) -> str: def latest_dataset_version(config: dict[str, dict]) -> tuple[str, dict]: available = [] for version, metadata in config.items(): - mode = metadata.get("moc") date_text = metadata.get("collect_date") - if not version[0].isdigit() or not isinstance(mode, dict) or not date_text: + if not version[0].isdigit() or not date_text: continue try: collected = dt.datetime.strptime(date_text, "%d/%m/%Y").date() except ValueError: continue - available.append((collected, version, mode)) + if all(isinstance(metadata.get(mode), dict) for mode in MODES): + available.append((collected, version, metadata)) if not available: - raise RuntimeError("No dated MoC snapshot found in the source dataset config") - _, version, mode = max(available) - return version, mode + raise RuntimeError("No dated source snapshot has all four Endgame modes") + _, version, metadata = max(available) + return version, metadata -def avatar_tags() -> set[str]: +def avatar_index(aliases: dict[str, str]) -> tuple[set[str], dict[str, str]]: with AVATAR_CONFIG_PATH.open(encoding="utf-8") as source: config = json.load(source) - return { + tags = { normalized(entry["AvatarVOTag"]) for entry in config.get("avatar_config", []) if entry.get("AvatarVOTag") } + for slug, client_tag in aliases.items(): + if normalized(client_tag) in tags: + tags.add(normalized(slug)) + return tags, aliases -def stage_team(version: str, floor: int, stage: int, tags: set[str], aliases: dict[str, str]) -> dict: - path = f"{version}/moc/comps/{floor}-{stage}_combined.json" - rows = fetch_json(path) +def dataset_stage_files(version: str, mode: str, tree: list[dict]) -> list[tuple[str, str]]: + if not isinstance(tree, list): + raise RuntimeError("Unexpected Hugging Face dataset tree shape") + prefix = f"{version}/{mode}/comps/" + stages = [] + for entry in tree: + path = entry.get("path", "") + if entry.get("type") != "file" or not path.startswith(prefix): + continue + match = re.fullmatch(r"(\d+-\d+)_combined\.json", pathlib.PurePosixPath(path).name) + if match: + stages.append((match.group(1), path)) + if not stages: + raise RuntimeError(f"No stage team files found for {version}/{mode}") + return sorted(stages) + + +def best_compatible_team(path: str, tags: set[str], aliases: dict[str, str]) -> dict: + rows = fetch_json(f"{DATASET_ROOT}/{path}") if not isinstance(rows, list): raise RuntimeError(f"Unexpected dataset shape in {path}") - top = next((row for row in rows if row.get("rank") == 1), None) - if top is None: - raise RuntimeError(f"No rank-1 lineup found in {path}") - characters = [top.get(f"char_{slot}") for slot in ("one", "two", "three", "four")] - if any(not isinstance(slug, str) or not slug for slug in characters): - raise RuntimeError(f"Incomplete rank-1 lineup in {path}") - unresolved = [slug for slug in characters if normalized(aliases.get(slug, slug)) not in tags] - if unresolved: - raise RuntimeError( - f"Source slugs do not map to this Client's AvatarConfig: {', '.join(unresolved)}; " - "add their source-slug to AvatarVOTag aliases before refreshing" - ) - return {"stage": stage, "rank": 1, "characters": characters} + for row in sorted(rows, key=lambda value: value.get("rank", 1 << 30)): + characters = [row.get(f"char_{slot}") for slot in ("one", "two", "three", "four")] + if any(not isinstance(slug, str) or not slug for slug in characters): + continue + if len({normalized(slug) for slug in characters}) != 4: + continue + if any(normalized(aliases.get(slug, slug)) not in tags for slug in characters): + continue + return {"rank": int(row.get("rank", 0)), "characters": characters} + raise RuntimeError(f"No four-character lineup in {path} maps to this Client's AvatarConfig") def main() -> None: parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--floor", type=int, required=True, help="Prydwen MoC floor shown by the Client") - parser.add_argument("--stage-count", type=int, required=True, help="number of stage teams to fetch") + parser.add_argument("--mode", choices=("all", *MODES), default="all", help="refresh all modes or one Endgame mode") args = parser.parse_args() - if args.floor <= 0 or args.stage_count <= 0: - parser.error("--floor and --stage-count must be positive") - config = fetch_json("config.json") + config = fetch_json(f"{DATASET_ROOT}/config.json") if not isinstance(config, dict): raise RuntimeError("Unexpected source config shape") - version, cycle = latest_dataset_version(config) - aliases = {} + version, version_data = latest_dataset_version(config) + tree = fetch_json(f"{DATASET_API_ROOT}/tree/main?recursive=true&expand=false") + if not isinstance(tree, list): + raise RuntimeError("Unexpected Hugging Face dataset tree shape") + + previous = {} if RESOURCE_PATH.exists(): with RESOURCE_PATH.open(encoding="utf-8") as source: - aliases = json.load(source).get("avatar_aliases", {}) - tags = avatar_tags() - stages = [ - stage_team(version, args.floor, stage, tags, aliases) - for stage in range(1, args.stage_count + 1) - ] + previous = json.load(source) + aliases = previous.get("avatar_aliases", {}) + tags, aliases = avatar_index(aliases) + modes = previous.get("modes", {}) + selected_modes = MODES if args.mode == "all" else (args.mode,) + for mode in selected_modes: + stage_files = dataset_stage_files(version, mode, tree) + stages = [] + for stage, path in stage_files: + team = best_compatible_team(path, tags, aliases) + stages.append({"stage": stage, **team}) + metadata = version_data[mode] + modes[mode] = { + "dataset_version": version, + "challenge_version": metadata.get("ver"), + "challenge_name": metadata.get("name"), + "floor": max(int(stage["stage"].split("-")[0]) for stage in stages), + "stages": stages, + } + + routes = previous.get("protocol", {}).get("request_type_routes", DEFAULT_REQUEST_TYPE_ROUTES) output = { "source": { "name": "LvlUrArti/MocDataProcessed", @@ -104,17 +139,17 @@ def main() -> None: "license": "MIT", "attribution": "Processed data shown on Prydwen; credit LvlUrArti", "dataset_version": version, - "collect_date": dt.datetime.strptime(config[version]["collect_date"], "%d/%m/%Y").date().isoformat(), - "challenge_version": cycle.get("ver"), - "challenge_name": cycle.get("name"), + "collect_date": dt.datetime.strptime(version_data["collect_date"], "%d/%m/%Y").date().isoformat(), + }, + "protocol": { + "request_type_routes": routes, + "mapping_note": "Type 2 is retained for MoC; Types 3-5 are inferred mode routes pending Client packet confirmation.", }, "avatar_aliases": aliases, - "mode": "moc", - "floor": args.floor, - "stages": stages, + "modes": modes, } RESOURCE_PATH.write_text(json.dumps(output, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") - print(f"Updated {RESOURCE_PATH.relative_to(REPOSITORY_ROOT)} from dataset {version}: {len(stages)} stages") + print(f"Updated {', '.join(selected_modes)} from dataset {version} ({len(modes)} modes)") if __name__ == "__main__": diff --git a/versions.json b/versions.json index a7cd5fd..bfadad9 100644 --- a/versions.json +++ b/versions.json @@ -101,12 +101,36 @@ "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16317476_035e0a79224b_ed91499b6ef70b", "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" }, + "CNBETAWin4.5.53": { + "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16397599_dc132a900809_7e7a4d9792c13e", + "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16399740_f7f17473a4be_cd161900e78e53", + "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16399471_bf17e3d5c3d7_5605fcd6b48271", + "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" + }, + "CNBETAWin4.5.54": { + "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16470326_3d7642f3b95a_1bb36b1c1b50ea", + "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16468722_9a3bb59a4d54_a6b44310dd6f23", + "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16475505_fcd1e79987c2_dedcc3e216e164", + "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" + }, "CNBETAWin4.6.51": { "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16677734_6b334c11ab3a_653e489328e98e", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16706787_90982cd003eb_5ed57e0de4e2b4", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16679499_5abbd35a74c5_a28e83e88b78d5", "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" }, + "CNBETAWin4.6.52": { + "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16745161_ab68020d7aa9_43440a8f18e051", + "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16755051_300cb1cd6a4f_c87db7a5d4f2bf", + "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16745283_0b6f44e69f46_3bf68a1c7368cd", + "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" + }, + "CNBETAWin4.6.53": { + "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16818953_d4345bbd54a2_93c4aa5dfb978d", + "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16833202_959c316ef547_ac20bef3513343", + "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16819203_679727d45bd7_91ccc9b73f52b7", + "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" + }, "OSBETAAndroid4.6.51": { "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16685262_bd0485299f5b_858f2db22344cc", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16700702_5084ff364848_ebdcee37054070", @@ -191,28 +215,22 @@ "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16679499_5abbd35a74c5_a28e83e88b78d5", "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" }, - "CNBETAWin4.6.52": { - "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16745161_ab68020d7aa9_43440a8f18e051", - "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16755051_300cb1cd6a4f_c87db7a5d4f2bf", - "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16745283_0b6f44e69f46_3bf68a1c7368cd", - "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" - }, "OSBETAWin4.6.52": { "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16745161_ab68020d7aa9_43440a8f18e051", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16755051_300cb1cd6a4f_c87db7a5d4f2bf", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16745283_0b6f44e69f46_3bf68a1c7368cd", "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" }, - "CNBETAWin4.6.53": { - "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16818953_d4345bbd54a2_93c4aa5dfb978d", - "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16833202_959c316ef547_ac20bef3513343", - "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16819203_679727d45bd7_91ccc9b73f52b7", - "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" - }, "OSBETAWin4.6.53": { "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_16818953_d4345bbd54a2_93c4aa5dfb978d", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_16833202_959c316ef547_ac20bef3513343", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_16819203_679727d45bd7_91ccc9b73f52b7", "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" + }, + "OSBETAWin4.6.54": { + "asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_16927089_a94e4821d0e7_f07f57da7e245a", + "ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_16932918_4a2e3f79111d_3e2af64ea2b108", + "lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_16927297_c46b951e256b_0abc31ea529d71", + "ifix_url": "https://autopatchos.starrails.com/ifix/BetaLive/output_0_40d2ce0253_6d871f8bca6eb4" } } \ No newline at end of file