EF2 Changelog

Builds / 1.13.84

Update 1.13.84

Compared with 1.13.66 · published Tue, 18 Aug 2026 08:55:51 GMT · live channel

No summary yet.

Text changes 36

KeyText
ROULETTE_12 + Please click the [START] button to start the roulette wheel, click the [STOP] button to stop the wheel.
GAME_1606 + Race Matchup
GAME_1607 + Deploy a race with an advantage.
GAME_1608 + Attack Type
GAME_1609 + Check physical and magic attacks.
GAME_1610 + Evolve · Ascend
GAME_1611 + Make your units even stronger.
GAME_1612 + Each race has favorable and unfavorable matchups.
GAME_1613 + (You have an advantage over the race the arrow points to.)
GAME_1614 + Deploy heroes from a race with an advantage.
GAME_1615 + Some enemies have shields that block certain attack types.
GAME_1616 + Deploy heroes with an attack type effective against the shield.
GAME_1617 + Heroes can Evolve and Ascend in the Barracks to become stronger.
GAME_1618 + ※ Check the entry grade requirement before Evolving!
GAME_1619 + This user has already cleared it.
GAME_1620 + Clear All
GAME_1621 + Some soldiers (@@%) from ## battles with unconfirmed results have returned to the Barracks.
GAME_1622 + Clear Deck
GAME_1623 + Recent
GAME_1624 + Recommended
GAME_1625 + ## Likes
GAME_1626 + Apply
GAME_1627 + No users have cleared this yet.
GAME_1628 + You have already liked this.
GAME_1629 + You cannot like your own deck.
GAME_1630 + Deck applied. Heroes you do not own or that do not meet the entry requirements will be excluded.
GAME_1631 + Selected Pet Fragments: ##/@@
GAME_1632 + All pet fragments required for the exchange have been selected.
GAME_1523 ~ Confirm Pet Shard Purchase
GAME_1524 ~ Please select the Pet Shards to exchange.
GAME_1525 ~ There are no 5-star Pets to use as materials.
GAME_1526 ~ Use {1} [{0}] Pet Shards to purchase {3} [{2}] Pet Shards?
GAME_1527 ~ You can use extra Pet Shards after Grade 5 to purchase higher-grade Pet Shards.
GAME_1528 ~ All Secret Shop Pets are already 5-star, so there are no Pet Shards available to purchase.
GAME_1529 ~ The Secret Shop has been refreshed.
GAME_1530 ~ Available when you have ## or more Pet Points.

Translations touched: de (36), es (36), fr (36), id (36), it (36), ja (36), ko (33), pl (49), pt (36), ru (36), th (36), tr (36), vi (36), zh-CN (36), zh-TW (36)

Game data tables

Assets 13

FileChangeSizePreview
assets/ekkorr/UI_Ekkorr.json changed 191.9 KB → 191.9 KB
assets/ekkorr/UI_Ekkorr.ktx2 changed 2,113.0 KB → 2,057.2 KB
assets/images/UI_HELP2.json changed 1.6 KB → 2.9 KB

New sprites: Icon__Lose_AttackType, Icon__Lose_Trans, Icon__Lose_Tribe, Img__Lose_AttackType, Img__Lose_Top, Img__Lose_Trans, Img__Lose_Tribe

assets/images/UI_HELP2.ktx2 changed 336.8 KB → 468.0 KB
assets/images/conquest/conquestFacilityBook.draft.json added 156.5 KB
assets/images/conquest/conquestMaterialBook.draft.json added 23.2 KB
assets/images/conquest/conquestRegionBook.draft.json added 199.3 KB
assets/images/conquest/regionBorderOverlay.ktx2 added 44.9 KB
assets/images/conquest/regionGameData.draft.json added 66.6 KB
assets/images/conquest/regionIdR8.png added 34.7 KB after
assets/images/conquest/regionMetadata.json added 61.9 KB
assets/images/conquest/worldMapBase.ktx2 added 2,801.1 KB
assets/images/conquest/worldMapBaseMono.ktx2 added 2,589.5 KB

Bundled data: assets/images/conquest/conquestFacilityBook.draft.json 2

RowChangeFieldBeforeAfter
_noteadded"시트 변환본 (sheetToBooks.mjs)"
facilitiesadded[{"id": 1, "name_ko": "수송대", "name_key": "", "specialty_family_id": 7, "grade_max": 6, "level_per_grade": 10, "effects": [{"type": "squad_size", "base": 20, "per_level": 0.3333333333333333, "unit": "명/영웅"}, {"type": "carry", "base": 100, "per_level": 3, "unit": "%"}], "levels": [{"grade": 1, "level": 1, "costs": [{"material_id": 41, "qty": 10}, {"material_id": 51, "qty": 10}, {"material_id": 71, "qty": 5}]}, {"grade": 1, "level": 2, "costs": [{"material_id": 41, "qty": 16}, {"material_id": 51, "qty": 16}, {"material_id": 71, "qty": 8}]}, {"grade": 1, "level": 3, "costs": [{"material_id": 41, "qty": 22}, {"material_id": 51, "qty": 22}, {"material_id": 71, "qty": 11}]}, {"grade": 1, "level": 4, "costs": [{"material_id": 41, "qty": 28}, {"material_id": 51, "qty": 28}, {"material_id": 71, "qty": 14}]}, {"grade": 1, "level": 5, "costs": [{"material_id": 41, "qty": 34}, {"material_id": 51, "qty": 34}, {"material_id": 71, "qty": 17}]}, {"grade": 1, "level": 6, "costs": [{"material_id": 41, "qty": 40}, {"material_id": 51, "qty": 40}, {"material_id": 71, "qty": 20}]}, {"grade": 1, "level": 7, "costs": [{"material_id": 41, "qty": 46}, {"material_id": 51, "qty": 46}, {"material_id": 71, "qty": 23}]}, {"grade": 1, "level": 8, "costs": [{"material_id": 41, "qty": 52}, {"material_id": 51, "qty": 52}, {"material_id": 71, "qty": 26}]}, {"grade": 1, "level": 9, "costs": [{"material_id": 41, "qty": 58}, {"material_id": 51, "qty": 58}, {"material_id": 71, "qty": 29}]}, {"grade": 1, "level": 10, "costs": [{"material_id": 41, "qty": 64}, {"material_id": 51, "qty": 64}, {"material_id": 71, "qty": 32}], "promote": {"material_id": 62, "qty": 40}}, {"grade": 2, "level": 1, "costs": [{"material_id": 42, "qty": 10}, {"material_id": 52, "qty": 10}, {"material_id": 72, "qty": 5}]}, {"grade": 2, "level": 2, "costs": [{"material_id": 42, "qty": 16}, {"material_id": 52, "qty": 16}, {"material_id": 72, "qty": 8}]}, {"grade": 2, "level": 3, "costs": [{"material_id": 42, "qty": 22}, {"material_id": 52, "qty": 22}, {"material_id": 72, "qty": 11}]}, {"grade": 2, "level": 4, "costs": [{"material_id": 42, "qty": 28}, {"material_id": 52, "qty": 28}, {"material_id": 72, "qty": 14}]}, {"grade": 2, "level": 5, "costs": [{"material_id": 42, "qty": 34}, {"material_id": 52, "qty": 34}, {"material_id": 72, "qty": 17}]}, {"grade": 2, "level": 6, "costs": [{"material_id": 42, "qty": 40}, {"material_id": 52, "qty": 40}, {"material_id": 72, "qty": 20}]}, {"grade": 2, "level": 7, "costs": [{"material_id": 42, "qty": 46}, {"material_id": 52, "qty": 46}, {"material_id": 72, "qty": 23}]}, {"grade": 2, "level": 8, "costs": [{"material_id": 42, "qty": 52}, {"material_id": 52, "qty": 52}, {"material_id": 72, "qty": 26}]}, {"grade": 2, "level": 9, "costs": [{"material_id": 42, "qty": 58}, {"material_id": 52, "qty": 58}, {"material_id": 72, "qty": 29}]}, {"grade": 2, "level": 10, "costs": [{"material_id": 42, "qty": 64}, {"material_id": 52, "qty": 64}, {"material_id": 72, "qty": 32}], "promote": {"material_id": 63, "qty": 40}}, {"grade": 3, "level": 1, "costs": [{"material_id": 43, "qty": 10}, {"material_id": 53, "qty": 10}, {"material_id": 73, "qty": 5}]}, {"grade": 3, "level": 2, "costs": [{"material_id": 43, "qty": 16}, {"material_id": 53, "qty": 16}, {"material_id": 73, "qty": 8}]}, {"grade": 3, "level": 3, "costs": [{"material_id": 43, "qty": 22}, {"material_id": 53, "qty": 22}, {"material_id": 73, "qty": 11}]}, {"grade": 3, "level": 4, "costs": [{"material_id": 43, "qty": 28}, {"material_id": 53, "qty": 28}, {"material_id": 73, "qty": 14}]}, {"grade": 3, "level": 5, "costs": [{"material_id": 43, "qty": 34}, {"material_id": 53, "qty": 34}, {"material_id": 73, "qty": 17}]}, {"grade": 3, "level": 6, "costs": [{"material_id": 43, "qty": 40}, {"material_id": 53, "qty": 40}, {"material_id": 73, "qty": 20}]}, {"grade": 3, "level": 7, "costs": [{"material_id": 43, "qty": 46}, {"material_id": 53, "qty": 46}, {"material_id": 73, "qty": 23}]}, {"grade": 3, "level": 8, "costs": [{"material_id": 43, "qty": 52}, {"material_id": 53, "qty": 52}, {"material_id": 73, "qty": 26}]}, {"grade": 3, "level": 9, "costs": [{"material_id": 43, "qty": 58}, {"material_id": 53, "qty": 58}, {"material_id": 73, "qty": 29}]}, {"grade": 3, "level": 10, "costs": [{"material_id": 43, "qty": 64}, {"material_id": 53, "qty": 64}, {"material_id": 73, "qty": 32}], "promote": {"material_id": 64, "qty": 40}}, {"grade": 4, "level": 1, "costs": [{"material_id": 44, "qty": 10}, {"material_id": 54, "qty": 10}, {"material_id": 74, "qty": 5}]}, {"grade": 4, "level": 2, "costs": [{"material_id": 44, "qty": 16}, {"material_id": 54, "qty": 16}, {"material_id": 74, "qty": 8}]}, {"grade": 4, "level": 3, "costs": [{"material_id": 44, "qty": 22}, {"material_id": 54, "qty": 22}, {"material_id": 74, "qty": 11}]}, {"grade": 4, "level": 4, "costs": [{"material_id": 44, "qty": 28}, {"material_id": 54, "qty": 28}, {"material_id": 74, "qty": 14}]}, {"grade": 4, "level": 5, "costs": [{"material_id": 44, "qty": 34}, {"material_id": 54, "qty": 34}, {"material_id": 74, "qty": 17}]}, {"grade": 4, "level": 6, "costs": [{"material_id": 44, "qty": 40}, {"material_id": 54, "qty": 40}, {"material_id": 74, "qty": 20}]}, {"grade": 4, "level": 7, "costs": [{"material_id": 44, "qty": 46}, {"material_id": 54, "qty": 46}, {"material_id": 74, "qty": 23}]}, {"grade": 4, "level": 8, "costs": [{"material_id": 44, "qty": 52}, {"material_id": 54, "qty": 52}, {"material_id": 74, "qty": 26}]}, {"grade": 4, "level": 9, "costs": [{"material_id": 44, "qty": 58}, {"material_id": 54, "qty": 58}, {"material_id": 74, "qty": 29}]}, {"grade": 4, "level": 10, "costs": [{"material_id": 44, "qty": 64}, {"material_id": 54, "qty": 64}, {"material_id": 74, "qty": 32}], "promote": {"material_id": 65, "qty": 40}}, {"grade": 5, "level": 1, "costs": [{"material_id": 45, "qty": 10}, {"material_id": 55, "qty": 10}, {"material_id": 75, "qty": 5}]}, {"grade": 5, "level": 2, "costs": [{"material_id": 45, "qty": 16}, {"material_id": 55, "qty": 16}, {"material_id": 75, "qty": 8}]}, {"grade": 5, "level": 3, "costs": [{"material_id": 45, "qty": 22}, {"material_id": 55, "qty": 22}, {"material_id": 75, "qty": 11}]}, {"grade": 5, "level": 4, "costs": [{"material_id": 45, "qty": 28}, {"material_id": 55, "qty": 28}, {"material_id": 75, "qty": 14}]}, {"grade": 5, "level": 5, "costs": [{"material_id": 45, "qty": 34}, {"material_id": 55, "qty": 34}, {"material_id": 75, "qty": 17}]}, {"grade": 5, "level": 6, "costs": [{"material_id": 45, "qty": 40}, {"material_id": 55, "qty": 40}, {"material_id": 75, "qty": 20}]}, {"grade": 5, "level": 7, "costs": [{"material_id": 45, "qty": 46}, {"material_id": 55, "qty": 46}, {"material_id": 75, "qty": 23}]}, {"grade": 5, "level": 8, "costs": [{"material_id": 45, "qty": 52}, {"material_id": 55, "qty": 52}, {"material_id": 75, "qty": 26}]}, {"grade": 5, "level": 9, "costs": [{"material_id": 45, "qty": 58}, {"material_id": 55, "qty": 58}, {"material_id": 75, "qty": 29}]}, {"grade": 5, "level": 10, "costs": [{"material_id": 45, "qty": 64}, {"material_id": 55, "qty": 64}, {"material_id": 75, "qty": 32}], "promote": {"material_id": 66, "qty": 40}}, {"grade": 6, "level": 1, "costs": [{"material_id": 46, "qty": 10}, {"material_id": 56, "qty": 10}, {"material_id": 76, "qty": 5}]}, {"grade": 6, "level": 2, "costs": [{"material_id": 46, "qty": 16}, {"material_id": 56, "qty": 16}, {"material_id": 76, "qty": 8}]}, {"grade": 6, "level": 3, "costs": [{"material_id": 46, "qty": 22}, {"material_id": 56, "qty": 22}, {"material_id": 76, "qty": 11}]}, {"grade": 6, "level": 4, "costs": [{"material_id": 46, "qty": 28}, {"material_id": 56, "qty": 28}, {"material_id": 76, "qty": 14}]}, {"grade": 6, "level": 5, "costs": [{"material_id": 46, "qty": 34}, {"material_id": 56, "qty": 34}, {"material_id": 76, "qty": 17}]}, {"grade": 6, "level": 6, "costs": [{"material_id": 46, "qty": 40}, {"material_id": 56, "qty": 40}, {"material_id": 76, "qty": 20}]}, {"grade": 6, "level": 7, "costs": [{"material_id": 46, "qty": 46}, {"material_id": 56, "qty": 46}, {"material_id": 76, "qty": 23}]}, {"grade": 6, "level": 8, "costs": [{"material_id": 46, "qty": 52}, {"material_id": 56, "qty": 52}, {"material_id": 76, "qty": 26}]}, {"grade": 6, "level": 9, "costs": [{"material_id": 46, "qty": 58}, {"material_id": 56, "qty": 58}, {"material_id": 76, "qty": 29}]}, {"grade": 6, "level": 10, "costs": [{"material_id": 46, "qty": 64}, {"material_id": 56, "qty": 64}, {"material_id": 76, "qty": 32}]}], "desc_ko": "원정 병력 수·적재량. 도달 티어 게이트"}, {"id": 2, "name_ko": "탐사대", "name_key": "", "specialty_family_id": 15, "grade_max": 6, "level_per_grade": 10, "effects": [{"type": "scout_slots", "base": 1, "per_level": 0, "unit": "개(등급당+1)"}, {"type": "scout_speed", "base": 100, "per_level": 4, "unit": "%"}], "levels": [{"grade": 1, "level": 1, "costs": [{"material_id": 41, "qty": 10}, {"material_id": 51, "qty": 10}, {"material_id": 151, "qty": 5}]}, {"grade": 1, "level": 2, "costs": [{"material_id": 41, "qty": 16}, {"material_id": 51, "qty": 16}, {"material_id": 151, "qty": 8}]}, {"grade": 1, "level": 3, "costs": [{"material_id": 41, "qty": 22}, {"material_id": 51, "qty": 22}, {"material_id": 151, "qty": 11}]}, {"grade": 1, "level": 4, "costs": [{"material_id": 41, "qty": 28}, {"material_id": 51, "qty": 28}, {"material_id": 151, "qty": 14}]}, {"grade": 1, "level": 5, "costs": [{"material_id": 41, "qty": 34}, {"material_id": 51, "qty": 34}, {"material_id": 151, "qty": 17}]}, {"grade": 1, "level": 6, "costs": [{"material_id": 41, "qty": 40}, {"material_id": 51, "qty": 40}, {"material_id": 151, "qty": 20}]}, {"grade": 1, "level": 7, "costs": [{"material_id": 41, "qty": 46}, {"material_id": 51, "qty": 46}, {"material_id": 151, "qty": 23}]}, {"grade": 1, "level": 8, "costs": [{"material_id": 41, "qty": 52}, {"material_id": 51, "qty": 52}, {"material_id": 151, "qty": 26}]}, {"grade": 1, "level": 9, "costs": [{"material_id": 41, "qty": 58}, {"material_id": 51, "qty": 58}, {"material_id": 151, "qty": 29}]}, {"grade": 1, "level": 10, "costs": [{"material_id": 41, "qty": 64}, {"material_id": 51, "qty": 64}, {"material_id": 151, "qty": 32}], "promote": {"material_id": 62, "qty": 40}}, {"grade": 2, "level": 1, "costs": [{"material_id": 42, "qty": 10}, {"material_id": 52, "qty": 10}, {"material_id": 152, "qty": 5}]}, {"grade": 2, "level": 2, "costs": [{"material_id": 42, "qty": 16}, {"material_id": 52, "qty": 16}, {"material_id": 152, "qty": 8}]}, {"grade": 2, "level": 3, "costs": [{"material_id": 42, "qty": 22}, {"material_id": 52, "qty": 22}, {"material_id": 152, "qty": 11}]}, {"grade": 2, "level": 4, "costs": [{"material_id": 42, "qty": 28}, {"material_id": 52, "qty": 28}, {"material_id": 152, "qty": 14}]}, {"grade": 2, "level": 5, "costs": [{"material_id": 42, "qty": 34}, {"material_id": 52, "qty": 34}, {"material_id": 152, "qty": 17}]}, {"grade": 2, "level": 6, "costs": [{"material_id": 42, "qty": 40}, {"material_id": 52, "qty": 40}, {"material_id": 152, "qty": 20}]}, {"grade": 2, "level": 7, "costs": [{"material_id": 42, "qty": 46}, {"material_id": 52, "qty": 46}, {"material_id": 152, "qty": 23}]}, {"grade": 2, "level": 8, "costs": [{"material_id": 42, "qty": 52}, {"material_id": 52, "qty": 52}, {"material_id": 152, "qty": 26}]}, {"grade": 2, "level": 9, "costs": [{"material_id": 42, "qty": 58}, {"material_id": 52, "qty": 58}, {"material_id": 152, "qty": 29}]}, {"grade": 2, "level": 10, "costs": [{"material_id": 42, "qty": 64}, {"material_id": 52, "qty": 64}, {"material_id": 152, "qty": 32}], "promote": {"material_id": 63, "qty": 40}}, {"grade": 3, "level": 1, "costs": [{"material_id": 43, "qty": 10}, {"material_id": 53, "qty": 10}, {"material_id": 153, "qty": 5}]}, {"grade": 3, "level": 2, "costs": [{"material_id": 43, "qty": 16}, {"material_id": 53, "qty": 16}, {"material_id": 153, "qty": 8}]}, {"grade": 3, "level": 3, "costs": [{"material_id": 43, "qty": 22}, {"material_id": 53, "qty": 22}, {"material_id": 153, "qty": 11}]}, {"grade": 3, "level": 4, "costs": [{"material_id": 43, "qty": 28}, {"material_id": 53, "qty": 28}, {"material_id": 153, "qty": 14}]}, {"grade": 3, "level": 5, "costs": [{"material_id": 43, "qty": 34}, {"material_id": 53, "qty": 34}, {"material_id": 153, "qty": 17}]}, {"grade": 3, "level": 6, "costs": [{"material_id": 43, "qty": 40}, {"material_id": 53, "qty": 40}, {"material_id": 153, "qty": 20}]}, {"grade": 3, "level": 7, "costs": [{"material_id": 43, "qty": 46}, {"material_id": 53, "qty": 46}, {"material_id": 153, "qty": 23}]}, {"grade": 3, "level": 8, "costs": [{"material_id": 43, "qty": 52}, {"material_id": 53, "qty": 52}, {"material_id": 153, "qty": 26}]}, {"grade": 3, "level": 9, "costs": [{"material_id": 43, "qty": 58}, {"material_id": 53, "qty": 58}, {"material_id": 153, "qty": 29}]}, {"grade": 3, "level": 10, "costs": [{"material_id": 43, "qty": 64}, {"material_id": 53, "qty": 64}, {"material_id": 153, "qty": 32}], "promote": {"material_id": 64, "qty": 40}}, {"grade": 4, "level": 1, "costs": [{"material_id": 44, "qty": 10}, {"material_id": 54, "qty": 10}, {"material_id": 154, "qty": 5}]}, {"grade": 4, "level": 2, "costs": [{"material_id": 44, "qty": 16}, {"material_id": 54, "qty": 16}, {"material_id": 154, "qty": 8}]}, {"grade": 4, "level": 3, "costs": [{"material_id": 44, "qty": 22}, {"material_id": 54, "qty": 22}, {"material_id": 154, "qty": 11}]}, {"grade": 4, "level": 4, "costs": [{"material_id": 44, "qty": 28}, {"material_id": 54, "qty": 28}, {"material_id": 154, "qty": 14}]}, {"grade": 4, "level": 5, "costs": [{"material_id": 44, "qty": 34}, {"material_id": 54, "qty": 34}, {"material_id": 154, "qty": 17}]}, {"grade": 4, "level": 6, "costs": [{"material_id": 44, "qty": 40}, {"material_id": 54, "qty": 40}, {"material_id": 154, "qty": 20}]}, {"grade": 4, "level": 7, "costs": [{"material_id": 44, "qty": 46}, {"material_id": 54, "qty": 46}, {"material_id": 154, "qty": 23}]}, {"grade": 4, "level": 8, "costs": [{"material_id": 44, "qty": 52}, {"material_id": 54, "qty": 52}, {"material_id": 154, "qty": 26}]}, {"grade": 4, "level": 9, "costs": [{"material_id": 44, "qty": 58}, {"material_id": 54, "qty": 58}, {"material_id": 154, "qty": 29}]}, {"grade": 4, "level": 10, "costs": [{"material_id": 44, "qty": 64}, {"material_id": 54, "qty": 64}, {"material_id": 154, "qty": 32}], "promote": {"material_id": 65, "qty": 40}}, {"grade": 5, "level": 1, "costs": [{"material_id": 45, "qty": 10}, {"material_id": 55, "qty": 10}, {"material_id": 155, "qty": 5}]}, {"grade": 5, "level": 2, "costs": [{"material_id": 45, "qty": 16}, {"material_id": 55, "qty": 16}, {"material_id": 155, "qty": 8}]}, {"grade": 5, "level": 3, "costs": [{"material_id": 45, "qty": 22}, {"material_id": 55, "qty": 22}, {"material_id": 155, "qty": 11}]}, {"grade": 5, "level": 4, "costs": [{"material_id": 45, "qty": 28}, {"material_id": 55, "qty": 28}, {"material_id": 155, "qty": 14}]}, {"grade": 5, "level": 5, "costs": [{"material_id": 45, "qty": 34}, {"material_id": 55, "qty": 34}, {"material_id": 155, "qty": 17}]}, {"grade": 5, "level": 6, "costs": [{"material_id": 45, "qty": 40}, {"material_id": 55, "qty": 40}, {"material_id": 155, "qty": 20}]}, {"grade": 5, "level": 7, "costs": [{"material_id": 45, "qty": 46}, {"material_id": 55, "qty": 46}, {"material_id": 155, "qty": 23}]}, {"grade": 5, "level": 8, "costs": [{"material_id": 45, "qty": 52}, {"material_id": 55, "qty": 52}, {"material_id": 155, "qty": 26}]}, {"grade": 5, "level": 9, "costs": [{"material_id": 45, "qty": 58}, {"material_id": 55, "qty": 58}, {"material_id": 155, "qty": 29}]}, {"grade": 5, "level": 10, "costs": [{"material_id": 45, "qty": 64}, {"material_id": 55, "qty": 64}, {"material_id": 155, "qty": 32}], "promote": {"material_id": 66, "qty": 40}}, {"grade": 6, "level": 1, "costs": [{"material_id": 46, "qty": 10}, {"material_id": 56, "qty": 10}, {"material_id": 156, "qty": 5}]}, {"grade": 6, "level": 2, "costs": [{"material_id": 46, "qty": 16}, {"material_id": 56, "qty": 16}, {"material_id": 156, "qty": 8}]}, {"grade": 6, "level": 3, "costs": [{"material_id": 46, "qty": 22}, {"material_id": 56, "qty": 22}, {"material_id": 156, "qty": 11}]}, {"grade": 6, "level": 4, "costs": [{"material_id": 46, "qty": 28}, {"material_id": 56, "qty": 28}, {"material_id": 156, "qty": 14}]}, {"grade": 6, "level": 5, "costs": [{"material_id": 46, "qty": 34}, {"material_id": 56, "qty": 34}, {"material_id": 156, "qty": 17}]}, {"grade": 6, "level": 6, "costs": [{"material_id": 46, "qty": 40}, {"material_id": 56, "qty": 40}, {"material_id": 156, "qty": 20}]}, {"grade": 6, "level": 7, "costs": [{"material_id": 46, "qty": 46}, {"material_id": 56, "qty": 46}, {"material_id": 156, "qty": 23}]}, {"grade": 6, "level": 8, "costs": [{"material_id": 46, "qty": 52}, {"material_id": 56, "qty": 52}, {"material_id": 156, "qty": 26}]}, {"grade": 6, "level": 9, "costs": [{"material_id": 46, "qty": 58}, {"material_id": 56, "qty": 58}, {"material_id": 156, "qty": 29}]}, {"grade": 6, "level": 10, "costs": [{"material_id": 46, "qty": 64}, {"material_id": 56, "qty": 64}, {"material_id": 156, "qty": 32}]}], "desc_ko": "미점령 지역 탐사(안개·이해도). 파견 슬롯=등급"}, {"id": 3, "name_ko": "외교관", "name_key": "", "specialty_family_id": 11, "grade_max": 6, "level_per_grade": 10, "effects": [{"type": "friendship_gain", "base": 100, "per_level": 3, "unit": "%"}, {"type": "envoy_slots", "base": 1, "per_level": 0, "unit": "개(2등급당+1)"}], "levels": [{"grade": 1, "level": 1, "costs": [{"material_id": 41, "qty": 10}, {"material_id": 51, "qty": 10}, {"material_id": 111, "qty": 5}]}, {"grade": 1, "level": 2, "costs": [{"material_id": 41, "qty": 16}, {"material_id": 51, "qty": 16}, {"material_id": 111, "qty": 8}]}, {"grade": 1, "level": 3, "costs": [{"material_id": 41, "qty": 22}, {"material_id": 51, "qty": 22}, {"material_id": 111, "qty": 11}]}, {"grade": 1, "level": 4, "costs": [{"material_id": 41, "qty": 28}, {"material_id": 51, "qty": 28}, {"material_id": 111, "qty": 14}]}, {"grade": 1, "level": 5, "costs": [{"material_id": 41, "qty": 34}, {"material_id": 51, "qty": 34}, {"material_id": 111, "qty": 17}]}, {"grade": 1, "level": 6, "costs": [{"material_id": 41, "qty": 40}, {"material_id": 51, "qty": 40}, {"material_id": 111, "qty": 20}]}, {"grade": 1, "level": 7, "costs": [{"material_id": 41, "qty": 46}, {"material_id": 51, "qty": 46}, {"material_id": 111, "qty": 23}]}, {"grade": 1, "level": 8, "costs": [{"material_id": 41, "qty": 52}, {"material_id": 51, "qty": 52}, {"material_id": 111, "qty": 26}]}, {"grade": 1, "level": 9, "costs": [{"material_id": 41, "qty": 58}, {"material_id": 51, "qty": 58}, {"material_id": 111, "qty": 29}]}, {"grade": 1, "level": 10, "costs": [{"material_id": 41, "qty": 64}, {"material_id": 51, "qty": 64}, {"material_id": 111, "qty": 32}], "promote": {"material_id": 62, "qty": 40}}, {"grade": 2, "level": 1, "costs": [{"material_id": 42, "qty": 10}, {"material_id": 52, "qty": 10}, {"material_id": 112, "qty": 5}]}, {"grade": 2, "level": 2, "costs": [{"material_id": 42, "qty": 16}, {"material_id": 52, "qty": 16}, {"material_id": 112, "qty": 8}]}, {"grade": 2, "level": 3, "costs": [{"material_id": 42, "qty": 22}, {"material_id": 52, "qty": 22}, {"material_id": 112, "qty": 11}]}, {"grade": 2, "level": 4, "costs": [{"material_id": 42, "qty": 28}, {"material_id": 52, "qty": 28}, {"material_id": 112, "qty": 14}]}, {"grade": 2, "level": 5, "costs": [{"material_id": 42, "qty": 34}, {"material_id": 52, "qty": 34}, {"material_id": 112, "qty": 17}]}, {"grade": 2, "level": 6, "costs": [{"material_id": 42, "qty": 40}, {"material_id": 52, "qty": 40}, {"material_id": 112, "qty": 20}]}, {"grade": 2, "level": 7, "costs": [{"material_id": 42, "qty": 46}, {"material_id": 52, "qty": 46}, {"material_id": 112, "qty": 23}]}, {"grade": 2, "level": 8, "costs": [{"material_id": 42, "qty": 52}, {"material_id": 52, "qty": 52}, {"material_id": 112, "qty": 26}]}, {"grade": 2, "level": 9, "costs": [{"material_id": 42, "qty": 58}, {"material_id": 52, "qty": 58}, {"material_id": 112, "qty": 29}]}, {"grade": 2, "level": 10, "costs": [{"material_id": 42, "qty": 64}, {"material_id": 52, "qty": 64}, {"material_id": 112, "qty": 32}], "promote": {"material_id": 63, "qty": 40}}, {"grade": 3, "level": 1, "costs": [{"material_id": 43, "qty": 10}, {"material_id": 53, "qty": 10}, {"material_id": 113, "qty": 5}]}, {"grade": 3, "level": 2, "costs": [{"material_id": 43, "qty": 16}, {"material_id": 53, "qty": 16}, {"material_id": 113, "qty": 8}]}, {"grade": 3, "level": 3, "costs": [{"material_id": 43, "qty": 22}, {"material_id": 53, "qty": 22}, {"material_id": 113, "qty": 11}]}, {"grade": 3, "level": 4, "costs": [{"material_id": 43, "qty": 28}, {"material_id": 53, "qty": 28}, {"material_id": 113, "qty": 14}]}, {"grade": 3, "level": 5, "costs": [{"material_id": 43, "qty": 34}, {"material_id": 53, "qty": 34}, {"material_id": 113, "qty": 17}]}, {"grade": 3, "level": 6, "costs": [{"material_id": 43, "qty": 40}, {"material_id": 53, "qty": 40}, {"material_id": 113, "qty": 20}]}, {"grade": 3, "level": 7, "costs": [{"material_id": 43, "qty": 46}, {"material_id": 53, "qty": 46}, {"material_id": 113, "qty": 23}]}, {"grade": 3, "level": 8, "costs": [{"material_id": 43, "qty": 52}, {"material_id": 53, "qty": 52}, {"material_id": 113, "qty": 26}]}, {"grade": 3, "level": 9, "costs": [{"material_id": 43, "qty": 58}, {"material_id": 53, "qty": 58}, {"material_id": 113, "qty": 29}]}, {"grade": 3, "level": 10, "costs": [{"material_id": 43, "qty": 64}, {"material_id": 53, "qty": 64}, {"material_id": 113, "qty": 32}], "promote": {"material_id": 64, "qty": 40}}, {"grade": 4, "level": 1, "costs": [{"material_id": 44, "qty": 10}, {"material_id": 54, "qty": 10}, {"material_id": 114, "qty": 5}]}, {"grade": 4, "level": 2, "costs": [{"material_id": 44, "qty": 16}, {"material_id": 54, "qty": 16}, {"material_id": 114, "qty": 8}]}, {"grade": 4, "level": 3, "costs": [{"material_id": 44, "qty": 22}, {"material_id": 54, "qty": 22}, {"material_id": 114, "qty": 11}]}, {"grade": 4, "level": 4, "costs": [{"material_id": 44, "qty": 28}, {"material_id": 54, "qty": 28}, {"material_id": 114, "qty": 14}]}, {"grade": 4, "level": 5, "costs": [{"material_id": 44, "qty": 34}, {"material_id": 54, "qty": 34}, {"material_id": 114, "qty": 17}]}, {"grade": 4, "level": 6, "costs": [{"material_id": 44, "qty": 40}, {"material_id": 54, "qty": 40}, {"material_id": 114, "qty": 20}]}, {"grade": 4, "level": 7, "costs": [{"material_id": 44, "qty": 46}, {"material_id": 54, "qty": 46}, {"material_id": 114, "qty": 23}]}, {"grade": 4, "level": 8, "costs": [{"material_id": 44, "qty": 52}, {"material_id": 54, "qty": 52}, {"material_id": 114, "qty": 26}]}, {"grade": 4, "level": 9, "costs": [{"material_id": 44, "qty": 58}, {"material_id": 54, "qty": 58}, {"material_id": 114, "qty": 29}]}, {"grade": 4, "level": 10, "costs": [{"material_id": 44, "qty": 64}, {"material_id": 54, "qty": 64}, {"material_id": 114, "qty": 32}], "promote": {"material_id": 65, "qty": 40}}, {"grade": 5, "level": 1, "costs": [{"material_id": 45, "qty": 10}, {"material_id": 55, "qty": 10}, {"material_id": 115, "qty": 5}]}, {"grade": 5, "level": 2, "costs": [{"material_id": 45, "qty": 16}, {"material_id": 55, "qty": 16}, {"material_id": 115, "qty": 8}]}, {"grade": 5, "level": 3, "costs": [{"material_id": 45, "qty": 22}, {"material_id": 55, "qty": 22}, {"material_id": 115, "qty": 11}]}, {"grade": 5, "level": 4, "costs": [{"material_id": 45, "qty": 28}, {"material_id": 55, "qty": 28}, {"material_id": 115, "qty": 14}]}, {"grade": 5, "level": 5, "costs": [{"material_id": 45, "qty": 34}, {"material_id": 55, "qty": 34}, {"material_id": 115, "qty": 17}]}, {"grade": 5, "level": 6, "costs": [{"material_id": 45, "qty": 40}, {"material_id": 55, "qty": 40}, {"material_id": 115, "qty": 20}]}, {"grade": 5, "level": 7, "costs": [{"material_id": 45, "qty": 46}, {"material_id": 55, "qty": 46}, {"material_id": 115, "qty": 23}]}, {"grade": 5, "level": 8, "costs": [{"material_id": 45, "qty": 52}, {"material_id": 55, "qty": 52}, {"material_id": 115, "qty": 26}]}, {"grade": 5, "level": 9, "costs": [{"material_id": 45, "qty": 58}, {"material_id": 55, "qty": 58}, {"material_id": 115, "qty": 29}]}, {"grade": 5, "level": 10, "costs": [{"material_id": 45, "qty": 64}, {"material_id": 55, "qty": 64}, {"material_id": 115, "qty": 32}], "promote": {"material_id": 66, "qty": 40}}, {"grade": 6, "level": 1, "costs": [{"material_id": 46, "qty": 10}, {"material_id": 56, "qty": 10}, {"material_id": 116, "qty": 5}]}, {"grade": 6, "level": 2, "costs": [{"material_id": 46, "qty": 16}, {"material_id": 56, "qty": 16}, {"material_id": 116, "qty": 8}]}, {"grade": 6, "level": 3, "costs": [{"material_id": 46, "qty": 22}, {"material_id": 56, "qty": 22}, {"material_id": 116, "qty": 11}]}, {"grade": 6, "level": 4, "costs": [{"material_id": 46, "qty": 28}, {"material_id": 56, "qty": 28}, {"material_id": 116, "qty": 14}]}, {"grade": 6, "level": 5, "costs": [{"material_id": 46, "qty": 34}, {"material_id": 56, "qty": 34}, {"material_id": 116, "qty": 17}]}, {"grade": 6, "level": 6, "costs": [{"material_id": 46, "qty": 40}, {"material_id": 56, "qty": 40}, {"material_id": 116, "qty": 20}]}, {"grade": 6, "level": 7, "costs": [{"material_id": 46, "qty": 46}, {"material_id": 56, "qty": 46}, {"material_id": 116, "qty": 23}]}, {"grade": 6, "level": 8, "costs": [{"material_id": 46, "qty": 52}, {"material_id": 56, "qty": 52}, {"material_id": 116, "qty": 26}]}, {"grade": 6, "level": 9, "costs": [{"material_id": 46, "qty": 58}, {"material_id": 56, "qty": 58}, {"material_id": 116, "qty": 29}]}, {"grade": 6, "level": 10, "costs": [{"material_id": 46, "qty": 64}, {"material_id": 56, "qty": 64}, {"material_id": 116, "qty": 32}]}], "desc_ko": "점령지 우호도 상승. 사치품=선물"}, {"id": 4, "name_ko": "전술소", "name_key": "", "specialty_family_id": 10, "grade_max": 6, "level_per_grade": 10, "effects": [{"type": "exp_atk", "base": 100, "per_level": 1.5, "unit": "%"}, {"type": "exp_hp", "base": 100, "per_level": 1.5, "unit": "%"}], "levels": [{"grade": 1, "level": 1, "costs": [{"material_id": 41, "qty": 10}, {"material_id": 51, "qty": 10}, {"material_id": 101, "qty": 5}]}, {"grade": 1, "level": 2, "costs": [{"material_id": 41, "qty": 16}, {"material_id": 51, "qty": 16}, {"material_id": 101, "qty": 8}]}, {"grade": 1, "level": 3, "costs": [{"material_id": 41, "qty": 22}, {"material_id": 51, "qty": 22}, {"material_id": 101, "qty": 11}]}, {"grade": 1, "level": 4, "costs": [{"material_id": 41, "qty": 28}, {"material_id": 51, "qty": 28}, {"material_id": 101, "qty": 14}]}, {"grade": 1, "level": 5, "costs": [{"material_id": 41, "qty": 34}, {"material_id": 51, "qty": 34}, {"material_id": 101, "qty": 17}]}, {"grade": 1, "level": 6, "costs": [{"material_id": 41, "qty": 40}, {"material_id": 51, "qty": 40}, {"material_id": 101, "qty": 20}]}, {"grade": 1, "level": 7, "costs": [{"material_id": 41, "qty": 46}, {"material_id": 51, "qty": 46}, {"material_id": 101, "qty": 23}]}, {"grade": 1, "level": 8, "costs": [{"material_id": 41, "qty": 52}, {"material_id": 51, "qty": 52}, {"material_id": 101, "qty": 26}]}, {"grade": 1, "level": 9, "costs": [{"material_id": 41, "qty": 58}, {"material_id": 51, "qty": 58}, {"material_id": 101, "qty": 29}]}, {"grade": 1, "level": 10, "costs": [{"material_id": 41, "qty": 64}, {"material_id": 51, "qty": 64}, {"material_id": 101, "qty": 32}], "promote": {"material_id": 62, "qty": 40}}, {"grade": 2, "level": 1, "costs": [{"material_id": 42, "qty": 10}, {"material_id": 52, "qty": 10}, {"material_id": 102, "qty": 5}]}, {"grade": 2, "level": 2, "costs": [{"material_id": 42, "qty": 16}, {"material_id": 52, "qty": 16}, {"material_id": 102, "qty": 8}]}, {"grade": 2, "level": 3, "costs": [{"material_id": 42, "qty": 22}, {"material_id": 52, "qty": 22}, {"material_id": 102, "qty": 11}]}, {"grade": 2, "level": 4, "costs": [{"material_id": 42, "qty": 28}, {"material_id": 52, "qty": 28}, {"material_id": 102, "qty": 14}]}, {"grade": 2, "level": 5, "costs": [{"material_id": 42, "qty": 34}, {"material_id": 52, "qty": 34}, {"material_id": 102, "qty": 17}]}, {"grade": 2, "level": 6, "costs": [{"material_id": 42, "qty": 40}, {"material_id": 52, "qty": 40}, {"material_id": 102, "qty": 20}]}, {"grade": 2, "level": 7, "costs": [{"material_id": 42, "qty": 46}, {"material_id": 52, "qty": 46}, {"material_id": 102, "qty": 23}]}, {"grade": 2, "level": 8, "costs": [{"material_id": 42, "qty": 52}, {"material_id": 52, "qty": 52}, {"material_id": 102, "qty": 26}]}, {"grade": 2, "level": 9, "costs": [{"material_id": 42, "qty": 58}, {"material_id": 52, "qty": 58}, {"material_id": 102, "qty": 29}]}, {"grade": 2, "level": 10, "costs": [{"material_id": 42, "qty": 64}, {"material_id": 52, "qty": 64}, {"material_id": 102, "qty": 32}], "promote": {"material_id": 63, "qty": 40}}, {"grade": 3, "level": 1, "costs": [{"material_id": 43, "qty": 10}, {"material_id": 53, "qty": 10}, {"material_id": 103, "qty": 5}]}, {"grade": 3, "level": 2, "costs": [{"material_id": 43, "qty": 16}, {"material_id": 53, "qty": 16}, {"material_id": 103, "qty": 8}]}, {"grade": 3, "level": 3, "costs": [{"material_id": 43, "qty": 22}, {"material_id": 53, "qty": 22}, {"material_id": 103, "qty": 11}]}, {"grade": 3, "level": 4, "costs": [{"material_id": 43, "qty": 28}, {"material_id": 53, "qty": 28}, {"material_id": 103, "qty": 14}]}, {"grade": 3, "level": 5, "costs": [{"material_id": 43, "qty": 34}, {"material_id": 53, "qty": 34}, {"material_id": 103, "qty": 17}]}, {"grade": 3, "level": 6, "costs": [{"material_id": 43, "qty": 40}, {"material_id": 53, "qty": 40}, {"material_id": 103, "qty": 20}]}, {"grade": 3, "level": 7, "costs": [{"material_id": 43, "qty": 46}, {"material_id": 53, "qty": 46}, {"material_id": 103, "qty": 23}]}, {"grade": 3, "level": 8, "costs": [{"material_id": 43, "qty": 52}, {"material_id": 53, "qty": 52}, {"material_id": 103, "qty": 26}]}, {"grade": 3, "level": 9, "costs": [{"material_id": 43, "qty": 58}, {"material_id": 53, "qty": 58}, {"material_id": 103, "qty": 29}]}, {"grade": 3, "level": 10, "costs": [{"material_id": 43, "qty": 64}, {"material_id": 53, "qty": 64}, {"material_id": 103, "qty": 32}], "promote": {"material_id": 64, "qty": 40}}, {"grade": 4, "level": 1, "costs": [{"material_id": 44, "qty": 10}, {"material_id": 54, "qty": 10}, {"material_id": 104, "qty": 5}]}, {"grade": 4, "level": 2, "costs": [{"material_id": 44, "qty": 16}, {"material_id": 54, "qty": 16}, {"material_id": 104, "qty": 8}]}, {"grade": 4, "level": 3, "costs": [{"material_id": 44, "qty": 22}, {"material_id": 54, "qty": 22}, {"material_id": 104, "qty": 11}]}, {"grade": 4, "level": 4, "costs": [{"material_id": 44, "qty": 28}, {"material_id": 54, "qty": 28}, {"material_id": 104, "qty": 14}]}, {"grade": 4, "level": 5, "costs": [{"material_id": 44, "qty": 34}, {"material_id": 54, "qty": 34}, {"material_id": 104, "qty": 17}]}, {"grade": 4, "level": 6, "costs": [{"material_id": 44, "qty": 40}, {"material_id": 54, "qty": 40}, {"material_id": 104, "qty": 20}]}, {"grade": 4, "level": 7, "costs": [{"material_id": 44, "qty": 46}, {"material_id": 54, "qty": 46}, {"material_id": 104, "qty": 23}]}, {"grade": 4, "level": 8, "costs": [{"material_id": 44, "qty": 52}, {"material_id": 54, "qty": 52}, {"material_id": 104, "qty": 26}]}, {"grade": 4, "level": 9, "costs": [{"material_id": 44, "qty": 58}, {"material_id": 54, "qty": 58}, {"material_id": 104, "qty": 29}]}, {"grade": 4, "level": 10, "costs": [{"material_id": 44, "qty": 64}, {"material_id": 54, "qty": 64}, {"material_id": 104, "qty": 32}], "promote": {"material_id": 65, "qty": 40}}, {"grade": 5, "level": 1, "costs": [{"material_id": 45, "qty": 10}, {"material_id": 55, "qty": 10}, {"material_id": 105, "qty": 5}]}, {"grade": 5, "level": 2, "costs": [{"material_id": 45, "qty": 16}, {"material_id": 55, "qty": 16}, {"material_id": 105, "qty": 8}]}, {"grade": 5, "level": 3, "costs": [{"material_id": 45, "qty": 22}, {"material_id": 55, "qty": 22}, {"material_id": 105, "qty": 11}]}, {"grade": 5, "level": 4, "costs": [{"material_id": 45, "qty": 28}, {"material_id": 55, "qty": 28}, {"material_id": 105, "qty": 14}]}, {"grade": 5, "level": 5, "costs": [{"material_id": 45, "qty": 34}, {"material_id": 55, "qty": 34}, {"material_id": 105, "qty": 17}]}, {"grade": 5, "level": 6, "costs": [{"material_id": 45, "qty": 40}, {"material_id": 55, "qty": 40}, {"material_id": 105, "qty": 20}]}, {"grade": 5, "level": 7, "costs": [{"material_id": 45, "qty": 46}, {"material_id": 55, "qty": 46}, {"material_id": 105, "qty": 23}]}, {"grade": 5, "level": 8, "costs": [{"material_id": 45, "qty": 52}, {"material_id": 55, "qty": 52}, {"material_id": 105, "qty": 26}]}, {"grade": 5, "level": 9, "costs": [{"material_id": 45, "qty": 58}, {"material_id": 55, "qty": 58}, {"material_id": 105, "qty": 29}]}, {"grade": 5, "level": 10, "costs": [{"material_id": 45, "qty": 64}, {"material_id": 55, "qty": 64}, {"material_id": 105, "qty": 32}], "promote": {"material_id": 66, "qty": 40}}, {"grade": 6, "level": 1, "costs": [{"material_id": 46, "qty": 10}, {"material_id": 56, "qty": 10}, {"material_id": 106, "qty": 5}]}, {"grade": 6, "level": 2, "costs": [{"material_id": 46, "qty": 16}, {"material_id": 56, "qty": 16}, {"material_id": 106, "qty": 8}]}, {"grade": 6, "level": 3, "costs": [{"material_id": 46, "qty": 22}, {"material_id": 56, "qty": 22}, {"material_id": 106, "qty": 11}]}, {"grade": 6, "level": 4, "costs": [{"material_id": 46, "qty": 28}, {"material_id": 56, "qty": 28}, {"material_id": 106, "qty": 14}]}, {"grade": 6, "level": 5, "costs": [{"material_id": 46, "qty": 34}, {"material_id": 56, "qty": 34}, {"material_id": 106, "qty": 17}]}, {"grade": 6, "level": 6, "costs": [{"material_id": 46, "qty": 40}, {"material_id": 56, "qty": 40}, {"material_id": 106, "qty": 20}]}, {"grade": 6, "level": 7, "costs": [{"material_id": 46, "qty": 46}, {"material_id": 56, "qty": 46}, {"material_id": 106, "qty": 23}]}, {"grade": 6, "level": 8, "costs": [{"material_id": 46, "qty": 52}, {"material_id": 56, "qty": 52}, {"material_id": 106, "qty": 26}]}, {"grade": 6, "level": 9, "costs": [{"material_id": 46, "qty": 58}, {"material_id": 56, "qty": 58}, {"material_id": 106, "qty": 29}]}, {"grade": 6, "level": 10, "costs": [{"material_id": 46, "qty": 64}, {"material_id": 56, "qty": 64}, {"material_id": 106, "qty": 32}]}], "desc_ko": "원정 전투력 보정 + 소모품 슬롯"}, {"id": 5, "name_ko": "공방", "name_key": "", "specialty_family_id": 8, "grade_max": 6, "level_per_grade": 10, "effects": [{"type": "craft_grade", "base": 1, "per_level": 0, "unit": "성(=시설 등급)"}, {"type": "craft_discount", "base": 0, "per_level": 0.5, "unit": "%"}], "levels": [{"grade": 1, "level": 1, "costs": [{"material_id": 41, "qty": 10}, {"material_id": 51, "qty": 10}, {"material_id": 81, "qty": 5}]}, {"grade": 1, "level": 2, "costs": [{"material_id": 41, "qty": 16}, {"material_id": 51, "qty": 16}, {"material_id": 81, "qty": 8}]}, {"grade": 1, "level": 3, "costs": [{"material_id": 41, "qty": 22}, {"material_id": 51, "qty": 22}, {"material_id": 81, "qty": 11}]}, {"grade": 1, "level": 4, "costs": [{"material_id": 41, "qty": 28}, {"material_id": 51, "qty": 28}, {"material_id": 81, "qty": 14}]}, {"grade": 1, "level": 5, "costs": [{"material_id": 41, "qty": 34}, {"material_id": 51, "qty": 34}, {"material_id": 81, "qty": 17}]}, {"grade": 1, "level": 6, "costs": [{"material_id": 41, "qty": 40}, {"material_id": 51, "qty": 40}, {"material_id": 81, "qty": 20}]}, {"grade": 1, "level": 7, "costs": [{"material_id": 41, "qty": 46}, {"material_id": 51, "qty": 46}, {"material_id": 81, "qty": 23}]}, {"grade": 1, "level": 8, "costs": [{"material_id": 41, "qty": 52}, {"material_id": 51, "qty": 52}, {"material_id": 81, "qty": 26}]}, {"grade": 1, "level": 9, "costs": [{"material_id": 41, "qty": 58}, {"material_id": 51, "qty": 58}, {"material_id": 81, "qty": 29}]}, {"grade": 1, "level": 10, "costs": [{"material_id": 41, "qty": 64}, {"material_id": 51, "qty": 64}, {"material_id": 81, "qty": 32}], "promote": {"material_id": 62, "qty": 40}}, {"grade": 2, "level": 1, "costs": [{"material_id": 42, "qty": 10}, {"material_id": 52, "qty": 10}, {"material_id": 82, "qty": 5}]}, {"grade": 2, "level": 2, "costs": [{"material_id": 42, "qty": 16}, {"material_id": 52, "qty": 16}, {"material_id": 82, "qty": 8}]}, {"grade": 2, "level": 3, "costs": [{"material_id": 42, "qty": 22}, {"material_id": 52, "qty": 22}, {"material_id": 82, "qty": 11}]}, {"grade": 2, "level": 4, "costs": [{"material_id": 42, "qty": 28}, {"material_id": 52, "qty": 28}, {"material_id": 82, "qty": 14}]}, {"grade": 2, "level": 5, "costs": [{"material_id": 42, "qty": 34}, {"material_id": 52, "qty": 34}, {"material_id": 82, "qty": 17}]}, {"grade": 2, "level": 6, "costs": [{"material_id": 42, "qty": 40}, {"material_id": 52, "qty": 40}, {"material_id": 82, "qty": 20}]}, {"grade": 2, "level": 7, "costs": [{"material_id": 42, "qty": 46}, {"material_id": 52, "qty": 46}, {"material_id": 82, "qty": 23}]}, {"grade": 2, "level": 8, "costs": [{"material_id": 42, "qty": 52}, {"material_id": 52, "qty": 52}, {"material_id": 82, "qty": 26}]}, {"grade": 2, "level": 9, "costs": [{"material_id": 42, "qty": 58}, {"material_id": 52, "qty": 58}, {"material_id": 82, "qty": 29}]}, {"grade": 2, "level": 10, "costs": [{"material_id": 42, "qty": 64}, {"material_id": 52, "qty": 64}, {"material_id": 82, "qty": 32}], "promote": {"material_id": 63, "qty": 40}}, {"grade": 3, "level": 1, "costs": [{"material_id": 43, "qty": 10}, {"material_id": 53, "qty": 10}, {"material_id": 83, "qty": 5}]}, {"grade": 3, "level": 2, "costs": [{"material_id": 43, "qty": 16}, {"material_id": 53, "qty": 16}, {"material_id": 83, "qty": 8}]}, {"grade": 3, "level": 3, "costs": [{"material_id": 43, "qty": 22}, {"material_id": 53, "qty": 22}, {"material_id": 83, "qty": 11}]}, {"grade": 3, "level": 4, "costs": [{"material_id": 43, "qty": 28}, {"material_id": 53, "qty": 28}, {"material_id": 83, "qty": 14}]}, {"grade": 3, "level": 5, "costs": [{"material_id": 43, "qty": 34}, {"material_id": 53, "qty": 34}, {"material_id": 83, "qty": 17}]}, {"grade": 3, "level": 6, "costs": [{"material_id": 43, "qty": 40}, {"material_id": 53, "qty": 40}, {"material_id": 83, "qty": 20}]}, {"grade": 3, "level": 7, "costs": [{"material_id": 43, "qty": 46}, {"material_id": 53, "qty": 46}, {"material_id": 83, "qty": 23}]}, {"grade": 3, "level": 8, "costs": [{"material_id": 43, "qty": 52}, {"material_id": 53, "qty": 52}, {"material_id": 83, "qty": 26}]}, {"grade": 3, "level": 9, "costs": [{"material_id": 43, "qty": 58}, {"material_id": 53, "qty": 58}, {"material_id": 83, "qty": 29}]}, {"grade": 3, "level": 10, "costs": [{"material_id": 43, "qty": 64}, {"material_id": 53, "qty": 64}, {"material_id": 83, "qty": 32}], "promote": {"material_id": 64, "qty": 40}}, {"grade": 4, "level": 1, "costs": [{"material_id": 44, "qty": 10}, {"material_id": 54, "qty": 10}, {"material_id": 84, "qty": 5}]}, {"grade": 4, "level": 2, "costs": [{"material_id": 44, "qty": 16}, {"material_id": 54, "qty": 16}, {"material_id": 84, "qty": 8}]}, {"grade": 4, "level": 3, "costs": [{"material_id": 44, "qty": 22}, {"material_id": 54, "qty": 22}, {"material_id": 84, "qty": 11}]}, {"grade": 4, "level": 4, "costs": [{"material_id": 44, "qty": 28}, {"material_id": 54, "qty": 28}, {"material_id": 84, "qty": 14}]}, {"grade": 4, "level": 5, "costs": [{"material_id": 44, "qty": 34}, {"material_id": 54, "qty": 34}, {"material_id": 84, "qty": 17}]}, {"grade": 4, "level": 6, "costs": [{"material_id": 44, "qty": 40}, {"material_id": 54, "qty": 40}, {"material_id": 84, "qty": 20}]}, {"grade": 4, "level": 7, "costs": [{"material_id": 44, "qty": 46}, {"material_id": 54, "qty": 46}, {"material_id": 84, "qty": 23}]}, {"grade": 4, "level": 8, "costs": [{"material_id": 44, "qty": 52}, {"material_id": 54, "qty": 52}, {"material_id": 84, "qty": 26}]}, {"grade": 4, "level": 9, "costs": [{"material_id": 44, "qty": 58}, {"material_id": 54, "qty": 58}, {"material_id": 84, "qty": 29}]}, {"grade": 4, "level": 10, "costs": [{"material_id": 44, "qty": 64}, {"material_id": 54, "qty": 64}, {"material_id": 84, "qty": 32}], "promote": {"material_id": 65, "qty": 40}}, {"grade": 5, "level": 1, "costs": [{"material_id": 45, "qty": 10}, {"material_id": 55, "qty": 10}, {"material_id": 85, "qty": 5}]}, {"grade": 5, "level": 2, "costs": [{"material_id": 45, "qty": 16}, {"material_id": 55, "qty": 16}, {"material_id": 85, "qty": 8}]}, {"grade": 5, "level": 3, "costs": [{"material_id": 45, "qty": 22}, {"material_id": 55, "qty": 22}, {"material_id": 85, "qty": 11}]}, {"grade": 5, "level": 4, "costs": [{"material_id": 45, "qty": 28}, {"material_id": 55, "qty": 28}, {"material_id": 85, "qty": 14}]}, {"grade": 5, "level": 5, "costs": [{"material_id": 45, "qty": 34}, {"material_id": 55, "qty": 34}, {"material_id": 85, "qty": 17}]}, {"grade": 5, "level": 6, "costs": [{"material_id": 45, "qty": 40}, {"material_id": 55, "qty": 40}, {"material_id": 85, "qty": 20}]}, {"grade": 5, "level": 7, "costs": [{"material_id": 45, "qty": 46}, {"material_id": 55, "qty": 46}, {"material_id": 85, "qty": 23}]}, {"grade": 5, "level": 8, "costs": [{"material_id": 45, "qty": 52}, {"material_id": 55, "qty": 52}, {"material_id": 85, "qty": 26}]}, {"grade": 5, "level": 9, "costs": [{"material_id": 45, "qty": 58}, {"material_id": 55, "qty": 58}, {"material_id": 85, "qty": 29}]}, {"grade": 5, "level": 10, "costs": [{"material_id": 45, "qty": 64}, {"material_id": 55, "qty": 64}, {"material_id": 85, "qty": 32}], "promote": {"material_id": 66, "qty": 40}}, {"grade": 6, "level": 1, "costs": [{"material_id": 46, "qty": 10}, {"material_id": 56, "qty": 10}, {"material_id": 86, "qty": 5}]}, {"grade": 6, "level": 2, "costs": [{"material_id": 46, "qty": 16}, {"material_id": 56, "qty": 16}, {"material_id": 86, "qty": 8}]}, {"grade": 6, "level": 3, "costs": [{"material_id": 46, "qty": 22}, {"material_id": 56, "qty": 22}, {"material_id": 86, "qty": 11}]}, {"grade": 6, "level": 4, "costs": [{"material_id": 46, "qty": 28}, {"material_id": 56, "qty": 28}, {"material_id": 86, "qty": 14}]}, {"grade": 6, "level": 5, "costs": [{"material_id": 46, "qty": 34}, {"material_id": 56, "qty": 34}, {"material_id": 86, "qty": 17}]}, {"grade": 6, "level": 6, "costs": [{"material_id": 46, "qty": 40}, {"material_id": 56, "qty": 40}, {"material_id": 86, "qty": 20}]}, {"grade": 6, "level": 7, "costs": [{"material_id": 46, "qty": 46}, {"material_id": 56, "qty": 46}, {"material_id": 86, "qty": 23}]}, {"grade": 6, "level": 8, "costs": [{"material_id": 46, "qty": 52}, {"material_id": 56, "qty": 52}, {"material_id": 86, "qty": 26}]}, {"grade": 6, "level": 9, "costs": [{"material_id": 46, "qty": 58}, {"material_id": 56, "qty": 58}, {"material_id": 86, "qty": 29}]}, {"grade": 6, "level": 10, "costs": [{"material_id": 46, "qty": 64}, {"material_id": 56, "qty": 64}, {"material_id": 86, "qty": 32}]}], "desc_ko": "환경 장비 제작. 제작 가능 등급=시설 등급"}, {"id": 6, "name_ko": "대학", "name_key": "", "specialty_family_id": 13, "grade_max": 6, "level_per_grade": 10, "effects": [{"type": "research_grade", "base": 1, "per_level": 0, "unit": "성(=시설 등급)"}, {"type": "research_speed", "base": 100, "per_level": 3, "unit": "%"}], "levels": [{"grade": 1, "level": 1, "costs": [{"material_id": 41, "qty": 10}, {"material_id": 51, "qty": 10}, {"material_id": 131, "qty": 5}]}, {"grade": 1, "level": 2, "costs": [{"material_id": 41, "qty": 16}, {"material_id": 51, "qty": 16}, {"material_id": 131, "qty": 8}]}, {"grade": 1, "level": 3, "costs": [{"material_id": 41, "qty": 22}, {"material_id": 51, "qty": 22}, {"material_id": 131, "qty": 11}]}, {"grade": 1, "level": 4, "costs": [{"material_id": 41, "qty": 28}, {"material_id": 51, "qty": 28}, {"material_id": 131, "qty": 14}]}, {"grade": 1, "level": 5, "costs": [{"material_id": 41, "qty": 34}, {"material_id": 51, "qty": 34}, {"material_id": 131, "qty": 17}]}, {"grade": 1, "level": 6, "costs": [{"material_id": 41, "qty": 40}, {"material_id": 51, "qty": 40}, {"material_id": 131, "qty": 20}]}, {"grade": 1, "level": 7, "costs": [{"material_id": 41, "qty": 46}, {"material_id": 51, "qty": 46}, {"material_id": 131, "qty": 23}]}, {"grade": 1, "level": 8, "costs": [{"material_id": 41, "qty": 52}, {"material_id": 51, "qty": 52}, {"material_id": 131, "qty": 26}]}, {"grade": 1, "level": 9, "costs": [{"material_id": 41, "qty": 58}, {"material_id": 51, "qty": 58}, {"material_id": 131, "qty": 29}]}, {"grade": 1, "level": 10, "costs": [{"material_id": 41, "qty": 64}, {"material_id": 51, "qty": 64}, {"material_id": 131, "qty": 32}], "promote": {"material_id": 62, "qty": 40}}, {"grade": 2, "level": 1, "costs": [{"material_id": 42, "qty": 10}, {"material_id": 52, "qty": 10}, {"material_id": 132, "qty": 5}]}, {"grade": 2, "level": 2, "costs": [{"material_id": 42, "qty": 16}, {"material_id": 52, "qty": 16}, {"material_id": 132, "qty": 8}]}, {"grade": 2, "level": 3, "costs": [{"material_id": 42, "qty": 22}, {"material_id": 52, "qty": 22}, {"material_id": 132, "qty": 11}]}, {"grade": 2, "level": 4, "costs": [{"material_id": 42, "qty": 28}, {"material_id": 52, "qty": 28}, {"material_id": 132, "qty": 14}]}, {"grade": 2, "level": 5, "costs": [{"material_id": 42, "qty": 34}, {"material_id": 52, "qty": 34}, {"material_id": 132, "qty": 17}]}, {"grade": 2, "level": 6, "costs": [{"material_id": 42, "qty": 40}, {"material_id": 52, "qty": 40}, {"material_id": 132, "qty": 20}]}, {"grade": 2, "level": 7, "costs": [{"material_id": 42, "qty": 46}, {"material_id": 52, "qty": 46}, {"material_id": 132, "qty": 23}]}, {"grade": 2, "level": 8, "costs": [{"material_id": 42, "qty": 52}, {"material_id": 52, "qty": 52}, {"material_id": 132, "qty": 26}]}, {"grade": 2, "level": 9, "costs": [{"material_id": 42, "qty": 58}, {"material_id": 52, "qty": 58}, {"material_id": 132, "qty": 29}]}, {"grade": 2, "level": 10, "costs": [{"material_id": 42, "qty": 64}, {"material_id": 52, "qty": 64}, {"material_id": 132, "qty": 32}], "promote": {"material_id": 63, "qty": 40}}, {"grade": 3, "level": 1, "costs": [{"material_id": 43, "qty": 10}, {"material_id": 53, "qty": 10}, {"material_id": 133, "qty": 5}]}, {"grade": 3, "level": 2, "costs": [{"material_id": 43, "qty": 16}, {"material_id": 53, "qty": 16}, {"material_id": 133, "qty": 8}]}, {"grade": 3, "level": 3, "costs": [{"material_id": 43, "qty": 22}, {"material_id": 53, "qty": 22}, {"material_id": 133, "qty": 11}]}, {"grade": 3, "level": 4, "costs": [{"material_id": 43, "qty": 28}, {"material_id": 53, "qty": 28}, {"material_id": 133, "qty": 14}]}, {"grade": 3, "level": 5, "costs": [{"material_id": 43, "qty": 34}, {"material_id": 53, "qty": 34}, {"material_id": 133, "qty": 17}]}, {"grade": 3, "level": 6, "costs": [{"material_id": 43, "qty": 40}, {"material_id": 53, "qty": 40}, {"material_id": 133, "qty": 20}]}, {"grade": 3, "level": 7, "costs": [{"material_id": 43, "qty": 46}, {"material_id": 53, "qty": 46}, {"material_id": 133, "qty": 23}]}, {"grade": 3, "level": 8, "costs": [{"material_id": 43, "qty": 52}, {"material_id": 53, "qty": 52}, {"material_id": 133, "qty": 26}]}, {"grade": 3, "level": 9, "costs": [{"material_id": 43, "qty": 58}, {"material_id": 53, "qty": 58}, {"material_id": 133, "qty": 29}]}, {"grade": 3, "level": 10, "costs": [{"material_id": 43, "qty": 64}, {"material_id": 53, "qty": 64}, {"material_id": 133, "qty": 32}], "promote": {"material_id": 64, "qty": 40}}, {"grade": 4, "level": 1, "costs": [{"material_id": 44, "qty": 10}, {"material_id": 54, "qty": 10}, {"material_id": 134, "qty": 5}]}, {"grade": 4, "level": 2, "costs": [{"material_id": 44, "qty": 16}, {"material_id": 54, "qty": 16}, {"material_id": 134, "qty": 8}]}, {"grade": 4, "level": 3, "costs": [{"material_id": 44, "qty": 22}, {"material_id": 54, "qty": 22}, {"material_id": 134, "qty": 11}]}, {"grade": 4, "level": 4, "costs": [{"material_id": 44, "qty": 28}, {"material_id": 54, "qty": 28}, {"material_id": 134, "qty": 14}]}, {"grade": 4, "level": 5, "costs": [{"material_id": 44, "qty": 34}, {"material_id": 54, "qty": 34}, {"material_id": 134, "qty": 17}]}, {"grade": 4, "level": 6, "costs": [{"material_id": 44, "qty": 40}, {"material_id": 54, "qty": 40}, {"material_id": 134, "qty": 20}]}, {"grade": 4, "level": 7, "costs": [{"material_id": 44, "qty": 46}, {"material_id": 54, "qty": 46}, {"material_id": 134, "qty": 23}]}, {"grade": 4, "level": 8, "costs": [{"material_id": 44, "qty": 52}, {"material_id": 54, "qty": 52}, {"material_id": 134, "qty": 26}]}, {"grade": 4, "level": 9, "costs": [{"material_id": 44, "qty": 58}, {"material_id": 54, "qty": 58}, {"material_id": 134, "qty": 29}]}, {"grade": 4, "level": 10, "costs": [{"material_id": 44, "qty": 64}, {"material_id": 54, "qty": 64}, {"material_id": 134, "qty": 32}], "promote": {"material_id": 65, "qty": 40}}, {"grade": 5, "level": 1, "costs": [{"material_id": 45, "qty": 10}, {"material_id": 55, "qty": 10}, {"material_id": 135, "qty": 5}]}, {"grade": 5, "level": 2, "costs": [{"material_id": 45, "qty": 16}, {"material_id": 55, "qty": 16}, {"material_id": 135, "qty": 8}]}, {"grade": 5, "level": 3, "costs": [{"material_id": 45, "qty": 22}, {"material_id": 55, "qty": 22}, {"material_id": 135, "qty": 11}]}, {"grade": 5, "level": 4, "costs": [{"material_id": 45, "qty": 28}, {"material_id": 55, "qty": 28}, {"material_id": 135, "qty": 14}]}, {"grade": 5, "level": 5, "costs": [{"material_id": 45, "qty": 34}, {"material_id": 55, "qty": 34}, {"material_id": 135, "qty": 17}]}, {"grade": 5, "level": 6, "costs": [{"material_id": 45, "qty": 40}, {"material_id": 55, "qty": 40}, {"material_id": 135, "qty": 20}]}, {"grade": 5, "level": 7, "costs": [{"material_id": 45, "qty": 46}, {"material_id": 55, "qty": 46}, {"material_id": 135, "qty": 23}]}, {"grade": 5, "level": 8, "costs": [{"material_id": 45, "qty": 52}, {"material_id": 55, "qty": 52}, {"material_id": 135, "qty": 26}]}, {"grade": 5, "level": 9, "costs": [{"material_id": 45, "qty": 58}, {"material_id": 55, "qty": 58}, {"material_id": 135, "qty": 29}]}, {"grade": 5, "level": 10, "costs": [{"material_id": 45, "qty": 64}, {"material_id": 55, "qty": 64}, {"material_id": 135, "qty": 32}], "promote": {"material_id": 66, "qty": 40}}, {"grade": 6, "level": 1, "costs": [{"material_id": 46, "qty": 10}, {"material_id": 56, "qty": 10}, {"material_id": 136, "qty": 5}]}, {"grade": 6, "level": 2, "costs": [{"material_id": 46, "qty": 16}, {"material_id": 56, "qty": 16}, {"material_id": 136, "qty": 8}]}, {"grade": 6, "level": 3, "costs": [{"material_id": 46, "qty": 22}, {"material_id": 56, "qty": 22}, {"material_id": 136, "qty": 11}]}, {"grade": 6, "level": 4, "costs": [{"material_id": 46, "qty": 28}, {"material_id": 56, "qty": 28}, {"material_id": 136, "qty": 14}]}, {"grade": 6, "level": 5, "costs": [{"material_id": 46, "qty": 34}, {"material_id": 56, "qty": 34}, {"material_id": 136, "qty": 17}]}, {"grade": 6, "level": 6, "costs": [{"material_id": 46, "qty": 40}, {"material_id": 56, "qty": 40}, {"material_id": 136, "qty": 20}]}, {"grade": 6, "level": 7, "costs": [{"material_id": 46, "qty": 46}, {"material_id": 56, "qty": 46}, {"material_id": 136, "qty": 23}]}, {"grade": 6, "level": 8, "costs": [{"material_id": 46, "qty": 52}, {"material_id": 56, "qty": 52}, {"material_id": 136, "qty": 26}]}, {"grade": 6, "level": 9, "costs": [{"material_id": 46, "qty": 58}, {"material_id": 56, "qty": 58}, {"material_id": 136, "qty": 29}]}, {"grade": 6, "level": 10, "costs": [{"material_id": 46, "qty": 64}, {"material_id": 56, "qty": 64}, {"material_id": 136, "qty": 32}]}], "desc_ko": "정복 내부 연구 트리 해금/가속"}, {"id": 7, "name_ko": "보급소", "name_key": "", "specialty_family_id": 1, "grade_max": 6, "level_per_grade": 10, "effects": [{"type": "sortie_max", "base": 3, "per_level": 0, "unit": "회(등급당+1)"}, {"type": "sortie_regen", "base": 100, "per_level": 1.5, "unit": "%"}, {"type": "food_buff", "base": 100, "per_level": 2, "unit": "%"}], "levels": [{"grade": 1, "level": 1, "costs": [{"material_id": 41, "qty": 10}, {"material_id": 51, "qty": 10}, {"material_id": 11, "qty": 5}]}, {"grade": 1, "level": 2, "costs": [{"material_id": 41, "qty": 16}, {"material_id": 51, "qty": 16}, {"material_id": 11, "qty": 8}]}, {"grade": 1, "level": 3, "costs": [{"material_id": 41, "qty": 22}, {"material_id": 51, "qty": 22}, {"material_id": 11, "qty": 11}]}, {"grade": 1, "level": 4, "costs": [{"material_id": 41, "qty": 28}, {"material_id": 51, "qty": 28}, {"material_id": 11, "qty": 14}]}, {"grade": 1, "level": 5, "costs": [{"material_id": 41, "qty": 34}, {"material_id": 51, "qty": 34}, {"material_id": 11, "qty": 17}]}, {"grade": 1, "level": 6, "costs": [{"material_id": 41, "qty": 40}, {"material_id": 51, "qty": 40}, {"material_id": 11, "qty": 20}]}, {"grade": 1, "level": 7, "costs": [{"material_id": 41, "qty": 46}, {"material_id": 51, "qty": 46}, {"material_id": 11, "qty": 23}]}, {"grade": 1, "level": 8, "costs": [{"material_id": 41, "qty": 52}, {"material_id": 51, "qty": 52}, {"material_id": 11, "qty": 26}]}, {"grade": 1, "level": 9, "costs": [{"material_id": 41, "qty": 58}, {"material_id": 51, "qty": 58}, {"material_id": 11, "qty": 29}]}, {"grade": 1, "level": 10, "costs": [{"material_id": 41, "qty": 64}, {"material_id": 51, "qty": 64}, {"material_id": 11, "qty": 32}], "promote": {"material_id": 62, "qty": 40}}, {"grade": 2, "level": 1, "costs": [{"material_id": 42, "qty": 10}, {"material_id": 52, "qty": 10}, {"material_id": 12, "qty": 5}]}, {"grade": 2, "level": 2, "costs": [{"material_id": 42, "qty": 16}, {"material_id": 52, "qty": 16}, {"material_id": 12, "qty": 8}]}, {"grade": 2, "level": 3, "costs": [{"material_id": 42, "qty": 22}, {"material_id": 52, "qty": 22}, {"material_id": 12, "qty": 11}]}, {"grade": 2, "level": 4, "costs": [{"material_id": 42, "qty": 28}, {"material_id": 52, "qty": 28}, {"material_id": 12, "qty": 14}]}, {"grade": 2, "level": 5, "costs": [{"material_id": 42, "qty": 34}, {"material_id": 52, "qty": 34}, {"material_id": 12, "qty": 17}]}, {"grade": 2, "level": 6, "costs": [{"material_id": 42, "qty": 40}, {"material_id": 52, "qty": 40}, {"material_id": 12, "qty": 20}]}, {"grade": 2, "level": 7, "costs": [{"material_id": 42, "qty": 46}, {"material_id": 52, "qty": 46}, {"material_id": 12, "qty": 23}]}, {"grade": 2, "level": 8, "costs": [{"material_id": 42, "qty": 52}, {"material_id": 52, "qty": 52}, {"material_id": 12, "qty": 26}]}, {"grade": 2, "level": 9, "costs": [{"material_id": 42, "qty": 58}, {"material_id": 52, "qty": 58}, {"material_id": 12, "qty": 29}]}, {"grade": 2, "level": 10, "costs": [{"material_id": 42, "qty": 64}, {"material_id": 52, "qty": 64}, {"material_id": 12, "qty": 32}], "promote": {"material_id": 63, "qty": 40}}, {"grade": 3, "level": 1, "costs": [{"material_id": 43, "qty": 10}, {"material_id": 53, "qty": 10}, {"material_id": 13, "qty": 5}]}, {"grade": 3, "level": 2, "costs": [{"material_id": 43, "qty": 16}, {"material_id": 53, "qty": 16}, {"material_id": 13, "qty": 8}]}, {"grade": 3, "level": 3, "costs": [{"material_id": 43, "qty": 22}, {"material_id": 53, "qty": 22}, {"material_id": 13, "qty": 11}]}, {"grade": 3, "level": 4, "costs": [{"material_id": 43, "qty": 28}, {"material_id": 53, "qty": 28}, {"material_id": 13, "qty": 14}]}, {"grade": 3, "level": 5, "costs": [{"material_id": 43, "qty": 34}, {"material_id": 53, "qty": 34}, {"material_id": 13, "qty": 17}]}, {"grade": 3, "level": 6, "costs": [{"material_id": 43, "qty": 40}, {"material_id": 53, "qty": 40}, {"material_id": 13, "qty": 20}]}, {"grade": 3, "level": 7, "costs": [{"material_id": 43, "qty": 46}, {"material_id": 53, "qty": 46}, {"material_id": 13, "qty": 23}]}, {"grade": 3, "level": 8, "costs": [{"material_id": 43, "qty": 52}, {"material_id": 53, "qty": 52}, {"material_id": 13, "qty": 26}]}, {"grade": 3, "level": 9, "costs": [{"material_id": 43, "qty": 58}, {"material_id": 53, "qty": 58}, {"material_id": 13, "qty": 29}]}, {"grade": 3, "level": 10, "costs": [{"material_id": 43, "qty": 64}, {"material_id": 53, "qty": 64}, {"material_id": 13, "qty": 32}], "promote": {"material_id": 64, "qty": 40}}, {"grade": 4, "level": 1, "costs": [{"material_id": 44, "qty": 10}, {"material_id": 54, "qty": 10}, {"material_id": 14, "qty": 5}]}, {"grade": 4, "level": 2, "costs": [{"material_id": 44, "qty": 16}, {"material_id": 54, "qty": 16}, {"material_id": 14, "qty": 8}]}, {"grade": 4, "level": 3, "costs": [{"material_id": 44, "qty": 22}, {"material_id": 54, "qty": 22}, {"material_id": 14, "qty": 11}]}, {"grade": 4, "level": 4, "costs": [{"material_id": 44, "qty": 28}, {"material_id": 54, "qty": 28}, {"material_id": 14, "qty": 14}]}, {"grade": 4, "level": 5, "costs": [{"material_id": 44, "qty": 34}, {"material_id": 54, "qty": 34}, {"material_id": 14, "qty": 17}]}, {"grade": 4, "level": 6, "costs": [{"material_id": 44, "qty": 40}, {"material_id": 54, "qty": 40}, {"material_id": 14, "qty": 20}]}, {"grade": 4, "level": 7, "costs": [{"material_id": 44, "qty": 46}, {"material_id": 54, "qty": 46}, {"material_id": 14, "qty": 23}]}, {"grade": 4, "level": 8, "costs": [{"material_id": 44, "qty": 52}, {"material_id": 54, "qty": 52}, {"material_id": 14, "qty": 26}]}, {"grade": 4, "level": 9, "costs": [{"material_id": 44, "qty": 58}, {"material_id": 54, "qty": 58}, {"material_id": 14, "qty": 29}]}, {"grade": 4, "level": 10, "costs": [{"material_id": 44, "qty": 64}, {"material_id": 54, "qty": 64}, {"material_id": 14, "qty": 32}], "promote": {"material_id": 65, "qty": 40}}, {"grade": 5, "level": 1, "costs": [{"material_id": 45, "qty": 10}, {"material_id": 55, "qty": 10}, {"material_id": 15, "qty": 5}]}, {"grade": 5, "level": 2, "costs": [{"material_id": 45, "qty": 16}, {"material_id": 55, "qty": 16}, {"material_id": 15, "qty": 8}]}, {"grade": 5, "level": 3, "costs": [{"material_id": 45, "qty": 22}, {"material_id": 55, "qty": 22}, {"material_id": 15, "qty": 11}]}, {"grade": 5, "level": 4, "costs": [{"material_id": 45, "qty": 28}, {"material_id": 55, "qty": 28}, {"material_id": 15, "qty": 14}]}, {"grade": 5, "level": 5, "costs": [{"material_id": 45, "qty": 34}, {"material_id": 55, "qty": 34}, {"material_id": 15, "qty": 17}]}, {"grade": 5, "level": 6, "costs": [{"material_id": 45, "qty": 40}, {"material_id": 55, "qty": 40}, {"material_id": 15, "qty": 20}]}, {"grade": 5, "level": 7, "costs": [{"material_id": 45, "qty": 46}, {"material_id": 55, "qty": 46}, {"material_id": 15, "qty": 23}]}, {"grade": 5, "level": 8, "costs": [{"material_id": 45, "qty": 52}, {"material_id": 55, "qty": 52}, {"material_id": 15, "qty": 26}]}, {"grade": 5, "level": 9, "costs": [{"material_id": 45, "qty": 58}, {"material_id": 55, "qty": 58}, {"material_id": 15, "qty": 29}]}, {"grade": 5, "level": 10, "costs": [{"material_id": 45, "qty": 64}, {"material_id": 55, "qty": 64}, {"material_id": 15, "qty": 32}], "promote": {"material_id": 66, "qty": 40}}, {"grade": 6, "level": 1, "costs": [{"material_id": 46, "qty": 10}, {"material_id": 56, "qty": 10}, {"material_id": 16, "qty": 5}]}, {"grade": 6, "level": 2, "costs": [{"material_id": 46, "qty": 16}, {"material_id": 56, "qty": 16}, {"material_id": 16, "qty": 8}]}, {"grade": 6, "level": 3, "costs": [{"material_id": 46, "qty": 22}, {"material_id": 56, "qty": 22}, {"material_id": 16, "qty": 11}]}, {"grade": 6, "level": 4, "costs": [{"material_id": 46, "qty": 28}, {"material_id": 56, "qty": 28}, {"material_id": 16, "qty": 14}]}, {"grade": 6, "level": 5, "costs": [{"material_id": 46, "qty": 34}, {"material_id": 56, "qty": 34}, {"material_id": 16, "qty": 17}]}, {"grade": 6, "level": 6, "costs": [{"material_id": 46, "qty": 40}, {"material_id": 56, "qty": 40}, {"material_id": 16, "qty": 20}]}, {"grade": 6, "level": 7, "costs": [{"material_id": 46, "qty": 46}, {"material_id": 56, "qty": 46}, {"material_id": 16, "qty": 23}]}, {"grade": 6, "level": 8, "costs": [{"material_id": 46, "qty": 52}, {"material_id": 56, "qty": 52}, {"material_id": 16, "qty": 26}]}, {"grade": 6, "level": 9, "costs": [{"material_id": 46, "qty": 58}, {"material_id": 56, "qty": 58}, {"material_id": 16, "qty": 29}]}, {"grade": 6, "level": 10, "costs": [{"material_id": 46, "qty": 64}, {"material_id": 56, "qty": 64}, {"material_id": 16, "qty": 32}]}], "desc_ko": "출정권 최대·충전 + 식량 버프 효율"}]

Bundled data: assets/images/conquest/conquestMaterialBook.draft.json 3

RowChangeFieldBeforeAfter
_noteadded"시트 변환본 (sheetToBooks.mjs)"
familiesadded[{"id": 1, "name_ko": "곡물", "category": "food", "main_terrain": "농경지"}, {"id": 2, "name_ko": "고기", "category": "food", "main_terrain": "목초지"}, {"id": 3, "name_ko": "물고기", "category": "food", "main_terrain": "물가"}, {"id": 4, "name_ko": "목재", "category": "build", "main_terrain": "숲"}, {"id": 5, "name_ko": "석재", "category": "build", "main_terrain": "산악"}, {"id": 6, "name_ko": "금속", "category": "build", "main_terrain": "광산"}, {"id": 7, "name_ko": "가죽", "category": "cloth", "main_terrain": "사냥터"}, {"id": 8, "name_ko": "옷감", "category": "cloth", "main_terrain": "목초지"}, {"id": 9, "name_ko": "약초", "category": "battle", "main_terrain": "늪지"}, {"id": 10, "name_ko": "숫돌", "category": "battle", "main_terrain": "산악"}, {"id": 11, "name_ko": "보석", "category": "luxury", "main_terrain": "광산"}, {"id": 12, "name_ko": "술", "category": "luxury", "main_terrain": "농경지"}, {"id": 13, "name_ko": "마나", "category": "magic", "main_terrain": "유적"}, {"id": 14, "name_ko": "뼈", "category": "magic", "main_terrain": "늪지"}, {"id": 15, "name_ko": "별", "category": "magic", "main_terrain": "유적"}]
materialsadded[{"id": 11, "family_id": 1, "family_ko": "곡물", "category": "food", "grade": 1, "name_ko": "밀", "name_key": "", "source_terrain": "농경지"}, {"id": 12, "family_id": 1, "family_ko": "곡물", "category": "food", "grade": 2, "name_ko": "보리", "name_key": "", "source_terrain": "농경지"}, {"id": 13, "family_id": 1, "family_ko": "곡물", "category": "food", "grade": 3, "name_ko": "귀리", "name_key": "", "source_terrain": "농경지"}, {"id": 14, "family_id": 1, "family_ko": "곡물", "category": "food", "grade": 4, "name_ko": "이슬쌀", "name_key": "", "source_terrain": "농경지"}, {"id": 15, "family_id": 1, "family_ko": "곡물", "category": "food", "grade": 5, "name_ko": "검은 호밀", "name_key": "", "source_terrain": "농경지"}, {"id": 16, "family_id": 1, "family_ko": "곡물", "category": "food", "grade": 6, "name_ko": "황금 밀", "name_key": "", "source_terrain": "농경지"}, {"id": 21, "family_id": 2, "family_ko": "고기", "category": "food", "grade": 1, "name_ko": "닭고기", "name_key": "", "source_terrain": "목초지"}, {"id": 22, "family_id": 2, "family_ko": "고기", "category": "food", "grade": 2, "name_ko": "양고기", "name_key": "", "source_terrain": "목초지"}, {"id": 23, "family_id": 2, "family_ko": "고기", "category": "food", "grade": 3, "name_ko": "털소 고기", "name_key": "", "source_terrain": "목초지"}, {"id": 24, "family_id": 2, "family_ko": "고기", "category": "food", "grade": 4, "name_ko": "은사슴 고기", "name_key": "", "source_terrain": "목초지"}, {"id": 25, "family_id": 2, "family_ko": "고기", "category": "food", "grade": 5, "name_ko": "마수 고기", "name_key": "", "source_terrain": "목초지"}, {"id": 26, "family_id": 2, "family_ko": "고기", "category": "food", "grade": 6, "name_ko": "용고기", "name_key": "", "source_terrain": "목초지"}, {"id": 31, "family_id": 3, "family_ko": "물고기", "category": "food", "grade": 1, "name_ko": "민물고기", "name_key": "", "source_terrain": "물가"}, {"id": 32, "family_id": 3, "family_ko": "물고기", "category": "food", "grade": 2, "name_ko": "강송어", "name_key": "", "source_terrain": "물가"}, {"id": 33, "family_id": 3, "family_ko": "물고기", "category": "food", "grade": 3, "name_ko": "얼음 물고기", "name_key": "", "source_terrain": "물가"}, {"id": 34, "family_id": 3, "family_ko": "물고기", "category": "food", "grade": 4, "name_ko": "빛나는 물고기", "name_key": "", "source_terrain": "물가"}, {"id": 35, "family_id": 3, "family_ko": "물고기", "category": "food", "grade": 5, "name_ko": "검은 물고기", "name_key": "", "source_terrain": "물가"}, {"id": 36, "family_id": 3, "family_ko": "물고기", "category": "food", "grade": 6, "name_ko": "황금 물고기", "name_key": "", "source_terrain": "물가"}, {"id": 41, "family_id": 4, "family_ko": "목재", "category": "build", "grade": 1, "name_ko": "잔가지", "name_key": "", "source_terrain": "숲"}, {"id": 42, "family_id": 4, "family_ko": "목재", "category": "build", "grade": 2, "name_ko": "소나무", "name_key": "", "source_terrain": "숲"}, {"id": 43, "family_id": 4, "family_ko": "목재", "category": "build", "grade": 3, "name_ko": "참나무", "name_key": "", "source_terrain": "숲"}, {"id": 44, "family_id": 4, "family_ko": "목재", "category": "build", "grade": 4, "name_ko": "은빛 나무", "name_key": "", "source_terrain": "숲"}, {"id": 45, "family_id": 4, "family_ko": "목재", "category": "build", "grade": 5, "name_ko": "뼈나무", "name_key": "", "source_terrain": "숲"}, {"id": 46, "family_id": 4, "family_ko": "목재", "category": "build", "grade": 6, "name_ko": "세계수 가지", "name_key": "", "source_terrain": "숲"}, {"id": 51, "family_id": 5, "family_ko": "석재", "category": "build", "grade": 1, "name_ko": "조약돌", "name_key": "", "source_terrain": "산악"}, {"id": 52, "family_id": 5, "family_ko": "석재", "category": "build", "grade": 2, "name_ko": "화강암", "name_key": "", "source_terrain": "산악"}, {"id": 53, "family_id": 5, "family_ko": "석재", "category": "build", "grade": 3, "name_ko": "대리석", "name_key": "", "source_terrain": "산악"}, {"id": 54, "family_id": 5, "family_ko": "석재", "category": "build", "grade": 4, "name_ko": "현무암", "name_key": "", "source_terrain": "산악"}, {"id": 55, "family_id": 5, "family_ko": "석재", "category": "build", "grade": 5, "name_ko": "흑요석", "name_key": "", "source_terrain": "산악"}, {"id": 56, "family_id": 5, "family_ko": "석재", "category": "build", "grade": 6, "name_ko": "용암 수정", "name_key": "", "source_terrain": "산악"}, {"id": 61, "family_id": 6, "family_ko": "금속", "category": "build", "grade": 1, "name_ko": "구리", "name_key": "", "source_terrain": "광산"}, {"id": 62, "family_id": 6, "family_ko": "금속", "category": "build", "grade": 2, "name_ko": "철", "name_key": "", "source_terrain": "광산"}, {"id": 63, "family_id": 6, "family_ko": "금속", "category": "build", "grade": 3, "name_ko": "은", "name_key": "", "source_terrain": "광산"}, {"id": 64, "family_id": 6, "family_ko": "금속", "category": "build", "grade": 4, "name_ko": "금", "name_key": "", "source_terrain": "광산"}, {"id": 65, "family_id": 6, "family_ko": "금속", "category": "build", "grade": 5, "name_ko": "미스릴", "name_key": "", "source_terrain": "광산"}, {"id": 66, "family_id": 6, "family_ko": "금속", "category": "build", "grade": 6, "name_ko": "별강철", "name_key": "", "source_terrain": "광산"}, {"id": 71, "family_id": 7, "family_ko": "가죽", "category": "cloth", "grade": 1, "name_ko": "토끼 가죽", "name_key": "", "source_terrain": "사냥터"}, {"id": 72, "family_id": 7, "family_ko": "가죽", "category": "cloth", "grade": 2, "name_ko": "여우 가죽", "name_key": "", "source_terrain": "사냥터"}, {"id": 73, "family_id": 7, "family_ko": "가죽", "category": "cloth", "grade": 3, "name_ko": "털소 가죽", "name_key": "", "source_terrain": "사냥터"}, {"id": 74, "family_id": 7, "family_ko": "가죽", "category": "cloth", "grade": 4, "name_ko": "은사슴 가죽", "name_key": "", "source_terrain": "사냥터"}, {"id": 75, "family_id": 7, "family_ko": "가죽", "category": "cloth", "grade": 5, "name_ko": "마수 가죽", "name_key": "", "source_terrain": "사냥터"}, {"id": 76, "family_id": 7, "family_ko": "가죽", "category": "cloth", "grade": 6, "name_ko": "용 비늘", "name_key": "", "source_terrain": "사냥터"}, {"id": 81, "family_id": 8, "family_ko": "옷감", "category": "cloth", "grade": 1, "name_ko": "무명천", "name_key": "", "source_terrain": "목초지"}, {"id": 82, "family_id": 8, "family_ko": "옷감", "category": "cloth", "grade": 2, "name_ko": "양털", "name_key": "", "source_terrain": "목초지"}, {"id": 83, "family_id": 8, "family_ko": "옷감", "category": "cloth", "grade": 3, "name_ko": "비단", "name_key": "", "source_terrain": "목초지"}, {"id": 84, "family_id": 8, "family_ko": "옷감", "category": "cloth", "grade": 4, "name_ko": "거미 비단", "name_key": "", "source_terrain": "목초지"}, {"id": 85, "family_id": 8, "family_ko": "옷감", "category": "cloth", "grade": 5, "name_ko": "유령 명주", "name_key": "", "source_terrain": "목초지"}, {"id": 86, "family_id": 8, "family_ko": "옷감", "category": "cloth", "grade": 6, "name_ko": "황금 비단", "name_key": "", "source_terrain": "목초지"}, {"id": 91, "family_id": 9, "family_ko": "약초", "category": "battle", "grade": 1, "name_ko": "들풀", "name_key": "", "source_terrain": "늪지"}, {"id": 92, "family_id": 9, "family_ko": "약초", "category": "battle", "grade": 2, "name_ko": "약초", "name_key": "", "source_terrain": "늪지"}, {"id": 93, "family_id": 9, "family_ko": "약초", "category": "battle", "grade": 3, "name_ko": "파란 버섯", "name_key": "", "source_terrain": "늪지"}, {"id": 94, "family_id": 9, "family_ko": "약초", "category": "battle", "grade": 4, "name_ko": "반딧불 이슬", "name_key": "", "source_terrain": "늪지"}, {"id": 95, "family_id": 9, "family_ko": "약초", "category": "battle", "grade": 5, "name_ko": "독초", "name_key": "", "source_terrain": "늪지"}, {"id": 96, "family_id": 9, "family_ko": "약초", "category": "battle", "grade": 6, "name_ko": "세계수 이슬", "name_key": "", "source_terrain": "늪지"}, {"id": 101, "family_id": 10, "family_ko": "숫돌", "category": "battle", "grade": 1, "name_ko": "거친 숫돌", "name_key": "", "source_terrain": "산악"}, {"id": 102, "family_id": 10, "family_ko": "숫돌", "category": "battle", "grade": 2, "name_ko": "숫돌", "name_key": "", "source_terrain": "산악"}, {"id": 103, "family_id": 10, "family_ko": "숫돌", "category": "battle", "grade": 3, "name_ko": "고운 숫돌", "name_key": "", "source_terrain": "산악"}, {"id": 104, "family_id": 10, "family_ko": "숫돌", "category": "battle", "grade": 4, "name_ko": "수정 숫돌", "name_key": "", "source_terrain": "산악"}, {"id": 105, "family_id": 10, "family_ko": "숫돌", "category": "battle", "grade": 5, "name_ko": "흑요석 숫돌", "name_key": "", "source_terrain": "산악"}, {"id": 106, "family_id": 10, "family_ko": "숫돌", "category": "battle", "grade": 6, "name_ko": "별 숫돌", "name_key": "", "source_terrain": "산악"}, {"id": 111, "family_id": 11, "family_ko": "보석", "category": "luxury", "grade": 1, "name_ko": "수정", "name_key": "", "source_terrain": "광산"}, {"id": 112, "family_id": 11, "family_ko": "보석", "category": "luxury", "grade": 2, "name_ko": "호박", "name_key": "", "source_terrain": "광산"}, {"id": 113, "family_id": 11, "family_ko": "보석", "category": "luxury", "grade": 3, "name_ko": "자수정", "name_key": "", "source_terrain": "광산"}, {"id": 114, "family_id": 11, "family_ko": "보석", "category": "luxury", "grade": 4, "name_ko": "에메랄드", "name_key": "", "source_terrain": "광산"}, {"id": 115, "family_id": 11, "family_ko": "보석", "category": "luxury", "grade": 5, "name_ko": "루비", "name_key": "", "source_terrain": "광산"}, {"id": 116, "family_id": 11, "family_ko": "보석", "category": "luxury", "grade": 6, "name_ko": "다이아몬드", "name_key": "", "source_terrain": "광산"}, {"id": 121, "family_id": 12, "family_ko": "술", "category": "luxury", "grade": 1, "name_ko": "보리술", "name_key": "", "source_terrain": "농경지"}, {"id": 122, "family_id": 12, "family_ko": "술", "category": "luxury", "grade": 2, "name_ko": "꿀술", "name_key": "", "source_terrain": "농경지"}, {"id": 123, "family_id": 12, "family_ko": "술", "category": "luxury", "grade": 3, "name_ko": "과일술", "name_key": "", "source_terrain": "농경지"}, {"id": 124, "family_id": 12, "family_ko": "술", "category": "luxury", "grade": 4, "name_ko": "얼음술", "name_key": "", "source_terrain": "농경지"}, {"id": 125, "family_id": 12, "family_ko": "술", "category": "luxury", "grade": 5, "name_ko": "핏빛 술", "name_key": "", "source_terrain": "농경지"}, {"id": 126, "family_id": 12, "family_ko": "술", "category": "luxury", "grade": 6, "name_ko": "신들의 술", "name_key": "", "source_terrain": "농경지"}, {"id": 131, "family_id": 13, "family_ko": "마나", "category": "magic", "grade": 1, "name_ko": "마나 가루", "name_key": "", "source_terrain": "유적"}, {"id": 132, "family_id": 13, "family_ko": "마나", "category": "magic", "grade": 2, "name_ko": "마나 조각", "name_key": "", "source_terrain": "유적"}, {"id": 133, "family_id": 13, "family_ko": "마나", "category": "magic", "grade": 3, "name_ko": "마나 결정", "name_key": "", "source_terrain": "유적"}, {"id": 134, "family_id": 13, "family_ko": "마나", "category": "magic", "grade": 4, "name_ko": "마나 구슬", "name_key": "", "source_terrain": "유적"}, {"id": 135, "family_id": 13, "family_ko": "마나", "category": "magic", "grade": 5, "name_ko": "정령의 눈물", "name_key": "", "source_terrain": "유적"}, {"id": 136, "family_id": 13, "family_ko": "마나", "category": "magic", "grade": 6, "name_ko": "생명의 물방울", "name_key": "", "source_terrain": "유적"}, {"id": 141, "family_id": 14, "family_ko": "뼈", "category": "magic", "grade": 1, "name_ko": "잔뼈", "name_key": "", "source_terrain": "늪지"}, {"id": 142, "family_id": 14, "family_ko": "뼈", "category": "magic", "grade": 2, "name_ko": "짐승 뼈", "name_key": "", "source_terrain": "늪지"}, {"id": 143, "family_id": 14, "family_ko": "뼈", "category": "magic", "grade": 3, "name_ko": "큰 뿔", "name_key": "", "source_terrain": "늪지"}, {"id": 144, "family_id": 14, "family_ko": "뼈", "category": "magic", "grade": 4, "name_ko": "검은 뼈", "name_key": "", "source_terrain": "늪지"}, {"id": 145, "family_id": 14, "family_ko": "뼈", "category": "magic", "grade": 5, "name_ko": "고룡의 뼈", "name_key": "", "source_terrain": "늪지"}, {"id": 146, "family_id": 14, "family_ko": "뼈", "category": "magic", "grade": 6, "name_ko": "타이탄의 뼈", "name_key": "", "source_terrain": "늪지"}, {"id": 151, "family_id": 15, "family_ko": "별", "category": "magic", "grade": 1, "name_ko": "별가루", "name_key": "", "source_terrain": "유적"}, {"id": 152, "family_id": 15, "family_ko": "별", "category": "magic", "grade": 2, "name_ko": "별 조각", "name_key": "", "source_terrain": "유적"}, {"id": 153, "family_id": 15, "family_ko": "별", "category": "magic", "grade": 3, "name_ko": "별똥돌", "name_key": "", "source_terrain": "유적"}, {"id": 154, "family_id": 15, "family_ko": "별", "category": "magic", "grade": 4, "name_ko": "별독 결정", "name_key": "", "source_terrain": "유적"}, {"id": 155, "family_id": 15, "family_ko": "별", "category": "magic", "grade": 5, "name_ko": "별의 눈물", "name_key": "", "source_terrain": "유적"}, {"id": 156, "family_id": 15, "family_ko": "별", "category": "magic", "grade": 6, "name_ko": "별의 심장", "name_key": "", "source_terrain": "유적"}, {"id": 201, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "타이탄의 검 조각", "name_key": "", "source_terrain": "랜드마크"}, {"id": 202, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "천사의 깃털", "name_key": "", "source_terrain": "랜드마크"}, {"id": 203, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "고대 탑의 벽돌", "name_key": "", "source_terrain": "랜드마크"}, {"id": 204, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "얼음 심장", "name_key": "", "source_terrain": "랜드마크"}, {"id": 205, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "세계수 수액", "name_key": "", "source_terrain": "랜드마크"}, {"id": 206, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "가라앉은 성물", "name_key": "", "source_terrain": "랜드마크"}, {"id": 207, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "별운석", "name_key": "", "source_terrain": "랜드마크"}, {"id": 208, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "악마의 뿔", "name_key": "", "source_terrain": "랜드마크"}, {"id": 209, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "용암 심장", "name_key": "", "source_terrain": "랜드마크"}, {"id": 210, "family_id": 0, "family_ko": "특산", "category": "special", "grade": 6, "name_ko": "어둠의 왕관", "name_key": "", "source_terrain": "랜드마크"}]

Bundled data: assets/images/conquest/conquestRegionBook.draft.json 3

RowChangeFieldBeforeAfter
_noteadded"시트 변환본 (sheetToBooks.mjs)"
regionsadded[{"id": 1, "zone_id": "panderas", "zone_seq": 1, "zone_name_ko": "판데라스 평원", "name_ko": "은빛 여울", "name_key": "", "faction": "neutral", "biome": "central_watershed", "tier": 1, "terrain": "물가", "terrain_subs": ["농경지", "목초지"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 31, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 131, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 32, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 33, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 2, "zone_id": "panderas", "zone_seq": 2, "zone_name_ko": "판데라스 평원", "name_ko": "여명의 호숫가", "name_key": "", "faction": "neutral", "biome": "central_watershed", "tier": 1, "terrain": "물가", "terrain_subs": ["농경지", "목초지"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 31, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 131, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 32, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 33, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 3, "zone_id": "panderas", "zone_seq": 3, "zone_name_ko": "판데라스 평원", "name_ko": "버들 나루", "name_key": "", "faction": "neutral", "biome": "central_watershed", "tier": 1, "terrain": "물가", "terrain_subs": ["농경지", "목초지"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 31, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 131, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 32, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 33, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 4, "zone_id": "panderas", "zone_seq": 4, "zone_name_ko": "판데라스 평원", "name_ko": "구름 여울", "name_key": "", "faction": "neutral", "biome": "central_watershed", "tier": 1, "terrain": "물가", "terrain_subs": ["농경지", "목초지"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 31, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 131, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 32, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 33, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 5, "zone_id": "panderas", "zone_seq": 5, "zone_name_ko": "판데라스 평원", "name_ko": "아침 나루", "name_key": "", "faction": "neutral", "biome": "central_watershed", "tier": 1, "terrain": "물가", "terrain_subs": ["농경지", "목초지"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 31, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 131, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 32, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 33, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 6, "zone_id": "panderas", "zone_seq": 6, "zone_name_ko": "판데라스 평원", "name_ko": "바람 들판", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "농경지", "terrain_subs": ["물가", "목초지"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 11, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 12, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 13, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 7, "zone_id": "panderas", "zone_seq": 7, "zone_name_ko": "판데라스 평원", "name_ko": "양떼 언덕", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "목초지", "terrain_subs": ["농경지", "물가"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 21, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 22, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 23, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 8, "zone_id": "panderas", "zone_seq": 8, "zone_name_ko": "판데라스 평원", "name_ko": "해바라기 평원", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "농경지", "terrain_subs": ["늪지", "물가"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 11, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 12, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 13, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 9, "zone_id": "panderas", "zone_seq": 9, "zone_name_ko": "판데라스 평원", "name_ko": "종달새 들판", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "농경지", "terrain_subs": ["물가", "목초지"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 11, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 12, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 13, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 10, "zone_id": "panderas", "zone_seq": 10, "zone_name_ko": "판데라스 평원", "name_ko": "밀꽃 평원", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "농경지", "terrain_subs": ["광산", "물가"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 11, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 61, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 12, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 13, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 11, "zone_id": "panderas", "zone_seq": 11, "zone_name_ko": "판데라스 평원", "name_ko": "클로버 언덕", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "목초지", "terrain_subs": ["물가", "농경지"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 21, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 22, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 23, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 12, "zone_id": "panderas", "zone_seq": 12, "zone_name_ko": "판데라스 평원", "name_ko": "시냇가 들판", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "농경지", "terrain_subs": ["늪지", "물가"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 11, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 12, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 13, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 13, "zone_id": "panderas", "zone_seq": 13, "zone_name_ko": "판데라스 평원", "name_ko": "달빛 구릉지", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "농경지", "terrain_subs": ["광산", "물가"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 11, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 61, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 12, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 13, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 14, "zone_id": "panderas", "zone_seq": 14, "zone_name_ko": "판데라스 평원", "name_ko": "조약돌 언덕", "name_key": "", "faction": "neutral", "biome": "central_plains", "tier": 1, "terrain": "목초지", "terrain_subs": ["농경지", "사냥터"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 21, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 22, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 71, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 23, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 15, "zone_id": "saharin", "zone_seq": 1, "zone_name_ko": "사하린 사막", "name_ko": "모래 언덕길", "name_key": "", "faction": "human", "biome": "desert", "tier": 1, "terrain": "광산", "terrain_subs": ["농경지", "사냥터"], "subzones": 2, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 61, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 62, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 71, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 63, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 16, "zone_id": "arden", "zone_seq": 1, "zone_name_ko": "아르덴 들녘", "name_ko": "햇살 들녘", "name_key": "", "faction": "human", "biome": "open_plains", "tier": 1, "terrain": "농경지", "terrain_subs": ["목초지", "광산"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 11, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 12, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 61, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 13, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 17, "zone_id": "saharin", "zone_seq": 2, "zone_name_ko": "사하린 사막", "name_ko": "선인장 골짜기", "name_key": "", "faction": "human", "biome": "desert", "tier": 1, "terrain": "사냥터", "terrain_subs": ["광산", "농경지"], "subzones": 2, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 71, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 61, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 72, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 73, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 18, "zone_id": "saharin", "zone_seq": 3, "zone_name_ko": "사하린 사막", "name_ko": "오아시스 쉼터", "name_key": "", "faction": "human", "biome": "desert", "tier": 1, "terrain": "광산", "terrain_subs": ["농경지", "사냥터"], "subzones": 2, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 61, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 62, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 71, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 63, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 19, "zone_id": "saharin", "zone_seq": 4, "zone_name_ko": "사하린 사막", "name_ko": "사막 장미 골", "name_key": "", "faction": "human", "biome": "desert", "tier": 1, "terrain": "광산", "terrain_subs": ["사냥터", "산악"], "subzones": 1, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 61, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 71, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 62, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 51, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 63, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 20, "zone_id": "saharin", "zone_seq": 5, "zone_name_ko": "사하린 사막", "name_ko": "뜨거운 모래밭", "name_key": "", "faction": "human", "biome": "desert", "tier": 1, "terrain": "광산", "terrain_subs": ["농경지", "목초지"], "subzones": 2, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 61, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 62, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 63, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 21, "zone_id": "redcrown", "zone_seq": 1, "zone_name_ko": "붉은왕관 산맥", "name_ko": "타이탄의 석검", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 4, "terrain": "광산", "terrain_subs": ["사냥터"], "subzones": 6, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 100, "production": [{"material_id": 64, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 113, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 74, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 65, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 24, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 66, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}, {"material_id": 201, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "titan_sword"}, {"id": 22, "zone_id": "saharin", "zone_seq": 6, "zone_name_ko": "사하린 사막", "name_ko": "신기루 벌판", "name_key": "", "faction": "human", "biome": "desert", "tier": 2, "terrain": "광산", "terrain_subs": ["사냥터", "농경지"], "subzones": 2, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 62, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 63, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 12, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 64, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 23, "zone_id": "redcrown", "zone_seq": 2, "zone_name_ko": "붉은왕관 산맥", "name_ko": "붉은 바위산", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 2, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 2, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 62, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 63, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 102, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 64, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 24, "zone_id": "arden", "zone_seq": 2, "zone_name_ko": "아르덴 들녘", "name_ko": "보리 이랑", "name_key": "", "faction": "human", "biome": "open_plains", "tier": 2, "terrain": "목초지", "terrain_subs": ["광산", "늪지"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 22, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 62, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 23, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 92, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 24, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 25, "zone_id": "saharin", "zone_seq": 7, "zone_name_ko": "사하린 사막", "name_ko": "전갈 바위", "name_key": "", "faction": "human", "biome": "desert", "tier": 2, "terrain": "광산", "terrain_subs": ["목초지", "산악"], "subzones": 3, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 62, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 22, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 63, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 64, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 26, "zone_id": "saharin", "zone_seq": 8, "zone_name_ko": "사하린 사막", "name_ko": "마른 우물터", "name_key": "", "faction": "human", "biome": "desert", "tier": 2, "terrain": "농경지", "terrain_subs": ["광산"], "subzones": 3, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 12, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 121, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 62, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 13, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 112, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 14, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 27, "zone_id": "redcrown", "zone_seq": 3, "zone_name_ko": "붉은왕관 산맥", "name_ko": "녹슨 협곡", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 2, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 3, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 62, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 63, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 102, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 64, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 28, "zone_id": "saharin", "zone_seq": 9, "zone_name_ko": "사하린 사막", "name_ko": "천사의 작은 신전", "name_key": "", "faction": "human", "biome": "desert", "tier": 4, "terrain": "광산", "terrain_subs": ["목초지", "농경지"], "subzones": 6, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 100, "production": [{"material_id": 64, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 113, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 24, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 65, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 14, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 66, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}, {"material_id": 202, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "angel_temple"}, {"id": 29, "zone_id": "redcrown", "zone_seq": 4, "zone_name_ko": "붉은왕관 산맥", "name_ko": "매 둥지 절벽", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 3, "terrain": "산악", "terrain_subs": ["광산", "목초지"], "subzones": 4, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 53, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 102, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 54, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 23, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 55, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 30, "zone_id": "redcrown", "zone_seq": 5, "zone_name_ko": "붉은왕관 산맥", "name_ko": "노을 바위", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 3, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 5, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 63, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 112, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 53, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 64, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 103, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 65, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 31, "zone_id": "redcrown", "zone_seq": 6, "zone_name_ko": "붉은왕관 산맥", "name_ko": "붉은 먼지 골짜기", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 3, "terrain": "광산", "terrain_subs": ["농경지", "산악"], "subzones": 5, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 63, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 112, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 13, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 64, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 53, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 65, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 32, "zone_id": "redcrown", "zone_seq": 7, "zone_name_ko": "붉은왕관 산맥", "name_ko": "부서진 바위 벌판", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 3, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 4, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 53, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 102, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 54, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 113, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 55, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 33, "zone_id": "saharin", "zone_seq": 10, "zone_name_ko": "사하린 사막", "name_ko": "황금 모래벌", "name_key": "", "faction": "human", "biome": "desert", "tier": 3, "terrain": "광산", "terrain_subs": ["농경지"], "subzones": 5, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 63, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 112, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 13, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 64, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 123, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 65, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 34, "zone_id": "arden", "zone_seq": 3, "zone_name_ko": "아르덴 들녘", "name_ko": "원두막 벌판", "name_key": "", "faction": "human", "biome": "open_plains", "tier": 3, "terrain": "목초지", "terrain_subs": ["늪지"], "subzones": 4, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 23, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 82, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 93, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 24, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 143, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 25, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 35, "zone_id": "redcrown", "zone_seq": 8, "zone_name_ko": "붉은왕관 산맥", "name_ko": "불꽃 바위", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 3, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 5, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 53, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 102, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 54, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 113, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 55, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 36, "zone_id": "redcrown", "zone_seq": 9, "zone_name_ko": "붉은왕관 산맥", "name_ko": "붉은 손가락 바위", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 4, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 7, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 64, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 113, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 65, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 104, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 66, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 37, "zone_id": "redcrown", "zone_seq": 10, "zone_name_ko": "붉은왕관 산맥", "name_ko": "쇠 바위 능선", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 4, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 7, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 64, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 113, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 65, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 104, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 66, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 38, "zone_id": "arden", "zone_seq": 4, "zone_name_ko": "아르덴 들녘", "name_ko": "능금나무 벌판", "name_key": "", "faction": "human", "biome": "open_plains", "tier": 4, "terrain": "목초지", "terrain_subs": ["광산", "농경지"], "subzones": 7, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 24, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 83, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 25, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 14, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 26, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 39, "zone_id": "saharin", "zone_seq": 11, "zone_name_ko": "사하린 사막", "name_ko": "바람 조각 바위", "name_key": "", "faction": "human", "biome": "desert", "tier": 4, "terrain": "농경지", "terrain_subs": ["광산", "목초지"], "subzones": 7, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 14, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 123, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 15, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 24, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 16, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 40, "zone_id": "redcrown", "zone_seq": 11, "zone_name_ko": "붉은왕관 산맥", "name_ko": "구리빛 벼랑", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 4, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 7, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 64, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 113, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 65, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 104, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 66, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 41, "zone_id": "redcrown", "zone_seq": 12, "zone_name_ko": "붉은왕관 산맥", "name_ko": "붉은 탑 바위", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 4, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 7, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 114, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 42, "zone_id": "redcrown", "zone_seq": 13, "zone_name_ko": "붉은왕관 산맥", "name_ko": "마른 강 바닥", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 4, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 6, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 114, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 43, "zone_id": "redcrown", "zone_seq": 14, "zone_name_ko": "붉은왕관 산맥", "name_ko": "갈라진 땅", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 5, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 8, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 65, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 114, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 66, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 105, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 44, "zone_id": "redcrown", "zone_seq": 15, "zone_name_ko": "붉은왕관 산맥", "name_ko": "돌부리 벌판", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 5, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 10, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 65, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 115, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 45, "zone_id": "redcrown", "zone_seq": 16, "zone_name_ko": "붉은왕관 산맥", "name_ko": "붉은 안개 골", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 5, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 10, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 65, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 114, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 66, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 105, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 46, "zone_id": "redcrown", "zone_seq": 17, "zone_name_ko": "붉은왕관 산맥", "name_ko": "독수리 바위", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 5, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 10, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 65, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 115, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 47, "zone_id": "redcrown", "zone_seq": 18, "zone_name_ko": "붉은왕관 산맥", "name_ko": "붉은 노을 능선", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 5, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 9, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 65, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 115, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 48, "zone_id": "redcrown", "zone_seq": 19, "zone_name_ko": "붉은왕관 산맥", "name_ko": "화살촉 바위", "name_key": "", "faction": "human", "biome": "red_badlands", "tier": 5, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 9, "climate_element": "모래", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 65, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 114, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 66, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 105, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 49, "zone_id": "urkan", "zone_seq": 1, "zone_name_ko": "우르칸 툰드라", "name_ko": "언 땅 벌판", "name_key": "", "faction": "orc", "biome": "tundra", "tier": 1, "terrain": "사냥터", "terrain_subs": ["산악", "농경지"], "subzones": 1, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 71, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 51, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 72, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 73, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 50, "zone_id": "garin", "zone_seq": 1, "zone_name_ko": "가린 설원", "name_ko": "흰눈 벌판", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 1, "terrain": "목초지", "terrain_subs": ["사냥터", "농경지"], "subzones": 1, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 21, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 71, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 22, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 23, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 51, "zone_id": "garin", "zone_seq": 2, "zone_name_ko": "가린 설원", "name_ko": "서리 언덕", "name_key": "", "faction": "orc", "biome": "cold_hills", "tier": 1, "terrain": "산악", "terrain_subs": ["광산", "사냥터"], "subzones": 2, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 51, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 101, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 61, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 52, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 71, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 53, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 52, "zone_id": "garin", "zone_seq": 3, "zone_name_ko": "가린 설원", "name_ko": "부서진 바벨탑", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 4, "terrain": "산악", "terrain_subs": ["사냥터", "목초지"], "subzones": 6, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 100, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 74, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 24, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}, {"material_id": 203, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "broken_babel_tower"}, {"id": 53, "zone_id": "urkan", "zone_seq": 2, "zone_name_ko": "우르칸 툰드라", "name_ko": "순록 벌판", "name_key": "", "faction": "orc", "biome": "tundra", "tier": 1, "terrain": "사냥터", "terrain_subs": ["산악", "목초지"], "subzones": 1, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 71, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 51, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 72, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 73, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 54, "zone_id": "garin", "zone_seq": 4, "zone_name_ko": "가린 설원", "name_ko": "눈보라 언덕", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 1, "terrain": "사냥터", "terrain_subs": ["목초지", "유적"], "subzones": 2, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 71, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 72, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 131, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 73, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 55, "zone_id": "garin", "zone_seq": 5, "zone_name_ko": "가린 설원", "name_ko": "찬 바위 구릉", "name_key": "", "faction": "orc", "biome": "cold_hills", "tier": 1, "terrain": "광산", "terrain_subs": ["목초지", "산악"], "subzones": 1, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 61, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 111, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 62, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 51, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 63, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 56, "zone_id": "urkan", "zone_seq": 3, "zone_name_ko": "우르칸 툰드라", "name_ko": "찬바람 언덕", "name_key": "", "faction": "orc", "biome": "tundra", "tier": 2, "terrain": "목초지", "terrain_subs": ["사냥터", "산악"], "subzones": 3, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 22, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 23, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 24, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 57, "zone_id": "garin", "zone_seq": 6, "zone_name_ko": "가린 설원", "name_ko": "하얀 늑대 벌판", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 2, "terrain": "사냥터", "terrain_subs": ["유적", "목초지"], "subzones": 3, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 72, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 132, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 73, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 22, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 74, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 58, "zone_id": "garin", "zone_seq": 7, "zone_name_ko": "가린 설원", "name_ko": "눈송이 골짜기", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 2, "terrain": "목초지", "terrain_subs": ["사냥터", "유적"], "subzones": 3, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 22, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 23, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 132, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 24, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 59, "zone_id": "urkan", "zone_seq": 4, "zone_name_ko": "우르칸 툰드라", "name_ko": "흰 이끼 벌판", "name_key": "", "faction": "orc", "biome": "tundra", "tier": 2, "terrain": "목초지", "terrain_subs": ["광산", "사냥터"], "subzones": 2, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 22, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 81, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 62, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 23, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 24, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 60, "zone_id": "baekya", "zone_seq": 1, "zone_name_ko": "백야 빙원", "name_ko": "얼음 벼랑", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 2, "terrain": "유적", "terrain_subs": ["산악", "사냥터"], "subzones": 2, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 132, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 151, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 133, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 134, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 61, "zone_id": "baekya", "zone_seq": 2, "zone_name_ko": "백야 빙원", "name_ko": "푸른 빙벽", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 2, "terrain": "유적", "terrain_subs": ["사냥터", "산악"], "subzones": 3, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 132, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 151, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 133, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 134, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 62, "zone_id": "garin", "zone_seq": 8, "zone_name_ko": "가린 설원", "name_ko": "곰 발자국 벌판", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 2, "terrain": "사냥터", "terrain_subs": ["목초지", "산악"], "subzones": 2, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 72, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 22, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 73, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 74, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 63, "zone_id": "baekya", "zone_seq": 3, "zone_name_ko": "백야 빙원", "name_ko": "유리 얼음벌", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 3, "terrain": "산악", "terrain_subs": ["유적", "사냥터"], "subzones": 5, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 53, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 102, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 133, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 54, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 73, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 55, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 64, "zone_id": "baekya", "zone_seq": 4, "zone_name_ko": "백야 빙원", "name_ko": "얼어붙은 폭포", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 3, "terrain": "유적", "terrain_subs": ["목초지", "사냥터"], "subzones": 4, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 133, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 152, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 23, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 134, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 73, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 135, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 65, "zone_id": "urkan", "zone_seq": 5, "zone_name_ko": "우르칸 툰드라", "name_ko": "매머드 길", "name_key": "", "faction": "orc", "biome": "tundra", "tier": 3, "terrain": "목초지", "terrain_subs": ["산악", "사냥터"], "subzones": 5, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 23, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 82, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 53, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 24, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 73, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 25, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 66, "zone_id": "garin", "zone_seq": 9, "zone_name_ko": "가린 설원", "name_ko": "은빛 설원", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 3, "terrain": "사냥터", "terrain_subs": ["목초지", "유적"], "subzones": 4, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 73, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 22, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 23, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 74, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 133, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 75, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 67, "zone_id": "urkan", "zone_seq": 6, "zone_name_ko": "우르칸 툰드라", "name_ko": "서리 풀밭", "name_key": "", "faction": "orc", "biome": "tundra", "tier": 3, "terrain": "사냥터", "terrain_subs": ["목초지", "산악"], "subzones": 4, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 73, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 22, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 23, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 74, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 53, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 75, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 68, "zone_id": "garin", "zone_seq": 10, "zone_name_ko": "가린 설원", "name_ko": "언 돌 언덕", "name_key": "", "faction": "orc", "biome": "cold_hills", "tier": 3, "terrain": "산악", "terrain_subs": ["광산", "목초지"], "subzones": 5, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 53, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 102, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 54, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 23, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 55, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 69, "zone_id": "garin", "zone_seq": 11, "zone_name_ko": "가린 설원", "name_ko": "눈 덮인 소나무길", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 3, "terrain": "목초지", "terrain_subs": ["산악", "사냥터"], "subzones": 4, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 23, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 82, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 53, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 24, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 73, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 25, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 70, "zone_id": "urkan", "zone_seq": 7, "zone_name_ko": "우르칸 툰드라", "name_ko": "얼음꽃 벌판", "name_key": "", "faction": "orc", "biome": "tundra", "tier": 4, "terrain": "사냥터", "terrain_subs": ["목초지", "산악"], "subzones": 6, "climate_element": "빙결", "climate_intensity": 1, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 74, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 23, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 24, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 75, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 76, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 71, "zone_id": "garin", "zone_seq": 12, "zone_name_ko": "가린 설원", "name_ko": "고요한 설원", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 4, "terrain": "산악", "terrain_subs": ["사냥터", "목초지"], "subzones": 7, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 74, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 24, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 72, "zone_id": "baekya", "zone_seq": 5, "zone_name_ko": "백야 빙원", "name_ko": "수정 얼음골", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 4, "terrain": "유적", "terrain_subs": ["산악", "사냥터"], "subzones": 7, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 134, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 153, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 135, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 74, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 136, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 73, "zone_id": "baekya", "zone_seq": 6, "zone_name_ko": "백야 빙원", "name_ko": "빙하 틈새", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 4, "terrain": "산악", "terrain_subs": ["유적", "물가"], "subzones": 6, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 134, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 34, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 74, "zone_id": "baekya", "zone_seq": 7, "zone_name_ko": "백야 빙원", "name_ko": "흰 수염 봉우리", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 4, "terrain": "물가", "terrain_subs": ["산악", "유적"], "subzones": 6, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 34, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 133, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 35, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 134, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 36, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 75, "zone_id": "baekya", "zone_seq": 8, "zone_name_ko": "백야 빙원", "name_ko": "얼음 동굴 어귀", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 4, "terrain": "산악", "terrain_subs": ["물가"], "subzones": 7, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 34, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 134, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 76, "zone_id": "baekya", "zone_seq": 9, "zone_name_ko": "백야 빙원", "name_ko": "차가운 별 벌판", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 4, "terrain": "산악", "terrain_subs": ["유적", "물가"], "subzones": 6, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 134, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 34, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 77, "zone_id": "garin", "zone_seq": 13, "zone_name_ko": "가린 설원", "name_ko": "흰 여우 언덕", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 5, "terrain": "사냥터", "terrain_subs": ["산악"], "subzones": 9, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 75, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 24, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 76, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 105, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 78, "zone_id": "baekya", "zone_seq": 10, "zone_name_ko": "백야 빙원", "name_ko": "얼어붙은 고대 타이탄", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 6, "terrain": "산악", "terrain_subs": ["사냥터", "목초지"], "subzones": 10, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 10000, "garrison_cap": 300, "production": [{"material_id": 56, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 105, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 76, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 26, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 204, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "frozen_titan"}, {"id": 79, "zone_id": "baekya", "zone_seq": 11, "zone_name_ko": "백야 빙원", "name_ko": "깨진 얼음 벌판", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 5, "terrain": "물가", "terrain_subs": ["산악", "목초지"], "subzones": 10, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 35, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 134, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 36, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 25, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 80, "zone_id": "baekya", "zone_seq": 12, "zone_name_ko": "백야 빙원", "name_ko": "서리 거인 길", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 5, "terrain": "산악", "terrain_subs": ["목초지", "물가"], "subzones": 9, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 25, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 35, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 81, "zone_id": "garin", "zone_seq": 14, "zone_name_ko": "가린 설원", "name_ko": "겨울 사냥터", "name_key": "", "faction": "orc", "biome": "snowfield", "tier": 5, "terrain": "사냥터", "terrain_subs": ["산악", "물가"], "subzones": 8, "climate_element": "빙결", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 75, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 24, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 76, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 35, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 82, "zone_id": "baekya", "zone_seq": 13, "zone_name_ko": "백야 빙원", "name_ko": "눈시린 벼랑", "name_key": "", "faction": "orc", "biome": "glacier", "tier": 5, "terrain": "물가", "terrain_subs": ["산악", "유적"], "subzones": 8, "climate_element": "빙결", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 35, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 134, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 36, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 135, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 83, "zone_id": "neria", "zone_seq": 1, "zone_name_ko": "네리아 늪", "name_ko": "안개 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 1, "terrain": "늪지", "terrain_subs": ["농경지"], "subzones": 1, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 91, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 92, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 121, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 93, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 84, "zone_id": "sylvaren", "zone_seq": 1, "zone_name_ko": "실바렌 숲", "name_ko": "반딧불 숲", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 1, "terrain": "숲", "terrain_subs": ["늪지", "농경지"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 41, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 43, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 85, "zone_id": "neria", "zone_seq": 2, "zone_name_ko": "네리아 늪", "name_ko": "개구리 울음 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 1, "terrain": "늪지", "terrain_subs": ["숲", "농경지"], "subzones": 1, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 91, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 41, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 92, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 93, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 86, "zone_id": "neria", "zone_seq": 3, "zone_name_ko": "네리아 늪", "name_ko": "갈대 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 1, "terrain": "늪지", "terrain_subs": ["목초지", "농경지"], "subzones": 1, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 91, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 92, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 93, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 87, "zone_id": "sylvaren", "zone_seq": 2, "zone_name_ko": "실바렌 숲", "name_ko": "이끼 낀 숲", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 1, "terrain": "숲", "terrain_subs": ["늪지", "사냥터"], "subzones": 1, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 41, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 71, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 43, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 88, "zone_id": "neria", "zone_seq": 4, "zone_name_ko": "네리아 늪", "name_ko": "물풀 늪지", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 1, "terrain": "늪지", "terrain_subs": ["농경지"], "subzones": 1, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 91, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 92, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 121, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 93, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 89, "zone_id": "sylvaren", "zone_seq": 3, "zone_name_ko": "실바렌 숲", "name_ko": "세계수", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 5, "terrain": "숲", "terrain_subs": ["늪지"], "subzones": 9, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 4000, "garrison_cap": 200, "production": [{"material_id": 45, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 94, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 95, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 46, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 145, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 205, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "world_tree"}, {"id": 90, "zone_id": "neria", "zone_seq": 5, "zone_name_ko": "네리아 늪", "name_ko": "잠자리 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 2, "terrain": "늪지", "terrain_subs": ["숲", "사냥터"], "subzones": 3, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 92, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 93, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 94, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 91, "zone_id": "neria", "zone_seq": 6, "zone_name_ko": "네리아 늪", "name_ko": "검은 물 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 2, "terrain": "늪지", "terrain_subs": ["농경지"], "subzones": 3, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 92, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 12, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 93, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 122, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 94, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 92, "zone_id": "sylvaren", "zone_seq": 4, "zone_name_ko": "실바렌 숲", "name_ko": "노래하는 숲", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 2, "terrain": "숲", "terrain_subs": ["사냥터"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 42, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 72, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 43, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 22, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 44, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 93, "zone_id": "sylvaren", "zone_seq": 5, "zone_name_ko": "실바렌 숲", "name_ko": "은빛 나뭇길", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 2, "terrain": "사냥터", "terrain_subs": ["숲", "늪지"], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 72, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 21, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 73, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 92, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 74, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 94, "zone_id": "neria", "zone_seq": 7, "zone_name_ko": "네리아 늪", "name_ko": "수련 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 2, "terrain": "늪지", "terrain_subs": ["목초지"], "subzones": 3, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 92, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 22, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 93, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 82, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 94, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 95, "zone_id": "sylvaren", "zone_seq": 6, "zone_name_ko": "실바렌 숲", "name_ko": "오래된 떡갈나무 숲", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 2, "terrain": "숲", "terrain_subs": [], "subzones": 2, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 42, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 43, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 44, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 96, "zone_id": "neria", "zone_seq": 8, "zone_name_ko": "네리아 늪", "name_ko": "가라앉은 고대 사원", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 4, "terrain": "늪지", "terrain_subs": [], "subzones": 6, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 100, "production": [{"material_id": 94, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 143, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 95, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 96, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}, {"material_id": 206, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "sunken_temple"}, {"id": 97, "zone_id": "neria", "zone_seq": 9, "zone_name_ko": "네리아 늪", "name_ko": "반딧불 습지", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 3, "terrain": "늪지", "terrain_subs": ["사냥터", "광산"], "subzones": 4, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 93, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 142, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 73, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 94, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 95, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 98, "zone_id": "sylvaren", "zone_seq": 7, "zone_name_ko": "실바렌 숲", "name_ko": "달빛 나무 그늘", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 3, "terrain": "숲", "terrain_subs": [], "subzones": 4, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 43, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 92, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 44, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 45, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 99, "zone_id": "sylvaren", "zone_seq": 8, "zone_name_ko": "실바렌 숲", "name_ko": "속삭이는 수풀", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 3, "terrain": "숲", "terrain_subs": ["사냥터", "광산"], "subzones": 4, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 43, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 92, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 73, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 44, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 45, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 100, "zone_id": "byeoldok", "zone_seq": 1, "zone_name_ko": "별독지대", "name_ko": "초록 안개 벌판", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 3, "terrain": "광산", "terrain_subs": ["늪지", "사냥터"], "subzones": 4, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 63, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 112, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 93, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 64, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 73, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 65, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 101, "zone_id": "neria", "zone_seq": 10, "zone_name_ko": "네리아 늪", "name_ko": "진흙 발 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 3, "terrain": "늪지", "terrain_subs": ["목초지"], "subzones": 5, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 93, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 142, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 23, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 94, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 83, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 95, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 102, "zone_id": "sylvaren", "zone_seq": 9, "zone_name_ko": "실바렌 숲", "name_ko": "버섯 동그라미 숲", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 3, "terrain": "숲", "terrain_subs": ["유적"], "subzones": 4, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 43, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 92, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 133, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 44, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 153, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 45, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 103, "zone_id": "neria", "zone_seq": 11, "zone_name_ko": "네리아 늪", "name_ko": "버들 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 3, "terrain": "늪지", "terrain_subs": [], "subzones": 4, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 93, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 142, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 94, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 95, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 104, "zone_id": "byeoldok", "zone_seq": 2, "zone_name_ko": "별독지대", "name_ko": "병든 풀밭", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 4, "terrain": "늪지", "terrain_subs": ["광산", "유적"], "subzones": 6, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 94, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 143, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 95, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 134, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 96, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 105, "zone_id": "neria", "zone_seq": 12, "zone_name_ko": "네리아 늪", "name_ko": "이끼 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 4, "terrain": "늪지", "terrain_subs": [], "subzones": 7, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 94, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 143, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 95, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 96, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 106, "zone_id": "sylvaren", "zone_seq": 10, "zone_name_ko": "실바렌 숲", "name_ko": "새벽이슬 숲", "name_key": "", "faction": "elf", "biome": "ancient_forest", "tier": 4, "terrain": "숲", "terrain_subs": ["유적"], "subzones": 6, "climate_element": "없음", "climate_intensity": 0, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 44, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 93, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 134, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 45, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 154, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 46, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 107, "zone_id": "byeoldok", "zone_seq": 3, "zone_name_ko": "별독지대", "name_ko": "독성 운석 분화구", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 4, "terrain": "늪지", "terrain_subs": ["유적", "숲"], "subzones": 7, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 100, "production": [{"material_id": 94, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 143, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 134, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 95, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 44, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 96, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}, {"material_id": 207, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "poison_crater"}, {"id": 108, "zone_id": "byeoldok", "zone_seq": 4, "zone_name_ko": "별독지대", "name_ko": "녹아내린 땅", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 4, "terrain": "유적", "terrain_subs": ["숲", "늪지"], "subzones": 7, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 134, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 153, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 44, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 135, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 94, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 136, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 109, "zone_id": "byeoldok", "zone_seq": 5, "zone_name_ko": "별독지대", "name_ko": "별똥별 잿더미", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 4, "terrain": "유적", "terrain_subs": ["늪지", "광산"], "subzones": 7, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 134, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 153, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 94, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 135, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 136, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 110, "zone_id": "neria", "zone_seq": 13, "zone_name_ko": "네리아 늪", "name_ko": "뱀길 늪", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 4, "terrain": "늪지", "terrain_subs": ["목초지"], "subzones": 7, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 94, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 143, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 24, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 95, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 84, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 96, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 111, "zone_id": "neria", "zone_seq": 14, "zone_name_ko": "네리아 늪", "name_ko": "조용한 습지", "name_key": "", "faction": "elf", "biome": "swamp", "tier": 5, "terrain": "늪지", "terrain_subs": [], "subzones": 8, "climate_element": "맹독", "climate_intensity": 2, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 95, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 144, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 96, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}], "landmark_code": null}, {"id": 112, "zone_id": "byeoldok", "zone_seq": 6, "zone_name_ko": "별독지대", "name_ko": "오염된 개울", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 5, "terrain": "늪지", "terrain_subs": ["유적"], "subzones": 10, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 95, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 144, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 135, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 96, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 155, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 113, "zone_id": "byeoldok", "zone_seq": 7, "zone_name_ko": "별독지대", "name_ko": "시든 꽃밭", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 5, "terrain": "늪지", "terrain_subs": ["유적"], "subzones": 8, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 95, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 144, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 135, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 96, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 155, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 114, "zone_id": "byeoldok", "zone_seq": 8, "zone_name_ko": "별독지대", "name_ko": "유리 조각 벌판", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 5, "terrain": "유적", "terrain_subs": ["늪지"], "subzones": 9, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 135, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 154, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 95, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 136, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 145, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 115, "zone_id": "byeoldok", "zone_seq": 9, "zone_name_ko": "별독지대", "name_ko": "초록 불빛 골짜기", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 5, "terrain": "유적", "terrain_subs": ["늪지"], "subzones": 9, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 135, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 154, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 95, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 136, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 145, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 116, "zone_id": "byeoldok", "zone_seq": 10, "zone_name_ko": "별독지대", "name_ko": "잿빛 웅덩이", "name_key": "", "faction": "elf", "biome": "toxic_wasteland", "tier": 5, "terrain": "늪지", "terrain_subs": ["유적"], "subzones": 8, "climate_element": "맹독", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 95, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 144, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 135, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 96, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 155, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 117, "zone_id": "morgar", "zone_seq": 1, "zone_name_ko": "모르가르 저주지", "name_ko": "잿빛 벌판", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 1, "terrain": "유적", "terrain_subs": ["물가", "농경지"], "subzones": 2, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 131, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 151, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 31, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 132, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 133, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 118, "zone_id": "morgar", "zone_seq": 2, "zone_name_ko": "모르가르 저주지", "name_ko": "뼈 무덤 벌판", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 1, "terrain": "늪지", "terrain_subs": ["숲", "농경지"], "subzones": 1, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 91, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 41, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 92, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 93, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 119, "zone_id": "morgar", "zone_seq": 3, "zone_name_ko": "모르가르 저주지", "name_ko": "시든 나무 언덕", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 1, "terrain": "늪지", "terrain_subs": ["숲"], "subzones": 1, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 91, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 41, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 92, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 93, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 120, "zone_id": "morgar", "zone_seq": 4, "zone_name_ko": "모르가르 저주지", "name_ko": "검은 흙 벌판", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 1, "terrain": "숲", "terrain_subs": ["유적", "목초지"], "subzones": 2, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 41, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 131, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 42, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 21, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 43, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 121, "zone_id": "ragma", "zone_seq": 1, "zone_name_ko": "라그마 화산지대", "name_ko": "균열 가장자리", "name_key": "", "faction": "undead", "biome": "rift_border", "tier": 1, "terrain": "유적", "terrain_subs": ["산악", "농경지"], "subzones": 2, "climate_element": "화염", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 131, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 151, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 51, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 132, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 11, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 133, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 122, "zone_id": "ragma", "zone_seq": 2, "zone_name_ko": "라그마 화산지대", "name_ko": "붉은 빛 틈", "name_key": "", "faction": "undead", "biome": "rift_border", "tier": 1, "terrain": "유적", "terrain_subs": ["산악", "숲"], "subzones": 2, "climate_element": "화염", "climate_intensity": 2, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 131, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 151, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 51, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 132, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 41, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 133, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 123, "zone_id": "belkar", "zone_seq": 1, "zone_name_ko": "벨카르 고원", "name_ko": "어둠 고원", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 1, "terrain": "숲", "terrain_subs": ["늪지", "산악"], "subzones": 2, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 100, "garrison_cap": 5, "production": [{"material_id": 41, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 51, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 43, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 124, "zone_id": "morgar", "zone_seq": 5, "zone_name_ko": "모르가르 저주지", "name_ko": "까마귀 벌판", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 2, "terrain": "늪지", "terrain_subs": ["숲", "광산"], "subzones": 3, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 92, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 93, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 62, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 94, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 125, "zone_id": "morgar", "zone_seq": 6, "zone_name_ko": "모르가르 저주지", "name_ko": "어둠 안개 골", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 2, "terrain": "숲", "terrain_subs": ["늪지"], "subzones": 2, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 42, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 92, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 43, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 142, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 44, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 126, "zone_id": "ragma", "zone_seq": 3, "zone_name_ko": "라그마 화산지대", "name_ko": "갈라진 어둠 골", "name_key": "", "faction": "undead", "biome": "rift_border", "tier": 2, "terrain": "산악", "terrain_subs": ["숲", "유적"], "subzones": 3, "climate_element": "화염", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 52, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 101, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 53, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 132, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 54, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 127, "zone_id": "ragma", "zone_seq": 4, "zone_name_ko": "라그마 화산지대", "name_ko": "용암 개울", "name_key": "", "faction": "undead", "biome": "volcanic_waste", "tier": 2, "terrain": "산악", "terrain_subs": ["유적", "광산"], "subzones": 3, "climate_element": "화염", "climate_intensity": 3, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 52, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 101, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 132, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 53, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 62, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 54, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 128, "zone_id": "morgar", "zone_seq": 7, "zone_name_ko": "모르가르 저주지", "name_ko": "버려진 무덤가", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 2, "terrain": "늪지", "terrain_subs": ["숲", "광산"], "subzones": 2, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 92, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 141, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 42, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 93, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 62, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 94, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 129, "zone_id": "belkar", "zone_seq": 2, "zone_name_ko": "벨카르 고원", "name_ko": "검은 바위 능선", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 2, "terrain": "숲", "terrain_subs": ["산악", "늪지"], "subzones": 2, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 42, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 52, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 43, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 92, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 44, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 130, "zone_id": "morgar", "zone_seq": 8, "zone_name_ko": "모르가르 저주지", "name_ko": "유령불 벌판", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 2, "terrain": "숲", "terrain_subs": ["늪지", "유적"], "subzones": 3, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 250, "garrison_cap": 10, "production": [{"material_id": 42, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 91, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 92, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 43, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 132, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 44, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 131, "zone_id": "belkar", "zone_seq": 3, "zone_name_ko": "벨카르 고원", "name_ko": "달 없는 언덕", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 3, "terrain": "광산", "terrain_subs": ["산악", "늪지"], "subzones": 4, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 63, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 112, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 53, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 64, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 93, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 65, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 132, "zone_id": "ragma", "zone_seq": 5, "zone_name_ko": "라그마 화산지대", "name_ko": "불씨 흩날리는 땅", "name_key": "", "faction": "undead", "biome": "rift_border", "tier": 3, "terrain": "산악", "terrain_subs": ["숲", "광산"], "subzones": 5, "climate_element": "화염", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 53, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 102, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 43, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 54, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 55, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 133, "zone_id": "ragma", "zone_seq": 6, "zone_name_ko": "라그마 화산지대", "name_ko": "악마의 차원문", "name_key": "", "faction": "undead", "biome": "volcanic_waste", "tier": 4, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 7, "climate_element": "화염", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 100, "production": [{"material_id": 64, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 113, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 65, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 104, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 66, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}, {"material_id": 208, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "demon_portal"}, {"id": 134, "zone_id": "morgar", "zone_seq": 9, "zone_name_ko": "모르가르 저주지", "name_ko": "마른 가시 벌판", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 3, "terrain": "숲", "terrain_subs": ["유적"], "subzones": 5, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 43, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 92, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 133, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 44, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 153, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 45, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 135, "zone_id": "belkar", "zone_seq": 4, "zone_name_ko": "벨카르 고원", "name_ko": "그림자 봉우리", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 3, "terrain": "산악", "terrain_subs": ["광산", "늪지"], "subzones": 4, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 53, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 102, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 63, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 54, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 93, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 55, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 136, "zone_id": "morgar", "zone_seq": 10, "zone_name_ko": "모르가르 저주지", "name_ko": "침묵의 들", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 3, "terrain": "유적", "terrain_subs": ["숲", "산악"], "subzones": 5, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 133, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 152, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 43, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 134, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 53, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 135, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 137, "zone_id": "morgar", "zone_seq": 11, "zone_name_ko": "모르가르 저주지", "name_ko": "창백한 언덕", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 3, "terrain": "숲", "terrain_subs": ["유적"], "subzones": 5, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 600, "garrison_cap": 20, "production": [{"material_id": 43, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 92, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 133, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 44, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 153, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 45, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 138, "zone_id": "belkar", "zone_seq": 5, "zone_name_ko": "벨카르 고원", "name_ko": "박쥐 벼랑", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 4, "terrain": "산악", "terrain_subs": ["숲", "광산"], "subzones": 7, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 44, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 139, "zone_id": "belkar", "zone_seq": 6, "zone_name_ko": "벨카르 고원", "name_ko": "검은 가시 언덕", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 4, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 6, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 114, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 140, "zone_id": "ragma", "zone_seq": 7, "zone_name_ko": "라그마 화산지대", "name_ko": "검붉은 경계", "name_key": "", "faction": "undead", "biome": "rift_border", "tier": 4, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 7, "climate_element": "화염", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 114, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 141, "zone_id": "ragma", "zone_seq": 8, "zone_name_ko": "라그마 화산지대", "name_ko": "불타는 화산", "name_key": "", "faction": "undead", "biome": "volcanic_waste", "tier": 4, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 6, "climate_element": "화염", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 100, "production": [{"material_id": 54, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 103, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 64, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 55, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 114, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 56, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}, {"material_id": 209, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "volcano"}, {"id": 142, "zone_id": "morgar", "zone_seq": 12, "zone_name_ko": "모르가르 저주지", "name_ko": "저주받은 갈림길", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 4, "terrain": "유적", "terrain_subs": ["숲"], "subzones": 7, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 134, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 153, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 44, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 135, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 94, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 136, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 143, "zone_id": "ragma", "zone_seq": 9, "zone_name_ko": "라그마 화산지대", "name_ko": "검은 재 벌판", "name_key": "", "faction": "undead", "biome": "volcanic_waste", "tier": 4, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 7, "climate_element": "화염", "climate_intensity": 3, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 64, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 113, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 65, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 104, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 66, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 144, "zone_id": "morgar", "zone_seq": 13, "zone_name_ko": "모르가르 저주지", "name_ko": "그림자 웅덩이", "name_key": "", "faction": "undead", "biome": "cursed_waste", "tier": 4, "terrain": "유적", "terrain_subs": ["숲", "산악"], "subzones": 7, "climate_element": "어둠", "climate_intensity": 2, "friendship_max": 1500, "garrison_cap": 50, "production": [{"material_id": 134, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 153, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 44, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 135, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 54, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}, {"material_id": 136, "rate": 8, "unlock_type": "friendship", "unlock_value": 5}], "landmark_code": null}, {"id": 145, "zone_id": "belkar", "zone_seq": 7, "zone_name_ko": "벨카르 고원", "name_ko": "안개 낀 고원", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 5, "terrain": "산악", "terrain_subs": ["유적", "광산"], "subzones": 8, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 135, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 65, "rate": 30, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 146, "zone_id": "belkar", "zone_seq": 8, "zone_name_ko": "벨카르 고원", "name_ko": "어두운 돌길", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 5, "terrain": "광산", "terrain_subs": ["산악"], "subzones": 8, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 65, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 114, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 55, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 66, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 105, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 147, "zone_id": "belkar", "zone_seq": 9, "zone_name_ko": "벨카르 고원", "name_ko": "늙은 까마귀 바위", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 5, "terrain": "산악", "terrain_subs": [], "subzones": 8, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}], "landmark_code": null}, {"id": 148, "zone_id": "belkar", "zone_seq": 10, "zone_name_ko": "벨카르 고원", "name_ko": "언데드 성채", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 6, "terrain": "산악", "terrain_subs": [], "subzones": 10, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 10000, "garrison_cap": 300, "production": [{"material_id": 56, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 105, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 210, "rate": 10, "unlock_type": "landmark", "unlock_value": 5}], "landmark_code": "undead_castle"}, {"id": 149, "zone_id": "belkar", "zone_seq": 11, "zone_name_ko": "벨카르 고원", "name_ko": "핏빛 이끼 바위", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 5, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 8, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 65, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 115, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}, {"id": 150, "zone_id": "belkar", "zone_seq": 12, "zone_name_ko": "벨카르 고원", "name_ko": "침묵 봉우리", "name_key": "", "faction": "undead", "biome": "dark_highlands", "tier": 5, "terrain": "산악", "terrain_subs": ["광산"], "subzones": 8, "climate_element": "어둠", "climate_intensity": 3, "friendship_max": 4000, "garrison_cap": 100, "production": [{"material_id": 55, "rate": 100, "unlock_type": "base", "unlock_value": 0}, {"material_id": 104, "rate": 50, "unlock_type": "base", "unlock_value": 0}, {"material_id": 65, "rate": 30, "unlock_type": "friendship", "unlock_value": 2}, {"material_id": 56, "rate": 15, "unlock_type": "friendship", "unlock_value": 3}, {"material_id": 115, "rate": 25, "unlock_type": "friendship", "unlock_value": 4}], "landmark_code": null}]
start_regionadded2

Bundled data: assets/images/conquest/regionGameData.draft.json 6

RowChangeFieldBeforeAfter
_noteadded"conquest2(GPT) 기하+데이터 채택본 — faction=ID대역, tier=difficulty_tier(중립0→1), 검수 필요"
continent_centroid_pxadded[1020, 735]
faction_countadded{"neutral": 14, "human": 34, "orc": 34, "elf": 34, "undead": 34}
landmark_indexadded[{"code": "titan_sword", "name_ko": "타이탄의 석검", "x": 563, "y": 860, "region_id": 21}, {"code": "angel_temple", "name_ko": "천사의 작은 신전", "x": 860, "y": 1196, "region_id": 28}, {"code": "broken_babel_tower", "name_ko": "부서진 바벨탑", "x": 716, "y": 497, "region_id": 52}, {"code": "frozen_titan", "name_ko": "얼어붙은 고대 타이탄", "x": 522, "y": 287, "region_id": 78}, {"code": "world_tree", "name_ko": "세계수", "x": 1443, "y": 734, "region_id": 89}, {"code": "sunken_temple", "name_ko": "가라앉은 고대 사원", "x": 1249, "y": 1105, "region_id": 96}, {"code": "poison_crater", "name_ko": "독성 운석 분화구", "x": 1617, "y": 1105, "region_id": 107}, {"code": "demon_portal", "name_ko": "악마의 차원문", "x": 1279, "y": 315, "region_id": 133}, {"code": "volcano", "name_ko": "불타는 화산", "x": 1136, "y": 147, "region_id": 141}, {"code": "undead_castle", "name_ko": "언데드 성채", "x": 1576, "y": 259, "region_id": 148}]
regionsadded[{"id": 1, "faction": "neutral", "biome": "central_watershed", "biome_ko": "중앙 수원지", "name_ko": "은빛 여울", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 1, "terrain": "물가", "subzones": 1, "terrain_subs": ["농경지", "목초지"]}, {"id": 2, "faction": "neutral", "biome": "central_watershed", "biome_ko": "중앙 수원지", "name_ko": "여명의 호숫가", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 2, "terrain": "물가", "subzones": 1, "terrain_subs": ["농경지", "목초지"]}, {"id": 3, "faction": "neutral", "biome": "central_watershed", "biome_ko": "중앙 수원지", "name_ko": "버들 나루", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 3, "terrain": "물가", "subzones": 2, "terrain_subs": ["농경지", "목초지"]}, {"id": 4, "faction": "neutral", "biome": "central_watershed", "biome_ko": "중앙 수원지", "name_ko": "구름 여울", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 4, "terrain": "물가", "subzones": 2, "terrain_subs": ["농경지", "목초지"]}, {"id": 5, "faction": "neutral", "biome": "central_watershed", "biome_ko": "중앙 수원지", "name_ko": "아침 나루", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 5, "terrain": "물가", "subzones": 2, "terrain_subs": ["농경지", "목초지"]}, {"id": 6, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "바람 들판", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 6, "terrain": "농경지", "subzones": 2, "terrain_subs": ["물가", "목초지"]}, {"id": 7, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "양떼 언덕", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 7, "terrain": "목초지", "subzones": 1, "terrain_subs": ["농경지", "물가"]}, {"id": 8, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "해바라기 평원", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 8, "terrain": "농경지", "subzones": 2, "terrain_subs": ["늪지", "물가"]}, {"id": 9, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "종달새 들판", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 9, "terrain": "농경지", "subzones": 1, "terrain_subs": ["물가", "목초지"]}, {"id": 10, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "밀꽃 평원", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 10, "terrain": "농경지", "subzones": 1, "terrain_subs": ["광산", "물가"]}, {"id": 11, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "클로버 언덕", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 11, "terrain": "목초지", "subzones": 2, "terrain_subs": ["물가", "농경지"]}, {"id": 12, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "시냇가 들판", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 12, "terrain": "농경지", "subzones": 1, "terrain_subs": ["늪지", "물가"]}, {"id": 13, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "달빛 구릉지", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 13, "terrain": "농경지", "subzones": 1, "terrain_subs": ["광산", "물가"]}, {"id": 14, "faction": "neutral", "biome": "central_plains", "biome_ko": "중앙 평원", "name_ko": "조약돌 언덕", "hop": 0, "tier_suggestion": 1, "landmarks": [], "zone_id": "panderas", "zone_name_ko": "판데라스 평원", "zone_seq": 14, "terrain": "목초지", "subzones": 2, "terrain_subs": ["농경지", "사냥터"]}, {"id": 15, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "모래 언덕길", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 1, "terrain": "광산", "subzones": 2, "terrain_subs": ["농경지", "사냥터"]}, {"id": 16, "faction": "human", "biome": "open_plains", "biome_ko": "너른 평원", "name_ko": "햇살 들녘", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "arden", "zone_name_ko": "아르덴 들녘", "zone_seq": 1, "terrain": "농경지", "subzones": 1, "terrain_subs": ["목초지", "광산"]}, {"id": 17, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "선인장 골짜기", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 2, "terrain": "사냥터", "subzones": 2, "terrain_subs": ["광산", "농경지"]}, {"id": 18, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "오아시스 쉼터", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 3, "terrain": "광산", "subzones": 2, "terrain_subs": ["농경지", "사냥터"]}, {"id": 19, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "사막 장미 골", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 4, "terrain": "광산", "subzones": 1, "terrain_subs": ["사냥터", "산악"]}, {"id": 20, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "뜨거운 모래밭", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 5, "terrain": "광산", "subzones": 2, "terrain_subs": ["농경지", "목초지"]}, {"id": 21, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "타이탄의 석검", "hop": 1, "tier_suggestion": 4, "landmarks": [{"code": "titan_sword", "name_ko": "타이탄의 석검", "x": 563, "y": 860}], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 1, "terrain": "광산", "subzones": 6, "terrain_subs": ["사냥터"]}, {"id": 22, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "신기루 벌판", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 6, "terrain": "광산", "subzones": 2, "terrain_subs": ["사냥터", "농경지"]}, {"id": 23, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "붉은 바위산", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 2, "terrain": "광산", "subzones": 2, "terrain_subs": ["산악"]}, {"id": 24, "faction": "human", "biome": "open_plains", "biome_ko": "너른 평원", "name_ko": "보리 이랑", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "arden", "zone_name_ko": "아르덴 들녘", "zone_seq": 2, "terrain": "목초지", "subzones": 2, "terrain_subs": ["광산", "늪지"]}, {"id": 25, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "전갈 바위", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 7, "terrain": "광산", "subzones": 3, "terrain_subs": ["목초지", "산악"]}, {"id": 26, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "마른 우물터", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 8, "terrain": "농경지", "subzones": 3, "terrain_subs": ["광산"]}, {"id": 27, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "녹슨 협곡", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 3, "terrain": "광산", "subzones": 3, "terrain_subs": ["산악"]}, {"id": 28, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "천사의 작은 신전", "hop": 2, "tier_suggestion": 4, "landmarks": [{"code": "angel_temple", "name_ko": "천사의 작은 신전", "x": 860, "y": 1196}], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 9, "terrain": "광산", "subzones": 6, "terrain_subs": ["목초지", "농경지"]}, {"id": 29, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "매 둥지 절벽", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 4, "terrain": "산악", "subzones": 4, "terrain_subs": ["광산", "목초지"]}, {"id": 30, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "노을 바위", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 5, "terrain": "광산", "subzones": 5, "terrain_subs": ["산악"]}, {"id": 31, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "붉은 먼지 골짜기", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 6, "terrain": "광산", "subzones": 5, "terrain_subs": ["농경지", "산악"]}, {"id": 32, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "부서진 바위 벌판", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 7, "terrain": "산악", "subzones": 4, "terrain_subs": ["광산"]}, {"id": 33, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "황금 모래벌", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 10, "terrain": "광산", "subzones": 5, "terrain_subs": ["농경지"]}, {"id": 34, "faction": "human", "biome": "open_plains", "biome_ko": "너른 평원", "name_ko": "원두막 벌판", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "arden", "zone_name_ko": "아르덴 들녘", "zone_seq": 3, "terrain": "목초지", "subzones": 4, "terrain_subs": ["늪지"]}, {"id": 35, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "불꽃 바위", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 8, "terrain": "산악", "subzones": 5, "terrain_subs": ["광산"]}, {"id": 36, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "붉은 손가락 바위", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 9, "terrain": "광산", "subzones": 7, "terrain_subs": ["산악"]}, {"id": 37, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "쇠 바위 능선", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 10, "terrain": "광산", "subzones": 7, "terrain_subs": ["산악"]}, {"id": 38, "faction": "human", "biome": "open_plains", "biome_ko": "너른 평원", "name_ko": "능금나무 벌판", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "arden", "zone_name_ko": "아르덴 들녘", "zone_seq": 4, "terrain": "목초지", "subzones": 7, "terrain_subs": ["광산", "농경지"]}, {"id": 39, "faction": "human", "biome": "desert", "biome_ko": "사막", "name_ko": "바람 조각 바위", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "saharin", "zone_name_ko": "사하린 사막", "zone_seq": 11, "terrain": "농경지", "subzones": 7, "terrain_subs": ["광산", "목초지"]}, {"id": 40, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "구리빛 벼랑", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 11, "terrain": "광산", "subzones": 7, "terrain_subs": ["산악"]}, {"id": 41, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "붉은 탑 바위", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 12, "terrain": "산악", "subzones": 7, "terrain_subs": ["광산"]}, {"id": 42, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "마른 강 바닥", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 13, "terrain": "산악", "subzones": 6, "terrain_subs": ["광산"]}, {"id": 43, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "갈라진 땅", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 14, "terrain": "광산", "subzones": 8, "terrain_subs": ["산악"]}, {"id": 44, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "돌부리 벌판", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 15, "terrain": "산악", "subzones": 10, "terrain_subs": ["광산"]}, {"id": 45, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "붉은 안개 골", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 16, "terrain": "광산", "subzones": 10, "terrain_subs": ["산악"]}, {"id": 46, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "독수리 바위", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 17, "terrain": "산악", "subzones": 10, "terrain_subs": ["광산"]}, {"id": 47, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "붉은 노을 능선", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 18, "terrain": "산악", "subzones": 9, "terrain_subs": ["광산"]}, {"id": 48, "faction": "human", "biome": "red_badlands", "biome_ko": "붉은 황무지", "name_ko": "화살촉 바위", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "redcrown", "zone_name_ko": "붉은왕관 산맥", "zone_seq": 19, "terrain": "광산", "subzones": 9, "terrain_subs": ["산악"]}, {"id": 49, "faction": "orc", "biome": "tundra", "biome_ko": "툰드라", "name_ko": "언 땅 벌판", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "urkan", "zone_name_ko": "우르칸 툰드라", "zone_seq": 1, "terrain": "사냥터", "subzones": 1, "terrain_subs": ["산악", "농경지"]}, {"id": 50, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "흰눈 벌판", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 1, "terrain": "목초지", "subzones": 1, "terrain_subs": ["사냥터", "농경지"]}, {"id": 51, "faction": "orc", "biome": "cold_hills", "biome_ko": "서리 언덕", "name_ko": "서리 언덕", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 2, "terrain": "산악", "subzones": 2, "terrain_subs": ["광산", "사냥터"]}, {"id": 52, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "부서진 바벨탑", "hop": 1, "tier_suggestion": 4, "landmarks": [{"code": "broken_babel_tower", "name_ko": "부서진 바벨탑", "x": 716, "y": 497}], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 3, "terrain": "산악", "subzones": 6, "terrain_subs": ["사냥터", "목초지"]}, {"id": 53, "faction": "orc", "biome": "tundra", "biome_ko": "툰드라", "name_ko": "순록 벌판", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "urkan", "zone_name_ko": "우르칸 툰드라", "zone_seq": 2, "terrain": "사냥터", "subzones": 1, "terrain_subs": ["산악", "목초지"]}, {"id": 54, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "눈보라 언덕", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 4, "terrain": "사냥터", "subzones": 2, "terrain_subs": ["목초지", "유적"]}, {"id": 55, "faction": "orc", "biome": "cold_hills", "biome_ko": "서리 언덕", "name_ko": "찬 바위 구릉", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 5, "terrain": "광산", "subzones": 1, "terrain_subs": ["목초지", "산악"]}, {"id": 56, "faction": "orc", "biome": "tundra", "biome_ko": "툰드라", "name_ko": "찬바람 언덕", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "urkan", "zone_name_ko": "우르칸 툰드라", "zone_seq": 3, "terrain": "목초지", "subzones": 3, "terrain_subs": ["사냥터", "산악"]}, {"id": 57, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "하얀 늑대 벌판", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 6, "terrain": "사냥터", "subzones": 3, "terrain_subs": ["유적", "목초지"]}, {"id": 58, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "눈송이 골짜기", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 7, "terrain": "목초지", "subzones": 3, "terrain_subs": ["사냥터", "유적"]}, {"id": 59, "faction": "orc", "biome": "tundra", "biome_ko": "툰드라", "name_ko": "흰 이끼 벌판", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "urkan", "zone_name_ko": "우르칸 툰드라", "zone_seq": 4, "terrain": "목초지", "subzones": 2, "terrain_subs": ["광산", "사냥터"]}, {"id": 60, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "얼음 벼랑", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 1, "terrain": "유적", "subzones": 2, "terrain_subs": ["산악", "사냥터"]}, {"id": 61, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "푸른 빙벽", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 2, "terrain": "유적", "subzones": 3, "terrain_subs": ["사냥터", "산악"]}, {"id": 62, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "곰 발자국 벌판", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 8, "terrain": "사냥터", "subzones": 2, "terrain_subs": ["목초지", "산악"]}, {"id": 63, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "유리 얼음벌", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 3, "terrain": "산악", "subzones": 5, "terrain_subs": ["유적", "사냥터"]}, {"id": 64, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "얼어붙은 폭포", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 4, "terrain": "유적", "subzones": 4, "terrain_subs": ["목초지", "사냥터"]}, {"id": 65, "faction": "orc", "biome": "tundra", "biome_ko": "툰드라", "name_ko": "매머드 길", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "urkan", "zone_name_ko": "우르칸 툰드라", "zone_seq": 5, "terrain": "목초지", "subzones": 5, "terrain_subs": ["산악", "사냥터"]}, {"id": 66, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "은빛 설원", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 9, "terrain": "사냥터", "subzones": 4, "terrain_subs": ["목초지", "유적"]}, {"id": 67, "faction": "orc", "biome": "tundra", "biome_ko": "툰드라", "name_ko": "서리 풀밭", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "urkan", "zone_name_ko": "우르칸 툰드라", "zone_seq": 6, "terrain": "사냥터", "subzones": 4, "terrain_subs": ["목초지", "산악"]}, {"id": 68, "faction": "orc", "biome": "cold_hills", "biome_ko": "서리 언덕", "name_ko": "언 돌 언덕", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 10, "terrain": "산악", "subzones": 5, "terrain_subs": ["광산", "목초지"]}, {"id": 69, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "눈 덮인 소나무길", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 11, "terrain": "목초지", "subzones": 4, "terrain_subs": ["산악", "사냥터"]}, {"id": 70, "faction": "orc", "biome": "tundra", "biome_ko": "툰드라", "name_ko": "얼음꽃 벌판", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "urkan", "zone_name_ko": "우르칸 툰드라", "zone_seq": 7, "terrain": "사냥터", "subzones": 6, "terrain_subs": ["목초지", "산악"]}, {"id": 71, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "고요한 설원", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 12, "terrain": "산악", "subzones": 7, "terrain_subs": ["사냥터", "목초지"]}, {"id": 72, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "수정 얼음골", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 5, "terrain": "유적", "subzones": 7, "terrain_subs": ["산악", "사냥터"]}, {"id": 73, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "빙하 틈새", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 6, "terrain": "산악", "subzones": 6, "terrain_subs": ["유적", "물가"]}, {"id": 74, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "흰 수염 봉우리", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 7, "terrain": "물가", "subzones": 6, "terrain_subs": ["산악", "유적"]}, {"id": 75, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "얼음 동굴 어귀", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 8, "terrain": "산악", "subzones": 7, "terrain_subs": ["물가"]}, {"id": 76, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "차가운 별 벌판", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 9, "terrain": "산악", "subzones": 6, "terrain_subs": ["유적", "물가"]}, {"id": 77, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "흰 여우 언덕", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 13, "terrain": "사냥터", "subzones": 9, "terrain_subs": ["산악"]}, {"id": 78, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "얼어붙은 고대 타이탄", "hop": 5, "tier_suggestion": 6, "landmarks": [{"code": "frozen_titan", "name_ko": "얼어붙은 고대 타이탄", "x": 522, "y": 287}], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 10, "terrain": "산악", "subzones": 10, "terrain_subs": ["사냥터", "목초지"]}, {"id": 79, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "깨진 얼음 벌판", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 11, "terrain": "물가", "subzones": 10, "terrain_subs": ["산악", "목초지"]}, {"id": 80, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "서리 거인 길", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 12, "terrain": "산악", "subzones": 9, "terrain_subs": ["목초지", "물가"]}, {"id": 81, "faction": "orc", "biome": "snowfield", "biome_ko": "설원", "name_ko": "겨울 사냥터", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "garin", "zone_name_ko": "가린 설원", "zone_seq": 14, "terrain": "사냥터", "subzones": 8, "terrain_subs": ["산악", "물가"]}, {"id": 82, "faction": "orc", "biome": "glacier", "biome_ko": "빙하", "name_ko": "눈시린 벼랑", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "baekya", "zone_name_ko": "백야 빙원", "zone_seq": 13, "terrain": "물가", "subzones": 8, "terrain_subs": ["산악", "유적"]}, {"id": 83, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "안개 늪", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 1, "terrain": "늪지", "subzones": 1, "terrain_subs": ["농경지"]}, {"id": 84, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "반딧불 숲", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 1, "terrain": "숲", "subzones": 1, "terrain_subs": ["늪지", "농경지"]}, {"id": 85, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "개구리 울음 늪", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 2, "terrain": "늪지", "subzones": 1, "terrain_subs": ["숲", "농경지"]}, {"id": 86, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "갈대 늪", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 3, "terrain": "늪지", "subzones": 1, "terrain_subs": ["목초지", "농경지"]}, {"id": 87, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "이끼 낀 숲", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 2, "terrain": "숲", "subzones": 1, "terrain_subs": ["늪지", "사냥터"]}, {"id": 88, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "물풀 늪지", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 4, "terrain": "늪지", "subzones": 1, "terrain_subs": ["농경지"]}, {"id": 89, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "세계수", "hop": 1, "tier_suggestion": 5, "landmarks": [{"code": "world_tree", "name_ko": "세계수", "x": 1443, "y": 734}], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 3, "terrain": "숲", "subzones": 9, "terrain_subs": ["늪지"]}, {"id": 90, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "잠자리 늪", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 5, "terrain": "늪지", "subzones": 3, "terrain_subs": ["숲", "사냥터"]}, {"id": 91, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "검은 물 늪", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 6, "terrain": "늪지", "subzones": 3, "terrain_subs": ["농경지"]}, {"id": 92, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "노래하는 숲", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 4, "terrain": "숲", "subzones": 2, "terrain_subs": ["사냥터"]}, {"id": 93, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "은빛 나뭇길", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 5, "terrain": "사냥터", "subzones": 2, "terrain_subs": ["숲", "늪지"]}, {"id": 94, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "수련 늪", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 7, "terrain": "늪지", "subzones": 3, "terrain_subs": ["목초지"]}, {"id": 95, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "오래된 떡갈나무 숲", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 6, "terrain": "숲", "subzones": 2, "terrain_subs": []}, {"id": 96, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "가라앉은 고대 사원", "hop": 2, "tier_suggestion": 4, "landmarks": [{"code": "sunken_temple", "name_ko": "가라앉은 고대 사원", "x": 1249, "y": 1105}], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 8, "terrain": "늪지", "subzones": 6, "terrain_subs": []}, {"id": 97, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "반딧불 습지", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 9, "terrain": "늪지", "subzones": 4, "terrain_subs": ["사냥터", "광산"]}, {"id": 98, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "달빛 나무 그늘", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 7, "terrain": "숲", "subzones": 4, "terrain_subs": []}, {"id": 99, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "속삭이는 수풀", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 8, "terrain": "숲", "subzones": 4, "terrain_subs": ["사냥터", "광산"]}, {"id": 100, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "초록 안개 벌판", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 1, "terrain": "광산", "subzones": 4, "terrain_subs": ["늪지", "사냥터"]}, {"id": 101, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "진흙 발 늪", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 10, "terrain": "늪지", "subzones": 5, "terrain_subs": ["목초지"]}, {"id": 102, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "버섯 동그라미 숲", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 9, "terrain": "숲", "subzones": 4, "terrain_subs": ["유적"]}, {"id": 103, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "버들 늪", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 11, "terrain": "늪지", "subzones": 4, "terrain_subs": []}, {"id": 104, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "병든 풀밭", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 2, "terrain": "늪지", "subzones": 6, "terrain_subs": ["광산", "유적"]}, {"id": 105, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "이끼 늪", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 12, "terrain": "늪지", "subzones": 7, "terrain_subs": []}, {"id": 106, "faction": "elf", "biome": "ancient_forest", "biome_ko": "고대 숲", "name_ko": "새벽이슬 숲", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "sylvaren", "zone_name_ko": "실바렌 숲", "zone_seq": 10, "terrain": "숲", "subzones": 6, "terrain_subs": ["유적"]}, {"id": 107, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "독성 운석 분화구", "hop": 4, "tier_suggestion": 4, "landmarks": [{"code": "poison_crater", "name_ko": "독성 운석 분화구", "x": 1617, "y": 1105}], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 3, "terrain": "늪지", "subzones": 7, "terrain_subs": ["유적", "숲"]}, {"id": 108, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "녹아내린 땅", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 4, "terrain": "유적", "subzones": 7, "terrain_subs": ["숲", "늪지"]}, {"id": 109, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "별똥별 잿더미", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 5, "terrain": "유적", "subzones": 7, "terrain_subs": ["늪지", "광산"]}, {"id": 110, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "뱀길 늪", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 13, "terrain": "늪지", "subzones": 7, "terrain_subs": ["목초지"]}, {"id": 111, "faction": "elf", "biome": "swamp", "biome_ko": "늪지", "name_ko": "조용한 습지", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "neria", "zone_name_ko": "네리아 늪", "zone_seq": 14, "terrain": "늪지", "subzones": 8, "terrain_subs": []}, {"id": 112, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "오염된 개울", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 6, "terrain": "늪지", "subzones": 10, "terrain_subs": ["유적"]}, {"id": 113, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "시든 꽃밭", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 7, "terrain": "늪지", "subzones": 8, "terrain_subs": ["유적"]}, {"id": 114, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "유리 조각 벌판", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 8, "terrain": "유적", "subzones": 9, "terrain_subs": ["늪지"]}, {"id": 115, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "초록 불빛 골짜기", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 9, "terrain": "유적", "subzones": 9, "terrain_subs": ["늪지"]}, {"id": 116, "faction": "elf", "biome": "toxic_wasteland", "biome_ko": "오염된 황무지", "name_ko": "잿빛 웅덩이", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "byeoldok", "zone_name_ko": "별독지대", "zone_seq": 10, "terrain": "늪지", "subzones": 8, "terrain_subs": ["유적"]}, {"id": 117, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "잿빛 벌판", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 1, "terrain": "유적", "subzones": 2, "terrain_subs": ["물가", "농경지"]}, {"id": 118, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "뼈 무덤 벌판", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 2, "terrain": "늪지", "subzones": 1, "terrain_subs": ["숲", "농경지"]}, {"id": 119, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "시든 나무 언덕", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 3, "terrain": "늪지", "subzones": 1, "terrain_subs": ["숲"]}, {"id": 120, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "검은 흙 벌판", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 4, "terrain": "숲", "subzones": 2, "terrain_subs": ["유적", "목초지"]}, {"id": 121, "faction": "undead", "biome": "rift_border", "biome_ko": "균열 접경", "name_ko": "균열 가장자리", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 1, "terrain": "유적", "subzones": 2, "terrain_subs": ["산악", "농경지"]}, {"id": 122, "faction": "undead", "biome": "rift_border", "biome_ko": "균열 접경", "name_ko": "붉은 빛 틈", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 2, "terrain": "유적", "subzones": 2, "terrain_subs": ["산악", "숲"]}, {"id": 123, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "어둠 고원", "hop": 1, "tier_suggestion": 1, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 1, "terrain": "숲", "subzones": 2, "terrain_subs": ["늪지", "산악"]}, {"id": 124, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "까마귀 벌판", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 5, "terrain": "늪지", "subzones": 3, "terrain_subs": ["숲", "광산"]}, {"id": 125, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "어둠 안개 골", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 6, "terrain": "숲", "subzones": 2, "terrain_subs": ["늪지"]}, {"id": 126, "faction": "undead", "biome": "rift_border", "biome_ko": "균열 접경", "name_ko": "갈라진 어둠 골", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 3, "terrain": "산악", "subzones": 3, "terrain_subs": ["숲", "유적"]}, {"id": 127, "faction": "undead", "biome": "volcanic_waste", "biome_ko": "화산 지대", "name_ko": "용암 개울", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 4, "terrain": "산악", "subzones": 3, "terrain_subs": ["유적", "광산"]}, {"id": 128, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "버려진 무덤가", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 7, "terrain": "늪지", "subzones": 2, "terrain_subs": ["숲", "광산"]}, {"id": 129, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "검은 바위 능선", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 2, "terrain": "숲", "subzones": 2, "terrain_subs": ["산악", "늪지"]}, {"id": 130, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "유령불 벌판", "hop": 2, "tier_suggestion": 2, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 8, "terrain": "숲", "subzones": 3, "terrain_subs": ["늪지", "유적"]}, {"id": 131, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "달 없는 언덕", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 3, "terrain": "광산", "subzones": 4, "terrain_subs": ["산악", "늪지"]}, {"id": 132, "faction": "undead", "biome": "rift_border", "biome_ko": "균열 접경", "name_ko": "불씨 흩날리는 땅", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 5, "terrain": "산악", "subzones": 5, "terrain_subs": ["숲", "광산"]}, {"id": 133, "faction": "undead", "biome": "volcanic_waste", "biome_ko": "화산 지대", "name_ko": "악마의 차원문", "hop": 4, "tier_suggestion": 4, "landmarks": [{"code": "demon_portal", "name_ko": "악마의 차원문", "x": 1279, "y": 315}], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 6, "terrain": "광산", "subzones": 7, "terrain_subs": ["산악"]}, {"id": 134, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "마른 가시 벌판", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 9, "terrain": "숲", "subzones": 5, "terrain_subs": ["유적"]}, {"id": 135, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "그림자 봉우리", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 4, "terrain": "산악", "subzones": 4, "terrain_subs": ["광산", "늪지"]}, {"id": 136, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "침묵의 들", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 10, "terrain": "유적", "subzones": 5, "terrain_subs": ["숲", "산악"]}, {"id": 137, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "창백한 언덕", "hop": 3, "tier_suggestion": 3, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 11, "terrain": "숲", "subzones": 5, "terrain_subs": ["유적"]}, {"id": 138, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "박쥐 벼랑", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 5, "terrain": "산악", "subzones": 7, "terrain_subs": ["숲", "광산"]}, {"id": 139, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "검은 가시 언덕", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 6, "terrain": "산악", "subzones": 6, "terrain_subs": ["광산"]}, {"id": 140, "faction": "undead", "biome": "rift_border", "biome_ko": "균열 접경", "name_ko": "검붉은 경계", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 7, "terrain": "산악", "subzones": 7, "terrain_subs": ["광산"]}, {"id": 141, "faction": "undead", "biome": "volcanic_waste", "biome_ko": "화산 지대", "name_ko": "불타는 화산", "hop": 4, "tier_suggestion": 4, "landmarks": [{"code": "volcano", "name_ko": "불타는 화산", "x": 1136, "y": 147}], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 8, "terrain": "산악", "subzones": 6, "terrain_subs": ["광산"]}, {"id": 142, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "저주받은 갈림길", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 12, "terrain": "유적", "subzones": 7, "terrain_subs": ["숲"]}, {"id": 143, "faction": "undead", "biome": "volcanic_waste", "biome_ko": "화산 지대", "name_ko": "검은 재 벌판", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "ragma", "zone_name_ko": "라그마 화산지대", "zone_seq": 9, "terrain": "광산", "subzones": 7, "terrain_subs": ["산악"]}, {"id": 144, "faction": "undead", "biome": "cursed_waste", "biome_ko": "저주받은 땅", "name_ko": "그림자 웅덩이", "hop": 4, "tier_suggestion": 4, "landmarks": [], "zone_id": "morgar", "zone_name_ko": "모르가르 저주지", "zone_seq": 13, "terrain": "유적", "subzones": 7, "terrain_subs": ["숲", "산악"]}, {"id": 145, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "안개 낀 고원", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 7, "terrain": "산악", "subzones": 8, "terrain_subs": ["유적", "광산"]}, {"id": 146, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "어두운 돌길", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 8, "terrain": "광산", "subzones": 8, "terrain_subs": ["산악"]}, {"id": 147, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "늙은 까마귀 바위", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 9, "terrain": "산악", "subzones": 8, "terrain_subs": []}, {"id": 148, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "언데드 성채", "hop": 5, "tier_suggestion": 6, "landmarks": [{"code": "undead_castle", "name_ko": "언데드 성채", "x": 1576, "y": 259}], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 10, "terrain": "산악", "subzones": 10, "terrain_subs": []}, {"id": 149, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "핏빛 이끼 바위", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 11, "terrain": "산악", "subzones": 8, "terrain_subs": ["광산"]}, {"id": 150, "faction": "undead", "biome": "dark_highlands", "biome_ko": "어둠 고원", "name_ko": "침묵 봉우리", "hop": 5, "tier_suggestion": 5, "landmarks": [], "zone_id": "belkar", "zone_name_ko": "벨카르 고원", "zone_seq": 12, "terrain": "산악", "subzones": 8, "terrain_subs": ["광산"]}]
start_regionadded2

Bundled data: assets/images/conquest/regionMetadata.json 7

RowChangeFieldBeforeAfter
generatoradded{"source": "conquest2 (GPT partition)", "adopted": "adoptConquest2.mjs"}
heightadded1400
mask_encodingadded{"region_id_r8": "pixel grayscale value = region ID (0..150)", "filtering": "Point/Nearest", "mipmap": false, "compression": "None / lossless", "srgb": false}
region_countadded150
regionsadded[{"id": 1, "center_px": [942, 779], "center_uv": [0.459961, 0.556429], "pixel_area": 14412, "neighbors": [2, 3, 4, 6, 7, 10, 13], "neighbor_border_px": {"2": 62, "3": 158, "4": 226, "6": 118, "7": 140, "10": 70, "13": 106}}, {"id": 2, "center_px": [1077, 671], "center_uv": [0.525879, 0.479286], "pixel_area": 14628, "neighbors": [1, 3, 4, 5, 9, 11, 117], "neighbor_border_px": {"1": 62, "3": 290, "4": 152, "5": 162, "9": 158, "11": 18, "117": 178}}, {"id": 3, "center_px": [1085, 799], "center_uv": [0.529785, 0.570714], "pixel_area": 12740, "neighbors": [1, 2, 5, 7, 8, 12], "neighbor_border_px": {"1": 158, "2": 290, "5": 180, "7": 116, "8": 4, "12": 176}}, {"id": 4, "center_px": [937, 663], "center_uv": [0.45752, 0.473571], "pixel_area": 12664, "neighbors": [1, 2, 6, 9, 14], "neighbor_border_px": {"1": 226, "2": 152, "6": 126, "9": 104, "14": 128}}, {"id": 5, "center_px": [1172, 717], "center_uv": [0.572266, 0.512143], "pixel_area": 12824, "neighbors": [2, 3, 8, 11], "neighbor_border_px": {"2": 162, "3": 180, "8": 246, "11": 172}}, {"id": 6, "center_px": [821, 702], "center_uv": [0.400879, 0.501429], "pixel_area": 12568, "neighbors": [1, 4, 10, 14, 15, 49], "neighbor_border_px": {"1": 118, "4": 126, "10": 150, "14": 84, "15": 86, "49": 124}}, {"id": 7, "center_px": [998, 879], "center_uv": [0.487305, 0.627857], "pixel_area": 12388, "neighbors": [1, 3, 12, 13, 16, 86], "neighbor_border_px": {"1": 140, "3": 116, "12": 104, "13": 162, "16": 80, "86": 102}}, {"id": 8, "center_px": [1257, 769], "center_uv": [0.61377, 0.549286], "pixel_area": 13256, "neighbors": [3, 5, 11, 12, 83, 84, 85, 118], "neighbor_border_px": {"3": 4, "5": 246, "11": 56, "12": 6, "83": 128, "84": 214, "85": 106, "118": 28}}, {"id": 9, "center_px": [1001, 580], "center_uv": [0.48877, 0.414286], "pixel_area": 12728, "neighbors": [2, 4, 14, 50, 117, 121], "neighbor_border_px": {"2": 158, "4": 104, "14": 82, "50": 176, "117": 138, "121": 62}}, {"id": 10, "center_px": [794, 807], "center_uv": [0.387695, 0.576429], "pixel_area": 13704, "neighbors": [1, 6, 13, 15, 17, 18], "neighbor_border_px": {"1": 70, "6": 150, "13": 194, "15": 124, "17": 126, "18": 56}}, {"id": 11, "center_px": [1225, 613], "center_uv": [0.598145, 0.437857], "pixel_area": 12856, "neighbors": [2, 5, 8, 117, 118, 120], "neighbor_border_px": {"2": 18, "5": 172, "8": 56, "117": 144, "118": 238, "120": 100}}, {"id": 12, "center_px": [1126, 895], "center_uv": [0.549805, 0.639286], "pixel_area": 14364, "neighbors": [3, 7, 8, 83, 86, 88, 91], "neighbor_border_px": {"3": 176, "7": 104, "8": 6, "83": 236, "86": 142, "88": 46, "91": 50}}, {"id": 13, "center_px": [875, 886], "center_uv": [0.427246, 0.632857], "pixel_area": 15172, "neighbors": [1, 7, 10, 16, 18, 20], "neighbor_border_px": {"1": 106, "7": 162, "10": 194, "16": 158, "18": 176, "20": 24}}, {"id": 14, "center_px": [865, 575], "center_uv": [0.422363, 0.410714], "pixel_area": 14060, "neighbors": [4, 6, 9, 49, 50, 52, 54], "neighbor_border_px": {"4": 128, "6": 84, "9": 82, "49": 160, "50": 102, "52": 80, "54": 68}}, {"id": 15, "center_px": [701, 737], "center_uv": [0.342285, 0.526429], "pixel_area": 13376, "neighbors": [6, 10, 17, 19, 49, 51], "neighbor_border_px": {"6": 86, "10": 124, "17": 152, "19": 148, "49": 84, "51": 138}}, {"id": 16, "center_px": [938, 981], "center_uv": [0.458008, 0.700714], "pixel_area": 12044, "neighbors": [7, 13, 20, 24, 86], "neighbor_border_px": {"7": 80, "13": 158, "20": 198, "24": 94, "86": 170}}, {"id": 17, "center_px": [679, 852], "center_uv": [0.331543, 0.608571], "pixel_area": 14920, "neighbors": [10, 15, 18, 19, 21, 22], "neighbor_border_px": {"10": 126, "15": 152, "18": 180, "19": 74, "21": 282, "22": 42}}, {"id": 18, "center_px": [749, 955], "center_uv": [0.365723, 0.682143], "pixel_area": 15292, "neighbors": [10, 13, 17, 20, 22, 26], "neighbor_border_px": {"10": 56, "13": 176, "17": 180, "20": 124, "22": 152, "26": 84}}, {"id": 19, "center_px": [566, 760], "center_uv": [0.276367, 0.542857], "pixel_area": 15280, "neighbors": [15, 17, 21, 23, 25, 51, 55], "neighbor_border_px": {"15": 148, "17": 74, "21": 110, "23": 134, "25": 78, "51": 108, "55": 136}}, {"id": 20, "center_px": [851, 1051], "center_uv": [0.415527, 0.750714], "pixel_area": 13236, "neighbors": [13, 16, 18, 24, 26, 28], "neighbor_border_px": {"13": 24, "16": 198, "18": 124, "24": 110, "26": 176, "28": 72}}, {"id": 21, "center_px": [573, 899], "center_uv": [0.279785, 0.642143], "pixel_area": 12296, "neighbors": [17, 19, 22, 23, 27], "neighbor_border_px": {"17": 282, "19": 110, "22": 112, "23": 174, "27": 146}}, {"id": 22, "center_px": [636, 1005], "center_uv": [0.310547, 0.717857], "pixel_area": 16664, "neighbors": [17, 18, 21, 26, 27, 31, 32], "neighbor_border_px": {"17": 42, "18": 152, "21": 112, "26": 134, "27": 212, "31": 106, "32": 26}}, {"id": 23, "center_px": [465, 840], "center_uv": [0.227051, 0.6], "pixel_area": 15076, "neighbors": [19, 21, 25, 27, 29, 30], "neighbor_border_px": {"19": 134, "21": 174, "25": 114, "27": 58, "29": 104, "30": 236}}, {"id": 24, "center_px": [946, 1132], "center_uv": [0.461914, 0.808571], "pixel_area": 15528, "neighbors": [16, 20, 28, 34, 38, 86, 94], "neighbor_border_px": {"16": 94, "20": 110, "28": 174, "34": 128, "38": 30, "86": 38, "94": 186}}, {"id": 25, "center_px": [423, 732], "center_uv": [0.206543, 0.522857], "pixel_area": 14472, "neighbors": [19, 23, 29, 55, 59, 65], "neighbor_border_px": {"19": 78, "23": 114, "29": 170, "55": 164, "59": 118, "65": 104}}, {"id": 26, "center_px": [743, 1082], "center_uv": [0.362793, 0.772857], "pixel_area": 14496, "neighbors": [18, 20, 22, 28, 31, 33], "neighbor_border_px": {"18": 84, "20": 176, "22": 134, "28": 142, "31": 96, "33": 144}}, {"id": 27, "center_px": [501, 982], "center_uv": [0.244629, 0.701429], "pixel_area": 15060, "neighbors": [21, 22, 23, 30, 32, 35], "neighbor_border_px": {"21": 146, "22": 212, "23": 58, "30": 120, "32": 144, "35": 136}}, {"id": 28, "center_px": [833, 1171], "center_uv": [0.406738, 0.836429], "pixel_area": 13308, "neighbors": [20, 24, 26, 33, 38, 39], "neighbor_border_px": {"20": 72, "24": 174, "26": 142, "33": 68, "38": 142, "39": 106}}, {"id": 29, "center_px": [324, 788], "center_uv": [0.158203, 0.562857], "pixel_area": 14208, "neighbors": [23, 25, 30, 36, 65, 68], "neighbor_border_px": {"23": 104, "25": 170, "30": 74, "36": 164, "65": 74, "68": 138}}, {"id": 30, "center_px": [368, 927], "center_uv": [0.179688, 0.662143], "pixel_area": 15428, "neighbors": [23, 27, 29, 35, 36, 37], "neighbor_border_px": {"23": 236, "27": 120, "29": 74, "35": 84, "36": 82, "37": 176}}, {"id": 31, "center_px": [606, 1131], "center_uv": [0.295898, 0.807857], "pixel_area": 14060, "neighbors": [22, 26, 32, 33, 40], "neighbor_border_px": {"22": 106, "26": 96, "32": 192, "33": 268, "40": 120}}, {"id": 32, "center_px": [499, 1097], "center_uv": [0.243652, 0.783571], "pixel_area": 12248, "neighbors": [22, 27, 31, 35, 40, 41], "neighbor_border_px": {"22": 26, "27": 144, "31": 192, "35": 172, "40": 136, "41": 70}}, {"id": 33, "center_px": [705, 1191], "center_uv": [0.344238, 0.850714], "pixel_area": 14096, "neighbors": [26, 28, 31, 39], "neighbor_border_px": {"26": 144, "28": 68, "31": 268, "39": 144}}, {"id": 34, "center_px": [1015, 1232], "center_uv": [0.495605, 0.88], "pixel_area": 15648, "neighbors": [24, 38, 94, 101, 110], "neighbor_border_px": {"24": 128, "38": 228, "94": 62, "101": 148, "110": 62}}, {"id": 35, "center_px": [393, 1068], "center_uv": [0.191895, 0.762857], "pixel_area": 12124, "neighbors": [27, 30, 32, 37, 41, 43], "neighbor_border_px": {"27": 136, "30": 84, "32": 172, "37": 194, "41": 120, "43": 78}}, {"id": 36, "center_px": [252, 886], "center_uv": [0.123047, 0.632857], "pixel_area": 16772, "neighbors": [29, 30, 37, 42, 68], "neighbor_border_px": {"29": 164, "30": 82, "37": 90, "42": 90, "68": 146}}, {"id": 37, "center_px": [293, 1030], "center_uv": [0.143066, 0.735714], "pixel_area": 13288, "neighbors": [30, 35, 36, 42, 43, 44], "neighbor_border_px": {"30": 176, "35": 194, "36": 90, "42": 274, "43": 126, "44": 36}}, {"id": 38, "center_px": [904, 1273], "center_uv": [0.441406, 0.909286], "pixel_area": 13260, "neighbors": [24, 28, 34, 39], "neighbor_border_px": {"24": 30, "28": 142, "34": 228, "39": 232}}, {"id": 39, "center_px": [784, 1274], "center_uv": [0.382813, 0.91], "pixel_area": 12908, "neighbors": [28, 33, 38], "neighbor_border_px": {"28": 106, "33": 144, "38": 232}}, {"id": 40, "center_px": [484, 1191], "center_uv": [0.236328, 0.850714], "pixel_area": 10324, "neighbors": [31, 32, 41, 45], "neighbor_border_px": {"31": 120, "32": 136, "41": 176, "45": 90}}, {"id": 41, "center_px": [398, 1176], "center_uv": [0.194336, 0.84], "pixel_area": 11344, "neighbors": [32, 35, 40, 43, 45, 47], "neighbor_border_px": {"32": 70, "35": 120, "40": 176, "43": 192, "45": 182, "47": 16}}, {"id": 42, "center_px": [185, 1017], "center_uv": [0.090332, 0.726429], "pixel_area": 12104, "neighbors": [36, 37, 44, 46], "neighbor_border_px": {"36": 90, "37": 274, "44": 86, "46": 106}}, {"id": 43, "center_px": [297, 1136], "center_uv": [0.14502, 0.811429], "pixel_area": 12412, "neighbors": [35, 37, 41, 44, 47, 48], "neighbor_border_px": {"35": 78, "37": 126, "41": 192, "44": 208, "47": 126, "48": 62}}, {"id": 44, "center_px": [200, 1121], "center_uv": [0.097656, 0.800714], "pixel_area": 10224, "neighbors": [37, 42, 43, 46, 48], "neighbor_border_px": {"37": 36, "42": 86, "43": 208, "46": 158, "48": 212}}, {"id": 45, "center_px": [364, 1264], "center_uv": [0.177734, 0.902857], "pixel_area": 10624, "neighbors": [40, 41, 47], "neighbor_border_px": {"40": 90, "41": 182, "47": 218}}, {"id": 46, "center_px": [104, 1095], "center_uv": [0.050781, 0.782143], "pixel_area": 11660, "neighbors": [42, 44, 48], "neighbor_border_px": {"42": 106, "44": 158, "48": 108}}, {"id": 47, "center_px": [264, 1270], "center_uv": [0.128906, 0.907143], "pixel_area": 12824, "neighbors": [41, 43, 45, 48], "neighbor_border_px": {"41": 16, "43": 126, "45": 218, "48": 198}}, {"id": 48, "center_px": [178, 1216], "center_uv": [0.086914, 0.868571], "pixel_area": 12380, "neighbors": [43, 44, 46, 47], "neighbor_border_px": {"43": 62, "44": 212, "46": 108, "47": 198}}, {"id": 49, "center_px": [748, 606], "center_uv": [0.365234, 0.432857], "pixel_area": 13660, "neighbors": [6, 14, 15, 51, 52, 53], "neighbor_border_px": {"6": 124, "14": 160, "15": 84, "51": 166, "52": 88, "53": 114}}, {"id": 50, "center_px": [954, 488], "center_uv": [0.46582, 0.348571], "pixel_area": 11544, "neighbors": [9, 14, 54, 57, 121], "neighbor_border_px": {"9": 176, "14": 102, "54": 224, "57": 62, "121": 192}}, {"id": 51, "center_px": [628, 648], "center_uv": [0.306641, 0.462857], "pixel_area": 13324, "neighbors": [15, 19, 49, 53, 55, 56], "neighbor_border_px": {"15": 138, "19": 108, "49": 166, "53": 120, "55": 152, "56": 68}}, {"id": 52, "center_px": [765, 490], "center_uv": [0.373535, 0.35], "pixel_area": 13484, "neighbors": [14, 49, 53, 54, 58, 60], "neighbor_border_px": {"14": 80, "49": 88, "53": 98, "54": 200, "58": 122, "60": 84}}, {"id": 53, "center_px": [656, 540], "center_uv": [0.320313, 0.385714], "pixel_area": 12840, "neighbors": [49, 51, 52, 56, 58], "neighbor_border_px": {"49": 114, "51": 120, "52": 98, "56": 170, "58": 194}}, {"id": 54, "center_px": [860, 437], "center_uv": [0.419922, 0.312143], "pixel_area": 12888, "neighbors": [14, 50, 52, 57, 60, 61], "neighbor_border_px": {"14": 68, "50": 224, "52": 200, "57": 102, "60": 120, "61": 58}}, {"id": 55, "center_px": [514, 649], "center_uv": [0.250977, 0.463571], "pixel_area": 12056, "neighbors": [19, 25, 51, 56, 59], "neighbor_border_px": {"19": 136, "25": 164, "51": 152, "56": 124, "59": 168}}, {"id": 56, "center_px": [539, 542], "center_uv": [0.263184, 0.387143], "pixel_area": 14452, "neighbors": [51, 53, 55, 58, 59, 62, 66], "neighbor_border_px": {"51": 68, "53": 170, "55": 124, "58": 46, "59": 70, "62": 278, "66": 20}}, {"id": 57, "center_px": [980, 358], "center_uv": [0.478516, 0.255714], "pixel_area": 12960, "neighbors": [50, 54, 61, 63, 121], "neighbor_border_px": {"50": 62, "54": 102, "61": 198, "63": 190, "121": 156}}, {"id": 58, "center_px": [654, 429], "center_uv": [0.319336, 0.306429], "pixel_area": 13512, "neighbors": [52, 53, 56, 60, 64, 66], "neighbor_border_px": {"52": 122, "53": 194, "56": 46, "60": 46, "64": 160, "66": 196}}, {"id": 59, "center_px": [408, 608], "center_uv": [0.199219, 0.434286], "pixel_area": 13012, "neighbors": [25, 55, 56, 62, 65, 67], "neighbor_border_px": {"25": 118, "55": 168, "56": 70, "62": 60, "65": 114, "67": 194}}, {"id": 60, "center_px": [793, 347], "center_uv": [0.387207, 0.247857], "pixel_area": 14764, "neighbors": [52, 54, 58, 61, 64, 73, 76], "neighbor_border_px": {"52": 84, "54": 120, "58": 46, "61": 230, "64": 234, "73": 104, "76": 34}}, {"id": 61, "center_px": [903, 289], "center_uv": [0.440918, 0.206429], "pixel_area": 12960, "neighbors": [54, 57, 60, 63, 73, 74], "neighbor_border_px": {"54": 58, "57": 198, "60": 230, "63": 54, "73": 134, "74": 138}}, {"id": 62, "center_px": [461, 460], "center_uv": [0.225098, 0.328571], "pixel_area": 14404, "neighbors": [56, 59, 66, 67, 69, 71], "neighbor_border_px": {"56": 278, "59": 60, "66": 158, "67": 170, "69": 154, "71": 92}}, {"id": 63, "center_px": [1051, 277], "center_uv": [0.513184, 0.197857], "pixel_area": 14748, "neighbors": [57, 61, 74, 75, 121, 127, 141], "neighbor_border_px": {"57": 190, "61": 54, "74": 58, "75": 174, "121": 8, "127": 244, "141": 136}}, {"id": 64, "center_px": [691, 320], "center_uv": [0.337402, 0.228571], "pixel_area": 11944, "neighbors": [58, 60, 66, 72, 76], "neighbor_border_px": {"58": 160, "60": 234, "66": 140, "72": 212, "76": 38}}, {"id": 65, "center_px": [305, 645], "center_uv": [0.148926, 0.460714], "pixel_area": 13584, "neighbors": [25, 29, 59, 67, 68, 70], "neighbor_border_px": {"25": 104, "29": 74, "59": 114, "67": 128, "68": 114, "70": 254}}, {"id": 66, "center_px": [562, 354], "center_uv": [0.274414, 0.252857], "pixel_area": 14804, "neighbors": [56, 58, 62, 64, 69, 72, 78], "neighbor_border_px": {"56": 20, "58": 196, "62": 158, "64": 140, "69": 192, "72": 20, "78": 114}}, {"id": 67, "center_px": [329, 521], "center_uv": [0.160645, 0.372143], "pixel_area": 12980, "neighbors": [59, 62, 65, 70, 71, 77], "neighbor_border_px": {"59": 194, "62": 170, "65": 128, "70": 32, "71": 144, "77": 148}}, {"id": 68, "center_px": [221, 731], "center_uv": [0.10791, 0.522143], "pixel_area": 15140, "neighbors": [29, 36, 65, 70], "neighbor_border_px": {"29": 138, "36": 146, "65": 114, "70": 112}}, {"id": 69, "center_px": [439, 349], "center_uv": [0.214355, 0.249286], "pixel_area": 13304, "neighbors": [62, 66, 71, 78, 79, 80], "neighbor_border_px": {"62": 154, "66": 192, "71": 100, "78": 44, "79": 164, "80": 118}}, {"id": 70, "center_px": [202, 629], "center_uv": [0.098633, 0.449286], "pixel_area": 12904, "neighbors": [65, 67, 68, 77], "neighbor_border_px": {"65": 254, "67": 32, "68": 112, "77": 116}}, {"id": 71, "center_px": [334, 419], "center_uv": [0.163086, 0.299286], "pixel_area": 11204, "neighbors": [62, 67, 69, 77, 79, 81], "neighbor_border_px": {"62": 92, "67": 144, "69": 100, "77": 126, "79": 112, "81": 122}}, {"id": 72, "center_px": [658, 233], "center_uv": [0.321289, 0.166429], "pixel_area": 9876, "neighbors": [64, 66, 76, 78, 82], "neighbor_border_px": {"64": 212, "66": 20, "76": 222, "78": 162, "82": 148}}, {"id": 73, "center_px": [839, 195], "center_uv": [0.409668, 0.139286], "pixel_area": 12104, "neighbors": [60, 61, 74, 76], "neighbor_border_px": {"60": 104, "61": 134, "74": 194, "76": 292}}, {"id": 74, "center_px": [932, 188], "center_uv": [0.455078, 0.134286], "pixel_area": 14012, "neighbors": [61, 63, 73, 75], "neighbor_border_px": {"61": 138, "63": 58, "73": 194, "75": 270}}, {"id": 75, "center_px": [1037, 171], "center_uv": [0.506348, 0.122143], "pixel_area": 13196, "neighbors": [63, 74, 141], "neighbor_border_px": {"63": 174, "74": 270, "141": 180}}, {"id": 76, "center_px": [744, 192], "center_uv": [0.363281, 0.137143], "pixel_area": 12220, "neighbors": [60, 64, 72, 73, 82], "neighbor_border_px": {"60": 34, "64": 38, "72": 222, "73": 292, "82": 134}}, {"id": 77, "center_px": [249, 472], "center_uv": [0.121582, 0.337143], "pixel_area": 12992, "neighbors": [67, 70, 71, 81], "neighbor_border_px": {"67": 148, "70": 116, "71": 126, "81": 178}}, {"id": 78, "center_px": [536, 227], "center_uv": [0.261719, 0.162143], "pixel_area": 14024, "neighbors": [66, 69, 72, 80, 82], "neighbor_border_px": {"66": 114, "69": 44, "72": 162, "80": 232, "82": 120}}, {"id": 79, "center_px": [342, 299], "center_uv": [0.166992, 0.213571], "pixel_area": 11604, "neighbors": [69, 71, 80, 81], "neighbor_border_px": {"69": 164, "71": 112, "80": 160, "81": 214}}, {"id": 80, "center_px": [436, 247], "center_uv": [0.212891, 0.176429], "pixel_area": 11032, "neighbors": [69, 78, 79], "neighbor_border_px": {"69": 118, "78": 232, "79": 160}}, {"id": 81, "center_px": [255, 355], "center_uv": [0.124512, 0.253571], "pixel_area": 10532, "neighbors": [71, 77, 79], "neighbor_border_px": {"71": 122, "77": 178, "79": 214}}, {"id": 82, "center_px": [656, 149], "center_uv": [0.320313, 0.106429], "pixel_area": 10612, "neighbors": [72, 76, 78], "neighbor_border_px": {"72": 148, "76": 134, "78": 120}}, {"id": 83, "center_px": [1230, 878], "center_uv": [0.600586, 0.627143], "pixel_area": 12060, "neighbors": [8, 12, 85, 88, 90], "neighbor_border_px": {"8": 128, "12": 236, "85": 192, "88": 160, "90": 24}}, {"id": 84, "center_px": [1360, 736], "center_uv": [0.664063, 0.525714], "pixel_area": 12160, "neighbors": [8, 85, 87, 89, 118, 119], "neighbor_border_px": {"8": 214, "85": 42, "87": 114, "89": 90, "118": 68, "119": 164}}, {"id": 85, "center_px": [1320, 853], "center_uv": [0.644531, 0.609286], "pixel_area": 10004, "neighbors": [8, 83, 84, 87, 90], "neighbor_border_px": {"8": 106, "83": 192, "84": 42, "87": 150, "90": 118}}, {"id": 86, "center_px": [1047, 984], "center_uv": [0.51123, 0.702857], "pixel_area": 13776, "neighbors": [7, 12, 16, 24, 91, 94], "neighbor_border_px": {"7": 102, "12": 142, "16": 170, "24": 38, "91": 128, "94": 108}}, {"id": 87, "center_px": [1418, 828], "center_uv": [0.692383, 0.591429], "pixel_area": 11368, "neighbors": [84, 85, 89, 90, 92, 93], "neighbor_border_px": {"84": 114, "85": 150, "89": 94, "90": 60, "92": 102, "93": 100}}, {"id": 88, "center_px": [1248, 996], "center_uv": [0.609375, 0.711429], "pixel_area": 13792, "neighbors": [12, 83, 90, 91, 96, 97], "neighbor_border_px": {"12": 46, "83": 160, "90": 174, "91": 174, "96": 148, "97": 2}}, {"id": 89, "center_px": [1495, 748], "center_uv": [0.72998, 0.534286], "pixel_area": 11864, "neighbors": [84, 87, 92, 95, 119, 125], "neighbor_border_px": {"84": 90, "87": 94, "92": 142, "95": 90, "119": 118, "125": 182}}, {"id": 90, "center_px": [1372, 958], "center_uv": [0.669922, 0.684286], "pixel_area": 14140, "neighbors": [83, 85, 87, 88, 93, 97], "neighbor_border_px": {"83": 24, "85": 118, "87": 60, "88": 174, "93": 174, "97": 190}}, {"id": 91, "center_px": [1144, 1043], "center_uv": [0.558594, 0.745], "pixel_area": 14204, "neighbors": [12, 86, 88, 94, 96, 101], "neighbor_border_px": {"12": 50, "86": 128, "88": 174, "94": 132, "96": 130, "101": 122}}, {"id": 92, "center_px": [1526, 844], "center_uv": [0.745117, 0.602857], "pixel_area": 10920, "neighbors": [87, 89, 93, 95, 99], "neighbor_border_px": {"87": 102, "89": 142, "93": 146, "95": 200, "99": 106}}, {"id": 93, "center_px": [1481, 938], "center_uv": [0.723145, 0.67], "pixel_area": 12256, "neighbors": [87, 90, 92, 97, 99, 100], "neighbor_border_px": {"87": 100, "90": 174, "92": 146, "97": 4, "99": 104, "100": 160}}, {"id": 94, "center_px": [1056, 1109], "center_uv": [0.515625, 0.792143], "pixel_area": 12060, "neighbors": [24, 34, 86, 91, 101], "neighbor_border_px": {"24": 186, "34": 62, "86": 108, "91": 132, "101": 140}}, {"id": 95, "center_px": [1623, 807], "center_uv": [0.79248, 0.576429], "pixel_area": 13368, "neighbors": [89, 92, 98, 99, 102, 125], "neighbor_border_px": {"89": 90, "92": 200, "98": 188, "99": 66, "102": 208, "125": 36}}, {"id": 96, "center_px": [1283, 1106], "center_uv": [0.626465, 0.79], "pixel_area": 13752, "neighbors": [88, 91, 97, 101, 103, 105], "neighbor_border_px": {"88": 148, "91": 130, "97": 130, "101": 10, "103": 190, "105": 112}}, {"id": 97, "center_px": [1388, 1067], "center_uv": [0.677734, 0.762143], "pixel_area": 12616, "neighbors": [88, 90, 93, 96, 100, 104, 105], "neighbor_border_px": {"88": 2, "90": 190, "93": 4, "96": 130, "100": 116, "104": 160, "105": 66}}, {"id": 98, "center_px": [1691, 721], "center_uv": [0.825684, 0.515], "pixel_area": 13704, "neighbors": [95, 102, 106, 125, 130, 134, 137], "neighbor_border_px": {"95": 188, "102": 70, "106": 42, "125": 86, "130": 146, "134": 184, "137": 8}}, {"id": 99, "center_px": [1621, 941], "center_uv": [0.791504, 0.672143], "pixel_area": 15188, "neighbors": [92, 93, 95, 100, 102, 107, 108], "neighbor_border_px": {"92": 106, "93": 104, "95": 66, "100": 144, "102": 142, "107": 140, "108": 94}}, {"id": 100, "center_px": [1524, 1038], "center_uv": [0.744141, 0.741429], "pixel_area": 13472, "neighbors": [93, 97, 99, 104, 107, 109], "neighbor_border_px": {"93": 160, "97": 116, "99": 144, "104": 122, "107": 114, "109": 108}}, {"id": 101, "center_px": [1124, 1194], "center_uv": [0.548828, 0.852857], "pixel_area": 13848, "neighbors": [34, 91, 94, 96, 103, 110], "neighbor_border_px": {"34": 148, "91": 122, "94": 140, "96": 10, "103": 184, "110": 116}}, {"id": 102, "center_px": [1722, 870], "center_uv": [0.84082, 0.621429], "pixel_area": 14524, "neighbors": [95, 98, 99, 106, 108], "neighbor_border_px": {"95": 208, "98": 70, "99": 142, "106": 254, "108": 226}}, {"id": 103, "center_px": [1245, 1213], "center_uv": [0.60791, 0.866429], "pixel_area": 12240, "neighbors": [96, 101, 105, 110, 111], "neighbor_border_px": {"96": 190, "101": 184, "105": 96, "110": 144, "111": 130}}, {"id": 104, "center_px": [1467, 1136], "center_uv": [0.716309, 0.811429], "pixel_area": 11228, "neighbors": [97, 100, 105, 109, 112], "neighbor_border_px": {"97": 160, "100": 122, "105": 138, "109": 182, "112": 98}}, {"id": 105, "center_px": [1367, 1188], "center_uv": [0.66748, 0.848571], "pixel_area": 13852, "neighbors": [96, 97, 103, 104, 111, 112], "neighbor_border_px": {"96": 112, "97": 66, "103": 96, "104": 138, "111": 170, "112": 114}}, {"id": 106, "center_px": [1817, 813], "center_uv": [0.887207, 0.580714], "pixel_area": 12056, "neighbors": [98, 102, 108, 134, 142], "neighbor_border_px": {"98": 42, "102": 254, "108": 34, "134": 144, "142": 30}}, {"id": 107, "center_px": [1657, 1057], "center_uv": [0.809082, 0.755], "pixel_area": 14936, "neighbors": [99, 100, 108, 109, 113, 116], "neighbor_border_px": {"99": 140, "100": 114, "108": 190, "109": 132, "113": 166, "116": 50}}, {"id": 108, "center_px": [1763, 979], "center_uv": [0.86084, 0.699286], "pixel_area": 16800, "neighbors": [99, 102, 106, 107, 115, 116], "neighbor_border_px": {"99": 94, "102": 226, "106": 34, "107": 190, "115": 154, "116": 70}}, {"id": 109, "center_px": [1571, 1149], "center_uv": [0.76709, 0.820714], "pixel_area": 12924, "neighbors": [100, 104, 107, 112, 113, 114], "neighbor_border_px": {"100": 108, "104": 182, "107": 132, "112": 82, "113": 66, "114": 158}}, {"id": 110, "center_px": [1176, 1287], "center_uv": [0.574219, 0.919286], "pixel_area": 13428, "neighbors": [34, 101, 103, 111], "neighbor_border_px": {"34": 62, "101": 116, "103": 144, "111": 124}}, {"id": 111, "center_px": [1320, 1293], "center_uv": [0.644531, 0.923571], "pixel_area": 14328, "neighbors": [103, 105, 110, 112], "neighbor_border_px": {"103": 130, "105": 170, "110": 124, "112": 54}}, {"id": 112, "center_px": [1500, 1260], "center_uv": [0.732422, 0.9], "pixel_area": 15140, "neighbors": [104, 105, 109, 111, 114], "neighbor_border_px": {"104": 98, "105": 114, "109": 82, "111": 54, "114": 154}}, {"id": 113, "center_px": [1701, 1165], "center_uv": [0.830566, 0.832143], "pixel_area": 13876, "neighbors": [107, 109, 114, 116], "neighbor_border_px": {"107": 166, "109": 66, "114": 184, "116": 218}}, {"id": 114, "center_px": [1624, 1244], "center_uv": [0.792969, 0.888571], "pixel_area": 12308, "neighbors": [109, 112, 113], "neighbor_border_px": {"109": 158, "112": 154, "113": 184}}, {"id": 115, "center_px": [1884, 1068], "center_uv": [0.919922, 0.762857], "pixel_area": 12984, "neighbors": [108, 116], "neighbor_border_px": {"108": 154, "116": 352}}, {"id": 116, "center_px": [1802, 1127], "center_uv": [0.879883, 0.805], "pixel_area": 14784, "neighbors": [107, 108, 113, 115], "neighbor_border_px": {"107": 50, "108": 70, "113": 218, "115": 352}}, {"id": 117, "center_px": [1122, 558], "center_uv": [0.547852, 0.398571], "pixel_area": 13840, "neighbors": [2, 9, 11, 120, 121, 122], "neighbor_border_px": {"2": 178, "9": 138, "11": 144, "120": 54, "121": 70, "122": 116}}, {"id": 118, "center_px": [1332, 591], "center_uv": [0.650391, 0.422143], "pixel_area": 13360, "neighbors": [8, 11, 84, 119, 120, 123, 124], "neighbor_border_px": {"8": 28, "11": 238, "84": 68, "119": 142, "120": 84, "123": 118, "124": 86}}, {"id": 119, "center_px": [1433, 656], "center_uv": [0.699707, 0.468571], "pixel_area": 11500, "neighbors": [84, 89, 118, 124, 125], "neighbor_border_px": {"84": 164, "89": 118, "118": 142, "124": 136, "125": 96}}, {"id": 120, "center_px": [1248, 500], "center_uv": [0.609375, 0.357143], "pixel_area": 13168, "neighbors": [11, 117, 118, 122, 123, 126], "neighbor_border_px": {"11": 100, "117": 54, "118": 84, "122": 146, "123": 232, "126": 112}}, {"id": 121, "center_px": [1048, 440], "center_uv": [0.511719, 0.314286], "pixel_area": 13100, "neighbors": [9, 50, 57, 63, 117, 122, 127], "neighbor_border_px": {"9": 62, "50": 192, "57": 156, "63": 8, "117": 70, "122": 232, "127": 112}}, {"id": 122, "center_px": [1158, 449], "center_uv": [0.56543, 0.320714], "pixel_area": 11648, "neighbors": [117, 120, 121, 126, 127], "neighbor_border_px": {"117": 116, "120": 146, "121": 232, "126": 110, "127": 104}}, {"id": 123, "center_px": [1365, 479], "center_uv": [0.666504, 0.342143], "pixel_area": 14404, "neighbors": [118, 120, 124, 126, 129, 132], "neighbor_border_px": {"118": 118, "120": 232, "124": 182, "126": 74, "129": 186, "132": 88}}, {"id": 124, "center_px": [1468, 550], "center_uv": [0.716797, 0.392857], "pixel_area": 13584, "neighbors": [118, 119, 123, 125, 128, 129, 131], "neighbor_border_px": {"118": 86, "119": 136, "123": 182, "125": 82, "128": 108, "129": 64, "131": 94}}, {"id": 125, "center_px": [1558, 660], "center_uv": [0.760742, 0.471429], "pixel_area": 13916, "neighbors": [89, 95, 98, 119, 124, 128, 130], "neighbor_border_px": {"89": 182, "95": 36, "98": 86, "119": 96, "124": 82, "128": 126, "130": 88}}, {"id": 126, "center_px": [1275, 387], "center_uv": [0.622559, 0.276429], "pixel_area": 12444, "neighbors": [120, 122, 123, 127, 132, 133], "neighbor_border_px": {"120": 112, "122": 110, "123": 74, "127": 102, "132": 152, "133": 166}}, {"id": 127, "center_px": [1153, 337], "center_uv": [0.562988, 0.240714], "pixel_area": 14064, "neighbors": [63, 121, 122, 126, 133, 141], "neighbor_border_px": {"63": 244, "121": 112, "122": 104, "126": 102, "133": 166, "141": 44}}, {"id": 128, "center_px": [1587, 555], "center_uv": [0.774902, 0.396429], "pixel_area": 12000, "neighbors": [124, 125, 130, 131, 135, 136], "neighbor_border_px": {"124": 108, "125": 126, "130": 164, "131": 130, "135": 106, "136": 2}}, {"id": 129, "center_px": [1459, 414], "center_uv": [0.712402, 0.295714], "pixel_area": 10916, "neighbors": [123, 124, 131, 132, 138], "neighbor_border_px": {"123": 186, "124": 64, "131": 156, "132": 126, "138": 148}}, {"id": 130, "center_px": [1679, 613], "center_uv": [0.819824, 0.437857], "pixel_area": 12200, "neighbors": [98, 125, 128, 136, 137], "neighbor_border_px": {"98": 146, "125": 88, "128": 164, "136": 144, "137": 150}}, {"id": 131, "center_px": [1557, 453], "center_uv": [0.760254, 0.323571], "pixel_area": 12016, "neighbors": [124, 128, 129, 135, 138, 139], "neighbor_border_px": {"124": 94, "128": 130, "129": 156, "135": 94, "138": 54, "139": 104}}, {"id": 132, "center_px": [1375, 336], "center_uv": [0.671387, 0.24], "pixel_area": 14276, "neighbors": [123, 126, 129, 133, 138, 140, 143], "neighbor_border_px": {"123": 88, "126": 152, "129": 126, "133": 122, "138": 82, "140": 136, "143": 30}}, {"id": 133, "center_px": [1251, 274], "center_uv": [0.61084, 0.195714], "pixel_area": 12560, "neighbors": [126, 127, 132, 141, 143], "neighbor_border_px": {"126": 166, "127": 166, "132": 122, "141": 120, "143": 246}}, {"id": 134, "center_px": [1798, 716], "center_uv": [0.87793, 0.511429], "pixel_area": 11476, "neighbors": [98, 106, 137, 142], "neighbor_border_px": {"98": 184, "106": 144, "137": 132, "142": 192}}, {"id": 135, "center_px": [1666, 454], "center_uv": [0.813477, 0.324286], "pixel_area": 12588, "neighbors": [128, 131, 136, 139, 145, 146], "neighbor_border_px": {"128": 106, "131": 94, "136": 160, "139": 136, "145": 64, "146": 92}}, {"id": 136, "center_px": [1747, 523], "center_uv": [0.853027, 0.373571], "pixel_area": 10520, "neighbors": [128, 130, 135, 137, 144, 145], "neighbor_border_px": {"128": 2, "130": 144, "135": 160, "137": 110, "144": 66, "145": 118}}, {"id": 137, "center_px": [1796, 611], "center_uv": [0.876953, 0.436429], "pixel_area": 11592, "neighbors": [98, 130, 134, 136, 142, 144], "neighbor_border_px": {"98": 8, "130": 150, "134": 132, "136": 110, "142": 136, "144": 132}}, {"id": 138, "center_px": [1519, 320], "center_uv": [0.741699, 0.228571], "pixel_area": 14096, "neighbors": [129, 131, 132, 139, 140, 147, 148], "neighbor_border_px": {"129": 148, "131": 54, "132": 82, "139": 120, "140": 84, "147": 100, "148": 100}}, {"id": 139, "center_px": [1624, 356], "center_uv": [0.792969, 0.254286], "pixel_area": 11828, "neighbors": [131, 135, 138, 146, 148, 149], "neighbor_border_px": {"131": 104, "135": 136, "138": 120, "146": 108, "148": 144, "149": 56}}, {"id": 140, "center_px": [1406, 233], "center_uv": [0.686523, 0.166429], "pixel_area": 12648, "neighbors": [132, 138, 143, 147], "neighbor_border_px": {"132": 136, "138": 84, "143": 176, "147": 178}}, {"id": 141, "center_px": [1164, 177], "center_uv": [0.568359, 0.126429], "pixel_area": 14748, "neighbors": [63, 75, 127, 133, 143], "neighbor_border_px": {"63": 136, "75": 180, "127": 44, "133": 120, "143": 130}}, {"id": 142, "center_px": [1899, 687], "center_uv": [0.927246, 0.490714], "pixel_area": 11916, "neighbors": [106, 134, 137, 144], "neighbor_border_px": {"106": 30, "134": 192, "137": 136, "144": 8}}, {"id": 143, "center_px": [1305, 186], "center_uv": [0.637207, 0.132857], "pixel_area": 13472, "neighbors": [132, 133, 140, 141], "neighbor_border_px": {"132": 30, "133": 246, "140": 176, "141": 130}}, {"id": 144, "center_px": [1848, 528], "center_uv": [0.902344, 0.377143], "pixel_area": 9908, "neighbors": [136, 137, 142, 145], "neighbor_border_px": {"136": 66, "137": 132, "142": 8, "145": 90}}, {"id": 145, "center_px": [1807, 441], "center_uv": [0.882324, 0.315], "pixel_area": 10864, "neighbors": [135, 136, 144, 146, 150], "neighbor_border_px": {"135": 64, "136": 118, "144": 90, "146": 146, "150": 134}}, {"id": 146, "center_px": [1745, 356], "center_uv": [0.852051, 0.254286], "pixel_area": 11208, "neighbors": [135, 139, 145, 149, 150], "neighbor_border_px": {"135": 92, "139": 108, "145": 146, "149": 174, "150": 148}}, {"id": 147, "center_px": [1515, 206], "center_uv": [0.739746, 0.147143], "pixel_area": 12324, "neighbors": [138, 140, 148], "neighbor_border_px": {"138": 100, "140": 178, "148": 136}}, {"id": 148, "center_px": [1621, 250], "center_uv": [0.791504, 0.178571], "pixel_area": 11780, "neighbors": [138, 139, 147, 149], "neighbor_border_px": {"138": 100, "139": 144, "147": 136, "149": 142}}, {"id": 149, "center_px": [1724, 262], "center_uv": [0.841797, 0.187143], "pixel_area": 10684, "neighbors": [139, 146, 148], "neighbor_border_px": {"139": 56, "146": 174, "148": 142}}, {"id": 150, "center_px": [1872, 351], "center_uv": [0.914063, 0.250714], "pixel_area": 13084, "neighbors": [145, 146], "neighbor_border_px": {"145": 134, "146": 148}}]
sea_idadded0
widthadded2048

Code 242 changes in 100 classes

Minified client code with short names blanked for diffing. Class names are real.

ConquestDataManager 1 hunks, 486 statements
+ )),Ngi=class{
+ static ensureLoaded(){
+ return this.loadPromise||(this.loadPromise=this.load().catch(t=>{
+ throw this.loadPromise=null,t}
+ )),this.loadPromise}
+ static url(t){
+ return JA.getAssetPath(`conquest/${
+ t}
+ ?v=${
+ YA.appVersion}
+ `)}
+ static async load(){
+ const[t,i,s]=await Promise.all([fetch(this.url("regionMetadata.json")).then(t=>t.json()),fetch(this.url("regionGameData.draft.json")).then(t=>t.json()),fetch(this.url("regionIdR8.png")).then(t=>t.blob())]);
+ this.mapWidth=t.width,this.mapHeight=t.height,this.startRegion=i.start_region??0;
+ const e=new Map((i.regions??[]).map(t=>[t.id,t]));
+ this.regionMap.clear();
+ for(const n of t.regions){
+ const t=e.get(n.id);
+ this.regionMap.set(n.id,{
+ id:n.id,centerPx:[n.center_px[0],n.center_px[1]],pixelArea:n.pixel_area,neighbors:n.neighbors,biome:(null==t?void 0:t.biome)??"plains",biomeKo:(null==t?void 0:t.biome_ko)??(null==t?void 0:t.biome)??"",nameKo:(null==t?void 0:t.name_ko)??`지역 ${
+ n.id}
+ `,zoneNameKo:(null==t?void 0:t.zone_name_ko)??"",zoneCode:(null==t?void 0:t.zone_name_ko)?`${
+ t.zone_name_ko.split(" ")[0]}
+ -${
+ String(t.zone_seq??0).padStart(2,"0")}
+ `:`#${
+ n.id}
+ `,tier:(null==t?void 0:t.tier_suggestion)??1,landmarks:((null==t?void 0:t.landmarks)??[]).map(t=>({
+ code:t.code,nameKo:t.name_ko,x:t.x,y:t.y}
+ ))}
+ )}
+ this.idMask=await this.decodeIdMask(s,t.width,t.height),this.buildBBoxes(),this.startRegion&&!this.isConquered(this.startRegion)&&this.setConquered(this.startRegion,!0)}
+ static buildBBoxes(){
+ if(!this.idMask)return;
+ this.bboxMap.clear();
+ const t=this.mapWidth;
+ for(let i=0;
+ i<this.mapHeight;
+ i++)for(let s=0;
+ s<t;
+ s++){
+ const e=this.idMask[i*t+s];
+ if(0===e)continue;
+ const n=this.bboxMap.get(e);
+ n?(s<n[0]?n[0]=s:s>n[2]&&(n[2]=s),i<n[1]?n[1]=i:i>n[3]&&(n[3]=i)):this.bboxMap.set(e,[s,i,s,i])}
+ }
+ static buildRegionHighlight(t,i,s,e=2){
+ const n=this.bboxMap.get(t);
+ if(!n||!this.idMask)return null;
+ const h=e+1,r=Math.max(0,n[0]-h),o=Math.max(0,n[1]-h),a=Math.min(this.mapWidth-1,n[2]+h)-r+1,c=Math.min(this.mapHeight-1,n[3]+h)-o+1,l=zt((i,s)=>!(i<0||s<0||i>=this.mapWidth||s>=this.mapHeight)&&this.idMask[s*this.mapWidth+i]===t,"inRegion"),u=new Uint8Array(a*c);
+ for(let w=0;
+ w<c;
+ w++)for(let t=0;
+ t<a;
+ t++){
+ const i=r+t,s=o+w;
+ if(!l(i,s))continue;
+ let e=!1;
+ for(let t=-1;
+ t<=1&&!e;
+ t++)for(let n=-1;
+ n<=1;
+ n++)if((n||t)&&!l(i+n,s+t)){
+ e=!0;
+ break}
+ e&&(u[w*a+t]=1)}
+ let d=u;
+ for(let w=1;
+ w<e;
+ w++){
+ const t=new Uint8Array(d);
+ for(let i=0;
+ i<c;
+ i++)for(let s=0;
+ s<a;
+ s++)d[i*a+s]||(s>0&&d[i*a+s-1]||s<a-1&&d[i*a+s+1]||i>0&&d[(i-1)*a+s]||i<c-1&&d[(i+1)*a+s])&&(t[i*a+s]=1);
+ d=t}
+ const f=document.createElement("canvas");
+ f.width=a,f.height=c;
+ const p=f.getContext("2d");
+ if(!p)return null;
+ const g=p.createImageData(a,c),m=g.data;
+ for(let w=0;
+ w<c;
+ w++)for(let t=0;
+ t<a;
+ t++){
+ const e=4*(w*a+t);
+ d[w*a+t]?(m[e]=s[0],m[e+1]=s[1],m[e+2]=s[2],m[e+3]=s[3]):l(r+t,o+w)&&(m[e]=i[0],m[e+1]=i[1],m[e+2]=i[2],m[e+3]=i[3])}
+ return p.putImageData(g,0,0),{
+ canvas:f,x:r,y:o}
+ }
+ static async decodeIdMask(t,i,s){
+ let e;
+ try{
+ e=await createImageBitmap(t,{
+ colorSpaceConversion:"none",premultiplyAlpha:"none"}
+ )}
+ catch{
+ e=await new Promise((i,s)=>{
+ const e=new Image;
+ e.onload=()=>i(e),e.onerror=s,e.src=URL.createObjectURL(t)}
+ )}
+ const n=document.createElement("canvas");
+ n.width=i,n.height=s;
+ const h=n.getContext("2d",{
+ willReadFrequently:!0}
+ );
+ if(!h)throw new Error("ConquestDataManager: 2d context 생성 실패");
+ h.drawImage(e,0,0);
+ const r=h.getImageData(0,0,i,s).data,o=new Uint8Array(i*s);
+ for(let a=0;
+ a<o.length;
+ a++)o[a]=r[4*a];
+ return"close"in e&&"function"==typeof e.close&&e.close(),o}
+ static getRegionIdAtMapPx(t,i){
+ if(!this.idMask)return 0;
+ const s=Math.floor(t),e=Math.floor(i);
+ return s<0||e<0||s>=this.mapWidth||e>=this.mapHeight?0:this.idMask[e*this.mapWidth+s]}
+ static getRegion(t){
+ return this.regionMap.get(t)}
+ static get regions(){
+ return[...this.regionMap.values()]}
+ static get conquered(){
+ if(!this.conqueredSet)try{
+ const t=localStorage.getItem(this.CONQUERED_LS_KEY);
+ this.conqueredSet=new Set(t?JSON.parse(t):[])}
+ catch{
+ this.conqueredSet=new Set}
+ return this.conqueredSet}
+ static isConquered(t){
+ return this.conquered.has(t)}
+ static setConquered(t,i){
+ if(i||t!==this.startRegion){
+ i?this.conquered.add(t):this.conquered.delete(t);
+ try{
+ localStorage.setItem(this.CONQUERED_LS_KEY,JSON.stringify([...this.conquered]))}
+ catch{
+ }
+ }
+ }
+ static ensureArtPixels(){
+ return this.artLoadPromise||(this.artLoadPromise=(async()=>{
+ const t=await fetch(this.url("worldMapBase.png")).then(t=>t.blob());
+ let i;
+ try{
+ i=await createImageBitmap(t,{
+ colorSpaceConversion:"none",premultiplyAlpha:"none"}
+ )}
+ catch{
+ i=await new Promise((i,s)=>{
+ const e=new Image;
+ e.onload=()=>i(e),e.onerror=s,e.src=URL.createObjectURL(t)}
+ )}
+ const s=document.createElement("canvas");
+ s.width=this.mapWidth,s.height=this.mapHeight;
+ const e=s.getContext("2d",{
+ willReadFrequently:!0}
+ );
+ if(!e)throw new Error("ConquestDataManager: 2d context 생성 실패");
+ e.drawImage(i,0,0),this.artPixels=e.getImageData(0,0,this.mapWidth,this.mapHeight).data,"close"in i&&"function"==typeof i.close&&i.close()}
+ )().catch(t=>{
+ throw this.artLoadPromise=null,t}
+ )),this.artLoadPromise}
+ static buildRegionColorReveal(t){
+ const i=this.bboxMap.get(t);
+ if(!i||!this.idMask||!this.artPixels)return null;
+ const[s,e,n,h]=i,r=n-s+1,o=h-e+1,a=document.createElement("canvas");
+ a.width=r,a.height=o;
+ const c=a.getContext("2d");
+ if(!c)return null;
+ const l=c.createImageData(r,o),u=l.data;
+ for(let d=0;
+ d<o;
+ d++)for(let i=0;
+ i<r;
+ i++){
+ const n=(e+d)*this.mapWidth+(s+i);
+ if(this.idMask[n]!==t)continue;
+ const h=4*(d*r+i),o=4*n;
+ u[h]=this.artPixels[o],u[h+1]=this.artPixels[o+1],u[h+2]=this.artPixels[o+2],u[h+3]=255}
+ return c.putImageData(l,0,0),{
+ canvas:a,x:s,y:e}
+ }
+ static computeVisibility(t=2){
+ var i;
+ const s=new Map;
+ let e=[];
+ for(const h of this.conquered)s.set(h,0),e.push(h);
+ let n=0;
+ for(;
+ e.length>0&&n<t;
+ ){
+ n++;
+ const t=[];
+ for(const h of e)for(const e of(null==(i=this.regionMap.get(h))?void 0:i.neighbors)??[])s.has(e)||(s.set(e,n),t.push(e));
+ e=t}
+ return s}
+ static buildFogCanvas(t){
+ if(!this.idMask)return null;
+ const i=Math.ceil(this.mapWidth/4),s=Math.ceil(this.mapHeight/4),e=.93,n=new Float32Array(i*s);
+ for(let l=0;
+ l<s;
+ l++)for(let s=0;
+ s<i;
+ s++){
+ const h=Math.min(4*s,this.mapWidth-1),r=Math.min(4*l,this.mapHeight-1),o=this.idMask[r*this.mapWidth+h];
+ if(0===o)n[l*i+s]=-1;
+ else{
+ const h=t.get(o);
+ n[l*i+s]=void 0===h?e:h<=1?0:.5}
+ }
+ for(let l=0;
+ l<8;
+ l++){
+ let t=!1;
+ for(let h=0;
+ h<s;
+ h++)for(let r=0;
+ r<i;
+ r++){
+ const o=h*i+r;
+ if(-1!==n[o])continue;
+ let a=1/0;
+ r>0&&n[o-1]>=0&&(a=Math.min(a,n[o-1])),r<i-1&&n[o+1]>=0&&(a=Math.min(a,n[o+1])),h>0&&n[o-i]>=0&&(a=Math.min(a,n[o-i])),h<s-1&&n[o+i]>=0&&(a=Math.min(a,n[o+i])),a!==1/0&&(n[o]=Math.min(a+.12,e),t=!0)}
+ if(!t)break}
+ for(let l=0;
+ l<n.length;
+ l++)n[l]<0&&(n[l]=e);
+ const h=document.createElement("canvas");
+ h.width=i,h.height=s;
+ const r=h.getContext("2d");
+ if(!r)return null;
+ const o=r.createImageData(i,s);
+ for(let l=0;
+ l<i*s;
+ l++)o.data[4*l]=10,o.data[4*l+1]=14,o.data[4*l+2]=20,o.data[4*l+3]=Math.round(255*n[l]);
+ r.putImageData(o,0,0);
+ const a=document.createElement("canvas");
+ a.width=i,a.height=s;
+ const c=a.getContext("2d");
+ return c?(c.filter="blur(3px)",c.drawImage(h,0,0),a):h}
+ }
+ ;
+ zt(Ngi,"ConquestDataManager"),qt(Ngi,"mapWidth",0),qt(Ngi,"mapHeight",0),qt(Ngi,"startRegion",0),qt(Ngi,"regionMap",new Map),qt(Ngi,"idMask",null),qt(Ngi,"bboxMap",new Map),qt(Ngi,"loadPromise",null),qt(Ngi,"artPixels",null),qt(Ngi,"artLoadPromise",null),qt(Ngi,"CONQUERED_LS_KEY","ef2.conquest.demo.conquered.g2"),qt(Ngi,"conqueredSet",null);
+ let Pgi=Ngi;
+ const Lgi=class t extends Ue{
+ constructor(t,i){
+ super(),qt(this,"viewW"),qt(this,"viewH"),qt(this,"mapLayer",new Ue),qt(this,"revealLayer",new Ue),qt(this,"revealSprites",new Map),qt(this,"highlightSprite",null),qt(this,"highlightTexture",null),qt(this,"nameLabelsSprite",null),qt(this,"landmarkLabelsSprite",null),qt(this,"fogSprite",null),qt(this,"visibility",null),qt(this,"onRegionSelected",null),qt(this,"fitScale",1),qt(this,"zoomIdx",0),qt(this,"dragPointerId",-1),qt(this,"dragStartX",0),qt(this,"dragStartY",0),qt(this,"layerStartX",0),qt(this,"layerStartY",0),qt(this,"dragMoved",0),this.viewW=t,this.viewH=i,this.addChild(this.mapLayer);
+ const s=(new Bf).rect(0,0,t,i).fill(16777215);
+ this.addChild(s),this.mask=s,this.eventMode="static",this.hitArea=new Pi(0,0,t,i),this.on("pointerdown",this.onPointerDown,this),this.on("pointermove",this.onPointerMove,this),this.on("pointerup",this.onPointerUp,this),this.on("pointerupoutside",this.onPointerUpOutside,this)}
+ async init(){
+ const i="ktx2",s=zt(t=>JA.getAssetPath(`conquest/${
+ t}
+ ?v=${
+ YA.appVersion}
+ `),"url"),[e,n]=await Promise.all([ad.load(s(`worldMapBaseMono.${
+ i}
+ `)),ad.load(s(`regionBorderOverlay.${
+ i}
+ `)),Pgi.ensureLoaded()]),h=new $e(e),r=new $e(n);
+ if(h.eventMode=r.eventMode="none",this.revealLayer.eventMode="none",this.mapLayer.addChild(h),this.mapLayer.addChild(this.revealLayer),this.mapLayer.addChild(r),this.buildNameLabels(),this.buildLandmarkLabels(),this.rebuildFog(),Pgi.conquered.size>0){
+ await Pgi.ensureArtPixels();
+ for(const t of Pgi.conquered)this.addRevealSprite(t,!1)}
+ const o=Math.max(this.viewH/Pgi.mapHeight,this.viewW/Pgi.mapWidth);
+ this.fitScale=o,this.mapLayer.scale.set(o*t.ZOOM_LEVELS[this.zoomIdx]);
+ const a=Pgi.getRegion(Pgi.startRegion);
+ a&&(this.mapLayer.x=this.viewW/2-a.centerPx[0]*o,this.mapLayer.y=this.viewH/2-a.centerPx[1]*o),this.clampPan()}
+ onPointerDown(t){
+ -1===this.dragPointerId&&(this.dragPointerId=t.pointerId,this.dragStartX=t.globalX,this.dragStartY=t.globalY,this.layerStartX=this.mapLayer.x,this.layerStartY=this.mapLayer.y,this.dragMoved=0)}
+ onPointerMove(t){
+ if(t.pointerId!==this.dragPointerId)return;
+ const i=t.globalX-this.dragStartX,s=t.globalY-this.dragStartY;
+ this.dragMoved=Math.max(this.dragMoved,Math.abs(i),Math.abs(s));
+ const e=this.worldTransform.a||1;
+ this.mapLayer.x=this.layerStartX+i/e,this.mapLayer.y=this.layerStartY+s/e,this.clampPan()}
+ onPointerUp(i){
+ i.pointerId===this.dragPointerId&&(this.dragPointerId=-1,this.dragMoved<t.TAP_THRESHOLD&&this.handleTap(i))}
+ onPointerUpOutside(t){
+ t.pointerId===this.dragPointerId&&(this.dragPointerId=-1)}
+ clampPan(){
+ const t=this.mapLayer.scale.x,i=Pgi.mapWidth*t,s=Pgi.mapHeight*t;
+ this.mapLayer.x=Math.min(0,Math.max(this.viewW-i,this.mapLayer.x)),this.mapLayer.y=Math.min(0,Math.max(this.viewH-s,this.mapLayer.y))}
+ handleTap(t){
+ var i,s;
+ const e=this.mapLayer.toLocal(t.global),n=Pgi.getRegionIdAtMapPx(e.x,e.y);
+ let h=n>0?Pgi.getRegion(n)??null:null;
+ if(h&&this.fogEnabled){
+ const t=null==(i=this.visibility)?void 0:i.get(h.id);
+ (void 0===t||t>=2)&&(h=null)}
+ h?this.showHighlight(h):this.clearHighlight(),null==(s=this.onRegionSelected)||s.call(this,h)}
+ showHighlight(i){
+ const s=Pgi.buildRegionHighlight(i.id,t.HIGHLIGHT_FILL,t.HIGHLIGHT_OUTLINE,t.HIGHLIGHT_OUTLINE_W);
+ s&&(this.clearHighlight(),this.highlightTexture=es.from(s.canvas),this.highlightSprite=new $e(this.highlightTexture),this.highlightSprite.eventMode="none",this.highlightSprite.position.set(s.x,s.y),this.mapLayer.addChild(this.highlightSprite))}
+ clearHighlight(){
+ this.highlightSprite&&(this.highlightSprite.destroy(),this.highlightSprite=null),this.highlightTexture&&(this.highlightTexture.destroy(!0),this.highlightTexture=null)}
+ async setConquered(t,i){
+ if(i){
+ if(this.revealSprites.has(t))return;
+ await Pgi.ensureArtPixels(),this.addRevealSprite(t,!0)}
+ else{
+ const i=this.revealSprites.get(t);
+ if(!i)return;
+ this.revealSprites.delete(t),i.texture.destroy(!0),i.destroy()}
+ this.rebuildFog()}
+ buildNameLabels(){
+ const t=document.createElement("canvas");
+ t.width=Pgi.mapWidth,t.height=Pgi.mapHeight;
+ const i=t.getContext("2d");
+ if(!i)return;
+ i.textAlign="center",i.textBaseline="middle",i.font="600 17px sans-serif",i.lineWidth=3,i.strokeStyle="rgba(40,28,16,0.85)",i.fillStyle="rgba(255,245,220,0.9)";
+ for(const e of Pgi.regions)e.landmarks.length||(i.strokeText(e.nameKo,e.centerPx[0],e.centerPx[1]),i.fillText(e.nameKo,e.centerPx[0],e.centerPx[1]));
+ const s=new $e(es.from(t));
+ s.eventMode="none",s.visible=this.namesVisible,this.mapLayer.addChild(s),this.nameLabelsSprite=s}
+ buildLandmarkLabels(){
+ const t=document.createElement("canvas");
+ t.width=Pgi.mapWidth,t.height=Pgi.mapHeight;
+ const i=t.getContext("2d");
+ if(!i)return;
+ i.textAlign="center";
+ for(const e of Pgi.regions)for(const t of e.landmarks)i.font="bold 24px sans-serif",i.lineWidth=5,i.strokeStyle="rgba(40,28,16,0.9)",i.strokeText("★",t.x,t.y),i.fillStyle="#ffe066",i.fillText("★",t.x,t.y),i.font="bold 21px sans-serif",i.lineWidth=4,i.strokeText(t.nameKo,t.x,t.y+24),i.fillStyle="#fff3c0",i.fillText(t.nameKo,t.x,t.y+24);
+ const s=new $e(es.from(t));
+ s.eventMode="none",this.mapLayer.addChild(s),this.landmarkLabelsSprite=s}
+ get namesVisible(){
+ try{
+ return"1"===localStorage.getItem(t.SHOW_NAMES_LS_KEY)}
+ catch{
+ return!1}
+ }
+ setNamesVisible(i){
+ this.nameLabelsSprite&&(this.nameLabelsSprite.visible=i);
+ try{
+ localStorage.setItem(t.SHOW_NAMES_LS_KEY,i?"1":"0")}
+ catch{
+ }
+ }
+ addRevealSprite(t,i){
+ const s=Pgi.buildRegionColorReveal(t);
+ if(!s)return;
+ const e=new $e(es.from(s.canvas));
+ if(e.eventMode="none",e.position.set(s.x,s.y),this.revealLayer.addChild(e),this.revealSprites.set(t,e),i){
+ e.alpha=0;
+ const t=zt(i=>{
+ e.alpha=Math.min(1,e.alpha+i.deltaMS/600),(e.alpha>=1||e.destroyed)&&fn.shared.remove(t)}
+ ,"tick");
+ fn.shared.add(t)}
+ }
+ get zoomPercent(){
+ return 100*t.ZOOM_LEVELS[this.zoomIdx]}
+ cycleZoom(){
+ return this.zoomIdx=(this.zoomIdx+1)%t.ZOOM_LEVELS.length,this.applyZoom(),this.zoomPercent}
+ applyZoom(){
+ const i=this.mapLayer.scale.x,s=this.fitScale*t.ZOOM_LEVELS[this.zoomIdx],e=(this.viewW/2-this.mapLayer.x)/i,n=(this.viewH/2-this.mapLayer.y)/i;
+ this.mapLayer.scale.set(s),this.mapLayer.x=this.viewW/2-e*s,this.mapLayer.y=this.viewH/2-n*s,this.clampPan()}
+ rebuildFog(){
+ const t=Pgi.computeVisibility(2);
+ this.visibility=t;
+ const i=Pgi.buildFogCanvas(t);
+ if(!i)return;
+ const s=es.from(i);
+ if(this.fogSprite){
+ const t=this.fogSprite.texture;
+ this.fogSprite.texture=s,t.destroy(!0)}
+ else{
+ const t=new $e(s);
+ t.eventMode="none",this.mapLayer.addChild(t),this.fogSprite=t}
+ this.fogSprite.width=Pgi.mapWidth,this.fogSprite.height=Pgi.mapHeight,this.fogSprite.visible=this.fogEnabled}
+ get fogEnabled(){
+ try{
+ return"0"!==localStorage.getItem(t.FOG_LS_KEY)}
+ catch{
+ return!0}
+ }
+ setFogEnabled(i){
+ this.fogSprite&&(this.fogSprite.visible=i);
+ try{
+ localStorage.setItem(t.FOG_LS_KEY,i?"1":"0")}
+ catch{
+ }
+ }
+ }
+ ;
+ zt(Lgi,"ConquestWorldMapView"),qt(Lgi,"SHOW_NAMES_LS_KEY","ef2.conquest.demo.showNames"),qt(Lgi,"FOG_LS_KEY","ef2.conquest.demo.fog"),qt(Lgi,"HIGHLIGHT_FILL",[255,228,110,90]),qt(Lgi,"HIGHLIGHT_OUTLINE",[255,242,160,255]),qt(Lgi,"HIGHLIGHT_OUTLINE_W",3),qt(Lgi,"ZOOM_LEVELS",[1,1.5,2]),qt(Lgi,"TAP_THRESHOLD",8);
+ let Dgi=Lgi;
+ const Ggi=class t extends cqt{
+ constructor(){
+ super(),qt(this,"headerBg"),qt(this,"titleLabel"),qt(this,"infoLabel"),qt(this,"mapView",null),qt(this,"initPromise",null),qt(this,"selectedRegion",null),qt(this,"btnConquer",new Ue),qt(this,"btnConquerBg",new Bf),qt(this,"btnConquerLabel"),qt(this,"btnNames",new Ue),qt(this,"btnNamesBg",new Bf),qt(this,"btnNamesLabel"),qt(this,"btnFog",new Ue),qt(this,"btnFogBg",new Bf),qt(this,"btnFogLabel"),qt(this,"btnZoom",new Ue),qt(this,"btnZoomBg",new Bf),qt(this,"btnZoomLabel"),this.y=0,this.bg.height=zA.safeHeight,this.dimOverlay.y=0,this.headerBg=(new Bf).rect(0,0,640,t.HEADER_H).fill({
+ color:1118481,alpha:.92}
+ ),this.headerBg.eventMode="none",this.addChild(this.headerBg),this.titleLabel=new hD("정복 (프로토타입)"),this.titleLabel.x=12,this.titleLabel.y=zA.RESOURCE_INFO_H+6,this.addChild(this.titleLabel),this.infoLabel=new hD("지역을 선택하세요",16769126),this.infoLabel.x=12,this.infoLabel.y=zA.RESOURCE_INFO_H+34,this.addChild(this.infoLabel),this.btnConquerLabel=new hD("점령하기"),this.btnConquer.addChild(this.btnConquerBg),this.btnConquerLabel.x=12,this.btnConquerLabel.y=7,this.btnConquer.addChild(this.btnConquerLabel),this.btnConquer.x=490,this.btnConquer.y=zA.RESOURCE_INFO_H+28,this.btnConquer.eventMode="static",this.btnConquer.cursor="pointer",this.btnConquer.on("pointerup",this.onConquerToggle,this),this.btnConquer.visible=!1,this.addChild(this.btnConquer),this.btnClose.x=640-this.btnClose.width-4,this.btnClose.y=zA.RESOURCE_INFO_H+2,this.addChild(this.btnClose),this.btnNamesLabel=new hD("지역명"),this.btnNames.addChild(this.btnNamesBg),this.btnNamesLabel.x=12,this.btnNamesLabel.y=5,this.btnNames.addChild(this.btnNamesLabel),this.btnNames.x=this.btnClose.x-100,this.btnNames.y=zA.RESOURCE_INFO_H+4,this.btnNames.eventMode="static",this.btnNames.cursor="pointer",this.btnNames.on("pointerup",this.onNamesToggle,this),this.updateNamesButton(!1),this.addChild(this.btnNames),this.btnFogLabel=new hD("안개"),this.btnFog.addChild(this.btnFogBg),this.btnFogLabel.x=12,this.btnFogLabel.y=5,this.btnFog.addChild(this.btnFogLabel),this.btnFog.x=this.btnNames.x-84,this.btnFog.y=this.btnNames.y,this.btnFog.eventMode="static",this.btnFog.cursor="pointer",this.btnFog.on("pointerup",this.onFogToggle,this),this.updateFogButton(!0),this.addChild(this.btnFog),this.btnZoomLabel=new hD("100%"),this.btnZoom.addChild(this.btnZoomBg),this.btnZoomBg.roundRect(0,0,84,44,10).fill({
+ color:2236962,alpha:.85}
+ ).stroke({
+ width:2,color:16769126}
+ ),this.btnZoomLabel.x=16,this.btnZoomLabel.y=9,this.btnZoom.addChild(this.btnZoomLabel),this.btnZoom.x=544,this.btnZoom.y=this.bg.height-60,this.btnZoom.eventMode="static",this.btnZoom.cursor="pointer",this.btnZoom.on("pointerup",this.onZoomToggle,this),this.addChild(this.btnZoom)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onZoomToggle(){
+ if(!this.mapView)return;
+ const t=this.mapView.cycleZoom();
+ this.btnZoomLabel.text=`${
+ t}
+ %`}
+ show(){
+ this.show2(),this.init()}
+ init(){
+ return this.initPromise||(this.initPromise=this.initInternal().catch(t=>{
+ throw this.infoLabel.text="월드맵 로딩 실패",this.initPromise=null,t}
+ )),this.initPromise}
+ async initInternal(){
+ this.infoLabel.text="월드맵 불러오는 중...";
+ const i=t.HEADER_H,s=new Dgi(640,this.bg.height-i);
+ s.y=i,await s.init(),s.onRegionSelected=this.onRegionSelected.bind(this),this.addChildAt(s,this.getChildIndex(this.headerBg)),this.mapView=s,this.infoLabel.text="지역을 선택하세요",this.updateTitle(),this.updateNamesButton(s.namesVisible),this.updateFogButton(s.fogEnabled),this.btnZoomLabel.text=`${
+ s.zoomPercent}
+ %`}
+ onFogToggle(){
+ if(!this.mapView)return;
+ const t=!this.mapView.fogEnabled;
+ this.mapView.setFogEnabled(t),this.updateFogButton(t)}
+ updateFogButton(t){
+ this.btnFogBg.clear().roundRect(0,0,76,36,8).fill({
+ color:t?3038315:3355443,alpha:.95}
+ ).stroke({
+ width:2,color:t?16769126:7829367}
+ ),this.btnFogLabel.textColor=t?16769126:12303291}
+ onNamesToggle(){
+ if(!this.mapView)return;
+ const t=!this.mapView.namesVisible;
+ this.mapView.setNamesVisible(t),this.updateNamesButton(t)}
+ updateNamesButton(t){
+ this.btnNamesBg.clear().roundRect(0,0,92,36,8).fill({
+ color:t?3038315:3355443,alpha:.95}
+ ).stroke({
+ width:2,color:t?16769126:7829367}
+ ),this.btnNamesLabel.textColor=t?16769126:12303291}
+ onRegionSelected(t){
+ if(this.selectedRegion=t,this.updateConquerButton(),!t)return void(this.infoLabel.text="지역을 선택하세요");
+ const i=t.landmarks.length?`★${
+ t.nameKo}
+ `:t.nameKo;
+ this.infoLabel.text=`[${
+ t.zoneCode}
+ ] ${
+ i}
+  · ${
+ t.biomeKo}
+  · ${
+ t.tier}
+ 티어 · 인접 ${
+ t.neighbors.length}
+ 곳`}
+ onConquerToggle(){
+ const t=this.selectedRegion;
+ if(!t||!this.mapView)return;
+ if(t.id===Pgi.startRegion)return;
+ const i=!Pgi.isConquered(t.id);
+ Pgi.setConquered(t.id,i),this.mapView.setConquered(t.id,i),this.updateConquerButton(),this.updateTitle()}
+ updateConquerButton(){
+ const t=this.selectedRegion;
+ if(this.btnConquer.visible=!!t,!t)return;
+ if(t.id===Pgi.startRegion)return this.btnConquerLabel.text="시작 거점",void this.btnConquerBg.clear().roundRect(0,0,126,40,8).fill({
+ color:4473924,alpha:.95}
+ ).stroke({
+ width:2,color:8947848}
+ );
+ const i=Pgi.isConquered(t.id);
+ this.btnConquerLabel.text=i?"점령 해제":"점령하기",this.btnConquerBg.clear().roundRect(0,0,126,40,8).fill({
+ color:i?7027246:3042106,alpha:.95}
+ ).stroke({
+ width:2,color:16769126}
+ )}
+ updateTitle(){
+ const t=Pgi.regions.length||150;
+ this.titleLabel.text=`정복 (프로토타입) · ${
+ Pgi.conquered.size}
+ /${
+ t}
+ `}
+ get className(){
+ return"ConquestMainPopup"}
+ }
+ ;
+ zt(Ggi,"ConquestMainPopup"),qt(Ggi,"_instance"),qt(Ggi,"HEADER_H",96);
+ let Bgi=Ggi;
+ const Ugi=Object.freeze(Object.defineProperty({
+ __proto__:null,ConquestMainPopup:Bgi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
QuizSubView 1 hunks, 386 statements
- super(),qt(this,"titleBar"),qt(this,"btnEmail"),qt(this,"btnNotice"),qt(this,"btnGoogleLogin"),qt(this,"btnAppleLogin"),qt(this,"btnOptout"),qt(this,"btnPromotion"),qt(this,"btnWithdraw"),qt(this,"btnLangChange"),qt(this,"btnLineMarketLink"),qt(this,"btnAttendReward"),qt(this,"btnContainer"),qt(this,"requestPending",!1),this.titleBar=new dei(DG.getText("COMMON_408","서비스")),this.addChild(this.titleBar),this.btnEmail=new Kqt(DG.getText("COMMON_510","이메일 ID")),this.btnEmail.deactivatedTextColor=16777215,this.btnEmail.onClick=this.onEmailBtnClick.bind(this),this.btnNotice=new Kqt(DG.getText("COMMON_18","공지")),this.btnNotice.onClick=this.onNoticeBtnClick.bind(this),this.btnGoogleLogin=new Kqt(DG.getText("GAME_407","Google 로그인")),this.btnGoogleLogin.deactivatedTextColor=16777215,this.btnGoogleLogin.onClick=this.onGoogleLoginBtnClick.bind(this),this.btnAppleLogin=new Kqt(DG.getText("GAME_408","Apple 로그인")),this.btnAppleLogin.deactivatedTextColor=16777215,this.btnAppleLogin.onClick=this.onAppleLoginBtnClick.bind(this),this.btnOptout=new Kqt(DG.getText("COMMON_403","OPT-OUT")),this.btnOptout.deactivatedTextColor=16777215,this.btnOptout.onClick=this.onOptoutBtnClick.bind(this),this.btnPromotion=new Kqt(DG.getText("GAME_400","프로모션 코드")),this.btnPromotion.onClick=this.onPromotionBtnClick.bind(this),this.btnWithdraw=new Kqt(DG.getText("COMMON_56","게임탈퇴")),this.btnWithdraw.onClick=this.onWithdrawBtnClick.bind(this),this.btnLangChange=new Kqt(DG.getText("COMMON_54","언어변경")),this.btnLangChange.onClick=this.onLangChangeBtnClick.bind(this),this.btnLineMarketLink=new Kqt("웹마켓 점검 우회"),this.btnLineMarketLink.onClick=this.onLineMarketLinkBtnClick.bind(this),this.btnAttendReward=new Kqt(DG.getText("GAME_245","출석 보상 "));
+ super(),this.initialize()}
+ initialize(){
+ }
+ async setData(){
+ this.updateLayout()}
+ updateLayout(){
+ }
+ }
+ ;
+ zt(Fni,"QuizSubView");
+ let Hni=Fni;
+ const Wni=class extends N5{
+ constructor(){
+ super(),qt(this,"bg2"),qt(this,"cover",new Bf),qt(this,"effectBorder",new Bf),qt(this,"resultBorder",new Bf),qt(this,"_selected",!1),qt(this,"_showEffect",!1),qt(this,"_result",!1),this.bg.removeFromParent(),this.bg2=new IM({
+ texture:tS.getTexture("UI_Ekkorr","Popup_List_00"),leftWidth:20,topHeight:20,rightWidth:20,bottomHeight:30}
+ ),this.bg2.width=150,this.bg2.height=90,this.addChildAt(this.bg2,0),this.cover.rect(0,0,this.bg2.width,this.bg2.height).fill({
+ color:0,alpha:.65}
+ ),this.addChild(this.cover),this.cover.visible=!1,this.effectBorder.rect(0,0,this.bg2.width,this.bg2.height).stroke({
+ color:12632256,width:4}
+ ),this.addChild(this.effectBorder),this.effectBorder.visible=!1,this.resultBorder.rect(0,0,this.bg2.width,this.bg2.height).stroke({
+ color:16766720,width:5}
+ ),this.resultBorder.pivot.set(.5*this.bg2.width,.5*this.bg2.height),this.resultBorder.position.set(.5*this.bg2.width,.5*this.bg2.height),this.addChild(this.resultBorder),this.resultBorder.visible=!1,this.updateLayout()}
+ set selected(t){
+ t!==this._selected&&(this._selected=t,this.cover.visible=t)}
+ get selected(){
+ return this._selected}
+ set showEffect(t){
+ t!==this._showEffect&&(this._showEffect=t,this.effectBorder.visible=t&&!this._result)}
+ get showEffect(){
+ return this._showEffect}
+ set result(t){
+ t!==this._result&&(this._result=t,WO.killTweensOf(this.resultBorder),WO.killTweensOf(this.resultBorder.scale),t?(this.effectBorder.visible=!1,this.resultBorder.visible=!0,this.resultBorder.scale.set(1.15),this.resultBorder.alpha=0,WO.to(this.resultBorder,{
+ alpha:1,duration:.08,ease:"power2.out"}
+ ),WO.to(this.resultBorder.scale,{
+ x:1,y:1,duration:.22,ease:"back.out(2.5)"}
+ )):(this.resultBorder.visible=!1,this.resultBorder.alpha=1,this.resultBorder.scale.set(1)))}
+ get result(){
+ return this._result}
+ get width(){
+ return this.heroIcon.visible?this.heroIcon.width:this.bg2.width}
+ get height(){
+ return this.heroIcon.visible?this.heroIcon.height:this.bg2.height}
+ updateLayout(){
+ if(!this.bg2)return;
+ const t=this.bg2.width,i=this.bg2.height;
+ this.img.y=.5*(i-this.img.height),this.lblNum.textSize=25,this.lblNum.y=.5*(i-this.lblNum.height),1===this.amount?(this.img.x=.5*(t-this.img.width),this.lblNum.visible=!1):(this.img.x=.5*(.5*t-this.img.width)+15,this.lblNum.visible=!0,this.lblNum.x=.5*t+.5*(.5*t-this.lblNum.width)-5)}
+ hideBg(){
+ this.bg2.visible=!1}
+ }
+ ;
+ zt(Wni,"RouletteItem");
+ let $ni=Wni;
+ const jni=class t extends wG{
+ constructor(){
+ super(),qt(this,"lblMessage",new hD("",wL.DEFAULT_COLOR,wL.DEFAULT_OUTLINE_FONT_OPTION_17)),qt(this,"itemReward",new $ni),qt(this,"btnConfirm",new uG("확인")),qt(this,"onConfirm",null),this.title="",this.lblMessage.y=90,this.contentContainer.addChild(this.lblMessage,this.btnConfirm);
+ let i=this.lblMessage.getStyle();
+ i.align="center",this.lblMessage.setStyle(i),wL.setLabelWrapWidth(this.lblMessage,500),this.itemReward.scale=t.ITEM_SCALE,this.itemReward.hideBg(),this.addChild(this.itemReward),this.btnConfirm.onClick=this.onConfirmClick.bind(this)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.hide();
+ let t=this.onConfirm;
+ this.onConfirm=null,null!==t&&t()}
+ show(t,i=null){
+ this.onConfirm=i,this.lblMessage.text=t,this.btnConfirm.text=LG.getText("COMMON_1","확인"),this.updateLayout(),super.show()}
+ hide(){
+ super.hide(),this.title="",this.btnClose.visible=!0}
+ setReward(t){
+ this.itemReward.setDataFrom(t)}
+ updateLayout(){
+ this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.itemReward.x=this.lblMessage.x+.5*(this.lblMessage.width-this.itemReward.width*t.ITEM_SCALE),this.itemReward.y=this.lblMessage.y+this.lblMessage.height,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=this.itemReward.y+this.itemReward.height*t.ITEM_SCALE+20,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
+ getDefaultPositionY(){
+ return.3*zA.stageHeight}
+ hideCloseBtn(){
+ this.btnClose.visible=!1}
+ onBackButton(){
+ return this.onConfirmClick(),!0}
+ }
+ ;
+ zt(jni,"RouletteRewardPopup"),qt(jni,"_instance"),qt(jni,"ITEM_SCALE",.7);
+ let Vni=jni;
+ const Kni=class t{
+ static get unlocked(){
+ if(-1===this.openWave){
+ const t=parseInt(RD.getInstance().getClientData("DAILY_ROULETTE_OPEN_WAVE"));
+ this.openWave=isNaN(t)?50:t}
+ return!(OD.maxWave<this.openWave)}
+ static async getInfo(){
+ var t,i;
+ this.dailyInfo=void 0;
+ const s=await pL.getInstance().miniGame.getInfo(2);
+ ((null==s?void 0:s.success)?null==(t=s.body)?void 0:t.daily:void 0)&&(this.dailyInfo=null==(i=s.body)?void 0:i.daily)}
+ static async loadDailyRouletteBook(){
+ this.bookLoaded||(await OL.getInstance().loadBook(IL.DAILY_ROULETTE),this.setBookData(OL.getInstance().getBook(IL.DAILY_ROULETTE)))}
+ static setBookData(t){
+ if(null==t)return;
+ this.listBook.length=0,this.objBook={
+ }
+ ;
+ let i,s,e=t.length;
+ for(let n=0;
+ n<e;
+ n++)i=t[n],s=new Yni(i.kindNum,i.name,i.prob,i.rewards),this.listBook.push(s),this.objBook[s.kindNum]=s;
+ this.bookLoaded=!0}
+ static getDailyRouletteBookVO(t){
+ return this.objBook[t]}
+ static getDailyRouletteRewards(t){
+ return this.objBook[t].rewards}
+ static isDailyDateChanged(){
+ var i;
+ return!!(null==(i=t.dailyInfo)?void 0:i.date)&&t.dailyInfo.date!==this.getUtcTodayString()}
+ static getUtcTodayString(){
+ const t=new Date;
+ return`${
+ t.getUTCFullYear()}
+ -${
+ String(t.getUTCMonth()+1).padStart(2,"0")}
+ -${
+ String(t.getUTCDate()).padStart(2,"0")}
+ `}
+ static async checkRedDotRoulette(){
+ return 0!=this.unlocked&&(!!(await this.isDisplayDateChanged())||(this.dailyInfo&&!this.isDailyDateChanged()||await this.getInfo(),!!this.dailyInfo&&0===this.dailyInfo.playCount))}
+ static async isDisplayDateChanged(){
+ const t=await VA.getRouletteDisplayInfo();
+ if(!t)return!0;
+ const[i]=t.split("#");
+ return i!==this.getUtcTodayString()}
+ }
+ ;
+ zt(Kni,"QuizRouletteManager"),qt(Kni,"openWave",-1),qt(Kni,"dailyInfo"),qt(Kni,"bookLoaded",!1),qt(Kni,"listBook",[]),qt(Kni,"objBook",{
+ }
+ );
+ let zni=Kni;
+ const qni=class{
+ constructor(t,i,s,e){
+ qt(this,"kindNum"),qt(this,"name"),qt(this,"prob"),qt(this,"rewards"),this.kindNum=t,this.name=i,this.prob=s,this.rewards=e}
+ }
+ ;
+ zt(qni,"DailyRouletteVO");
+ let Yni=qni;
+ const Xni=class t extends Ue{
+ constructor(){
+ super(),qt(this,"posXs",[0,132,264,396,396,396,396,264,132,0,0,0]),qt(this,"posYs",[0,0,0,0,84,166,248,248,248,248,166,84]),qt(this,"lblDate",new hD("날짜: 2026.08.07",wL.COLOR_BRIGHT_ORANGE)),qt(this,"lblDesc",new hD("룰렛 설명",wL.COLOR_WHITE)),qt(this,"items",[]),qt(this,"btnStart",new HU("PVP_COIN_ON",`( ${
+ LG.getText("COMMON_16","무료")}
+  )`,"START")),qt(this,"btnStop",new HU("","STOP","( 10s )")),qt(this,"effectIdx",-1),qt(this,"selectedKindNum",-1),qt(this,"selectedIndex",-1),qt(this,"isRolling",!1),qt(this,"stopRequested",!1),qt(this,"canStop",!1),qt(this,"rouletteTween"),qt(this,"stopInterval"),qt(this,"costs",[]),qt(this,"order",[]),this.initialize()}
+ initialize(){
+ this.lblDate.textSize=20,this.lblDate.x=t.START_X,this.lblDate.y=20,this.addChild(this.lblDate),this.lblDesc.textSize=20,this.lblDesc.setWrapWidth(400),this.lblDesc.x=t.START_X,this.lblDesc.y=this.lblDate.y+this.lblDate.height+3,this.addChild(this.lblDesc),this.layoutRoulette(),this.btnStart.color=oG.BROWN,this.btnStart.labelOrder=HU.TEXT_FIRST,this.btnStart.iconLabel.y=7,this.btnStart.width=230,this.btnStart.height=80,this.btnStart.onClick=()=>{
+ this.onStart()}
+ ,this.addChild(this.btnStart),this.btnStop.color=oG.BROWN,this.btnStop.iconLabel.iconHidden=!0,this.btnStop.iconLabel.textOffsetY=7,this.btnStop.width=230,this.btnStop.height=80,this.btnStop.visible=!1,this.btnStop.onClick=()=>{
+ this.onStop()}
+ ,this.addChild(this.btnStop)}
+ layoutRoulette(){
+ const i=this.lblDesc.y+this.lblDesc.height+50;
+ for(let s=0;
+ s<t.ITEM_COUNT;
+ s++){
+ const e=new $ni;
+ e.scale.set(.8),e.x=t.START_X+this.posXs[s],e.y=i+this.posYs[s],e.showEffect=!1,this.addChild(e),this.items.push(e)}
+ this.btnStart.x=this.items[1].x+12,this.btnStart.y=this.items[11].y+.5*this.items[11].height-10,this.btnStop.x=this.btnStart.x,this.btnStop.y=this.btnStart.y}
+ async setData(){
+ await zni.loadDailyRouletteBook(),this.costs=RD.getInstance().getClientData("DAILY_ROULETTE_COST_LIST").split("|").map(Number),this.stopRoulette(),this.lblDate.text=`${
+ LG.getText("ROULETTE_2","날짜")}
+  : `+zni.getUtcTodayString(),this.lblDesc.text=LG.getText("ROULETTE_12","[START] 버튼을 누르고 룰렛이 시작되면, [STOP] 버튼을 눌러주세요."),this.order=await this.getDailyOrder();
+ for(let i=0;
+ i<t.ITEM_COUNT;
+ i++){
+ const t=this.order[i],s=zni.listBook[t];
+ if(!s)continue;
+ const e=this.items[i];
+ e.setDataFrom(s.rewards[0]),e.selected=!1,e.showEffect=!1}
+ await zni.getInfo(),this.updateSelected(),this.updateStartBtn(),this.effectIdx=-1,this.selectedIndex=-1,this.updateUI()}
+ updateUI(){
+ const i=this.lblDesc.y+this.lblDesc.height+20;
+ for(let s=0;
+ s<t.ITEM_COUNT;
+ s++)this.items[s].y=i+this.posYs[s]}
+ updateSelected(){
+ var t;
+ const i=(null==(t=zni.dailyInfo.extra)?void 0:t.split("|").filter(Boolean).map(Number))??[];
+ for(const s of i){
+ const t=this.order.findIndex(t=>zni.listBook[t].kindNum===s);
+ t>=0&&(this.items[t].selected=!0)}
+ }
+ updateStartBtn(t=!1){
+ const i=zni.dailyInfo.playCount;
+ this.btnStart.textLabel.y=.5*-(this.btnStart.iconLabel.height+5+this.btnStart.textLabel.height),this.btnStart.iconLabel.visible=!0,this.btnStart.activated=!0,0==i?(this.btnStart.iconLabel.text=`( ${
+ LG.getText("COMMON_16","무료")}
+  )`,this.btnStart.iconLabel.iconHidden=!0,this.btnStart.iconLabel.x=this.btnStart.textLabel.x+.5*(this.btnStart.textLabel.width-this.btnStart.iconLabel.width)):1==i||2==i?(this.btnStart.iconLabel.text=String(this.costs[i]),this.btnStart.iconLabel.iconHidden=!1,this.btnStart.iconLabel.x=this.btnStart.textLabel.x+.5*(this.btnStart.textLabel.width-this.btnStart.iconLabel.width)-5):(this.btnStart.textLabel.y=.5*-this.btnStart.textLabel.height,this.btnStart.iconLabel.visible=!1,this.btnStart.activated=!1)}
+ async onStart(){
+ if(this.isRolling)return;
+ if(zni.isDailyDateChanged())return SG.getInstance().show(LG.getText("ROULETTE_11","UTC 기준 00시가 지나서 룰렛 정보를 다시 불러옵니다.")),void(await this.setData());
+ const t=zni.dailyInfo.playCount;
+ if(t>0){
+ if(OD.honorCoin<this.costs[t])return void SG.getInstance().show(LG.getText("GAME_194","명예코인이 부족합니다."));
+ let i=1===t?LG.getText("ROULETTE_8","한번 더 룰렛을 하시겠습니까?"):LG.getText("ROULETTE_9","마지막으로 한번 더 룰렛을 하시겠습니까?");
+ i+=`\n( ${
+ LG.getText("ROULETTE_10","필요 명예코인")}
+  : ${
+ this.costs[t]}
+  )`,K$t.getInstance().textAlignCenter=!0,K$t.getInstance().setPositonRatioY(.45),K$t.getInstance().show(i,this.doStart.bind(this))}
+ else this.doStart()}
+ async doStart(){
+ for(const i of this.items)i.showEffect=!1,i.result=!1;
+ this.updateSelected(),this.isRolling=!0,this.stopRequested=!1,this.btnStop.activated=this.canStop=!1,this.btnStart.visible=!1,this.btnStop.visible=!0;
+ const t=await pL.getInstance().miniGame.rollRoulette(2);
+ if(!t.success||!t.body)return SG.getInstance().showError(t),void this.stopRoulette();
+ this.selectedKindNum=t.body.selectedKindNum,zni.dailyInfo=t.body.daily,t.body.user&&(OD.setUserData(t.body.user),tH.getInstance().updateAll()),fhi.getInstance().setData(),this.selectedIndex=this.order.findIndex(t=>zni.listBook[t].kindNum===this.selectedKindNum),this.selectedIndex<0?this.stopRoulette():(this.startEffect(),this.startStopTimer())}
+ startEffect(){
+ this.effectIdx=this.getFirstAvailableIndex(),this.effectIdx<0?this.stopRoulette():(this.items[this.effectIdx].showEffect=!0,this.rouletteTween=WO.delayedCall(.025,()=>this.rotateEffect()))}
+ rotateEffect(){
+ if(!this.isRolling)return;
+ const t=this.getNextAvailableIndex(this.effectIdx);
+ t<0?this.stopRoulette():(this.items[this.effectIdx].showEffect=!1,this.effectIdx=t,this.items[this.effectIdx].showEffect=!0,this.rouletteTween=WO.delayedCall(.025,()=>this.rotateEffect()))}
+ onStop(){
+ this.isRolling&&this.canStop&&(this.btnStop.activated=this.canStop=!1,this.stopRequested=!0,this.stopTimer(),this.stopAnimation(),this.startSlowRotation())}
+ startSlowRotation(){
+ if(!this.isRolling||this.selectedIndex<0)return;
+ this.stopAnimation();
+ const t=this.getDistanceToSelected()+3*this.getAvailableItemCount();
+ t<=0?this.finishRoulette():this.rotateSlow(t,t)}
+ getAvailableItemCount(){
+ let t=0;
+ for(const i of this.items)i.selected||t++;
+ return t}
+ rotateSlow(t,i){
+ if(!this.isRolling)return;
+ if(t<=0)return void this.finishRoulette();
+ const s=this.getNextAvailableIndex(this.effectIdx);
+ if(s<0)return void this.finishRoulette();
+ if(this.items[this.effectIdx].showEffect=!1,this.effectIdx=s,this.effectIdx===this.selectedIndex&&1===t)return this.items[this.effectIdx].result=!0,void(this.rouletteTween=WO.delayedCall(.3,()=>{
+ this.finishRoulette()}
+ ));
+ this.items[this.effectIdx].showEffect=!0;
+ const e=1-t/i,n=.025+.5*Math.pow(e,3);
+ this.rouletteTween=WO.delayedCall(n,()=>{
+ this.rotateSlow(t-1,i)}
+ )}
+ getFirstAvailableIndex(){
+ for(let t=0;
+ t<this.items.length;
+ t++)if(!this.items[t].selected)return t;
+ return-1}
+ getNextAvailableIndex(t){
+ let i=(t+1)%this.items.length;
+ for(let s=0;
+ s<this.items.length;
+ s++){
+ if(!this.items[i].selected)return i;
+ i=(i+1)%this.items.length}
+ return-1}
+ getDistanceToSelected(){
+ if(this.effectIdx<0||this.selectedIndex<0)return 0;
+ let t=this.effectIdx,i=0;
+ for(;
+ i<=this.items.length;
+ ){
+ if(t=this.getNextAvailableIndex(t),t<0)return 0;
+ if(i++,t===this.selectedIndex)return i}
+ return 0}
+ startStopTimer(){
+ this.stopTimer();
+ let t=10;
+ this.btnStop.activated=this.canStop=!1,this.setStopButtonText(t),this.stopInterval=setInterval(()=>{
+ t--,t<=9&&(this.btnStop.activated=this.canStop=!0),this.setStopButtonText(Math.max(t,0)),t<=0&&(this.stopTimer(),this.isRolling&&(this.btnStop.activated=this.canStop=!1,this.stopRequested=!0,this.startSlowRotation()))}
+ ,1e3)}
+ setStopButtonText(t){
+ this.btnStop.textLabel.text=`( ${
+ t}
+ s )`,this.btnStop.textLabel.x=this.btnStop.iconLabel.x+.5*(this.btnStop.iconLabel.width-this.btnStop.textLabel.width)}
+ stopTimer(){
+ this.stopInterval&&(clearInterval(this.stopInterval),this.stopInterval=void 0)}
+ finishRoulette(){
+ this.stopAnimation(),this.stopTimer(),this.isRolling=!1,this.stopRequested=!1,this.btnStop.activated=this.canStop=!1,this.btnStop.visible=!1,this.btnStart.visible=!0,this.updateStartBtn(!0);
+ for(let t=0;
+ t<this.items.length;
+ t++)t!==this.selectedIndex&&(this.items[t].showEffect=!1,this.items[t].result=!1);
+ this.selectedIndex>=0&&this.selectedIndex<this.items.length&&(this.effectIdx=this.selectedIndex,this.items[this.selectedIndex].showEffect=!1,this.items[this.selectedIndex].result=!0),WO.delayedCall(1,()=>{
+ this.showResult()}
+ )}
+ showResult(){
+ if(this.selectedIndex<0)return;
+ const t=this.order[this.selectedIndex],i=zni.listBook[t];
+ if(!i)return;
+ const s=i.rewards[0];
+ let e="gem"!==s.type?LG.getText("ROULETTE_7","보상이 메일함으로 전송되었습니다."):LG.getValueReplace("COMMON_354","##",`${
+ s.amount}
+ `,`보상으로 ${
+ s.amount}
+ 보석이 지급되었습니다.`);
+ const n=Vni.getInstance();
+ n.setReward(s),n.title=LG.getText("COMMON_4","알림"),n.show(e)}
+ stopAnimation(){
+ this.rouletteTween&&(this.rouletteTween.kill(),this.rouletteTween=void 0)}
+ stopRoulette(){
+ this.stopAnimation(),this.stopTimer();
+ for(const t of this.items)t.showEffect=!1,t.result=!1;
+ this.isRolling=!1,this.stopRequested=!1,this.btnStop.activated=this.canStop=!1,this.effectIdx=-1,this.selectedIndex=-1,this.selectedKindNum=-1,this.btnStart.visible=!0,this.btnStop.visible=!1}
+ stop(){
+ this.stopRoulette()}
+ destroy(t){
+ this.stopRoulette(),super.destroy(t)}
+ async getDailyOrder(){
+ const i=zni.getUtcTodayString(),s=await VA.getRouletteDisplayInfo();
+ if(s){
+ const[e,n]=s.split("#");
+ if(e===i&&n){
+ const i=n.split("|").map(Number);
+ if(i.length===t.ITEM_COUNT&&i.every(i=>Number.isInteger(i)&&i>=0&&i<t.ITEM_COUNT)&&new Set(i).size===t.ITEM_COUNT)return i}
+ }
+ const e=Array.from({
+ length:t.ITEM_COUNT}
+ ,(t,i)=>i);
+ this.shuffle(e);
+ const n=`${
+ i}
+ #${
+ e.join("|")}
+ `;
+ return await VA.saveRouletteDisplayInfo(n),e}
+ shuffle(t){
+ for(let i=t.length-1;
+ i>0;
+ i--){
+ const s=Math.floor(Math.random()*(i+1));
+ [t[i],t[s]]=[t[s],t[i]]}
+ }
+ }
+ ;
+ zt(Xni,"RouletteSubView"),qt(Xni,"START_X",50),qt(Xni,"ITEM_COUNT",12);
+ let Jni=Xni;
+ const Qni=class t extends BKt{
+ constructor(){
+ super(),qt(this,"btnGuide"),qt(this,"btnRoulette",new tzt(LG.getText("ROULETTE_1","오늘도 룰렛"),105)),qt(this,"btnQuiz",new tzt(LG.getText("오늘도 퀴즈","오늘도 퀴즈"),105)),qt(this,"tabs"),qt(this,"activeIndex",0),qt(this,"container",new Ue),qt(this,"quizView",new Hni),qt(this,"rouletteView",new Jni),qt(this,"_currentView",null),this.height=650,this.initialize(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ initialize(){
+ this.outSideClickHide=!0,this.txtTitle.textColor=wL.DEFAULT_COLOR,this.setTitle(LG.getText("ROULETTE_1","오늘도 룰렛")),this.btnGuide=new RB("UI_Ekkorr","UI_Alarm"),this.btnGuide.x=40,this.btnGuide.y=this.txtTitle.y+.5*(this.txtTitle.height-this.btnGuide.height)+2,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ Uni.getInstance().showGuide()}
+ ),this.tabs=[this.btnRoulette,this.btnQuiz];
+ for(let t=0;
+ t<this.tabs.length;
+ t++){
+ const i=this.tabs[t],s=t;
+ i.onClick=()=>this.switchTab(s)}
+ this.layoutTabs(),this.addChild(this.container)}
+ async switchTab(t){
+ this.activeIndex=t;
+ for(let i=0;
+ i<this.tabs.length;
+ i++)this.tabs[i].selected=i===t;
+ switch(t){
+ case 0:await this.rouletteView.setData(),this.currentView=this.rouletteView;
+ break;
+ case 1:this.quizView.setData(),this.currentView=this.quizView}
+ this.updateLayout()}
+ layoutTabs(){
+ const t=this.width;
+ let i=this.tabs.length>0?(t-46-2)/this.tabs.length:200;
+ for(const e of this.tabs)e.fitWithinWidth(i,50);
+ let s=23;
+ for(let e=0;
+ e<this.tabs.length;
+ e++){
+ const t=this.tabs[e];
+ s=23+(i+2)*e,t.x=s,t.y=100}
+ }
+ async setData(){
+ let t=LG.getText("ROULETTE_1","오늘도 룰렛");
+ this.setTitle(t),this.txtTitle.x=.5*(this.width-this.txtTitle.width),this.updateLayout(),this.activeIndex=0,this.switchTab(this.activeIndex)}
+ updateLayout(){
+ this.container.y=this.tabs[0].y,this.setPositonRatioY(.5)}
+ onAdded(){
+ }
+ onRemoved(){
+ }
+ set currentView(t){
+ null!=this._currentView&&this.container.removeChild(this._currentView),this._currentView=t,null!=this._currentView&&this.container.addChild(this._currentView)}
+ get currentView(){
+ return this._currentView}
+ }
+ ;
+ zt(Qni,"QuizRoulettePopup"),qt(Qni,"instance",null);
+ let Zni=Qni;
+ const thi=class extends Ue{
+ constructor(){
+ super(),qt(this,"titleBar"),qt(this,"btnEmail"),qt(this,"btnNotice"),qt(this,"btnGoogleLogin"),qt(this,"btnAppleLogin"),qt(this,"btnOptout"),qt(this,"btnPromotion"),qt(this,"btnWithdraw"),qt(this,"btnLangChange"),qt(this,"btnLineMarketLink"),qt(this,"btnAttendReward"),qt(this,"btnQuizRoulette"),qt(this,"btnContainer"),qt(this,"requestPending",!1),this.titleBar=new yei(LG.getText("COMMON_408","서비스")),this.addChild(this.titleBar),this.btnEmail=new Kqt(LG.getText("COMMON_510","이메일 ID")),this.btnEmail.deactivatedTextColor=16777215,this.btnEmail.onClick=this.onEmailBtnClick.bind(this),this.btnNotice=new Kqt(LG.getText("COMMON_18","공지")),this.btnNotice.onClick=this.onNoticeBtnClick.bind(this),this.btnGoogleLogin=new Kqt(LG.getText("GAME_407","Google 로그인")),this.btnGoogleLogin.deactivatedTextColor=16777215,this.btnGoogleLogin.onClick=this.onGoogleLoginBtnClick.bind(this),this.btnAppleLogin=new Kqt(LG.getText("GAME_408","Apple 로그인")),this.btnAppleLogin.deactivatedTextColor=16777215,this.btnAppleLogin.onClick=this.onAppleLoginBtnClick.bind(this),this.btnOptout=new Kqt(LG.getText("COMMON_403","OPT-OUT")),this.btnOptout.deactivatedTextColor=16777215,this.btnOptout.onClick=this.onOptoutBtnClick.bind(this),this.btnPromotion=new Kqt(LG.getText("GAME_400","프로모션 코드")),this.btnPromotion.onClick=this.onPromotionBtnClick.bind(this),this.btnWithdraw=new Kqt(LG.getText("COMMON_56","게임탈퇴")),this.btnWithdraw.onClick=this.onWithdrawBtnClick.bind(this),this.btnLangChange=new Kqt(LG.getText("COMMON_54","언어변경")),this.btnLangChange.onClick=this.onLangChangeBtnClick.bind(this),this.btnLineMarketLink=new Kqt("웹마켓 점검 우회"),this.btnLineMarketLink.onClick=this.onLineMarketLinkBtnClick.bind(this),this.btnAttendReward=new Kqt(LG.getText("GAME_245","출석 보상 "));
DefeatResultDetailPopup 1 hunks, 105 statements
+ super(),qt(this,"paperContainer",new Ue),qt(this,"paperTop"),qt(this,"paperMiddle"),qt(this,"paperBottom"),qt(this,"imageSprite",new $e),qt(this,"descList",[]),qt(this,"btnCloseCustom",new FKt),qt(this,"onHideHandler",null),this.width=t.POPUP_WIDTH,this.height=t.POPUP_HEIGHT,this.bg.visible=!1,this.top.visible=!1,this.bottom.visible=!1,this.buildPaperBackground(),this.addChild(this.paperContainer),this.imageSprite.anchor.set(.5,.5),this.addChild(this.imageSprite);
+ for(let i=0;
+ i<3;
+ i++){
+ const i=new hD("",3811866,wL.DEFAULT_FONT_OPTION_18);
+ i.wordWrap=!0,i.wordWrapWidth=t.DESC_WRAP_WIDTH,i.align="center",this.addChild(i),this.descList.push(i)}
+ this.btnClose.visible=!1,this.btnCloseCustom.x=t.POPUP_WIDTH-this.btnCloseCustom.width-t.CLOSE_BTN_RIGHT_PAD,this.btnCloseCustom.y=t.CLOSE_BTN_TOP_PAD,this.btnCloseCustom.onClick=()=>this.hide(),this.addChild(this.btnCloseCustom),this.bringFrontFurniture(),this.outSideClickHide=!0}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ buildPaperBackground(){
+ this.paperTop=new $e(tS.getTexture("UI_HELP","Help_Page_up")),this.paperMiddle=new IM({
+ texture:tS.getTexture("UI_HELP","Help_Page_middle"),leftWidth:40,topHeight:40,rightWidth:40,bottomHeight:40}
+ ),this.paperMiddle.width=618,this.paperMiddle.height=511,this.paperBottom=new $e(tS.getTexture("UI_HELP","Help_Page_down")),this.paperContainer.addChild(this.paperTop),this.paperContainer.addChild(this.paperMiddle),this.paperContainer.addChild(this.paperBottom),this.layoutPaper()}
+ layoutPaper(){
+ const i=t.POPUP_WIDTH,s=t.POPUP_HEIGHT;
+ this.paperTop.x=.5*(i-this.paperTop.width),this.paperMiddle.x=.5*(i-this.paperMiddle.width),this.paperBottom.x=.5*(i-this.paperBottom.width),this.paperTop.y=0,this.paperMiddle.y=this.paperTop.height;
+ const e=s-this.paperTop.height-this.paperBottom.height;
+ e>0&&(this.paperMiddle.height=e),this.paperBottom.y=this.paperMiddle.y+this.paperMiddle.height}
+ bringFrontFurniture(){
+ const t=[this.txtTitle,this.btnCloseCustom];
+ for(const i of t)i&&i.parent===this&&(this.removeChild(i),this.addChild(i))}
+ showWith(t){
+ this.applyCurrent(t),super.show()}
+ hide(){
+ super.hide(),this.onHideHandler&&this.onHideHandler(),this.onHideHandler=null}
+ applyCurrent(i){
+ this.txtTitle.text=i.title,this.txtTitle.x=.5*(t.POPUP_WIDTH-this.txtTitle.width),this.txtTitle.y=t.TITLE_Y;
+ let s=tS.getTexture("UI_HELP",i.imgName);
+ s||(s=tS.getTexture("UI_HELP2",i.imgName)),this.imageSprite.texture=s;
+ const e=t.IMAGE_AREA_TOP,n=t.IMAGE_AREA_HEIGHT,h=t.POPUP_WIDTH-250,r=s.width||1,o=s.height||1,a=Math.min(h/r,n/o,1);
+ let c;
+ this.imageSprite.scale.set(a),this.imageSprite.x=.5*t.POPUP_WIDTH,this.imageSprite.y=e+.5*n;
+ let l,u=e+n+50,d=i.msgList.length;
+ for(let f=0;
+ f<3;
+ f++)l=i.msgList[f],c=this.descList[f],c.visible=f<d,c.text=l,l&&l.includes("※")?c.textColor=wL.COLOR_RED:c.textColor=3811866,c.x=.5*(t.POPUP_WIDTH-c.width),c.y=u,u=c.y+c.height}
+ getPopupBounds(){
+ return this.getBounds()}
+ }
+ ;
+ zt(c1t,"DefeatResultDetailPopup"),qt(c1t,"instance",null),qt(c1t,"POPUP_WIDTH",600),qt(c1t,"POPUP_HEIGHT",620),qt(c1t,"IMAGE_AREA_TOP",110),qt(c1t,"IMAGE_AREA_HEIGHT",300),qt(c1t,"DESC_WRAP_WIDTH",500),qt(c1t,"NAV_BTN_BOTTOM_PAD",50),qt(c1t,"TITLE_Y",40),qt(c1t,"CLOSE_BTN_RIGHT_PAD",20),qt(c1t,"CLOSE_BTN_TOP_PAD",18);
+ let l1t=c1t;
+ var u1t=(t=>(t[t.TRIBE=1]="TRIBE",t[t.ATTACK_TYPE=2]="ATTACK_TYPE",t[t.ENHANCE_TRANCE=3]="ENHANCE_TRANCE",t))(u1t||{
+ }
+ );
+ const d1t=class extends XO{
+ constructor(){
+ super(),qt(this,"bg"),qt(this,"icon"),qt(this,"lblTitle",new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblDesc",new hD("",11184810,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"iconInfo"),this.bg=new IM({
+ texture:tS.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=540,this.bg.height=80,this.addChild(this.bg),this.icon=new $e(tS.getTexture("UI_HELP2","Icon__Lose_Tribe")),this.icon.scale=.7,this.icon.x=10+.5*(100-this.icon.width),this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.lblTitle.x=135,this.lblTitle.y=15,this.addChild(this.lblTitle),this.lblDesc.x=this.lblTitle.x,this.lblDesc.y=this.lblTitle.y+this.lblTitle.height+5,this.addChild(this.lblDesc),this.iconInfo=new $e(tS.getTexture("UI_Ekkorr","UI_InfoYellow")),this.iconInfo.x=this.width-this.iconInfo.width-20,this.iconInfo.y=.5*(this.bg.height-this.iconInfo.height),this.addChild(this.iconInfo)}
+ setData(t){
+ this.data=t,this.icon.texture=tS.getTexture("UI_HELP2",`${
+ t.iconName}
+ `),this.lblTitle.text=LG.getText(t.nameLangId,t.name),this.lblDesc.text=LG.getText(t.descLangId,t.desc)}
+ onClick(t,i){
+ if(this.data.isComingSoon)return void WF.getInstance().showMessage("coming soon");
+ let s="",e=[],n="";
+ switch(this.data.type){
+ case 1:e.push(LG.getText("GAME_1612","종족마다 유리하거나 불리한 상성이 있습니다.")),e.push(LG.getText("GAME_1613","(화살표가 가리키는 종족에게 유리합니다.)")),e.push(LG.getText("GAME_1614","유리한 종족의 영웅을 편성해보세요.")),n="Img__Lose_Tribe";
+ break;
+ case 2:e.push(LG.getText("GAME_1615","일부 적은 특정 공격 유형을 막는 보호막을 보유합니다.")),e.push(LG.getText("GAME_1616","보호막에 유효한 공격 유형의 영웅을 편성해보세요.")),n="Img__Lose_AttackType";
+ break;
+ case 3:e.push(LG.getText("GAME_1617","영웅은 병영에서 진화·초월하여 더 강해질 수 있습니다.")),e.push(LG.getText("GAME_1618","※ 진화 전 입장 등급 제한을 확인하세요!")),n="Img__Lose_Trans"}
+ s=this.lblTitle.text,l1t.getInstance().showWith({
+ title:s,msgList:e,imgName:n}
+ )}
+ }
+ ;
+ zt(d1t,"DefeatResultItemRenderer");
+ let f1t=d1t;
+ const p1t=class t extends wG{
+ constructor(){
+ super(),qt(this,"imgDefeat",new $e),qt(this,"list"),qt(this,"btnConfirm",new HU("","","확인",.8,200,70)),qt(this,"onConfirm",null),qt(this,"autoReturnTimer",null),qt(this,"listData",[]),this.title=LG.getText("GAME_74","던전"),this.imgDefeat.texture=tS.getTexture("UI_HELP2","Img__Lose_Top"),this.imgDefeat.scale=.7,this.imgDefeat.x=.5*(this.width-this.imgDefeat.width),this.imgDefeat.y=60,this.addChild(this.imgDefeat),this.listData.push({
+ type:u1t.TRIBE,name:"종족 상성",desc:"유리한 종족을 편성해보세요.",nameLangId:"GAME_1606",descLangId:"GAME_1607",iconName:"Icon__Lose_Tribe"}
+ ),this.listData.push({
+ type:u1t.ATTACK_TYPE,name:"공격 유형",desc:"물리·마법 공격을 확인해보세요.",nameLangId:"GAME_1608",descLangId:"GAME_1609",iconName:"Icon__Lose_AttackType"}
+ ),this.listData.push({
+ type:u1t.ENHANCE_TRANCE,name:"진화-초월",desc:"유닛을 더 성장시켜 보세요.",nameLangId:"GAME_1610",descLangId:"GAME_1611",iconName:"Icon__Lose_Trans"}
+ ),this.list=new qO(f1t,this.width-40,260,5),this.list.x=20,this.list.y=this.imgDefeat.y+this.imgDefeat.height+20,this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=LG.getText("COMMON_1","확인"),this.btnConfirm.color=HU.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.contentContainer.addChild(this.imgDefeat,this.list),this.btnClose.visible=!0,this.outSideClickHide=!1}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onConfirmClick(){
+ this.hide()}
+ hide(){
+ this.clearAutoReturnTimer(),ioi.getInstance().returnToIdleBattle(),super.hide(),this.onConfirm&&(this.onConfirm(),this.onConfirm=null)}
+ startAutoReturnTimer(){
+ this.clearAutoReturnTimer(),this.autoReturnTimer=setTimeout(()=>{
+ this.onConfirmClick()}
+ ,t.AUTO_RETURN_DELAY)}
+ clearAutoReturnTimer(){
+ this.autoReturnTimer&&(clearTimeout(this.autoReturnTimer),this.autoReturnTimer=null)}
+ showDefeat(t=null,i=""){
+ this.onConfirm=t,this.title=i||LG.getText("GAME_74","던전"),this.btnConfirm.color=HU.RED,this.btnConfirm.text=LG.getText("COMMON_1","확인"),this.list.dataProvider=this.listData,this.updateLayout(),super.show()}
+ updateLayout(){
+ this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=this.list.y+this.list.height+20,this.height=this.list.y+this.list.height+20}
+ getDefaultPositionY(){
+ return.5*zA.stageHeight}
+ onBackButton(){
+ return!0}
+ }
+ ;
+ zt(p1t,"DefeatResultPopup"),qt(p1t,"_instance"),qt(p1t,"AUTO_RETURN_DELAY",5e3);
+ let g1t=p1t;
+ const m1t=class t extends mJt{
+ constructor(){
TowerClearDeckPopup 1 hunks, 87 statements
- super(),qt(this,"vsImage",new $e(tS.getTexture("UI_Ekkorr","UI_VS"))),qt(this,"lblTitle",new hL("",16777215,wD.DEFAULT_OUTLINE_FONT_OPTION_17)),qt(this,"allyBtns",[]),qt(this,"enemyBtns",[]),qt(this,"battleContainer",new Ue),qt(this,"btnStart",new oG("시작")),qt(this,"lblCapacity",new hL("",16777215,wD.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblEntryText",new hL("",16768358,wD.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"heroList"),qt(this,"selectedSlot",-1),qt(this,"teamKindNums",[]),qt(this,"teamTrans",[]),qt(this,"heroVOs",[]),qt(this,"floorVO",null),qt(this,"enemyOverlays",[]),qt(this,"maxAllies",12);
+ super(),qt(this,"btnTabRecent"),qt(this,"btnTabBest"),qt(this,"lblEmpty"),qt(this,"rows",[]),qt(this,"currentTab","recent"),qt(this,"recentList",[]),qt(this,"bestList",[]),qt(this,"applyCallback",null),this.outSideClickHide=!0,this.width=640,this.height=640,this.title=LG.getText("GAME_1622","클리어덱");
+ const i=this.width-50;
+ this.btnTabRecent=new oG(LG.getText("GAME_1623","최근")),this.btnTabRecent.color=oG.BLUE,this.btnTabRecent.width=110,this.btnTabRecent.height=34,this.btnTabRecent.x=25,this.btnTabRecent.y=70,this.btnTabRecent.onClick=()=>this.setTab("recent"),this.contentContainer.addChild(this.btnTabRecent),this.btnTabBest=new oG(LG.getText("GAME_1624","추천")),this.btnTabBest.color=oG.BLUE,this.btnTabBest.width=110,this.btnTabBest.height=34,this.btnTabBest.x=143,this.btnTabBest.y=70,this.btnTabBest.onClick=()=>this.setTab("best"),this.contentContainer.addChild(this.btnTabBest);
+ const s=this.btnTabRecent.y+this.btnTabRecent.height+12;
+ for(let e=0;
+ e<t.ROW_COUNT;
+ e++){
+ const n=new Ue;
+ n.x=25,n.y=s+98*e,this.contentContainer.addChild(n);
+ const h=new DB;
+ h.setIndex(2),h.width=i,h.height=92,n.addChild(h);
+ const r=new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_16);
+ r.textColor=16777215,r.x=12,r.y=8,n.addChild(r);
+ const o=new oG(LG.getText("GAME_1626","적용"));
+ o.color=oG.GREEN,o.width=86,o.height=28,o.x=i-o.width-10,o.y=5,o.onClick=()=>this.onClickApply(e),n.addChild(o);
+ const a=new oG(t.likeText(0));
+ a.color=oG.BROWN,a.width=110,a.height=28,a.x=o.x-a.width-8,a.y=5,a.onClick=()=>this.onClickLike(e),n.addChild(a);
+ const c=[];
+ for(let i=0;
+ i<t.SLOT_COUNT;
+ i++){
+ const t=new M5;
+ t.scale=.42,t.x=10+47.5*i,t.y=40,n.addChild(t),c.push(t)}
+ this.rows.push({
+ root:n,lblName:r,btnLike:a,btnApply:o,icons:c}
+ )}
+ this.lblEmpty=new hD(LG.getText("GAME_1627","아직 클리어한 유저가 없습니다."),16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblEmpty.textColor=13421772,this.lblEmpty.y=s+180,this.lblEmpty.visible=!1,this.contentContainer.addChild(this.lblEmpty)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ static likeText(t){
+ return LG.getValueReplace("GAME_1625","##",t,`좋아요 ${
+ t}
+ `)}
+ async open(t,i){
+ const s=await pL.getInstance().tower.getClearDecks(t,!0);
+ s&&!1!==s.success&&s.body?(this.applyCallback=i,this.recentList=Array.isArray(s.body.recent)?s.body.recent:[],this.bestList=Array.isArray(s.body.best)?s.body.best:[],this.title=`${
+ LG.getText("GAME_1622","클리어덱")}
+  - ${
+ t}
+ F`,this.setTab("recent"),this.show()):SG.getInstance().showError(s)}
+ setTab(t){
+ this.currentTab=t,this.btnTabRecent.alpha="recent"===t?1:.5,this.btnTabBest.alpha="best"===t?1:.5,this.renderList()}
+ getCurrentList(){
+ return"recent"===this.currentTab?this.recentList:this.bestList}
+ renderList(){
+ const i=this.getCurrentList();
+ this.lblEmpty.visible=0===i.length,this.lblEmpty.visible&&(this.lblEmpty.x=.5*(this.width-this.lblEmpty.width));
+ for(let s=0;
+ s<this.rows.length;
+ s++){
+ const e=this.rows[s],n=i[s];
+ if(!n){
+ e.root.visible=!1;
+ continue}
+ e.root.visible=!0,e.lblName.text=`${
+ n.name}
+  ( Lv. ${
+ n.knightLevel}
+  )`,e.btnLike.text=t.likeText(n.likeCount),e.btnLike.alpha=n.liked||n.mine?.5:1;
+ const h=String(n.deck||"").split("|");
+ for(let i=0;
+ i<t.SLOT_COUNT;
+ i++){
+ const t=e.icons[i],s=(h[i]||"0_0").split("_"),n=parseInt(s[0],10)||0,r=parseInt(s[1],10)||0;
+ n>0?(t.visible=!0,t.setDataWithKindNum(n,r)):t.visible=!1}
+ }
+ }
+ async onClickLike(t){
+ const i=this.getCurrentList()[t];
+ if(!i)return;
+ if(i.mine)return void WF.getInstance().showMessage(LG.getText("GAME_1629","자신의 덱에는 좋아요를 누를 수 없습니다."));
+ if(i.liked)return void WF.getInstance().showMessage(LG.getText("GAME_1628","이미 좋아요를 눌렀습니다."));
+ const s=await pL.getInstance().tower.likeClearDeck(i.id,!0);
+ if(!s||!1===s.success||!s.body)return void SG.getInstance().showError(s);
+ const e=Number(s.body.likeCount??i.likeCount+1);
+ for(const n of[this.recentList,this.bestList])for(const t of n)t.id===i.id&&(t.likeCount=e,t.liked=!0);
+ this.renderList()}
+ onClickApply(t){
+ const i=this.getCurrentList()[t];
+ i&&this.applyCallback&&(this.applyCallback(i.deck),this.hide())}
+ }
+ ;
+ zt(Y0t,"TowerClearDeckPopup"),qt(Y0t,"_instance"),qt(Y0t,"SLOT_COUNT",12),qt(Y0t,"ROW_COUNT",5);
+ let X0t=Y0t;
+ const J0t=class t extends cqt{
+ constructor(){
+ super(),qt(this,"vsImage",new $e(tS.getTexture("UI_Ekkorr","UI_VS"))),qt(this,"lblTitle",new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_17)),qt(this,"allyBtns",[]),qt(this,"enemyBtns",[]),qt(this,"battleContainer",new Ue),qt(this,"btnStart",new oG("시작")),qt(this,"btnClearAll"),qt(this,"btnClearDecks"),qt(this,"lblCapacity",new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblEntryText",new hD("",16768358,wL.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"heroList"),qt(this,"selectedSlot",-1),qt(this,"teamKindNums",[]),qt(this,"teamTrans",[]),qt(this,"heroVOs",[]),qt(this,"floorVO",null),qt(this,"enemyOverlays",[]),qt(this,"maxAllies",12);
SecretPetBuyPopup 10 hunks, 52 statements
- super(),qt(this,"onConfirm",null),qt(this,"lblDesc"),qt(this,"list"),qt(this,"lblNoMaterial"),qt(this,"lblConfirmText"),qt(this,"btnConfirm"),qt(this,"slot",null),qt(this,"materialKindNums",[]),qt(this,"selectedKindNum",-1),this.width=640,this.title=DG.getText("GAME_1523","펫 조각 구입 확인"),this.lblDesc=new hL("",wD.COLOR_DEEP_SKYBLUE,wD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblDesc.x=24,this.lblDesc.y=68,this.lblDesc.text=DG.getText("GAME_1524","교환할 펫조각을 선택해주세요."),this.addChild(this.lblDesc);
+ super(),qt(this,"onConfirm",null),qt(this,"lblDesc"),qt(this,"list"),qt(this,"lblNoMaterial"),qt(this,"lblCounter"),qt(this,"lblConfirmText"),qt(this,"btnConfirm"),qt(this,"slot",null),qt(this,"materialKindNums",[]),qt(this,"selectedKindNums",[]),this.width=640,this.title=LG.getText("GAME_1523","펫 조각 구입 확인"),this.lblDesc=new hD("",wL.COLOR_DEEP_SKYBLUE,wL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblDesc.x=24,this.lblDesc.y=68,this.lblDesc.text=LG.getText("GAME_1524","교환할 펫조각을 선택해주세요."),this.addChild(this.lblDesc);
- this.list=new U5(C2t,630,288),this.list.x=5,this.list.y=t,this.addChild(this.list),this.lblNoMaterial=new hL("",10066329,wD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblNoMaterial.text=DG.getText("GAME_1525","재료로 사용할 5성 펫이 없습니다."),this.lblNoMaterial.x=.5*(640-this.lblNoMaterial.width),this.lblNoMaterial.y=t+100,this.lblNoMaterial.visible=!1,this.addChild(this.lblNoMaterial),this.lblConfirmText=new hL("",13421772,wD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblConfirmText.x=24,this.lblConfirmText.y=t+288+10,this.addChild(this.lblConfirmText),wD.setLabelWrapWidth(this.lblConfirmText,this.width-2*this.lblConfirmText.x),this.btnConfirm=new oG(DG.getText("COMMON_1","확인")),this.btnConfirm.color=oG.GREEN,this.btnConfirm.width=200,this.btnConfirm.height=55,this.btnConfirm.x=.5*(640-this.btnConfirm.width),this.btnConfirm.y=this.lblConfirmText.y+60,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm),this.bg.height=this.btnConfirm.y+this.btnConfirm.height+24}
+ this.list=new U5(D2t,630,288),this.list.x=5,this.list.y=t,this.addChild(this.list),this.lblNoMaterial=new hD("",10066329,wL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblNoMaterial.text=LG.getText("GAME_1525","재료로 사용할 5성 펫이 없습니다."),this.lblNoMaterial.x=.5*(640-this.lblNoMaterial.width),this.lblNoMaterial.y=t+100,this.lblNoMaterial.visible=!1,this.addChild(this.lblNoMaterial),this.lblCounter=new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblCounter.x=24,this.lblCounter.y=t+288+10,this.addChild(this.lblCounter),this.lblConfirmText=new hD("",13421772,wL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblConfirmText.x=24,this.lblConfirmText.y=this.lblCounter.y+26,this.addChild(this.lblConfirmText),wL.setLabelWrapWidth(this.lblConfirmText,this.width-2*this.lblConfirmText.x),this.btnConfirm=new oG(LG.getText("COMMON_1","확인")),this.btnConfirm.color=oG.GREEN,this.btnConfirm.width=200,this.btnConfirm.height=55,this.btnConfirm.x=.5*(640-this.btnConfirm.width),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm),this.layoutBottom(66)}
+ layoutBottom(t){
+ const i=Math.max(66,t),s=this.lblConfirmText.y+i+8;
+ s!==this.btnConfirm.y&&(this.btnConfirm.y=s,this.height=s+this.btnConfirm.height+24)}
- this.slot=t,this.selectedKindNum=-1,this.title=DG.getText("GAME_1523","펫 조각 구입 확인"),this.lblDesc.text=DG.getText("GAME_1524","교환할 펫조각을 선택해주세요."),this.lblNoMaterial.text=DG.getText("GAME_1525","재료로 사용할 5성 펫이 없습니다."),this.lblNoMaterial.x=.5*(640-this.lblNoMaterial.width),this.btnConfirm.text=DG.getText("COMMON_1","확인"),this.materialKindNums=ux.getInstance().getSecretMaterialPets(t.cost,t.kindNum).map(t=>t.kindNum),C2t.onPetSelect=this.select.bind(this),C2t.isSelected=t=>this.selectedKindNum===t,this.list.dataProvider=tx.chunkArray(this.materialKindNums,3),this.list.showTopItem(),this.lblNoMaterial.visible=0===this.materialKindNums.length,this.updateConfirmText()}
+ this.slot=t,this.selectedKindNums=[],this.title=LG.getText("GAME_1523","펫 조각 구입 확인"),this.lblDesc.text=LG.getText("GAME_1524","교환할 펫조각을 선택해주세요."),this.lblNoMaterial.text=LG.getText("GAME_1525","재료로 사용할 5성 펫이 없습니다."),this.lblNoMaterial.x=.5*(640-this.lblNoMaterial.width),this.btnConfirm.text=LG.getText("COMMON_1","확인"),this.materialKindNums=ux.getInstance().getSecretMaterialPets(1,t.kindNum).map(t=>t.kindNum),D2t.onPetSelect=this.select.bind(this),D2t.getConsumeAmount=t=>this.getConsumeAmount(t),this.list.dataProvider=tx.chunkArray(this.materialKindNums,3),this.list.showTopItem(),this.lblNoMaterial.visible=0===this.materialKindNums.length,this.updateSummary()}
+ buildPlan(){
+ var t;
+ if(!this.slot)return[];
+ const i=ux.getInstance(),s=[];
+ let e=this.slot.cost;
+ for(const n of this.selectedKindNums){
+ if(e<=0)break;
+ const h=(null==(t=i.getPetVO(n))?void 0:t.piece)??0,r=Math.min(e,h);
+ r<=0||(s.push({
+ kindNum:n,amount:r}
+ ),e-=r)}
+ return s}
+ getSelectedTotal(){
+ return this.buildPlan().reduce((t,i)=>t+i.amount,0)}
+ getConsumeAmount(t){
+ var i;
+ return(null==(i=this.buildPlan().find(i=>i.kindNum===t))?void 0:i.amount)??0}
+ isFulfilled(){
+ return!!this.slot&&this.getSelectedTotal()>=this.slot.cost}
- this.selectedKindNum=this.selectedKindNum===t?-1:t,this.updateConfirmText(),this.refreshListSelection()}
+ const i=this.selectedKindNums.indexOf(t);
+ if(i>=0)this.selectedKindNums.splice(i,1);
+ else{
+ if(this.isFulfilled())return void WF.getInstance().showMessage(LG.getText("GAME_1632","교환에 필요한 펫 조각을 모두 선택했습니다."));
+ this.selectedKindNums.push(t)}
+ this.updateSummary(),this.refreshListSelection()}
- updateConfirmText(){
- var t,i;
- if(!this.slot||this.selectedKindNum<=0)return void(this.lblConfirmText.text="");
- const s=ux.getInstance(),e=DG.getText(`PET_NAME_${
- this.selectedKindNum}
- `,(null==(t=s.getBookVO(this.selectedKindNum))?void 0:t.name)??""),n=DG.getText(`PET_NAME_${
+ updateSummary(){
+ var t;
+ if(!this.slot)return this.lblCounter.text="",this.lblConfirmText.text="",void(this.btnConfirm.activated=!1);
+ const i=this.getSelectedTotal(),s=this.slot.cost,e=i>=s;
+ if(this.lblCounter.text=LG.getValueReplaceMulti("GAME_1631",["##","@@"],[i,s],`선택한 펫 조각: ${
+ i}
+ /${
+ s}
+ `),this.lblCounter.textColor=e?16777215:16737894,e){
+ const i=ux.getInstance(),e=this.buildPlan().map(t=>{
+ var s;
+ return LG.getText(`PET_NAME_${
+ t.kindNum}
+ `,(null==(s=i.getBookVO(t.kindNum))?void 0:s.name)??"")}
+ ).join(", "),n=LG.getText(`PET_NAME_${
- "],[e,this.slot.cost,n,this.slot.piece],`[${
+ "],[e,s,n,this.slot.piece],`[${
- this.slot.cost}
+ s}
+ else this.lblConfirmText.text="";
+ this.layoutBottom(e?this.lblConfirmText.height:0),this.btnConfirm.activated=e}
- if(this.selectedKindNum<=0)return void WF.getInstance().showMessage(DG.getText("GAME_1524","교환할 펫조각을 선택해주세요."));
- const i=this.selectedKindNum;
+ if(!this.isFulfilled())return void WF.getInstance().showMessage(LG.getText("GAME_1524","교환할 펫조각을 선택해주세요."));
+ const i=this.buildPlan();
GuildWarBattleController 13 hunks, 47 statements
- super(),qt(this,"battleType",WU.GUILD_WAR),qt(this,"currentAllyOffsets",[]),qt(this,"currentEnemyOffsets",[]),qt(this,"battleMode",1),qt(this,"mapIndex",1),qt(this,"zoomLevel",.7),qt(this,"prevGameScale",1),qt(this,"prevGameX",0),qt(this,"prevGameY",0),qt(this,"prevBackgroundVisible",!0),qt(this,"prevZoomEnabled",!0),qt(this,"hasViewStateBackup",!1),qt(this,"heroKindNums",[60,58,78,54,56]),qt(this,"soldierKindNums",[1,4,7,20,13]),qt(this,"enemyHeroKindNums",[78,78,78,78,78]),qt(this,"enemySoldierKindNums",[20,9,14,8,21]),qt(this,"allyCorpSoldierTiers",[null,null,null,null,null]),qt(this,"enemyCorpSoldierTiers",[null,null,null,null,null]),qt(this,"allyKnightLevel",1),qt(this,"enemyKnightLevel",1),qt(this,"enemyHeroLevelBonus",0),qt(this,"onComplete",null),qt(this,"onAfterReturnToIdle",null),qt(this,"lastReward",{
+ super(),qt(this,"battleType",WU.GUILD_WAR),qt(this,"currentAllyOffsets",[]),qt(this,"currentEnemyOffsets",[]),qt(this,"battleMode",1),qt(this,"mapIndex",1),qt(this,"zoomLevel",.7),qt(this,"prevGameScale",1),qt(this,"prevGameX",0),qt(this,"prevGameY",0),qt(this,"prevBackgroundVisible",!0),qt(this,"prevZoomEnabled",!0),qt(this,"hasViewStateBackup",!1),qt(this,"heroKindNums",[60,58,78,54,56]),qt(this,"soldierKindNums",[1,4,7,20,13]),qt(this,"enemyHeroKindNums",[78,78,78,78,78]),qt(this,"enemySoldierKindNums",[20,9,14,8,21]),qt(this,"allyCorpSoldierTiers",[null,null,null,null,null]),qt(this,"enemyCorpSoldierTiers",[null,null,null,null,null]),qt(this,"allyKnightLevel",1),qt(this,"enemyKnightLevel",1),qt(this,"allyHeroTrans",null),qt(this,"enemyHeroTrans",null),qt(this,"allyTransPoints",null),qt(this,"enemyTransPoints",null),qt(this,"allyPetBuffs",null),qt(this,"enemyPetBuffs",null),qt(this,"enemyHeroLevelBonus",0),qt(this,"onComplete",null),qt(this,"onAfterReturnToIdle",null),qt(this,"lastReward",{
- this.allyKnightLevel=Math.max(0,i.allyKnightLevel??1),this.enemyKnightLevel=Math.max(0,i.enemyKnightLevel??1),this.enemyHeroLevelBonus=Math.max(0,i.enemyHeroLevelBonus??0)}
+ this.allyKnightLevel=Math.max(0,i.allyKnightLevel??1),this.enemyKnightLevel=Math.max(0,i.enemyKnightLevel??1),this.enemyHeroLevelBonus=Math.max(0,i.enemyHeroLevelBonus??0),this.allyHeroTrans=i.allyHeroTrans??null,this.enemyHeroTrans=i.enemyHeroTrans??null,this.allyTransPoints=i.allyTransPoints??null,this.enemyTransPoints=i.enemyTransPoints??null,this.allyPetBuffs=i.allyPetBuffs??null,this.enemyPetBuffs=i.enemyPetBuffs??null}
+ try{
+ await this.startBattleImpl()}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleImpl(){
+ var e;
- const i=t.ALLY_HERO_X+a-t.HORIZONTAL_START_OFFSET,h=s?i:t.FIELD_WIDTH-i+t.HORIZONTAL_ENEMY_EXTRA_OFFSET,r=await this.spawnUnit(n,h,e,s,!1,o);
+ const r=t.ALLY_HERO_X+c-t.HORIZONTAL_START_OFFSET,o=s?r:t.FIELD_WIDTH-r+t.HORIZONTAL_ENEMY_EXTRA_OFFSET,l=await this.spawnUnit(h,o,n,s,!1,a,null==(e=s?this.allyHeroTrans:this.enemyHeroTrans)?void 0:e[i]);
+ var e;
- const t=await this.spawnUnit(e,p,v,s,!1,r);
+ const t=await this.spawnUnit(n,g,_,s,!1,o,null==(e=s?this.allyHeroTrans:this.enemyHeroTrans)?void 0:e[i]);
- async spawnUnit(i,s,e,n,h,r){
+ async spawnUnit(i,s,e,n,h,r,o){
- const c=t.TRANS_OVERRIDES.get(i)??0;
+ const l="number"==typeof o&&Number.isFinite(o)?Math.max(0,o):t.TRANS_OVERRIDES.get(i)??0;
- if(u.id=-1,u.kindNum=i,u.trans=c,u.level=l,u.enhance=0,this.spawnedVOs.push(u),a.setData(u),this.applyRawBvoStats(a,i,c,l),a.numBlock=0,a.initDelay=0,a.showTombstone=!1,a.maxRevive=0,a.reviveInterval=0,a.totalDamageDealt=0,a.aggressiveRetarget=!0,a.detectRange=h?1333:1500,a.detectRange2=a.detectRange*a.detectRange,h&&a.unitType===ex.RANGE){
+ d.id=-1,d.kindNum=i,d.trans=l,d.level=u,d.enhance=0,this.spawnedVOs.push(d),c.setData(d);
+ const f=_x.getInstance().getTransPointMultiplierFrom(n?this.allyTransPoints:this.enemyTransPoints,i);
+ if(this.applyRawBvoStats(c,i,l,u,f),this.applyPetContextBuffs(c,n),c.numBlock=0,c.initDelay=0,c.showTombstone=!1,c.maxRevive=0,c.reviveInterval=0,c.totalDamageDealt=0,c.aggressiveRetarget=!0,c.detectRange=h?1333:1500,c.detectRange2=c.detectRange*c.detectRange,h&&c.unitType===ex.RANGE){
- applyRawBvoStats(t,i,s=0,e=1){
+ applyPetContextBuffs(i,s){
+ const e=s?this.allyPetBuffs:this.enemyPetBuffs;
+ if(!e||0===e.length)return;
+ if(i.isCastle)return;
+ const n=new Set(["A"]),h=t.PET_TRIBE_PREFIX[i.tribe];
+ h&&n.add(h);
+ const r=new Map;
+ for(const t of e)n.has(t.target)&&r.set(t.stat,(r.get(t.stat)??0)+t.value);
+ if(0===r.size)return;
+ const o=zt(t=>1+(r.get(t)??0)/100,"multOf"),a=o("HU");
+ 1!==a&&(i.baseMaxHp*=a,i.orgMaxHp*=a,i.maxHp*=a,i.hp=i.maxHp,i.health=i.maxHp);
+ const c=o("AU");
+ 1!==c&&(i.baseAtkDmg*=c,i.orgAtkDmg*=c,i.atkDmg*=c);
+ const l=o("DU");
+ 1!==l&&(i.baseDef*=l,i.orgDef*=l,i.def*=l);
+ const u=o("ASU");
+ 1!==u&&(i.atkDuration/=u,i.orgAtkDuration=i.atkDuration,i.orgAtkSpd=1e4/i.atkDuration);
+ const d=o("MSU");
+ 1!==d&&(i.baseMoveSpd*=d,i.orgMoveSpd*=d,i.moveSpd*=d);
+ const f=o("ARU");
+ 1!==f&&(i.atkRange*=f,i.orgAtkRange=i.atkRange,i.atkRange2=i.atkRange*i.atkRange);
+ const p=o("CPU");
+ 1!==p&&(i.critChance*=p,i.orgCritChance=i.critChance);
+ const g=o("CDU");
+ 1!==g&&(i.critDmg*=g,i.orgCritDmg=i.critDmg)}
+ applyRawBvoStats(t,i,s=0,e=1,n=1){
- const h=(1+.4*Math.max(0,s))*Math.pow(1.03,Math.max(0,e-1));
+ const r=(1+.4*Math.max(0,s))*Math.pow(1.03,Math.max(0,e-1))*Math.max(1,n);
- zt(OJt,"GuildWarBattleController"),qt(OJt,"instance"),qt(OJt,"FIELD_WIDTH",640),qt(OJt,"FIELD_HEIGHT",1160),qt(OJt,"CORP_COUNT",5),qt(OJt,"SOLDIER_ROWS",10),qt(OJt,"SOLDIER_COLS",3),qt(OJt,"HORIZONTAL_CORP_ROW",[0,2,4,1,3]),qt(OJt,"SOLDIER_X_SPACING",35),qt(OJt,"SOLDIER_Y_SPACING",24),qt(OJt,"ALLY_HERO_X",40),qt(OJt,"ALLY_SOLDIER_X_START",90),qt(OJt,"HORIZONTAL_START_OFFSET",40),qt(OJt,"HORIZONTAL_ENEMY_EXTRA_OFFSET",0),qt(OJt,"CORP_X_MIN",110),qt(OJt,"CORP_X_MAX",550),qt(OJt,"CORP_X_START_M2",[110,270,430,130,340]),qt(OJt,"REAR_CORP_START_INDEX_M2",3),qt(OJt,"FRONT_CORP_PERP_COUNT_M2",6),qt(OJt,"FRONT_CORP_ALONG_COUNT_M2",5),qt(OJt,"FRONT_CORP_X_SPACING_M2",24),qt(OJt,"FRONT_CORP_Y_SPACING_M2",20),qt(OJt,"REAR_CORP_PERP_COUNT_M2",10),qt(OJt,"REAR_CORP_ALONG_COUNT_M2",3),qt(OJt,"REAR_CORP_X_SPACING_M2",20),qt(OJt,"REAR_CORP_Y_SPACING_M2",20),qt(OJt,"ALLY_FRONT_Y_M2",980),qt(OJt,"ENEMY_FRONT_Y_M2",180),qt(OJt,"SOLDIER_HERO_GAP_M2",35),qt(OJt,"OFFSET_REAR",-250),qt(OJt,"OFFSET_FRONT",0),qt(OJt,"MARCH_ADVANCE_DISTANCE",1e3),qt(OJt,"TIME_LIMIT_FRAMES",7200),qt(OJt,"ZOOM_LEVELS",[1,.7,.4]),qt(OJt,"COUNTER_UPDATE_INTERVAL",15),qt(OJt,"DAMAGE_METER_Y_DEFAULT",1160),qt(OJt,"DAMAGE_METER_Y_RAISED",910),qt(OJt,"METER_ICON_H",18),qt(OJt,"METER_ROW_H",19),qt(OJt,"METER_RANK_W",18),qt(OJt,"METER_COUNT_W",28),qt(OJt,"METER_VALUE_W",50),qt(OJt,"METER_COL_W",320),qt(OJt,"METER_HEADER_H",20),qt(OJt,"METER_UPDATE_INTERVAL",30),qt(OJt,"METER_RANK_STYLE",{
+ zt(OJt,"GuildWarBattleController"),qt(OJt,"instance"),qt(OJt,"FIELD_WIDTH",640),qt(OJt,"FIELD_HEIGHT",1160),qt(OJt,"CORP_COUNT",5),qt(OJt,"SOLDIER_ROWS",10),qt(OJt,"SOLDIER_COLS",3),qt(OJt,"HORIZONTAL_CORP_ROW",[0,2,4,1,3]),qt(OJt,"SOLDIER_X_SPACING",35),qt(OJt,"SOLDIER_Y_SPACING",24),qt(OJt,"ALLY_HERO_X",40),qt(OJt,"ALLY_SOLDIER_X_START",90),qt(OJt,"HORIZONTAL_START_OFFSET",40),qt(OJt,"HORIZONTAL_ENEMY_EXTRA_OFFSET",0),qt(OJt,"CORP_X_MIN",110),qt(OJt,"CORP_X_MAX",550),qt(OJt,"CORP_X_START_M2",[110,270,430,130,340]),qt(OJt,"REAR_CORP_START_INDEX_M2",3),qt(OJt,"FRONT_CORP_PERP_COUNT_M2",6),qt(OJt,"FRONT_CORP_ALONG_COUNT_M2",5),qt(OJt,"FRONT_CORP_X_SPACING_M2",24),qt(OJt,"FRONT_CORP_Y_SPACING_M2",20),qt(OJt,"REAR_CORP_PERP_COUNT_M2",10),qt(OJt,"REAR_CORP_ALONG_COUNT_M2",3),qt(OJt,"REAR_CORP_X_SPACING_M2",20),qt(OJt,"REAR_CORP_Y_SPACING_M2",20),qt(OJt,"ALLY_FRONT_Y_M2",980),qt(OJt,"ENEMY_FRONT_Y_M2",180),qt(OJt,"SOLDIER_HERO_GAP_M2",35),qt(OJt,"OFFSET_REAR",-250),qt(OJt,"OFFSET_FRONT",0),qt(OJt,"MARCH_ADVANCE_DISTANCE",1e3),qt(OJt,"TIME_LIMIT_FRAMES",7200),qt(OJt,"ZOOM_LEVELS",[1,.7,.4]),qt(OJt,"PET_TRIBE_PREFIX",{
+ 1:"H",2:"E",3:"U",4:"O"}
+ ),qt(OJt,"COUNTER_UPDATE_INTERVAL",15),qt(OJt,"DAMAGE_METER_Y_DEFAULT",1160),qt(OJt,"DAMAGE_METER_Y_RAISED",910),qt(OJt,"METER_ICON_H",18),qt(OJt,"METER_ROW_H",19),qt(OJt,"METER_RANK_W",18),qt(OJt,"METER_COUNT_W",28),qt(OJt,"METER_VALUE_W",50),qt(OJt,"METER_COL_W",320),qt(OJt,"METER_HEADER_H",20),qt(OJt,"METER_UPDATE_INTERVAL",30),qt(OJt,"METER_RANK_STYLE",{
TowerReadyPopup 5 hunks, 46 statements
- this.lblEntryText.x=15,this.lblEntryText.y=n,this.addChild(this.lblEntryText);
+ this.lblEntryText.x=15,this.lblEntryText.y=h,this.addChild(this.lblEntryText),this.btnClearAll=new oG(LG.getText("GAME_1620","모두 비우기")),this.btnClearAll.color=oG.BROWN,this.btnClearAll.width=120,this.btnClearAll.height=30,this.btnClearAll.x=this.bg.width-this.btnClearAll.width-15,this.btnClearAll.y=h-5,this.btnClearAll.onClick=()=>this.onClearAllClick(),this.addChild(this.btnClearAll),this.btnClearDecks=new oG(LG.getText("GAME_1622","클리어덱")),this.btnClearDecks.color=oG.BLUE,this.btnClearDecks.width=120,this.btnClearDecks.height=30,this.btnClearDecks.x=this.btnClearAll.x-this.btnClearDecks.width-8,this.btnClearDecks.y=this.btnClearAll.y,this.btnClearDecks.onClick=()=>this.onClickClearDecks(),this.btnClearDecks.visible=t.SHOW_CLEAR_DECKS,this.addChild(this.btnClearDecks);
+ onClearAllClick(){
+ this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0),this.selectedSlot=-1,this.updateAllyButtons(),this.updateHeroList()}
+ buildDeckString(){
+ const t=[];
+ for(let i=0;
+ i<12;
+ i++){
+ const s=this.teamKindNums[i];
+ t.push(s>0?`${
+ s}
+ _${
+ this.teamTrans[i]||0}
+ `:"0_0")}
+ return t.join("|")}
+ onClickClearDecks(){
+ this.floorVO&&X0t.getInstance().open(this.floorVO.floor,this.applyRecommendedDeck.bind(this))}
+ applyRecommendedDeck(t){
+ const i=t.split("|");
+ if(12!==i.length)return;
+ const s=this.calcTotalInventory(),e=new Map,n=zt((t,i)=>{
+ const n=[i];
+ for(let s=6;
+ s>=0;
+ s--)s!==i&&n.push(s);
+ for(const h of n){
+ const i=`${
+ t}
+ _${
+ h}
+ `,n=s.get(i)||0,r=e.get(i)||0;
+ if(r<n)return e.set(i,r+1),h}
+ return-1}
+ ,"pickOwnedTrans");
+ for(let h=0;
+ h<12;
+ h++){
+ const t=i[h].split("_"),s=parseInt(t[0],10)||0,e=parseInt(t[1],10)||0;
+ if(s<=0){
+ this.teamKindNums[h]=-1,this.teamTrans[h]=0;
+ continue}
+ const r=n(s,e);
+ r<0?(this.teamKindNums[h]=-1,this.teamTrans[h]=0):(this.teamKindNums[h]=s,this.teamTrans[h]=r)}
+ this.selectedSlot=-1,this.pruneInvalidTeamEntries(),this.clampTeamToMax(),this.updateAllyButtons(),this.updateHeroList(),this.saveTeamToLocal(),WF.getInstance().showMessage(LG.getText("GAME_1630","덱을 적용했습니다.\n보유하지 않았거나 입장 조건에 맞지 않는 영웅은 제외됩니다."))}
- const t=await pD.getInstance().tower.enter(this.floorVO.floor,!0);
+ const t=await pL.getInstance().tower.enter(this.floorVO.floor,this.buildDeckString(),!0);
- zt(Y0t,"TowerReadyPopup"),qt(Y0t,"_instance");
+ zt(J0t,"TowerReadyPopup"),qt(J0t,"_instance"),qt(J0t,"SHOW_CLEAR_DECKS",!1);
ActiveSkillMain 5 hunks, 41 statements
+ applyDevForcedSkills(){
+ const i=t.DEV_FORCE_SKILLS;
+ if(i)for(let t=0;
+ t<i.length&&t<this.skillMaxNum;
+ t++)OD.activeSkills[t]=i[t]}
+ this.applyDevForcedSkills();
- case 6:this.generateSummonGunners()}
+ case 6:this.generateSummonGunners();
+ break;
+ case 7:if(!RD.getInstance().isActiveSkill78Open())break;
+ this.generateWaveSkip();
+ break;
+ case 8:if(!RD.getInstance().isActiveSkill78Open())break;
+ this.generateSpeedBurst()}
+ generateWaveSkip(){
+ "ok"===hai.getInstance().skipOneWaveNow()&&Qt(async()=>{
+ const{
+ TopMenu:t}
+ =await Promise.resolve().then(()=>Noi);
+ return{
+ TopMenu:t}
+ }
+ ,void 0).then(({
+ TopMenu:t}
+ )=>{
+ t.getInstance().showWaveSkipBonus()}
+ )}
+ generateSpeedBurst(){
+ const i=Math.max(sx.time,OD.skillSpeedEndTime);
+ OD.skillSpeedEndTime=i+t.SPEED_BURST_MS,Qt(async()=>{
+ const{
+ TopMenu:t}
+ =await Promise.resolve().then(()=>Noi);
+ return{
+ TopMenu:t}
+ }
+ ,void 0).then(({
+ TopMenu:t}
+ )=>{
+ t.getInstance().updateGameSpeed()}
+ )}
- zt(g5,"ActiveSkillMain"),qt(g5,"instance"),qt(g5,"AUTO_PILL_GAP",-4),qt(g5,"SWORD_DATA",[{
+ zt(g5,"ActiveSkillMain"),qt(g5,"instance"),qt(g5,"AUTO_PILL_GAP",-4),qt(g5,"DEV_FORCE_SKILLS",null),qt(g5,"SPEED_BURST_MS",3e4),qt(g5,"SWORD_DATA",[{
ShopDataManager 3 hunks, 31 statements
- qt(this,"_unlockWave",10),qt(this,"_nextMarketYn",""),qt(this,"allProducts",[]),qt(this,"packageList",[]),qt(this,"periodList",[]),qt(this,"normalList",[]),qt(this,"wavePassList",[]),qt(this,"reviewShopList",[]),qt(this,"requestPending",!1),qt(this,"_productIdsWithHammer",null),qt(this,"objTargeting",{
+ qt(this,"_unlockWave",10),qt(this,"_nextMarketYn",""),qt(this,"allProducts",[]),qt(this,"packageList",[]),qt(this,"periodList",[]),qt(this,"normalList",[]),qt(this,"wavePassList",[]),qt(this,"reviewShopList",[]),qt(this,"requestPending",!1),qt(this,"objUsdPriceByKrw",{
+ }
+ ),qt(this,"_productIdsWithHammer",null),qt(this,"objTargeting",{
- else 1==t.main?0===t.sub&&this.wavePassList.push(t):-1==t.main&&this.reviewShopList.push(t)}
+ else 1==t.main?0===t.sub&&this.wavePassList.push(t):-1==t.main&&this.reviewShopList.push(t);
+ this.objUsdPriceByKrw[t.price]||(this.objUsdPriceByKrw[t.price]=t.usdPrice),this.objUsdPriceByKrw[t.appleKrPrice]||(this.objUsdPriceByKrw[t.appleKrPrice]=t.usdPrice)}
- let i=0;
- switch(t){
- case 1100:i=.99;
- break;
- case 3300:i=1.99;
- break;
- case 4400:i=2.99;
- break;
- case 6600:i=4.99;
- break;
- case 14e3:case 14300:i=9.99;
- break;
- case 22e3:i=14.99;
- break;
- case 28600:case 29e3:i=19.99;
- break;
- case 33e3:i=24.99;
- break;
- case 44e3:i=29.99;
- break;
- case 48400:case 49e3:i=34.99;
- break;
- case 66e3:i=49.99;
- break;
- case 148500:case 149e3:i=99.99}
- return i}
+ return this.objUsdPriceByKrw[t]}
PVP2BattleController 13 hunks, 28 statements
- super(),qt(this,"battleType",WU.PVP2),qt(this,"BATTLEFIELD_WIDTH",640),qt(this,"BATTLEFIELD_HEIGHT",640),qt(this,"VIEWPORT_WIDTH",640),qt(this,"GAME_ZOOM",1.3),qt(this,"CAMERA_LERP",.08),qt(this,"cameraX",0),qt(this,"ALLY_CASTLE_X",126),qt(this,"ALLY_CASTLE_Y",536),qt(this,"ENEMY_CASTLE_X",1320),qt(this,"ENEMY_CASTLE_Y",536),qt(this,"ALLY_SPAWN_X",200),qt(this,"ENEMY_SPAWN_X",1200),qt(this,"Y_MIN",520),qt(this,"Y_MAX",600),qt(this,"ENEMY_COUNT",10),qt(this,"CRANE_WING_ARC",20),qt(this,"PVP_TIME_LIMIT_FRAMES",3600),qt(this,"pvpStarted",!1),qt(this,"speedHelper",new vJt("ef2.pvp2.battleSpeed")),qt(this,"enemyCastle",null),qt(this,"allyCastle",null),qt(this,"timerText",null),qt(this,"spawnedVOs",[]),qt(this,"pvpTeamVOs",[]),qt(this,"marchMode",!1),qt(this,"allySpawnQueue",[]),qt(this,"enemySpawnQueue",[]),qt(this,"allySpawnTimer",0),qt(this,"enemySpawnTimer",0),qt(this,"MARCH_SPAWN_INTERVAL",56),qt(this,"MARCH_ALLY_CASTLE_X",40),qt(this,"MARCH_ALLY_CASTLE_Y",320),qt(this,"MARCH_ENEMY_CASTLE_X",600),qt(this,"MARCH_ENEMY_CASTLE_Y",320)}
+ super(),qt(this,"battleType",WU.PVP2),qt(this,"BATTLEFIELD_WIDTH",640),qt(this,"BATTLEFIELD_HEIGHT",640),qt(this,"VIEWPORT_WIDTH",640),qt(this,"GAME_ZOOM",1.3),qt(this,"CAMERA_LERP",.08),qt(this,"cameraX",0),qt(this,"ALLY_CASTLE_X",126),qt(this,"ALLY_CASTLE_Y",536),qt(this,"ENEMY_CASTLE_X",1320),qt(this,"ENEMY_CASTLE_Y",536),qt(this,"ALLY_SPAWN_X",200),qt(this,"ENEMY_SPAWN_X",1200),qt(this,"Y_MIN",520),qt(this,"Y_MAX",600),qt(this,"ENEMY_COUNT",10),qt(this,"CRANE_WING_ARC",20),qt(this,"PVP_TIME_LIMIT_FRAMES",3600),qt(this,"pvpStarted",!1),qt(this,"speedHelper",new vJt("ef2.pvp2.battleSpeed")),qt(this,"enemyCastle",null),qt(this,"allyCastle",null),qt(this,"timerText",null),qt(this,"spawnedVOs",[]),qt(this,"pvpTeamVOs",[]),qt(this,"opTransPoints",null),qt(this,"marchMode",!1),qt(this,"allySpawnQueue",[]),qt(this,"enemySpawnQueue",[]),qt(this,"allySpawnTimer",0),qt(this,"enemySpawnTimer",0),qt(this,"MARCH_SPAWN_INTERVAL",56),qt(this,"MARCH_ALLY_CASTLE_X",40),qt(this,"MARCH_ALLY_CASTLE_Y",320),qt(this,"MARCH_ENEMY_CASTLE_X",600),qt(this,"MARCH_ENEMY_CASTLE_Y",320)}
+ try{
+ await this.startBattleImpl(t)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleImpl(t=10){
- async startMarchBattle(t,i,s,e,n=10){
- this.cleanup(),this.marchMode=!0,zR.getInstance().setBattleContext(NR.Pvp),JB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
+ async startMarchBattle(t,i,s,e,n=10,h=null){
+ try{
+ await this.startMarchBattleImpl(t,i,s,e,n,h)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startMarchBattleImpl(t,i,s,e,n=10,h=null){
+ this.cleanup(),this.marchMode=!0,this.opTransPoints=h,zR.getInstance().setBattleContext(NR.Pvp),JB.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.MARCH_ENEMY_CASTLE_X,i.y=i.yDefault=this.MARCH_ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),mB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
+ i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t,0,!0),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.MARCH_ENEMY_CASTLE_X,i.y=i.yDefault=this.MARCH_ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),mB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
- o.battleController=this,this.initializeUnitByKindNum(o,h,e,s[n]),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange,o.numBlock=0;
+ o.battleController=this,this.initializeUnitByKindNum(o,h,e,s[n],!0),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange,o.numBlock=0;
- i.battleController=this,this.initializeUnitByKindNum(i,t.kindNum,t.level),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.numBlock=0,i.x=-30,i.y=450+80*this.random.next(),i.xDefault=670,i.yDefault=490,i.healthBar.setHealthColor(!0),i.enemyList=this.enemyList,i.allyList=this.friendList,i.isAir&&i.onFlyEnter(!0),mB.getInstance().addChild(i),this.friendList.push(i)}
+ i.battleController=this,this.initializeUnitByKindNum(i,t.kindNum,t.level,t.trans),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.numBlock=0,i.x=-30,i.y=450+80*this.random.next(),i.xDefault=670,i.yDefault=490,i.healthBar.setHealthColor(!0),i.enemyList=this.enemyList,i.allyList=this.friendList,i.isAir&&i.onFlyEnter(!0),mB.getInstance().addChild(i),this.friendList.push(i)}
- e.battleController=this,this.initializeUnitByKindNum(e,t,i),e.detectRange=1400,e.detectRange2=e.detectRange*e.detectRange,e.numBlock=0,e.x=670,e.y=450+80*this.random.next(),e.xDefault=-30,e.yDefault=490,e.healthBar.setHealthColor(!1),e.enemyList=this.friendList,e.allyList=this.enemyList,mB.getInstance().addChild(e),this.enemyList.push(e)}
+ e.battleController=this,this.initializeUnitByKindNum(e,t,i,0,!0),e.detectRange=1400,e.detectRange2=e.detectRange*e.detectRange,e.numBlock=0,e.x=670,e.y=450+80*this.random.next(),e.xDefault=-30,e.yDefault=490,e.healthBar.setHealthColor(!1),e.enemyList=this.friendList,e.allyList=this.enemyList,mB.getInstance().addChild(e),this.enemyList.push(e)}
- o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,i,t),o.detectRange=1400,o.detectRange2=o.detectRange*o.detectRange;
+ o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,i,t,0,!0),o.detectRange=1400,o.detectRange2=o.detectRange*o.detectRange;
- a.battleController=this,this.initializeUnitByKindNum(a,r,h.level),a.initDelay=0,a.showTombstone=!1,a.totalDamageDealt=0,a.detectRange=1400,a.detectRange2=a.detectRange*a.detectRange,a.numBlock=0;
+ a.battleController=this,this.initializeUnitByKindNum(a,r,h.level,h.trans),a.initDelay=0,a.showTombstone=!1,a.totalDamageDealt=0,a.detectRange=1400,a.detectRange2=a.detectRange*a.detectRange,a.numBlock=0;
- i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.ENEMY_CASTLE_X,i.y=i.yDefault=this.ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),mB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
+ i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t,0,!0),i.detectRange=1400,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.ENEMY_CASTLE_X,i.y=i.yDefault=this.ENEMY_CASTLE_Y,i.healthBar.setHealthColor(!1),mB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
- initializeUnitByKindNum(t,i,s=1,e=0){
+ initializeUnitByKindNum(t,i,s=1,e=0,n=!1){
- n.id=-1,n.kindNum=i,n.level=s,n.enhance=0,n.trans=e,this.spawnedVOs.push(n),t.setData(n),t.initDelay=0,t.showTombstone=!1}
+ if(h.id=-1,h.kindNum=i,h.level=s,h.enhance=0,h.trans=e,h.isEnemy=n,this.spawnedVOs.push(h),t.setData(h),t.initDelay=0,t.showTombstone=!1,n&&!t.isCastle&&this.opTransPoints){
+ const s=_x.getInstance().getTransPointMultiplierFrom(this.opTransPoints,i);
+ s>1&&(t.baseMaxHp*=s,t.orgMaxHp*=s,t.maxHp*=s,t.hp=t.maxHp,t.health=t.maxHp,t.baseAtkDmg*=s,t.orgAtkDmg*=s,t.atkDmg*=s,t.baseDef*=s,t.orgDef*=s,t.def*=s,t.orgPhyDef*=s,t.phyDef*=s,t.orgMagDef*=s,t.magDef*=s)}
+ }
- zR.getInstance().setBattleContext(NR.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.removeTimerUI(),this.enemyCastle=null,this.allyCastle=null,this.pvpStarted=!1,this.marchMode=!1,this.allySpawnQueue.length=0,this.enemySpawnQueue.length=0;
+ zR.getInstance().setBattleContext(NR.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.removeTimerUI(),this.enemyCastle=null,this.allyCastle=null,this.pvpStarted=!1,this.opTransPoints=null,this.marchMode=!1,this.allySpawnQueue.length=0,this.enemySpawnQueue.length=0;
RouletteGuidePopup 1 hunks, 21 statements
+ const Bni=class t extends FB{
+ constructor(){
+ super(),qt(this,"lblGuide"),this.lblGuide=new PB("@",this.width-90,16,wL.DEFAULT_COLOR,8,10,16763904),this.contentContainer.addChild(this.lblGuide),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ this.title=LG.getText("ROULETTE_1","오늘도 룰렛");
+ const t=[LG.getText("ROULETTE_3","룰렛은 매일 최대 3번 돌릴 수 있습니다."),LG.getText("ROULETTE_4","최초 1회는 무료이며, 2~3회는 명예코인이 필요합니다."),LG.getText("ROULETTE_5","당첨된 보상은 메일함으로 지급됩니다."),LG.getText("ROULETTE_6","각 보상은 매일 1회만 당첨될 수 있습니다."),LG.getText("COMMON_475","획득 확률은 모두 동일합니다.")+` ( ${
+ LG.getText("COMMON_476","개별 획득 확률")}
+  : 8.33% ( = 1 / 12 ) )`];
+ this.lblGuide.text=t.map(t=>`@ ${
+ t}
+ `).join("\n"),this.lblGuide.x=30,this.lblGuide.y=80,this.height=this.lblGuide.y+this.lblGuide.height+40,await this.loadImage(),super.show()}
+ getDefaultPositionY(){
+ return.4*zA.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ zt(Bni,"RouletteGuidePopup"),qt(Bni,"_instance");
+ let Uni=Bni;
GuildWarBattlePopupV3 15 hunks, 21 statements
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:11}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:11}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
- var h,r,o,a,c,l,u,d;
+ var h,r,o,a,c,l,u,d,f,p,g,m,w;
+ if(!0===(null==(h=null==v?void 0:v.body)?void 0:h.autoCleared))return WF.getInstance().showMessage(LG.getText("GAME_1619","이미 클리어된 유저입니다.")),this.lastInfoFetchAt=0,void this.fetchHeaderInfo(!0);
- ,v=new Set(Array.isArray(null==(c=null==f?void 0:f.body)?void 0:c.attackerAwakenedTribes)?f.body.attackerAwakenedTribes.map(Number):Array.from(OR.getAwakenedBarrackTribes())),_=new Set(Array.isArray(null==(l=null==f?void 0:f.body)?void 0:l.defenderAwakenedTribes)?f.body.defenderAwakenedTribes.map(Number):[]);
+ ,E=new Set(Array.isArray(null==(l=null==v?void 0:v.body)?void 0:l.attackerAwakenedTribes)?v.body.attackerAwakenedTribes.map(Number):Array.from(OR.getAwakenedBarrackTribes())),A=new Set(Array.isArray(null==(u=null==v?void 0:v.body)?void 0:u.defenderAwakenedTribes)?v.body.defenderAwakenedTribes.map(Number):[]),S=(null==(d=null==v?void 0:v.body)?void 0:d.attackerTransPoints)&&"object"==typeof v.body.attackerTransPoints?v.body.attackerTransPoints:null,T=(null==(f=null==v?void 0:v.body)?void 0:f.defenderTransPoints)&&"object"==typeof v.body.defenderTransPoints?v.body.defenderTransPoints:null,C=zt(t=>{
+ const i=t;
+ return i&&Array.isArray(i.owned)?IR.collectContextBuffsFor(i.owned,Number(i.representPet)||0,"GUILDPVP"):null}
+ ,"toPetBuffs"),I=C(null==(p=null==v?void 0:v.body)?void 0:p.attackerPets)??IR.collectContextBuffsFor(ux.getInstance().list.map(t=>({
+ kindNum:t.kindNum,grade:t.grade}
+ )),ux.getInstance().representPet,"GUILDPVP"),k=C(null==(g=null==v?void 0:v.body)?void 0:g.defenderPets);
- allyHeroes:b.heroes,allyCorpSoldierTiers:b.soldierTiers,allyKnightLevel:M,enemyHeroes:y.heroes,enemyCorpSoldierTiers:y.soldierTiers,enemyKnightLevel:E,enemyHeroLevelBonus:S}
+ allyHeroes:O.heroes,allyHeroTrans:O.heroTrans,allyCorpSoldierTiers:O.soldierTiers,allyKnightLevel:R,allyTransPoints:S,allyPetBuffs:I,enemyHeroes:x.heroes,enemyHeroTrans:x.heroTrans,enemyCorpSoldierTiers:x.soldierTiers,enemyKnightLevel:N,enemyHeroLevelBonus:L,enemyTransPoints:T,enemyPetBuffs:k}
- const e=[0,0,0,0,0],n=[[],[],[],[],[]];
+ const e=[0,0,0,0,0],n=[0,0,0,0,0],h=[[],[],[],[],[]];
- heroes:e,soldierTiers:n}
+ heroes:e,heroTrans:n,soldierTiers:h}
- const[t,,a]=h[o].split("-").map(Number);
- if(t>0&&(e[o]=t),!(a>0))continue;
+ const[t,c,l]=r[a].split("-").map(Number);
+ if(t>0&&(e[a]=t,n[a]=Math.max(0,c||0)),!(l>0))continue;
- heroes:e,soldierTiers:n}
+ heroes:e,heroTrans:n,soldierTiers:h}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
RightBottomMenus 5 hunks, 20 statements
- super(),qt(this,"btnDungeon",new RB("UI_Ekkorr","HeroGrade6")),qt(this,"btnIdle",new RB("UI_Ekkorr","HeroGrade4")),qt(this,"btnMap3",new RB("UI_Ekkorr","HeroGrade2")),qt(this,"btnMap4",new RB("UI_Ekkorr","HeroGrade16")),qt(this,"btnRaidBosses",[]),qt(this,"btnBuff",new RB("UI_Ekkorr","HeroGrade10")),qt(this,"btnMine",new RB("UI_Ekkorr","HeroGrade12")),qt(this,"btnCardEvent",new RB("UI_Ekkorr","HeroGrade14")),qt(this,"healthOrb",QZt.getInstance()),qt(this,"waveCallInfo",n0t.getInstance()),qt(this,"timeShiftGauge",new s0t),qt(this,"btnWaveSetting",new RB("UI_Ekkorr","smallSetting")),this.healthOrb.x=640-.5*this.healthOrb.width-3,this.healthOrb.y=13,this.addChild(this.healthOrb),this.waveCallInfo.x=10,this.waveCallInfo.y=t.WAVE_CALL_BASE_Y,this.addChild(this.waveCallInfo),this.waveCallInfo.eventMode="static",this.waveCallInfo.on("pointerup",this.getNextWave,this),this.waveCallInfo.start(),this.timeShiftGauge.x=this.waveCallInfo.x+62,this.timeShiftGauge.y=this.waveCallInfo.y,this.addChild(this.timeShiftGauge),this.btnWaveSetting.x=this.timeShiftGauge.x+48+12,this.btnWaveSetting.y=this.waveCallInfo.y+.5*(40-this.btnWaveSetting.height),this.addChild(this.btnWaveSetting),this.btnWaveSetting.on("pointerup",this.onWaveSetting,this),Izt.getInstance().x=0,Izt.getInstance().y=-13,this.addChild(Izt.getInstance()),Izt.getInstance().onVisibilityChanged=()=>this.layoutWaveCall(),this.btnDungeon.x=500,this.btnDungeon.y=0;
+ super(),qt(this,"btnDungeon",new RB("UI_Ekkorr","HeroGrade6")),qt(this,"btnIdle",new RB("UI_Ekkorr","HeroGrade4")),qt(this,"btnMap3",new RB("UI_Ekkorr","HeroGrade2")),qt(this,"btnMap4",new RB("UI_Ekkorr","HeroGrade16")),qt(this,"btnRaidBosses",[]),qt(this,"btnBuff",new RB("UI_Ekkorr","HeroGrade10")),qt(this,"btnMine",new RB("UI_Ekkorr","HeroGrade12")),qt(this,"btnCardEvent",new RB("UI_Ekkorr","HeroGrade14")),qt(this,"btnConquest",new RB("UI_Ekkorr","HeroGrade8")),qt(this,"healthOrb",QZt.getInstance()),qt(this,"waveCallInfo",n0t.getInstance()),qt(this,"timeShiftGauge",new s0t),qt(this,"btnWaveSetting",new RB("UI_Ekkorr","smallSetting")),qt(this,"waveSettingFrameCnt",0),this.healthOrb.x=640-.5*this.healthOrb.width-3,this.healthOrb.y=13,this.addChild(this.healthOrb),this.waveCallInfo.x=10,this.waveCallInfo.y=t.WAVE_CALL_BASE_Y,this.addChild(this.waveCallInfo),this.waveCallInfo.eventMode="static",this.waveCallInfo.on("pointerup",this.getNextWave,this),this.waveCallInfo.start(),this.timeShiftGauge.x=this.waveCallInfo.x+62,this.timeShiftGauge.y=this.waveCallInfo.y,this.addChild(this.timeShiftGauge),this.btnWaveSetting.x=this.timeShiftGauge.x+48+12,this.btnWaveSetting.y=this.waveCallInfo.y+.5*(40-this.btnWaveSetting.height),this.addChild(this.btnWaveSetting),this.btnWaveSetting.on("pointerup",this.onWaveSetting,this),this.btnWaveSetting.visible=!1,BM.getInstance().add(this.onWaveSettingFrame,this),Izt.getInstance().x=0,Izt.getInstance().y=-13,this.addChild(Izt.getInstance()),Izt.getInstance().onVisibilityChanged=()=>this.layoutWaveCall(),this.btnDungeon.x=500,this.btnDungeon.y=0;
- ),this.btnBuff.x=s.x-this.btnBuff.width-i,this.btnBuff.y=s.y,this.addChild(this.btnBuff),this.btnBuff.on("pointerup",this.onBuff,this),this.btnMine.x=this.btnBuff.x-this.btnMine.width-i,this.btnMine.y=this.btnBuff.y,this.addChild(this.btnMine),this.btnMine.on("pointerup",this.onMine,this),this.btnCardEvent.x=this.btnMine.x-this.btnCardEvent.width-i,this.btnCardEvent.y=this.btnMine.y,this.addChild(this.btnCardEvent),this.btnCardEvent.on("pointerup",this.onCardEvent,this);
+ ),this.btnBuff.x=s.x-this.btnBuff.width-i,this.btnBuff.y=s.y,this.addChild(this.btnBuff),this.btnBuff.on("pointerup",this.onBuff,this),this.btnMine.x=this.btnBuff.x-this.btnMine.width-i,this.btnMine.y=this.btnBuff.y,this.addChild(this.btnMine),this.btnMine.on("pointerup",this.onMine,this),this.btnCardEvent.x=this.btnMine.x-this.btnCardEvent.width-i,this.btnCardEvent.y=this.btnMine.y,this.addChild(this.btnCardEvent),this.btnCardEvent.on("pointerup",this.onCardEvent,this),this.btnConquest.x=this.btnCardEvent.x-this.btnConquest.width-i,this.btnConquest.y=this.btnCardEvent.y,this.addChild(this.btnConquest),this.btnConquest.on("pointerup",this.onConquest,this);
- this.btnBuff.visible=e,this.btnMine.visible=e,this.btnCardEvent.visible=e}
+ this.btnBuff.visible=e,this.btnMine.visible=e,this.btnCardEvent.visible=e,this.btnConquest.visible=LD.getInstance().development}
+ onWaveSettingFrame(){
+ if(++this.waveSettingFrameCnt%30!=0)return;
+ const t=this.waveCallInfo.visible||this.timeShiftGauge.visible;
+ this.btnWaveSetting.visible!==t&&(this.btnWaveSetting.visible=t)}
+ async onConquest(){
+ JD();
+ const{
+ ConquestMainPopup:t}
+ =await Qt(async()=>{
+ const{
+ ConquestMainPopup:t}
+ =await Promise.resolve().then(()=>Ugi);
+ return{
+ ConquestMainPopup:t}
+ }
+ ,void 0);
+ t.getInstance().show()}
ConfigManager 7 hunks, 19 statements
- (s||e>this.wave)&&bL.setTrusted(e),this.wave<=0&&bL.setTrusted(1),this.maxWave=t.safeNum(i.maxWave,this.maxWave),this.maxTeamSlots=t.safeNum(i.maxTeamSlots,this.maxTeamSlots),this.numRevive=t.safeNum(i.numRevive,this.numRevive),this.numRevive30=Number(i.numRevive30)||0,this.heart=Number(i.heart)||0,this.lastReviveTime=i.lastReviveTime?new Date(i.lastReviveTime).getTime():0,this.updateReviveBuffs(),this.tribe=Number(i.tribe)||0,this.adsEndTime=i.adsEndTime?new Date(i.adsEndTime).getTime():0,this.assistantEndTime=i.assistantEndTime?new Date(i.assistantEndTime).getTime():0,this.assistantPassEndTime=i.assistantPassEndTime?new Date(i.assistantPassEndTime).getTime():0,this.soulRestStartAt=i.soulRestStartAt?new Date(i.soulRestStartAt).getTime():0,this.soulRestEndAt=i.soulRestEndAt?new Date(i.soulRestEndAt).getTime():0,this.bestMedalPerMin=Number(i.bestMedalPerMin)||0,this.bestMedalPerMinAt=i.bestMedalPerMinAt?new Date(i.bestMedalPerMinAt).getTime():0,this.soulRestNextStartAt=i.soulRestNextStartAt?new Date(i.soulRestNextStartAt).getTime():0,this.soulRestSkipCount=Number(i.soulRestSkipCount)||0,void 0!==i.speed15EndTime&&null!==i.speed15EndTime&&(this.speed15EndTime=new Date(i.speed15EndTime).getTime()),void 0!==i.speed20EndTime&&null!==i.speed20EndTime&&(this.speed20EndTime=new Date(i.speed20EndTime).getTime()),this.medalBuffLevel=i.medalBuffLevel,this.goldBuffLevel=i.goldBuffLevel,this.daySkipLevel=i.daySkipLevel,i.activeSkills&&(this.activeSkills=i.activeSkills.split("|").map(Number)),RD.myGuildId=i.guildId}
+ (s||e>this.wave)&&bD.setTrusted(e),this.wave<=0&&bD.setTrusted(1),this.maxWave=t.safeNum(i.maxWave,this.maxWave),this.maxTeamSlots=t.safeNum(i.maxTeamSlots,this.maxTeamSlots),t.applyNumRevive(i.numRevive),this.numRevive30=Number(i.numRevive30)||0,this.heart=Number(i.heart)||0,this.lastReviveTime=i.lastReviveTime?new Date(i.lastReviveTime).getTime():0,this.updateReviveBuffs(),this.tribe=Number(i.tribe)||0,this.adsEndTime=i.adsEndTime?new Date(i.adsEndTime).getTime():0,this.assistantEndTime=i.assistantEndTime?new Date(i.assistantEndTime).getTime():0,this.assistantPassEndTime=i.assistantPassEndTime?new Date(i.assistantPassEndTime).getTime():0,this.soulRestStartAt=i.soulRestStartAt?new Date(i.soulRestStartAt).getTime():0,this.soulRestEndAt=i.soulRestEndAt?new Date(i.soulRestEndAt).getTime():0,this.bestMedalPerMin=Number(i.bestMedalPerMin)||0,this.bestMedalPerMinAt=i.bestMedalPerMinAt?new Date(i.bestMedalPerMinAt).getTime():0,this.soulRestNextStartAt=i.soulRestNextStartAt?new Date(i.soulRestNextStartAt).getTime():0,this.soulRestSkipCount=Number(i.soulRestSkipCount)||0,void 0!==i.speed15EndTime&&null!==i.speed15EndTime&&(this.speed15EndTime=new Date(i.speed15EndTime).getTime()),void 0!==i.speed20EndTime&&null!==i.speed20EndTime&&(this.speed20EndTime=new Date(i.speed20EndTime).getTime()),this.medalBuffLevel=i.medalBuffLevel,this.goldBuffLevel=i.goldBuffLevel,this.daySkipLevel=i.daySkipLevel,i.activeSkills&&(this.activeSkills=i.activeSkills.split("|").map(Number)),RL.myGuildId=i.guildId}
+ static holdNumReviveCommit(){
+ this.numReviveHoldActive=!0,this.pendingNumRevive=-1,this.numReviveHoldTimer&&clearTimeout(this.numReviveHoldTimer),this.numReviveHoldTimer=setTimeout(()=>{
+ t.commitNumRevive()}
+ ,3e4)}
+ static commitNumRevive(){
+ this.numReviveHoldTimer&&(clearTimeout(this.numReviveHoldTimer),this.numReviveHoldTimer=null),this.numReviveHoldActive&&(this.numReviveHoldActive=!1,this.pendingNumRevive>this.numRevive&&(this.numRevive=this.pendingNumRevive),this.pendingNumRevive=-1)}
+ static applyNumRevive(i){
+ const s=t.safeNum(i,this.numRevive);
+ this.numReviveHoldActive&&s>this.numRevive?this.pendingNumRevive=Math.max(this.pendingNumRevive,s):this.numRevive=s}
+ static get skillSpeedEndTime(){
+ return t._skillSpeed.get()}
+ static set skillSpeedEndTime(i){
+ t._skillSpeed.set(i)}
- (s||n>this.wave)&&bL.setTrusted(n),this.wave<=0&&bL.setTrusted(1),this.maxWave=t.safeNum(e.maxWave,this.maxWave),this.accuMedal=t.safeNum(e.accuMedal,this.accuMedal),this.accuWave=t.safeNum(e.accuWave,this.accuWave),this.medalBuyCount=t.safeNum(e.medalBuyCount,this.medalBuyCount),this.needRevive=Boolean(e.needRevive),this.speed15EndTime=new Date(e.speed15EndTime).getTime(),this.speed20EndTime=new Date(e.speed20EndTime).getTime(),this.medalBuffLevel=t.safeNum(e.medalBuffLevel,this.medalBuffLevel),this.goldBuffLevel=t.safeNum(e.goldBuffLevel,this.goldBuffLevel),this.daySkipLevel=t.safeNum(e.daySkipLevel,this.daySkipLevel),this.lastReviveTime=e.lastReviveTime?new Date(e.lastReviveTime).getTime():0,this.numRevive=t.safeNum(e.numRevive,this.numRevive),this.numRevive30=t.safeNum(e.numRevive30,this.numRevive30),this.heart=t.safeNum(e.heart,this.heart),this.tribe=t.safeNum(e.tribe,this.tribe),this.adsEndTime=e.adsEndTime?new Date(e.adsEndTime).getTime():0,this.assistantEndTime=e.assistantEndTime?new Date(e.assistantEndTime).getTime():0,this.assistantPassEndTime=e.assistantPassEndTime?new Date(e.assistantPassEndTime).getTime():0,this.soulRestStartAt=e.soulRestStartAt?new Date(e.soulRestStartAt).getTime():0,this.soulRestEndAt=e.soulRestEndAt?new Date(e.soulRestEndAt).getTime():0,this.bestMedalPerMin=Number(e.bestMedalPerMin)||0,this.bestMedalPerMinAt=e.bestMedalPerMinAt?new Date(e.bestMedalPerMinAt).getTime():0,this.soulRestNextStartAt=e.soulRestNextStartAt?new Date(e.soulRestNextStartAt).getTime():0,this.soulRestSkipCount=Number(e.soulRestSkipCount)||0,this.maxTeamSlots=t.safeNum(e.maxTeamSlots,this.maxTeamSlots),this.updateReviveBuffs(),e.activeSkills&&(this.activeSkills=e.activeSkills.split("|").map(Number)),"honorCoin"in e&&(this.honorCoin=Number(e.honorCoin))}
+ (s||n>this.wave)&&bD.setTrusted(n),this.wave<=0&&bD.setTrusted(1),this.maxWave=t.safeNum(e.maxWave,this.maxWave),this.accuMedal=t.safeNum(e.accuMedal,this.accuMedal),this.accuWave=t.safeNum(e.accuWave,this.accuWave),this.medalBuyCount=t.safeNum(e.medalBuyCount,this.medalBuyCount),this.needRevive=Boolean(e.needRevive),this.speed15EndTime=new Date(e.speed15EndTime).getTime(),this.speed20EndTime=new Date(e.speed20EndTime).getTime(),this.medalBuffLevel=t.safeNum(e.medalBuffLevel,this.medalBuffLevel),this.goldBuffLevel=t.safeNum(e.goldBuffLevel,this.goldBuffLevel),this.daySkipLevel=t.safeNum(e.daySkipLevel,this.daySkipLevel),this.lastReviveTime=e.lastReviveTime?new Date(e.lastReviveTime).getTime():0,t.applyNumRevive(e.numRevive),this.numRevive30=t.safeNum(e.numRevive30,this.numRevive30),this.heart=t.safeNum(e.heart,this.heart),this.tribe=t.safeNum(e.tribe,this.tribe),this.adsEndTime=e.adsEndTime?new Date(e.adsEndTime).getTime():0,this.assistantEndTime=e.assistantEndTime?new Date(e.assistantEndTime).getTime():0,this.assistantPassEndTime=e.assistantPassEndTime?new Date(e.assistantPassEndTime).getTime():0,this.soulRestStartAt=e.soulRestStartAt?new Date(e.soulRestStartAt).getTime():0,this.soulRestEndAt=e.soulRestEndAt?new Date(e.soulRestEndAt).getTime():0,this.bestMedalPerMin=Number(e.bestMedalPerMin)||0,this.bestMedalPerMinAt=e.bestMedalPerMinAt?new Date(e.bestMedalPerMinAt).getTime():0,this.soulRestNextStartAt=e.soulRestNextStartAt?new Date(e.soulRestNextStartAt).getTime():0,this.soulRestSkipCount=Number(e.soulRestSkipCount)||0,this.maxTeamSlots=t.safeNum(e.maxTeamSlots,this.maxTeamSlots),this.updateReviveBuffs(),e.activeSkills&&(this.activeSkills=e.activeSkills.split("|").map(Number)),"honorCoin"in e&&(this.honorCoin=Number(e.honorCoin))}
- qt(kL,"accountId",""),qt(kL,"currentServer",0),qt(kL,"platform",""),qt(kL,"platformId",""),qt(kL,"regTime",""),qt(kL,"agreeTime",""),qt(kL,"optOut",!1),qt(kL,"withdrawYn",""),qt(kL,"withdrawTime",""),qt(kL,"email",""),qt(kL,"userId",""),qt(kL,"name",""),qt(kL,"uid",""),qt(kL,"userType",0),qt(kL,"language","en"),qt(kL,"timezone",0),qt(kL,"lastLoginTime",""),qt(kL,"lastGoldUpdateTime",""),qt(kL,"goldPerSec",100),qt(kL,"walletType",""),qt(kL,"walletAddress",""),qt(kL,"createdJustNow",!1),qt(kL,"tribe",0),qt(kL,"reviveQuestGoldBuff",0),qt(kL,"reviveQuestDurationBuff",0),qt(kL,"reviveQuestOpenCostBuff",0),qt(kL,"maxWave",1),qt(kL,"gem",0),qt(kL,"redGem",0),qt(kL,"accuMedal",0),qt(kL,"accuWave",0),qt(kL,"medalBuyCount",0),qt(kL,"needRevive",!1),qt(kL,"medal",0),qt(kL,"honorCoin",0),qt(kL,"_speed15",YD(hN.SP15_SENTINEL)),qt(kL,"_speed20",YD(hN.SP20_SENTINEL)),qt(kL,"medalBuffLevel",0),qt(kL,"goldBuffLevel",0),qt(kL,"daySkipLevel",0),qt(kL,"lastReviveTime",0),qt(kL,"numRevive",0),qt(kL,"numRevive30",0),qt(kL,"heart",0),qt(kL,"adsEndTime",0),qt(kL,"assistantEndTime",0),qt(kL,"assistantPassEndTime",0),qt(kL,"soulRestStartAt",0),qt(kL,"soulRestEndAt",0),qt(kL,"bestMedalPerMin",0),qt(kL,"bestMedalPerMinAt",0),qt(kL,"soulRestNextStartAt",0),qt(kL,"soulRestSkipCount",0),qt(kL,"castleKindNum",10001),qt(kL,"castleLevel",0),qt(kL,"castleEnhance",0),qt(kL,"castleGoldLevels",[0,0,0,0,0,0,0,0,0,0]),qt(kL,"castleMedalLevels",[0,0,0,0,0,0,0,0,0,0]),qt(kL,"questsLevels",[0,0,0,0,0,0,0,0,0,0]),qt(kL,"maxTeamSlots",5),qt(kL,"unitsSlotIds",[]),qt(kL,"unitsSlotKindNums",[]),qt(kL,"unitsSlotLevels",[]),qt(kL,"unitsSlotEnhances",[]),qt(kL,"ownedUnitKindNums",[]),qt(kL,"ownedUnitCounts",[]),qt(kL,"treasuresMaxSlots",5),qt(kL,"treasuresKindNums",[]),qt(kL,"treasuresLevels",[]),qt(kL,"treasuresOwned",[]),qt(kL,"skillsKindNums",[]),qt(kL,"activeSkills",[1,-1,-1]),qt(kL,"_godBless",YD(hN.GODBLESS_SENTINEL));
+ qt(kD,"accountId",""),qt(kD,"currentServer",0),qt(kD,"platform",""),qt(kD,"platformId",""),qt(kD,"regTime",""),qt(kD,"agreeTime",""),qt(kD,"optOut",!1),qt(kD,"withdrawYn",""),qt(kD,"withdrawTime",""),qt(kD,"email",""),qt(kD,"userId",""),qt(kD,"name",""),qt(kD,"uid",""),qt(kD,"userType",0),qt(kD,"language","en"),qt(kD,"timezone",0),qt(kD,"lastLoginTime",""),qt(kD,"lastGoldUpdateTime",""),qt(kD,"goldPerSec",100),qt(kD,"walletType",""),qt(kD,"walletAddress",""),qt(kD,"createdJustNow",!1),qt(kD,"tribe",0),qt(kD,"reviveQuestGoldBuff",0),qt(kD,"reviveQuestDurationBuff",0),qt(kD,"reviveQuestOpenCostBuff",0),qt(kD,"maxWave",1),qt(kD,"gem",0),qt(kD,"redGem",0),qt(kD,"accuMedal",0),qt(kD,"accuWave",0),qt(kD,"medalBuyCount",0),qt(kD,"needRevive",!1),qt(kD,"medal",0),qt(kD,"honorCoin",0),qt(kD,"_speed15",YL(hN.SP15_SENTINEL)),qt(kD,"_speed20",YL(hN.SP20_SENTINEL)),qt(kD,"medalBuffLevel",0),qt(kD,"goldBuffLevel",0),qt(kD,"daySkipLevel",0),qt(kD,"lastReviveTime",0),qt(kD,"numRevive",0),qt(kD,"numRevive30",0),qt(kD,"numReviveHoldActive",!1),qt(kD,"pendingNumRevive",-1),qt(kD,"numReviveHoldTimer",null),qt(kD,"heart",0),qt(kD,"adsEndTime",0),qt(kD,"assistantEndTime",0),qt(kD,"assistantPassEndTime",0),qt(kD,"soulRestStartAt",0),qt(kD,"soulRestEndAt",0),qt(kD,"bestMedalPerMin",0),qt(kD,"bestMedalPerMinAt",0),qt(kD,"soulRestNextStartAt",0),qt(kD,"soulRestSkipCount",0),qt(kD,"castleKindNum",10001),qt(kD,"castleLevel",0),qt(kD,"castleEnhance",0),qt(kD,"castleGoldLevels",[0,0,0,0,0,0,0,0,0,0]),qt(kD,"castleMedalLevels",[0,0,0,0,0,0,0,0,0,0]),qt(kD,"questsLevels",[0,0,0,0,0,0,0,0,0,0]),qt(kD,"maxTeamSlots",5),qt(kD,"unitsSlotIds",[]),qt(kD,"unitsSlotKindNums",[]),qt(kD,"unitsSlotLevels",[]),qt(kD,"unitsSlotEnhances",[]),qt(kD,"ownedUnitKindNums",[]),qt(kD,"ownedUnitCounts",[]),qt(kD,"treasuresMaxSlots",5),qt(kD,"treasuresKindNums",[]),qt(kD,"treasuresLevels",[]),qt(kD,"treasuresOwned",[]),qt(kD,"skillsKindNums",[]),qt(kD,"activeSkills",[1,-1,-1]),qt(kD,"_godBless",YL(hN.GODBLESS_SENTINEL)),qt(kD,"_skillSpeed",YL(hN.SKILLSPEED_SENTINEL));
- qt(this,"_envPlatform",""),qt(this,"_buildType",""),qt(this,"_isPlayGamesPC",null),qt(this,"adWhiteUser",!1),qt(this,"clientData"),qt(this,"timeoutMilliSeconds",3e3),qt(this,"_deviceLanguage",""),qt(this,"HERO_TRANSCEND_TICKET",null),qt(this,"HERO_MASS_TRANSCEND",null),qt(this,"HERO_MASS_EVOLVE",null),qt(this,"TREASURE_TRANSCEND_TICKET",null),qt(this,"_sRegion",""),qt(this,"_sOs",""),qt(this,"_sOsVersion",""),qt(this,"_sModel",""),qt(this,"_sAfStatus",""),qt(this,"_sMediaSource",""),qt(this,"_sHttpReferrer",""),qt(this,"_sAppBundleVersion",""),qt(this,"_isConversionDataReady",!1),qt(this,"_isConversionDataSent",!1)}
+ qt(this,"_envPlatform",""),qt(this,"_buildType",""),qt(this,"_isPlayGamesPC",null),qt(this,"adWhiteUser",!1),qt(this,"clientData"),qt(this,"timeoutMilliSeconds",3e3),qt(this,"_deviceLanguage",""),qt(this,"HERO_TRANSCEND_TICKET",null),qt(this,"HERO_MASS_TRANSCEND",null),qt(this,"HERO_MASS_EVOLVE",null),qt(this,"ACTIVE_SKILL_78",null),qt(this,"TREASURE_TRANSCEND_TICKET",null),qt(this,"_sRegion",""),qt(this,"_sOs",""),qt(this,"_sOsVersion",""),qt(this,"_sModel",""),qt(this,"_sAfStatus",""),qt(this,"_sMediaSource",""),qt(this,"_sHttpReferrer",""),qt(this,"_sAppBundleVersion",""),qt(this,"_isConversionDataReady",!1),qt(this,"_isConversionDataSent",!1)}
+ isActiveSkill78Open(){
+ return null===this.ACTIVE_SKILL_78&&(this.ACTIVE_SKILL_78=this.getClientData("ACTIVE_SKILL_78")),"Y"===this.ACTIVE_SKILL_78}
UnitDataManager 5 hunks, 17 statements
+ transPointKey(t){
+ var i;
+ const s=(null==(i=this.getBookVO(t))?void 0:i.base)??0;
+ return s>0?s:t}
- return this.heroTransPointCache.get(t)??0}
+ return this.heroTransPointCache.get(this.transPointKey(t))??0}
+ getTransPointMultiplier(t){
+ return 1+Math.min(this.calcHeroTransPoint(t),100)/100}
+ getTransPointMultiplierFrom(t,i){
+ if(!t)return 1;
+ const s=Number(t[this.transPointKey(i)])||0;
+ return 1+Math.min(Math.max(0,s),100)/100}
- const e=zt((t,i)=>{
- 0!==i&&this.heroTransPointCache.set(t,(this.heroTransPointCache.get(t)??0)+i)}
+ const e=zt((t,i,s)=>{
+ if(0===s)return;
+ const e=i>0?i:t;
+ this.heroTransPointCache.set(e,(this.heroTransPointCache.get(e)??0)+s)}
- s+=r,e(n.kindNum,r)}
+ s+=r,e(n.kindNum,h.base,r)}
- s+=c,e(n.kindNum,c)}
+ s+=c,e(n.kindNum,h.base,c)}
PVPBattleController 7 hunks, 17 statements
+ try{
+ await this.startBattleWithImpl(t,i,s,e,n,h)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleWithImpl(t,i,s,e,n=10,h){
+ try{
+ await this.startBattleImpl(t,i)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleImpl(t=10,i){
- o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,n,e,s[h]),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange;
+ o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,n,e,s[h],!0),o.detectRange=600,o.detectRange2=o.detectRange*o.detectRange;
- r.battleController=this,r.totalDamageDealt=0,this.initializeUnitByKindNum(r,s,i),r.detectRange=600,r.detectRange2=r.detectRange*r.detectRange;
+ r.battleController=this,r.totalDamageDealt=0,this.initializeUnitByKindNum(r,s,i,0,!0),r.detectRange=600,r.detectRange2=r.detectRange*r.detectRange;
- i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t),i.detectRange=600,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.enemyCenterX,i.y=i.yDefault=this.enemyCenterY,i.healthBar.setHealthColor(!1),mB.getInstance().addChildAt(i,0),this.enemyList.push(i),this.enemyCastle=i;
+ i.battleController=this,i.totalDamageDealt=0,this.initializeUnitByKindNum(i,10001,t,0,!0),i.detectRange=600,i.detectRange2=i.detectRange*i.detectRange,i.atkRange=250,i.atkRange2=i.atkRange*i.atkRange,i.numShot=1,i.x=i.xDefault=this.enemyCenterX,i.y=i.yDefault=this.enemyCenterY,i.healthBar.setHealthColor(!1),mB.getInstance().addChildAt(i,0),this.enemyList.push(i),this.enemyCastle=i;
- initializeUnitByKindNum(t,i,s=1,e=0){
+ initializeUnitByKindNum(t,i,s=1,e=0,n=!1){
- n.id=-1,n.kindNum=i,n.level=s,n.enhance=0,n.trans=e,this.spawnedVOs.push(n),t.setData(n),t.isCastle||(t.baseMaxHp*=this.PVP_HP_MULTIPLIER,t.orgMaxHp*=this.PVP_HP_MULTIPLIER,t.maxHp*=this.PVP_HP_MULTIPLIER,t.hp=t.maxHp,t.baseMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.orgMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.moveSpd*=this.PVP_MOVE_SPD_MULTIPLIER),t.initDelay=0,t.showTombstone=!1}
+ h.id=-1,h.kindNum=i,h.level=s,h.enhance=0,h.trans=e,h.isEnemy=n,this.spawnedVOs.push(h),t.setData(h),t.isCastle||(t.baseMaxHp*=this.PVP_HP_MULTIPLIER,t.orgMaxHp*=this.PVP_HP_MULTIPLIER,t.maxHp*=this.PVP_HP_MULTIPLIER,t.hp=t.maxHp,t.baseMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.orgMoveSpd*=this.PVP_MOVE_SPD_MULTIPLIER,t.moveSpd*=this.PVP_MOVE_SPD_MULTIPLIER),t.initDelay=0,t.showTombstone=!1}
BattleController 4 hunks, 17 statements
- var i,s,e,n;
+ const i=zR.getInstance(),s=i.battleContext;
+ if(s===NR.Normal)this.udpateHeroInternal(t);
+ else{
+ i.setBattleContext(NR.Normal);
+ try{
+ this.udpateHeroInternal(t)}
+ finally{
+ i.setBattleContext(s)}
+ }
+ }
+ udpateHeroInternal(t){
+ var i,s,e,n;
- this.isGameOverFlag=!1,this.currentWave=OL.wave,tH.getInstance().updateGold(),this.updateReviveGoldBuff();
+ OD.commitNumRevive(),zR.getInstance().setBattleContext(NR.Normal),this.isGameOverFlag=!1,this.currentWave=OD.wave,tH.getInstance().updateGold(),this.updateReviveGoldBuff();
+ skipOneWaveNow(){
+ const t=(this.activeWaveNumbers.length>0?Math.max(...this.activeWaveNumbers):OD.wave)+1;
+ return yU.getInstance().getScenarioForWave(this.currentScenarioId,t)?(OD.wave=t,this.currentWave=t,Roi.getInstance().updateDay(OD.wave),this.startNewWave(),"ok"):"blocked"}
HeroDetailPopup 4 hunks, 16 statements
- super(),qt(this,"icon",new M5),qt(this,"lblName",new hL("",wD.DEFAULT_COLOR,wD.DEFAULT_OUTLINE_FONT_OPTION_20)),qt(this,"lblHp",new ZB("UI_HEART","0",16711680,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblAtk",new ZB("UI_MAGIC_WAND","0",39423,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblDef",new ZB("UI_PHY_DEFENSE","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblMagDef",new ZB("UI_MAGIC_DEFENSE","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblBlock",new ZB("ICON_UNIT","0",wD.DEFAULT_COLOR,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblAtkSpd",new ZB("UI_ATTACK_SPEED","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblMoveSpd",new ZB("UI_MOVE_SPEED","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblRecovery",new ZB("ICON_OPEN","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblAtkRange",new ZB("UI_ATTACK_RANGE","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblCriChange",new ZB("UI_CRITICAL_PERCENT","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblCriDamage",new ZB("UI_CRITICAL_DAMAGE","0",16776960,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"iconAtkType",new $e(tS.getTexture("UI_Ekkorr","ICON_MELEE"))),qt(this,"iconDamageType",new $e(tS.getTexture("UI_Ekkorr","ICON_SWORD"))),qt(this,"iconTribeType",new $e(tS.getTexture("UI_Ekkorr","HUMAN_ICON"))),qt(this,"iconIsAir",new $e(tS.getTexture("UI_Ekkorr","ICON_AIR"))),qt(this,"iconIsMale",new $e(tS.getTexture("UI_Ekkorr","MALE_ICON"))),qt(this,"iconDetect",new $e(tS.getTexture("UI_Ekkorr","DETECT_ICON"))),qt(this,"canAirAttack",new $e(tS.getTexture("UI_Ekkorr","AIR_ICON"))),qt(this,"btnEnhance",new HU("UI_STAR_ICON","1000","강화",.8,160,70)),qt(this,"btnEvolve",new HU("UI_GEM","100","진화",.8,200,70)),qt(this,"btnEvolveMass",new HU("UI_GEM","100","대량진화",.8,230,70)),qt(this,"btnSell",new HU("UI_GEM","10","해고",.8,200,70)),qt(this,"btnHire",new HU("UI_GEM","","",.8,160,70)),qt(this,"btn10Enhance",new HU("UI_STAR_ICON","10000","+10",.8,160,70)),qt(this,"btn100Enhance",new HU("UI_STAR_ICON","100000","+100",.8,160,70)),qt(this,"multiEnhanceContainer",new Ue),qt(this,"enhanceRapidClickCount",0),qt(this,"lastEnhanceRapidClickTime",0),qt(this,"RAPID_CLICK_THRESHOLD",500),qt(this,"RAPID_CLICK_COUNT",3),qt(this,"enhanceTimer",null),qt(this,"enhanceStartValue",-1),qt(this,"enhanceStartMedal",-1),qt(this,"propertyList",[]),qt(this,"propertyContainer",new Ue),qt(this,"basicPropertyContainer",new Ue),qt(this,"basicPropertyList",[]),qt(this,"lblNormalAttackTitle",new hL("# 일반 공격",wD.DEFAULT_COLOR,wD.DEFAULT_FONT_OPTION_16)),qt(this,"lblNormalAttackDesc",new hL("적을 강타합니다.",wD.DEFAULT_COLOR,wD.DEFAULT_FONT_OPTION_16)),qt(this,"lblSpecialAttackTitle",new hL("# 스킬 공격",wD.DEFAULT_COLOR,wD.DEFAULT_FONT_OPTION_16)),qt(this,"lblSpecialAttackDesc",new hL("스킬이 없습니다.",wD.DEFAULT_COLOR,wD.DEFAULT_FONT_OPTION_16)),qt(this,"lblUniqueTitle",new hL("# 고유스킬",16776960,wD.DEFAULT_FONT_OPTION_16)),qt(this,"lblUniqueDesc",new hL("고유스킬이 없습니다",16776960,wD.DEFAULT_FONT_OPTION_16)),qt(this,"lblTribleTitle",new hL("# 종족 특성",wD.DEFAULT_COLOR,wD.DEFAULT_FONT_OPTION_16)),qt(this,"lblTribleDesc",new hL("진화하면, 종족 특성이 추가됩니다.\n밤에는 공격력이 10% 증가하고, 낮에는 공격력이 10% 감소합니다.",wD.DEFAULT_COLOR,wD.DEFAULT_FONT_OPTION_16)),qt(this,"starIcon",new $e(tS.getTextures("UI_Ekkorr","UI_UNIT_RARE")[0])),qt(this,"contentContainer",new Ue),qt(this,"tapDetail",new tzt("상세",200)),qt(this,"tapSkill",new tzt("스킬",200)),qt(this,"detailContainer",new Ue),qt(this,"skillContainer",new Ue),qt(this,"basicPropertyBg"),qt(this,"basicPropertyBg2"),qt(this,"lblGoldSkill",new hL("골드스킬",6736896,wD.DEFAULT_FONT_OPTION_16)),qt(this,"goldSkillList"),qt(this,"container",new Ue),qt(this,"draggableBg"),qt(this,"draggableMask"),qt(this,"draggableContainer"),qt(this,"tapTrans",new tzt("초월",200)),qt(this,"transContainer",new Ue),qt(this,"transBg"),qt(this,"transPageNav"),qt(this,"transStatusTable"),qt(this,"transGradeTable"),qt(this,"transMode",1),qt(this,"btnTransMode1"),qt(this,"btnTransMode10"),qt(this,"lblTransMaxTop",new hL("",11184810,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblTransMaxBottom",new hL("",11184810,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblTransStepTitle",new hL("1차 초월",wD.DEFAULT_COLOR,wD.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"materialContainer",new Ue),qt(this,"materialIcons",[]),qt(this,"materialCountLabels",[]),qt(this,"materialSatisfied",[!1,!1,!1,!1,!1]),qt(this,"btnTrans",new HU("PVP_COIN_ON","100","초월",1,200,70)),qt(this,"btnTransTicket",new HU("Ticket_HeroTrans_s","100","초월",1,200,70)),qt(this,"bookVo"),qt(this,"vo"),qt(this,"mode","list"),qt(this,"tribeIcons",["HUMAN_ICON","HUMAN_ICON","ELF_ICON","UNDEAD_ICON","ORC_ICON","DEMON_ICON","ANGEL_ICON"]),qt(this,"requestPending",!1),qt(this,"onHeroEvolveBind"),this.y=Math.min(zA.safeHeight-t.POPUP_MIN_HEIGHT,zA.viewMainY),this.bg.height=zA.safeHeight-this.y,this.addChild(this.container),this.addChild(this.contentContainer),this.icon.x=11,this.icon.y=50,this.lblName.align="center",this.lblName.y=this.icon.y+5,this.lblName.x=this.icon.x+this.icon.width+10,this.lblHp.y=this.lblAtk.y=this.lblDef.y=this.lblMagDef.y=this.lblBlock.y=this.lblName.y+this.lblName.height+16,this.lblHp.x=this.lblName.x,this.lblAtk.x=this.lblHp.x+100,this.lblDef.x=this.lblAtk.x+100,this.lblMagDef.x=this.lblDef.x+100,this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblMagDef.x+100,this.container.addChild(this.detailContainer),this.goldSkillList=new qO(WYt,620,530),this.goldSkillList.x=13,this.goldSkillList.y=0,this.skillContainer.addChild(this.goldSkillList),this.lblGoldSkill.x=this.goldSkillList.x,this.lblGoldSkill.y=this.goldSkillList.y+this.goldSkillList.getListHeight()+10,this.lblGoldSkill.text=`# ${
+ super(),qt(this,"icon",new M5),qt(this,"lblName",new hD("",wL.DEFAULT_COLOR,wL.DEFAULT_OUTLINE_FONT_OPTION_20)),qt(this,"lblHp",new ZB("UI_HEART","0",16711680,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblAtk",new ZB("UI_MAGIC_WAND","0",39423,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblDef",new ZB("UI_PHY_DEFENSE","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblMagDef",new ZB("UI_MAGIC_DEFENSE","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblBlock",new ZB("ICON_UNIT","0",wL.DEFAULT_COLOR,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblAtkSpd",new ZB("UI_ATTACK_SPEED","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblMoveSpd",new ZB("UI_MOVE_SPEED","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblRecovery",new ZB("ICON_OPEN","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblAtkRange",new ZB("UI_ATTACK_RANGE","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblCriChange",new ZB("UI_CRITICAL_PERCENT","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblCriDamage",new ZB("UI_CRITICAL_DAMAGE","0",16776960,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"iconAtkType",new $e(tS.getTexture("UI_Ekkorr","ICON_MELEE"))),qt(this,"iconDamageType",new $e(tS.getTexture("UI_Ekkorr","ICON_SWORD"))),qt(this,"iconTribeType",new $e(tS.getTexture("UI_Ekkorr","HUMAN_ICON"))),qt(this,"iconIsAir",new $e(tS.getTexture("UI_Ekkorr","ICON_AIR"))),qt(this,"iconIsMale",new $e(tS.getTexture("UI_Ekkorr","MALE_ICON"))),qt(this,"iconDetect",new $e(tS.getTexture("UI_Ekkorr","DETECT_ICON"))),qt(this,"canAirAttack",new $e(tS.getTexture("UI_Ekkorr","AIR_ICON"))),qt(this,"btnEnhance",new HU("UI_STAR_ICON","1000","강화",.8,160,70)),qt(this,"btnEvolve",new HU("UI_GEM","100","진화",.8,200,70)),qt(this,"btnEvolveMass",new HU("UI_GEM","100","대량진화",.8,230,70)),qt(this,"btnSell",new HU("UI_GEM","10","해고",.8,200,70)),qt(this,"btnHire",new HU("UI_GEM","","",.8,160,70)),qt(this,"btn10Enhance",new HU("UI_STAR_ICON","10000","+10",.8,160,70)),qt(this,"btn100Enhance",new HU("UI_STAR_ICON","100000","+100",.8,160,70)),qt(this,"btn1000Enhance",new HU("UI_STAR_ICON","1000000","+1000",.8,160,70)),qt(this,"multiEnhanceContainer",new Ue),qt(this,"enhanceRapidClickCount",0),qt(this,"lastEnhanceRapidClickTime",0),qt(this,"RAPID_CLICK_THRESHOLD",500),qt(this,"RAPID_CLICK_COUNT",3),qt(this,"enhanceTimer",null),qt(this,"enhanceStartValue",-1),qt(this,"enhanceStartMedal",-1),qt(this,"propertyList",[]),qt(this,"propertyContainer",new Ue),qt(this,"basicPropertyContainer",new Ue),qt(this,"basicPropertyList",[]),qt(this,"lblNormalAttackTitle",new hD("# 일반 공격",wL.DEFAULT_COLOR,wL.DEFAULT_FONT_OPTION_16)),qt(this,"lblNormalAttackDesc",new hD("적을 강타합니다.",wL.DEFAULT_COLOR,wL.DEFAULT_FONT_OPTION_16)),qt(this,"lblSpecialAttackTitle",new hD("# 스킬 공격",wL.DEFAULT_COLOR,wL.DEFAULT_FONT_OPTION_16)),qt(this,"lblSpecialAttackDesc",new hD("스킬이 없습니다.",wL.DEFAULT_COLOR,wL.DEFAULT_FONT_OPTION_16)),qt(this,"lblUniqueTitle",new hD("# 고유스킬",16776960,wL.DEFAULT_FONT_OPTION_16)),qt(this,"lblUniqueDesc",new hD("고유스킬이 없습니다",16776960,wL.DEFAULT_FONT_OPTION_16)),qt(this,"lblTribleTitle",new hD("# 종족 특성",wL.DEFAULT_COLOR,wL.DEFAULT_FONT_OPTION_16)),qt(this,"lblTribleDesc",new hD("진화하면, 종족 특성이 추가됩니다.\n밤에는 공격력이 10% 증가하고, 낮에는 공격력이 10% 감소합니다.",wL.DEFAULT_COLOR,wL.DEFAULT_FONT_OPTION_16)),qt(this,"starIcon",new $e(tS.getTextures("UI_Ekkorr","UI_UNIT_RARE")[0])),qt(this,"contentContainer",new Ue),qt(this,"tapDetail",new tzt("상세",200)),qt(this,"tapSkill",new tzt("스킬",200)),qt(this,"detailContainer",new Ue),qt(this,"skillContainer",new Ue),qt(this,"basicPropertyBg"),qt(this,"basicPropertyBg2"),qt(this,"lblGoldSkill",new hD("골드스킬",6736896,wL.DEFAULT_FONT_OPTION_16)),qt(this,"goldSkillList"),qt(this,"container",new Ue),qt(this,"draggableBg"),qt(this,"draggableMask"),qt(this,"draggableContainer"),qt(this,"tapTrans",new tzt("초월",200)),qt(this,"transContainer",new Ue),qt(this,"transBg"),qt(this,"transPageNav"),qt(this,"transStatusTable"),qt(this,"transGradeTable"),qt(this,"transMode",1),qt(this,"btnTransMode1"),qt(this,"btnTransMode10"),qt(this,"lblTransMaxTop",new hD("",11184810,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblTransMaxBottom",new hD("",11184810,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"lblTransStepTitle",new hD("1차 초월",wL.DEFAULT_COLOR,wL.DEFAULT_OUTLINE_FONT_OPTION_18)),qt(this,"materialContainer",new Ue),qt(this,"materialIcons",[]),qt(this,"materialCountLabels",[]),qt(this,"materialSatisfied",[!1,!1,!1,!1,!1]),qt(this,"btnTrans",new HU("PVP_COIN_ON","100","초월",1,200,70)),qt(this,"btnTransTicket",new HU("Ticket_HeroTrans_s","100","초월",1,200,70)),qt(this,"bookVo"),qt(this,"vo"),qt(this,"mode","list"),qt(this,"tribeIcons",["HUMAN_ICON","HUMAN_ICON","ELF_ICON","UNDEAD_ICON","ORC_ICON","DEMON_ICON","ANGEL_ICON"]),qt(this,"requestPending",!1),qt(this,"onHeroEvolveBind"),this.y=Math.min(zA.safeHeight-t.POPUP_MIN_HEIGHT,zA.viewMainY),this.bg.height=zA.safeHeight-this.y,this.addChild(this.container),this.addChild(this.contentContainer),this.icon.x=11,this.icon.y=50,this.lblName.align="center",this.lblName.y=this.icon.y+5,this.lblName.x=this.icon.x+this.icon.width+10,this.lblHp.y=this.lblAtk.y=this.lblDef.y=this.lblMagDef.y=this.lblBlock.y=this.lblName.y+this.lblName.height+16,this.lblHp.x=this.lblName.x,this.lblAtk.x=this.lblHp.x+100,this.lblDef.x=this.lblAtk.x+100,this.lblMagDef.x=this.lblDef.x+100,this.lblBlock.iconScale=1.05,this.lblBlock.x=this.lblMagDef.x+100,this.container.addChild(this.detailContainer),this.goldSkillList=new qO(WYt,620,530),this.goldSkillList.x=13,this.goldSkillList.y=0,this.skillContainer.addChild(this.goldSkillList),this.lblGoldSkill.x=this.goldSkillList.x,this.lblGoldSkill.y=this.goldSkillList.y+this.goldSkillList.getListHeight()+10,this.lblGoldSkill.text=`# ${
- ,this.multiEnhanceContainer.addChild(this.btn100Enhance),this.multiEnhanceContainer.visible=!1,this.addChild(this.multiEnhanceContainer),this.btnEvolve.text=DG.getText("GAME_67","진화"),this.btnEvolve.showIconLabel=!0,this.btnEvolve.showTextLabel=!0,this.btnEvolve.color=HU.GREEN,this.btnEvolve.onClick=this.onEvolveClick.bind(this);
+ ,this.multiEnhanceContainer.addChild(this.btn100Enhance),this.btn1000Enhance.labelOrder=HU.TEXT_FIRST,this.btn1000Enhance.textLabel.textSize=15,this.btn1000Enhance.textAlign="left",this.btn1000Enhance.iconScale=.7,this.btn1000Enhance.color=HU.LIGHT_GREEN,this.btn1000Enhance.showIconLabel=!0,this.btn1000Enhance.showTextLabel=!0,this.btn1000Enhance.onClick=()=>{
+ const t=this.getNextIncrement(this.vo.enhance,1e3);
+ this.onEnhanceClick(t)}
+ ,this.multiEnhanceContainer.addChild(this.btn1000Enhance),this.multiEnhanceContainer.visible=!1,this.addChild(this.multiEnhanceContainer),this.btnEvolve.text=LG.getText("GAME_67","진화"),this.btnEvolve.showIconLabel=!0,this.btnEvolve.showTextLabel=!0,this.btnEvolve.color=HU.GREEN,this.btnEvolve.onClick=this.onEvolveClick.bind(this);
+ if(this.vo.enhance+1e3>o)this.btn1000Enhance.visible=!1;
+ else{
+ const t=this.getNextIncrement(i.enhance,1e3);
+ let s=0;
+ for(let e=i.enhance+1;
+ e<=i.enhance+t;
+ e++)s+=_qt.getInstance().getCost(e);
+ this.btn1000Enhance.text=`+${
+ t}
+ `,this.btn1000Enhance.iconText=ZL.displayLargeNumberAsAlphabet(s),this.btn1000Enhance.activated=OD.medal>=s,this.btn1000Enhance.visible=!0}
- this.btn10Enhance.x=this.btnEnhance.x,this.btn10Enhance.y=this.btnEnhance.y-this.btn10Enhance.height-t,this.btn100Enhance.x=this.btnEnhance.x,this.btn100Enhance.y=this.btn10Enhance.y-this.btn100Enhance.height-t}
+ this.btn10Enhance.x=this.btnEnhance.x,this.btn10Enhance.y=this.btnEnhance.y-this.btn10Enhance.height-t,this.btn100Enhance.x=this.btnEnhance.x,this.btn100Enhance.y=this.btn10Enhance.y-this.btn100Enhance.height-t,this.btn1000Enhance.x=this.btnEnhance.x,this.btn1000Enhance.y=this.btn100Enhance.y-this.btn1000Enhance.height-t}
PetPopup 4 hunks, 15 statements
- const i=[this.tabMain,this.tabPetList,this.tabPlateau,this.tabShop],s=Math.floor((this.bg.width-t.TAB_GAP*(i.length-1))/i.length),e=s*i.length+t.TAB_GAP*(i.length-1),n=Math.floor(.5*(this.bg.width-e)),h=this.bg.height-t.TAB_HEIGHT-t.TAB_BOTTOM_MARGIN;
+ const i=[this.tabMain,this.tabPetList,this.tabPlateau,this.tabShop];
+ i.push(this.tabSecretShop);
+ const s=Math.floor((this.bg.width-t.TAB_GAP*(i.length-1))/i.length),e=s*i.length+t.TAB_GAP*(i.length-1),n=Math.floor(.5*(this.bg.width-e)),h=this.bg.height-t.TAB_HEIGHT-t.TAB_BOTTOM_MARGIN;
- if(4===t)return;
- if(4===t&&!this.isSecretShopOpen())return void WF.getInstance().showMessage(DG.getValueReplace("GAME_1530","##",v0t.REQUIRED_PET_POINT,`펫 포인트가 ${
+ if(4===t&&!this.isSecretShopOpen()){
+ const t=LG.getValueReplace("GAME_1530","##",v0t.REQUIRED_PET_POINT,`펫 포인트가 ${
-  이상이면 이용할 수 있습니다.`));
+  이상이면 이용할 수 있습니다.`),i=Math.floor(ux.getInstance().getPetPoint());
+ return void WF.getInstance().showMessage(`${
+ t}
+ \n${
+ LG.getText("GAME_572","펫 포인트")}
+  : ${
+ i}
+ `)}
+ getHeight(){
+ return this.bg.height}
SettingEtcInfo 4 hunks, 15 statements
- t.align="center",this.btnAttendReward.setStyle(t),this.btnAttendReward.onClick=this.onAttendRewardBtnClick.bind(this),this.btnContainer=new Ue,this.addChild(this.btnContainer),this.updateLayout()}
+ t.align="center",this.btnAttendReward.setStyle(t),this.btnAttendReward.onClick=this.onAttendRewardBtnClick.bind(this),this.btnQuizRoulette=new Kqt(LG.getText("ROULETTE_1","오늘도 룰렛")),this.btnQuizRoulette.setStyle(t),this.btnQuizRoulette.onClick=this.onQuizRouletteBtnClick.bind(this),this.btnContainer=new Ue,this.addChild(this.btnContainer),this.updateLayout()}
- n&&t.push(this.btnPromotion),t.push(this.btnWithdraw),DL.getInstance().development&&t.push(this.btnLineMarketLink),t.push(this.btnAttendReward);
+ n&&t.push(this.btnPromotion),t.push(this.btnWithdraw),LD.getInstance().development&&t.push(this.btnLineMarketLink),t.push(this.btnAttendReward),LD.getInstance().development&&t.push(this.btnQuizRoulette);
- this.btnLangChange.text=DG.getText("COMMON_54","언어변경"),this.btnAttendReward.text=DG.getText("GAME_245","출석 보상"),this.updateLayout()}
+ this.btnLangChange.text=LG.getText("COMMON_54","언어변경"),this.btnAttendReward.text=LG.getText("GAME_245","출석 보상"),this.btnQuizRoulette.text=LG.getText("ROULETTE_1","오늘도 룰렛"),this.updateLayout(),this.checkRedDot()}
+ async checkRedDot(){
+ LD.getInstance().development&&(null!=this.btnQuizRoulette.parent&&await zni.checkRedDotRoulette()?this.btnQuizRoulette.showRedDot():this.btnQuizRoulette.hideRedDot())}
+ async onQuizRouletteBtnClick(){
+ if(0==zni.unlocked){
+ const t=zni.openWave;
+ let i=LG.getValueReplace("GAME_633","##",`${
+ t}
+ `,`최고 WAVE ${
+ t}
+  이상에서 환생 후 이용가능합니다.`);
+ return void SG.getInstance().show(i)}
+ await Zni.getInstance().setData(),Zni.getInstance().show()}
PetBuffSource 1 hunks, 13 statements
- collectActiveSkills(){
- const t=ux.getInstance(),i=[],s=t.representPet;
- for(const e of t.list){
+ static collectContextBuffsFor(i,s,e){
+ const n=t.getInstance(),h=[];
+ for(const t of n.collectActiveSkills(i,s)){
+ if("SUPPORT"===t.skillType)continue;
+ if(ux.isRaidSkillType(t.skillType))continue;
+ const i=n.parseContextSkillId(t.skillId);
+ i&&i.context===e&&h.push({
+ target:i.target,stat:i.stat,value:t.value}
+ )}
+ return h}
+ collectActiveSkills(t,i){
+ const s=ux.getInstance(),e=[],n=void 0!==t?i??0:s.representPet,h=t??s.list;
+ for(const r of h){
TowerService 2 hunks, 12 statements
- async enter(t,i=!1){
- return this.post(QR.TOWER.ENTER,{
+ async enter(t,i,s=!1){
+ return this.post(QR.TOWER.ENTER,i?{
+ floor:t,deck:i}
+ :{
+ async getClearDecks(t,i=!1){
+ return this.post(QR.TOWER.GET_CLEAR_DECKS,{
+ floor:t}
+ ,i)}
+ async likeClearDeck(t,i=!1){
+ return this.post(QR.TOWER.LIKE_CLEAR_DECK,{
+ deckId:t}
+ ,i)}
RaidBattleController 4 hunks, 12 statements
+ getFieldWidth(){
+ return t.FIELD_WIDTH}
+ getFieldHeight(){
+ return t.FIELD_HEIGHT}
+ await this.startBattleImpl(t)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleImpl(t){
+ try{
- const n=_x.getInstance().getBookVO(i);
+ const n=_x.getInstance(),h=n.getBookVO(i);
- const h=(1+.4*Math.max(0,s))*Math.pow(1.03,Math.max(0,e-1));
+ const r=(1+.4*Math.max(0,s))*Math.pow(1.03,Math.max(0,e-1))*n.getTransPointMultiplier(i);
GuildWarSquadsPopup 5 hunks, 11 statements
- super(),qt(this,"lblTitle"),qt(this,"lblHeroHeader"),qt(this,"lblSoldierHeader"),qt(this,"lblHint1"),qt(this,"lblHint2"),qt(this,"heroSlotBtns",[]),qt(this,"soldierSlotBtns",[]),qt(this,"soldierCountLbls",[]),qt(this,"soldierStageBadges",[]),qt(this,"heroCcBadges",[]),qt(this,"soldierCcBadges",[]),qt(this,"heroList"),qt(this,"soldierList"),qt(this,"btnSave"),qt(this,"btnCancel"),qt(this,"lblListHeader"),qt(this,"btnGuide"),qt(this,"squads",[]),qt(this,"mode",0),qt(this,"boostEnabled",!1),qt(this,"raidVulns",null),qt(this,"raidOrder",!1),qt(this,"pool","war"),qt(this,"selectedSlot",-1),qt(this,"heroVOs",[]),qt(this,"barrackVOs",[]),qt(this,"onSaved",null);
+ super(),qt(this,"lblTitle"),qt(this,"lblHeroHeader"),qt(this,"lblSoldierHeader"),qt(this,"lblHint1"),qt(this,"lblHint2"),qt(this,"heroSlotBtns",[]),qt(this,"soldierSlotBtns",[]),qt(this,"soldierCountLbls",[]),qt(this,"soldierStageBadges",[]),qt(this,"heroCcBadges",[]),qt(this,"soldierCcBadges",[]),qt(this,"heroList"),qt(this,"soldierList"),qt(this,"btnSave"),qt(this,"btnCancel"),qt(this,"lblListHeader"),qt(this,"btnGuide"),qt(this,"btnClearAll"),qt(this,"squads",[]),qt(this,"mode",0),qt(this,"boostEnabled",!1),qt(this,"raidVulns",null),qt(this,"raidOrder",!1),qt(this,"pool","war"),qt(this,"selectedSlot",-1),qt(this,"heroVOs",[]),qt(this,"barrackVOs",[]),qt(this,"onSaved",null);
- ),this.btnGuide.visible=!1,this.addChild(this.btnGuide);
+ ),this.btnGuide.visible=!1,this.addChild(this.btnGuide),this.btnClearAll=new oG(LG.getText("GAME_1620","모두 비우기")),this.btnClearAll.color=oG.BROWN,this.btnClearAll.width=120,this.btnClearAll.height=34,this.btnClearAll.x=this.bg.width-this.btnClearAll.width-15,this.btnClearAll.y=this.lblTitle.y-5,this.btnClearAll.onClick=()=>this.onClearAllClick(),this.addChild(this.btnClearAll);
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
+ onClearAllClick(){
+ for(let i=0;
+ i<t.NUM_SLOTS;
+ i++)this.squads[i]={
+ heroKindNum:-1,heroTrans:0,barrackKindNum:0}
+ ;
+ this.selectedSlot=0,this.refreshSlots(),this.refreshList()}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
TowerBattleController 4 hunks, 9 statements
+ try{
+ await this.startBattleImpl(t,i)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleImpl(i,s){
- n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans),n.numBlock=0,n.baseMaxHp*=3,n.orgMaxHp*=3,n.maxHp*=3,n.health=n.maxHp,n.orgMoveSpd=n.moveSpd=1.3*n.moveSpd,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange,n.attackCoolDown=0,n.skillCallIndex=0,n.attackCallIndex=0,n.attackIndex=0;
+ n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans,_x.getInstance().getTransPointMultiplier(s.kindNum)),n.numBlock=0,n.baseMaxHp*=3,n.orgMaxHp*=3,n.maxHp*=3,n.health=n.maxHp,n.orgMoveSpd=n.moveSpd=1.3*n.moveSpd,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange,n.attackCoolDown=0,n.skillCallIndex=0,n.attackCallIndex=0,n.attackIndex=0;
- applyRawBvoStats(t,i,s=0){
+ applyRawBvoStats(t,i,s=0,e=1){
- const n=1+.4*Math.max(0,s);
+ const h=(1+.4*Math.max(0,s))*Math.max(1,e);
SpriteBattleController 4 hunks, 9 statements
+ try{
+ await this.startBattleImpl(t,i)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleImpl(t,i){
- n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans),n.numBlock=0,n.baseMaxHp*=3,n.baseMoveSpd*=1.3,zR.getInstance().applyToHero(n),n.health=n.maxHp,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange;
+ n.battleController=this,n.setData(s),this.applyRawBvoStats(n,s.kindNum,s.trans,_x.getInstance().getTransPointMultiplier(s.kindNum)),n.numBlock=0,n.baseMaxHp*=3,n.baseMoveSpd*=1.3,zR.getInstance().applyToHero(n),n.health=n.maxHp,n.initDelay=0,n.showTombstone=!1,n.maxRevive=0,n.reviveInterval=0,n.totalDamageDealt=0,n.detectRange=600,n.detectRange2=n.detectRange*n.detectRange;
- applyRawBvoStats(t,i,s=0){
+ applyRawBvoStats(t,i,s=0,e=1){
- const n=1+.4*Math.max(0,s);
+ const h=(1+.4*Math.max(0,s))*Math.max(1,e);
SpriteBattleReadyPopup 6 hunks, 9 statements
- super(),qt(this,"vsImage",new $e(tS.getTexture("UI_Ekkorr","UI_VS"))),qt(this,"lblTitle",new hL("",16777215,wD.DEFAULT_OUTLINE_FONT_OPTION_17)),qt(this,"lblTryCount"),qt(this,"lblTicket"),qt(this,"btnBuyTicket"),qt(this,"allyBtns",[]),qt(this,"enemyBtns",[]),qt(this,"battleContainer",new Ue),qt(this,"btnStart",new oG("도전")),qt(this,"btnSweep",new oG("즉시완료")),qt(this,"enemyOverlays",[]),qt(this,"lblCapacity",new hL("",16777215,wD.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblEntryText",new hL("",16768358,wD.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblStar3",new hL("",16763904,wD.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblStar2",new hL("",13421772,wD.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblStar1",new hL("",13404228,wD.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"heroList"),qt(this,"selectedSlot",-1),qt(this,"teamKindNums",[]),qt(this,"teamTrans",[]),qt(this,"heroVOs",[]),qt(this,"currentStageVO",null),qt(this,"maxAllies",12);
+ super(),qt(this,"vsImage",new $e(tS.getTexture("UI_Ekkorr","UI_VS"))),qt(this,"lblTitle",new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_17)),qt(this,"lblTryCount"),qt(this,"lblTicket"),qt(this,"btnBuyTicket"),qt(this,"allyBtns",[]),qt(this,"enemyBtns",[]),qt(this,"battleContainer",new Ue),qt(this,"btnStart",new oG("도전")),qt(this,"btnSweep",new oG("즉시완료")),qt(this,"btnClearAll"),qt(this,"enemyOverlays",[]),qt(this,"lblCapacity",new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblEntryText",new hD("",16768358,wL.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblStar3",new hD("",16763904,wL.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblStar2",new hD("",13421772,wL.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"lblStar1",new hD("",13404228,wL.DEFAULT_OUTLINE_FONT_OPTION_16)),qt(this,"heroList"),qt(this,"selectedSlot",-1),qt(this,"teamKindNums",[]),qt(this,"teamTrans",[]),qt(this,"heroVOs",[]),qt(this,"currentStageVO",null),qt(this,"maxAllies",12);
- const n=s+192+5;
+ const n=s+192+10;
- Uqt.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new U5(Uqt,630,o),this.heroList.x=5,this.heroList.y=r,this.addChild(this.heroList),this.btnSweep.color=oG.GREEN,this.btnSweep.width=160,this.btnSweep.height=55,this.btnSweep.x=.5*(this.bg.width-340),this.btnSweep.y=this.bg.height-65,this.btnSweep.onClick=this.onSweep.bind(this),this.addChild(this.btnSweep),this.btnStart.color=oG.RED,this.btnStart.width=160,this.btnStart.height=55,this.btnStart.x=this.btnSweep.x+this.btnSweep.width+20,this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart),this.updateLayout()}
+ Uqt.onHeroClick=this.onClickHeroFromList.bind(this),this.heroList=new U5(Uqt,630,o),this.heroList.x=5,this.heroList.y=r,this.addChild(this.heroList),this.btnSweep.color=oG.GREEN,this.btnSweep.width=160,this.btnSweep.height=55,this.btnSweep.x=.5*(this.bg.width-340),this.btnSweep.y=this.bg.height-65,this.btnSweep.onClick=this.onSweep.bind(this),this.addChild(this.btnSweep),this.btnStart.color=oG.RED,this.btnStart.width=160,this.btnStart.height=55,this.btnStart.x=this.btnSweep.x+this.btnSweep.width+20,this.btnStart.y=this.bg.height-65,this.btnStart.onClick=this.onStartBattle.bind(this),this.addChild(this.btnStart),this.btnClearAll=new oG(LG.getText("GAME_1620","모두 비우기")),this.btnClearAll.color=oG.BROWN,this.btnClearAll.width=120,this.btnClearAll.height=30,this.btnClearAll.x=this.bg.width-this.btnClearAll.width-15,this.btnClearAll.y=n-5,this.btnClearAll.onClick=()=>this.onClearAllClick(),this.addChild(this.btnClearAll),this.updateLayout()}
- this.lblTryCount.x=this.lblTitle.x+this.lblTitle.width+3,this.lblTryCount.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTryCount.height-1),this.btnBuyTicket.x=this.bg.width-this.btnBuyTicket.width-15,this.btnBuyTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnBuyTicket.height),this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-10,this.lblTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTicket.height)}
+ this.lblTryCount.x=this.lblTitle.x+this.lblTitle.width+3,this.lblTryCount.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTryCount.height-1),this.btnBuyTicket.x=this.bg.width-this.btnBuyTicket.width-15,this.btnBuyTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.btnBuyTicket.height),this.lblTicket.x=this.btnBuyTicket.x-this.lblTicket.width-10,this.lblTicket.y=this.lblTitle.y+.5*(this.lblTitle.height-this.lblTicket.height),this.btnClearAll.x=this.bg.width-this.btnClearAll.width-15,wL.setLabelWrapWidth(this.lblEntryText,this.btnClearAll.x-this.lblEntryText.x);
+ const t=this.lblTitle.y+this.lblTitle.height+20+192+10;
+ this.lblEntryText.y=t+12-.5*this.lblEntryText.height,this.btnClearAll.y=this.lblEntryText.y+.5*(this.lblEntryText.height-this.btnClearAll.height)}
- u&&u.kindNums&&12===u.kindNums.length?(this.teamKindNums=[...u.kindNums],this.teamTrans=[...u.trans]):this.initTeam(),this.clampTeamToMax(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList(),this.btnStart.text=DG.getText("COMMON_378","도전"),this.btnSweep.text=DG.getText("COMMON_379","즉시완료"),this.btnBuyTicket.text=DG.getText("COMMON_7","구매"),this.updateLayout()}
+ u&&u.kindNums&&12===u.kindNums.length?(this.teamKindNums=[...u.kindNums],this.teamTrans=[...u.trans]):this.initTeam(),this.clampTeamToMax(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),this.updateHeroList(),this.btnStart.text=LG.getText("COMMON_378","도전"),this.btnSweep.text=LG.getText("COMMON_379","즉시완료"),this.btnBuyTicket.text=LG.getText("COMMON_7","구매"),this.btnClearAll.text=LG.getText("GAME_1620","모두 비우기"),this.updateLayout()}
+ onClearAllClick(){
+ this.teamKindNums=new Array(12).fill(-1),this.teamTrans=new Array(12).fill(0),this.selectedSlot=-1,this.updateAllyButtons(),this.updateHeroList(),this.currentStageVO&&VA.saveSpiritTeam(this.currentStageVO.kindNum,this.teamKindNums,this.teamTrans)}
URLManager 2 hunks, 8 statements
- /tower/end`}
+ /tower/end`,GET_CLEAR_DECKS:`${
+ t.baseURL}
+ /tower/getClearDecks`,LIKE_CLEAR_DECK:`${
+ t.baseURL}
+ /tower/likeClearDeck`}
- /minigame/getRanking`}
+ /minigame/getRanking`,ROLL_ROULETTE:`${
+ t.baseURL}
+ /minigame/rollRoulette`}
PetDataManager 2 hunks, 7 statements
+ isRaidResistPet(t){
+ var i,s;
+ const e=this.bookMap.get(t);
+ if(!e)return!1;
+ for(const n of[e.skill1,e.skill2,e.masterSkill])if(n&&(null==(s=null==(i=this.skillBookMap.get(n))?void 0:i.id)?void 0:s.startsWith("RESIST_")))return!0;
+ return!1}
- return this.list.filter(s=>s.grade>=5&&s.piece>=t&&s.kindNum!==i).sort((t,i)=>i.piece-t.piece)}
+ return this.list.filter(s=>s.grade>=5&&s.piece>=t&&s.kindNum!==i&&!this.isRaidResistPet(s.kindNum)).sort((t,i)=>i.piece-t.piece)}
MaterialCell 3 hunks, 7 statements
- super(),qt(this,"petIcon"),qt(this,"lblName"),qt(this,"lblPiece"),qt(this,"checkIcon"),this.petIcon=new A5,this.petIcon.x=6;
+ super(),qt(this,"petIcon"),qt(this,"lblName"),qt(this,"lblPiece"),qt(this,"lblConsume"),qt(this,"checkIcon"),this.petIcon=new A5,this.petIcon.x=6;
- this.lblName=new hL("",16777215,wD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblName.x=i,this.lblName.y=this.petIcon.y,this.addChild(this.lblName),this.lblPiece=new hL("",8978244,wD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPiece.x=i,this.lblPiece.y=this.petIcon.y+28,this.addChild(this.lblPiece),this.checkIcon=new $e(tS.getTexture("UI_Ekkorr","Base_Check01")),this.checkIcon.x=this.petIcon.x+.5*(this.petIcon.width-this.checkIcon.width),this.checkIcon.y=this.petIcon.y+.5*(this.petIcon.height-this.checkIcon.height),this.checkIcon.visible=!1,this.addChild(this.checkIcon)}
+ this.lblName=new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblName.x=i,this.lblName.y=this.petIcon.y,this.addChild(this.lblName),wL.setLabelWrapWidth(this.lblName,198-this.lblName.x),this.lblPiece=new hD("",8978244,wL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblPiece.x=i,this.lblPiece.y=this.petIcon.y+28,this.addChild(this.lblPiece),this.lblConsume=new hD("",16755251,wL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblConsume.y=this.lblPiece.y,this.lblConsume.visible=!1,this.addChild(this.lblConsume),this.checkIcon=new $e(tS.getTexture("UI_Ekkorr","Base_Check01")),this.checkIcon.x=this.petIcon.x+.5*(this.petIcon.width-this.checkIcon.width),this.checkIcon.y=this.petIcon.y+.5*(this.petIcon.height-this.checkIcon.height),this.checkIcon.visible=!1,this.addChild(this.checkIcon)}
- `,this.checkIcon.visible=i}
+ `,this.lblPiece.y=this.lblName.y+this.lblName.height+3;
+ const r=i>0;
+ this.checkIcon.visible=r,this.lblConsume.visible=r,r&&(this.lblConsume.text=`-${
+ i}
+ `,this.lblConsume.x=this.lblPiece.x+this.lblPiece.width+6)}
CastleAutoController 5 hunks, 7 statements
- qt(this,"timer",null),qt(this,"_enabled",!1)}
+ qt(this,"frameCount",0),qt(this,"frameRegistered",!1),qt(this,"_enabled",!1)}
- null==this.timer&&(this.timer=setInterval(()=>this.tick(),t.TICK_INTERVAL_MS))}
+ this.frameRegistered||(this.frameRegistered=!0,this.frameCount=0,nB.getInstance().add(this.onFrame,this))}
- null!=this.timer&&(clearInterval(this.timer),this.timer=null)}
+ this.frameRegistered&&(this.frameRegistered=!1,nB.getInstance().remove(this.onFrame,this))}
+ onFrame(){
+ ++this.frameCount<t.TICK_FRAMES||(this.frameCount=0,this.tick())}
+ if(!pD.isIdleBattle)return;
- zt(xhi,"CastleAutoController"),qt(xhi,"instance"),qt(xhi,"TICK_INTERVAL_MS",3e3),qt(xhi,"SPEND_RATIO_PER_TICK",.5),qt(xhi,"UNLOCK_WAVE",100);
+ zt(sri,"CastleAutoController"),qt(sri,"instance"),qt(sri,"TICK_FRAMES",180),qt(sri,"SPEND_RATIO_PER_TICK",.5),qt(sri,"UNLOCK_WAVE",100);
QuestAutoController 3 hunks, 7 statements
- if(e<=0)return null;
- for(const t of s.list){
+ if(e>0)for(const t of s.list){
- if(n&&e>=n.effectiveOpenGold*t.OPEN_BUDGET_MULT)return{
+ if(n){
+ const i=n.effectiveOpenGold;
+ if(OD.gold>=i*t.OPEN_BUDGET_MULT)return{
- ;
+ }
+ if(e<=0)return null;
BaseWeapon 3 hunks, 6 statements
- var kj=(t=>(t.NormalArrow="NormalArrow",t.EnergyBall="EnergyBall",t.SpeedArrow="SpeedArrow",t.Bullet1="Bullet1",t.OrcSpearmanSpear1="OrcSpearmanSpear1",t.OrcIceMageFire1="OrcIceMageFire1",t.PoisonArcherArrow1="PoisonArcherArrow1",t.FireBirdBall1="FireBirdBall1",t.GreenEagleBall1="GreenEagleBall1",t.BlackMageBall1="BlackMageBall1",t.BlackMageDarkBall1="BlackMageDarkBall1",t.DarkMageBall1="DarkMageBall1",t.DarkMageSkillBall1="DarkMageSkillBall1",t.GreenEnergyBall="GreenEnergyBall",t.YellowEnergyBall="YellowEnergyBall",t.FairyMusicNote="FairyMusicNote",t.GhostBall1="GhostBall1",t.DarkArcherArrow1="DarkArcherArrow1",t.OrcWingBall1="OrcWingBall1",t.OrcAxeBall1="OrcAxeBall1",t.Twist="Twist",t.FlowerBullet="FlowerBullet",t.Rock="Rock",t.DarkHermitMissile="DarkHermitMissile",t.Pearl="Pearl",t.UniArrow="UniArrow",t.PowerArrow="PowerArrow",t.OrcBlizzardMageRain1="OrcBlizzardMageRain1",t.FireMagicBall1="FireMagicBall1",t.FireMageBird1="FireMageBird1",t.BomberSmallBomb1="BomberSmallBomb1",t.BomberBigBomb1="BomberBigBomb1",t.IceFlake="IceFlake",t.PoisonArcherArrowSkill1="PoisonArcherArrowSkill1",t.OrcIceMageFireSkill1="OrcIceMageFireSkill1",t.PilotMissile1="PilotMissile1",t.FireBullet="FireBullet",t.AntRock1="AntRock1",t.SpeedArrow2="SpeedArrow2",t.MoleFire="MoleFire",t.OrcRapterRiderSpear1="OrcRapterRiderSpear1",t.WyvernRiderThrowingKnife1="WyvernRiderThrowingKnife1",t.WyvernRiderThrowingKnifeS1="WyvernRiderThrowingKnifeS1",t.SuccubusBlade1="SuccubusBlade1",t.SuccubusWeapon="SuccubusWeapon",t.DarkChain1="DarkChain1",t.DruidTangle1="DruidTangle1",t.DruidDrill1="DruidDrill1",t.TigerRiderArrow1="TigerRiderArrow1",t.GriffinSpear1="GriffinSpear1",t.GriffinSuperSpear1="GriffinSuperSpear1",t.SteamFire1="SteamFire1",t.SteamMissile1="SteamMissile1",t.SylphidTornado1="SylphidTornado1",t.SylphidShuriken1="SylphidShuriken1",t.AladinCoin1="AladinCoin1",t.BladeWave1="BladeWave1",t.SpinBlade="SpinBlade",t.CrowKnightBullet1="CrowKnightBullet1",t.CrowCompanion1="CrowCompanion1",t.CrowGuidedBall1="CrowGuidedBall1",t.CrowFeatherShot1="CrowFeatherShot1",t.ScorpionPoisonBullet="ScorpionPoisonBullet",t.ScorpionPoisonArea="ScorpionPoisonArea",t.ScorpionCraterArea="ScorpionCraterArea",t.HarpyFeather="HarpyFeather",t.HarpyTornado="HarpyTornado",t.AladinGenieBoomerang="AladinGenieBoomerang",t.GolemStone="GolemStone",t.BerialLightning="BerialLightning",t.BerialLightningArea="BerialLightningArea",t.BerialFire="BerialFire",t.SummonDragon="SummonDragon",t.DKSpear="DKSpear",t))(kj||{
+ var kj=(t=>(t.NormalArrow="NormalArrow",t.EnergyBall="EnergyBall",t.SpeedArrow="SpeedArrow",t.Bullet1="Bullet1",t.OrcSpearmanSpear1="OrcSpearmanSpear1",t.OrcIceMageFire1="OrcIceMageFire1",t.PoisonArcherArrow1="PoisonArcherArrow1",t.FireBirdBall1="FireBirdBall1",t.GreenEagleBall1="GreenEagleBall1",t.BlackMageBall1="BlackMageBall1",t.BlackMageDarkBall1="BlackMageDarkBall1",t.DarkMageBall1="DarkMageBall1",t.DarkMageSkillBall1="DarkMageSkillBall1",t.GreenEnergyBall="GreenEnergyBall",t.YellowEnergyBall="YellowEnergyBall",t.FairyMusicNote="FairyMusicNote",t.GhostBall1="GhostBall1",t.DarkArcherArrow1="DarkArcherArrow1",t.OrcWingBall1="OrcWingBall1",t.OrcAxeBall1="OrcAxeBall1",t.Twist="Twist",t.FlowerBullet="FlowerBullet",t.Rock="Rock",t.DarkHermitMissile="DarkHermitMissile",t.Pearl="Pearl",t.UniArrow="UniArrow",t.PowerArrow="PowerArrow",t.OrcBlizzardMageRain1="OrcBlizzardMageRain1",t.FireMagicBall1="FireMagicBall1",t.FireMageBird1="FireMageBird1",t.BomberSmallBomb1="BomberSmallBomb1",t.BomberBigBomb1="BomberBigBomb1",t.IceFlake="IceFlake",t.PoisonArcherArrowSkill1="PoisonArcherArrowSkill1",t.OrcIceMageFireSkill1="OrcIceMageFireSkill1",t.PilotMissile1="PilotMissile1",t.FireBullet="FireBullet",t.AntRock1="AntRock1",t.SpeedArrow2="SpeedArrow2",t.MoleFire="MoleFire",t.OrcRapterRiderSpear1="OrcRapterRiderSpear1",t.WyvernRiderThrowingKnife1="WyvernRiderThrowingKnife1",t.WyvernRiderThrowingKnifeS1="WyvernRiderThrowingKnifeS1",t.SuccubusBlade1="SuccubusBlade1",t.SuccubusWeapon="SuccubusWeapon",t.DarkChain1="DarkChain1",t.DruidTangle1="DruidTangle1",t.DruidDrill1="DruidDrill1",t.TigerRiderArrow1="TigerRiderArrow1",t.GriffinSpear1="GriffinSpear1",t.GriffinSuperSpear1="GriffinSuperSpear1",t.SteamFire1="SteamFire1",t.SteamMissile1="SteamMissile1",t.SylphidTornado1="SylphidTornado1",t.SylphidShuriken1="SylphidShuriken1",t.AladinCoin1="AladinCoin1",t.BladeWave1="BladeWave1",t.SpinBlade="SpinBlade",t.CrowKnightBullet1="CrowKnightBullet1",t.CrowCompanion1="CrowCompanion1",t.CrowGuidedBall1="CrowGuidedBall1",t.CrowFeatherShot1="CrowFeatherShot1",t.ScorpionPoisonBullet="ScorpionPoisonBullet",t.ScorpionPoisonArea="ScorpionPoisonArea",t.HarpyFeather="HarpyFeather",t.HarpyTornado="HarpyTornado",t.AladinGenieBoomerang="AladinGenieBoomerang",t.GolemStone="GolemStone",t.BerialLightning="BerialLightning",t.BerialLightningArea="BerialLightningArea",t.BerialFire="BerialFire",t.SummonDragon="SummonDragon",t.DKSpear="DKSpear",t))(kj||{
+ isOutOfField(t,i=!0){
+ var s,e;
+ const n=this.battleController,h=((null==(s=null==n?void 0:n.getFieldWidth)?void 0:s.call(n))??640)+t,r=((null==(e=null==n?void 0:n.getFieldHeight)?void 0:e.call(n))??640)+t;
+ return this.x<-t||this.x>h||this.y>r||i&&this.y<-t}
- (!this.target||this.target.removed||!this.target.isAlive)&&(this.x<-200||this.x>840||this.y<-200||this.y>840)&&this.remove()}
+ (!this.target||this.target.removed||!this.target.isAlive)&&this.isOutOfField(200)&&this.remove()}
DungeonBattleController 1 hunks, 6 statements
+ try{
+ await this.startBattleImpl(t,i)}
+ catch(Aet){
+ throw zR.getInstance().setBattleContext(NR.Normal),Aet}
+ }
+ async startBattleImpl(t,i){
LocalDataManager 1 hunks, 4 statements
+ static async getRouletteDisplayInfo(){
+ return await this.getData(this.getKey("rDi"))}
+ static async saveRouletteDisplayInfo(t){
+ await this.saveData(this.getKey("rDi"),t)}
MiniGameService 1 hunks, 4 statements
+ async rollRoulette(t,i=!1){
+ return this.post(QR.MINIGAME.ROLL_ROULETTE,{
+ gameId:t}
+ ,i)}
ActiveSkillButton 4 hunks, 4 statements
+ if(pD.isIdleBattle){
+ }
- _ON`),this.iconOff.texture=tS.getTexture("UI_Ekkorr",`UI_SKILL${
+ _ON`)??tS.getTexture("UI_Ekkorr","UI_SKILL1_ON"),this.iconOff.texture=tS.getTexture("UI_Ekkorr",`UI_SKILL${
- _OFF`)}
+ _OFF`)??tS.getTexture("UI_Ekkorr","UI_SKILL1_OFF")}
BaseBattleController 1 hunks, 4 statements
+ getFieldWidth(){
+ return 640}
+ getFieldHeight(){
+ return 640}
Archery2GameScene 4 hunks, 4 statements
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16777215}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16777215}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16766720}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16766720}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16737792}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16737792}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16777215}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16777215}
ReviveTreasurePopup 2 hunks, 4 statements
- super(),qt(this,"onSaved",null),qt(this,"lblDesc"),qt(this,"lblBuff"),qt(this,"lblSelect"),qt(this,"slotContainer"),qt(this,"slotIcons",[]),qt(this,"list"),qt(this,"btnConfirm"),qt(this,"selected",[]),qt(this,"slotCount",5),this.width=640,this.title=DG.getText("GAME_1546","환생유물 편성"),this.lblDesc=new hL("",13421772,wD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblDesc.x=24,this.lblDesc.y=68,this.lblDesc.text=DG.getText("GAME_1547","환생 시 이 유물들의 훈장이 사용됩니다."),this.addChild(this.lblDesc),wD.setLabelWrapWidth(this.lblDesc,this.width-2*this.lblDesc.x),this.slotContainer=new Ue,this.slotContainer.x=24,this.slotContainer.y=this.lblDesc.y+this.lblDesc.height+10,this.addChild(this.slotContainer),this.slotContainer.eventMode="static",this.slotContainer.on("pointertap",this.onSlotTap,this),this.lblBuff=new hL("",16777215,wD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblBuff.textColor=16767354,this.addChild(this.lblBuff),this.lblSelect=new hL("",16777215,wD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblSelect.x=24,this.lblSelect.text="+ "+DG.getText("GAME_1548","유물 선택"),this.addChild(this.lblSelect),this.list=new U5(Kgi,630,500),this.list.x=5,this.addChild(this.list),this.btnConfirm=new oG(DG.getText("COMMON_1","확인")),this.btnConfirm.color=oG.GREEN,this.btnConfirm.width=200,this.btnConfirm.height=55,this.btnConfirm.x=.5*(640-this.btnConfirm.width),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm)}
+ super(),qt(this,"onSaved",null),qt(this,"lblDesc"),qt(this,"lblBuff"),qt(this,"lblSelect"),qt(this,"slotContainer"),qt(this,"slotIcons",[]),qt(this,"list"),qt(this,"btnConfirm"),qt(this,"btnClearAll"),qt(this,"selected",[]),qt(this,"slotCount",5),this.width=640,this.title=LG.getText("GAME_1546","환생유물 편성"),this.lblDesc=new hD("",13421772,wL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblDesc.x=24,this.lblDesc.y=68,this.lblDesc.text=LG.getText("GAME_1547","환생 시 이 유물들의 훈장이 사용됩니다."),this.addChild(this.lblDesc),wL.setLabelWrapWidth(this.lblDesc,this.width-2*this.lblDesc.x),this.slotContainer=new Ue,this.slotContainer.x=24,this.slotContainer.y=this.lblDesc.y+this.lblDesc.height+10,this.addChild(this.slotContainer),this.slotContainer.eventMode="static",this.slotContainer.on("pointertap",this.onSlotTap,this),this.lblBuff=new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblBuff.textColor=16767354,this.addChild(this.lblBuff),this.lblSelect=new hD("",16777215,wL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblSelect.x=24,this.lblSelect.text="+ "+LG.getText("GAME_1548","유물 선택"),this.addChild(this.lblSelect),this.btnClearAll=new oG(LG.getText("GAME_1620","모두 비우기")),this.btnClearAll.color=oG.BROWN,this.btnClearAll.width=120,this.btnClearAll.height=30,this.btnClearAll.x=this.width-24-this.btnClearAll.width,this.btnClearAll.onClick=()=>{
+ 0!==this.selected.length&&(this.selected.length=0,this.updateSlots(),this.refreshListSelection())}
+ ,this.addChild(this.btnClearAll),this.list=new U5(Ami,630,500),this.list.x=5,this.addChild(this.list),this.btnConfirm=new oG(LG.getText("COMMON_1","확인")),this.btnConfirm.color=oG.GREEN,this.btnConfirm.width=200,this.btnConfirm.height=55,this.btnConfirm.x=.5*(640-this.btnConfirm.width),this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.addChild(this.btnConfirm)}
- this.lblBuff.y=this.slotContainer.y+i*s+8,this.lblBuff.x=this.width-24-this.lblBuff.width,this.lblSelect.y=this.lblBuff.y+this.lblBuff.height+8,this.list.y=this.lblSelect.y+30,this.btnConfirm.y=this.list.y+500+16,this.bg.height=this.btnConfirm.y+this.btnConfirm.height+24}
+ this.lblBuff.y=this.slotContainer.y+i*s+8,this.lblBuff.x=this.width-24-this.lblBuff.width,this.lblSelect.y=this.lblBuff.y+this.lblBuff.height+8,this.btnClearAll.y=this.lblSelect.y+.5*(this.lblSelect.height-this.btnClearAll.height),this.list.y=this.lblSelect.y+30,this.btnConfirm.y=this.list.y+500+16,this.bg.height=this.btnConfirm.y+this.btnConfirm.height+24}
UnitVO 1 hunks, 3 statements
- if(this.isEnemy)return 1;
- const t=_x.getInstance().calcHeroTransPoint(this.kindNum);
- return 1+Math.min(t,100)/100}
+ return this.isEnemy?1:_x.getInstance().getTransPointMultiplier(this.kindNum)}
BookManager 2 hunks, 3 statements
- var ID=(t=>(t.CASTLE="CASTLE",t.CASTLE_SPECIAL="CASTLE_SPECIAL",t.UNIT="UNIT",t.QUEST="QUEST",t.TREASURE="TREASURE",t.SCENARIO="SCENARIO",t.SCENARIO_PATTERN="SCENARIO_PATTERN",t.HERO_MEDAL_ENHANCE_TIER="HERO_MEDAL_ENHANCE_TIER",t.HERO_MEDAL_ENHANCE_SEGMENT="HERO_MEDAL_ENHANCE_SEGMENT",t.HERO_UPGRADE_TIER="HERO_UPGRADE_TIER",t.HERO_REBIRTH_MEDAL_TIER="HERO_REBIRTH_MEDAL_TIER",t.HERO_REBIRTH_MEDAL_SEGMENT="HERO_REBIRTH_MEDAL_SEGMENT",t.HERO_GOLD_SKILL="HERO_GOLD_SKILL",t.HERO_UNIQUE_SKILL="HERO_UNIQUE_SKILL",t.DUNGEON="DUNGEON",t.TREASURE_VALUE="TREASURE_VALUE",t.TREASURE_SET="TREASURE_SET",t.ACHIEVEMENT="ACHIEVEMENT",t.PVP_RANK_REWARD="PVP_RANK_REWARD",t.PASS_REWARD="PASS_REWARD",t.TIP="TIP",t.DIALOGUE="DIALOGUE",t.TOWER_BATTLE_POOL="TOWER_BATTLE_POOL",t.TOWER_SEASON_SET="TOWER_SEASON_SET",t.TOWER_REWARD="TOWER_REWARD",t.MISSION_GUIDE="MISSION_GUIDE",t.MISSION_GUIDE_STEP="MISSION_GUIDE_STEP",t.GUILD_LEVEL="GUILD_LEVEL",t.PET="PET",t.PET_SKILL="PET_SKILL",t.SPIRIT_LAND="SPIRIT_LAND",t.GUILD_BARRACK="GUILD_BARRACK",t.SELECT_TICKET="SELECT_TICKET",t.PRODUCT="PRODUCT",t.GUILD_WAR_CONFIG="GUILD_WAR_CONFIG",t.GUILD_RAID="GUILD_RAID",t.TREASURE_LIMIT_BREAK="TREASURE_LIMIT_BREAK",t.MINE_LEVEL="MINE_LEVEL",t.MINE_CHEST_REWARD="MINE_CHEST_REWARD",t.GUILD_WAR_TOURNAMENT_REWARD="GUILD_WAR_TOURNAMENT_REWARD",t.EMBLEM="EMBLEM",t.EMBLEM_SKILL="EMBLEM_SKILL",t.RUNE="RUNE",t.RUNE_GRADE="RUNE_GRADE",t.RUNE_SUB="RUNE_SUB",t))(ID||{
+ var IL=(t=>(t.CASTLE="CASTLE",t.CASTLE_SPECIAL="CASTLE_SPECIAL",t.UNIT="UNIT",t.QUEST="QUEST",t.TREASURE="TREASURE",t.SCENARIO="SCENARIO",t.SCENARIO_PATTERN="SCENARIO_PATTERN",t.HERO_MEDAL_ENHANCE_TIER="HERO_MEDAL_ENHANCE_TIER",t.HERO_MEDAL_ENHANCE_SEGMENT="HERO_MEDAL_ENHANCE_SEGMENT",t.HERO_UPGRADE_TIER="HERO_UPGRADE_TIER",t.HERO_REBIRTH_MEDAL_TIER="HERO_REBIRTH_MEDAL_TIER",t.HERO_REBIRTH_MEDAL_SEGMENT="HERO_REBIRTH_MEDAL_SEGMENT",t.HERO_GOLD_SKILL="HERO_GOLD_SKILL",t.HERO_UNIQUE_SKILL="HERO_UNIQUE_SKILL",t.DUNGEON="DUNGEON",t.TREASURE_VALUE="TREASURE_VALUE",t.TREASURE_SET="TREASURE_SET",t.ACHIEVEMENT="ACHIEVEMENT",t.PVP_RANK_REWARD="PVP_RANK_REWARD",t.PASS_REWARD="PASS_REWARD",t.TIP="TIP",t.DIALOGUE="DIALOGUE",t.TOWER_BATTLE_POOL="TOWER_BATTLE_POOL",t.TOWER_SEASON_SET="TOWER_SEASON_SET",t.TOWER_REWARD="TOWER_REWARD",t.MISSION_GUIDE="MISSION_GUIDE",t.MISSION_GUIDE_STEP="MISSION_GUIDE_STEP",t.GUILD_LEVEL="GUILD_LEVEL",t.PET="PET",t.PET_SKILL="PET_SKILL",t.SPIRIT_LAND="SPIRIT_LAND",t.GUILD_BARRACK="GUILD_BARRACK",t.SELECT_TICKET="SELECT_TICKET",t.PRODUCT="PRODUCT",t.GUILD_WAR_CONFIG="GUILD_WAR_CONFIG",t.GUILD_RAID="GUILD_RAID",t.TREASURE_LIMIT_BREAK="TREASURE_LIMIT_BREAK",t.MINE_LEVEL="MINE_LEVEL",t.MINE_CHEST_REWARD="MINE_CHEST_REWARD",t.GUILD_WAR_TOURNAMENT_REWARD="GUILD_WAR_TOURNAMENT_REWARD",t.EMBLEM="EMBLEM",t.EMBLEM_SKILL="EMBLEM_SKILL",t.RUNE="RUNE",t.RUNE_GRADE="RUNE_GRADE",t.RUNE_SUB="RUNE_SUB",t.DAILY_ROULETTE="DAILY_ROULETTE",t))(IL||{
+ ,DAILY_ROULETTE:{
+ name:"DAILY_ROULETTE",priority:2,dependencies:[]}
GuildManager 1 hunks, 3 statements
- return t.replace(/[^\wa-zA-Z0-9_\-\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100\u0148\u014A\u017F\u1EA0-\u1EF1\u0410-\u044F\u0E01-\u0E3A\u0E40-\u0E59\u3041-\u3096\u309F\u30A1-\u30FF\u3105-\u312D\u4E00-\u9FD5\u3131-\u3163\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6D]/g,"")}
+ return t.replace(/[^\wa-zA-Z0-9_\- \u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100\u0148\u014A\u017F\u1EA0-\u1EF1\u0410-\u044F\u0E01-\u0E3A\u0E40-\u0E59\u3041-\u3096\u309F\u30A1-\u30FF\u3105-\u312D\u4E00-\u9FD5\u3131-\u3163\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6D]/g,"").replace(/ {
+ 2,}
+ /g," ").trim()}
WalletPopup 3 hunks, 3 statements
- ...wD.ERROR_POPUP_LABEL_OPTION,fontSize:24,fontWeight:"bold"}
+ ...wL.ERROR_POPUP_LABEL_OPTION,fontSize:24,fontWeight:"bold"}
- ...wD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
+ ...wL.ERROR_POPUP_LABEL_OPTION,fontSize:16}
- ...wD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
+ ...wL.ERROR_POPUP_LABEL_OPTION,fontSize:16}
PVPBattleSubView 2 hunks, 3 statements
- let i=DG.getText("GAME_283","##보석을 소모하여 무한 랭킹전 티켓을 1장 구매하시겠습니까?");
- K$t.getInstance().show(i.replace("##",String(t)),this.buyTitcket.bind(this))}
+ let s=LG.getText("","##보석을 소모하여 무한 랭킹전 티켓을 @@장 구매하시겠습니까?");
+ K$t.getInstance().show(s.replace("##",String(i)).replace("@@",String(t.TICKETS_PER_PURCHASE)),this.buyTitcket.bind(this))}
- zt(d3t,"PVPBattleSubView"),qt(d3t,"instance"),qt(d3t,"LOAD_COOLDOWN",18e4);
+ zt(y3t,"PVPBattleSubView"),qt(y3t,"instance"),qt(y3t,"TICKETS_PER_PURCHASE",3),qt(y3t,"LOAD_COOLDOWN",18e4);
CastleItemRenderer 2 hunks, 3 statements
- ,this),this.multiLevelContainer.visible=!1,wD.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x-5),wD.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x-5)}
+ ,this),this.multiLevelContainer.addChild(this.btn1000),this.multiLevelContainer.visible=!1,wL.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x-5),wL.setLabelWrapWidth(this.lblDesc,this.btnBuy.x-this.lblDesc.x-5)}
- `:"max",this.btn1000.iconText=u>0?ZD.displayLargeNumberAsAlphabet(d):"",this.btn1000.iconLabel.texture=tS.getTexture("UI_Ekkorr",u>0?"UI_GOLD":"UI_GRAY_GOLD"),this.btn1000.activated=u>0&&OL.gold>=d}
- else if(i.cost<0?(this.btnBuy.text="+1",this.btnBuy.iconText=_qt.getInstance().getCost(i.level).toString(),this.btnBuyCost=-1):(this.btnBuyCost=i.cost,this.btnBuy.text="+1",this.btnBuy.iconText=ZD.displayLargeNumberAsAlphabet(i.cost)),this.lblEnhance.visible=!1,this.lblCastleBonus.visible=!1,i.level>=i.maxLv)7===i.kindNum&&i.level>=1?(this.btnBuyCost=-1,this.btnBuy.text=DG.getText("GAME_607","환생팀 편성"),this.btnBuy.showIconLabel=!1,this.btnBuy.showTextLabel=!0,this.btnBuy.activated=!0,this.btnBuy.color=HU.BROWN,this.lblLevel.text=`Lv.${
+ `:"max",this.btn1000.iconText=u>0?ZL.displayLargeNumberAsAlphabet(d):"",this.btn1000.iconLabel.texture=tS.getTexture("UI_Ekkorr",u>0?"UI_GOLD":"UI_GRAY_GOLD"),this.btn1000.activated=u>0&&OD.gold>=d,this.btn1000.visible=u>0}
+ else if(this.btn1000.visible=!1,i.cost<0?(this.btnBuy.text="+1",this.btnBuy.iconText=_qt.getInstance().getCost(i.level).toString(),this.btnBuyCost=-1):(this.btnBuyCost=i.cost,this.btnBuy.text="+1",this.btnBuy.iconText=ZL.displayLargeNumberAsAlphabet(i.cost)),this.lblEnhance.visible=!1,this.lblCastleBonus.visible=!1,i.level>=i.maxLv)7===i.kindNum&&i.level>=1?(this.btnBuyCost=-1,this.btnBuy.text=LG.getText("GAME_607","환생팀 편성"),this.btnBuy.showIconLabel=!1,this.btnBuy.showTextLabel=!0,this.btnBuy.activated=!0,this.btnBuy.color=HU.BROWN,this.lblLevel.text=`Lv.${
OrcBlizzardMageRain1 2 hunks, 2 statements
- if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void(this.isOutOfField(50,!1)&&(this.displayExplodeEffect(),this.remove()));
- if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.isOutOfField(50,!1))&&(this.displayExplodeEffect(),this.remove()));
FireMagicBall1 2 hunks, 2 statements
- if(this.t++,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ if(this.t++,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void(this.isOutOfField(50,!1)&&(this.displayExplodeEffect(),this.remove()));
- if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ if(this.x+=this.vx,this.y+=this.vy,this.rotation=Math.atan2(this.vy,this.vx),!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.isOutOfField(50,!1))&&(this.displayExplodeEffect(),this.remove()));
AntRock1 2 hunks, 2 statements
- if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void((this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ if(this.t++,!this.target||this.target.removed)return this.x+=this.vx,this.y+=this.vy,void(this.isOutOfField(50,!1)&&(this.displayExplodeEffect(),this.remove()));
- if(this.x+=this.vx,this.y+=this.vy,this.rotation+=.15,!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.x<-50||this.x>690||this.y>690)&&(this.displayExplodeEffect(),this.remove()));
+ if(this.x+=this.vx,this.y+=this.vy,this.rotation+=.15,!this.checkEarlyCollision())return this.t>=this.T?(this.x=t,this.y=i,void this.onHit()):void((this.t>180||this.isOutOfField(50,!1))&&(this.displayExplodeEffect(),this.remove()));
GuildRaidBookVO 2 hunks, 2 statements
- ...Dt.DEFAULT_OPTIONS,...t}
+ ...Lt.DEFAULT_OPTIONS,...t}
- ...Lt.DEFAULT_OPTIONS,...i}
+ ...Dt.DEFAULT_OPTIONS,...i}
SecretPetShopItemRenderer 2 hunks, 2 statements
- ,this.addChild(this.btnBuy)}
+ ,this.addChild(this.btnBuy),wL.setLabelWrapWidth(this.lblName,this.btnBuy.x-this.lblName.x)}
-  )`;
+  )`,this.lblName.y=30-.5*this.lblName.height;
SecretMaterialItemRenderer 2 hunks, 2 statements
- const h=e[i],r=(null==(s=t.isSelected)?void 0:s.call(t,h))??!1;
+ const h=e[i],r=(null==(s=t.getConsumeAmount)?void 0:s.call(t,h))??0;
- zt(T2t,"SecretMaterialItemRenderer"),qt(T2t,"onPetSelect",null),qt(T2t,"isSelected",null);
+ zt(L2t,"SecretMaterialItemRenderer"),qt(L2t,"onPetSelect",null),qt(L2t,"getConsumeAmount",null);
GameOverPopup 2 hunks, 2 statements
- OL.wave>=50&&Zni.getInstance().endTutorialRevive(),0==OL.numRevive&&OL.wave>=100&&Zni.getInstance().showSecretaryHelpPopup(),OVt.getInstance().markDirty(),this.processRebirthResult(n,t,i,s,e,1)}
+ OD.holdNumReviveCommit(),OD.wave>=50&&Ahi.getInstance().endTutorialRevive(),0==OD.numRevive&&OD.wave>=100&&Ahi.getInstance().showSecretaryHelpPopup(),OVt.getInstance().markDirty(),this.processRebirthResult(n,t,i,s,e,1)}
- OL.wave>=50&&Zni.getInstance().endTutorialRevive(),0==OL.numRevive&&OL.wave>=100&&Zni.getInstance().showSecretaryHelpPopup(),OVt.getInstance().markDirty(),this.processRebirthResult(n,t,i,s,e,2)}
+ OD.holdNumReviveCommit(),OD.wave>=50&&Ahi.getInstance().endTutorialRevive(),0==OD.numRevive&&OD.wave>=100&&Ahi.getInstance().showSecretaryHelpPopup(),OVt.getInstance().markDirty(),this.processRebirthResult(n,t,i,s,e,2)}
GuildBarrackRowItemRenderer 2 hunks, 2 statements
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
GuildWarBattleReadyPopup 2 hunks, 2 statements
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GuildWarTierAssignPopup 2 hunks, 2 statements
- const i=[...RD.memberList??[]].sort((t,i)=>i.roleLevel!==t.roleLevel?i.roleLevel-t.roleLevel:(i.wave??0)-(t.wave??0));
+ const i=[...RL.memberList??[]].sort((t,i)=>i.roleLevel!==t.roleLevel?i.roleLevel-t.roleLevel:(i.wave??0)-(t.wave??0));
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
RenderTexture 1 hunks, 1 statements
- ...D.defaultOptions,...t}
+ ...L.defaultOptions,...t}
VersionManager 1 hunks, 1 statements
- zt(qA,"VersionManager"),qt(qA,"gameId","ef2"),qt(qA,"appVersion","1.13.66");
+ zt(qA,"VersionManager"),qt(qA,"gameId","ef2"),qt(qA,"appVersion","1.13.84");
Base64Util 1 hunks, 1 statements
- var hN=(t=>(t[t.G_DELTA=0]="G_DELTA",t[t.G_SENTINEL=1]="G_SENTINEL",t[t.G_DECODE=2]="G_DECODE",t[t.W_CEILING=10]="W_CEILING",t[t.W_SENTINEL=11]="W_SENTINEL",t[t.W_DECODE=12]="W_DECODE",t[t.W_DELTA=13]="W_DELTA",t[t.SP15_SENTINEL=20]="SP15_SENTINEL",t[t.SP20_SENTINEL=21]="SP20_SENTINEL",t[t.GODBLESS_SENTINEL=22]="GODBLESS_SENTINEL",t[t.SPEEDMODE_SENTINEL=23]="SPEEDMODE_SENTINEL",t))(hN||{
+ var hN=(t=>(t[t.G_DELTA=0]="G_DELTA",t[t.G_SENTINEL=1]="G_SENTINEL",t[t.G_DECODE=2]="G_DECODE",t[t.W_CEILING=10]="W_CEILING",t[t.W_SENTINEL=11]="W_SENTINEL",t[t.W_DECODE=12]="W_DECODE",t[t.W_DELTA=13]="W_DELTA",t[t.SP15_SENTINEL=20]="SP15_SENTINEL",t[t.SP20_SENTINEL=21]="SP20_SENTINEL",t[t.GODBLESS_SENTINEL=22]="GODBLESS_SENTINEL",t[t.SPEEDMODE_SENTINEL=23]="SPEEDMODE_SENTINEL",t[t.SKILLSPEED_SENTINEL=24]="SKILLSPEED_SENTINEL",t))(hN||{
PetShopService 1 hunks, 1 statements
- slotIndex:t,materialKindNum:i}
+ slotIndex:t,materials:i}
AutoTogglePill 1 hunks, 1 statements
- ...wD.DEFAULT_FONT_OPTION_15,fontSize:t.FONT_SIZE,lineHeight:t.PILL_H}
+ ...wL.DEFAULT_FONT_OPTION_15,fontSize:t.FONT_SIZE,lineHeight:t.PILL_H}
ActiveSkillPopup 1 hunks, 1 statements
- zt(iH,"ActiveSkillPopup"),qt(iH,"_instance"),qt(iH,"SKILL_NAMES",["","심판의 번개","천지폭렬","하늘의 검","신성한 기도","구원의 날개","총병 소환"]),qt(iH,"SKILL_DESCS",["","하늘에서 번개를 연속으로 내려, 적들에게 강력한 대미지를 줍니다. 최대 25마리의 적을 즉사시킵니다.","거대한 검을 소환하여 모든 적에게 현재 체력의 80%에 해당하는 대미지를 주고, 멀리 날려버립니다. 체력이 20% 이하인 적은 일정 확률로 즉사합니다.","하늘의 검을 소환하여, 모든 적을 일정시간동안 기절시킵니다. 최대 10마리의 적을 즉사시키고, 나머지 적들에게 현재 체력의 60%에 해당하는 대미지를 줍니다.","성을 치유하고, 쓰러진 영웅을 부활시키며, 살아있는 영웅의 체력을 회복시킵니다. 모든 아군에게 물리 또는 마법 보호막을 부여하고, 영웅의 공격력, 공속, 이속을 일정시간 크게 증가시킵니다.","천사를 소환하여 모든 아군과 성의 체력을 최대로 회복시키고, 일정시간동안 강력한 보호막을 부여합니다.","많은 수의 총병을 소환하여 일정시간 성을 방어합니다"]),qt(iH,"OUTLINE_X_COMPENSATION",2);
+ zt(iH,"ActiveSkillPopup"),qt(iH,"_instance"),qt(iH,"SKILL_NAMES",["","심판의 번개","천지폭렬","하늘의 검","신성한 기도","구원의 날개","총병 소환","돌파의 뿔피리","질풍"]),qt(iH,"SKILL_DESCS",["","하늘에서 번개를 연속으로 내려, 적들에게 강력한 대미지를 줍니다. 최대 25마리의 적을 즉사시킵니다.","거대한 검을 소환하여 모든 적에게 현재 체력의 80%에 해당하는 대미지를 주고, 멀리 날려버립니다. 체력이 20% 이하인 적은 일정 확률로 즉사합니다.","하늘의 검을 소환하여, 모든 적을 일정시간동안 기절시킵니다. 최대 10마리의 적을 즉사시키고, 나머지 적들에게 현재 체력의 60%에 해당하는 대미지를 줍니다.","성을 치유하고, 쓰러진 영웅을 부활시키며, 살아있는 영웅의 체력을 회복시킵니다. 모든 아군에게 물리 또는 마법 보호막을 부여하고, 영웅의 공격력, 공속, 이속을 일정시간 크게 증가시킵니다.","천사를 소환하여 모든 아군과 성의 체력을 최대로 회복시키고, 일정시간동안 강력한 보호막을 부여합니다.","많은 수의 총병을 소환하여 일정시간 성을 방어합니다","뿔피리를 불어 한 층을 즉시 건너뜁니다. 싸우던 적은 그대로 남고, 건너뛴 층의 보상은 얻지 못합니다.","30초 동안 게임 속도가 100% 빨라집니다."]),qt(iH,"OUTLINE_X_COMPENSATION",2);
Twist 1 hunks, 1 statements
- this.removed||(this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],null==this.owner||null==this.target||this.target.removed||(this.target.isImmovable||(this.target.x=this.x,this.target.y=this.y),this.target.isAlive&&this.whirlCnt%10==0&&(this.target.isImmovable||this.target.binding(12,!1,this.owner??void 0),this.whirlCnt%30==0&&this.owner.doDamage(this.target,this.damagePercent))),(this.x<-50||this.x>690||this.y<-50||this.y>690)&&this.remove(),++this.whirlCnt>this.whirlTotal&&this.remove())}
+ this.removed||(this.x+=this.vx,this.y+=this.vy,this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],null==this.owner||null==this.target||this.target.removed||(this.target.isImmovable||(this.target.x=this.x,this.target.y=this.y),this.target.isAlive&&this.whirlCnt%10==0&&(this.target.isImmovable||this.target.binding(12,!1,this.owner??void 0),this.whirlCnt%30==0&&this.owner.doDamage(this.target,this.damagePercent))),this.isOutOfField(50)&&this.remove(),++this.whirlCnt>this.whirlTotal&&this.remove())}
UniArrow 1 hunks, 1 statements
- this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],(this.x<-50||this.x>690||this.y<-100||this.y>640)&&this.remove()}
+ this.currentFrame+=this.incFrame,this.currentFrame>=this.flyEnd&&(this.currentFrame=0),this.sp.texture=this.textures[Math.floor(this.currentFrame)],this.isOutOfField(100)&&this.remove()}
SuccubusWeapon 1 hunks, 1 statements
- if(this.x<-50||this.x>690||this.y<-50||this.y>690)return void this.remove();
+ if(this.isOutOfField(50))return void this.remove();
DruidDrill1 1 hunks, 1 statements
- (this.x<-50||this.x>690||this.y<-50||this.y>690||++this.whirlCnt>this.whirlTotal)&&this.remove()}
+ (this.isOutOfField(50)||++this.whirlCnt>this.whirlTotal)&&this.remove()}
BladeWave1 1 hunks, 1 statements
- this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900?super.remove():this.checkPierceHit()}
+ this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.isOutOfField(260)?super.remove():this.checkPierceHit()}
SpinBlade 1 hunks, 1 statements
- this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900?super.remove():this.checkPierceHit()}
+ this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.isOutOfField(260)?super.remove():this.checkPierceHit()}
CrowKnightBullet1 1 hunks, 1 statements
- if(this.x+=this.vx,this.y+=this.vy,this.x<-100||this.x>900||this.y<-100||this.y>900)return void super.remove();
+ if(this.x+=this.vx,this.y+=this.vy,this.isOutOfField(260))return void super.remove();
CrowGuidedBall1 1 hunks, 1 statements
- if(this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.x<-100||this.x>900||this.y<-100||this.y>900)return void this.explode();
+ if(this.sp&&i<this.textures.length&&(this.sp.texture=this.textures[i]),this.isOutOfField(260))return void this.explode();
CrowFeatherShot1 1 hunks, 1 statements
- if(this.x+=this.vx,this.y+=this.vy,this.x<-100||this.x>900||this.y<-100||this.y>900)return void super.remove();
+ if(this.x+=this.vx,this.y+=this.vy,this.isOutOfField(260))return void super.remove();
ScorpionPoisonBullet 1 hunks, 1 statements
- var qK=(t=>(t[t.NONE=0]="NONE",t[t.OrcHunter1_RANGEEVADE_BUFF=1]="OrcHunter1_RANGEEVADE_BUFF",t[t.OrcRapterRider1_MOVESPEED_DEBUFF=2]="OrcRapterRider1_MOVESPEED_DEBUFF",t[t.Succubus1_MOVESPEED_BUFF=3]="Succubus1_MOVESPEED_BUFF",t[t.Succubus1_ATTACKSPEED_BUFF=4]="Succubus1_ATTACKSPEED_BUFF",t[t.ScorpionPoisonBullet_MOVESPEED_DEBUFF=5]="ScorpionPoisonBullet_MOVESPEED_DEBUFF",t[t.ScorpionPoisonBullet_ATTACKSPEED_DEBUFF=6]="ScorpionPoisonBullet_ATTACKSPEED_DEBUFF",t[t.SummonDragonRoar_MOVESPEED_DEBUFF=7]="SummonDragonRoar_MOVESPEED_DEBUFF",t[t.SummonDragonRoar_ATTACKSPEED_DEBUFF=8]="SummonDragonRoar_ATTACKSPEED_DEBUFF",t[t.ScorpionCrater_MOVESPEED_DEBUFF=9]="ScorpionCrater_MOVESPEED_DEBUFF",t[t.DrillSl1_PENETRATE_BUFF=11]="DrillSl1_PENETRATE_BUFF",t[t.DrillSl1_SKILL2_BUFF=12]="DrillSl1_SKILL2_BUFF",t[t.DrillSl1_SKILL3_BUFF=13]="DrillSl1_SKILL3_BUFF",t[t.DrillSl1_SKILL4_BUFF=14]="DrillSl1_SKILL4_BUFF",t[t.DrillSl1_ROSTER_BUFF=15]="DrillSl1_ROSTER_BUFF",t[t.BombSl1_SKILL2_BUFF=21]="BombSl1_SKILL2_BUFF",t[t.BombSl1_SKILL3_BUFF=22]="BombSl1_SKILL3_BUFF",t[t.BombSl1_SKILL4_BUFF=23]="BombSl1_SKILL4_BUFF",t[t.BombSl1_ROSTER_BUFF=24]="BombSl1_ROSTER_BUFF",t[t.NurSl1_SKILL2_BUFF=31]="NurSl1_SKILL2_BUFF",t[t.NurSl1_ROSTER_BUFF=32]="NurSl1_ROSTER_BUFF",t[t.MagmaSl1_SKILL2_BUFF=41]="MagmaSl1_SKILL2_BUFF",t[t.MagmaSl1_SKILL3_BUFF=42]="MagmaSl1_SKILL3_BUFF",t[t.MagmaSl1_ROSTER_BUFF=43]="MagmaSl1_ROSTER_BUFF",t[t.TreebarkSl1_SKILL2_BUFF=51]="TreebarkSl1_SKILL2_BUFF",t[t.TreebarkSl1_SKILL3_BUFF=52]="TreebarkSl1_SKILL3_BUFF",t[t.TreebarkSl1_ROSTER_BUFF=53]="TreebarkSl1_ROSTER_BUFF",t[t.IcespearSl1_SKILL2_BUFF=61]="IcespearSl1_SKILL2_BUFF",t[t.IcespearSl1_SKILL3_BUFF=62]="IcespearSl1_SKILL3_BUFF",t[t.IcespearSl1_SKILL4_BUFF=63]="IcespearSl1_SKILL4_BUFF",t[t.IcespearSl1_ROSTER_BUFF=64]="IcespearSl1_ROSTER_BUFF",t[t.VinewhipSl1_SKILL2_BUFF=71]="VinewhipSl1_SKILL2_BUFF",t[t.VinewhipSl1_SKILL3_BUFF=72]="VinewhipSl1_SKILL3_BUFF",t[t.VinewhipSl1_SKILL4_BUFF=73]="VinewhipSl1_SKILL4_BUFF",t[t.VinewhipSl1_ROSTER_BUFF=74]="VinewhipSl1_ROSTER_BUFF",t[t.FlamecannonSl1_SKILL2_BUFF=81]="FlamecannonSl1_SKILL2_BUFF",t[t.FlamecannonSl1_SKILL3_BUFF=82]="FlamecannonSl1_SKILL3_BUFF",t[t.FlamecannonSl1_SKILL4_BUFF=83]="FlamecannonSl1_SKILL4_BUFF",t[t.FlamecannonSl1_ROSTER_BUFF=84]="FlamecannonSl1_ROSTER_BUFF",t[t.IcebowSl1_SKILL2_BUFF=91]="IcebowSl1_SKILL2_BUFF",t[t.IcebowSl1_SKILL3_BUFF=92]="IcebowSl1_SKILL3_BUFF",t[t.IcebowSl1_SKILL4_BUFF=93]="IcebowSl1_SKILL4_BUFF",t[t.IcebowSl1_ROSTER_BUFF=94]="IcebowSl1_ROSTER_BUFF",t[t.FlowerSl1_SKILL2_BUFF=101]="FlowerSl1_SKILL2_BUFF",t[t.FlowerSl1_ROSTER_BUFF=102]="FlowerSl1_ROSTER_BUFF",t[t.HotpoolSl1_SKILL2_BUFF=111]="HotpoolSl1_SKILL2_BUFF",t[t.HotpoolSl1_ROSTER_BUFF=112]="HotpoolSl1_ROSTER_BUFF",t[t.HotpoolSl1_DAMAGE_BUFF=113]="HotpoolSl1_DAMAGE_BUFF",t[t.GlacierSl1_SKILL2_BUFF=114]="GlacierSl1_SKILL2_BUFF",t[t.GlacierSl1_SKILL3_BUFF=115]="GlacierSl1_SKILL3_BUFF",t[t.GlacierSl1_ROSTER_BUFF=116]="GlacierSl1_ROSTER_BUFF",t[t.GlacierSl1_SKILL4_BUFF=117]="GlacierSl1_SKILL4_BUFF",t[t.FladiatorSl1_SKILL2_BUFF=118]="FladiatorSl1_SKILL2_BUFF",t[t.FladiatorSl1_SKILL3_BUFF=119]="FladiatorSl1_SKILL3_BUFF",t[t.FladiatorSl1_SKILL4_BUFF=120]="FladiatorSl1_SKILL4_BUFF",t[t.FladiatorSl1_ROSTER_BUFF=121]="FladiatorSl1_ROSTER_BUFF",t[t.FladiatorSl1_CRTICAL_BUFF=122]="FladiatorSl1_CRTICAL_BUFF",t[t.ManaBloomSl1_SKILL2_BUFF=123]="ManaBloomSl1_SKILL2_BUFF",t[t.ManaBloomSl1_SKILL3_BUFF=124]="ManaBloomSl1_SKILL3_BUFF",t[t.ManaBloomSl1_SKILL4_BUFF=125]="ManaBloomSl1_SKILL4_BUFF",t[t.ManaBloomSl1_ROSTER_BUFF=126]="ManaBloomSl1_ROSTER_BUFF",t[t.ClearSl1_SKILL2_BUFF=127]="ClearSl1_SKILL2_BUFF",t[t.ClearSl1_ROSTER_BUFF=128]="ClearSl1_ROSTER_BUFF",t[t.SlimeRacing_DAMAGE_BUFF=129]="SlimeRacing_DAMAGE_BUFF",t[t.SlimeRacing_ATTACK_SPEED_BUFF=130]="SlimeRacing_ATTACK_SPEED_BUFF",t[t.SlimeRacing_MOVE_SPEED_BUFF=131]="SlimeRacing_MOVE_SPEED_BUFF",t[t.RACE_REVIVE_MOVE_SPEED_BUFF=132]="RACE_REVIVE_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_MOVE_SPEED_BUFF=133]="RACE_CHEERUP_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_ATTACK_SPEED_BUFF=134]="RACE_CHEERUP_ATTACK_SPEED_BUFF",t[t.EXCAVATION_ENCOUNTER_DEFENSE_BUFF=135]="EXCAVATION_ENCOUNTER_DEFENSE_BUFF",t[t.SteelbashSl1_SKILL2_BUFF=136]="SteelbashSl1_SKILL2_BUFF",t[t.SteelbashSl1_SKILL3_BUFF=137]="SteelbashSl1_SKILL3_BUFF",t[t.SteelbashSl1_ROSTER_BUFF=138]="SteelbashSl1_ROSTER_BUFF",t[t.FlamdancerSl1_SKILL2_BUFF=139]="FlamdancerSl1_SKILL2_BUFF",t[t.FlamdancerSl1_SKILL3_BUFF=140]="FlamdancerSl1_SKILL3_BUFF",t[t.FlamdancerSl1_ROSTER_BUFF=141]="FlamdancerSl1_ROSTER_BUFF",t[t.FrostreaverSl1_SKILL2_BUFF=142]="FrostreaverSl1_SKILL2_BUFF",t[t.FrostreaverSl1_SKILL3_BUFF=143]="FrostreaverSl1_SKILL3_BUFF",t[t.FrostreaverSl1_ROSTER_BUFF=144]="FrostreaverSl1_ROSTER_BUFF",t[t.ThornjaSl1_SKILL2_BUFF=145]="ThornjaSl1_SKILL2_BUFF",t[t.ThornjaSl1_SKILL3_BUFF=146]="ThornjaSl1_SKILL3_BUFF",t[t.ThornjaSl1_SKILL4_BUFF=147]="ThornjaSl1_SKILL4_BUFF",t[t.ThornjaSl1_ROSTER_BUFF=148]="ThornjaSl1_ROSTER_BUFF",t[t.RACE_MAPTYPE1_ATKSPD_BUFF=149]="RACE_MAPTYPE1_ATKSPD_BUFF",t[t.RACE_MAPTYPE1_MOVESPD_BUFF=150]="RACE_MAPTYPE1_MOVESPD_BUFF",t[t.GearbladeSl1_SKILL2_BUFF=151]="GearbladeSl1_SKILL2_BUFF",t[t.GearbladeSl1_SKILL3_BUFF=152]="GearbladeSl1_SKILL3_BUFF",t[t.GearbladeSl1_SKILL4_BUFF=153]="GearbladeSl1_SKILL4_BUFF",t[t.GearbladeSl1_ROSTER_BUFF=154]="GearbladeSl1_ROSTER_BUFF",t[t.EmbersageSl1_SKILL2_BUFF=155]="EmbersageSl1_SKILL2_BUFF",t[t.EmbersageSl1_ROSTER_BUFF=156]="EmbersageSl1_ROSTER_BUFF",t[t.TidecallerSl1_SKILL2_BUFF=157]="TidecallerSl1_SKILL2_BUFF",t[t.TidecallerSl1_ROSTER_BUFF=158]="TidecallerSl1_ROSTER_BUFF",t[t.GrovewardenSl1_SKILL2_BUFF=159]="GrovewardenSl1_SKILL2_BUFF",t[t.GrovewardenSl1_SKILL3_BUFF=160]="GrovewardenSl1_SKILL3_BUFF",t[t.GrovewardenSl1_ROSTER_BUFF=161]="GrovewardenSl1_ROSTER_BUFF",t[t.FrankenSl1_SKILL2_BUFF=162]="FrankenSl1_SKILL2_BUFF",t[t.FrankenSl1_ROSTER_BUFF=164]="FrankenSl1_ROSTER_BUFF",t[t.WolfSl1_SKILL2_BUFF=165]="WolfSl1_SKILL2_BUFF",t[t.WolfSl1_SKILL3_BUFF=166]="WolfSl1_SKILL3_BUFF",t[t.WolfSl1_SKILL4_BUFF=167]="WolfSl1_SKILL4_BUFF",t[t.WolfSl1_ROSTER_BUFF=168]="WolfSl1_ROSTER_BUFF",t[t.BatSl1_SKILL2_BUFF=169]="BatSl1_SKILL2_BUFF",t[t.BatSl1_SKILL3_BUFF=170]="BatSl1_SKILL3_BUFF",t[t.BatSl1_SKILL4_BUFF=171]="BatSl1_SKILL4_BUFF",t[t.BatSl1_ROSTER_BUFF=172]="BatSl1_ROSTER_BUFF",t[t.SkullSl1_SKILL2_BUFF=173]="SkullSl1_SKILL2_BUFF",t[t.SkullSl1_ROSTER_BUFF=174]="SkullSl1_ROSTER_BUFF",t[t.Bomber1_ATKSPD_BUFF=200]="Bomber1_ATKSPD_BUFF",t[t.Bomber1_MOVESPD_BUFF=201]="Bomber1_MOVESPD_BUFF",t[t.TigerRider1_ATKSPD_BUFF=210]="TigerRider1_ATKSPD_BUFF",t[t.TigerRider1_MOVESPD_BUFF=211]="TigerRider1_MOVESPD_BUFF",t[t.Sylphid1_ATKSPD_STACK=220]="Sylphid1_ATKSPD_STACK",t[t.WyvernRider1_ATKSPD_BUFF=230]="WyvernRider1_ATKSPD_BUFF",t[t.WyvernRider1_MOVESPD_BUFF=231]="WyvernRider1_MOVESPD_BUFF",t[t.WyvernRider1_ATKDMG_BUFF=232]="WyvernRider1_ATKDMG_BUFF",t[t.WingKnight1_FLASH_BUFF=240]="WingKnight1_FLASH_BUFF",t[t.WingKnight1_DASH_BUFF=241]="WingKnight1_DASH_BUFF",t[t.WingKnight1_BERSERK_ATKSPD=242]="WingKnight1_BERSERK_ATKSPD",t[t.WingKnight1_BERSERK_ATKDMG=243]="WingKnight1_BERSERK_ATKDMG",t[t.WingKnight1_FLASH_MOVSPD=244]="WingKnight1_FLASH_MOVSPD",t[t.WingKnight1_FLASH_ATKSPD=245]="WingKnight1_FLASH_ATKSPD",t[t.BladeMaster1_KILL_ATKSPD=250]="BladeMaster1_KILL_ATKSPD",t[t.BladeMaster1_KILL_ATKDMG=251]="BladeMaster1_KILL_ATKDMG",t[t.BladeMaster1_RANGE_ATKSPD=252]="BladeMaster1_RANGE_ATKSPD",t[t.BladeMaster1_MELEE_MOVESPD=253]="BladeMaster1_MELEE_MOVESPD",t[t.BladeMaster1_MELEE_ATKDMG=254]="BladeMaster1_MELEE_ATKDMG",t[t.BladeMaster1_RUSH_ATKSPD=255]="BladeMaster1_RUSH_ATKSPD",t[t.BladeMaster1_RUSH_MOVESPD=256]="BladeMaster1_RUSH_MOVESPD",t[t.BladeMaster1_BLINK_MOVESPD=257]="BladeMaster1_BLINK_MOVESPD",t[t.Aladin1_SAND_SLOW=260]="Aladin1_SAND_SLOW",t[t.Aladin1_BLESSING_ATKDMG=261]="Aladin1_BLESSING_ATKDMG",t[t.Druid1_VINE_ATKDMG=270]="Druid1_VINE_ATKDMG",t[t.Druid1_VINE_DEFENSE=271]="Druid1_VINE_DEFENSE",t[t.Druid1_VINE_ATKSPD=272]="Druid1_VINE_ATKSPD",t[t.CrowKnight1_ORBIT_ATKSPD=280]="CrowKnight1_ORBIT_ATKSPD",t[t.CrowKnight1_ORBIT_ATKDMG=281]="CrowKnight1_ORBIT_ATKDMG",t[t.Succubus2_CHARM_ATKSPD=290]="Succubus2_CHARM_ATKSPD",t[t.Succubus2_CHARM_MOVSPD=291]="Succubus2_CHARM_MOVSPD",t[t.RaidEmblemRogue_ACTIVE_ATKSPD=300]="RaidEmblemRogue_ACTIVE_ATKSPD",t[t.RaidEmblemRogue_ACTIVE_ATKDMG=301]="RaidEmblemRogue_ACTIVE_ATKDMG",t[t.RaidEmblemMage_BOSS_ATKSPD=302]="RaidEmblemMage_BOSS_ATKSPD",t[t.RaidEmblemMage_BOSS_DEFENSE=303]="RaidEmblemMage_BOSS_DEFENSE",t[t.RaidWeakpoint_BOSS_DEFENSE=304]="RaidWeakpoint_BOSS_DEFENSE",t[t.RaidWeakpoint_BOSS_ATKSPD=305]="RaidWeakpoint_BOSS_ATKSPD",t[t.RaidWeakpoint_BOSS_MOVESPD=306]="RaidWeakpoint_BOSS_MOVESPD",t[t.RaidRune_ACTIVE_ATKSPD=310]="RaidRune_ACTIVE_ATKSPD",t[t.RaidRune_ACTIVE_ATKDMG=311]="RaidRune_ACTIVE_ATKDMG",t[t.RaidRune_PULSE_ATKDMG=312]="RaidRune_PULSE_ATKDMG",t[t.RaidRune_PULSE_ATKSPD=313]="RaidRune_PULSE_ATKSPD",t[t.RaidRune_PULSE_DEFENSE=314]="RaidRune_PULSE_DEFENSE",t[t.RaidRune_ALLOUT_ATKDMG=315]="RaidRune_ALLOUT_ATKDMG",t[t.RaidRune_ALLOUT_ATKSPD=316]="RaidRune_ALLOUT_ATKSPD",t[t.RaidRune_ACTIVE_CRIT=317]="RaidRune_ACTIVE_CRIT",t[t.RaidRune_BOSS_ATKSPD=320]="RaidRune_BOSS_ATKSPD",t[t.RaidRune_BOSS_DEFENSE=321]="RaidRune_BOSS_DEFENSE",t[t.RaidRune_BOSS_ATKDMG=322]="RaidRune_BOSS_ATKDMG",t[t.RaidRune_ARROW_DEFENSE=323]="RaidRune_ARROW_DEFENSE",t[t.RaidRune_COMBO_DEFENSE=324]="RaidRune_COMBO_DEFENSE",t[t.BURN_DEBUFF=1001]="BURN_DEBUFF",t[t.BLOODY_DEBUFF=1002]="BLOODY_DEBUFF",t[t.RACE_ROLETYPE_MOVE_SPEED_DEBUFF=1003]="RACE_ROLETYPE_MOVE_SPEED_DEBUFF",t[t.RACE_ROLETYPE_DAMAGE_DEBUFF=1004]="RACE_ROLETYPE_DAMAGE_DEBUFF",t[t.EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF=1005]="EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF",t[t.RACE_MAPTYPE2_DEBUFF=1006]="RACE_MAPTYPE2_DEBUFF",t[t.TidecallerSl1_SKILL2_DEBUFF=1007]="TidecallerSl1_SKILL2_DEBUFF",t[t.RAID_BOSS1_DEBUFF=1008]="RAID_BOSS1_DEBUFF",t[t.MOSSGOLEM_DEFENSE_BUFF=1009]="MOSSGOLEM_DEFENSE_BUFF",t[t.WarpLanding_ATTACKSPEED_BUFF=1100]="WarpLanding_ATTACKSPEED_BUFF",t))(qK||{
+ var qK=(t=>(t[t.NONE=0]="NONE",t[t.OrcHunter1_RANGEEVADE_BUFF=1]="OrcHunter1_RANGEEVADE_BUFF",t[t.OrcRapterRider1_MOVESPEED_DEBUFF=2]="OrcRapterRider1_MOVESPEED_DEBUFF",t[t.Succubus1_MOVESPEED_BUFF=3]="Succubus1_MOVESPEED_BUFF",t[t.Succubus1_ATTACKSPEED_BUFF=4]="Succubus1_ATTACKSPEED_BUFF",t[t.ScorpionPoisonBullet_MOVESPEED_DEBUFF=5]="ScorpionPoisonBullet_MOVESPEED_DEBUFF",t[t.ScorpionPoisonBullet_ATTACKSPEED_DEBUFF=6]="ScorpionPoisonBullet_ATTACKSPEED_DEBUFF",t[t.DrillSl1_PENETRATE_BUFF=11]="DrillSl1_PENETRATE_BUFF",t[t.DrillSl1_SKILL2_BUFF=12]="DrillSl1_SKILL2_BUFF",t[t.DrillSl1_SKILL3_BUFF=13]="DrillSl1_SKILL3_BUFF",t[t.DrillSl1_SKILL4_BUFF=14]="DrillSl1_SKILL4_BUFF",t[t.DrillSl1_ROSTER_BUFF=15]="DrillSl1_ROSTER_BUFF",t[t.BombSl1_SKILL2_BUFF=21]="BombSl1_SKILL2_BUFF",t[t.BombSl1_SKILL3_BUFF=22]="BombSl1_SKILL3_BUFF",t[t.BombSl1_SKILL4_BUFF=23]="BombSl1_SKILL4_BUFF",t[t.BombSl1_ROSTER_BUFF=24]="BombSl1_ROSTER_BUFF",t[t.NurSl1_SKILL2_BUFF=31]="NurSl1_SKILL2_BUFF",t[t.NurSl1_ROSTER_BUFF=32]="NurSl1_ROSTER_BUFF",t[t.MagmaSl1_SKILL2_BUFF=41]="MagmaSl1_SKILL2_BUFF",t[t.MagmaSl1_SKILL3_BUFF=42]="MagmaSl1_SKILL3_BUFF",t[t.MagmaSl1_ROSTER_BUFF=43]="MagmaSl1_ROSTER_BUFF",t[t.TreebarkSl1_SKILL2_BUFF=51]="TreebarkSl1_SKILL2_BUFF",t[t.TreebarkSl1_SKILL3_BUFF=52]="TreebarkSl1_SKILL3_BUFF",t[t.TreebarkSl1_ROSTER_BUFF=53]="TreebarkSl1_ROSTER_BUFF",t[t.IcespearSl1_SKILL2_BUFF=61]="IcespearSl1_SKILL2_BUFF",t[t.IcespearSl1_SKILL3_BUFF=62]="IcespearSl1_SKILL3_BUFF",t[t.IcespearSl1_SKILL4_BUFF=63]="IcespearSl1_SKILL4_BUFF",t[t.IcespearSl1_ROSTER_BUFF=64]="IcespearSl1_ROSTER_BUFF",t[t.VinewhipSl1_SKILL2_BUFF=71]="VinewhipSl1_SKILL2_BUFF",t[t.VinewhipSl1_SKILL3_BUFF=72]="VinewhipSl1_SKILL3_BUFF",t[t.VinewhipSl1_SKILL4_BUFF=73]="VinewhipSl1_SKILL4_BUFF",t[t.VinewhipSl1_ROSTER_BUFF=74]="VinewhipSl1_ROSTER_BUFF",t[t.FlamecannonSl1_SKILL2_BUFF=81]="FlamecannonSl1_SKILL2_BUFF",t[t.FlamecannonSl1_SKILL3_BUFF=82]="FlamecannonSl1_SKILL3_BUFF",t[t.FlamecannonSl1_SKILL4_BUFF=83]="FlamecannonSl1_SKILL4_BUFF",t[t.FlamecannonSl1_ROSTER_BUFF=84]="FlamecannonSl1_ROSTER_BUFF",t[t.IcebowSl1_SKILL2_BUFF=91]="IcebowSl1_SKILL2_BUFF",t[t.IcebowSl1_SKILL3_BUFF=92]="IcebowSl1_SKILL3_BUFF",t[t.IcebowSl1_SKILL4_BUFF=93]="IcebowSl1_SKILL4_BUFF",t[t.IcebowSl1_ROSTER_BUFF=94]="IcebowSl1_ROSTER_BUFF",t[t.FlowerSl1_SKILL2_BUFF=101]="FlowerSl1_SKILL2_BUFF",t[t.FlowerSl1_ROSTER_BUFF=102]="FlowerSl1_ROSTER_BUFF",t[t.HotpoolSl1_SKILL2_BUFF=111]="HotpoolSl1_SKILL2_BUFF",t[t.HotpoolSl1_ROSTER_BUFF=112]="HotpoolSl1_ROSTER_BUFF",t[t.HotpoolSl1_DAMAGE_BUFF=113]="HotpoolSl1_DAMAGE_BUFF",t[t.GlacierSl1_SKILL2_BUFF=114]="GlacierSl1_SKILL2_BUFF",t[t.GlacierSl1_SKILL3_BUFF=115]="GlacierSl1_SKILL3_BUFF",t[t.GlacierSl1_ROSTER_BUFF=116]="GlacierSl1_ROSTER_BUFF",t[t.GlacierSl1_SKILL4_BUFF=117]="GlacierSl1_SKILL4_BUFF",t[t.FladiatorSl1_SKILL2_BUFF=118]="FladiatorSl1_SKILL2_BUFF",t[t.FladiatorSl1_SKILL3_BUFF=119]="FladiatorSl1_SKILL3_BUFF",t[t.FladiatorSl1_SKILL4_BUFF=120]="FladiatorSl1_SKILL4_BUFF",t[t.FladiatorSl1_ROSTER_BUFF=121]="FladiatorSl1_ROSTER_BUFF",t[t.FladiatorSl1_CRTICAL_BUFF=122]="FladiatorSl1_CRTICAL_BUFF",t[t.ManaBloomSl1_SKILL2_BUFF=123]="ManaBloomSl1_SKILL2_BUFF",t[t.ManaBloomSl1_SKILL3_BUFF=124]="ManaBloomSl1_SKILL3_BUFF",t[t.ManaBloomSl1_SKILL4_BUFF=125]="ManaBloomSl1_SKILL4_BUFF",t[t.ManaBloomSl1_ROSTER_BUFF=126]="ManaBloomSl1_ROSTER_BUFF",t[t.ClearSl1_SKILL2_BUFF=127]="ClearSl1_SKILL2_BUFF",t[t.ClearSl1_ROSTER_BUFF=128]="ClearSl1_ROSTER_BUFF",t[t.SlimeRacing_DAMAGE_BUFF=129]="SlimeRacing_DAMAGE_BUFF",t[t.SlimeRacing_ATTACK_SPEED_BUFF=130]="SlimeRacing_ATTACK_SPEED_BUFF",t[t.SlimeRacing_MOVE_SPEED_BUFF=131]="SlimeRacing_MOVE_SPEED_BUFF",t[t.RACE_REVIVE_MOVE_SPEED_BUFF=132]="RACE_REVIVE_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_MOVE_SPEED_BUFF=133]="RACE_CHEERUP_MOVE_SPEED_BUFF",t[t.RACE_CHEERUP_ATTACK_SPEED_BUFF=134]="RACE_CHEERUP_ATTACK_SPEED_BUFF",t[t.EXCAVATION_ENCOUNTER_DEFENSE_BUFF=135]="EXCAVATION_ENCOUNTER_DEFENSE_BUFF",t[t.SteelbashSl1_SKILL2_BUFF=136]="SteelbashSl1_SKILL2_BUFF",t[t.SteelbashSl1_SKILL3_BUFF=137]="SteelbashSl1_SKILL3_BUFF",t[t.SteelbashSl1_ROSTER_BUFF=138]="SteelbashSl1_ROSTER_BUFF",t[t.FlamdancerSl1_SKILL2_BUFF=139]="FlamdancerSl1_SKILL2_BUFF",t[t.FlamdancerSl1_SKILL3_BUFF=140]="FlamdancerSl1_SKILL3_BUFF",t[t.FlamdancerSl1_ROSTER_BUFF=141]="FlamdancerSl1_ROSTER_BUFF",t[t.FrostreaverSl1_SKILL2_BUFF=142]="FrostreaverSl1_SKILL2_BUFF",t[t.FrostreaverSl1_SKILL3_BUFF=143]="FrostreaverSl1_SKILL3_BUFF",t[t.FrostreaverSl1_ROSTER_BUFF=144]="FrostreaverSl1_ROSTER_BUFF",t[t.ThornjaSl1_SKILL2_BUFF=145]="ThornjaSl1_SKILL2_BUFF",t[t.ThornjaSl1_SKILL3_BUFF=146]="ThornjaSl1_SKILL3_BUFF",t[t.ThornjaSl1_SKILL4_BUFF=147]="ThornjaSl1_SKILL4_BUFF",t[t.ThornjaSl1_ROSTER_BUFF=148]="ThornjaSl1_ROSTER_BUFF",t[t.RACE_MAPTYPE1_ATKSPD_BUFF=149]="RACE_MAPTYPE1_ATKSPD_BUFF",t[t.RACE_MAPTYPE1_MOVESPD_BUFF=150]="RACE_MAPTYPE1_MOVESPD_BUFF",t[t.GearbladeSl1_SKILL2_BUFF=151]="GearbladeSl1_SKILL2_BUFF",t[t.GearbladeSl1_SKILL3_BUFF=152]="GearbladeSl1_SKILL3_BUFF",t[t.GearbladeSl1_SKILL4_BUFF=153]="GearbladeSl1_SKILL4_BUFF",t[t.GearbladeSl1_ROSTER_BUFF=154]="GearbladeSl1_ROSTER_BUFF",t[t.EmbersageSl1_SKILL2_BUFF=155]="EmbersageSl1_SKILL2_BUFF",t[t.EmbersageSl1_ROSTER_BUFF=156]="EmbersageSl1_ROSTER_BUFF",t[t.TidecallerSl1_SKILL2_BUFF=157]="TidecallerSl1_SKILL2_BUFF",t[t.TidecallerSl1_ROSTER_BUFF=158]="TidecallerSl1_ROSTER_BUFF",t[t.GrovewardenSl1_SKILL2_BUFF=159]="GrovewardenSl1_SKILL2_BUFF",t[t.GrovewardenSl1_SKILL3_BUFF=160]="GrovewardenSl1_SKILL3_BUFF",t[t.GrovewardenSl1_ROSTER_BUFF=161]="GrovewardenSl1_ROSTER_BUFF",t[t.FrankenSl1_SKILL2_BUFF=162]="FrankenSl1_SKILL2_BUFF",t[t.FrankenSl1_ROSTER_BUFF=164]="FrankenSl1_ROSTER_BUFF",t[t.WolfSl1_SKILL2_BUFF=165]="WolfSl1_SKILL2_BUFF",t[t.WolfSl1_SKILL3_BUFF=166]="WolfSl1_SKILL3_BUFF",t[t.WolfSl1_SKILL4_BUFF=167]="WolfSl1_SKILL4_BUFF",t[t.WolfSl1_ROSTER_BUFF=168]="WolfSl1_ROSTER_BUFF",t[t.BatSl1_SKILL2_BUFF=169]="BatSl1_SKILL2_BUFF",t[t.BatSl1_SKILL3_BUFF=170]="BatSl1_SKILL3_BUFF",t[t.BatSl1_SKILL4_BUFF=171]="BatSl1_SKILL4_BUFF",t[t.BatSl1_ROSTER_BUFF=172]="BatSl1_ROSTER_BUFF",t[t.SkullSl1_SKILL2_BUFF=173]="SkullSl1_SKILL2_BUFF",t[t.SkullSl1_ROSTER_BUFF=174]="SkullSl1_ROSTER_BUFF",t[t.Bomber1_ATKSPD_BUFF=200]="Bomber1_ATKSPD_BUFF",t[t.Bomber1_MOVESPD_BUFF=201]="Bomber1_MOVESPD_BUFF",t[t.TigerRider1_ATKSPD_BUFF=210]="TigerRider1_ATKSPD_BUFF",t[t.TigerRider1_MOVESPD_BUFF=211]="TigerRider1_MOVESPD_BUFF",t[t.Sylphid1_ATKSPD_STACK=220]="Sylphid1_ATKSPD_STACK",t[t.WyvernRider1_ATKSPD_BUFF=230]="WyvernRider1_ATKSPD_BUFF",t[t.WyvernRider1_MOVESPD_BUFF=231]="WyvernRider1_MOVESPD_BUFF",t[t.WyvernRider1_ATKDMG_BUFF=232]="WyvernRider1_ATKDMG_BUFF",t[t.WingKnight1_FLASH_BUFF=240]="WingKnight1_FLASH_BUFF",t[t.WingKnight1_DASH_BUFF=241]="WingKnight1_DASH_BUFF",t[t.WingKnight1_BERSERK_ATKSPD=242]="WingKnight1_BERSERK_ATKSPD",t[t.WingKnight1_BERSERK_ATKDMG=243]="WingKnight1_BERSERK_ATKDMG",t[t.WingKnight1_FLASH_MOVSPD=244]="WingKnight1_FLASH_MOVSPD",t[t.WingKnight1_FLASH_ATKSPD=245]="WingKnight1_FLASH_ATKSPD",t[t.BladeMaster1_KILL_ATKSPD=250]="BladeMaster1_KILL_ATKSPD",t[t.BladeMaster1_KILL_ATKDMG=251]="BladeMaster1_KILL_ATKDMG",t[t.BladeMaster1_RANGE_ATKSPD=252]="BladeMaster1_RANGE_ATKSPD",t[t.BladeMaster1_MELEE_MOVESPD=253]="BladeMaster1_MELEE_MOVESPD",t[t.BladeMaster1_MELEE_ATKDMG=254]="BladeMaster1_MELEE_ATKDMG",t[t.BladeMaster1_RUSH_ATKSPD=255]="BladeMaster1_RUSH_ATKSPD",t[t.BladeMaster1_RUSH_MOVESPD=256]="BladeMaster1_RUSH_MOVESPD",t[t.BladeMaster1_BLINK_MOVESPD=257]="BladeMaster1_BLINK_MOVESPD",t[t.Aladin1_SAND_SLOW=260]="Aladin1_SAND_SLOW",t[t.Aladin1_BLESSING_ATKDMG=261]="Aladin1_BLESSING_ATKDMG",t[t.Druid1_VINE_ATKDMG=270]="Druid1_VINE_ATKDMG",t[t.Druid1_VINE_DEFENSE=271]="Druid1_VINE_DEFENSE",t[t.Druid1_VINE_ATKSPD=272]="Druid1_VINE_ATKSPD",t[t.CrowKnight1_ORBIT_ATKSPD=280]="CrowKnight1_ORBIT_ATKSPD",t[t.CrowKnight1_ORBIT_ATKDMG=281]="CrowKnight1_ORBIT_ATKDMG",t[t.Succubus2_CHARM_ATKSPD=290]="Succubus2_CHARM_ATKSPD",t[t.Succubus2_CHARM_MOVSPD=291]="Succubus2_CHARM_MOVSPD",t[t.RaidEmblemRogue_ACTIVE_ATKSPD=300]="RaidEmblemRogue_ACTIVE_ATKSPD",t[t.RaidEmblemRogue_ACTIVE_ATKDMG=301]="RaidEmblemRogue_ACTIVE_ATKDMG",t[t.RaidEmblemMage_BOSS_ATKSPD=302]="RaidEmblemMage_BOSS_ATKSPD",t[t.RaidEmblemMage_BOSS_DEFENSE=303]="RaidEmblemMage_BOSS_DEFENSE",t[t.RaidWeakpoint_BOSS_DEFENSE=304]="RaidWeakpoint_BOSS_DEFENSE",t[t.RaidWeakpoint_BOSS_ATKSPD=305]="RaidWeakpoint_BOSS_ATKSPD",t[t.RaidWeakpoint_BOSS_MOVESPD=306]="RaidWeakpoint_BOSS_MOVESPD",t[t.RaidRune_ACTIVE_ATKSPD=310]="RaidRune_ACTIVE_ATKSPD",t[t.RaidRune_ACTIVE_ATKDMG=311]="RaidRune_ACTIVE_ATKDMG",t[t.RaidRune_PULSE_ATKDMG=312]="RaidRune_PULSE_ATKDMG",t[t.RaidRune_PULSE_ATKSPD=313]="RaidRune_PULSE_ATKSPD",t[t.RaidRune_PULSE_DEFENSE=314]="RaidRune_PULSE_DEFENSE",t[t.RaidRune_ALLOUT_ATKDMG=315]="RaidRune_ALLOUT_ATKDMG",t[t.RaidRune_ALLOUT_ATKSPD=316]="RaidRune_ALLOUT_ATKSPD",t[t.RaidRune_ACTIVE_CRIT=317]="RaidRune_ACTIVE_CRIT",t[t.RaidRune_BOSS_ATKSPD=320]="RaidRune_BOSS_ATKSPD",t[t.RaidRune_BOSS_DEFENSE=321]="RaidRune_BOSS_DEFENSE",t[t.RaidRune_BOSS_ATKDMG=322]="RaidRune_BOSS_ATKDMG",t[t.RaidRune_ARROW_DEFENSE=323]="RaidRune_ARROW_DEFENSE",t[t.RaidRune_COMBO_DEFENSE=324]="RaidRune_COMBO_DEFENSE",t[t.BURN_DEBUFF=1001]="BURN_DEBUFF",t[t.BLOODY_DEBUFF=1002]="BLOODY_DEBUFF",t[t.RACE_ROLETYPE_MOVE_SPEED_DEBUFF=1003]="RACE_ROLETYPE_MOVE_SPEED_DEBUFF",t[t.RACE_ROLETYPE_DAMAGE_DEBUFF=1004]="RACE_ROLETYPE_DAMAGE_DEBUFF",t[t.EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF=1005]="EXCAVATION_CRITICALHIT_DEFENSE_DEBUFF",t[t.RACE_MAPTYPE2_DEBUFF=1006]="RACE_MAPTYPE2_DEBUFF",t[t.TidecallerSl1_SKILL2_DEBUFF=1007]="TidecallerSl1_SKILL2_DEBUFF",t[t.RAID_BOSS1_DEBUFF=1008]="RAID_BOSS1_DEBUFF",t[t.MOSSGOLEM_DEFENSE_BUFF=1009]="MOSSGOLEM_DEFENSE_BUFF",t[t.WarpLanding_ATTACKSPEED_BUFF=1100]="WarpLanding_ATTACKSPEED_BUFF",t))(qK||{
SHA256 1 hunks, 1 statements
- ...ppt,...mpt,...vpt,...bpt,...Ept,...Npt,...Lpt,...Upt,...jpt}
+ ...ppt,...mpt,...vpt,...bpt,...Ept,...Npt,...Dpt,...Upt,...jpt}
TcRootElement 1 hunks, 1 statements
- return mLt()||(t.push(new Rft.OKXAppConnector),t.push(new Rft.OKXWalletAppConnector)),pLt()&&t.push(new Rft.OkxwalletInjectConnector),t.push(...vLt()),t}
+ return mDt()||(t.push(new Rft.OKXAppConnector),t.push(new Rft.OKXWalletAppConnector)),pDt()&&t.push(new Rft.OkxwalletInjectConnector),t.push(...vDt()),t}
WalletSelectPopup 1 hunks, 1 statements
- ...wD.ERROR_POPUP_LABEL_OPTION,fontSize:18}
+ ...wL.ERROR_POPUP_LABEL_OPTION,fontSize:18}
HeroItemRenderer 1 hunks, 1 statements
- ,this),this.multiLevelContainer.visible=!1}
+ ,this),this.multiLevelContainer.addChild(this.btn1000),this.multiLevelContainer.visible=!1}
SecretPetShopDataManager 1 hunks, 1 statements
- zt(w0t,"SecretPetShopDataManager"),qt(w0t,"_instance"),qt(w0t,"SHOP_OPEN",!1),qt(w0t,"REQUIRED_PET_POINT",200);
+ zt(w0t,"SecretPetShopDataManager"),qt(w0t,"_instance"),qt(w0t,"SHOP_OPEN",!0),qt(w0t,"REQUIRED_PET_POINT",200);
TowerSimulationPopup 1 hunks, 1 statements
- const i=this.floorVO.floor,s=this.floorVO,e=await pD.getInstance().tower.enter(i,!0);
+ const i=this.floorVO.floor,s=this.floorVO,e=await pL.getInstance().tower.enter(i,void 0,!0);
FavoritePetSubView 1 hunks, 1 statements
- const t=[...EL.getInstance().favoritePets].sort((t,i)=>{
+ const t=[...ED.getInstance().favoritePets].sort((t,i)=>{
PetSecretShopSubView 1 hunks, 1 statements
- super(),qt(this,"lblDesc"),qt(this,"list"),qt(this,"lblEmpty"),qt(this,"requestPending",!1),this.lblDesc=new hL("",13421772,wD.DEFAULT_FONT_OPTION_15),this.lblDesc.text=DG.getText("GAME_1527","5등급 이후 남는 펫조각을 이용해서, 고급 펫조각을 구입할 수 있습니다."),this.lblDesc.x=12,this.lblDesc.y=4,this.addChild(this.lblDesc),this.list=new U5(S2t,640,690),this.list.x=0,this.list.y=30,this.addChild(this.list),this.lblEmpty=new hL("",10066329,wD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblEmpty.x=320-.5*this.lblEmpty.width,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.lblEmpty)}
+ super(),qt(this,"lblDesc"),qt(this,"list"),qt(this,"lblEmpty"),qt(this,"requestPending",!1),this.lblDesc=new hD("",13421772,wL.DEFAULT_FONT_OPTION_15),this.lblDesc.text=LG.getText("GAME_1527","5등급 이후 남는 펫조각을 이용해서, 고급 펫조각을 구입할 수 있습니다."),this.lblDesc.x=12,this.lblDesc.y=4,this.addChild(this.lblDesc),wL.setLabelWrapWidth(this.lblDesc,640-2*this.lblDesc.x),this.list=new U5(P2t,640,690),this.list.x=0,this.list.y=this.lblDesc.y+this.lblDesc.height+3,this.addChild(this.list),this.lblEmpty=new hD("",10066329,wL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblEmpty.x=320-.5*this.lblEmpty.width,this.lblEmpty.y=200,this.lblEmpty.visible=!1,this.addChild(this.lblEmpty)}
PVP2ReadyPopup 1 hunks, 1 statements
- ),c3t.getInstance().startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100))}
+ ),v3t.getInstance().startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100),this.opInfo.transPoints??null)}
PVPReadyPopup 1 hunks, 1 statements
- ),c3t.getInstance().startMarchBattle(this.myKindNums,this.myTrans,this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100))}
+ ),v3t.getInstance().startMarchBattle(this.myKindNums,this.myTrans,this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100),this.opInfo.transPoints??null)}
GuildBarracksRaceView 1 hunks, 1 statements
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
Guild2SettingPopup 1 hunks, 1 statements
- const t=DG.getText("GAME_519","길드명에는 특수문자 및 공백을 사용할 수 없습니다.");
+ const t=LG.getText("GAME_519","길드명에는 특수문자를 사용할 수 없습니다.");
Guild2CreatePopup 1 hunks, 1 statements
- const t=DG.getText("GAME_519","길드명에는 특수문자 및 공백을 사용할 수 없습니다.");
+ const t=LG.getText("GAME_519","길드명에는 특수문자를 사용할 수 없습니다.");
GuildMainSubView 1 hunks, 1 statements
- const i=[...RD.guildList].sort((t,i)=>{
+ const i=[...RL.guildList].sort((t,i)=>{
GuildRaidBattleReadyPopup 1 hunks, 1 statements
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
GuildRaidGuidePopup 1 hunks, 1 statements
- title:DG.getText("GAME_1419","레이드 기본"),content:[DG.getText("GAME_1420","# 길드마스터/부길드마스터가 레이드를 오픈할 수 있습니다."),DG.getText("GAME_1421","# 레이드는 하루 최대 2번 오픈할 수 있습니다."),DG.getText("GAME_1422","# 레이드가 오픈되면, 각 유저는 2번 전투를 할 수 있습니다."),DG.getText("GAME_1605","# 오픈된 레이드는 당일 23:50 (UTC) 에 마감됩니다.")].join("\n")}
+ title:LG.getText("GAME_1419","레이드 기본"),content:[LG.getText("GAME_1420","# 길드마스터/부길드마스터가 레이드를 오픈할 수 있습니다."),LG.getText("GAME_1421","# 레이드는 하루 최대 2번 오픈할 수 있습니다."),LG.getText("GAME_1422","# 레이드가 오픈되면, 각 유저는 2번 전투를 할 수 있습니다."),LG.getText("GAME_1605","# 오픈된 레이드는 난이도별 기간 마지막 날 23:50 (UTC) 에 마감됩니다.")].join("\n")}
GuildWarHistoryItemRenderer 1 hunks, 1 statements
- ...wD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...wL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GuildWarTournamentRewardGuidePopup 1 hunks, 1 statements
- let e=[...RD.rewardBattleList.sort((t,i)=>i.kindNum-t.kindNum)].concat([...RD.rewardBattleLostList.sort((t,i)=>i.kindNum-t.kindNum)]);
+ let e=[...RL.rewardBattleList.sort((t,i)=>i.kindNum-t.kindNum)].concat([...RL.rewardBattleLostList.sort((t,i)=>i.kindNum-t.kindNum)]);
TopMenu 1 hunks, 1 statements
- const n=.001*(OL.godBlessEndTime-t),h=s+(n>0?3:0)+.01*(zR.getInstance().getGameplayTotal(kx.GameSpeed)+OR.getBarracksGameSpeedContribution());
+ const n=.001*(OD.godBlessEndTime-t),h=s+(n>0?3:0)+.01*(zR.getInstance().getGameplayTotal(kx.GameSpeed)+OR.getBarracksGameSpeedContribution())+(.001*(OD.skillSpeedEndTime-t)>0?1:0);
GuildWarCombatLogItemRenderer 1 hunks, 1 statements
- ...wD.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...wL.DEFAULT_FONT_OPTION_15,fontSize:14}
GuildWarMemberStatusItemRenderer 1 hunks, 1 statements
- ...wD.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...wL.DEFAULT_FONT_OPTION_15,fontSize:14}
GuildWarTargetMarkerItemRenderer 1 hunks, 1 statements
- ...wD.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...wL.DEFAULT_FONT_OPTION_15,fontSize:14}
AppsFlyerManager 1 hunks, 1 statements
- t&&t.data&&(DL.getInstance().development&&vN.addExtraParams("af_conversion_data",Mei.getInstance().getString(t)),this.handleConversionData(t.data),RL.getInstance().setConversionData(t),uS.getInstance().dispatchCustomEvent("AfConversionData"))}
+ t&&t.data&&(this.handleConversionData(t.data),RD.getInstance().setConversionData(t),uS.getInstance().dispatchCustomEvent("AfConversionData"))}
GuildRaidOpenSettingsPopup 1 hunks, 1 statements
- this.lblPreviewMain=new hL("",16777215,wD.WHITE_OUTLINE_FONT_OPTION_16),this.lblPreviewMain.x=n,this.lblPreviewMain.setWrapWidth(s-36),this.contentContainer.addChild(this.lblPreviewMain),this.lblPreviewSub=new hL("",12432284,wD.DEFAULT_FONT_OPTION_15),this.lblPreviewSub.x=n,this.contentContainer.addChild(this.lblPreviewSub),this.lblFooter=new hL(DG.getText("GAME_1597","매일 23:50 (UTC) 마감 · 00:00 (UTC) 오픈"),10128756,wD.DEFAULT_FONT_OPTION_15),this.lblFooter.textSize=13,this.lblFooter.y=this.previewY+112,this.contentContainer.addChild(this.lblFooter),this.lblFooter.x=.5*(t.POPUP_WIDTH-this.lblFooter.width),this.btnSave=new uG(DG.getText("COMMON_297","저장하기")),this.btnSave.x=.5*(t.POPUP_WIDTH-this.btnSave.width),this.btnSave.y=this.previewY+140,this.btnSave.onClick=()=>{
+ this.lblPreviewMain=new hD("",16777215,wL.WHITE_OUTLINE_FONT_OPTION_16),this.lblPreviewMain.x=n,this.lblPreviewMain.setWrapWidth(s-36),this.contentContainer.addChild(this.lblPreviewMain),this.lblPreviewSub=new hD("",12432284,wL.DEFAULT_FONT_OPTION_15),this.lblPreviewSub.x=n,this.contentContainer.addChild(this.lblPreviewSub),this.lblFooter=new hD(LG.getText("GAME_1597","기간 마지막 날 23:50 (UTC) 마감 · 00:00 (UTC) 오픈"),10128756,wL.DEFAULT_FONT_OPTION_15),this.lblFooter.textSize=13,this.lblFooter.y=this.previewY+112,this.contentContainer.addChild(this.lblFooter),this.lblFooter.x=.5*(t.POPUP_WIDTH-this.lblFooter.width),this.btnSave=new uG(LG.getText("COMMON_297","저장하기")),this.btnSave.x=.5*(t.POPUP_WIDTH-this.btnSave.width),this.btnSave.y=this.previewY+140,this.btnSave.onClick=()=>{
Delay 1 hunks, 1 statements
- ...j_i(),[i]:s}
+ ...Mbi(),[i]:s}
NetworkTimeout 1 hunks, 1 statements
- ...pbi,...i}
+ ...Kbi,...i}
RecaptchaVerifier 1 hunks, 1 statements
- ...YAi}
+ ...CSi}
BrowserPopupRedirectResolver 1 hunks, 1 statements
- ...ZSi,width:e.toString(),height:n.toString(),top:h,left:r}
+ ...xTi,width:e.toString(),height:n.toString(),top:h,left:r}