EF2 Changelog

Builds / 1.15.30

Update 1.15.30

Compared with 1.14.97 · published Thu, 08 Oct 2026 07:01:12 GMT · live channel

No summary yet.

Text changes 60

KeyText
DIALOGUE_TEXT_84 + Wait... the ground is shaking. What is this heat?
DIALOGUE_TEXT_85 + My lord, the Abyss's magic is surging! Something has awakened!
DIALOGUE_TEXT_86 + Not even the Abyss could hold me forever. Now this land shall remember my flames!
DIALOGUE_TEXT_87 + The forest... burned down in an instant! Those flames are seeping right into the Castle!
DIALOGUE_TEXT_88 + It's the Fire Lord, freed from the Abyss. His magic is suppressing the power of the Castle and the heroes.
DIALOGUE_TEXT_89 + Tap the Flame Mark to check the effects you're under right now.
DIALOGUE_TEXT_90 + But... the Castle is glowing too. Is it reacting to the flames?
DIALOGUE_TEXT_91 + The Castle is reacting to the magic! The power of the race bound to you is about to reveal itself.
DIALOGUE_TEXT_92 + You can check your Rebirth race with this icon. The Castle follows the power of the same race.
DIALOGUE_TEXT_93 + Now the Castle takes on the form of the race you were reborn as. The Scorched Land's effects follow that race too.
DIALOGUE_TEXT_94 + Each hero is affected according to their own race. You can check it anytime from the Flame Mark.
DIALOGUE_TEXT_95 + Just because the land has changed doesn't mean we'll back down. We'll know our strength and face it head-on.
DIALOGUE_NPC_FL + Fire Lord
COMMON_574 + Applied immediately.
COMMON_575 + Today's reward has already been claimed.
COMMON_576 + Sun|Mon|Tue|Wed|Thu|Fri|Sat
PRODUCT_NAME_301 + Blessing of Abundance Privilege
PRODUCT_DESC_76 + Blessing of Abundance daily activation count increases by 1.
PRODUCT_DESC_77 + Receive 500 Gems upon logging in each day.
GAME_1887 + Event Schedule
GAME_1888 + Bulk Hero Purchase
GAME_1889 + Refresh the Hero List ## times to purchase all heroes available for Medals (@@ total) at once.
GAME_1890 + Purchased heroes will be added to the Barracks.
GAME_1891 + Would you like to make a bulk Hero purchase?
GAME_1892 + Bulk Purchase
GAME_1893 + Purchase History
GAME_1894 + Heroes obtained through Bulk Purchase are listed here.
GAME_1895 + Blessing of Abundance
GAME_1896 + Activation Chance
GAME_1897 + Blessing of Abundance has a chance to activate upon Rebirth.
GAME_1898 + Activation Chance: Base ##% + @@% per 100 Wave
GAME_1899 + When blessed, your base Medal amount increases by +##% on your next Rebirth.
GAME_1900 + Daily activations are limited, and Medals gained from Blessing of Abundance do not apply to Soul Rest.
GAME_1901 + On your next Rebirth, your base Medal amount increases by ##% due to Blessing of Abundance.
GAME_1902 + Scorched Land
GAME_1903 + Flame Debuff Lv.{0}
GAME_1904 + Scorched Land · Flame Debuff
GAME_1905 + Current Wave {0}
GAME_1906 + Debuff level +1 every {0} waves
GAME_1907 + Next increase: Wave {0} → Lv.{1}
GAME_1908 + Castle·Hero Level
GAME_1909 + Per Lv
GAME_1910 + Current
GAME_1911 + None
GAME_1912 + Castle: Rebirth race / Heroes: their own race
GAME_1913 + Battle Paused
GAME_1914 + Continue Battle
GAME_1915 + Current Rebirth Race
GAME_1916 + {0} Castle
GAME_1917 + You can't call waves at the threshold of a new land.
GAME_1918 +
GAME_1919 + Secretary Event (Pet)
GAME_1920 + Gem Spending Event
GAME_1921 + Attendance Event
GAME_1922 + Tower of Challenges Clear Event
RANKING_HIDE_TEAM + Hide my team lineup
RANKING_TEAM_HIDDEN + This player has hidden their team lineup.
RANKING_TEAM_LOAD_FAILED + Unable to load team information.
RANKING_PRIVACY_SAVE_FAILED + Unable to save team visibility. Please try again.
−

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

Assets 34

FileChangeSizePreview
assets/ekkorr/UI_Ekkorr.json changed 190.3 KB → 187.9 KB

New sprites: Btn_EventSchedule, Icon_Event_Schedule, Icon_RankBadge_01, Icon_RankBadge_02, Icon_RankBadge_03, Icon_RankBadge_04, Icon_RankBadge_05, Icon_RankBadge_06, Icon_RankBadge_11, Package_Bless, Shortcut_Attend, Ticket_UnitBuy, Ticket_UnitBuy_s

Removed sprites: Btn_Bg_01, Btn_Friend, Btn_Mine, Btn_MiniGame, Btn_Payback, Button_Login, Icon_Cost, Icon_SLX, Icon_SLX_Gray, PetTick_D1, PetTick_D30, PetTick_D7, Shop_Libon, Speed25_30, Speed25_7, Speed25_Inf, Speed2_7, Speed_15, UI_Close2, UI_Metamask, UI_Okx, UI_Slx, callOfDawnDisabled, callOfDawnOff, callOfDawnOn

assets/ekkorr/UI_Ekkorr.ktx2 changed 2,066.5 KB → 2,094.6 KB
assets/ekkorr/UI_Ekkorr2.json changed 4.9 KB → 5.0 KB

New sprites: Button_Login

assets/ekkorr/UI_Ekkorr2.ktx2 changed 76.3 KB → 91.7 KB
assets/images/Game.json changed 1,917.8 KB → 2,015.7 KB

New sprites: CastleElf0001, CastleElf0002, CastleElf0003, CastleElf0004, CastleElf0005, CastleElf0006, CastleElf0007, CastleElf0008, CastleElf0009, CastleElf0010, CastleElf0011, CastleElf0012, CastleElf0013, CastleElf0014, CastleElf0015, CastleElf0016, CastleElf0017, CastleElf0018, CastleElf0019, CastleElf0020, CastleElf0021, CastleElf0022, CastleElf0023, CastleElf0024, CastleElf0025, CastleElf0026, CastleElf0027, CastleElf0028, CastleElf0029, CastleElf0030, CastleElf0031, CastleElf0032, CastleElf0033, CastleElf0034, CastleElf0035, CastleElf0036, CastleElf0037, CastleElf0038, CastleElf0039, CastleElf0040, CastleHuman0001, CastleHuman0002, CastleHuman0003, CastleHuman0004, CastleHuman0005, CastleHuman0006, CastleHuman0007, CastleHuman0008, CastleHuman0009, CastleHuman0010, CastleHuman0011, CastleHuman0012, CastleHuman0013, CastleHuman0014, CastleHuman0015, CastleHuman0016, CastleHuman0017, CastleHuman0018, CastleHuman0019, CastleHuman0020, CastleHuman0021, CastleHuman0022, CastleHuman0023, CastleHuman0024, CastleHuman0025, CastleHuman0026, CastleHuman0027, CastleHuman0028, CastleHuman0029, CastleHuman0030, CastleHuman0031, CastleHuman0032, CastleHuman0033, CastleHuman0034, CastleHuman0035, CastleHuman0036, CastleHuman0037, CastleHuman0038, CastleHuman0039, CastleHuman0040, CastleOrc0001, CastleOrc0002, CastleOrc0003, CastleOrc0004, CastleOrc0005, CastleOrc0006, CastleOrc0007, CastleOrc0008, CastleOrc0009, CastleOrc0010, CastleOrc0011, CastleOrc0012, CastleOrc0013, CastleOrc0014, CastleOrc0015, CastleOrc0016, CastleOrc0017, CastleOrc0018, CastleOrc0019, CastleOrc0020, CastleOrc0021, CastleOrc0022, CastleOrc0023, CastleOrc0024, CastleOrc0025, CastleOrc0026, CastleOrc0027, CastleOrc0028, CastleOrc0029, CastleOrc0030, CastleOrc0031, CastleOrc0032, CastleOrc0033, CastleOrc0034, CastleOrc0035, CastleOrc0036, CastleOrc0037, CastleOrc0038, CastleOrc0039, CastleOrc0040, CastleUndead0001, CastleUndead0002, CastleUndead0003, CastleUndead0004, CastleUndead0005, CastleUndead0006, CastleUndead0007, CastleUndead0008, CastleUndead0009, CastleUndead0010, CastleUndead0011, CastleUndead0012, CastleUndead0013, CastleUndead0014, CastleUndead0015, CastleUndead0016, CastleUndead0017, CastleUndead0018, CastleUndead0019, CastleUndead0020, CastleUndead0021, CastleUndead0022, CastleUndead0023, CastleUndead0024, CastleUndead0025, CastleUndead0026, CastleUndead0027, CastleUndead0028, CastleUndead0029, CastleUndead0030, CastleUndead0031, CastleUndead0032, CastleUndead0033, CastleUndead0034, CastleUndead0035, CastleUndead0036, CastleUndead0037, CastleUndead0038, CastleUndead0039, CastleUndead0040, CharcoalWolf10001, CharcoalWolf10002, CharcoalWolf10003, CharcoalWolf10004, CharcoalWolf10005, CharcoalWolf10006, CharcoalWolf10007, CharcoalWolf10008, CharcoalWolf10009, CharcoalWolf10010, CharcoalWolf10011, CharcoalWolf10012, CharcoalWolf10013, CharcoalWolf10014, CharcoalWolf10015, CharcoalWolf10016, CharcoalWolf10017, CharcoalWolf10018, CharcoalWolf10019, CharcoalWolf10020, CharcoalWolf10021, CharcoalWolf10022, CharcoalWolf10023, CharcoalWolf10024, CharcoalWolf10025, CharcoalWolf10026, CharcoalWolf10027, CharcoalWolf10028, CharcoalWolf10029, CharcoalWolf10030, CharcoalWolf10031, CharcoalWolf10032, CharcoalWolf10033, CharcoalWolf10034, CharcoalWolf10035, CharcoalWolf10036, CharcoalWolf10037, CharcoalWolf10038, CharcoalWolf10039, CharcoalWolf10040, CharcoalWolf10041, CharcoalWolf10042, CharcoalWolf10043, CharcoalWolf10044, CharcoalWolf10045, CharcoalWolf10046, CharcoalWolf10047, CharcoalWolf10048, CharcoalWolf10049, CharcoalWolf10050, CharcoalWolf10051, CharcoalWolf10052, CharcoalWolf10053, CharcoalWolf10054, CharcoalWolf10055, CharcoalWolf10056, CharcoalWolf10057, CharcoalWolf10058, CharcoalWolf10059, CharcoalWolf10060, EmberRat10001, EmberRat10002, EmberRat10003, EmberRat10004, EmberRat10005, EmberRat10006, EmberRat10007, EmberRat10008, EmberRat10009, EmberRat10010, EmberRat10011, EmberRat10012, EmberRat10013, EmberRat10014, EmberRat10015, EmberRat10016, EmberRat10017, EmberRat10018, EmberRat10019, EmberRat10020, EmberRat10021, EmberRat10022, EmberRat10023, EmberRat10024, EmberRat10025, EmberRat10026, EmberRat10027, EmberRat10028, EmberRat10029, EmberRat10030, EmberRat10031, EmberRat10032, EmberRat10033, EmberRat10034, EmberRat10035, EmberRat10036, EmberRat10037, EmberRat10038, EmberRat10039, EmberRat10040, EmberRat10041, EmberRat10042, EmberRat10043, EmberRat10044, EmberRat10045, EmberRat10046, EmberRat10047, EmberRat10048, EmberRat10049, EmberRat10050, EmberRat10051, EmberRat10052, EmberRat10053, EmberRat10054, EmberRat10055, EmberRat10056, EmberRat10057, EmberRat10058, EmberRat10059, EmberRat10060, EmberRat10061, EmberRat10062, EmberRat10063, EmberRat10064, EmberRat10065, EmberRat10066, EmberRat10067, EmberRat10068, EmberRat10069, FireLandPart01, FireLandPart02, FireLandPart03, FireLandPart04, FireLandPart05, FireLandPart06, FireLandPart07, FireLandPart08, FireLandPart09, FireLandPart10, FireLandPart11, FireLandPart12, FireLandPart13, FireLandPart14, FireLandPart15, FireLandPart16, FireLandPart17, FireLandPart18, FireLandPart19, FireLandPart20, FireLandPart21, FireLandPart22, FireLandPart23, FireLandPart24, FireLandPart25, FireLandPart26, FireLandPart27, FireLandPart28, FireLandPart29, FireLandPart30, FireLandPart31, FireLandPart32, FireLandPart33, FireLandPart34, FireLandPart35, FireLandPart36, FireLandPart37, FireLandPart38, LavaBeetle10001, LavaBeetle10002, LavaBeetle10003, LavaBeetle10004, LavaBeetle10005, LavaBeetle10006, LavaBeetle10007, LavaBeetle10008, LavaBeetle10009, LavaBeetle10010, LavaBeetle10011, LavaBeetle10012, LavaBeetle10013, LavaBeetle10014, LavaBeetle10015, LavaBeetle10016, LavaBeetle10017, LavaBeetle10018, LavaBeetle10019, LavaBeetle10020, LavaBeetle10021, LavaBeetle10022, LavaBeetle10023, LavaBeetle10024, LavaBeetle10025, LavaBeetle10026, LavaBeetle10027, LavaBeetle10028, LavaBeetle10029, LavaBeetle10030, LavaBeetle10031, LavaBeetle10032, LavaBeetle10033, LavaBeetle10034, LavaBeetle10035, LavaBeetle10036, LavaBeetle10037, LavaBeetle10038, LavaBeetle10039, LavaBeetle10040, LavaBeetle10041, LavaBeetle10042, LavaBeetle10043, LavaBeetle10044, LavaBeetle10045, LavaBeetle10046, LavaBeetle10047, LavaBeetle10048, LavaBeetle10049, LavaBeetle10050, LavaBeetle10051, LavaBeetle10052, LavaBeetle10053, LavaBeetle10054, LavaBeetle10055, LavaBeetle10056, LavaBeetle10057, LavaBeetle10058, LavaBeetle10059, LavaBeetle10060, LavaBeetle10061, LavaBeetle10062

assets/images/Game.ktx2 changed 2,090.7 KB → 2,324.0 KB
assets/images/UI_FISH.json added 50.2 KB

New sprites: fish_001, fish_002, fish_003, fish_004, fish_005, fish_006, fish_007, fish_008, fish_009, fish_010, fish_011, fish_012, fish_013, fish_014, fish_015, fish_016, fish_017, fish_018, fish_019, fish_020, fish_021, fish_022, fish_023, fish_024, fish_025, fish_026, fish_027, fish_028, fish_029, fish_030, fish_031, fish_032, fish_033, fish_034, fish_035, fish_036, fish_037, fish_038, fish_039, fish_040, fish_041, fish_042, fish_043, fish_044, fish_045, fish_046, fish_047, fish_048, fish_049, fish_050, fish_051, fish_052, fish_053, fish_054, fish_055, fish_056, fish_057, fish_058, fish_059, fish_060, fish_061, fish_062, fish_063, fish_064, fish_065, fish_066, fish_067, fish_068, fish_069, fish_070, fish_071, fish_072, fish_073, fish_074, fish_075, fish_076, fish_077, fish_078, fish_079, fish_080, fish_081, fish_082, fish_083, fish_084, fish_085, fish_086, fish_087, fish_088, fish_089, fish_090, fish_091, fish_092, fish_093, fish_094, fish_095, fish_096, fish_097, fish_098, fish_099, fish_100, fish_101, fish_102, fish_103, fish_104, fish_105, fish_106, fish_107, fish_108, fish_109, fish_110, fish_111, fish_112, fish_113, fish_114, fish_115, fish_116, fish_117, fish_118, fish_119, fish_120, fish_121, fish_122, fish_123, fish_124, fish_125, fish_126, fish_127, fish_128, fish_129, fish_130, fish_131, fish_132, fish_133, fish_134, fish_135, fish_136, fish_137, fish_138, fish_139, fish_140, fish_141, fish_142, fish_143, fish_144, fish_145, fish_146, fish_147, fish_148, fish_149, fish_150, fish_151, fish_152, fish_153, fish_154, fish_155, fish_156, fish_157, fish_158, fish_159, fish_160, fish_161, fish_162, fish_163, fish_164, fish_165, fish_166, fish_167, fish_168, fish_169, fish_170, fish_171, fish_172, fish_173, fish_174, fish_175, fish_176, fish_177, fish_178, fish_179, fish_180, fish_181, fish_182, fish_183, fish_184, fish_185, fish_186, fish_187, fish_188, fish_189, fish_190, fish_191, fish_192, fish_193, fish_194, fish_195, fish_196, fish_197, fish_198, fish_199, fish_200, fish_201, fish_202, fish_203, fish_204, fish_205, fish_206, fish_207, fish_208, fish_209, fish_210, fish_211, fish_212, fish_213, fish_214, fish_215, fish_216, fish_217, fish_218, fish_219, fish_220, fish_221, fish_222, fish_223, fish_224, fish_225, fish_226, fish_227, fish_228, fish_229, fish_230, fish_231, fish_232, fish_233, fish_234, fish_235, fish_236, fish_237, fish_238, fish_239, fish_240, fish_241, fish_242, fish_243, fish_244, fish_245, fish_246, fish_247, fish_248, fish_249, fish_250, fish_251, fish_252, fish_253, fish_254, fish_255, fish_256

assets/images/UI_FISH.webp added 1,063.5 KB
assets/images/bg/deadland/bg1.png removed 583.6 KB → gone before
assets/images/bg/deadland/bg2.png removed 599.1 KB → gone before
assets/images/bg/deadland/bg3.png removed 631.8 KB → gone before
assets/images/bg/deadland/bg4.png removed 569.5 KB → gone before
assets/images/bg/fireland/FireLand.json added 86.7 KB

New sprites: eda_000, eda_001, eda_002, eda_003, eda_004, eda_005, eda_006, eda_007, eda_008, eda_009, eda_010, eda_011, eda_012, eda_013, eda_014, eda_015, eda_016, eda_017, eda_018, eda_019, eda_020, eda_021, eda_022, eda_023, eda_024, eda_025, edb_000, edb_001, edb_002, edb_003, edb_004, edb_005, edb_006, edb_007, edb_008, edb_009, edb_010, edb_011, edb_012, edb_013, edb_014, edb_015, edb_016, edb_017, edb_018, edb_019, edb_020, edb_021, edb_022, edb_023, edb_024, edb_025, efa_000, efa_001, efa_002, efa_003, efa_004, efa_005, efa_006, efa_007, efa_008, efa_009, efa_010, efa_011, efa_012, efa_013, efa_014, efa_015, efa_016, efa_017, efa_018, efa_019, efa_020, efa_021, efa_022, efa_023, efa_024, efa_025, efb_000, efb_001, efb_002, efb_003, efb_004, efb_005, efb_006, efb_007, efb_008, efb_009, efb_010, efb_011, efb_012, efb_013, efb_014, efb_015, efb_016, efb_017, efb_018, efb_019, efb_020, efb_021, efb_022, efb_023, efb_024, efb_025, fla_000, fla_001, fla_002, fla_003, fla_004, fla_005, fla_006, fla_007, fla_008, fla_009, fla_010, fla_011, fla_012, fla_013, fla_014, fla_015, fla_016, fla_017, fla_018, fla_019, fla_020, fla_021, fla_022, fla_023, fla_024, fla_025, fla_026, fla_027, fla_028, fla_029, fla_030, fla_031, fla_032, fla_033, fla_034, fla_035, fla_036, fla_037, fla_038, fla_039, fla_040, fla_041, fla_042, fla_043, fla_044, fla_045, fla_046, fla_047, fla_048, fla_049, fla_050, fla_051, fla_052, fla_053, fla_054, fla_055, fla_056, fla_057, fla_058, fla_059, fla_060, fla_061, fla_062, fla_063, fla_064, fla_065, fla_066, fla_067, fla_068, fla_069, fla_070, fla_071, fla_072, fla_073, fla_074, fla_075, fla_076, fla_077, fla_078, fla_079, fla_080, fla_081, fla_082, fla_083, fla_084, fla_085, fla_086, fla_087, fla_088, fla_089, fla_090, fla_091, fla_092, fla_093, fla_094, fla_095, fla_096, fla_097, fla_098, fla_099, fla_100, fla_101, fla_102, fla_103, fla_104, fla_105, fla_106, fla_107, fla_108, fla_109, fla_110, fla_111, fla_112, fla_113, fla_114, fla_115, fla_116, fla_117, fla_118, fla_119, fla_120, fla_121, fla_122, fla_123, fla_124, fla_125, fla_126, fla_127, fla_128, fla_129, fla_130, fla_131, fla_132, fla_133, fla_134, fla_135, fla_136, fla_137, fla_138, fla_139, fla_140, fla_141, fla_142, fla_143, fla_144, fla_145, fla_146, fla_147, fla_148, fla_149, fla_150, fla_151, fla_152, fla_153, fla_154, fla_155, fla_156, fla_157, fla_158, fla_159, fla_160, fla_161, fla_162, fla_163, fla_164, fla_165, fla_166, fla_167, fla_168, fla_169, fla_170, fla_171, fla_172, fla_173, fla_174, fla_175, fla_176, fla_177, fla_178, fla_179, fla_180, fla_181, fla_182, fla_183, fla_184, fla_185, fla_186, fla_187, fla_188, fla_189, fla_190, fla_191, flb_000, flb_001, flb_002, flb_003, flb_004, flb_005, flb_006, flb_007, flb_008, flb_009, flb_010, flb_011, flb_012, flb_013, flb_014, flb_015, flb_016, flb_017, flb_018, flb_019, flb_020, flb_021, flb_022, flb_023, flb_024, flb_025, flb_026, flb_027, flb_028, flb_029, flb_030, flb_031, flb_032, flb_033, flb_034, flb_035, flb_036, flb_037, flb_038, flb_039, flb_040, flb_041, flb_042, flb_043, flb_044, flb_045, flb_046, flb_047, flb_048, flb_049, flb_050, flb_051, flb_052, flb_053, flb_054, flb_055, flb_056, flb_057, flb_058, flb_059, flb_060, flb_061, flb_062, flb_063, flb_064, flb_065, flb_066, flb_067, flb_068, flb_069, flb_070, flb_071, flb_072, flb_073, flb_074, flb_075, flb_076, flb_077, flb_078, flb_079, flb_080, flb_081, flb_082, flb_083, flb_084, flb_085, flb_086, flb_087, flb_088, flb_089, flb_090, flb_091, flb_092, flb_093, flb_094, flb_095, flb_096, flb_097, flb_098, flb_099, flb_100, flb_101, flb_102, flb_103, flb_104, flb_105, flb_106, flb_107, flb_108, flb_109, flb_110, flb_111, flb_112, flb_113, flb_114, flb_115, flb_116, flb_117, flb_118, flb_119, flb_120, flb_121, flb_122, flb_123, flb_124, flb_125, flb_126, flb_127, flb_128, flb_129, flb_130, flb_131, flb_132, flb_133, flb_134, flb_135, flb_136, flb_137, flb_138, flb_139, flb_140, flb_141, flb_142, flb_143, flb_144, flb_145, flb_146, flb_147, flb_148, flb_149, flb_150, flb_151, flb_152, flb_153, flb_154, flb_155, flb_156, flb_157, flb_158, flb_159, flb_160, flb_161, flb_162, flb_163, flb_164, flb_165, flb_166, flb_167, flb_168, flb_169, flb_170, flb_171, flb_172, flb_173, flb_174, flb_175, flb_176, flb_177, flb_178, flb_179, flb_180, flb_181, flb_182, flb_183, flb_184, flb_185, flb_186, flb_187, flb_188, flb_189, flb_190, flb_191, spk_000, spk_001, spk_002, spk_003, spk_004, spk_005, spk_006, spk_007, spk_008, spk_009, spk_010, spk_011, spk_012, spk_013, spk_014, spk_015, spk_016, spk_017, spk_018, spk_019, spk_020, spk_021, spk_022, spk_023, spk_024, spk_025, spk_026, spk_027, spk_028, spk_029, spk_030, spk_031, spk_032, spk_033, spk_034, spk_035, spk_036, spk_037, spk_038, spk_039, spk_040, spk_041, spk_042, spk_043, spk_044, spk_045, spk_046, spk_047

assets/images/bg/fireland/FireLand.png added 408.5 KB after
assets/images/bg/fireland/ground.png added 670.1 KB after
assets/images/bg/fireland/pulse.png added 92.6 KB after
assets/images/conquest/conquestFacilityBook.draft.json removed 156.5 KB → gone
assets/images/conquest/conquestMaterialBook.draft.json removed 23.2 KB → gone
assets/images/conquest/conquestRegionBook.draft.json removed 199.3 KB → gone
assets/images/conquest/regionBorderOverlay.ktx2 removed 44.9 KB → gone
assets/images/conquest/regionBorderOverlay.png removed 89.7 KB → gone before
assets/images/conquest/regionGameData.draft.json removed 66.6 KB → gone
assets/images/conquest/regionIdR8.png removed 34.7 KB → gone before
assets/images/conquest/regionMetadata.json removed 61.9 KB → gone
assets/images/conquest/worldMapBase.png removed 5,241.8 KB → gone before
assets/images/conquest/worldMapBaseMono.ktx2 removed 2,589.5 KB → gone
assets/images/dialogue/FL_SNE.png added 282.5 KB after
assets/images/title.jpg changed 155.4 KB → 234.2 KB before after
assets/images/title1504.jpg changed 193.4 KB → 291.4 KB before after
assets/images/title1504Gb.jpg changed 195.4 KB → 287.9 KB before after
assets/images/titleGb.jpg changed 157.2 KB → 231.5 KB before after
assets/images/titleWithoutLog1140.jpg changed 128.3 KB → 210.7 KB before after
assets/images/titleWithoutLog1504.jpg changed 166.3 KB → 266.9 KB before after
assets/sounds/fishing/wood_mallet.mp3 added 1.6 KB

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

RowChangeFieldBeforeAfter
_noteremoved"시트 변환본 (sheetToBooks.mjs)"
facilitiesremoved[{"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
_noteremoved"시트 변환본 (sheetToBooks.mjs)"
familiesremoved[{"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": "유적"}]
materialsremoved[{"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
_noteremoved"시트 변환본 (sheetToBooks.mjs)"
regionsremoved[{"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_regionremoved2

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

RowChangeFieldBeforeAfter
_noteremoved"conquest2(GPT) 기하+데이터 채택본 — faction=ID대역, tier=difficulty_tier(중립0→1), 검수 필요"
continent_centroid_pxremoved[1020, 735]
faction_countremoved{"neutral": 14, "human": 34, "orc": 34, "elf": 34, "undead": 34}
landmark_indexremoved[{"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}]
regionsremoved[{"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_regionremoved2

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

RowChangeFieldBeforeAfter
generatorremoved{"source": "conquest2 (GPT partition)", "adopted": "adoptConquest2.mjs"}
heightremoved1400
mask_encodingremoved{"region_id_r8": "pixel grayscale value = region ID (0..150)", "filtering": "Point/Nearest", "mipmap": false, "compression": "None / lossless", "srgb": false}
region_countremoved150
regionsremoved[{"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_idremoved0
widthremoved2048

Code 625 changes in 231 classes

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

FishingAssets 1 hunks, 17277 statements
+ )),qEi=[[72,4,138],[49,4,170],[39,4,170],[35,4,168],[45,4,170],[60,4,154],[43,8,170],[54,4,170],[40,4,170],[26,5,170],[41,4,170],[35,4,170],[45,4,170],[39,5,170],[42,4,162],[43,4,170],[46,4,170],[39,4,170],[35,4,170],[50,4,170],[39,4,170],[44,4,170],[41,4,170],[44,4,170],[60,4,142],[44,4,166],[53,5,170],[43,4,170],[48,4,170],[27,4,163],[44,4,170],[51,4,170],[17,10,170],[36,5,170],[44,4,170],[50,4,170],[38,4,170],[56,5,162],[44,24,170],[35,5,170],[47,5,170],[50,4,170],[53,4,164],[49,5,170],[50,7,170],[43,5,170],[52,5,149],[39,4,170]],XEi=236/256,JEi="boat_gear.webp",QEi="gear_chest.webp",ZEi="boat_big.webp",tAi="area_stamp.webp",iAi="gear_backgrounds/",sAi=192,eAi=class{
+ static ensure(){
+ return this.sheet&&this.topInfo?Promise.resolve():(this.pending??(this.pending=Promise.all([this.sheet?Promise.resolve():this.load(),this.ensureTopdown()]).then(()=>{
+ }
+ ).finally(()=>{
+ this.pending=null}
+ )),this.pending)}
+ static async load(){
+ const t=`?v=${
+ SS.appVersion}
+ &atlas=20260929-fish-256-v1`,i=await fetch(CS.getAssetPath(`UI_FISH.json${
+ t}
+ `));
+ if(!i.ok)throw new Error(`UI_FISH: HTTP ${
+ i.status}
+ `);
+ const s=await i.json(),e=await fd.load({
+ src:CS.getAssetPath(`UI_FISH.webp${
+ t}
+ `),parser:"loadTextures"}
+ ),n=new Vn(e,s);
+ await n.parse(),this.sheet=n}
+ static async loadGiantSpines(){
+ if(this.giantSpine.whale)return;
+ const t="fishing_giant_whale_skel",i="fishing_giant_whale_atlas";
+ try{
+ fd.cache.has(t)||fd.add({
+ alias:t,src:CS.getAssetPath("fishing/topdown/spine/giant_whale.json")}
+ ),fd.cache.has(i)||fd.add({
+ alias:i,src:this.topPath("spine/giant_whale.atlas")}
+ ),await fd.load([t,i]),this.giantSpine.whale={
+ skeleton:t,atlas:i}
+ }
+ catch(ort){
+ }
+ }
+ static topPath(t){
+ const i=t.startsWith(iAi)?"20261008-gear-background-v1":"giants.json"===t||"spine/giant_whale.atlas"===t?"20261004-giants-v1":t===JEi?"20261007-boat-gear-v1":t===QEi?"20261008-gear-chest-v1":t===ZEi?"20261008-boat-big-v1":t===tAi?"20261008-area-stamp-v1":"20261001-topdown-v25";
+ return CS.getAssetPath(`fishing/topdown/${
+ t}
+ ?v=${
+ SS.appVersion}
+ &art=${
+ i}
+ `)}
+ static async ensureTopdown(){
+ if(this.topInfo)return;
+ const t=await fetch(this.topPath("maps.json"),{
+ cache:"no-store"}
+ );
+ if(!t.ok)throw new Error(`topdown maps: HTTP ${
+ t.status}
+ `);
+ const i=await t.json(),s=await fetch(this.topPath("terrain.json"),{
+ cache:"no-store"}
+ );
+ if(!s.ok)throw new Error(`topdown terrain: HTTP ${
+ s.status}
+ `);
+ this.terrainInfo=await s.json();
+ const e=await fetch(this.topPath("world.json"),{
+ cache:"no-store"}
+ );
+ if(!e.ok)throw new Error(`topdown world: HTTP ${
+ e.status}
+ `);
+ this.worldInfo=await e.json();
+ const n={
+ autoGenerateMipmaps:!0}
+ ,[h,[r,o,a,c,l,u,d,f,p,g,w,m,v,_,M,b,y,E,A]]=await Promise.all([fd.load(this.topPath("giants.json")),Promise.all([["boat_0.png",n],["boat_1.png",n],["boat_2.png",n],["boat_3.png",n],["boat_4.png",n],["boat_5.png",n],["shadow.png"],["water_caustic.png"],["water_blotch.png"],["floats.webp",n],["angler.webp",n],["lanterns.png",n],["npc_boats.webp",n],["guests.webp",n],["guest_heads.webp",n],["bubbles.webp",n],["times.png",n],["journey_npcs.webp",n],["glints.png",n]].map(([t,i])=>fd.load({
+ src:this.topPath(t),parser:"loadTextures",...i?{
+ data:i}
+ :{
+ }
+ }
+ )))]),S=Qt(t=>({
+ sharp:h.textures[t],deep:h.textures[t]}
+ ),"giant"),T=await fetch(this.topPath("gear.json"),{
+ cache:"no-store"}
+ );
+ if(!T.ok)throw new Error(`topdown gear: HTTP ${
+ T.status}
+ `);
+ const C=Qt((t,i)=>Array.from({
+ length:i}
+ ,(i,s)=>new as({
+ source:t.source,frame:new Ui(s*t.height,0,t.height,t.height)}
+ )),"strip"),O=Qt(t=>qEi.map(([i,s,e],n)=>new as({
+ source:t.source,frame:new Ui(n%Math.floor(t.width/256)*256+i,256*Math.floor(n/Math.floor(t.width/256))+s,e,e)}
+ )),"faces"),I=Qt((t,i)=>Array.from({
+ length:Math.floor(t.width/i)*Math.floor(t.height/i)}
+ ,(s,e)=>new as({
+ source:t.source,frame:new Ui(e%Math.floor(t.width/i)*i,Math.floor(e/Math.floor(t.width/i))*i,i,i)}
+ )),"grid");
+ this.gearArt={
+ floats:C(g,4),angler:C(w,2),lanterns:C(m,3),npcBoats:C(v,3),guests:C(_,3),guestHeads:C(M,3),bubbles:C(b,3),times:C(y,4),journeyNpcs:I(E,256),journeyFaces:O(E),glints:C(A,12),giants:{
+ whale:S("whale"),shark:S("shark"),manta:S("manta"),catfish:S("catfish"),eel:S("eel")}
+ ,info:await T.json()}
+ ,await this.loadGiantSpines(),this.boatGearTex=await fd.load({
+ src:this.topPath(JEi),parser:"loadTextures",data:n}
+ ).catch(()=>null),this.gearChestTex=await fd.load({
+ src:this.topPath(QEi),parser:"loadTextures",data:n}
+ ).catch(()=>null),this.boatBigTex=await fd.load({
+ src:this.topPath(ZEi),parser:"loadTextures",data:n}
+ ).catch(()=>null),this.areaStampTex=await fd.load({
+ src:this.topPath(tAi),parser:"loadTextures",data:n}
+ ).catch(()=>null),this.gearBackgrounds=await Promise.all(Array.from({
+ length:7}
+ ,(t,i)=>fd.load({
+ src:this.topPath(`${
+ iAi}
+ star_${
+ i+1}
+ .webp`),parser:"loadTextures",data:n}
+ ).catch(()=>null))),this.toolTex=await fd.load({
+ src:this.topPath("tools_v3/atlas.webp"),parser:"loadTextures",data:n}
+ ).catch(()=>null),this.topBoats=[r,o,a,c,l,u],this.topShadow=d;
+ for(const N of[f,p])N.source.addressMode="repeat";
+ this.waterTex={
+ caustic:f,blotch:p}
+ ;
+ const[k,R]=await Promise.all(["foam.png","wake_strip.png"].map(t=>fd.load({
+ src:this.topPath(t),parser:"loadTextures",data:{
+ autoGenerateMipmaps:!0}
+ }
+ ))),x=k.width/4,P=[];
+ for(let N=0;
+ N<16;
+ N++)P.push(new as({
+ source:k.source,frame:new Ui(N%4*x,Math.floor(N/4)*x,x,x)}
+ ));
+ R.source.addressMode="repeat",this.foamTex={
+ puffs:P.slice(0,8),crowns:P.slice(8,12),churn:P.slice(12,16),wake:R}
+ ,this.topInfo=i}
+ static topdownInfo(t){
+ var i;
+ const s=null==(i=this.topInfo)?void 0:i[t];
+ if(!s)throw new Error(`topdown map not ready: ${
+ t}
+ `);
+ return s}
+ static topdownMap(t){
+ let i=this.topMaps.get(t);
+ return i||(i=fd.load({
+ src:this.topPath(this.topdownInfo(t).file),parser:"loadTextures"}
+ ),this.topMaps.set(t,i)),i}
+ static topdownChunk(t,i,s){
+ return fd.load({
+ src:this.topPath(`${
+ this.topdownInfo(t).file}
+ ${
+ i}
+ _${
+ s}
+ .webp`),parser:"loadTextures"}
+ )}
+ static unloadChunk(t,i,s){
+ fd.unload(this.topPath(`${
+ this.topdownInfo(t).file}
+ ${
+ i}
+ _${
+ s}
+ .webp`))}
+ static terrainLand(t){
+ var i,s;
+ return(null==(s=null==(i=this.terrainInfo)?void 0:i.races[t])?void 0:s.land)??null}
+ static world(){
+ if(!this.worldInfo)throw new Error("topdown not ready");
+ return this.worldInfo}
+ static worldMap(){
+ return this.worldTex??(this.worldTex=fd.load({
+ src:this.topPath("world_map.webp"),parser:"loadTextures",data:{
+ autoGenerateMipmaps:!0}
+ }
+ )),this.worldTex}
+ static terrain(t){
+ let i=this.terrains.get(t);
+ if(!i){
+ const s=this.terrainInfo,e=null==s?void 0:s.races[t];
+ if(!s||!e)throw new Error(`terrain not ready: ${
+ t}
+ `);
+ i=fd.load({
+ src:this.topPath(e.file),parser:"loadTextures"}
+ ).then(t=>{
+ const i=Qt((i,e)=>new as({
+ source:t.source,frame:new Ui(i.x+e%i.cols*i.pitch+s.pad,i.y+Math.floor(e/i.cols)*i.pitch+s.pad,i.size,i.size)}
+ ),"cut"),n=Qt(t=>e[t].map((e,n)=>({
+ tex:i(s.layout[t],n),w:e.w,h:e.h}
+ )),"props"),h=Qt(t=>t[0]<<16|t[1]<<8|t[2],"rgb");
+ return{
+ terrain:Array.from({
+ length:240}
+ ,(t,e)=>i(s.layout.terrain,e)),small:n("small"),large:n("large"),landmarks:n("landmarks"),sand:h(e.sand),wet:h(e.wet),land:e.land}
+ }
+ ),this.terrains.set(t,i)}
+ return i}
+ static water(){
+ if(!this.waterTex)throw new Error("topdown not ready");
+ return this.waterTex}
+ static toolIcon(t,i){
+ var s;
+ const e="auto"===t?i-1:i;
+ if(!Number.isInteger(e)||e<0||e>=7)return null;
+ if("bobber"===t&&i<4)return(null==(s=this.gearArt)?void 0:s.floats[i])??null;
+ const n=["line","rod","reel","bobber","icebox","auto"].indexOf(t);
+ if(!this.toolTex||n<0)return null;
+ const h=`${
+ t}
+ _${
+ i}
+ `;
+ let r=this.toolCells.get(h);
+ return r||(r=new as({
+ source:this.toolTex.source,frame:new Ui(256*e,256*n,256,256)}
+ ),this.toolCells.set(h,r)),r}
+ static gearBackground(t){
+ return this.gearBackgrounds[Math.max(1,Math.min(7,t))-1]??null}
+ static boatBig(t){
+ const i=this.boatBigTex;
+ if(!i)return this.boat(t);
+ if(!this.boatBigCells.length){
+ const t=i.width/3;
+ this.boatBigCells=Array.from({
+ length:6}
+ ,(s,e)=>new as({
+ source:i.source,frame:new Ui(e%3*t,Math.floor(e/3)*t,t,t)}
+ ))}
+ return this.boatBigCells[this.boatArt(t)]}
+ static areaStamp(t){
+ const i=this.areaStampTex;
+ if(!i)return null;
+ if(!this.areaStampCells.length){
+ const t=i.height;
+ this.areaStampCells=Array.from({
+ length:6}
+ ,(s,e)=>new as({
+ source:i.source,frame:new Ui(e*t,0,t,t)}
+ ))}
+ return this.areaStampCells["mini"===t?5:Math.max(1,Math.min(5,Math.round(t)))-1]}
+ static gearChest(t){
+ const i=this.gearChestTex;
+ if(!i)return null;
+ if(!this.gearChestCells.length){
+ const t=i.height;
+ this.gearChestCells=[0,1].map(s=>new as({
+ source:i.source,frame:new Ui(s*t,0,t,t)}
+ ))}
+ return this.gearChestCells[t?1:0]}
+ static boatGearIcon(t,i){
+ const s=this.boatGearTex;
+ if(!s)return null;
+ const e=6*t+i;
+ let n=this.boatGearCells.get(e);
+ return n||(n=new as({
+ source:s.source,frame:new Ui(i*sAi,t*sAi,sAi,sAi)}
+ ),this.boatGearCells.set(e,n)),n}
+ static gear(){
+ if(!this.gearArt)throw new Error("topdown not ready");
+ return this.gearArt}
+ static foam(){
+ if(!this.foamTex)throw new Error("topdown not ready");
+ return this.foamTex}
+ static boatArt(t){
+ return[0,1,2,3,4,5,5][Math.max(0,Math.min(6,t))]}
+ static boat(t){
+ return this.topBoats[Math.max(0,Math.min(this.topBoats.length-1,this.boatArt(t)))]}
+ static shadow(){
+ if(!this.topShadow)throw new Error("topdown not ready");
+ return this.topShadow}
+ static fish(t){
+ var i;
+ const s=null==(i=this.sheet)?void 0:i.textures[`fish_${
+ String(t).padStart(3,"0")}
+ `];
+ if(!s)throw new Error(`UI_FISH not ready: ${
+ t}
+ `);
+ return s}
+ }
+ ;
+ Qt(eAi,"FishingAssets"),Zt(eAi,"sheet",null),Zt(eAi,"pending",null),Zt(eAi,"topInfo",null),Zt(eAi,"topBoats",[]),Zt(eAi,"topShadow",null),Zt(eAi,"topMaps",new Map),Zt(eAi,"giantSpine",{
+ whale:null}
+ ),Zt(eAi,"terrainInfo",null),Zt(eAi,"worldInfo",null),Zt(eAi,"worldTex",null),Zt(eAi,"terrains",new Map),Zt(eAi,"waterTex",null),Zt(eAi,"boatGearTex",null),Zt(eAi,"toolTex",null),Zt(eAi,"toolCells",new Map),Zt(eAi,"gearBackgrounds",[]),Zt(eAi,"gearChestTex",null),Zt(eAi,"boatBigTex",null),Zt(eAi,"boatBigCells",[]),Zt(eAi,"areaStampTex",null),Zt(eAi,"areaStampCells",[]),Zt(eAi,"gearChestCells",[]),Zt(eAi,"boatGearCells",new Map),Zt(eAi,"gearArt",null),Zt(eAi,"foamTex",null);
+ let nAi=eAi;
+ const hAi={
+ "인간|강":["은빛강 상류","버들 샛강","조약돌 너른 못","들꽃 실개천","햇살 굽이","노을 소","물레방아 물길","은빛 샛강","은빛강 하류"],"인간|연안":["은빛강 어귀","갈매기 앞바다","소금 석호","조개 너른 만","노을 포구","파도 섬 사이","모래 난바다","돛단배 물길","등대 모래톱"],"인간|대양":["햇살 먼바다","갈매기 군도","파도 물길","고래 섬 사이","산호 난바다","푸른 해류","돌고래 암초","폭풍 한바다","햇살 군도"],"엘프|강":["이끼강 상류","고사리 너른 못","반딧불 굽이","이슬 샛강","꽃잎 실개천","버섯 물길","버들 여울","달빛 샛강","이끼강 하류"],"엘프|연안":["이끼강 어귀","해초 석호","진주 물길","조개 포구","물새 앞바다","이슬 너른 만","달빛 섬 사이","꽃잎 난바다","연꽃 모래톱"],"엘프|대양":["잎새 먼바다","해초 군도","진주 난바다","고래 한바다","산호 섬 사이","초록 암초","달빛 군도","바람 물길","고래 먼바다"],"언데드|강":["잿빛강 상류","마른 갈대 굽이","달그림자 샛강","가시 너른 못","녹슨 실개천","부엉이 소","검은 물길","잿빛 샛강","잿빛강 하류"],"언데드|연안":["잿빛강 어귀","안개 석호","해골 포구","녹슨 닻 섬 사이","뼈 앞바다","달그림자 석호","검은 물길","유령 너른 만","난파선 모래톱"],"언데드|대양":["망령 먼바다","안개 군도","난파선 난바다","검은 섬 사이","해골 암초","폭풍 군도","달그림자 물길","유령 섬 사이","망령 한바다"],"오크|강":["서리강 상류","얼음 샛강","눈보라 너른 못","늑대 실개천","북풍 물길","흰 소","바위 샛강","얼음꽃 웅덩이","서리강 하류"],"오크|연안":["서리강 어귀","고래뼈 석호","얼음 포구","북풍 앞바다","바위 물길","서리 너른 만","유빙 섬 사이","약탈선 석호","물개 포구"],"오크|대양":["고래 먼바다","유빙 난바다","폭풍 한바다","얼음 물길","북풍 군도","서리 해류","바다표범 섬 사이","흰 암초","고래 군도"]}
+ ,rAi=5e3,oAi=[1,1.15,1.3,1.4,1.5];
+ function aAi(t){
+ let i=2654435769^t;
+ return i=Math.imul(i^i>>>16,2246822507),i=Math.imul(i^i>>>13,3266489909),(i^i>>>16)>>>0}
+ function cAi(t,i,s,e=1){
+ const n=aAi(Math.imul(t,7919)+Math.imul(i+1,104729))/4294967296;
+ return Math.max(200,Math.round((15e3+15e3*n)/oAi[s]/Math.max(1,e)))}
+ function lAi(t){
+ return Math.max(2,5-t)}
+ function uAi(t,i,s=1){
+ t.k++,t.nextAt+=cAi(t.seed,t.k,i,s)}
+ function dAi(t,i,s,e){
+ uAi(t,i,s),e&&(t.nextAt+=3500)}
+ function fAi(t,i,s,e,n=[]){
+ const h={
+ ...t}
+ ;
+ for(;
+ h.k<i;
+ )dAi(h,s,e,n.includes(h.k));
+ return h.nextAt}
+ Qt(aAi,"hash32$1"),Qt(cAi,"biteGap"),Qt(lAi,"idleOffNeed"),Qt(uAi,"advanceSeq"),Qt(dAi,"nextBite"),Qt(fAi,"biteAt");
+ const pAi=["prow","compass","deck","anchor","toolbox","sail","lantern"],gAi=["luck","hp","armor","repair","speed","aim","power","steal","icebox","big","star","protect"],wAi={
+ luck:[3,6,10,15,21,28,36],hp:[10,20,35,55,80,110,150],armor:[1,2,4,6,9,12,16],repair:[4,8,12,17,23,30,38],speed:[3,6,9,13,17,22,28],aim:[5,10,16,23,31,40,50],power:[5,10,16,23,31,40,50],steal:[3,6,9,13,17,22,28],icebox:[4,8,12,18,24,32,40],big:[4,8,13,19,26,34,43],star:[4,8,13,19,26,34,43],protect:[5,10,15,20,30,40,60]}
+ ,mAi={
+ repair:60,steal:50,big:90,protect:120}
+ ,vAi={
+ luck:{
+ name:"행운력",unit:"%"}
+ ,hp:{
+ name:"내구도",unit:""}
+ ,armor:{
+ name:"재난 피해 감소",unit:""}
+ ,repair:{
+ name:"수리 시간",unit:"%↓"}
+ ,speed:{
+ name:"배 속도",unit:"%"}
+ ,aim:{
+ name:"작살 조준력",unit:"%"}
+ ,power:{
+ name:"작살 공격력",unit:"%"}
+ ,steal:{
+ name:"훔치는 시간",unit:"%↓"}
+ ,icebox:{
+ name:"어망",unit:"마리"}
+ ,big:{
+ name:"대물 확률",unit:"%"}
+ ,star:{
+ name:"별 확률",unit:"%"}
+ ,protect:{
+ name:"털림 보호",unit:"분"}
+ }
+ ;
+ function _Ai(t){
+ switch(t){
+ case"luck":return"귀한 물고기와 큰 물고기가 둘 다 조금씩 더 잘 잡혀요";
+ case"star":return"별이 많은 귀한 물고기(★3 이상)가 더 자주 잡혀요";
+ case"big":return"더 크고 무거운 물고기가 잘 잡혀요. 특대·왕도 더 자주 나와요";
+ case"hp":return"배가 더 튼튼해져서 쉽게 부서지지 않아요";
+ case"armor":return"재난을 맞거나 먼 바다로 나갈 때 배가 덜 상해요";
+ case"repair":return"부서진 배를 더 빨리 고쳐요";
+ case"speed":return"배가 더 빨리 움직여요";
+ case"aim":return"몬스터에게 작살을 던질 때 더 잘 맞아요";
+ case"power":return"작살로 몬스터에게 주는 피해가 커져요";
+ case"steal":return"다른 사람 어망에서 물고기를 더 빨리 훔쳐요";
+ case"icebox":return"어망에 물고기를 더 많이 담을 수 있어요";
+ case"protect":return"털린 뒤 다시 털리지 않는 시간이 길어져요"}
+ }
+ Qt(_Ai,"statHelp");
+ const MAi={
+ prow:"luck",compass:"aim",deck:"hp",anchor:"steal",toolbox:"repair",sail:"speed",lantern:"icebox"}
+ ,bAi={
+ prow:[["사자 선수상","hp","armor"],["인어 선수상","big","aim"],["용 선수상","star","power"],["독수리 선수상","aim","speed"],["고래 선수상","icebox","hp"]],compass:[["놋쇠 나침반","speed","steal"],["별자리 나침반","power","star"],["심해 나침반","luck","big"],["드워프 나침반","repair","armor"],["요정 나침반","big","luck"]],deck:[["참나무 갑판","repair","armor"],["철판 갑판","armor","repair"],["고래뼈 갑판","icebox","luck"],["흑단 갑판","protect","steal"],["산호 갑판","luck","big"]],anchor:[["갈고리 닻","luck","icebox"],["무쇠 닻","protect","hp"],["해골 닻","armor","repair"],["쌍갈래 닻","speed","aim"],["룬 닻","power","star"]],toolbox:[["목수 공구함","hp","luck"],["드워프 공구함","armor","hp"],["마법 공구함","speed","aim"],["선장 공구함","protect","steal"],["장인 공구함","icebox","power"]],sail:[["삼베 돛","armor","repair"],["비단 돛","luck","big"],["폭풍 돛","steal","power"],["별빛 돛","aim","star"],["가죽 돛","hp","protect"]],lantern:[["반딧불 등불","big","star"],["등대 등불","aim","speed"],["도깨비불 등불","power","steal"],["달빛 등불","luck","hp"],["촛불 등불","repair","armor"]]}
+ ,yAi=pAi.flatMap((t,i)=>bAi[t].map(([s,e,n],h)=>({
+ id:10*(i+1)+h+1,slot:t,v:h,name:s,stats:[MAi[t],e,n]}
+ ))),EAi=new Map(yAi.map(t=>[t.id,t])),AAi=Qt(t=>EAi.get(t),"gearDef"),SAi={
+ prow:"선수상",compass:"나침반",deck:"갑판",anchor:"닻",toolbox:"공구함",sail:"돛",lantern:"등불"}
+ ,TAi=[[1,.7],[2,.22],[3,.07],[4,.01]],CAi=Qt(t=>Math.max(1,Math.min(7,t+1)),"equipCap");
+ function OAi(t,i){
+ const s=AAi(t);
+ if(!s)return{
+ }
+ ;
+ const e=Math.max(1,Math.min(7,i))-1,n={
+ }
+ ,h=Qt((t,i)=>{
+ n[t]=Math.round(10*((n[t]??0)+wAi[t][e]*i))/10}
+ ,"add");
+ return h(s.stats[0],1),h(s.stats[1],.6),i>=5&&h(s.stats[2],.6),n}
+ Qt(OAi,"itemStats");
+ const IAi=Qt(()=>Object.fromEntries(gAi.map(t=>[t,0])),"zeroStats");
+ function kAi(t){
+ const i=IAi(),s=t.gearBox;
+ if(!s)return i;
+ const e=CAi(t.gear.boat);
+ for(const n of Object.values(s.equipped)){
+ const t=s.items.find(t=>t.uid===n);
+ if(t)for(const[s,n]of Object.entries(OAi(t.id,Math.min(e,t.star))))i[s]+=n}
+ for(const[n,h]of Object.entries(mAi))i[n]=Math.min(h,i[n]);
+ for(const n of gAi)i[n]=Math.round(10*i[n])/10;
+ return i}
+ function RAi(t,i,s){
+ return t.items.filter(t=>{
+ var e;
+ return t.star<=s&&(null==(e=AAi(t.id))?void 0:e.slot)===i}
+ ).sort((t,i)=>i.star-t.star||t.uid-i.uid)[0]}
+ function xAi(t,i,s){
+ if(!t)return;
+ const e=RAi(t,i,s);
+ if(!e)return;
+ const n=t.items.find(s=>s.uid===t.equipped[i]);
+ return!n||n.star>s||e.star>n.star?e:void 0}
+ function PAi(t){
+ if(!t)return[];
+ const i=new Set([...Object.values(t.equipped),...t.kept??[]]),s=new Map;
+ for(const e of t.items){
+ const t=AAi(e.id);
+ if(!t||i.has(e.uid)||e.star>=7)continue;
+ const n=`${
+ t.slot}
+ |${
+ e.star}
+ `;
+ s.set(n,(s.get(n)??0)+1)}
+ return[...s.entries()].filter(([,t])=>t>=3).map(([t,i])=>({
+ slot:t.split("|")[0],star:Number(t.split("|")[1]),n:i}
+ ))}
+ function NAi(t){
+ if(!t)return[];
+ const i=new Set(Object.values(t.equipped)),s=new Map;
+ for(const e of t.items){
+ const t=AAi(e.id);
+ if(!t||i.has(e.uid)||e.star>=7)continue;
+ const n=`${
+ t.slot}
+ |${
+ e.star}
+ `;
+ s.set(n,[...s.get(n)??[],e])}
+ return[...s.entries()].filter(([,t])=>t.length>=3).map(([t,i])=>({
+ slot:t.split("|")[0],star:Number(t.split("|")[1]),list:i.sort((t,i)=>t.uid-i.uid)}
+ )).sort((t,i)=>t.star-i.star||pAi.indexOf(t.slot)-pAi.indexOf(i.slot))}
+ Qt(kAi,"gearStats"),Qt(RAi,"bestGear"),Qt(xAi,"betterGear"),Qt(PAi,"mergeable"),Qt(NAi,"mergeGroups");
+ const LAi=[3032396,10135467,6142819,4886754,10513640,15901498,16734815,16769126],DAi={
+ LEVELS:7,MAX_HP:[100,140,190,250,320,400,500],ARMOR:[0,5,11,18,26,35,45],REPAIR_MIN:[1,3,6,12,20,32,45],ZONE_REPAIR_ADD_MIN:{
+ R:0,C:10,O:20}
+ ,MOVE_MIN:20,ENTRY:{
+ R:0,C:2,O:4}
+ ,TRAVEL:{
+ R:4,C:16,O:36}
+ ,HAZARD_MS:3e5,HELP_PCT:.03,HELP_MAX:10,HELP_MS:36e5,HELP_RANGE:380}
+ ,GAi=["인간|R","오크|R","엘프|R","언데드|R","인간|C","오크|C","엘프|C","언데드|C","인간|O","오크|O","엘프|O","언데드|O"],BAi=[1,1.08,1.16,1.24],UAi=[0,0,0,0,3,3,3,4,5,5,6,6],FAi=Qt((t,i)=>GAi.indexOf(`${
+ t}
+ |${
+ i}
+ `)+1,"regionTier"),$Ai={
+ R:[{
+ key:"gust",text:"돌풍이 불어서",dmg:4,w:4}
+ ,{
+ key:"rapid",text:"급류에 휩쓸려",dmg:9,w:3}
+ ,{
+ key:"rock",text:"바위에 긁혀서",dmg:7,w:2}
+ ],C:[{
+ key:"gust",text:"돌풍이 불어서",dmg:14,w:3}
+ ,{
+ key:"wave",text:"거센 파도로",dmg:34,w:3}
+ ,{
+ key:"reef",text:"암초에 부딪혀",dmg:28,w:2}
+ ],O:[{
+ key:"swell",text:"큰 너울에",dmg:42,w:3}
+ ,{
+ key:"storm",text:"폭풍이 몰아쳐",dmg:59,w:2}
+ ,{
+ key:"thunder",text:"번개를 맞아",dmg:51,w:1}
+ ,{
+ key:"monster",text:"몬스터의 물살로",dmg:46,w:2}
+ ]}
+ ,HAi={
+ "인간":{
+ key:"log",text:"떠내려온 통나무에 부딪혀"}
+ ,"엘프":{
+ key:"vine",text:"가시 덩굴에 걸려"}
+ ,"언데드":{
+ key:"ghost",text:"망령의 손길에"}
+ ,"오크":{
+ key:"ice",text:"얼음 덩어리에 부딪혀"}
+ }
+ ,WAi={
+ R:11,C:30,O:55}
+ ;
+ function VAi(t,i){
+ const s=BAi[(FAi(t,i)-1)%4];
+ return[...$Ai[i],{
+ ...HAi[t],dmg:WAi[i],w:1}
+ ].map(t=>({
+ ...t,dmg:Math.round(t.dmg*s)}
+ ))}
+ Qt(VAi,"hazardsOf");
+ const jAi=Qt(t=>.35+.03*(t-1),"hazardChance");
+ function KAi(t,i,s){
+ const e=FAi(t,i),n=aAi(104729*e+7919*s);
+ if(n%1e3>=1e3*jAi(e))return null;
+ const h=VAi(t,i),r=h.reduce((t,i)=>t+i.w,0);
+ let o=aAi(n+17)%r,a=h[0];
+ for(const c of h){
+ if(o<c.w){
+ a=c;
+ break}
+ o-=c.w}
+ return{
+ k:s,at:s*DAi.HAZARD_MS+2e4+aAi(n+31)%(DAi.HAZARD_MS-4e4),def:a}
+ }
+ Qt(KAi,"hazardAt");
+ const zAi=Qt(t=>Math.floor(t/DAi.HAZARD_MS),"hazardWindow");
+ function YAi(t,i,s){
+ for(let e=zAi(s);
+ e<zAi(s)+24;
+ e++){
+ const n=KAi(t,i,e);
+ if(n&&n.at>s)return n}
+ return null}
+ Qt(YAi,"nextHazard");
+ const qAi=Qt(t=>Math.max(0,Math.min(DAi.LEVELS-1,t)),"clampLv"),XAi=Qt(t=>DAi.MAX_HP[qAi(t)],"maxHp"),JAi=Qt(t=>DAi.ARMOR[qAi(t)],"armorOf"),QAi=Qt((t,i)=>6e4*(DAi.REPAIR_MIN[qAi(t)]+DAi.ZONE_REPAIR_ADD_MIN[i]),"repairMs"),ZAi=Qt(t=>Math.min(4,1+Math.floor(t/2)),"helpSlots");
+ function tSi(t){
+ return Math.round(10*t)/10}
+ Qt(tSi,"round1");
+ const iSi=Qt(t=>tSi(XAi(t.gear.boat)+kAi(t).hp),"maxHpOf"),sSi=Qt(t=>tSi(JAi(t.gear.boat)+kAi(t).armor),"armorOfS"),eSi=Qt((t,i)=>tSi(Math.max(0,t-i)),"hitDamage"),nSi=Qt(t=>String(tSi(t)),"hpText"),hSi=Qt(t=>t.replace(/\d+\.\d{
+ 3,}
+ /g,t=>String(tSi(Number(t)))),"tidyNumbers"),rSi=Qt(t=>Math.round(QAi(t.gear.boat,t.spot.zone)*(1-kAi(t).repair/100)),"repairMsOf");
+ function oSi(t,i,s){
+ if(!i.repairAt)return i.hp;
+ const e=iSi(t);
+ return Math.min(e,i.repairHp+(s-i.repairAt)*e/rSi(t))}
+ function aSi(t,i){
+ if(!i.repairAt)return 0;
+ const s=iSi(t);
+ return i.repairAt+Math.max(0,(s-i.repairHp)/s*rSi(t))}
+ function cSi(t,i){
+ const s=t.boat,e=ZAi(t.gear.boat);
+ if(!s)return{
+ n:1,nextAt:null}
+ ;
+ if(s.helpPts>=e)return{
+ n:e,nextAt:null}
+ ;
+ const n=Math.floor(Math.max(0,i-s.helpAt)/DAi.HELP_MS),h=Math.min(e,s.helpPts+n),r=s.helpAt+n*DAi.HELP_MS;
+ return{
+ n:h,nextAt:h>=e?null:r+DAi.HELP_MS}
+ }
+ function lSi(t,i){
+ const s=UAi[FAi(t,i)-1]+1,e=DAi.ENTRY[i]+1;
+ return e>=s?`배 ${
+ e}
+ 단계부터`:`배 ${
+ e}
+ 단계부터 · 안정 ${
+ s}
+ 단계`}
+ Qt(oSi,"hpAt"),Qt(aSi,"repairEndAt"),Qt(cSi,"helpPtsOf"),Qt(lSi,"regionBoatText");
+ const uSi=["인간","엘프","언데드","오크"],dSi=["R","C","O"],fSi=["S","M","B"],pSi={
+ R:"강",C:"연안",O:"대양"}
+ ,gSi={
+ S:"수면",M:"중층",B:"바닥"}
+ ,wSi=["햇살","노을","달빛","안개"],mSi=["낮","저녁","밤","새벽"],vSi={
+ "인간|R":"은빛강","인간|C":"노을만","인간|O":"왕국 앞바다","엘프|R":"이끼강","엘프|C":"연꽃만","엘프|O":"초록 바다","언데드|R":"잿빛강","언데드|C":"안개만","언데드|O":"망령 바다","오크|R":"서리강","오크|C":"북풍만","오크|O":"고래 바다"}
+ ,_Si=36e5,MSi={
+ "아주작음":{
+ kg:.008,cm:4}
+ ,"작음":{
+ kg:.05,cm:8}
+ ,"보통":{
+ kg:.2,cm:20}
+ ,"큼":{
+ kg:1,cm:35}
+ ,"아주큼":{
+ kg:5,cm:70}
+ ,"대물":{
+ kg:30,cm:130}
+ ,"거대":{
+ kg:200,cm:250}
+ ,"범고래":{
+ kg:1e3,cm:400}
+ ,"고래":{
+ kg:5e3,cm:800}
+ }
+ ,bSi=[["고래상어","고래"],["돌고래","거대"],["범고래","범고래"],["고래","고래"],["백상아리","거대"],["바다사자","거대"],["매너티","거대"],["장수거북","거대"],["개복치","거대"],["대왕오징어","대물"],["산갈치","대물"],["가비알","대물"],["철갑상어","대물"],["실러캔스","대물"],["청새치","대물"],["참치","대물"],["물범","대물"],["꼬마상어","아주큼"],["상어","대물"],["거북손","아주작음"],["늑대거북","아주큼"],["가오리","아주큼"],["곰치","아주큼"],["늑대장어","아주큼"],["해달","아주큼"],["비버","아주큼"],["가아","아주큼"],["망토문어","아주큼"],["초롱아귀","큼"],["아귀","아주큼"],["메기","큼"],["장어","큼"],["문어","큼"],["펭귄","큼"],["거북","큼"],["투구게","큼"],["잉어","큼"],["용고기","큼"],["도치","큼"],["대왕등각류","보통"],["갑오징어","보통"],["오징어","보통"],["앵무조개","보통"],["전복","보통"],["해삼","보통"],["가시복","보통"],["쏠배감펭","보통"],["날치","보통"],["놀래기","보통"],["박쥐고기","보통"],["토끼고기","보통"],["통구멍","보통"],["칼고기","보통"],["성대","보통"],["빗해파리","아주작음"],["해파리","보통"],["볼루트고둥","보통"],["왕우럭조개","보통"],["집소라게","아주작음"],["달랑게","아주작음"],["매미새우","작음"],["불가사리","작음"],["도롱뇽","작음"],["게","작음"],["가재","작음"],["가리비","작음"],["소라","작음"],["진주조개","작음"],["가시굴","작음"],["홍합","작음"],["말미잘","작음"],["상자고기","작음"],["학공치","작음"],["집낙지","작음"],["꼬마고둥","아주작음"],["고둥","작음"],["새우","아주작음"],["등각류","아주작음"],["실고기","아주작음"],["해마","아주작음"],["베타","아주작음"],["갯민숭이","아주작음"],["리본벌레","아주작음"],["바다나리","아주작음"],["삿갓조개","아주작음"],["군부","아주작음"],["바다천사","아주작음"],["맛조개","아주작음"],["도끼고기","아주작음"]],ySi=Qt(t=>{
+ var i;
+ return(null==(i=bSi.find(([i])=>t.includes(i)))?void 0:i[1])??"보통"}
+ ,"weightBand"),ESi=[[0,1],[.7,2.5],[.92,4.5],[.99,7],[1,10]];
+ function ASi(t,i){
+ const s=Math.max(0,Math.min(1,i));
+ let e=10;
+ for(let n=1;
+ n<ESi.length;
+ n++){
+ const[t,i]=ESi[n-1],[h,r]=ESi[n];
+ if(s<=h){
+ e=i*Math.pow(r/i,(s-t)/(h-t));
+ break}
+ }
+ return{
+ kg:Math.round(t.kg[0]*e*1e3)/1e3,cm:Math.round(t.cm[0]*Math.cbrt(e)*10)/10}
+ }
+ function SSi(t){
+ let i=2654435769^t;
+ return i=Math.imul(i^i>>>16,2246822507),i=Math.imul(i^i>>>13,3266489909),(i^i>>>16)>>>0}
+ Qt(ASi,"sizeOf"),Qt(SSi,"hash32");
+ const TSi={
+ "인간":[8,27,48,12,18],"엘프":[63,70,52,65],"언데드":[128,126,118,119,116],"오크":[174,167,163,171]}
+ ,CSi=Qt((t,i,s,e,n)=>{
+ var h;
+ return 1!==e||"R"!==s||(null==(h=TSi[i])?void 0:h.includes(t))?n:n.filter(t=>t>=3)}
+ ,"startTrim"),OSi=[[1,"인간","어류","화로입꿀꺽장어","O","B","전체",3,"대형",4,1125,[3,6],0],[2,"인간","어류","불꽃돛청새치","O","S","노을",4,"대형",4,2250,[2,4,6,7],1],[3,"인간","어류","잿꽃꼬리베타","R","S","전체",2,"중형",1,20,[0,1,2,3,4],0],[4,"인간","어류","숯갑옷상자고기","C","M","전체",2,"중형",2,70,[0,1,2,3,4],0],[5,"인간","어류","대장간귀상어","O","M","전체",3,"대형",4,750,[4,7],0],[6,"인간","어류","불갈기해마","C","S","노을",3,"소형",2,175,[3,6],0],[7,"인간","어류","석탄주걱통구멍","C","B","전체",1,"중형",2,35,[0,1,2,3,4,5,6,7,8],0],[8,"인간","어류","불씨가시복","R","S","전체",1,"중형",1,10,[0,1,2,3,4,5,6,7,8],0],[9,"인간","어류","용암띠장어","R","M","노을",2,"대형",2,20,[3,4,5,6],0],[10,"인간","어류","숯등철갑상어","R","B","노을",5,"대형",3,600,[8],0],[11,"인간","어류","장밋날개날치","O","S","햇살",2,"중형",3,300,[0,1,2,3,4],0],[12,"인간","어류","화덕수염메기","R","B","전체",1,"대형",2,10,[0,1,2,3,4,5,6,7,8],0],[13,"인간","어류","햇살원반가오리","R","S","햇살",3,"대형",2,50,[3,6],0],[14,"인간","어류","홍등초롱아귀","O","B","달빛",4,"대형",4,3375,[2,4,6,7],1],[15,"인간","어류","불꽃꼬리참치","O","M","전체",2,"대형",4,300,[2,3,4,5],0],[16,"인간","어류","잿꽃갈기쏠배감펭","C","M","전체",2,"중형",2,70,[2,3,4,5],0],[17,"인간","갑각·껍질","도가니등게","R","B","전체",3,"소형",1,50,[4,7],0],[18,"인간","갑각·껍질","잿구름벙어리게","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[19,"인간","갑각·껍질","현무암투구게","C","B","달빛",4,"소형",2,525,[2,4,6,7],1],[20,"인간","갑각·껍질","숯주걱집게게","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[21,"인간","갑각·껍질","대장간권총새우","R","M","전체",2,"소형",1,20,[5,6,7,8],0],[22,"인간","갑각·껍질","불씨마디등각류","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[23,"인간","갑각·껍질","용암주먹갯가재","C","B","전체",3,"소형",2,175,[4,7],0],[24,"인간","갑각·껍질","화산집소라게","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[25,"인간","갑각·껍질","노을불꽃가리비","C","M","노을",2,"소형",2,70,[4,5,6,7],0],[26,"인간","갑각·껍질","불씨진주조개","R","B","전체",3,"소형",1,50,[5,8],0],[27,"인간","갑각·껍질","화로소용돌이고둥","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[28,"인간","갑각·껍질","잿구름뿔소라","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[29,"인간","갑각·껍질","용암판앵무조개","O","M","전체",2,"소형",3,300,[4,5,6,7],0],[30,"인간","갑각·껍질","화덕삿갓조개","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[31,"인간","갑각·껍질","햇살테전복","C","B","햇살",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[32,"인간","갑각·껍질","홍등꼬마고둥","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[33,"인간","비어류","화로배고래","O","S","햇살",5,"거대",5,9e3,[8],0],[34,"인간","비어류","잿꽃꼬리돌고래","O","S","전체",3,"거대",5,750,[5,8],0],[35,"인간","비어류","화산등늑대거북","R","S","전체",4,"대형",2,150,[2,4,6,7],1],[36,"인간","비어류","불꽃아가미도롱뇽","R","M","전체",2,"중형",1,20,[1,2,7,8],0],[37,"인간","비어류","풀무입문어","C","B","전체",2,"대형",3,70,[5,6,7,8],0],[38,"인간","비어류","횃불오징어","O","M","달빛",2,"대형",4,300,[5,6,7,8],0],[39,"인간","비어류","잿꽃치마갑오징어","C","S","전체",1,"대형",3,35,[0,1,2,3,4,5,6,7,8],0],[40,"인간","비어류","불씨심장귀문어","O","B","전체",2,"대형",4,450,[1,2,7,8],0],[41,"인간","비어류","화로등해파리","O","M","전체",1,"중형",3,150,[0,1,2,3,4,5,6,7,8],0],[42,"인간","비어류","불꽃말미잘","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[43,"인간","비어류","불바퀴거미불가사리","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[44,"인간","비어류","불씨혹해삼","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[45,"인간","비어류","잿갈기바다사자","C","S","전체",4,"거대",4,525,[8],0],[46,"인간","비어류","불꽃볏펭귄","C","S","전체",3,"대형",3,175,[5,8],0],[47,"인간","비어류","노을꽃갯민숭이","C","M","노을",2,"소형",2,70,[1,2,7,8],0],[48,"인간","비어류","용암리본벌레","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[49,"엘프","어류","연꽃꼬리베타","R","S","전체",2,"중형",1,20,[0,1,2,3,4],0],[50,"엘프","어류","도토리가시복","C","S","전체",2,"중형",2,70,[0,1,2,3,4],0],[51,"엘프","어류","연잎가오리","R","S","전체",3,"대형",2,50,[3,6],0],[52,"엘프","어류","뿌리수염메기","R","B","전체",1,"대형",2,10,[0,1,2,3,4,5,6,7,8],0],[53,"엘프","어류","고사리돛청새치","O","S","햇살",4,"대형",4,2250,[2,4,6,7],1],[54,"엘프","어류","꼬투리상자고기","C","S","전체",2,"중형",2,70,[2,3,4,5],0],[55,"엘프","어류","버들잎장어","R","M","달빛",2,"대형",2,20,[3,4,5,6],0],[56,"엘프","어류","은행잎개복치","O","M","전체",3,"대형",4,750,[3,6],0],[57,"엘프","어류","솔방울철갑상어","R","B","안개",5,"대형",3,600,[8],0],[58,"엘프","어류","단풍날개날치","O","S","노을",2,"중형",3,300,[0,1,2,3,4],0],[59,"엘프","어류","완두꼬투리학공치","O","S","전체",1,"중형",3,150,[0,1,2,3,4,5,6,7,8],0],[60,"엘프","어류","이끼혹놀래기","C","M","전체",1,"중형",2,35,[0,1,2,3,4,5,6,7,8],0],[61,"엘프","어류","덩굴꼬리해마","C","S","햇살",3,"소형",2,175,[3,6],0],[62,"엘프","어류","꽃입아귀","O","B","달빛",4,"대형",4,3375,[2,4,6,7],1],[63,"엘프","어류","씨앗비늘잉어","R","M","전체",1,"중형",1,10,[0,1,2,3,4,5,6,7,8],0],[64,"엘프","어류","잎꼬리꼬마상어","O","M","전체",2,"대형",4,300,[2,3,4,5],0],[65,"엘프","갑각·껍질","밤송이집게게","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[66,"엘프","갑각·껍질","연꽃그릇게","R","S","햇살",2,"소형",1,20,[5,6,7,8],0],[67,"엘프","갑각·껍질","고사리집게게","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[68,"엘프","갑각·껍질","잎방패투구게","C","B","달빛",4,"소형",2,525,[2,4,6,7],1],[69,"엘프","갑각·껍질","씨앗주먹갯가재","C","B","전체",3,"소형",2,175,[4,7],0],[70,"엘프","갑각·껍질","대나무마디새우","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[71,"엘프","갑각·껍질","솔방울등각류","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[72,"엘프","갑각·껍질","버섯집소라게","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[73,"엘프","갑각·껍질","은행부채가리비","C","M","전체",2,"소형",2,70,[4,5,6,7],0],[74,"엘프","갑각·껍질","씨앗진주조개","R","B","전체",3,"소형",1,50,[4,7],0],[75,"엘프","갑각·껍질","도토리뿔소라","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[76,"엘프","갑각·껍질","덩굴나선고둥","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[77,"엘프","갑각·껍질","호두방앵무조개","O","M","전체",3,"소형",3,750,[4,7],0],[78,"엘프","갑각·껍질","꽃잎삿갓조개","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[79,"엘프","갑각·껍질","이끼테전복","C","B","안개",3,"소형",2,175,[5,8],0],[80,"엘프","갑각·껍질","초롱꼬투리고둥","O","B","달빛",2,"소형",3,450,[4,5,6,7],0],[81,"엘프","비어류","버들잎지느러미고래","O","S","햇살",5,"거대",5,9e3,[8],0],[82,"엘프","비어류","완두꼬투리매너티","R","S","햇살",4,"거대",3,150,[2,4,6,7],1],[83,"엘프","비어류","나이테등거북","R","M","전체",1,"대형",2,10,[0,1,2,3,4,5,6,7,8],0],[84,"엘프","비어류","고사리아가미도롱뇽","R","B","안개",2,"중형",1,20,[1,2,7,8],0],[85,"엘프","비어류","꽃봉오리오징어","O","M","달빛",2,"대형",4,300,[5,6,7,8],0],[86,"엘프","비어류","연꽃망토문어","C","M","전체",4,"대형",3,525,[8],0],[87,"엘프","비어류","클로버귀문어","O","B","전체",3,"대형",4,1125,[5,8],0],[88,"엘프","비어류","이끼치마갑오징어","C","S","전체",2,"대형",3,70,[5,6,7,8],0],[89,"엘프","비어류","버섯갓해파리","O","M","전체",1,"중형",3,150,[0,1,2,3,4,5,6,7,8],0],[90,"엘프","비어류","꽃잎말미잘","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[91,"엘프","비어류","고사리깃바다나리","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[92,"엘프","비어류","완두등해삼","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[93,"엘프","비어류","뿌리수염해달","R","S","전체",3,"대형",2,50,[5,8],0],[94,"엘프","비어류","버들꼬리물범","O","S","전체",2,"대형",4,300,[1,2,7,8],0],[95,"엘프","비어류","단풍망토갯민숭이","C","M","노을",2,"소형",2,70,[1,2,7,8],0],[96,"엘프","비어류","덩굴리본벌레","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[97,"언데드","어류","뼈줄무늬가아","R","S","전체",2,"대형",2,20,[0,1,2,3,4],0],[98,"언데드","어류","달그늘도끼고기","O","M","달빛",1,"중형",3,150,[0,1,2,3,4,5,6,7,8],0],[99,"언데드","어류","송곳니늑대장어","C","B","전체",3,"대형",3,175,[3,6],0],[100,"언데드","어류","잿빛박쥐고기","C","B","전체",2,"중형",2,70,[0,1,2,3,4],0],[101,"언데드","어류","유령칼고기","R","M","달빛",2,"중형",1,20,[3,4,5,6],0],[102,"언데드","어류","그림자꿀꺽장어","O","M","전체",2,"대형",4,300,[0,1,2,3,4],0],[103,"언데드","어류","뼈턱용고기","O","B","달빛",3,"대형",4,1125,[3,6],0],[104,"언데드","어류","자주초롱아귀","O","B","전체",2,"대형",4,450,[2,3,4,5],0],[105,"언데드","어류","고대뼈실러캔스","O","B","달빛",5,"대형",5,13500,[8],0],[106,"언데드","어류","달가면토끼고기","C","S","전체",1,"중형",2,35,[0,1,2,3,4,5,6,7,8],0],[107,"언데드","어류","무덤입통구멍","C","B","전체",2,"중형",2,70,[2,3,4,5],0],[108,"언데드","어류","뼈마디실고기","R","M","전체",2,"소형",1,20,[5,6,7,8],0],[109,"언데드","어류","망령주름상어","O","M","안개",4,"대형",4,2250,[2,4,6,7],1],[110,"언데드","어류","뼈등철갑상어","R","B","안개",5,"대형",3,600,[8],0],[111,"언데드","어류","해골무늬가오리","R","B","전체",3,"대형",2,50,[3,6],0],[112,"언데드","어류","유령갈기쏠배감펭","C","M","달빛",2,"중형",2,70,[4,5,6,7],0],[113,"언데드","갑각·껍질","해골방패투구게","C","B","달빛",3,"소형",2,175,[4,7],0],[114,"언데드","갑각·껍질","뼈가시거미게","O","B","전체",2,"소형",3,450,[4,5,6,7],0],[115,"언데드","갑각·껍질","봉합등상자게","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[116,"언데드","갑각·껍질","박쥐날개집게게","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[117,"언데드","갑각·껍질","뼈갑옷대왕등각류","O","B","전체",3,"소형",3,1125,[4,7],0],[118,"언데드","갑각·껍질","뼈마디유령새우","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[119,"언데드","갑각·껍질","숯뼈가재","R","B","전체",1,"중형",1,10,[0,1,2,3,4,5,6,7,8],0],[120,"언데드","갑각·껍질","묘비집소라게","R","B","전체",2,"소형",1,20,[1,2,7,8],0],[121,"언데드","갑각·껍질","뼈고리뿔고둥","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[122,"언데드","갑각·껍질","송곳니가리비","C","M","전체",2,"소형",2,70,[5,6,7,8],0],[123,"언데드","갑각·껍질","관뚜껑홍합","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[124,"언데드","갑각·껍질","흑진주가시굴","C","B","안개",4,"소형",2,525,[2,4,6,7],1],[125,"언데드","갑각·껍질","자주번개볼루트고둥","O","B","전체",2,"소형",3,450,[5,6,7,8],0],[126,"언데드","갑각·껍질","유령관고둥","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[127,"언데드","갑각·껍질","뼈방앵무조개","O","M","전체",3,"소형",3,750,[5,8],0],[128,"언데드","갑각·껍질","잿뿔유령소라","R","S","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[129,"언데드","비어류","망령갈비고래","O","S","달빛",4,"거대",5,2250,[2,4,6,7],1],[130,"언데드","비어류","보랏띠물범","C","S","달빛",4,"대형",3,525,[8],0],[131,"언데드","비어류","뼈등가비알","R","S","전체",4,"거대",3,150,[2,4,6,7],1],[132,"언데드","비어류","창백동굴도롱뇽","R","B","안개",3,"소형",1,50,[4,7],0],[133,"언데드","비어류","초승망토문어","C","M","달빛",3,"대형",3,175,[5,8],0],[134,"언데드","비어류","유리유령오징어","O","S","전체",1,"대형",4,150,[0,1,2,3,4,5,6,7,8],0],[135,"언데드","비어류","죄수줄무늬오징어","C","S","전체",1,"대형",3,35,[0,1,2,3,4,5,6,7,8],0],[136,"언데드","비어류","양뿔촉수오징어","O","M","전체",2,"대형",4,300,[1,2,7,8],0],[137,"언데드","비어류","흰보유령해파리","R","S","달빛",3,"중형",1,50,[5,8],0],[138,"언데드","비어류","자주꽃거꾸로해파리","C","B","전체",1,"중형",2,35,[0,1,2,3,4,5,6,7,8],0],[139,"언데드","비어류","뼈마디거미불가사리","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[140,"언데드","비어류","잿가시해삼","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[141,"언데드","비어류","박쥐망토갯민숭이","C","M","전체",2,"소형",2,70,[1,2,7,8],0],[142,"언데드","비어류","망령관말미잘","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[143,"언데드","비어류","보랏깃바다나리","O","B","전체",1,"소형",3,225,[0,1,2,3,4,5,6,7,8],0],[144,"언데드","비어류","그림자리본벌레","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[145,"오크","어류","푸른질주참치","O","M","전체",1,"대형",4,150,[0,1,2,3,4,5,6,7,8],0],[146,"오크","어류","달원반개복치","O","M","달빛",1,"대형",4,150,[0,1,2,3,4,5,6,7,8],0],[147,"오크","어류","하늘날개날치","C","S","전체",1,"중형",2,35,[0,1,2,3,4,5,6,7,8],0],[148,"오크","어류","물결갈기산갈치","O","B","달빛",5,"거대",5,13500,[8],0],[149,"오크","어류","별점고래상어","O","S","전체",3,"거대",5,750,[3,6],0],[150,"오크","어류","파도이빨백상아리","O","M","전체",3,"거대",5,750,[4,7],0],[151,"오크","어류","남빛망치귀상어","O","M","전체",2,"대형",4,300,[0,1,2,3,4],0],[152,"오크","어류","물톱주둥이상어","R","B","안개",5,"대형",3,600,[8],0],[153,"오크","어류","초승꼬리환도상어","C","M","노을",4,"대형",3,525,[2,4,6,7],1],[154,"오크","어류","물방울전기가오리","R","B","전체",3,"대형",2,50,[3,6],0],[155,"오크","어류","서리가시복","R","S","전체",2,"중형",1,20,[0,1,2,3,4],0],[156,"오크","어류","남빛상자고기","C","M","전체",1,"중형",2,35,[0,1,2,3,4,5,6,7,8],0],[157,"오크","어류","물창학공치","R","S","전체",2,"중형",1,20,[3,4,5,6],0],[158,"오크","어류","물날개성대","C","B","전체",2,"중형",2,70,[0,1,2,3,4],0],[159,"오크","어류","방울혹도치","R","M","안개",3,"중형",1,50,[4,7],0],[160,"오크","어류","푸른리본곰치","C","B","전체",3,"대형",3,175,[3,6],0],[161,"오크","갑각·껍질","파도주걱게","C","S","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[162,"오크","갑각·껍질","해면이불게","C","B","전체",2,"소형",2,70,[2,3,4,5],0],[163,"오크","갑각·껍질","서리벙어리참게","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[164,"오크","갑각·껍질","물안경달랑게","C","S","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[165,"오크","갑각·껍질","넓적부채매미새우","C","B","전체",3,"소형",2,175,[4,7],0],[166,"오크","갑각·껍질","물대포권총새우","C","M","전체",2,"소형",2,70,[4,5,6,7],0],[167,"오크","갑각·껍질","남빛꼬부리옆새우","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[168,"오크","갑각·껍질","서리꽃거북손","R","S","안개",2,"대형",2,20,[5,6,7,8],0],[169,"오크","갑각·껍질","물결방앵무조개","O","M","전체",1,"소형",3,150,[0,1,2,3,4,5,6,7,8],0],[170,"오크","갑각·껍질","달배집낙지","O","S","달빛",2,"소형",3,300,[2,3,4,5],0],[171,"오크","갑각·껍질","푸른막대맛조개","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[172,"오크","갑각·껍질","긴목왕우럭조개","C","B","전체",3,"소형",2,175,[5,8],0],[173,"오크","갑각·껍질","서리삿갓조개","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[174,"오크","갑각·껍질","물소용돌이고둥","R","M","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[175,"오크","갑각·껍질","산호뿔소라","C","B","전체",1,"소형",2,35,[0,1,2,3,4,5,6,7,8],0],[176,"오크","갑각·껍질","남빛갑옷군부","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0],[177,"오크","비어류","밤바다범고래","O","S","달빛",4,"거대",5,2250,[2,4,6,7],1],[178,"오크","비어류","네모머리향유고래","O","B","전체",4,"거대",5,3375,[2,4,6,7],1],[179,"오크","비어류","파도날개혹등고래","O","S","전체",2,"거대",5,300,[4,5,6,7],0],[180,"오크","비어류","초승턱북극고래","O","S","안개",2,"거대",5,300,[5,6,7,8],0],[181,"오크","비어류","긴팔대왕오징어","O","B","전체",3,"거대",5,1125,[5,8],0],[182,"오크","비어류","밤망토흡혈오징어","O","B","달빛",1,"대형",4,225,[0,1,2,3,4,5,6,7,8],0],[183,"오크","비어류","방울귀오징어","C","M","전체",1,"대형",3,35,[0,1,2,3,4,5,6,7,8],0],[184,"오크","비어류","비단망토문어","C","M","달빛",4,"대형",3,525,[8],0],[185,"오크","비어류","물줄기등장수거북","O","M","전체",2,"거대",5,300,[1,2,7,8],0],[186,"오크","비어류","파도날개펭귄","C","S","전체",2,"대형",3,70,[5,6,7,8],0],[187,"오크","비어류","물방망이비버","R","S","전체",4,"대형",2,150,[2,4,6,7],1],[188,"오크","비어류","둥실배해달","R","S","전체",3,"대형",2,50,[5,8],0],[189,"오크","비어류","서리날개바다천사","C","M","안개",2,"소형",2,70,[1,2,7,8],0],[190,"오크","비어류","푸른용갯민숭이","O","S","전체",1,"소형",3,150,[0,1,2,3,4,5,6,7,8],0],[191,"오크","비어류","물줄무늬빗해파리","R","M","달빛",2,"소형",1,20,[1,2,7,8],0],[192,"오크","비어류","물방울말미잘","R","B","전체",1,"소형",1,10,[0,1,2,3,4,5,6,7,8],0]].map(t=>{
+ const i=MSi[ySi(t[3])],s=.75+SSi(t[0])%50/100,e=Math.cbrt(s);
+ return{
+ id:t[0],race:t[1],kind:t[2],name:t[3],zone:t[4],depth:t[5],tide:t[6],star:t[7],wclass:t[8],power:t[9],price:t[10],pts:CSi(t[0],t[1],t[4],t[7],t[11]),roam:1===t[12],cm:[i.cm*e,i.cm*e*Math.cbrt(10)],kg:[i.kg*s,i.kg*s*10]}
+ }
+ ),ISi=new Map(OSi.map(t=>[t.id,t]));
+ function kSi(t){
+ const i=ISi.get(t);
+ if(!i)throw new Error(`fish ${
+ t}
+ `);
+ return i}
+ Qt(kSi,"species");
+ const RSi=Qt((t,i,s)=>hAi[`${
+ t}
+ |${
+ pSi[i]}
+ `][s],"pointName"),xSi=63e5,PSi=Qt(t=>Math.floor(t/xSi)%4,"tideAt"),NSi=Qt(t=>xSi-t%xSi,"untilNextTide"),LSi=Qt((t,i)=>{
+ const s=PSi(t);
+ return s===i?0:((i-s+4)%4-1)*xSi+NSi(t)}
+ ,"untilTide"),DSi=Qt(t=>Math.floor(t/864e5),"dayIndex"),GSi=Qt((t,i)=>t.pts[SSi(1e3*t.id+i)%t.pts.length],"roamPoint");
+ function BSi(t,i,s){
+ return t.roam?i===GSi(t,s):t.pts.includes(i)}
+ function USi(t){
+ const i=t.roam||t.star<=1&&t.pts.includes(0)?0:t.pts[0];
+ return{
+ race:t.race,zone:t.zone,point:i,depth:t.depth}
+ }
+ function FSi(t,i,s,e){
+ const n=SSi(131*Math.floor(e/(6*_Si))+17*uSi.indexOf(t)+5*dSi.indexOf(i)+s),h="R"===i?180:"C"===i?110:60,r=.45+n%1e3/1e3;
+ return Math.max(2,Math.round(h*r*(.8+(n>>>10)%400/1e3)))}
+ function $Si(t){
+ return t.star<=2?"":t.roam?"회유":"명물"}
+ function HSi(t){
+ if(1===t.star)return t.pts.includes(0)?"이 지역 어디서나 · 옆 깊이와 이웃 지역에서도 가끔":`${
+ RSi(t.race,t.zone,t.pts[0])}
+ 부터 · 옆 깊이와 이웃 지역에서도 가끔`;
+ if(t.roam)return`회유어 · ${
+ t.pts.length}
+ 곳을 날마다 옮겨 다녀요`;
+ const i=t.pts.map(i=>RSi(t.race,t.zone,i)),s=i.length<=2?i.join(" · "):`${
+ i.slice(0,2).join(" · ")}
+  외 ${
+ i.length-2}
+ 곳`;
+ return 2===t.star&&"전체"!==t.tide?`${
+ s}
+  · ${
+ t.tide}
+  물때`:s}
+ Qt(BSi,"livesAt"),Qt(USi,"homeSpot"),Qt(FSi,"anglersAt"),Qt($Si,"tagText"),Qt(HSi,"whereText");
+ const WSi=[{
+ key:"boat",title:"배",names:["통나무 뗏목","나무 쪽배","채색 쪽배","놋쇠 장식 배","철갑 어선","백조 머리 배","황금 용머리 배"],effects:[0,1,2,3,4,5,6].map(Qt(t=>[`내구도 ${
+ DAi.MAX_HP[t]}
+  · 튼튼함 ${
+ DAi.ARMOR[t]}
+  · 장비 ★${
+ t+1}
+ 까지`,t>0&&t===DAi.ENTRY.C?"연안 갈 수 있음":"",t>0&&t===DAi.ENTRY.O?"대양 갈 수 있음":""].filter(Boolean).join(" · "),"boatEffect")),prices:[0,1500,6e3,2e4,6e4,15e4,5e5]}
+ ,{
+ key:"line",title:"낚싯줄",names:["삼베 줄","비단 줄","거미 비단 줄","미스릴 줄","용 힘줄"],effects:["힘 1까지 버팀","힘 2까지","힘 3까지","힘 4까지","힘 5까지 (고래도)"],prices:[0,1500,1e4,3e4,15e4]}
+ ,{
+ key:"rod",title:"낚싯대",names:["버들가지 대","대나무 대","물푸레 대","룬 새김 대","명인의 대"],effects:["큰 개체 재굴림 0%","5%","12%","20%","30%"],prices:[0,800,6e3,3e4,12e4]}
+ ,{
+ key:"reel",title:"얼레",names:["나무 얼레","청동 얼레","강철 얼레","드워프 얼레","마법 얼레"],effects:["입질 ×1","×1.15","×1.3","×1.4","×1.5 · 심해 입장"],prices:[0,1e3,8e3,4e4,2e5]}
+ ,{
+ key:"bobber",title:"찌",names:["깃털 찌","코르크 찌","반딧불 찌","황금 찌"],effects:["★3 이상 ×1","×1.3","×1.6","×2"],prices:[0,2e3,15e3,9e4]}
+ ,{
+ key:"icebox",title:"어망",names:["삼베 어망","그물 어망","드워프 어망","마법 어망"],effects:["40마리","60마리","90마리","120마리"],prices:[0,2500,18e3,9e4]}
+ ,{
+ key:"auto",title:"자동 낚싯대",names:["없음","자동 받침대","자동 얼레 받침대","명인의 자동대"],effects:["켜 두면 입질 2번에 1마리 · 꺼 두면 5번에 1마리","꺼 둔 동안 4번에 1마리","꺼 둔 동안 3번에 1마리","꺼 둔 동안 2번에 1마리"],prices:[0,5e3,4e4,15e4]}
+ ],VSi=[1,1.15,1.3,1.4,1.5],jSi=[0,.05,.12,.2,.3],KSi=[1,1.3,1.6,2],zSi=[40,60,90,120],YSi=Qt(t=>VSi[t.reel],"reelSpeed"),qSi=Qt((t,i=0)=>zSi[t.icebox]+Math.max(0,Math.round(i)),"iceboxCap"),XSi=Qt(t=>t.line+1,"lineLimit"),JSi={
+ R:[1,1,1,2,2,3,3,3,3],C:[3,3,3,4,4,5,5,5,5],O:[5,5,5,6,6,7,7,7,7]}
+ ,QSi=Qt(t=>JSi[t.zone][Math.min(JSi[t.zone].length-1,Math.max(0,t.point))],"spotLevel"),ZSi=Qt((t,i)=>1===QSi(i)?Math.max(1,t.power-1):t.power,"fishPower");
+ function tTi(t,i){
+ return"C"===i.zone&&t.boat<0?"채색 쪽배 이상이 필요해요":"O"===i.zone&&t.boat<0?"백조 머리 배 이상이 필요해요":"O"===i.zone&&"B"===i.depth&&t.reel<4?"심해는 마법 얼레가 필요해요":null}
+ Qt(tTi,"accessProblem");
+ const iTi={
+ 1:100,2:40,3:12,4:6,5:2.5}
+ ,sTi={
+ R:["C"],C:["R","O"],O:["C"]}
+ ,eTi={
+ S:["M"],M:["S","B"],B:["M"]}
+ ,nTi=Qt(t=>1===QSi(t)&&TSi[t.race].some(i=>{
+ var s;
+ return(null==(s=ISi.get(i))?void 0:s.depth)===t.depth}
+ ),"startDepthOwned");
+ function hTi(t,i,s,e){
+ if(t.race!==i.race)return 0;
+ let n,h;
+ if(t.zone===i.zone)n=1;
+ else{
+ if(!(1===t.star&&sTi[t.zone].includes(i.zone)&&QSi(i)>1))return 0;
+ n=.3}
+ if(t.depth===i.depth)h=1;
+ else{
+ if(!(t.star<=2&&1===n&&eTi[t.depth].includes(i.depth))||nTi(i))return 0;
+ h=1===t.star?.5:.3}
+ return t.star>=2&&"전체"!==t.tide&&t.tide!==s?0:1!==n||BSi(t,i.point,e)?n*h*(1===t.star||"전체"===t.tide?1:t.star>=3?2:1.5):0}
+ function rTi(t,i,s,e){
+ return OSi.filter(n=>n.race===t&&(n.zone===i?BSi(n,s,e):1===n.star&&sTi[n.zone].includes(i)&&QSi({
+ zone:i,point:s}
+ )>1))}
+ function oTi(t,i,s,e,n=0){
+ const h=wSi[PSi(i)],r=DSi(i),o=e&&e.until>i?e.kind:null,a=[];
+ for(const c of OSi){
+ const i=hTi(c,t,h,r);
+ if(i<=0)continue;
+ let e=iTi[c.star]*i;
+ c.star>=3&&(e*=KSi[s.bobber]*(1+Math.max(0,n)/100)),o&&o===c.kind&&(e*=2),a.push({
+ s:c,w:e}
+ )}
+ return a}
+ Qt(hTi,"spawnFactor"),Qt(rTi,"speciesAtPoint"),Qt(oTi,"poolAt");
+ const aTi=["C","B","A","S"],cTi=["","대","특대","왕"],lTi=[1,1.5,3,10],uTi=Qt(t=>t>=.99?3:t>=.92?2:t>=.7?1:0,"gradeOf"),dTi=Qt(t=>cTi[t]??"","gradeName"),fTi=Qt(t=>t>=1?` (${
+ cTi[t]}
+ )`:"","gradeSuffix"),pTi=Qt((t,i,s)=>1e4*t+1e3*i+Math.round(999*s),"starScore");
+ function gTi(t,i,s,e,n=Math.random){
+ const h=oTi(t,i,s,e);
+ if(!h.length)return null;
+ const r=h.reduce((t,i)=>t+i.w,0);
+ let o=n()*r,a=h[0].s;
+ for(const p of h)if(o-=p.w,o<=0){
+ a=p.s;
+ break}
+ const c=ZSi(a,t)-XSi(s),l=c>=1&&n()<(1===c?.5:.9);
+ let u=n();
+ n()<jSi[s.rod]&&(u=Math.max(u,n()));
+ const{
+ kg:d,cm:f}
+ =ASi(a,u);
+ return{
+ id:a.id,star:a.star,grade:uTi(u),r:u,kg:d,cm:f,at:i,race:t.race,zone:t.zone,point:t.point,tide:PSi(i),broken:l}
+ }
+ Qt(gTi,"rollCatch");
+ const wTi={
+ R:10,C:35,O:150}
+ ,mTi={
+ 1:1,2:2,3:5,4:15,5:60}
+ ;
+ function vTi(t,i,s=.5){
+ const e=kSi(t),n="O"===e.zone&&"B"===e.depth?1.5:1;
+ return Math.round(wTi[e.zone]*mTi[e.star]*n*(.8+.7*s)*lTi[i])}
+ Qt(vTi,"unitPrice");
+ const _Ti=Qt(t=>t>=1e3?`${
+ (t/1e3).toFixed(2)}
+ t`:t>=10?`${
+ t.toFixed(1)}
+ kg`:t>=.1?`${
+ t.toFixed(2)}
+ kg`:`${
+ Math.max(1,Math.round(1e3*t))}
+ g`,"formatKg"),MTi=Qt(t=>"★".repeat(Math.max(0,t)),"starText"),bTi=[{
+ day:1,title:"월척",kind:"big",speciesId:3,desc:"잿꽃꼬리베타 최대 무게 · 은빛강"}
+ ,{
+ day:2,title:"다어",kind:"count",desc:"어디서나 잡은 마릿수"}
+ ,{
+ day:3,title:"명물 월척",kind:"big",speciesId:132,desc:"창백동굴도롱뇽 최대 무게 · 잿빛강 어딘가 · 안개 물때"}
+ ,{
+ day:4,title:"분류전",kind:"class",kindClass:"갑각·껍질",desc:"갑각·껍질류 마릿수 · 어디서나"}
+ ,{
+ day:5,title:"대어 사냥",kind:"star",desc:"가장 높은 별 한 마리 (같으면 종 대비 크기)"}
+ ,{
+ day:6,title:"명물 월척",kind:"big",speciesId:6,desc:"불갈기해마 최대 무게 · 노을만 어딘가"}
+ ,{
+ day:7,title:"도감전",kind:"dex",desc:"대회 동안 잡은 서로 다른 종 수"}
+ ,{
+ day:8,title:"달빛 대물전",kind:"tidePct",tide:2,desc:"달빛 물때에 잡은 한 마리 · 종 대비 크기"}
+ ,{
+ day:9,title:"회유어 월척",kind:"big",speciesId:131,desc:"뼈등가비알 최대 무게 · 오늘은 어느 포인트?"}
+ ,{
+ day:10,title:"낚시왕 결승",kind:"pct",desc:"어디서나 종 대비 가장 큰 한 마리"}
+ ],yTi=Qt(t=>bTi[(Math.max(1,Math.floor(t))-1)%10],"contestFor"),ETi=Qt(t=>"big"===t.kind||"star"===t.kind||"tidePct"===t.kind||"pct"===t.kind,"contestIsMax");
+ function ATi(t,i){
+ if(i<=0)return"-";
+ switch(t.kind){
+ case"big":return _Ti(i);
+ case"count":case"class":return`${
+ Math.round(i)}
+ 마리`;
+ case"dex":return`${
+ Math.round(i)}
+ 종`;
+ case"star":{
+ const t=cTi[Math.floor(i/1e3)%10];
+ return`★${
+ Math.floor(i/1e4)}
+ ${
+ t?` ${
+ t}
+ `:""}
+  · ${
+ (i%1e3/10).toFixed(1)}
+ %`}
+ case"tidePct":case"pct":return`${
+ (100*i).toFixed(1)}
+ %`}
+ }
+ function STi(t,i=30){
+ return 1===t?5:2===t?3.5:3===t?2.5:2-1.5*(t-4)/Math.max(1,i-4)}
+ Qt(ATi,"formatContestScore"),Qt(STi,"rankMult");
+ const TTi=Qt(t=>t<=1?700:t<=4?2e3:t<=7?1e4:4e4,"contestBaseGold"),CTi=Qt(t=>1===t?1200:2===t?720:3===t?480:t<=10?240:80,"pearlByRank");
+ function OTi(t,i,s,e){
+ const n=Math.min(1,Math.pow(Math.max(0,e),s));
+ if("star"===t.kind){
+ if(n<=.15)return 0;
+ const t=i%1e3/999*(.75+.25*n);
+ return pTi(Math.floor(i/1e4),uTi(t),t)}
+ return ETi(t)?n>.15?i*(.75+.25*n):0:Math.round(i*n)}
+ function ITi(t){
+ return OSi.filter(i=>"R"===i.zone||"C"===i.zone&&t.boat>=0||"O"===i.zone&&t.boat>=0&&("B"!==i.depth||t.reel>=4))}
+ function kTi(t,i,s){
+ let e=SSi(7919*t);
+ const n=Qt(()=>(e=SSi(e+1831565813),e/4294967296),"rnd"),h=ITi(i),r=Qt(t=>t[Math.floor(n()*t.length)]??h[0],"pick"),o=r(h.filter(t=>1===t.star)),a=r(h.filter(t=>t.star<=2&&"전체"===t.tide)),c=h.filter(t=>t.star>=2&&t.star<=3&&!s.has(t.id)),l=r(c.length?c:h.filter(t=>3===t.star)),u=Qt(t=>"O"===t.zone?8:"C"===t.zone?3:1,"zoneGold");
+ return[{
+ key:`${
+ t}
+ :m`,npc:"마르타",role:"시장 상인",line:`"${
+ o.name}
+  좀 넉넉히 가져와 줘요!"`,speciesId:o.id,count:5,minGrade:0,gold:250*u(o),pearl:0}
+ ,{
+ key:`${
+ t}
+ :b`,npc:"브루노",role:"요리사",line:'"오늘 요리엔 큰 놈이 필요하네."',speciesId:a.id,count:2,minGrade:2,gold:900*u(a),pearl:95}
+ ,{
+ key:`${
+ t}
+ :e`,npc:"엘리안",role:"학자",line:`"${
+ vSi[`${
+ l.race}
+ |${
+ l.zone}
+ `]}
+ 의 ${
+ l.name}
+ 를 연구하고 싶군요."`,speciesId:l.id,count:1,minGrade:0,gold:600*u(l),pearl:255}
+ ]}
+ Qt(OTi,"botShown"),Qt(ITi,"reachableSpecies"),Qt(kTi,"visitorsFor");
+ const RTi=Qt(t=>Math.floor(t/(6*_Si)),"questWindow"),xTi=Qt((t,i,s)=>27*uSi.indexOf(t)+9*dSi.indexOf(i)+s,"areaIndex"),PTi=Qt((t,i,s)=>OSi.filter(e=>e.race===t&&e.zone===i&&!e.roam&&e.pts.includes(s)),"areaSpecies"),NTi=Qt((t,i)=>20*QSi({
+ zone:t,point:i}
+ ),"areaPearl"),LTi=[{
+ need:10,pearl:220}
+ ,{
+ need:25,pearl:440}
+ ,{
+ need:50,pearl:660}
+ ,{
+ need:75,pearl:880}
+ ,{
+ need:100,pearl:1320}
+ ,{
+ need:150,pearl:1760}
+ ,{
+ need:192,pearl:3300}
+ ],DTi=[{
+ need:1e4,pearl:250}
+ ,{
+ need:5e4,pearl:500}
+ ,{
+ need:2e5,pearl:750}
+ ,{
+ need:5e5,pearl:1e3}
+ ,{
+ need:1e6,pearl:1500}
+ ,{
+ need:2e6,pearl:2500}
+ ],GTi=[{
+ need:1,pearl:325}
+ ,{
+ need:5,pearl:650}
+ ,{
+ need:15,pearl:1300}
+ ,{
+ need:30,pearl:1950}
+ ,{
+ need:60,pearl:3250}
+ ,{
+ need:100,pearl:5200}
+ ],BTi=[],UTi=Qt(t=>Math.floor(t/864e5),"utcDay"),FTi=Qt(t=>Number.isInteger(t)&&t>=1&&t<=30?31-t:0,"rankPearl"),$Ti=Qt(t=>-Math.cos(t/1e3*3.4+.6*Math.sin(t/1700)),"socialGaugeValue"),HTi=class{
+ static runId(){
+ return this.run}
+ static user(){
+ return EG.userId||"guest"}
+ static setRun(t){
+ if(!t||t===this.run)return;
+ const i=0===this.run,s=this.user();
+ this.saveTimer&&(clearTimeout(this.saveTimer),this.saveTimer=null),this.maps.clear(),this.dirty.clear(),this.foundCache.clear(),this.run=t;
+ try{
+ if(i)for(const i of Object.keys(localStorage)){
+ const e=/^fishing:(fog|spots):v1:([^:]+):(.+)$/.exec(i);
+ if(!e||e[2]!==s)continue;
+ const n=`fishing:${
+ e[1]}
+ :v2:${
+ s}
+ :${
+ t}
+ :${
+ e[3]}
+ `,h=localStorage.getItem(i);
+ null!==h&&null===localStorage.getItem(n)&&localStorage.setItem(n,h),localStorage.removeItem(i)}
+ const e=`:${
+ s}
+ :${
+ t}
+ :`;
+ for(const t of Object.keys(localStorage))!t.startsWith(`fishing:fog:v2:${
+ s}
+ :`)&&!t.startsWith(`fishing:spots:v2:${
+ s}
+ :`)||t.includes(e)||localStorage.removeItem(t)}
+ catch{
+ }
+ }
+ static storeKey(t,i){
+ let s=2166136261;
+ for(let e=0;
+ e<i.length;
+ e++)s^=i.charCodeAt(e),s=Math.imul(s,16777619);
+ return`fishing:fog:v2:${
+ this.user()}
+ :${
+ this.run}
+ :${
+ t}
+ :${
+ (s>>>0).toString(36)}
+ `}
+ static bits(t,i){
+ let s=this.maps.get(t);
+ if(s)return s;
+ s=new Uint8Array(i+7>>3);
+ try{
+ const i=localStorage.getItem(t);
+ if(i){
+ const t=atob(i);
+ if(t.length===s.length)for(let i=0;
+ i<t.length;
+ i++)s[i]=t.charCodeAt(i)}
+ }
+ catch{
+ }
+ return this.maps.set(t,s),s}
+ static has(t,i){
+ return 1==(t[i>>3]>>(7&i)&1)}
+ static set(t,i){
+ t[i>>3]|=1<<(7&i)}
+ static pointKnown(t,i,s=-1){
+ if(0===i||i===s)return!0;
+ const e=nAi.topdownInfo(t);
+ if(!e.verts||!e.tile)return!0;
+ const n=e.points[i];
+ if(!n)return!1;
+ if(this.found(t)>>i&1)return!0;
+ const h=this.bits(this.storeKey(t,e.verts),e.cols*e.rows);
+ return this.has(h,Math.floor(n.y/e.tile)*e.cols+Math.floor(n.x/e.tile))}
+ static foundKey(t){
+ const i=nAi.topdownInfo(t);
+ return this.storeKey(t,i.verts??"").replace("fishing:fog:v2:","fishing:spots:v2:")}
+ static found(t){
+ const i=this.foundKey(t);
+ let s=this.foundCache.get(i);
+ if(void 0===s){
+ s=0;
+ try{
+ s=Number(localStorage.getItem(i))||0}
+ catch{
+ }
+ this.foundCache.set(i,s)}
+ return s}
+ static markFound(t,i){
+ const s=this.foundKey(t),e=this.found(t);
+ if(e>>i&1)return!1;
+ const n=e|1<<i;
+ this.foundCache.set(s,n);
+ try{
+ localStorage.setItem(s,String(n))}
+ catch{
+ }
+ return!0}
+ static markDirty(t){
+ this.dirty.add(t),this.saveTimer??(this.saveTimer=setTimeout(()=>this.flush(),2e3))}
+ static flush(){
+ this.saveTimer=null;
+ for(const t of this.dirty){
+ const i=this.maps.get(t);
+ if(i)try{
+ localStorage.setItem(t,btoa(String.fromCharCode(...i)))}
+ catch{
+ }
+ }
+ this.dirty.clear()}
+ }
+ ;
+ Qt(HTi,"FishingFog"),Zt(HTi,"maps",new Map),Zt(HTi,"dirty",new Set),Zt(HTi,"saveTimer",null),Zt(HTi,"run",0),Zt(HTi,"foundCache",new Map);
+ let WTi=HTi;
+ function VTi(t,i,s,e,n=[]){
+ let h=t.k,r=t.nextAt,o=t.castAt;
+ for(let a=0;
+ a<400&&r+rAi<=e;
+ a++){
+ const e=n.includes(h)?3500:0;
+ o=r,h++,r+=cAi(t.seed,h,i,s)+e}
+ return{
+ k:h,at:r,prevAt:o}
+ }
+ function jTi(t,i,s,e){
+ if(s>=t.at&&s<t.at+rAi)return t.k===e?null:{
+ k:t.k}
+ ;
+ const n=t.k-1;
+ return n>=i&&s>=t.prevAt&&s<t.prevAt+rAi+2e3&&n!==e?{
+ k:n}
+ :null}
+ function KTi(t){
+ let i=(t%4294967296^1540483477)>>>0;
+ return()=>(i=Math.imul(i,1664525)+1013904223>>>0,i>>>24)}
+ Qt(VTi,"currentBite"),Qt(jTi,"hookTarget"),Qt(KTi,"stream");
+ const zTi=Qt(t=>"function"==typeof atob?atob(t):Buffer.from(t,"base64").toString("latin1"),"fromB64");
+ function YTi(t,i){
+ if("string"!=typeof t||!t)return null;
+ try{
+ const s=zTi(t),e=KTi(i);
+ let n="";
+ for(let t=0;
+ t<s.length;
+ t++)n+=String.fromCharCode(s.charCodeAt(t)^e());
+ if("~"!==n[0])return null;
+ const h=JSON.parse(n.slice(1));
+ if(!Number.isInteger(h.k)||!Array.isArray(h.f))return null;
+ const r=h.f.map(t=>Array.isArray(t)&&7===t.length?{
+ id:t[0],star:t[1],grade:t[2],r:t[3],kg:t[4],cm:t[5],broken:1===t[6]}
+ :null);
+ return{
+ k0:h.k,fish:r}
+ }
+ catch{
+ return null}
+ }
+ Qt(YTi,"decodeTicket");
+ const qTi=!1,XTi={
+ "인간":{
+ race:"인간",river:"은빛강",npcs:[{
+ id:"ben",name:"벤 선장",role:"나룻배 선장",anchor:0,art:4,ship:!0}
+ ,{
+ id:"berta",name:"베르타 할머니",role:"절임 가게",anchor:1,art:1}
+ ,{
+ id:"toto",name:"토토",role:"물고기 관찰꾼",anchor:5,art:2}
+ ,{
+ id:"hans",name:"한스",role:"강가 식당",anchor:8,art:0}
+ ],steps:[{
+ npc:"ben",title:"첫 손맛",line:"자, 이제 실전일세! 내 배 옆에서 아무 물고기나 세 마리만 낚아 보게.",done:"허허, 손맛이 제법이구먼!",kind:"any",count:3,gold:200,pearl:0}
+ ,{
+ npc:"ben",title:"바닥의 메기",line:"메기는 바닥에 붙어 산다네. 깊이를 바닥으로 두고 두 마리만 부탁하네.",done:"통통하구먼! 선원들 저녁거리로 딱이야.",kind:"fish",id:12,count:2,gold:300,pearl:70}
+ ,{
+ npc:"ben",to:"berta",title:"절임 가게 할머니",line:"아래쪽 버들 샛강에 베르타 할머니 절임 가게가 있다네. 일손이 필요하시대.",done:"벤 선장이 보냈다고? 마침 잘 왔구나.",kind:"meet",count:0,gold:200,pearl:70}
+ ,{
+ npc:"berta",title:"게장 담그기",line:"게장 담글 벙어리게가 모자라. 바닥에서 세 마리만 잡아다 주렴.",done:"옳지, 살이 꽉 찼구나.",kind:"fish",id:18,count:3,gold:400,pearl:70}
+ ,{
+ npc:"berta",title:"꼬리 고운 베타",line:"잿꽃꼬리베타는 물 위쪽에서 논단다. 깊이를 수면으로 바꿔 보렴.",done:"꼬리가 참 곱기도 하지.",kind:"fish",id:3,count:2,gold:600,pearl:105}
+ ,{
+ npc:"berta",title:"도롱뇽 한 마리",line:"불꽃아가미도롱뇽은 중층에 사는데, 이 근처 몇 군데에서만 보인단다.",done:"이걸로 약술을 담가야겠다.",kind:"fish",id:36,count:1,gold:700,pearl:105}
+ ,{
+ npc:"berta",to:"toto",title:"물레방아 아이",line:"강 아래 물레방아 쪽에 토토라는 아이가 물고기를 살핀다더구나. 가서 도와주렴.",done:"할머니가요? 와, 반가워요!",kind:"meet",count:0,gold:200,pearl:70}
+ ,{
+ npc:"toto",title:"들꽃 실개천",line:"동쪽 들꽃 실개천에 가 봤어요? 거기서 낚시를 한 번 해 보고 와요!",done:"거기 물 맑죠? 저도 가 보고 싶어요.",kind:"visit",point:3,count:1,gold:300,pearl:105}
+ ,{
+ npc:"toto",title:"햇살 가오리",line:"햇살원반가오리는 낮에만 물 위쪽으로 올라와요. 한 마리만 보여 줄래요?",done:"우와, 진짜 원반 같아요!",kind:"fish",id:13,count:1,gold:1200,pearl:210}
+ ,{
+ npc:"toto",title:"저녁 장어",line:"용암띠장어는 저녁에 중층으로 나와요. 두 마리만 부탁해요!",done:"무늬가 전부 달라요! 그림으로 남겨야지.",kind:"fish",id:9,count:2,gold:900,pearl:140}
+ ,{
+ npc:"toto",to:"hans",title:"강가 식당",line:"하류 식당 한스 아저씨가 물고기를 찾는대요. 아저씨한테 가 봐요!",done:"토토 녀석이 보냈군. 배고프지?",kind:"meet",count:0,gold:200,pearl:70}
+ ,{
+ npc:"hans",title:"새우 튀김",line:"오늘 메뉴는 새우 튀김이야. 대장간권총새우 세 마리, 중층이다.",done:"딱 좋아! 튀김옷을 입혀 볼까.",kind:"fish",id:21,count:3,gold:1e3,pearl:140}
+ ,{
+ npc:"hans",title:"진주조개",line:"하류 바닥에 불씨진주조개가 있지. 하나만 구해 와.",done:"껍데기 속이 반짝이는구먼.",kind:"fish",id:26,count:1,gold:1500,pearl:280}
+ ,{
+ npc:"hans",title:"은빛강의 주인",line:"마지막 부탁이야. 저녁 무렵 하류 바닥에 숯등철갑상어가 나온다더군.",done:"해냈구나! 이제 은빛강에서 너를 모르는 사람은 없을 거다.",kind:"fish",id:10,count:1,gold:5e3,pearl:1050}
+ ]}
+ ,"엘프":{
+ race:"엘프",river:"이끼강",npcs:[{
+ id:"lilien",name:"릴리엔 선장",role:"연잎배 선장",anchor:0,art:16,ship:!0}
+ ,{
+ id:"ria",name:"리아",role:"연못 정원사",anchor:1,art:13}
+ ,{
+ id:"silven",name:"실벤",role:"수상생물 사서",anchor:5,art:14}
+ ,{
+ id:"pipi",name:"피피",role:"숲속 소풍대장",anchor:8,art:15}
+ ],steps:[{
+ npc:"lilien",title:"강의 결",line:"이제 혼자 해 볼 차례예요. 내 배 곁에서 강의 결부터 느껴 봐요. 아무 물고기나 세 마리.",done:"좋아요, 손이 강을 아네요.",kind:"any",count:3,gold:300,pearl:0}
+ ,{
+ npc:"lilien",title:"뿌리수염메기",line:"수염이 뿌리인지 뿌리가 수염인지… 바닥에서 뿌리수염메기 두 마리만 데려와 줘요.",done:"역시 뿌리였어요! 아니, 수염인가?",kind:"fish",id:52,count:2,gold:400,pearl:30}
+ ,{
+ npc:"lilien",to:"ria",title:"연못 정원사",line:"고사리 너른 못에 리아라는 정원사가 있어요. 일손이 필요하대요.",done:"릴리엔 선장님이요? 마침 잘 왔어요!",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"ria",title:"비늘 씨앗",line:"씨앗비늘잉어 비늘을 정원에 심어 볼래요. 중층에서 세 마리만!",done:"비늘에서 싹이 나면 꼭 보여 줄게요.",kind:"fish",id:63,count:3,gold:500,pearl:30}
+ ,{
+ npc:"ria",title:"연꽃 꼬리",line:"연꽃꼬리베타는 물 위쪽에서 놀아요. 깊이를 수면으로 바꿔 봐요.",done:"꼬리가 진짜 연꽃잎 같아요!",kind:"fish",id:49,count:2,gold:700,pearl:40}
+ ,{
+ npc:"ria",to:"silven",title:"물고기 사서",line:"버섯 물길의 사서 실벤이 물고기 기록을 모은대요. 가 보세요.",done:"리아가 보냈군요. 기록할 게 많아요.",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"silven",title:"빈 기록",line:"꽃잎 실개천의 물고기는 아직 기록이 비어 있어요. 거기서 낚시를 해 봐 주세요.",done:"덕분에 빈칸 하나가 채워졌어요.",kind:"visit",point:4,count:1,gold:400,pearl:30}
+ ,{
+ npc:"silven",title:"씨앗 진주",line:"씨앗진주조개는 꽃잎 실개천이나 달빛 샛강 바닥에 있어요. 하나만 부탁해요.",done:"진주 속에 씨앗이… 정말 있군요!",kind:"fish",id:74,count:1,gold:1200,pearl:60}
+ ,{
+ npc:"silven",to:"pipi",title:"소풍 준비",line:"이끼강 하류의 피피가 소풍을 준비한대요. 도와주세요.",done:"와, 손님이다! 소풍에 같이 가요!",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"pipi",title:"이끼강의 주인",line:"이끼강의 주인 솔방울철갑상어를 보고 싶어요! 안개 낀 하류 바닥에 산대요.",done:"해냈다! 이제 이끼강에서 모르는 사람이 없을 거예요!",kind:"fish",id:57,count:1,gold:5e3,pearl:350}
+ ]}
+ ,"언데드":{
+ race:"언데드",river:"잿빛강",npcs:[{
+ id:"charon",name:"카론 선장",role:"해골 나룻배 선장",anchor:0,art:28,ship:!0}
+ ,{
+ id:"mora",name:"모라 할머니",role:"유령 재봉 할머니",anchor:1,art:25}
+ ,{
+ id:"mumu",name:"무무",role:"미라 행상인",anchor:5,art:26}
+ ,{
+ id:"luna",name:"루나",role:"해골 생태학자",anchor:8,art:27}
+ ],steps:[{
+ npc:"charon",title:"산 손님",line:"이제 혼자 해 보게, 산 손님! 손부터 풀어 보게. 아무거나 세 마리.",done:"좋아, 산 사람 손은 역시 빠르군!",kind:"any",count:3,gold:300,pearl:0}
+ ,{
+ npc:"charon",title:"숯뼈가재 국물",line:"배에서 끓일 국물엔 숯뼈가재가 제격이지. 바닥에서 두 마리 부탁하네.",done:"이 향이야… 맛은 못 보지만!",kind:"fish",id:119,count:2,gold:400,pearl:30}
+ ,{
+ npc:"charon",to:"mora",title:"바느질감",line:"마른 갈대 굽이의 모라 할머니가 바느질감을 찾으셔.",done:"카론이 보냈니? 어서 오렴.",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"mora",title:"고둥 단추",line:"고둥 껍데기로 단추를 달 거란다. 중층에서 유령관고둥 세 개만.",done:"단추가 반짝이니 망토가 사는구나.",kind:"fish",id:126,count:3,gold:500,pearl:30}
+ ,{
+ npc:"mora",title:"줄무늬 수",line:"뼈줄무늬가아 무늬를 따라 수를 놓고 싶구나. 물 위쪽이란다.",done:"무늬가 참 곱기도 하지.",kind:"fish",id:97,count:2,gold:700,pearl:40}
+ ,{
+ npc:"mora",to:"mumu",title:"수상한 행상인",line:"부엉이 소에 무무라는 행상인이 있단다. 뭐든 산다더구나.",done:"손님! 좋은 물건 있으면 보여 줘!",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"mumu",title:"가라앉은 물건",line:"가시 너른 못에 좋은 게 가라앉아 있대. 거기서 낚시 좀 해 봐.",done:"역시 그 못이야! 내 감이 맞았어.",kind:"visit",point:3,count:1,gold:400,pearl:30}
+ ,{
+ npc:"mumu",title:"비밀 거래",line:"해골무늬가오리! 가시 너른 못이나 검은 물길 바닥에 있어. 비싸게 쳐 줄게, 쉿.",done:"쉿, 다른 상인한테는 비밀이야.",kind:"fish",id:111,count:1,gold:1200,pearl:60}
+ ,{
+ npc:"mumu",to:"luna",title:"오래된 생물",line:"잿빛강 하류의 루나가 오래된 생물을 연구한대.",done:"새 조수님이군요! 반가워요.",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"luna",title:"잿빛강의 선배",line:"나보다 오래 산 물고기가 하류 바닥에 있대요. 새벽 안개가 낄 때만 나온대요!",done:"선배님을 만났어요! 잿빛강이 당신을 기억할 거예요.",kind:"fish",id:110,count:1,gold:5e3,pearl:350}
+ ]}
+ ,"오크":{
+ race:"오크",river:"서리강",npcs:[{
+ id:"borkan",name:"보르칸 선장",role:"원양선 선장",anchor:0,art:36,ship:!0}
+ ,{
+ id:"gruma",name:"그루마 할머니",role:"왕년의 낚시왕",anchor:1,art:37}
+ ,{
+ id:"udong",name:"우동",role:"국수 장인",anchor:5,art:38}
+ ,{
+ id:"krara",name:"크라라",role:"꼬마 게 동호회장",anchor:7,art:39}
+ ],steps:[{
+ npc:"borkan",title:"꼬마 선원",line:"이제 실전이다, 꼬마 선원! 내 배 옆에서 손부터 풀어라. 아무거나 세 마리.",done:"제법인데! 배에 태워 줄 만하군.",kind:"any",count:3,gold:300,pearl:0}
+ ,{
+ npc:"borkan",title:"선원 밥",line:"선원 밥으로 서리벙어리참게가 필요하다. 바닥에서 두 마리!",done:"오늘 저녁은 게찜이다!",kind:"fish",id:163,count:2,gold:400,pearl:30}
+ ,{
+ npc:"borkan",to:"gruma",title:"왕년의 낚시왕",line:"얼음 샛강의 그루마 할머니는 왕년의 낚시왕이시다. 인사드려라.",done:"보르칸 그 꼬맹이가 보냈다고?",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"gruma",title:"낚싯대 장식",line:"내 낚싯대에 달 장식이 필요해. 물소용돌이고둥 세 개, 중층이야.",done:"그래, 이 소리야. 손맛이 난다.",kind:"fish",id:174,count:3,gold:500,pearl:30}
+ ,{
+ npc:"gruma",title:"가시복 백 마리",line:"가시복은 물 위쪽에서 잡는 거야. 내 젊을 땐 하루에 백 마리였지.",done:"흠, 나쁘지 않아. 낚시왕 될 상이야.",kind:"fish",id:155,count:2,gold:700,pearl:40}
+ ,{
+ npc:"gruma",to:"udong",title:"국수 국물",line:"흰 소의 우동이 국수 국물 재료를 찾는다더라.",done:"할머니 손님이면 국수 곱빼기!",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"udong",title:"국물 맛 물",line:"늑대 실개천 물이 국물 맛을 낸대. 거기서 낚시 좀 해 줘.",done:"이 물 냄새, 국물 맛이 나는데?",kind:"visit",point:3,count:1,gold:400,pearl:30}
+ ,{
+ npc:"udong",title:"찌릿한 국물",line:"찌릿한 국물을 만들 거야! 물방울전기가오리는 늑대 실개천이나 바위 샛강 바닥에 있어.",done:"찌릿찌릿! 신메뉴 완성이다!",kind:"fish",id:154,count:1,gold:1200,pearl:60}
+ ,{
+ npc:"udong",to:"krara",title:"게 동호회",line:"얼음꽃 웅덩이의 크라라가 게 동호회를 한대. 가 봐!",done:"새 회원이다! 환영해!",kind:"meet",count:0,gold:200,pearl:20}
+ ,{
+ npc:"krara",title:"서리강의 톱",line:"하류 바닥에 톱 같은 주둥이 상어가 산대! 새벽 안개가 낄 때만 나온대!",done:"우와, 진짜 톱이야! 서리강 최고 낚시꾼!",kind:"fish",id:152,count:1,gold:5e3,pearl:350}
+ ]}
+ }
+ ,JTi=[[15,5],[10,4],[5,3],[3,2]],QTi=Qt(t=>{
+ var i;
+ return(null==(i=JTi.find(([i])=>t.done.length>=i))?void 0:i[1])??1}
+ ,"questHoldMax"),ZTi=Qt((t,i)=>({
+ id:`teach:${
+ t}
+ `,npc:"",teach:!0,...i}
+ ),"T"),tCi={
+ sell:ZTi("sell",{
+ title:"어망 비우기",line:"잡은 물고기는 팔아서 골드로 바꿔요. 200골드어치만 팔아 봐요.",done:"두둑하네요! 그 골드로 장비를 손볼 수 있어요.",kind:"sell",count:200,gold:300,pearl:0}
+ ),line1:ZTi("line1",{
+ title:"튼튼한 줄",line:"삼베 줄은 힘센 물고기를 못 버텨요. 장비에서 낚싯줄을 비단 줄로 바꿔 봐요.",done:"이제 힘 2짜리도 끄떡없어요.",kind:"gear",gear:"line",level:1,count:1,gold:0,pearl:50}
+ ),rod1:ZTi("rod1",{
+ title:"대나무 대",line:"장비에서 낚싯대를 대나무 대로 바꿔 봐요. 큰 물고기가 더 잘 나와요.",done:"손에 착 붙네요.",kind:"gear",gear:"rod",level:1,count:1,gold:0,pearl:50}
+ ),icebox1:ZTi("icebox1",{
+ title:"넓은 어망",line:"어망이 금방 차지요? 장비에서 그물 어망으로 바꿔 봐요.",done:"이제 넉넉하게 담겠어요.",kind:"gear",gear:"icebox",level:1,count:1,gold:0,pearl:50}
+ ),boat1:ZTi("boat1",{
+ title:"쪽배",line:"뗏목은 느려요. 장비에서 배를 나무 쪽배로 올려 봐요.",done:"물살을 가르는 소리가 다르네요!",kind:"gear",gear:"boat",level:1,count:1,gold:0,pearl:100}
+ ),reel1:ZTi("reel1",{
+ title:"청동 얼레",line:"장비에서 얼레를 청동 얼레로 바꿔 봐요. 입질이 빨라져요.",done:"찌가 금방 움직이네요.",kind:"gear",gear:"reel",level:1,count:1,gold:0,pearl:50}
+ ),bobber1:ZTi("bobber1",{
+ title:"코르크 찌",line:"장비에서 찌를 코르크 찌로 바꿔 봐요. 귀한 물고기가 더 잘 물어요.",done:"귀한 손님이 올 거예요.",kind:"gear",gear:"bobber",level:1,count:1,gold:0,pearl:50}
+ ),harpoon:ZTi("harpoon",{
+ title:"첫 작살",line:"물고기로 작살을 만들 수 있어요. 작살 하나만 만들어 봐요.",done:"날이 잘 섰네요.",kind:"harpoon",count:1,gold:500,pearl:0}
+ ),hunt:ZTi("hunt",{
+ title:"몬스터 사냥",line:"큰 그림자가 지나가면 작살을 던져요. 한 번만 던져 봐요.",done:"용감하네요!",kind:"hunt",count:1,gold:0,pearl:100}
+ ),contest:ZTi("contest",{
+ title:"오늘 대회",line:"오늘 대회에 나가 봐요. 퀘스트의 대회 칸에서 참가해요.",done:"대회 맛을 봤으니 이제 우승이에요!",kind:"contest",count:1,gold:0,pearl:50}
+ ),auto1:ZTi("auto1",{
+ title:"자동 받침대",line:"자동 낚싯대를 자동 받침대로 올려 봐요. 꺼 둔 동안에도 잘 잡혀요.",done:"자는 동안에도 잡히겠어요.",kind:"gear",gear:"auto",level:1,count:1,gold:0,pearl:100}
+ ),line2:ZTi("line2",{
+ title:"거미 비단 줄",line:"힘 3짜리를 잡으려면 거미 비단 줄이 필요해요. 장비에서 바꿔 봐요.",done:"이제 강의 주인도 버틸 수 있어요.",kind:"gear",gear:"line",level:2,count:1,gold:0,pearl:100}
+ )}
+ ,iCi=Qt((t,i,s,e,n,h)=>({
+ title:t,line:i,done:s,kind:"any",count:e,gold:n,pearl:0,...void 0!==h?{
+ point:h}
+ :{
+ }
+ }
+ ),"any"),sCi=Qt((t,i,s,e,n,h,r=0)=>({
+ title:t,line:i,done:s,kind:"fish",fish:e,count:n,gold:h,pearl:r}
+ ),"fish"),eCi=Qt((t,i,s,e,n)=>({
+ title:t,line:i,done:s,kind:"area",point:e,count:1,gold:0,pearl:n}
+ ),"area"),nCi=Qt((t,i,s,e)=>({
+ title:t,line:i,done:s,kind:"meet",to:e,count:0,gold:200,pearl:0}
+ ),"meet"),hCi=[[iCi("첫 손맛","자, 이제 실전일세! 내 배 곁에서 손부터 풀어 보게. 아무 물고기나 세 마리.","좋아, 손맛을 봤구먼!",3,200),sCi("바닥의 메기","메기는 바닥에 붙어 산다네. 깊이를 바닥으로 두고 두 마리 부탁하네.","통통하구먼! 선원들 저녁거리로 딱이야.",12,2,300),sCi("수면의 가시복","가시복은 물 위쪽에서 논다네. 깊이를 수면으로 바꿔 두 마리!","가시에 찔리지 않았나? 잘했네.",8,2,300),sCi("중층 고둥","고둥은 물 가운데쯤에 있지. 중층에서 두 개만.","소리가 좋구먼. 배에 걸어 둬야겠어.",27,2,300),"sell","line1",sCi("리본벌레","용암리본벌레도 세 마리 부탁하네. 중층이야.","꿈틀꿈틀 잘 잡았구먼!",48,3,300),eCi("상류 도감","은빛강 상류에 사는 물고기를 도감에 다 채우고, 퀘스트의 수역 칸에서 받아 보게.","상류 박사가 다 됐구먼!",0,30),nCi("절임 가게 할머니","버들 샛강의 베르타 할머니가 일손을 찾으신다네. 인사드리게.","벤 선장이 보냈다고? 마침 잘 왔구나.","berta")],[sCi("게장 담그기","게장을 담글 거란다. 바닥에서 잿구름벙어리게 세 마리만.","이 정도면 한 독 가득이구나.",18,3,400),sCi("꼬리 고운 베타","잿꽃꼬리베타 꼬리가 참 곱지. 물 위쪽에서 두 마리 부탁하마.","꼬리가 꽃잎 같구나!",3,2,600),sCi("도롱뇽 한 마리","불꽃아가미도롱뇽 한 마리만. 버들 샛강 중층에 산단다.","아가미가 불꽃처럼 붉구나.",36,1,600),"rod1","icebox1","boat1",eCi("버들 샛강 도감","버들 샛강 물고기를 도감에 다 채워 보렴.","샛강이 네 손바닥 안이구나.",1,30),eCi("조약돌 너른 못 도감","조약돌 너른 못 물고기도 다 채워 보렴.","못이 반짝이는구나.",2,30),nCi("물레방아 아이","노을 소에 토토라는 아이가 물고기를 관찰한단다. 가 보렴.","할머니가 보냈어요? 같이 관찰해요!","toto")],[iCi("실개천 구경","들꽃 실개천은 처음이죠? 거기서 아무 물고기나 세 마리!","실개천 물고기는 무늬가 달라요!",3,400,3),sCi("노을 장어","용암띠장어는 노을 물때에만 나와요! 중층에서 두 마리.","장어가 노을빛이에요!",9,2,900),sCi("집게게","숯주걱집게게 집게가 궁금해요. 바닥에서 세 마리!","집게가 진짜 주걱 같아요!",20,3,500),sCi("권총새우","대장간권총새우가 탕 소리를 낸대요. 중층에서 두 마리!","탕! 진짜 소리가 나요!",21,2,800),"reel1","bobber1",sCi("햇살 가오리","햇살 물때에만 수면으로 올라오는 가오리가 있어요. 한 마리만!","햇살처럼 반짝여요!",13,1,1200),"harpoon","hunt",nCi("강가 식당","은빛강 하류의 한스 아저씨가 식당 재료를 찾아요.","토토 친구라고? 배고프지?","hans")],[sCi("새우 튀김","새우 튀김엔 대장간권총새우지! 세 마리 부탁해.","바삭하게 튀겨 주지!",21,3,1e3),sCi("삿갓조개","삿갓조개 국물이 일품이지. 바닥에서 세 개!","국물이 시원하겠어!",30,3,600),sCi("도가니등게","도가니등게 한 마리면 특식이야. 은빛 샛강 바닥에 있대.","오늘 특식은 게찜이다!",17,1,1200),sCi("진주조개","불씨진주조개 하나만. 하류나 노을 소 바닥에 있어.","진주가 불씨처럼 빛나!",26,1,1500),"contest","auto1","line2",eCi("하류 도감","은빛강 하류 물고기를 도감에 다 채워 봐.","하류의 물고기 박사로군!",8,50),sCi("은빛강의 주인","하류 바닥에 은빛강의 주인이 산대. 노을 때 나오는 힘센 놈이야. 튼튼한 줄을 챙겨!","은빛강이 너를 기억할 거야!",10,1,5e3,300)]],rCi=[[iCi("강의 결","이제 혼자 해 볼 차례예요. 내 배 곁에서 강의 결부터 느껴 봐요. 아무 물고기나 세 마리.","좋아요, 손이 강을 아네요.",3,200),sCi("뿌리수염메기","수염이 뿌리인지 뿌리가 수염인지… 바닥에서 뿌리수염메기 두 마리만 데려와 줘요.","역시 뿌리였어요! 아니, 수염인가?",52,2,300),sCi("마디 새우","대나무마디새우는 물 가운데쯤에 살아요. 깊이를 중층으로 바꿔 두 마리!","마디마디 대나무 같죠?",70,2,300),"sell","line1",sCi("밤송이 게","바닥에서 밤송이집게게 세 마리만 더 부탁해요!","가시가 진짜 밤송이 같아요.",65,3,300),eCi("상류 도감","이끼강 상류에 사는 물고기를 도감에 다 채우고, 퀘스트의 수역 칸에서 받아 봐요.","상류는 이제 다 아는 물이네요!",0,30),nCi("연못 정원사","고사리 너른 못에 리아라는 정원사가 있어요. 일손이 필요하대요.","릴리엔 선장님이요? 마침 잘 왔어요!","ria")],[sCi("비늘 씨앗","씨앗비늘잉어 비늘을 정원에 심어 볼래요. 중층에서 세 마리만!","비늘에서 싹이 나면 꼭 보여 줄게요.",63,3,400),sCi("연꽃 꼬리","연꽃꼬리베타는 물 위쪽에서 놀아요. 깊이를 수면으로 바꿔 봐요.","꼬리가 진짜 연꽃잎 같아요!",49,2,600),sCi("고사리 도롱뇽","고사리아가미도롱뇽은 안개 낀 날 바닥에 나와요. 한 마리만!","아가미가 고사리 잎 같아요.",84,1,600),"rod1","icebox1","boat1",eCi("고사리 너른 못 도감","고사리 너른 못 물고기를 도감에 다 채워 봐요.","연못이 다 네 정원이네요.",1,30),eCi("반딧불 굽이 도감","반딧불 굽이 물고기도 다 채워 봐요.","반딧불처럼 반짝이는 도감이에요.",2,30),nCi("물고기 사서","버섯 물길의 사서 실벤이 물고기 기록을 모은대요. 가 보세요.","리아가 보냈군요. 기록할 게 많아요.","silven")],[iCi("빈 기록","꽃잎 실개천의 물고기는 아직 기록이 비어 있어요. 거기서 아무 물고기나 세 마리.","덕분에 빈칸이 채워졌어요.",3,400,4),sCi("달빛 장어","버들잎장어는 달빛 물때에만 중층으로 나와요. 두 마리 기록해 주세요.","달빛에 잎맥이 비쳐요.",55,2,900),sCi("덩굴 고둥","덩굴나선고둥은 중층에 있어요. 세 개만 부탁해요.","나선이 덩굴처럼 감겨 있군요.",76,3,500),sCi("씨앗 진주","씨앗진주조개는 꽃잎 실개천이나 달빛 샛강 바닥에 있어요. 하나만 부탁해요.","진주 속에 씨앗이… 정말 있군요!",74,1,800),"reel1","bobber1",sCi("연잎 가오리","연잎가오리는 이슬 샛강이나 버들 여울 수면에 떠 있어요. 한 마리만!","연잎이 헤엄치는 줄 알았어요.",51,1,1200),"harpoon","hunt",nCi("소풍 준비","이끼강 하류의 피피가 소풍을 준비한대요. 도와주세요.","와, 손님이다! 소풍에 같이 가요!","pipi")],[sCi("연꽃 그릇","소풍 그릇은 연꽃그릇게면 돼요! 햇살 물때 수면에서 세 마리!","그릇이 세 개! 소풍 준비 끝!",66,3,1e3),sCi("덩굴 리본","덩굴리본벌레로 소풍 깃발을 꾸밀래요. 바닥에서 세 마리!","깃발이 펄럭펄럭!",96,3,600),sCi("나이테 거북","나이테등거북 등을 세면 나이를 안대요. 중층에서 두 마리!","와, 저보다 나이가 많아요!",83,2,800),sCi("수염 해달","뿌리수염해달이 버섯 물길이나 하류 수면에 산대요. 한 마리만 보고 싶어요!","수염이 뿌리 같아요! 귀여워!",93,1,1500),"contest","auto1","line2",eCi("하류 도감","이끼강 하류 물고기를 도감에 다 채워 봐요.","하류 물고기 박사님이에요!",8,50),sCi("이끼강의 주인","이끼강의 주인 솔방울철갑상어를 보고 싶어요! 안개 낀 하류 바닥에 산대요. 튼튼한 줄을 챙겨요!","해냈다! 이제 이끼강에서 모르는 사람이 없을 거예요!",57,1,5e3,300)]],oCi=[[iCi("산 손님","이제 혼자 해 보게, 산 손님! 손부터 풀어 보게. 아무거나 세 마리.","좋아, 산 사람 손은 역시 빠르군!",3,200),sCi("숯뼈가재 국물","배에서 끓일 국물엔 숯뼈가재가 제격이지. 바닥에서 두 마리 부탁하네.","이 향이야… 맛은 못 보지만!",119,2,300),sCi("수면의 소라","잿뿔유령소라는 물 위쪽에 떠다닌다네. 깊이를 수면으로 바꿔 두 마리!","뿔이 잿빛으로 빛나는군.",128,2,300),sCi("중층 새우","뼈마디유령새우는 물 가운데쯤에 있지. 중층에서 두 마리.","마디가 뼈처럼 딱딱하군.",118,2,300),"sell","line1",sCi("박쥐 날개 게","바닥에서 박쥐날개집게게 세 마리만 더 부탁하네.","날개가 있어도 못 나는 게로군!",116,3,300),eCi("상류 도감","잿빛강 상류에 사는 물고기를 도감에 다 채우고, 퀘스트의 수역 칸에서 받아 보게.","상류는 자네 손바닥 안이군!",0,30),nCi("바느질감","마른 갈대 굽이의 모라 할머니가 바느질감을 찾으셔.","카론이 보냈니? 어서 오렴.","mora")],[sCi("고둥 단추","고둥 껍데기로 단추를 달 거란다. 중층에서 유령관고둥 세 개만.","단추가 반짝이니 망토가 사는구나.",126,3,400),sCi("줄무늬 수","뼈줄무늬가아 무늬를 따라 수를 놓고 싶구나. 물 위쪽이란다.","무늬가 참 곱기도 하지.",97,2,600),sCi("묘비 소라게","묘비집소라게 껍데기로 바늘꽂이를 만들 거란다. 바닥에서 한 마리만.","바늘이 쏙쏙 들어가겠구나.",120,1,600),"rod1","icebox1","boat1",eCi("마른 갈대 굽이 도감","마른 갈대 굽이 물고기를 도감에 다 채워 보렴.","굽이가 네 손바닥 안이구나.",1,30),eCi("달그림자 샛강 도감","달그림자 샛강 물고기도 다 채워 보렴.","샛강 그림자까지 다 아는구나.",2,30),nCi("수상한 행상인","부엉이 소에 무무라는 행상인이 있단다. 뭐든 산다더구나.","손님! 좋은 물건 있으면 보여 줘!","mumu")],[iCi("가라앉은 물건","가시 너른 못에 좋은 게 가라앉아 있대. 거기서 아무 물고기나 세 마리 낚아 봐.","역시 그 못이야! 내 감이 맞았어.",3,400,3),sCi("유령 칼","유령칼고기는 달빛 물때에만 중층으로 나와. 두 마리면 값을 쳐 주지.","칼날이 투명해! 좋은 물건이야.",101,2,900),sCi("그림자 리본","그림자리본벌레를 리본으로 팔 거야. 바닥에서 세 마리!","리본이 그림자처럼 흔들려!",144,3,500),sCi("뼈마디 실고기","뼈마디실고기는 부엉이 소 중층에 있어. 두 마리!","실처럼 가는데 뼈가 다 보여!",108,2,800),"reel1","bobber1",sCi("비밀 거래","해골무늬가오리! 가시 너른 못이나 검은 물길 바닥에 있어. 비싸게 쳐 줄게, 쉿.","쉿, 다른 상인한테는 비밀이야.",111,1,1200),"harpoon","hunt",nCi("오래된 생물","잿빛강 하류의 루나가 오래된 생물을 연구한대.","새 조수님이군요! 반가워요.","luna")],[sCi("실고기 표본","뼈마디실고기 표본이 더 필요해요. 중층에서 세 마리!","표본 상자가 꽉 찼어요.",108,3,1e3),sCi("관뚜껑 홍합","관뚜껑홍합은 몇 살인지 궁금해요. 바닥에서 세 개!","껍데기에 나이테가 있어요!",123,3,600),sCi("동굴 도롱뇽","창백동굴도롱뇽은 안개 낀 날 녹슨 실개천이나 잿빛 샛강 바닥에 나와요. 한 마리만!","눈이 없는데 길을 잘 찾아요.",132,1,1200),sCi("유령 해파리","흰보유령해파리는 달빛 물때 수면에 떠요. 한 마리만 연구할게요!","빛이 흔들흔들, 정말 유령 같아요.",137,1,1500),"contest","auto1","line2",eCi("하류 도감","잿빛강 하류 물고기를 도감에 다 채워 봐요.","하류 연구는 당신 덕분이에요!",8,50),sCi("잿빛강의 선배","나보다 오래 산 물고기가 하류 바닥에 있대요. 새벽 안개가 낄 때만 나온대요! 튼튼한 줄을 챙겨요.","선배님을 만났어요! 잿빛강이 당신을 기억할 거예요.",110,1,5e3,300)]],aCi=[[iCi("꼬마 선원","이제 실전이다, 꼬마 선원! 내 배 옆에서 손부터 풀어라. 아무거나 세 마리.","제법인데! 배에 태워 줄 만하군.",3,200),sCi("선원 밥","선원 밥으로 서리벙어리참게가 필요하다. 바닥에서 두 마리!","오늘 저녁은 게찜이다!",163,2,300),sCi("꼬부리 새우","남빛꼬부리옆새우는 물 가운데쯤에 산다. 깊이를 중층으로 바꿔 두 마리!","꼬부랑 새우, 맛있겠군!",167,2,300),"sell","line1",sCi("막대 맛조개","바닥에서 푸른막대맛조개 세 개 잡아 와라!","국에 넣으면 시원하겠군!",171,3,300),eCi("상류 도감","서리강 상류에 사는 물고기를 도감에 다 채우고, 퀘스트의 수역 칸에서 받아 봐라.","상류는 이제 네 바다다!",0,30),nCi("왕년의 낚시왕","얼음 샛강의 그루마 할머니는 왕년의 낚시왕이시다. 인사드려라.","보르칸 그 꼬맹이가 보냈다고?","gruma")],[sCi("낚싯대 장식","내 낚싯대에 달 장식이 필요해. 물소용돌이고둥 세 개, 중층이야.","그래, 이 소리야. 손맛이 난다.",174,3,400),sCi("가시복 백 마리","서리가시복은 물 위쪽에서 잡는 거야. 내 젊을 땐 하루에 백 마리였지. 두 마리만 해 봐.","흠, 나쁘지 않아. 낚시왕 될 상이야.",155,2,600),sCi("빗해파리","물줄무늬빗해파리는 달빛 물때 중층에 떠. 한 마리만 보여 줘.","줄무늬가 무지개처럼 반짝이지?",191,1,600),"rod1","icebox1","boat1",eCi("얼음 샛강 도감","얼음 샛강 물고기를 도감에 다 채워 봐.","샛강은 네 손바닥 안이구나.",1,30),eCi("눈보라 너른 못 도감","눈보라 너른 못 물고기도 다 채워 봐.","눈보라 속에서도 다 찾았구나!",2,30),nCi("국수 국물","흰 소의 우동이 국수 국물 재료를 찾는다더라.","할머니 손님이면 국수 곱빼기!","udong")],[iCi("국물 맛 물","늑대 실개천 물이 국물 맛을 낸대. 거기서 아무 물고기나 세 마리 잡아 줘.","이 물 냄새, 국물 맛이 나는데?",3,400,3),sCi("학공치 고명","국수 고명은 물창학공치지! 물 위쪽에서 두 마리.","고명이 반짝반짝!",157,2,900),sCi("삿갓조개 국물","서리삿갓조개로 국물을 낼 거야. 바닥에서 세 개!","국물이 시원해!",173,3,500),sCi("갑옷 군부","남빛갑옷군부는 바위 바닥에 붙어 있어. 두 마리 떼어 와 줘.","쫄깃쫄깃 씹는 맛!",176,2,800),"reel1","bobber1",sCi("찌릿한 국물","찌릿한 국물을 만들 거야! 물방울전기가오리는 늑대 실개천이나 바위 샛강 바닥에 있어.","찌릿찌릿! 신메뉴 완성이다!",154,1,1200),"harpoon","hunt",nCi("게 동호회","얼음꽃 웅덩이의 크라라가 게 동호회를 한대. 가 봐!","새 회원이다! 환영해!","krara")],[sCi("거북손 모으기","서리꽃거북손은 안개 낀 날 물 위쪽에 붙어 있어! 세 개 모아 줘!","거북손도 게 친구야!",168,3,1e3),sCi("말미잘 친구","게는 말미잘이랑 친해. 바닥에서 물방울말미잘 세 개!","게들이 좋아하겠다!",192,3,600),sCi("방울 도치","방울혹도치는 안개 낀 날 중층에 나와. 한 마리만 보여 줘!","방울이 딸랑딸랑!",159,1,1200),sCi("둥실 해달","둥실배해달은 흰 소나 하류 수면에 둥실 떠 있대. 한 마리만!","배를 두드리며 떠 있어! 귀여워!",188,1,1500),"contest","auto1","line2",eCi("얼음꽃 웅덩이 도감","얼음꽃 웅덩이 물고기를 도감에 다 채워 봐!","웅덩이 회장님이다!",7,50),sCi("서리강의 톱","하류 바닥에 톱 같은 주둥이 상어가 산대! 새벽 안개가 낄 때만 나온대! 튼튼한 줄을 챙겨!","우와, 진짜 톱이야! 서리강 최고 낚시꾼!",152,1,5e3,300)]];
+ function cCi(t,i){
+ return i.map((i,s)=>{
+ const e=XTi[t].npcs[s].id;
+ let n=0;
+ return i.map(i=>"string"==typeof i?{
+ ...tCi[i],npc:e}
+ :{
+ ...i,id:`${
+ t}
+ :${
+ e}
+ :${
+ ++n}
+ `,npc:e}
+ )}
+ )}
+ Qt(cCi,"build");
+ const lCi={
+ "인간":cCi("인간",hCi),"엘프":cCi("엘프",rCi),"언데드":cCi("언데드",oCi),"오크":cCi("오크",aCi)}
+ ,uCi=new Map;
+ for(const Set of uSi)for(const t of lCi[Set])for(const i of t)i.teach||uCi.set(i.id,i);
+ for(const Set of Object.values(tCi))uCi.set(Set.id,Set);
+ const dCi=new Map([["sell","line1"],["rod1","icebox1","boat1"],["reel1","bobber1","harpoon","hunt"],["contest","auto1","line2"]].flatMap((t,i)=>t.map(t=>[`teach:${
+ t}
+ `,i]))),fCi=Qt(()=>({
+ held:[],done:[],met:[]}
+ ),"freshQuestLog"),pCi=Qt((t,i,s)=>(lCi[t][i]??[]).filter(i=>!i.teach||t===s),"chapterQuests"),gCi=Qt(t=>uCi.get(t)??null,"questDef");
+ function wCi(t,i){
+ const s=dCi.get(t);
+ if(void 0!==s)return{
+ race:i,ci:s}
+ ;
+ const e=t.split(":")[0];
+ if(!lCi[e])return null;
+ const n=lCi[e].findIndex(i=>i.some(i=>i.id===t));
+ return n<0?null:{
+ race:e,ci:n}
+ }
+ function mCi(t,i){
+ return"meet"===t.kind?t.to:t.teach?XTi[i].npcs[dCi.get(t.id)??0].id:t.npc}
+ Qt(wCi,"questRiver"),Qt(mCi,"questTurnIn");
+ const vCi=Qt(t=>"meet"===t.kind?0:"any"===t.kind||"fish"===t.kind||"sell"===t.kind?t.count:1,"questNeed"),_Ci=Qt(t=>t.id.split(":")[0],"riverOf");
+ function MCi(t,i,s){
+ const e=t.held.find(t=>t.id===i.id);
+ return e?"gear"===i.kind?s.gear[i.gear]>=i.level?1:0:"area"===i.kind?s.areaClaimed.includes(xTi(_Ci(i),"R",i.point))?1:0:"contest"===i.kind?Math.max(e.got,s.contestToday?1:0):Math.min(e.got,vCi(i)):0}
+ Qt(MCi,"questGot");
+ const bCi=Qt((t,i,s)=>t.held.some(t=>t.id===i.id)&&MCi(t,i,s)>=vCi(i),"questReady"),yCi=Qt((t,i,s)=>{
+ var e;
+ return(null==(e=XTi[i].npcs[0])?void 0:e.id)===s||t.met.includes(s)}
+ ,"npcMet");
+ function ECi(t,i,s,e){
+ var n;
+ const h=(null==(n=XTi[i])?void 0:n.npcs.findIndex(t=>t.id===s))??-1;
+ if(h<0||!yCi(t,i,s))return[];
+ const r=pCi(i,h,e),o=[],a=Qt(i=>t.done.includes(i)||t.held.some(t=>t.id===i),"taken");
+ for(const c of r)if(!a(c.id)&&!("meet"===c.kind&&r.filter(i=>"meet"!==i.kind&&!t.done.includes(i.id)).length>2)&&(o.push(c),o.length>=3))break;
+ return o}
+ function ACi(t,i){
+ if(!i.broken)for(const s of t.held){
+ const t=gCi(s.id);
+ if(!t)continue;
+ const e=vCi(t);
+ "fish"===t.kind&&i.id===t.fish?s.got=Math.min(e,s.got+1):"any"!==t.kind||i.race!==_Ci(t)||"R"!==i.zone||void 0!==t.point&&i.point!==t.point||(s.got=Math.min(e,s.got+1))}
+ }
+ function SCi(t,i){
+ var s;
+ const e=i&&t.held.some(t=>t.id===i)?i:null==(s=t.held[0])?void 0:s.id;
+ return e?gCi(e):null}
+ Qt(ECi,"questOffers"),Qt(ACi,"questOnCatch"),Qt(SCi,"trackedQuest");
+ const TCi=Qt(t=>{
+ var i;
+ return(null==(i=uSi.map(i=>XTi[i].npcs.find(i=>i.id===t)).find(Boolean))?void 0:i.name)??t}
+ ,"npcName"),CCi=["gear","sell","harpoon","contest","area"];
+ function OCi(t,i){
+ const s=vCi(t),e=Math.min(i,s);
+ switch(t.kind){
+ case"fish":{
+ const i=kSi(t.fish);
+ return{
+ text:`${
+ i.name}
+  ${
+ e}
+ /${
+ s}
+ 마리`,ask:`${
+ i.name}
+  ${
+ s}
+ 마리`,done:`${
+ i.name}
+  ${
+ s}
+ 마리 다 잡았어요`,hint:i.pts.length>=9?"이 강 어디서나":`${
+ RSi(i.race,i.zone,i.pts[0])}
+  근처`}
+ }
+ case"any":{
+ const i=void 0!==t.point?RSi(t.id.split(":")[0],"R",t.point):null;
+ return{
+ text:`${
+ i?`${
+ i}
+ 에서 `:""}
+ 아무 물고기 ${
+ e}
+ /${
+ s}
+ 마리`,ask:`${
+ i?`${
+ i}
+ 에서 `:""}
+ 아무 물고기 ${
+ s}
+ 마리`,done:"다 잡았어요",hint:i??"이 강 어디서나"}
+ }
+ case"sell":return{
+ text:`물고기 팔기 ${
+ e.toLocaleString()}
+ /${
+ s.toLocaleString()}
+ 골드`,ask:`물고기 ${
+ s.toLocaleString()}
+ 골드어치 팔기`,done:"다 팔았어요",hint:"[어망]에서"}
+ ;
+ case"gear":{
+ const i=WSi.find(i=>i.key===t.gear);
+ return{
+ text:`${
+ i.title}
+  → ${
+ i.names[t.level]}
+ `,ask:`${
+ i.title}
+ 을 ${
+ i.names[t.level]}
+ 로`,done:`${
+ i.names[t.level]}
+ 로 바꿨어요`,hint:"boat"===t.gear?"[장비] › 내 배에서":"[장비] › 낚시 도구에서"}
+ }
+ case"harpoon":return{
+ text:"작살 만들기",ask:"작살 하나 만들기",done:"작살을 만들었어요",hint:"[작살] 단추에서"}
+ ;
+ case"hunt":return{
+ text:"몬스터에게 작살 던지기",ask:"몬스터에게 작살 한 번 던지기",done:"작살을 던졌어요",hint:"큰 그림자가 지나갈 때"}
+ ;
+ case"contest":return{
+ text:"오늘 대회 참가",ask:"오늘 대회에 참가하기",done:"대회에 참가했어요",hint:"[퀘스트] › 대회에서"}
+ ;
+ case"area":{
+ const i=RSi(t.id.split(":")[0],"R",t.point);
+ return{
+ text:`${
+ i}
+  수역 클리어`,ask:`${
+ i}
+  수역 클리어 받기`,done:"수역을 채웠어요",hint:"[퀘스트] › 수역에서"}
+ }
+ case"meet":return{
+ text:`${
+ TCi(t.to)}
+ 에게 가기`,ask:`${
+ TCi(t.to)}
+ 에게 가서 인사하기`,done:"인사했어요",hint:"배를 몰고 가서 말을 걸어요"}
+ }
+ }
+ function ICi(t,i,s,e,n=[]){
+ return fAi(t,i,s,e,n)}
+ function kCi(t,i,s){
+ return t?t.c!==i.castAt?[]:t.ks.filter(t=>t<i.k&&!s.includes(t)):[]}
+ function RCi(t,i,s,e){
+ return{
+ id:t.id,star:t.star,grade:t.grade,r:t.r,kg:t.kg,cm:t.cm,at:i,race:s.race,zone:s.zone,point:s.point,tide:PSi(i),broken:t.broken&&!e,manual:!0}
+ }
+ function xCi(t,i,s,e){
+ if(t.qlog&&ACi(t.qlog,i),i.broken)return t.lost[i.id]=Math.max(t.lost[i.id]??0,i.kg),!1;
+ t.icebox.push(i);
+ const n=t.dex[i.id];
+ return n?(n.count++,n.bestKg=Math.max(n.bestKg,i.kg),n.bestR=Math.max(n.bestR,i.r),!1):(t.dex[i.id]={
+ firstDay:s,firstPoint:e,bestKg:i.kg,bestR:i.r,count:1}
+ ,!0)}
+ function PCi(t,i){
+ if(!t||t.c!==i.castAt)return null;
+ const s=t.ks.filter(t=>t>=i.k);
+ return s.length?{
+ c:t.c,ks:s}
+ :null}
+ function NCi(t,i){
+ const s=i||"guest";
+ return t.filter(t=>t===`ef2_fishing_pending_hooks_v1:${
+ s}
+ `||t.startsWith(`fishing:fog:v1:${
+ s}
+ :`)||t.startsWith(`fishing:spots:v1:${
+ s}
+ :`)||t.startsWith(`fishing:fog:v2:${
+ s}
+ :`)||t.startsWith(`fishing:spots:v2:${
+ s}
+ :`)||"fishing.trackedQuest"===t||t===`fishing.plunder.seen.${
+ i}
+ `||"fishing.plunder.hint"===t)}
+ Qt(OCi,"questObjective"),Qt(ICi,"biteTime"),Qt(kCi,"lostHooks"),Qt(RCi,"ticketCatch"),Qt(xCi,"applyLocalCatch"),Qt(PCi,"pruneHooks"),Qt(NCi,"fishingLocalKeys");
+ const LCi=class t extends eN{
+ constructor(){
+ super(...arguments),Zt(this,"have",null),Zt(this,"hooks",null),Zt(this,"beforeSend",null)}
+ url(t){
+ return`${
+ LP.baseURL}
+ /minigame/fishing/${
+ t}
+ `}
+ async send(i,s={
+ }
+ ,e=!1){
+ var n;
+ !t.NO_FLUSH.has(i)&&this.beforeSend&&await this.beforeSend();
+ const h=null==(n=this.have)?void 0:n.call(this);
+ return this.post(this.url(i),h?{
+ ...s,have:h}
+ :s,e)}
+ sync(t,i=!0){
+ var s;
+ const e=null==(s=this.hooks)?void 0:s.call(this);
+ return this.send("sync",{
+ ...t?{
+ pos:t}
+ :{
+ }
+ ,...i?{
+ }
+ :{
+ others:!1}
+ ,...e?{
+ hooks:e}
+ :{
+ }
+ }
+ )}
+ cast(t){
+ return this.send("cast",t?{
+ pos:t}
+ :{
+ }
+ )}
+ hook(t,i){
+ return this.send("hook",i?{
+ k:t,pos:i}
+ :{
+ k:t}
+ )}
+ awayReport(){
+ return this.send("awayReport")}
+ move(t,i,s,e){
+ return this.send("move",{
+ race:t,zone:i,point:s,depth:e}
+ )}
+ sell(t){
+ return this.send("sell",{
+ key:t}
+ )}
+ sellAll(){
+ return this.send("sellAll",{
+ }
+ ,!0)}
+ sellKeys(t){
+ return this.send("sellKeys",{
+ keys:t}
+ ,!0)}
+ sellFish(t){
+ return this.send("sellFish",{
+ fish:t}
+ ,!0)}
+ aquariumPut(t){
+ return this.send("aquariumPut",{
+ key:t}
+ )}
+ aquariumPutFish(t){
+ return this.send("aquariumPut",{
+ fish:t}
+ )}
+ aquariumTake(t){
+ return this.send("aquariumTake",{
+ index:t}
+ )}
+ aquariumExpand(){
+ return this.send("aquariumExpand",{
+ }
+ ,!0)}
+ upgrade(t){
+ return this.send("upgrade",{
+ key:t}
+ ,!0)}
+ buy(t){
+ return this.send("buy",{
+ id:t}
+ ,!0)}
+ exchange(t,i,s,e){
+ return this.send("exchange",{
+ seasonId:t,rev:i,kindNum:s,qty:e}
+ ,!0)}
+ life(){
+ return this.send("life")}
+ dailyClaim(t){
+ return this.send("daily/claim",{
+ day:t}
+ ,!0)}
+ joinContest(){
+ return this.send("joinContest",{
+ }
+ ,!0)}
+ socialStatus(){
+ return this.send("social/status")}
+ socialJoin(){
+ return this.send("social/join",{
+ }
+ ,!0)}
+ socialClaim(t){
+ return this.send("social/claim",{
+ ids:t}
+ ,!0)}
+ huntPing(){
+ return this.send("hunt/ping")}
+ huntAim(t){
+ return this.send("hunt/aim",{
+ pingId:t}
+ )}
+ huntShot(t,i){
+ return this.send("hunt/shot",{
+ aimId:t,...i?{
+ pos:i}
+ :{
+ }
+ }
+ )}
+ claimContest(){
+ return this.send("claimContest",{
+ }
+ ,!0)}
+ deliver(t){
+ return this.send("deliver",{
+ key:t}
+ )}
+ claimMilestone(t,i){
+ return this.send("claimMilestone",{
+ kind:t,idx:i}
+ )}
+ questAccept(t,i,s){
+ return this.send("quest/accept",{
+ id:t,race:i,npc:s}
+ )}
+ questAbandon(t){
+ return this.send("quest/abandon",{
+ id:t}
+ )}
+ questComplete(t){
+ return this.send("quest/complete",{
+ id:t}
+ )}
+ areaClaim(t,i,s){
+ return this.send("area/claim",{
+ race:t,zone:i,point:s}
+ )}
+ guideSeen(t){
+ return this.send("guideSeen",t?{
+ tip:t}
+ :{
+ }
+ )}
+ look(t){
+ return this.send("look",{
+ look:t}
+ ,!0)}
+ plunderPeek(t,i){
+ return this.send("plunder/peek",i?{
+ target:t,pos:i}
+ :{
+ target:t}
+ )}
+ plunderStart(t,i){
+ return this.send("plunder/start",i?{
+ target:t,pos:i}
+ :{
+ target:t}
+ ,!0)}
+ plunderStop(t){
+ return this.send("plunder/stop",t?{
+ pos:t}
+ :{
+ }
+ )}
+ plunderCut(){
+ return this.send("plunder/cut",{
+ }
+ )}
+ tradeRequest(t,i){
+ return this.send("trade/request",i?{
+ target:t,pos:i}
+ :{
+ target:t}
+ )}
+ tradeAnswer(t,i,s){
+ return this.send("trade/answer",s?{
+ room:t,yes:i,pos:s}
+ :{
+ room:t,yes:i}
+ )}
+ tradeOffer(t,i){
+ return this.send("trade/offer",{
+ room:t,refs:i}
+ )}
+ tradeReady(t,i,s,e){
+ return this.send("trade/ready",e?{
+ room:t,ok:i,ver:s,pos:e}
+ :{
+ room:t,ok:i,ver:s}
+ )}
+ tradeCancel(t){
+ return this.send("trade/cancel",{
+ room:t}
+ )}
+ tradeEmote(t,i){
+ return this.send("trade/emote",{
+ room:t,e:i}
+ )}
+ tradePoll(){
+ return this.send("trade/poll",{
+ }
+ )}
+ huntThrow(t,i){
+ return this.send("hunt/throw",i?{
+ grade:t,pos:i}
+ :{
+ grade:t}
+ )}
+ huntStatus(){
+ return this.send("hunt/status")}
+ huntCraft(t,i){
+ return this.send("hunt/craft",{
+ kind:t,n:i}
+ )}
+ gearPull(t){
+ return this.send("gear/pull",{
+ n:t}
+ )}
+ gearMerge(t,i,s=!1){
+ return this.send("gear/merge",s?{
+ all:!0}
+ :{
+ slot:t,star:i}
+ )}
+ gearMergeGroups(t){
+ return this.send("gear/merge",{
+ groups:t}
+ )}
+ gearKeep(t,i){
+ return this.send("gear/keep",{
+ uid:t,on:i}
+ )}
+ gearEquip(t,i){
+ return this.send("gear/equip",null===t?{
+ uid:null,slot:i}
+ :{
+ uid:t}
+ )}
+ gearEquipBest(){
+ return this.send("gear/equipBest",{
+ }
+ )}
+ huntUse(t){
+ return this.send("hunt/use",{
+ kind:t}
+ )}
+ boatRepair(t,i){
+ return this.send("boat/repair",i?{
+ action:t,pos:i}
+ :{
+ action:t}
+ )}
+ boatHelp(t,i){
+ return this.send("boat/help",i?{
+ target:t,pos:i}
+ :{
+ target:t}
+ )}
+ dev(t,i={
+ }
+ ){
+ return this.send("dev",{
+ action:t,...i}
+ )}
+ }
+ ;
+ Qt(LCi,"FishingService"),Zt(LCi,"NO_FLUSH",new Set(["sync","hunt/status","life","trade/poll","trade/emote","trade/cancel","trade/answer"]));
+ let DCi=LCi;
+ const GCi=[{
+ id:"hello",prog:0,kind:"talk"}
+ ,{
+ id:"hello2",prog:0,kind:"talk"}
+ ,{
+ id:"goal",prog:0,kind:"goal"}
+ ,{
+ id:"sailing",prog:0,kind:"wait"}
+ ,{
+ id:"rod",prog:1,kind:"rod"}
+ ,{
+ id:"wait",prog:1,kind:"wait"}
+ ,{
+ id:"bite",prog:2,kind:"bite"}
+ ,{
+ id:"caught",prog:2,kind:"talk"}
+ ,{
+ id:"idle",prog:2,kind:"talk"}
+ ,{
+ id:"movebtn",prog:3,kind:"btn"}
+ ,{
+ id:"sea",prog:3,kind:"sea"}
+ ,{
+ id:"done",prog:3,kind:"talk"}
+ ,{
+ id:"end",prog:3,kind:"end"}
+ ],BCi=["sail","rod","bite","move"],UCi=Qt((t,i)=>({
+ info:i?1-t:1,menu:1-t}
+ ),"immersionAlpha"),FCi=["배 몰기","낚시 시작","챔질","다시 이동"],$Ci=Qt(t=>{
+ var i;
+ return(null==(i=GCi[GCi.findIndex(i=>i.id===t)+1])?void 0:i.id)??null}
+ ,"nextStep"),HCi=Qt(t=>GCi.find(i=>i.id===t),"tutStep"),WCi=1700,VCi=1400;
+ function jCi(t){
+ const i=XTi[t].npcs;
+ return i.find(t=>t.ship)??i[0]}
+ Qt(jCi,"tutorialCaptain");
+ const KCi=Qt((t,i,s)=>{
+ const e=t.charCodeAt(t.length-1);
+ return`${
+ t}
+ ${
+ e>=44032&&e<=55203&&(e-44032)%28==0?s:i}
+ `}
+ ,"withJosa"),zCi={
+ ben:{
+ hello:"어서 오게, 새 낚시꾼!\n나는 벤 선장일세.",hello2:"본격적으로 낚시하기 전에\n배 모는 법부터 익혀 보세.",goal:"금빛 고리가 보이지?\n눌러서 배를 옮겨 보게.",sailing:"그렇지! 배는 누른 곳까지\n알아서 간다네.",rod:"멈추면 머리 위에 낚싯대가 뜨지.\n낚싯대를 누르면 찌를 던져 준다네.",wait:"물고기가 물 때까지\n조금만 기다려 보게…",bite:"지금이야!\n누르게!",caught:"첫 물고기로군! 축하하네.",idle:"가만 둬도 물고기는 잡히네.\n느낌표 때 누르면 훨씬 빨라지지!",movebtn:"낚시를 하다가 이동하려면\n[이동] 버튼을 누르게.",sea:"이제 가고 싶은 물을\n아무 데나 눌러 보게.",done:"좋아, 다 배웠네!",end:"자, 이제 내 배로 가세.\n거기서 첫 부탁을 주겠네!",missed:"놓쳤군! 괜찮네.\n다음 느낌표 때 눌러 보게.",fishA:"이야.",fishB:"야."}
+ ,lilien:{
+ hello:"어서 와요, 새 낚시꾼!\n나는 릴리엔 선장이에요.",hello2:"본격적으로 낚시하기 전에\n배 모는 법부터 익혀 봐요.",goal:"금빛 고리가 보이죠?\n눌러서 배를 옮겨 봐요.",sailing:"좋아요! 배는 누른 곳까지\n알아서 가요.",rod:"멈추면 머리 위에 낚싯대가 떠요.\n낚싯대를 누르면 찌를 던져 줄게요.",wait:"물고기가 물 때까지\n조금만 기다려 봐요…",bite:"지금이에요!\n눌러요!",caught:"첫 물고기네요! 축하해요.",idle:"가만 둬도 물고기는 잡혀요.\n느낌표 때 누르면 훨씬 빨라져요!",movebtn:"낚시를 하다가 이동하려면\n[이동] 버튼을 눌러요.",sea:"이제 가고 싶은 물을\n아무 데나 눌러 봐요.",done:"좋아요, 다 배웠어요!",end:"자, 이제 내 배로 가요.\n거기서 첫 부탁을 줄게요!",missed:"놓쳤네요! 괜찮아요.\n다음 느낌표 때 눌러 봐요.",fishA:"이에요.",fishB:"예요."}
+ ,charon:{
+ hello:"어서 오게, 산 손님!\n잿빛강 뱃사공 카론일세.",hello2:"본격적으로 낚시하기 전에\n배 모는 법부터 익혀 보세.",goal:"금빛 고리가 보이나?\n눌러서 배를 옮겨 보게.",sailing:"그렇지! 배는 누른 곳까지\n알아서 간다네.",rod:"멈추면 머리 위에 낚싯대가 뜨지.\n낚싯대를 누르면 찌를 던져 준다네.",wait:"물고기가 물 때까지\n조금만 기다려 보게…",bite:"지금일세!\n누르게!",caught:"첫 물고기로군! 축하하네.",idle:"가만 둬도 물고기는 잡히네.\n느낌표 때 누르면 훨씬 빨라지지!",movebtn:"낚시를 하다가 이동하려면\n[이동] 버튼을 누르게.",sea:"이제 가고 싶은 물을\n아무 데나 눌러 보게.",done:"좋아, 다 배웠네!",end:"자, 이제 내 배로 가세.\n거기서 첫 부탁을 주겠네!",missed:"놓쳤군! 괜찮네.\n다음 느낌표 때 눌러 보게.",fishA:"이로군.",fishB:"로군."}
+ ,borkan:{
+ hello:"어서 와라, 꼬마 선원!\n나는 보르칸 선장이다.",hello2:"본격적으로 낚시하기 전에\n배 모는 법부터 익혀라.",goal:"금빛 고리가 보이지?\n눌러서 배를 옮겨 봐라.",sailing:"그렇지! 배는 누른 곳까지\n알아서 간다.",rod:"멈추면 머리 위에 낚싯대가 뜬다.\n낚싯대를 누르면 찌를 던져 주마.",wait:"물고기가 물 때까지\n조금만 기다려라…",bite:"지금이다!\n눌러라!",caught:"첫 물고기다! 잘했다.",idle:"가만 둬도 물고기는 잡힌다.\n느낌표 때 누르면 훨씬 빨라지지!",movebtn:"낚시를 하다가 이동하려면\n[이동] 버튼을 눌러라.",sea:"이제 가고 싶은 물을\n아무 데나 눌러 봐라.",done:"좋아, 다 배웠다!",end:"자, 이제 내 배로 가자.\n거기서 첫 부탁을 주마!",missed:"놓쳤군! 괜찮다.\n다음 느낌표 때 눌러라.",fishA:"이군.",fishB:"군."}
+ }
+ ;
+ function YCi(t,i=""){
+ const s=zCi[jCi(t).id]??zCi.ben,{
+ fishA:e,fishB:n,...h}
+ =s;
+ return{
+ ...h,caught:i?`${
+ h.caught}
+ \n${
+ KCi(i,e,n)}
+ `:h.caught}
+ }
+ function qCi(t){
+ return!t.tutSeen&&t.look&&0===t.dex&&0===t.journeyStep&&!t.accepted}
+ function XCi(t,i,s=62){
+ const e=[...t].length;
+ return e?Math.min(e,1+Math.floor(Math.max(0,i)/s)):0}
+ Qt(YCi,"tutorialLines"),Qt(qCi,"shouldStartTutorial"),Qt(XCi,"typedCount");
+ const JCi=Qt(t=>{
+ const i=Math.max(0,Math.min(1,t));
+ return i*i*(3-2*i)}
+ ,"smooth$2");
+ function QCi(t){
+ const i=(t%WCi+WCi)%WCi/WCi,s=i<.4?-4*JCi(i/.4):i<.55?-4*(1-JCi((i-.4)/.15)):0;
+ return{
+ dx:s,dy:s,scale:i<.55?1-.08*JCi(i/.55):i<.7?.92+.08*JCi((i-.55)/.15):1}
+ }
+ function ZCi(t){
+ const i=(t%VCi+VCi)%VCi/VCi,s=1-(1-i)*(1-i);
+ return{
+ r:15+35*s,alpha:.9*(1-s)}
+ }
+ Qt(QCi,"handPose"),Qt(ZCi,"ringPose");
+ const tOi=[15.5,14.5,13.5,13];
+ function iOi(t){
+ for(const i of[!1,!0])for(const s of tOi){
+ const e=t(s,i);
+ if(e<=3)return{
+ size:s,lines:e,narrow:i,over:!1}
+ }
+ return{
+ size:13,lines:t(13,!0),narrow:!0,over:!0}
+ }
+ Qt(iOi,"fitTalk");
+ const sOi=["남","여"],eOi=["인간","엘프","언데드","오크"],nOi=[[16243908,15713183,14394746,6635563,14271210,12904143,11127024],[16508628,15979186,15057053,6635563,14271210,12904143,11127024],[13621467,11780556,12761299,11058350,14538182],[10475238,6077652,3975360,4165560,8366020]],hOi=[["짧은 머리","긴 머리","뒤로 묶음"],["짧은 머리","긴 머리","뒤로 묶음"]],rOi=[["short","long","pony"],["bob","long","pony"]],oOi=[2825751,7225123,12864046,15123036,15525594,4165769,4025536],aOi=[2,5,0,6],cOi=["주근깨","볼터치","수염","흉터","안경","안대","귀걸이"],lOi=[3,1,4,5,6];
+ function uOi(t){
+ return Array.isArray(t)?[...new Set(t.filter(t=>Number.isInteger(t)&&lOi.includes(t)))].sort((t,i)=>t-i).slice(0,2):[]}
+ Qt(uOi,"normalizeFeats");
+ const dOi=[{
+ name:"어부 조끼",hat:"none"}
+ ,{
+ name:"비옷",hat:"rain"}
+ ,{
+ name:"줄무늬 선원복",hat:"cap"}
+ ,{
+ name:"후드 망토",hat:"hood"}
+ ],fOi=[13190973,3108771,14854458,4164186,6965898,3817290],pOi={
+ sex:2,race:4,skin:7,hair:3,hairColor:7,feats:7,outfit:4,outfitColor:6,talent:4}
+ ,gOi={
+ v:1,sex:0,race:0,skin:1,hair:0,hairColor:1,feats:[],outfit:0,outfitColor:0,talent:0}
+ ,wOi=Qt((t,i)=>Number.isInteger(t)&&t>=0&&t<i,"isIndex");
+ function mOi(t){
+ if(!t||"object"!=typeof t)return null;
+ for(const i of["sex","race","skin","hair","hairColor"])if(!wOi(t[i],"hair"===i?4:pOi[i]))return null;
+ return t.skin>=nOi[t.race].length?null:{
+ v:1,sex:t.sex,race:t.race,skin:t.skin,hair:t.hair<pOi.hair?t.hair:0,hairColor:t.hairColor,feats:uOi(t.feats),outfit:0,outfitColor:0,talent:0}
+ }
+ function vOi(t){
+ const i=Qt(i=>void 0===t.feats[i]?"-":String(t.feats[i]),"f");
+ return`${
+ t.v}
+ ${
+ t.sex}
+ ${
+ t.race}
+ ${
+ t.skin}
+ ${
+ t.hair}
+ ${
+ t.hairColor}
+ ${
+ i(0)}
+ ${
+ i(1)}
+ ${
+ t.outfit}
+ ${
+ t.outfitColor}
+ ${
+ t.talent}
+ `}
+ function _Oi(t){
+ if("string"!=typeof t||11!==t.length||"1"!==t[0])return null;
+ const i=Qt(i=>"-"===t[i]?-1:Number(t[i]),"n");
+ return mOi({
+ sex:i(1),race:i(2),skin:i(3),hair:i(4),hairColor:i(5),feats:[i(6),i(7)].filter(t=>t>=0),outfit:i(8),outfitColor:i(9),talent:i(10)}
+ )}
+ Qt(mOi,"validLook"),Qt(vOi,"packLook"),Qt(_Oi,"unpackLook");
+ const MOi=36e5,bOi=160;
+ function yOi(t,i){
+ if(!t)return{
+ n:3,nextAt:null}
+ ;
+ if(t.tickets>=3)return{
+ n:3,nextAt:null}
+ ;
+ const s=Math.floor(Math.max(0,i-t.ticketAt)/MOi),e=Math.min(3,t.tickets+s),n=t.ticketAt+s*MOi;
+ return{
+ n:e,nextAt:e>=3?null:n+MOi}
+ }
+ function EOi(t,i){
+ return Math.max(0,Math.min(t.max,Math.floor((i-t.startAt)/t.every)))}
+ function AOi(t,i){
+ const s=EOi(t,i);
+ return s>=t.max?0:t.startAt+(s+1)*t.every-i}
+ Qt(yOi,"ticketsOf"),Qt(EOi,"raidCount"),Qt(AOi,"raidNextIn");
+ const SOi=Qt(t=>Math.min(.5*t.every,2e4),"leadOf");
+ function TOi(t,i){
+ var s;
+ const e=EOi(t,i),n=null==(s=t.plan)?void 0:s[e];
+ if(!n||e>=t.max)return{
+ level:0,p:0}
+ ;
+ const h=SOi(t),r=t.startAt+(e+1)*t.every-i;
+ return r>h?{
+ level:0,p:0}
+ :{
+ level:n.grade>=3?3:2===n.grade?2:1===n.grade&&aAi(t.seed+7919*e)%100<35?1:0,p:Math.max(0,Math.min(1,1-r/h))}
+ }
+ function COi(t,i){
+ if(!t.net)return null;
+ const s=[...t.net];
+ for(const e of(t.plan??[]).slice(0,EOi(t,i)))s[e.grade]=Math.max(0,s[e.grade]-1);
+ return s}
+ Qt(TOi,"raidTension"),Qt(COi,"netLeft");
+ const OOi={
+ EVERY_MS:18e5,DUR_MS:24e4,CD_MS:1500,SLOT_BASE:3,START_WOOD:5,STOCK_MAX:99,DMG:10,MULT:{
+ perfect:3,great:2,good:1,miss:0}
+ ,KEY_TTL_SEC:10800,MIN_LEVEL:2}
+ ,IOi=["wood","iron","mithril"],kOi={
+ wood:{
+ kind:"wood",name:"나무 작살",mult:1,fish:3,minStar:1,gold:20}
+ ,iron:{
+ kind:"iron",name:"쇠 작살",mult:1.6,fish:3,minStar:2,gold:200}
+ ,mithril:{
+ kind:"mithril",name:"미스릴 작살",mult:2.5,fish:2,minStar:3,gold:1500}
+ }
+ ,ROi={
+ R:[{
+ kind:"catfish",name:"거대 메기"}
+ ,{
+ kind:"eel",name:"왕장어"}
+ ,{
+ kind:"sturgeon",name:"늙은 철갑상어"}
+ ],C:[{
+ kind:"manta",name:"대왕 가오리"}
+ ,{
+ kind:"turtle",name:"고대 바다거북"}
+ ,{
+ kind:"shark",name:"백상아리"}
+ ,{
+ kind:"whaleShark",name:"고래상어"}
+ ],O:[{
+ kind:"whale",name:"대왕고래"}
+ ,{
+ kind:"shark",name:"식인 상어"}
+ ,{
+ kind:"whaleShark",name:"심해 고래상어"}
+ ,{
+ kind:"megalodon",name:"메갈로돈"}
+ ]}
+ ,xOi=["R","C","O"].flatMap(t=>ROi[t].map(i=>({
+ ...i,zone:t}
+ ))),POi=Qt(t=>Math.round(80*Math.pow(1.32,t-1)),"bossHp");
+ function NOi(t,i,s){
+ const e=FAi(t,i),n=aAi(7919*e+104729*s),h=ROi[i],r=h[n%h.length],o=s*OOi.EVERY_MS+aAi(n+3)%Math.floor(OOi.EVERY_MS/2);
+ return{
+ w:s,at:o,end:o+OOi.DUR_MS,kind:r.kind,name:r.name,tier:e,hp:POi(e)}
+ }
+ function LOi(t,i,s){
+ const e=-Math.floor(s/1e3);
+ return{
+ ...NOi(t,i,Math.floor(s/OOi.EVERY_MS)),w:e,at:s,end:s+OOi.DUR_MS}
+ }
+ function DOi(t,i,s,e){
+ const n=NOi(t,i,Math.floor(s/OOi.EVERY_MS));
+ return s>=n.at&&s<n.end?n:null}
+ function GOi(t,i,s){
+ return s&&i>=s&&i<s+OOi.DUR_MS?LOi(t.race,t.zone,s):QSi(t)>=OOi.MIN_LEVEL?DOi(t.race,t.zone,i):null}
+ function BOi(t,i,s){
+ return GOi(t,i,s)||(QSi(t)>=OOi.MIN_LEVEL?UOi(t.race,t.zone,i):null)}
+ function UOi(t,i,s,e){
+ const n=DOi(t,i,s);
+ if(n)return n;
+ const h=Math.floor(s/OOi.EVERY_MS),r=NOi(t,i,h);
+ return s<r.end?r:NOi(t,i,h+1)}
+ Qt(NOi,"bossOf"),Qt(LOi,"devBoss"),Qt(DOi,"bossNow"),Qt(GOi,"bossHere"),Qt(BOi,"bossNextHere"),Qt(UOi,"bossNext");
+ const FOi=Qt(t=>OOi.SLOT_BASE+Math.min(3,Math.floor(t/2)),"harpoonSlots"),$Oi=Qt(t=>100*OOi.MULT[t],"throwGradePercent"),HOi=[{
+ xp:0,name:"견습 작살꾼"}
+ ,{
+ xp:100,name:"작살꾼"}
+ ,{
+ xp:400,name:"사냥꾼"}
+ ,{
+ xp:1200,name:"명사수"}
+ ,{
+ xp:3e3,name:"괴물 사냥꾼"}
+ ,{
+ xp:8e3,name:"전설의 헌터"}
+ ],WOi=Qt(t=>{
+ var i;
+ let s=0;
+ for(;
+ s+1<HOi.length&&t>=HOi[s+1].xp;
+ )s++;
+ return{
+ i:s,name:HOi[s].name,next:(null==(i=HOi[s+1])?void 0:i.xp)??null}
+ }
+ ,"rankOf");
+ function VOi(t){
+ const i=t.hunt;
+ return{
+ stock:(null==i?void 0:i.stock)??{
+ wood:OOi.START_WOOD,iron:0,mithril:0}
+ ,use:(null==i?void 0:i.use)??"wood"}
+ }
+ function jOi(t,i,s){
+ var e;
+ const n=(null==(e=t.hunt)?void 0:e.thrown)&&t.hunt.thrown.w===i.w&&t.hunt.thrown.map===s?t.hunt.thrown.n:0;
+ return Math.max(0,FOi(t.gear.boat)-n)}
+ function KOi(t){
+ return t.stock[t.use]>0?t.use:IOi.find(i=>t.stock[i]>0)??null}
+ Qt(VOi,"stockOf"),Qt(jOi,"loadedLeft"),Qt(KOi,"pickHarpoon");
+ const zOi={
+ perfect:.07,great:.2,good:.6}
+ ;
+ function YOi(t=0){
+ const i=1+Math.max(0,t)/100;
+ return{
+ perfect:Math.min(.16,zOi.perfect*i),great:Math.min(.34,zOi.great*i),good:Math.min(.8,zOi.good*i)}
+ }
+ Qt(YOi,"gaugeRangeFor");
+ const qOi=Qt((t,i=zOi)=>{
+ const s=Math.abs(t);
+ return s<=i.perfect?"perfect":s<=i.great?"great":s<=i.good?"good":"miss"}
+ ,"gaugeGrade"),XOi={
+ AQUARIUM_SLOTS:[10,15,20],AQUARIUM_PRICES:[0,5e3,2e4],KEEP_STAR:4,KEEP_GRADE:2}
+ ,JOi=Qt(t=>`${
+ t.id}
+ :${
+ t.grade}
+ `,"fishKey"),QOi=Qt(t=>vTi(t.id,t.grade,t.r),"fishValue"),ZOi=Qt(t=>({
+ id:t.id,grade:t.grade,at:t.at,kg:t.kg}
+ ),"fishRef"),tIi=Qt(t=>kSi(t.id).star>=XOi.KEEP_STAR||t.grade>=XOi.KEEP_GRADE,"keepable"),iIi=Qt(t=>XOi.AQUARIUM_SLOTS[Math.min(t,XOi.AQUARIUM_SLOTS.length-1)],"aquariumCap");
+ function sIi(t){
+ const i=new Map;
+ for(const s of t){
+ if(s.broken)continue;
+ const t=JOi(s),e=i.get(t)??{
+ key:t,id:s.id,grade:s.grade,count:0,value:0,bestKg:0}
+ ;
+ e.count++,e.value+=QOi(s),e.bestKg=Math.max(e.bestKg,s.kg),i.set(t,e)}
+ return[...i.values()]}
+ function eIi(t){
+ const i=t.now+t.heartbeatMs;
+ if(!t.open)return i;
+ let s=i;
+ return null!==t.autoAt&&(s=Math.min(s,t.autoAt-t.offset+400)),null!==t.hazardAt&&(s=Math.min(s,t.hazardAt-t.offset+500)),null!==t.repairEndAt&&(s=Math.min(s,t.repairEndAt-t.offset+500)),s}
+ Qt(sIi,"netGroups"),Qt(eIi,"nextSyncAt");
+ const nIi=160,hIi=[["👍","좋아요"],["🤔","글쎄요"],["☝️","하나만 더"],["🙏","부탁해요"],["😅","너무 비싸요"],["⏳","잠깐만요"],["😊","고마워요"],["👋","다음에 해요"]],rIi=Qt((t,i)=>({
+ src:i,id:t.id,grade:t.grade,at:t.at,kg:t.kg,r:t.r}
+ ),"refOf"),oIi=Qt((t,i)=>t.src===i.src&&t.id===i.id&&t.grade===i.grade&&t.at===i.at&&t.kg===i.kg,"sameRef");
+ function aIi(t,i,s,e,n,h){
+ const r=i-t+n.filter(t=>"net"===t.src).length;
+ let o=e-s+n.filter(t=>"aq"===t.src).length;
+ const a=o;
+ let c=0,l=0;
+ for(const u of h)"aq"===u.src&&tIi(u)&&o>0?(o--,c++):l++;
+ return{
+ ok:l<=r,short:Math.max(0,l-r),toNet:l,toAq:c,netFree:r,aqFree:a}
+ }
+ Qt(aIi,"roomFit");
+ const cIi=Qt((t,i)=>Math.max(0,10-((null==t?void 0:t.day)===i?t.n:0)),"tradeLeft"),lIi=Qt(t=>Math.max(0,Math.min(1,t)),"clamp01$4"),uIi=Qt(t=>t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2,"ease"),dIi=Qt(t=>1-Math.pow(1-t,3),"easeOut");
+ function fIi(t){
+ return{
+ lift:lIi(t/.2)*(1-lIi((t-.9)/.2)),spin:uIi(lIi(t/.4)),cross:uIi(lIi((t-.2)/.7)),pop:t<.9?0:Math.sin(Math.PI*lIi((t-.9)/.2)),dim:dIi(lIi((t-1.1)/.3)),result:dIi(lIi((t-1.1)/.5))}
+ }
+ Qt(fIi,"tradeSwapPose");
+ const pIi=[{
+ key:"contest",goal:1}
+ ,{
+ key:"catch",goal:30}
+ ,{
+ key:"hunt",goal:1}
+ ,{
+ key:"sell",goal:5e3}
+ ],gIi={
+ contest:"오늘 대회 참가하기",visit:"손님 부탁 들어주기",catch:"직접 낚기",hunt:"몬스터에게 작살 던지기",sell:"물고기 팔기"}
+ ,wIi=Qt(()=>({
+ contest:0,visit:0,catch:0,hunt:0,sell:0}
+ ),"zero"),mIi=Qt(t=>pIi.every(i=>t.n[i.key]>=i.goal),"dailyDone"),vIi=Qt((t,i)=>t&&t.day===i?t:{
+ day:i,n:wIi(),claimed:!1}
+ ,"dailyToday");
+ function _Ii(t,i){
+ const s=pIi.find(i=>i.key===t).goal,e=Math.min(Math.floor(i),s);
+ return"sell"===t?`${
+ gIi[t]}
+  ${
+ e.toLocaleString()}
+ /${
+ s.toLocaleString()}
+ 골드`:`${
+ gIi[t]}
+  ${
+ e}
+ /${
+ s}
+ `}
+ Qt(_Ii,"dailyLine");
+ const MIi={
+ contest:"contest",visit:"visit",catch:"fish",hunt:"hunt",sell:"net"}
+ ;
+ function bIi(t){
+ if(t.boatBroken)return{
+ kind:"repair",title:"배가 고장 났어요",sub:"눌러서 고치기",go:"repair"}
+ ;
+ if(t.netFull)return{
+ kind:"net",title:"어망이 가득 찼어요",sub:"어망을 비워야 더 잡혀요",go:"net"}
+ ;
+ if(t.contestReady)return{
+ kind:"contest",title:"대회 결과가 나왔어요",sub:"눌러서 받기",go:"contest"}
+ ;
+ const i=t.daily??{
+ n:wIi(),claimed:!1}
+ ;
+ if(!t.dailyOff&&mIi(i)&&!i.claimed)return{
+ kind:"claim",title:"오늘 할 일 끝! 상자 받기",sub:"진주 200",go:"claim"}
+ ;
+ if(t.journeyReady)return{
+ kind:"journeyReady",title:"여정 · 다 했어요",sub:`${
+ t.journeyReady.npc}
+ 에게 돌아가기`,go:"journey"}
+ ;
+ if(t.goalsReady>0)return{
+ kind:"goal",title:`업적 ${
+ t.goalsReady}
+ 개 받기`,sub:"진주가 기다려요",go:"goal"}
+ ;
+ if(t.areaReady)return{
+ kind:"area",title:"수역 클리어! 진주 받기",sub:`${
+ t.areaReady.name}
+  · 진주 ${
+ t.areaReady.pearl}
+ `,go:"area"}
+ ;
+ if(t.monster&&t.monster.inMs<=3e5)return t.monster.inMs<=0?{
+ kind:"hunt",title:`${
+ t.monster.name}
+  지나가는 중!`,sub:"작살을 던져요",go:"hunt"}
+ :{
+ kind:"hunt",title:`${
+ t.monster.name}
+  곧 와요`,sub:`${
+ Math.ceil(t.monster.inMs/6e4)}
+ 분 뒤`,go:"hunt"}
+ ;
+ if(t.journeyHere&&t.journeyNext)return{
+ kind:"journey",title:t.journeyNext.title,sub:t.journeyNext.line,go:"journey"}
+ ;
+ const s=t.dailyOff?void 0:pIi.find(t=>i.n[t.key]<t.goal);
+ if(s){
+ const t=pIi.filter(t=>i.n[t.key]>=t.goal).length;
+ return{
+ kind:"daily",title:`오늘 할 일 ${
+ t}
+ /${
+ pIi.length}
+ `,sub:_Ii(s.key,i.n[s.key]),go:MIi[s.key]}
+ }
+ return t.journeyNext?{
+ kind:"journey",title:t.journeyNext.title,sub:t.journeyNext.line,go:"journey"}
+ :t.areaNext?{
+ kind:"areaNext",title:`수역 도감 ${
+ t.areaNext.have}
+ /${
+ t.areaNext.need}
+ `,sub:`${
+ t.areaNext.name}
+  물고기 채우기`,go:"area"}
+ :t.dailyOff?{
+ kind:"done",title:"수역 도감 채우기",sub:"다른 지역 물고기도 모아 보세요",go:"area"}
+ :{
+ kind:"done",title:"오늘 할 일을 다 했어요",sub:"대물을 노려 보세요",go:"today"}
+ }
+ function yIi(t){
+ const i={
+ today:t.dailyClaimable,contest:t.contestReady,visit:t.visitDeliverable,goal:t.goalsReady>0,area:!!t.areaReady}
+ ;
+ return{
+ tank:t.netFull&&!t.onTank,quest:i.today||i.contest||i.visit||i.goal||i.area,seg:i}
+ }
+ function EIi(t,i,s,e){
+ return Array.from({
+ length:9}
+ ,(n,h)=>{
+ const r=PTi(t,i,h),o=r.filter(t=>!s[t.id]),a=xTi(t,i,h),c=e.includes(a);
+ return{
+ race:t,zone:i,point:h,idx:a,name:RSi(t,i,h),level:QSi({
+ zone:i,point:h}
+ ),pearl:NTi(i,h),species:r,have:r.length-o.length,need:r.length,missing:o,claimed:c,ready:!c&&0===o.length}
+ }
+ )}
+ function AIi(t,i,s,e){
+ const n=[[t,i],...uSi.flatMap(t=>dSi.map(i=>[t,i])).filter(([s,e])=>s!==t||e!==i)];
+ for(const[h,r]of n){
+ const t=EIi(h,r,s,e).find(t=>t.ready);
+ if(t)return t}
+ return null}
+ function SIi(t,i,s,e){
+ const n=EIi(t,i,s,e).filter(t=>!t.claimed&&t.missing.length>0);
+ return n.sort((t,i)=>t.missing.length-i.missing.length||t.point-i.point),n[0]??null}
+ Qt(bIi,"nextTask"),Qt(yIi,"fishingDots"),Qt(EIi,"areaRows"),Qt(AIi,"areaReady"),Qt(SIi,"areaNext");
+ const TIi=["dex","icebox","aquarium","lost","cups","history","quests","contest"],CIi=Qt(()=>`ef2_fishing_pending_hooks_v1:${
+ EG.userId||"guest"}
+ `,"pendingKey");
+ function OIi(){
+ try{
+ const t=JSON.parse(localStorage.getItem(CIi())??"null");
+ return t&&Number.isFinite(t.c)&&Array.isArray(t.ks)?t:null}
+ catch{
+ return null}
+ }
+ function IIi(t){
+ try{
+ t?localStorage.setItem(CIi(),JSON.stringify(t)):localStorage.removeItem(CIi())}
+ catch{
+ }
+ }
+ Qt(OIi,"loadPending"),Qt(IIi,"savePending");
+ const kIi=class t{
+ constructor(){
+ Zt(this,"state"),Zt(this,"ready",!1),Zt(this,"season",null),Zt(this,"social",null),Zt(this,"socialRefreshing",!1),Zt(this,"socialRefreshAt",0),Zt(this,"shop",[]),Zt(this,"life",null),Zt(this,"newSeason",null),Zt(this,"seasonListeners",new Set),Zt(this,"feed",[]),Zt(this,"active",!1),Zt(this,"open",!1),Zt(this,"api",Object.assign(new DCi,{
+ have:Qt(()=>this.haveRev(),"have"),hooks:Qt(()=>this.pending,"hooks"),beforeSend:Qt(()=>this.flushHooks(),"beforeSend")}
+ )),Zt(this,"pending",null),Zt(this,"ticket",null),Zt(this,"ticketCast",-1),Zt(this,"serverHeavy",{
+ }
+ ),Zt(this,"flushing",null),Zt(this,"onHidden","undefined"!=typeof document?document.addEventListener("visibilitychange",()=>{
+ "hidden"===document.visibilityState&&this.flushHooks()}
+ ):void 0),Zt(this,"others",[]),Zt(this,"othersAt",0),Zt(this,"crowd",null),Zt(this,"posProvider",null),Zt(this,"offset",0),Zt(this,"syncing",!1),Zt(this,"nextSyncAt",0),Zt(this,"hooked",{
+ castAt:-1,k:-1}
+ ),Zt(this,"listeners",new Set),Zt(this,"catchListeners",new Set),Zt(this,"noticeListeners",new Set),Zt(this,"boatListeners",new Set),Zt(this,"boatSeenAt",-1),Zt(this,"trade",null),Zt(this,"tradePreview",!1),Zt(this,"tradeListeners",new Set),Zt(this,"pollAt",0),Zt(this,"polling",!1),Zt(this,"tradeClosed",new Set),Zt(this,"onBigMove",null),Zt(this,"trackedId",(()=>{
+ try{
+ return localStorage.getItem("fishing.trackedQuest")}
+ catch{
+ return null}
+ }
+ )()),Zt(this,"seenTips",new Set),Zt(this,"eventDays",10),Zt(this,"boatRule",DAi)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ onSeasonChange(t){
+ return this.seasonListeners.add(t),()=>this.seasonListeners.delete(t)}
+ phase(){
+ var t;
+ return(null==(t=this.season)?void 0:t.phase)??"open"}
+ async flushHooks(){
+ var t,i,s;
+ for(let e=0;
+ e<3;
+ e++){
+ if(!this.ready||!(null==(t=this.pending)?void 0:t.ks.length))return;
+ const e=new Set(this.pending.ks);
+ if(await(this.flushing??(this.flushing=this.call(this.api.sync(null==(i=this.posProvider)?void 0:i.call(this),this.active)).then(()=>{
+ }
+ ,()=>{
+ }
+ ).finally(()=>{
+ this.flushing=null}
+ ))),!(null==(s=this.pending)?void 0:s.ks.some(t=>!e.has(t))))return}
+ }
+ hookedKs(t=this.state){
+ var i;
+ const s=null==t?void 0:t.seq;
+ return s?[...s.hooks??[],...(null==(i=this.pending)?void 0:i.c)===s.castAt?this.pending.ks:[]]:[]}
+ ticketFish(t){
+ var i;
+ const s=this.ticket,e=null==(i=this.state)?void 0:i.seq;
+ if(!s||!e||this.ticketCast!==e.castAt)return null;
+ const n=t-s.k0;
+ return n>=0&&n<s.fish.length?s.fish[n]:null}
+ localCatch(t,i){
+ t.icebox===this.serverHeavy.icebox&&(t.icebox=t.icebox.slice()),t.dex===this.serverHeavy.dex&&(t.dex=Object.fromEntries(Object.entries(t.dex).map(([t,i])=>[t,{
+ ...i}
+ ]))),t.lost===this.serverHeavy.lost&&(t.lost={
+ ...t.lost}
+ );
+ const s=Math.floor((i.at-t.startAt)/864e5)+1,e=xCi(t,i,s,RSi(i.race,i.zone,i.point)),n=t.daily&&vIi(t.daily,t.dailyUtc?UTi(i.at-t.devOffset):s);
+ return!i.broken&&n&&t.daily&&n===t.daily&&(t.daily={
+ ...t.daily,n:{
+ ...t.daily.n,catch:t.daily.n.catch+1}
+ }
+ ),e}
+ haveRev(){
+ const t=this.state,i=null==t?void 0:t.rev;
+ if(!t||!i)return;
+ const s={
+ }
+ ;
+ for(const e of TIi)e in t&&"number"==typeof i[e]&&(s[e]=i[e]);
+ return s}
+ onChange(t){
+ return this.listeners.add(t),()=>this.listeners.delete(t)}
+ onCatch(t){
+ return this.catchListeners.add(t),()=>this.catchListeners.delete(t)}
+ onNotice(t){
+ return this.noticeListeners.add(t),()=>this.noticeListeners.delete(t)}
+ notice(t){
+ for(const i of this.noticeListeners)i(t)}
+ onBoatLog(t){
+ return this.boatListeners.add(t),()=>this.boatListeners.delete(t)}
+ touch(){
+ for(const t of this.listeners)t()}
+ apply(t){
+ var i,s,e,n,h,r,o,a;
+ if(!(null==t?void 0:t.success))return{
+ message:(null==(s=null==(i=null==t?void 0:t.header)?void 0:i.errorInfo)?void 0:s.additional)??(null==(n=null==(e=null==t?void 0:t.header)?void 0:e.errorInfo)?void 0:n.message)??"연결이 원활하지 않아요"}
+ ;
+ const c=t.body,l=null==(h=this.season)?void 0:h.id,u=null==(r=c.season)?void 0:r.id,d=null!=l&&null!=u&&u<l,f=l===u&&(null==(o=c.state)?void 0:o.social)&&(null==(a=this.state)?void 0:a.social)&&(c.state.social.revision??0)<(this.state.social.revision??0);
+ if(d||f)return{
+ message:c.message??null,result:c.result}
+ ;
+ if(c.season){
+ const t=this.season;
+ if(this.season=c.season,t&&(t.phase!==c.season.phase||t.id!==c.season.id))for(const i of this.seasonListeners)i(c.season)}
+ if(c.social&&(!this.social||c.social.now>=this.social.now)&&(this.social=c.social),c.shop&&(this.shop=c.shop),c.newSeason&&(this.newSeason=c.newSeason),!c.state)return this.touch(),{
+ message:c.message??null,result:c.result}
+ ;
+ this.offset=c.now-Date.now();
+ const p=this.state,g=c.state;
+ for(const v of TIi)v in g&&(this.serverHeavy[v]=g[v]);
+ if(p)for(const v of TIi)v in g||(g[v]=this.serverHeavy[v]??p[v]);
+ const w=g.tk;
+ this.ticket=w?YTi(w,g.seq.castAt):null,this.ticketCast=this.ticket?g.seq.castAt:-1;
+ const m=kCi(this.pending,g.seq,(c.hooked??[]).map(t=>t.k));
+ if(m.length&&this.notice(`연결이 늦어 물고기 ${
+ m.length}
+ 마리를 놓쳤어요`),this.pending=PCi(this.pending,g.seq),IIi(this.pending),this.pending)for(const v of this.pending.ks){
+ const t=this.ticketFish0(v,g);
+ t&&this.localCatch(g,RCi(t,ICi(g.seq,v,g.gear.reel,g.devSpeed,this.hookedKs(g).filter(t=>t<v)),g.spot,!Object.keys(g.dex).length))}
+ WTi.setRun(g.startAt),this.state=g,this.ready=!0,this.emitBoatLogs();
+ for(const v of c.caught??[])this.addCatch(v,v.isNew);
+ return c.others&&(this.others=c.others,this.othersAt=Date.now()),c.crowd&&(this.crowd=c.crowd),this.planSync(),this.touch(),{
+ message:c.message??null,result:c.result}
+ }
+ addCatch(t,i){
+ this.feed.unshift(t),this.feed.length=Math.min(this.feed.length,8);
+ for(const s of this.catchListeners)s(t,i)}
+ async call(t){
+ return this.apply(await t)}
+ async load(){
+ var t;
+ this.pending??(this.pending=OIi());
+ const i=await this.call(this.api.sync(null==(t=this.posProvider)?void 0:t.call(this)));
+ return this.ready?i.message:i.message??"낚시왕 정보를 받지 못했어요"}
+ tick(){
+ var t;
+ this.tradeTick(),this.ready&&this.open&&!this.syncing&&(Date.now()<this.nextSyncAt||(this.syncing=!0,this.call(this.api.sync(null==(t=this.posProvider)?void 0:t.call(this),this.active)).finally(()=>{
+ this.syncing=!1}
+ )))}
+ syncSoon(){
+ this.nextSyncAt=0,this.tick()}
+ planSync(){
+ var t,i;
+ const s=null==(t=this.state)?void 0:t.plunder,e=null==(i=this.state)?void 0:i.boat,n="open"===this.phase(),h=n&&e&&!e.repairAt?YAi(this.state.spot.race,this.state.spot.zone,this.now()):null;
+ this.nextSyncAt=eIi({
+ now:Date.now(),open:n,offset:this.offset,heartbeatMs:(null==s?void 0:s.raid)||(null==s?void 0:s.raidBy)?5e3:6e4,autoAt:n?this.predictAutoAt():null,hazardAt:h?h.at:null,repairEndAt:n&&(null==e?void 0:e.repairAt)?aSi(this.state,e):null}
+ );
+ const r=this.currentBite(),o=this.ticket,a=!!o&&!!r&&this.ticketCast===this.state.seq.castAt&&o.k0+o.fish.length-r.k<4;
+ (this.pending&&this.pending.ks.length>=5||a)&&(this.nextSyncAt=Math.min(this.nextSyncAt,Date.now()+1e3))}
+ predictAutoAt(){
+ var t;
+ const i=null==(t=this.state)?void 0:t.seq;
+ if(!i)return null;
+ let s=i.prog,e=i.k,n=i.nextAt;
+ const h=this.hookedKs(),r=Math.max(-1,...h);
+ r>=i.k&&(s=0,n=ICi(i,r+1,this.state.gear.reel,this.state.devSpeed,h),e=r+1);
+ for(let o=0;
+ o<20;
+ o++){
+ if(s+=1,s>=i.need-1e-9)return n+rAi+2500;
+ e++,n+=cAi(i.seed,e,this.state.gear.reel,this.state.devSpeed)}
+ return null}
+ onTrade(t){
+ return this.tradeListeners.add(t),()=>this.tradeListeners.delete(t)}
+ setTrade(i){
+ const s=this.trade,e=t.phaseRank;
+ if(!(i&&s&&i.id===s.id&&(e[i.phase]<e[s.phase]||i.phase===s.phase&&i.ver<s.ver))){
+ i&&("done"===i.phase||"gone"===i.phase)&&this.tradeClosed.has(i.id)&&(i=null),"done"!==(null==i?void 0:i.phase)||"done"===(null==s?void 0:s.phase)||this.tradePreview||this.syncSoon(),this.trade=i;
+ for(const t of this.tradeListeners)t(i)}
+ }
+ tradeDismiss(){
+ this.trade&&this.tradeClosed.add(this.trade.id),this.setTrade(null)}
+ get tradeLive(){
+ return!!this.trade&&("ask"===this.trade.phase||"open"===this.trade.phase)}
+ tradeLeft(){
+ return this.state?cIi(this.state.trade,this.state.dailyUtc?UTi(this.realNow()):this.eventDay()):0}
+ tradeFish(){
+ var t,i,s,e;
+ const n=this.serverHeavy.icebox??(null==(t=this.state)?void 0:t.icebox)??[],h=(null==(i=this.serverHeavy.aquarium)?void 0:i.fish)??(null==(e=null==(s=this.state)?void 0:s.aquarium)?void 0:e.fish)??[];
+ return{
+ net:n.filter(t=>!t.broken),aq:h}
+ }
+ applyTrade(t){
+ var i,s,e,n;
+ if(!(null==t?void 0:t.success))return(null==(s=null==(i=null==t?void 0:t.header)?void 0:i.errorInfo)?void 0:s.additional)??(null==(n=null==(e=null==t?void 0:t.header)?void 0:e.errorInfo)?void 0:n.message)??"연결이 원활하지 않아요";
+ const h=t.body??{
+ }
+ ,r=h.state?this.apply(t).message:h.message??null;
+ return"trade"in h&&this.setTrade(h.trade??null),r}
+ tradeTick(){
+ if(this.tradePreview||!this.ready||!this.open||!this.active||this.polling||"open"!==this.phase())return;
+ const t=this.tradeLive?1e3:this.others.some(t=>!t.a&&!t.id.startsWith("bot:"))?3e3:0;
+ !t||Date.now()<this.pollAt||(this.pollAt=Date.now()+t,this.polling=!0,this.api.tradePoll().then(t=>{
+ this.applyTrade(t)}
+ ).catch(()=>{
+ }
+ ).finally(()=>{
+ this.polling=!1}
+ ))}
+ async tradeCall(t){
+ return this.pollAt=Date.now()+1e3,this.applyTrade(await t)}
+ tradeRequest(t){
+ var i;
+ return this.tradeCall(this.api.tradeRequest(t,null==(i=this.posProvider)?void 0:i.call(this)))}
+ tradeAnswer(t){
+ var i;
+ return this.trade?this.tradeCall(this.api.tradeAnswer(this.trade.id,t,null==(i=this.posProvider)?void 0:i.call(this))):Promise.resolve("거래가 끝났어요")}
+ tradeOffer(t){
+ return this.trade?this.tradeCall(this.api.tradeOffer(this.trade.id,t)):Promise.resolve("거래가 끝났어요")}
+ tradeReady(t){
+ var i;
+ return this.trade?this.tradeCall(this.api.tradeReady(this.trade.id,t,this.trade.ver,null==(i=this.posProvider)?void 0:i.call(this))):Promise.resolve("거래가 끝났어요")}
+ tradeCancel(){
+ return this.trade?this.tradeCall(this.api.tradeCancel(this.trade.id)):Promise.resolve(null)}
+ tradeEmote(t){
+ return this.trade?this.tradeCall(this.api.tradeEmote(this.trade.id,t)):Promise.resolve(null)}
+ now(){
+ return Date.now()+this.offset}
+ realNow(){
+ var t;
+ return this.now()-((null==(t=this.state)?void 0:t.devOffset)??0)}
+ eventDay(){
+ return Math.floor((this.now()-this.state.startAt)/864e5)+1}
+ currentBite(){
+ var t;
+ const i=null==(t=this.state)?void 0:t.seq;
+ return i?VTi(i,this.state.gear.reel,this.state.devSpeed,this.now(),this.hookedKs()):null}
+ biteOpen(){
+ if(this.netFull()||this.boatProblem())return null;
+ const t=this.currentBite();
+ if(!t||t.k===this.hooked.k&&this.state.seq.castAt===this.hooked.castAt)return null;
+ const i=this.now();
+ return i>=t.at&&i<t.at+rAi?{
+ k:t.k,left:t.at+rAi-i}
+ :null}
+ biteIn(){
+ const t=this.currentBite();
+ return t?t.at-this.now():1/0}
+ idleLeft(){
+ const t=this.state.seq;
+ return Math.max(1,Math.ceil(t.need-t.prog))}
+ async cast(){
+ var t;
+ return(await this.call(this.api.cast(null==(t=this.posProvider)?void 0:t.call(this)))).message}
+ hookable(){
+ if(this.netFull())return null;
+ const t=this.currentBite();
+ if(!t)return null;
+ const i=this.state.seq;
+ return jTi(t,i.k,this.now(),i.castAt===this.hooked.castAt?this.hooked.k:null)}
+ ticketFish0(t,i){
+ const s=this.ticket;
+ if(!s||this.ticketCast!==i.seq.castAt)return null;
+ const e=t-s.k0;
+ return e>=0&&e<s.fish.length?s.fish[e]:null}
+ async hook(){
+ var t,i,s,e;
+ const n=this.hookable();
+ if(!n)return{
+ message:null}
+ ;
+ const h=this.state.seq;
+ this.hooked={
+ castAt:h.castAt,k:n.k}
+ ;
+ let r=this.ticketFish(n.k);
+ if(!r&&this.ticket&&n.k>=this.ticket.k0+this.ticket.fish.length&&(await this.flushHooks(),this.state.seq.castAt===h.castAt&&(r=this.ticketFish(n.k))),r){
+ const i=RCi(r,ICi(h,n.k,this.state.gear.reel,this.state.devSpeed,this.hookedKs().filter(t=>t<n.k)),this.state.spot,!Object.keys(this.state.dex).length),s=this.localCatch(this.state,i);
+ return this.pending={
+ c:h.castAt,ks:[...(null==(t=this.pending)?void 0:t.c)===h.castAt?this.pending.ks:[],n.k]}
+ ,IIi(this.pending),this.addCatch(i,s),this.planSync(),this.touch(),{
+ message:null,caught:i,isNew:s}
+ }
+ const o=await this.call(this.api.hook(n.k,null==(i=this.posProvider)?void 0:i.call(this)));
+ return o.result&&this.addCatch(o.result.catch,o.result.isNew),{
+ message:o.message,caught:null==(s=o.result)?void 0:s.catch,isNew:null==(e=o.result)?void 0:e.isNew}
+ }
+ get netCap(){
+ return qSi(this.state.gear,kAi(this.state).icebox)}
+ netCount(){
+ return this.state.icebox.length}
+ netFull(){
+ return!!this.state&&this.netCount()>=this.netCap}
+ gearStats(){
+ return kAi(this.state)}
+ netGroups(){
+ return sIi(this.state.icebox).sort((t,i)=>kSi(i.id).star-kSi(t.id).star||i.grade-t.grade||i.value/i.count-t.value/t.count)}
+ netSellable(){
+ let t=0,i=0;
+ for(const s of this.netGroups())this.isQuestFish(s)||(t+=s.count,i+=s.value);
+ return{
+ count:t,gold:i}
+ }
+ aquarium(){
+ const t=this.state.aquarium??{
+ lv:0,fish:[]}
+ ,i=t.lv+1<XOi.AQUARIUM_SLOTS.length?XOi.AQUARIUM_PRICES[t.lv+1]:null;
+ return{
+ lv:t.lv,cap:iIi(t.lv),fish:t.fish,nextPrice:i}
+ }
+ isQuestFish(t){
+ const i=this.quests();
+ return i.reqs.some(s=>!i.done.includes(s.key)&&s.speciesId===t.id&&(t.grade??0)>=(s.minGrade??0))}
+ dexCount(){
+ return Object.keys(this.state.dex).length}
+ records(){
+ let t=0,i=0,s=0,e=null;
+ for(const[n,h]of Object.entries(this.state.dex))t+=h.count,i=Math.max(i,kSi(Number(n)).star),3===uTi(h.bestR)&&s++,(!e||h.bestKg>e.kg)&&(e={
+ id:Number(n),kg:h.bestKg}
+ );
+ return{
+ total:t,heaviest:e,topStar:i,kinds:this.dexCount(),sCount:s}
+ }
+ baitLeftMs(){
+ const t=this.state.bait;
+ return t?Math.max(0,t.until-this.now()):0}
+ todayContest(){
+ var t;
+ return yTi((null==(t=this.social)?void 0:t.enabled)?this.social.day??1:this.eventDay())}
+ contestStanding(){
+ const t=this.state.contest;
+ if(!t)return null;
+ const i=yTi(t.day),s=this.now(),e=Math.min(1,(s-t.startAt)/(t.endAt-t.startAt)),n=s>=t.endAt,h=t.bots.map(t=>({
+ name:t.name,score:n?t.final:OTi(i,t.final,t.pace,e),me:!1}
+ ));
+ return h.push({
+ name:"나",score:t.my,me:!0}
+ ),h.sort((t,i)=>i.score-t.score||(t.me?1:i.me?-1:0)),{
+ rows:h,myRank:h.findIndex(t=>t.me)+1,progress:e,ended:n}
+ }
+ quests(){
+ const t=RTi(this.now()),i=this.state.quests;
+ return this.visitorsOpen()?{
+ ...i&&i.window===t?i:{
+ window:t,reqs:kTi(t,this.state.gear,new Set(Object.keys(this.state.dex).map(Number))),done:[]}
+ ,nextAt:6*(t+1)*36e5}
+ :{
+ window:t,reqs:[],done:[],nextAt:6*(t+1)*36e5}
+ }
+ questHave(t){
+ return this.state.icebox.filter(i=>!i.broken&&i.id===t.speciesId&&i.grade>=(t.minGrade??0)).length}
+ milestoneRows(){
+ const t=this.state,i=this.dexCount();
+ return[...LTi.map((s,e)=>({
+ kind:"dex",idx:e,label:`도감 ${
+ s.need}
+ 종`,progress:i,need:s.need,pearl:s.pearl,claimed:t.milestones.dex.includes(e)}
+ )),...DTi.map((i,s)=>({
+ kind:"sales",idx:s,label:`누적 판매 ${
+ i.need.toLocaleString()}
+  G`,progress:t.sales,need:i.need,pearl:i.pearl,claimed:t.milestones.sales.includes(s)}
+ )),...GTi.map((i,s)=>{
+ var e,n;
+ return{
+ kind:"help",idx:s,label:`배 수리 도움 ${
+ i.need}
+ 번`,progress:(null==(e=t.boat)?void 0:e.helped)??0,need:i.need,pearl:i.pearl,claimed:!!(null==(n=t.milestones.help)?void 0:n.includes(s))}
+ }
+ )]}
+ async awayReport(){
+ return this.state.away||this.state.migratedSold?(await this.call(this.api.awayReport())).result??null:null}
+ async moveTo(t,i,s,e=this.state.spot.depth){
+ var n;
+ this.feed=[];
+ const h={
+ ...this.state.spot}
+ ,r=this.call(this.api.move(t,i,s,e)).then(t=>t.message);
+ return h.race===t&&h.zone===i||null==(n=this.onBigMove)||n.call(this,h,{
+ race:t,zone:i,point:s,depth:e}
+ ,r),r}
+ async setDepth(t){
+ const i=this.state.spot;
+ return(await this.call(this.api.move(i.race,i.zone,i.point,t))).message}
+ async goTo(t){
+ const i=this.state.spot,s=i.race===t.race&&i.zone===t.zone?i.point:-1,e=WTi.pointKnown(`${
+ t.race}
+ |${
+ t.zone}
+ `,t.point,s)?t.point:0;
+ return this.moveTo(t.race,t.zone,e,t.depth)}
+ async sell(t){
+ const i=await this.call(this.api.sell(t.key));
+ return{
+ message:i.message,gold:i.result??0}
+ }
+ async sellAll(){
+ const t=await this.call(this.api.sellAll());
+ return{
+ message:t.message,...t.result??{
+ count:0,gold:0}
+ }
+ }
+ netFish(){
+ return this.state.icebox.filter(t=>!t.broken).sort((t,i)=>kSi(i.id).star-kSi(t.id).star||i.grade-t.grade||i.kg-t.kg)}
+ async sellFish(t){
+ const i=await this.call(this.api.sellFish(t.map(ZOi)));
+ return{
+ message:i.message,...i.result??{
+ count:0,gold:0}
+ }
+ }
+ async aquariumPutFish(t){
+ return(await this.call(this.api.aquariumPutFish(ZOi(t)))).message}
+ async sellKeys(t){
+ const i=await this.call(this.api.sellKeys(t));
+ return{
+ message:i.message,...i.result??{
+ count:0,gold:0}
+ }
+ }
+ async aquariumPut(t){
+ return(await this.call(this.api.aquariumPut(t.key))).message}
+ async aquariumTake(t){
+ return(await this.call(this.api.aquariumTake(t))).message}
+ async aquariumExpand(){
+ return(await this.call(this.api.aquariumExpand())).message}
+ async upgrade(t){
+ return(await this.call(this.api.upgrade(t))).message}
+ async buy(t){
+ return(await this.call(this.api.buy(t.id))).message}
+ async exchange(t,i){
+ var s;
+ const e=null==(s=this.season)?void 0:s.id;
+ return null==e?"지금은 바꿀 수 없어요":(await this.call(this.api.exchange(e,this.state.exchangeRev??0,t.kindNum,i))).message}
+ exchangeMax(t){
+ var i;
+ const s=(null==(i=this.state.exchange)?void 0:i[String(t.kindNum)])??0,e=null===t.limit?1/0:t.limit-s;
+ return Math.max(0,Math.min(Math.floor(this.state.pearl/t.pearl),e,1e3))}
+ async loadLife(){
+ try{
+ const t=await this.api.life();
+ (null==t?void 0:t.success)&&(this.life=t.body.life)}
+ catch{
+ }
+ }
+ daily(){
+ return vIi(this.state.daily,this.state.dailyUtc?UTi(this.realNow()):this.eventDay())}
+ dailyClaimable(){
+ const t=this.daily();
+ return mIi(t)&&!t.claimed}
+ async claimDaily(){
+ return(await this.call(this.api.dailyClaim(this.daily().day))).message}
+ contestReady(){
+ if(this.socialRewardsReady())return!0;
+ const t=this.contestStanding();
+ return!!(null==t?void 0:t.ended)&&!!this.state.contest&&!this.state.contest.claimed}
+ goalsReady(){
+ return this.milestoneRows().filter(t=>!t.claimed&&t.progress>=t.need).length}
+ visitDeliverable(){
+ const t=this.quests();
+ return t.reqs.some(i=>!t.done.includes(i.key)&&this.questHave(i)>=i.count)}
+ dotsInput(t){
+ return{
+ netFull:this.netFull(),onTank:t,dailyClaimable:!1,contestReady:this.contestReady(),visitDeliverable:this.visitDeliverable(),goalsReady:this.goalsReady(),areaReady:!!this.areaReady()}
+ }
+ qlog(){
+ var t;
+ return(t=this.state).qlog??(t.qlog=fCi())}
+ questHoldMax(){
+ return QTi(this.qlog())}
+ questCtx(){
+ var t;
+ const i=this.now(),s=this.state;
+ return{
+ gear:s.gear,areaClaimed:this.areaClaimed(),contestToday:!!s.contest&&i<s.contest.endAt||Object.values((null==(t=s.social)?void 0:t.scores)??{
+ }
+ ).some(t=>i<t.endAt)}
+ }
+ questOffers(t,i){
+ return ECi(this.qlog(),t,i,this.startRace())}
+ questHeld(){
+ const t=this.qlog(),i=this.questCtx();
+ return t.held.map(t=>gCi(t.id)).filter(t=>!!t).map(s=>({
+ def:s,got:MCi(t,s,i),need:vCi(s),ready:bCi(t,s,i)}
+ ))}
+ questTurnIn(t){
+ return mCi(t,this.startRace())}
+ tracked(){
+ return SCi(this.qlog(),this.trackedId)}
+ track(t){
+ this.trackedId=t;
+ try{
+ t?localStorage.setItem("fishing.trackedQuest",t):localStorage.removeItem("fishing.trackedQuest")}
+ catch{
+ }
+ }
+ async questAccept(t,i,s){
+ const e=(await this.call(this.api.questAccept(t,i,s))).message;
+ return e||this.track(t),e}
+ async questAbandon(t){
+ return(await this.call(this.api.questAbandon(t))).message}
+ async questComplete(t){
+ var i,s;
+ const e=await this.call(this.api.questComplete(t));
+ return{
+ message:e.message,gold:(null==(i=e.result)?void 0:i.gold)??0,pearl:(null==(s=e.result)?void 0:s.pearl)??0}
+ }
+ areaClaimed(){
+ return this.state.milestones.area??[]}
+ areaRows(t,i){
+ return EIi(t,i,this.state.dex,this.areaClaimed())}
+ areaReady(){
+ const t=this.state.spot;
+ return AIi(t.race,t.zone,this.state.dex,this.areaClaimed())}
+ areaNext(){
+ const t=this.state.spot;
+ return SIi(t.race,t.zone,this.state.dex,this.areaClaimed())}
+ async claimArea(t,i,s){
+ var e,n;
+ const h=await this.call(this.api.areaClaim(t,i,s));
+ return{
+ message:h.message,pearl:(null==(e=h.result)?void 0:e.pearl)??0,bonus:(null==(n=h.result)?void 0:n.bonus)??0}
+ }
+ seasonDays(){
+ const t=this.season;
+ return null!=(null==t?void 0:t.startAt)&&null!=t.endAt?Math.ceil((t.endAt-t.startAt)/864e5):null}
+ isLastDay(){
+ var t;
+ const i=null==(t=this.season)?void 0:t.endAt;
+ return null!=i&&"open"===this.phase()&&i-this.realNow()<864e5}
+ socialRewardsReady(){
+ return this.claimableSocialIds().length>0}
+ claimableSocialIds(){
+ var t;
+ return((null==(t=this.social)?void 0:t.rewards)??[]).filter(t=>{
+ var i;
+ return null===t.claimedAt&&t.seasonId===(null==(i=this.season)?void 0:i.id)}
+ ).map(t=>t.id)}
+ async refreshSocial(t=!1){
+ var i;
+ if(!(!(null==(i=this.social)?void 0:i.enabled)||this.socialRefreshing||!t&&Date.now()<this.socialRefreshAt)){
+ this.socialRefreshing=!0,this.socialRefreshAt=Date.now()+1e4;
+ try{
+ const i=await this.call(this.api.socialStatus());
+ i.message&&t&&this.notice(i.message)}
+ catch{
+ t&&this.notice("순위와 보상을 불러오지 못했어요. 잠시 후 다시 눌러 주세요")}
+ finally{
+ this.socialRefreshing=!1}
+ }
+ }
+ async joinSocial(){
+ return(await this.call(this.api.socialJoin())).message}
+ async claimSocial(t){
+ return(await this.call(this.api.socialClaim(t))).message}
+ async prepareHuntAim(){
+ const t=await this.call(this.api.huntPing());
+ if(t.message||!t.result)return{
+ message:t.message??"연결을 확인하지 못했어요"}
+ ;
+ const i=performance.now(),s=await this.api.huntAim(t.result.id),e=performance.now(),n=this.apply(s);
+ if(n.message||!n.result)return{
+ message:n.message??"조준을 준비하지 못했어요"}
+ ;
+ const h=s.body.clock,r=h?(h.receivedAt+h.sentAt)/2:s.body.now;
+ return{
+ message:null,aim:n.result,startPerf:(i+e)/2+n.result.startAt-r}
+ }
+ async huntShot(t){
+ var i,s;
+ let e;
+ try{
+ e=await this.api.huntShot(t,null==(i=this.posProvider)?void 0:i.call(this))}
+ catch{
+ e=await this.api.huntShot(t,null==(s=this.posProvider)?void 0:s.call(this))}
+ return this.apply(e)}
+ async joinContest(){
+ return(await this.call(this.api.joinContest())).message}
+ async claimContest(){
+ return(await this.call(this.api.claimContest())).result??null}
+ async deliver(t){
+ return(await this.call(this.api.deliver(t.key))).message}
+ visitorsOpen(){
+ return qTi}
+ startRace(){
+ const t=this.state.startRace;
+ return t&&uSi.includes(t)?t:"인간"}
+ async claimMilestone(t,i){
+ return(await this.call(this.api.claimMilestone(t,i))).message}
+ tipSeen(t){
+ var i,s,e;
+ return!!(null==(i=this.state)?void 0:i.guideSeen)||!!(null==(e=null==(s=this.state)?void 0:s.tips)?void 0:e.includes(t))||this.seenTips.has(t)}
+ async markTip(t){
+ var i;
+ if(!this.tipSeen(t)){
+ for(const i of"tut"===t?["tut",...BCi]:[t])this.seenTips.add(i);
+ ((i=this.state).tips??(i.tips=[])).push(t),await this.call(this.api.guideSeen(t))}
+ }
+ get look(){
+ var t;
+ return mOi((null==(t=this.state)?void 0:t.look)??null)}
+ get plunder(){
+ var t;
+ return(null==(t=this.state)?void 0:t.plunder)??null}
+ tickets(){
+ return yOi(this.plunder,this.realNow())}
+ async plunderPeek(t){
+ var i;
+ return this.call(this.api.plunderPeek(t,null==(i=this.posProvider)?void 0:i.call(this)))}
+ async plunderStart(t){
+ var i;
+ return(await this.call(this.api.plunderStart(t,null==(i=this.posProvider)?void 0:i.call(this)))).message}
+ async plunderStop(){
+ var t;
+ return this.call(this.api.plunderStop(null==(t=this.posProvider)?void 0:t.call(this)))}
+ async plunderCut(){
+ return(await this.call(this.api.plunderCut())).message}
+ async saveLook(t){
+ return(await this.call(this.api.look(t))).message}
+ emitBoatLogs(){
+ var t,i;
+ const s=(null==(t=this.state.boat)?void 0:t.log)??[];
+ if(this.boatSeenAt<0)return void(this.boatSeenAt=(null==(i=s[0])?void 0:i.at)??0);
+ const e=s.filter(t=>t.at>this.boatSeenAt).reverse();
+ if(e.length){
+ this.boatSeenAt=e[e.length-1].at;
+ for(const t of this.boatListeners)t(e)}
+ }
+ boatHp(){
+ const t=this.state,i=null==t?void 0:t.boat,s=t?iSi(t):XAi(0);
+ return i?{
+ hp:oSi(t,i,this.now()),max:s,fixing:!!i.repairAt,broken:i.broken,endAt:aSi(t,i)}
+ :{
+ hp:s,max:s,fixing:!1,broken:!1,endAt:0}
+ }
+ boatProblem(){
+ var t;
+ const i=null==(t=this.state)?void 0:t.boat;
+ return(null==i?void 0:i.repairAt)?i.broken?"배가 고장 나서 고치는 중이에요":"배를 고치는 중이에요":null}
+ helpPts(){
+ return cSi(this.state,this.now())}
+ async boatRepair(t){
+ var i;
+ return(await this.call(this.api.boatRepair(t,null==(i=this.posProvider)?void 0:i.call(this)))).message}
+ async boatHelp(t){
+ var i;
+ return this.call(this.api.boatHelp(t,null==(i=this.posProvider)?void 0:i.call(this)))}
+ harpoons(){
+ return VOi(this.state)}
+ async huntCraft(t,i){
+ return this.call(this.api.huntCraft(t,i))}
+ async huntUse(t){
+ return(await this.call(this.api.huntUse(t))).message}
+ async huntThrow(t){
+ var i;
+ return this.call(this.api.huntThrow(t,null==(i=this.posProvider)?void 0:i.call(this)))}
+ async huntStatus(){
+ const t=await this.api.huntStatus();
+ return(null==t?void 0:t.success)?t.body:null}
+ async gearPull(t){
+ return this.call(this.api.gearPull(t))}
+ async gearMerge(t,i){
+ return this.call(this.api.gearMerge(t,i))}
+ async gearMergeAll(){
+ return this.call(this.api.gearMerge(null,null,!0))}
+ async gearMergeGroups(t){
+ return this.call(this.api.gearMergeGroups(t))}
+ async gearKeep(t,i){
+ return(await this.call(this.api.gearKeep(t,i))).message}
+ async gearEquip(t){
+ return(await this.call(this.api.gearEquip(t))).message}
+ async gearUnequip(t){
+ return(await this.call(this.api.gearEquip(null,t))).message}
+ async gearEquipBest(){
+ const t=await this.call(this.api.gearEquipBest());
+ return{
+ message:t.message,n:t.result??0}
+ }
+ async devGear(){
+ return t.devProblem((await this.call(this.api.dev("gearFill"))).message)}
+ async devNetFill(){
+ return t.devProblem((await this.call(this.api.dev("netFill"))).message)}
+ async devHunt(i){
+ const s=await this.call(this.api.dev(i));
+ return t.devProblem(s.message)}
+ async devBoatTest(i,s=[]){
+ var e;
+ const n=await this.call(this.api.dev(i,{
+ spots:s}
+ ));
+ return await this.call(this.api.sync(null==(e=this.posProvider)?void 0:e.call(this))),t.devProblem(n.message)}
+ async devSpeed(){
+ await this.call(this.api.dev("speed"))}
+ async devSkipDay(){
+ await this.call(this.api.dev("day")),await this.call(this.api.sync())}
+ async devQuest(){
+ return t.devProblem((await this.call(this.api.dev("quest"))).message)}
+ async devArea(){
+ return t.devProblem((await this.call(this.api.dev("area"))).message)}
+ async devBoat(){
+ return t.devProblem((await this.call(this.api.dev("boat"))).message)}
+ async devSkipTide(){
+ const i=t.devProblem((await this.call(this.api.dev("tide"))).message);
+ return i||await this.call(this.api.sync()),i}
+ static devProblem(t){
+ return t?t.includes("없는 개발 도구")?"서버가 예전 빌드예요 · ef2_server 를 다시 빌드·재시작해 주세요":t:null}
+ async devAddGold(){
+ await this.call(this.api.dev("gold"))}
+ async devEndContest(){
+ await this.call(this.api.dev("endContest"))}
+ async devContestDay(i){
+ return t.devProblem((await this.call(this.api.dev("contestDay",{
+ day:i}
+ ))).message)}
+ async devBots(t){
+ var i;
+ const s=await this.call(this.api.dev("bots",{
+ spots:t}
+ ));
+ return await this.call(this.api.sync(null==(i=this.posProvider)?void 0:i.call(this))),s.result??0}
+ async devReset(){
+ this.pending=null,IIi(null);
+ const i=t.devProblem((await this.call(this.api.dev("reset"))).message);
+ if(i)return i;
+ try{
+ for(const t of NCi(Object.keys(localStorage),EG.userId))localStorage.removeItem(t)}
+ catch{
+ }
+ try{
+ sessionStorage.setItem("ef2_fishing_reopen","1")}
+ catch{
+ }
+ return window.location.reload(),null}
+ async devPlunder(i,s=[]){
+ var e;
+ const n=await this.call(this.api.dev(i,{
+ spots:s}
+ ));
+ return await this.call(this.api.sync(null==(e=this.posProvider)?void 0:e.call(this))),t.devProblem(n.message)}
+ }
+ ;
+ Qt(kIi,"FishingDataManager"),Zt(kIi,"instance"),Zt(kIi,"phaseRank",{
+ ask:0,open:1,done:2,gone:2}
+ );
+ let RIi=kIi;
+ const xIi={
+ luck:'<path d="M12 12c-2.5-4.5-6.5-3-5.5 0 .8 2.4 5.5 0 5.5 0zm0 0c4.5-2.5 3-6.5 0-5.5-2.4.8 0 5.5 0 5.5zm0 0c2.5 4.5 6.5 3 5.5 0-.8-2.4-5.5 0-5.5 0zm0 0c-4.5 2.5-3 6.5 0 5.5 2.4-.8 0-5.5 0-5.5z"/><path d="M13 14l4 6"/>',hp:'<path d="M12 20s-7-4.4-7-9.5A4 4 0 0 1 12 8a4 4 0 0 1 7 2.5C19 15.6 12 20 12 20z"/>',armor:'<path d="M12 3l7 3v6c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6z"/>',repair:'<path d="M14.5 6.5a4 4 0 0 0-5.3 5.3L4 17l3 3 5.2-5.2a4 4 0 0 0 5.3-5.3l-2.6 2.6-2.4-.6-.6-2.4z"/>',speed:'<path d="M3 8h11a3 3 0 1 0-3-3M3 12h15a3 3 0 1 1-3 3M3 16h7"/>',aim:'<circle cx="12" cy="12" r="7"/><circle cx="12" cy="12" r="2.5"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3"/>',power:'<path d="M4 20L18 6M18 6l-1-3 4 1-1 3zM8 14l-3-1M10 16l1 3"/>',steal:'<path d="M7 11V6a1.5 1.5 0 0 1 3 0v4M10 10V4.5a1.5 1.5 0 0 1 3 0V10M13 10V5.5a1.5 1.5 0 0 1 3 0V12M16 9a1.5 1.5 0 0 1 3 0v5a6 6 0 0 1-6 6h-1a6 6 0 0 1-5-2.7L4 13.5a1.5 1.5 0 0 1 2.6-1.5L7 13"/>',icebox:'<path d="M4 6h16l-2 13H6zM4 6l4 13M20 6l-4 13M12 6v13M5 10.5h14M5.6 15h12.8"/>',big:'<path d="M3 12c3-5 9-6 13-2l5-3-1 5 1 5-5-3c-4 4-10 3-13-2z"/><circle cx="8" cy="11" r="1"/>',star:'<path d="M12 3l2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1-4.4-4.3 6.1-.9z"/>',protect:'<rect x="5" y="11" width="14" height="9" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3"/>',lock:'<rect x="5" y="11" width="14" height="9" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3"/>',map:'<path d="M9 4L3 6v14l6-2 6 2 6-2V4l-6 2z"/><path d="M9 4v14M15 6v14"/>',line:'<path d="M6 4h12M6 20h12M8 4v16M16 4v16M8 9h8M8 14h8"/>',clock:'<circle cx="12" cy="12" r="8"/><path d="M12 7v5l3 2"/>',moon:'<path d="M20 14.5A8 8 0 0 1 9.5 4a8 8 0 1 0 10.5 10.5z"/>',weight:'<path d="M8.5 9a3.5 3.5 0 1 1 7 0"/><path d="M6 9.5h12l2 10H4z"/>',ruler:'<rect x="3" y="8" width="18" height="8" rx="1.5"/><path d="M7 8v3M10.5 8v4.5M14 8v3M17.5 8v4.5"/>',pin:'<path d="M12 21s-6-6-6-10.5a6 6 0 0 1 12 0C18 15 12 21 12 21z"/><circle cx="12" cy="10.5" r="2"/>',shield:'<path d="M12 3l7 3v6c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6z"/><path d="M9 12l2.2 2.2L15 10"/>',trophy:'<path d="M8 4h8v5a4 4 0 0 1-8 0zM8 6H5c0 2.5 1.3 3.8 3 4M16 6h3c0 2.5-1.3 3.8-3 4M12 13v4M9 20h6"/>',depth:'<path d="M3 6.5c1.5-1.2 3-1.2 4.5 0s3 1.2 4.5 0 3-1.2 4.5 0 3 1.2 4.5 0"/><path d="M12 10v10M8.5 16.5L12 20l3.5-3.5"/>'}
+ ,PIi=Qt(t=>`#${
+ t.toString(16).padStart(6,"0")}
+ `,"hex");
+ function NIi(t,i,s,e=2.2){
+ const n=(new ip).svg(`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="${
+ PIi(s)}
+ " stroke-width="${
+ e}
+ " stroke-linecap="round" stroke-linejoin="round">${
+ xIi[t]}
+ </g></svg>`);
+ return n.scale.set(i/24),n.eventMode="none",n}
+ Qt(NIi,"lineIcon");
+ const LIi=723725,DIi=1644829,GIi=2368554,BIi=3158071,UIi=4013379,FIi=3158071,$Ii=3881795,HIi=.62,WIi=3815998,VIi=16106577,jIi=2825477,KIi=15921908,zIi=10592678,YIi=7237235,qIi=8378016,XIi=16751752,JIi=15262964,QIi=921104,ZIi=3813926,tki=2763309,iki=8158338,ski=[3815998,10135467,6142819,4886754,10513640,15901498,16734815],eki=[0,7315384,15247664,16732013],nki={
+ corner:"right"}
+ ,hki={
+ "인간":12862767,"엘프":4165445,"언데드":8082856,"오크":3108787}
+ ;
+ function rki(t,i=KIi,s=16,e=!0){
+ const n=new QD(t,i,{
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:s,lineHeight:Math.round(1.3*s),fontWeight:e?"bolder":"normal"}
+ );
+ return n.eventMode="none",n}
+ function oki(t,i){
+ t.scale.set(1),t.scale.set(Math.min(1,i/Math.max(1,t.width)))}
+ function aki(t,i,s=2368554,e=3815998,n=12){
+ const h=new ip;
+ return null===e?h.roundRect(0,0,t,i,n).fill(s):h.roundRect(.5,.5,t-1,i-1,n).fill(s).stroke({
+ color:e,width:1}
+ ),h.eventMode="none",h}
+ Qt(rki,"label"),Qt(oki,"fitLabel"),Qt(aki,"panel");
+ const cki=class extends Ve{
+ constructor(t,i=!1,s=!1){
+ super(),Zt(this,"bg",new ip),Zt(this,"icon",new Ye),Zt(this,"band",new ip),Zt(this,"stars",rki("",VIi,11)),Zt(this,"marks",new Ve),Zt(this,"fade",1),Zt(this,"unknown",!1),Zt(this,"badge",new Ve),Zt(this,"badgeBg",new ip),Zt(this,"badgeText",rki("",16777215,12)),Zt(this,"starsAlways",!1),Zt(this,"mystery",rki("?",zIi,16)),this.size=t,this.minimal=i,this.banded=s,this.eventMode="none",this.icon.anchor.set(.5),this.mystery.visible=!1,this.band.eventMode="none",this.marks.eventMode="none",this.badge.addChild(this.badgeBg,this.badgeText),this.addChild(this.bg,this.icon,this.mystery,this.band,this.stars,this.badge,this.marks)}
+ set(t,i,s=0,e=!1){
+ const n=this.size,h=e?ski[0]:ski[Math.min(5,i)],r=Math.max(2,.05*n),o=n*(this.minimal?.12:.2);
+ this.bg.clear();
+ const a=e&&null!==t?UIi:QIi;
+ if(this.minimal?this.bg.roundRect(0,0,n,n,o).fill(a):this.bg.roundRect(0,0,n,n,o).fill(h).roundRect(r,r,n-2*r,n-2*r,Math.max(1,o-r)).fill(a),this.icon.visible=null!==t,this.mystery.visible=null===t&&i>0,this.mystery.visible&&(this.mystery.textSize=Math.round(.42*n),this.mystery.position.set((n-this.mystery.width)/2,.43*n-this.mystery.height/2)),this.unknown=e,null!==t){
+ this.icon.texture=nAi.fish(t);
+ const i=n*(this.banded?.7:.8)/100;
+ this.icon.scale.set(i),this.icon.position.set(n/2,n*(this.banded?.41:.46)),this.icon.tint=e?0:16777215}
+ if(this.stars.visible=(n>=40||this.starsAlways)&&(e||i>0),this.stars.text=e?"?":MTi(i),this.stars.textColor=e?YIi:VIi,this.band.clear(),this.banded&&this.stars.visible){
+ const t=Math.round(.22*n),i=r,s=n-r,e=n-r-t,h=n-r,a=Math.max(1,o-r);
+ this.band.moveTo(i,e).lineTo(s,e).lineTo(s,h-a).arcTo(s,h,s-a,h,a).lineTo(i+a,h).arcTo(i,h,i,h-a,a).closePath().fill({
+ color:0,alpha:.5}
+ ),this.stars.textSize=Math.max(9,Math.round(.15*n)),oki(this.stars,n-2*r-4),this.stars.position.set((n-this.stars.width)/2,e+(t-this.stars.height)/2)}
+ else this.stars.textSize=Math.max(9,Math.round(.16*n)),oki(this.stars,n-6),this.stars.position.set((n-this.stars.width)/2,n-this.stars.height-1);
+ const c=e?0:s??0;
+ if(this.badge.visible=c>=1,c>=1){
+ const t=Math.max(13,Math.round(.26*n)),i=eki[c],s=2;
+ this.badgeBg.clear(),3===c&&this.badgeBg.roundRect(-s,-s,t+2*s,t+2*s,.36*t).fill({
+ color:i,alpha:.35}
+ ),this.badgeBg.roundRect(0,0,t,t,.3*t).fill(i),this.badgeText.text=aTi[c],this.badgeText.textSize=Math.round(.66*t),this.badgeText.position.set((t-this.badgeText.width)/2,(t-this.badgeText.height)/2);
+ const e=Math.ceil(r)+s+1;
+ this.badge.position.set("left"===nki.corner?e:n-t-e,e)}
+ this.applyFade()}
+ setFade(t){
+ this.fade=t,this.applyFade()}
+ applyFade(){
+ for(const t of[this.bg,this.mystery,this.band,this.stars,this.badge])t.alpha=this.fade;
+ this.icon.alpha=(this.unknown?.8:1)*this.fade}
+ setMark(t,i=1644829){
+ if(this.marks.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),!t)return;
+ const s=Math.max(9,Math.round(.15*this.size)),e=s-4,n=(new ip).circle(e,e,s+2).fill(i).circle(e,e,s).fill("on"===t?VIi:"lock"===t?3816e3:3116890);
+ if("on"===t&&n.moveTo(e-.45*s,e).lineTo(e-.1*s,e+.35*s).lineTo(e+.5*s,e-.35*s).stroke({
+ color:jIi,width:Math.max(2,.26*s),cap:"round",join:"round"}
+ ),"quest"===t&&n.roundRect(e-.13*s,e-.58*s,.26*s,.7*s,.13*s).fill(15400945).circle(e,e+.42*s,.15*s).fill(15400945),this.marks.addChild(n),"lock"===t){
+ const t=NIi("lock",1.2*s,13092812,2.6);
+ t.position.set(e-.6*s,e-.62*s),this.marks.addChild(t)}
+ }
+ }
+ ;
+ Qt(cki,"FishCard");
+ let lki=cki;
+ const uki=class extends Ve{
+ constructor(t,i,s=34,e=14){
+ super(),Zt(this,"bg",new ip),Zt(this,"text"),Zt(this,"onTap",null),Zt(this,"w",0),Zt(this,"h",0),Zt(this,"selected",!1),Zt(this,"enabled",!0),Zt(this,"value"),Zt(this,"soft",!1),Zt(this,"dot",null),Zt(this,"dotG",new ip),this.value=t,this.text=rki(t,zIi,e),this.dotG.eventMode="none",this.addChild(this.bg,this.dotG,this.text),this.eventMode="static",this.cursor="pointer",this.on("pointertap",t=>{
+ var i;
+ t.stopPropagation(),this.enabled&&(null==(i=this.onTap)||i.call(this))}
+ ),this.resize(i,s)}
+ resize(t,i){
+ this.w=t,this.h=i,this.hitArea=new Ui(0,0,t,i),this.draw()}
+ setText(t){
+ this.text.text=t,this.draw()}
+ draw(){
+ const{
+ w:t,h:i}
+ =this,s=this.soft?this.selected?ZIi:GIi:this.selected?VIi:BIi;
+ this.bg.clear().roundRect(0,0,t,i,Math.min(9,i/2)).fill(s),this.text.textColor=this.soft?this.selected?VIi:this.enabled?zIi:YIi:this.selected?jIi:this.enabled?KIi:YIi;
+ const e=null!==this.dot?16:0;
+ oki(this.text,t-12-e);
+ const n=(t-this.text.width-e)/2;
+ this.dotG.clear(),null!==this.dot&&this.dotG.circle(n+4.5,i/2,4.5).fill(this.dot),this.text.position.set(n+e,(i-this.text.height)/2),this.alpha=this.enabled?1:.55}
+ }
+ ;
+ Qt(uki,"Chip");
+ let dki=uki;
+ const fki=class extends Ve{
+ constructor(t,i,s=44,e=15){
+ super(),Zt(this,"bg",new ip),Zt(this,"text"),Zt(this,"onTap",null),Zt(this,"w"),Zt(this,"h"),Zt(this,"primary",!0),Zt(this,"_enabled",!0),this.w=i,this.h=s,this.text=rki(t,jIi,e),this.addChild(this.bg,this.text),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ui(0,0,i,s),this.on("pointerdown",()=>{
+ this._enabled&&this.scale.set(.96)}
+ ),this.on("pointerup",()=>this.scale.set(1)),this.on("pointerupoutside",()=>this.scale.set(1)),this.on("pointertap",t=>{
+ var i;
+ t.stopPropagation(),this._enabled&&(null==(i=this.onTap)||i.call(this))}
+ ),this.draw()}
+ set enabled(t){
+ this._enabled=t,this.draw()}
+ get enabled(){
+ return this._enabled}
+ setText(t){
+ this.text.text=t,this.draw()}
+ draw(){
+ const t=this._enabled,i=t?this.primary?VIi:UIi:tki;
+ this.bg.clear().roundRect(0,0,this.w,this.h,9).fill(i),this.text.textColor=t?this.primary?jIi:KIi:iki,oki(this.text,this.w-12),this.text.position.set((this.w-this.text.width)/2,(this.h-this.text.height)/2)}
+ setPrimary(t){
+ this.primary=t,this.draw()}
+ }
+ ;
+ Qt(fki,"FButton");
+ let pki=fki;
+ function gki(t,i,s){
+ const e=t.charCodeAt(t.length-1);
+ return e<44032||e>55203?`${
+ t}
+ ${
+ i}
+ (${
+ s}
+ )`:`${
+ t}
+ ${
+ (e-44032)%28?i:s}
+ `}
+ function wki(t,i){
+ const s=new Ve,e=i/2,n=Math.max(1.5,.06*i);
+ s.eventMode="none";
+ const h=(new ip).circle(e,e,e).fill(2372155),r=new Ye(t);
+ r.width=r.height=i-2*n,r.position.set(n,n);
+ const o=(new ip).circle(e,e,e-n).fill(16777215);
+ r.mask=o;
+ const a=(new ip).circle(e,e,e-n/2).stroke({
+ color:15984328,width:n}
+ );
+ return s.addChild(h,r,o,a),s}
+ function mki(t,i,s,e=11,n=6){
+ const h=new Ve,r=rki(t,i,e),o=new ip;
+ return o.roundRect(0,0,r.width+2*n,r.height+2,(r.height+2)/2).fill(s),r.position.set(n,1),h.addChild(o,r),h.eventMode="none",h}
+ function vki(t,i,s,e,n,h,r=VIi,o=3158071){
+ t.roundRect(i,s,e,n,n/2).fill(o);
+ const a=e*Math.max(0,Math.min(1,h));
+ return a>.5&&t.roundRect(i,s,Math.max(n,a),n,n/2).fill(r),t}
+ function _ki(t,i=22){
+ const s=new ip;
+ return"gold"===t?s.circle(i/2,i/2,i/2).fill(14723118).circle(i/2,i/2,.34*i).fill(16106577).circle(.4*i,.38*i,.1*i).fill(16774870):s.circle(i/2,i/2,i/2).fill(12433110).circle(i/2,i/2,.42*i).fill(JIi).circle(.38*i,.36*i,.12*i).fill(16777215),s.eventMode="none",s}
+ function Mki(t){
+ const i=Math.max(0,Math.floor(t/1e3)),s=Math.floor(i/3600),e=Math.floor(i%3600/60),n=i%60;
+ return s>0?`${
+ s}
+ :${
+ String(e).padStart(2,"0")}
+ :${
+ String(n).padStart(2,"0")}
+ `:`${
+ e}
+ :${
+ String(n).padStart(2,"0")}
+ `}
+ Qt(gki,"josa$1"),Qt(wki,"faceBadge"),Qt(mki,"pill"),Qt(vki,"drawBar"),Qt(_ki,"coinIcon"),Qt(Mki,"formatTime");
+ const bki=Qt(t=>{
+ const i=new Date(t-1);
+ return`${
+ i.getMonth()+1}
+ 월 ${
+ i.getDate()}
+ 일`}
+ ,"seasonDateText");
+ function yki(t,i,s,e=16106577){
+ const n=new ip;
+ n.eventMode="none";
+ const h=i,r=Math.max(1.4,.085*h),o={
+ color:s,width:r,cap:"round",join:"round"}
+ ;
+ switch(t){
+ case"hook":n.circle(.6*h,.14*h,.07*h).stroke(o).moveTo(.6*h,.21*h).lineTo(.6*h,.62*h).arc(.43*h,.62*h,.17*h,0,Math.PI).lineTo(.26*h,.5*h).lineTo(.35*h,.56*h).stroke(o);
+ break;
+ case"toolbox":n.roundRect(.12*h,.36*h,.76*h,.46*h,.07*h).stroke(o).moveTo(.36*h,.36*h).lineTo(.36*h,.2*h).lineTo(.64*h,.2*h).lineTo(.64*h,.36*h).stroke(o).moveTo(.12*h,.54*h).lineTo(.88*h,.54*h).stroke(o).roundRect(.44*h,.49*h,.12*h,.1*h,.02*h).fill(s);
+ break;
+ case"bowl":n.moveTo(.3*h,.18*h).lineTo(.7*h,.18*h).stroke(o).moveTo(.33*h,.2*h).bezierCurveTo(.02*h,.36*h,.1*h,.86*h,.5*h,.86*h).bezierCurveTo(.9*h,.86*h,.98*h,.36*h,.67*h,.2*h).stroke(o).moveTo(.2*h,.4*h).lineTo(.8*h,.4*h).stroke({
+ ...o,width:.6*r,alpha:.6}
+ ).ellipse(.47*h,.6*h,.13*h,.08*h).fill(s).poly([.58*h,.6*h,.7*h,.52*h,.7*h,.68*h]).fill(s);
+ break;
+ case"trophy":n.moveTo(.26*h,.16*h).lineTo(.74*h,.16*h).lineTo(.7*h,.42*h).bezierCurveTo(.66*h,.58*h,.34*h,.58*h,.3*h,.42*h).closePath().stroke(o).moveTo(.26*h,.22*h).bezierCurveTo(.06*h,.22*h,.1*h,.46*h,.3*h,.44*h).stroke(o).moveTo(.74*h,.22*h).bezierCurveTo(.94*h,.22*h,.9*h,.46*h,.7*h,.44*h).stroke(o).moveTo(.5*h,.58*h).lineTo(.5*h,.72*h).stroke(o).roundRect(.3*h,.72*h,.4*h,.12*h,.03*h).stroke(o);
+ break;
+ case"stall":n.moveTo(.12*h,.34*h).lineTo(.2*h,.14*h).lineTo(.8*h,.14*h).lineTo(.88*h,.34*h).stroke(o),n.moveTo(.12*h,.34*h);
+ for(let t=0;
+ t<4;
+ t++)n.arc(h*(.215+.19*t),.34*h,.095*h,Math.PI,0,!0);
+ n.stroke(o).moveTo(.18*h,.44*h).lineTo(.18*h,.84*h).lineTo(.82*h,.84*h).lineTo(.82*h,.44*h).stroke(o).rect(.4*h,.58*h,.2*h,.26*h).stroke(o);
+ break;
+ case"boat":n.moveTo(.08*h,.62*h).lineTo(.92*h,.62*h).lineTo(.76*h,.84*h).lineTo(.24*h,.84*h).closePath().fill(s).moveTo(.5*h,.62*h).lineTo(.5*h,.1*h).stroke(o).poly([.55*h,.14*h,.84*h,.52*h,.55*h,.52*h]).fill(e).poly([.45*h,.24*h,.45*h,.52*h,.24*h,.52*h]).fill({
+ color:s,alpha:.7}
+ );
+ break;
+ case"spool":n.roundRect(.18*h,.14*h,.64*h,.1*h,.03*h).fill(s).roundRect(.18*h,.76*h,.64*h,.1*h,.03*h).fill(s).rect(.28*h,.24*h,.44*h,.52*h).fill({
+ color:e,alpha:.9}
+ );
+ for(let t=0;
+ t<5;
+ t++)n.moveTo(.28*h,h*(.3+.1*t)).lineTo(.72*h,h*(.26+.1*t));
+ n.stroke({
+ color:0,width:Math.max(1,.03*h),alpha:.25}
+ );
+ break;
+ case"rod":n.moveTo(.14*h,.88*h).quadraticCurveTo(.5*h,.36*h,.9*h,.1*h).stroke(o).moveTo(.9*h,.1*h).quadraticCurveTo(.98*h,.44*h,.86*h,.62*h).stroke({
+ ...o,width:.5*r,alpha:.8}
+ ).circle(.34*h,.66*h,.1*h).fill(e).moveTo(.14*h,.88*h).lineTo(.26*h,.74*h).stroke({
+ ...o,width:1.8*r}
+ );
+ break;
+ case"autorod":n.moveTo(.2*h,.9*h).lineTo(.34*h,.56*h).lineTo(.48*h,.9*h).stroke(o).moveTo(.3*h,.66*h).quadraticCurveTo(.56*h,.3*h,.9*h,.1*h).stroke(o).circle(.72*h,.7*h,.13*h).fill(e).circle(.72*h,.7*h,.05*h).fill(1184276);
+ for(let t=0;
+ t<6;
+ t++){
+ const i=t/6*Math.PI*2;
+ n.rect(.72*h+Math.cos(i)*h*.15-.03*h,.7*h+Math.sin(i)*h*.15-.03*h,.06*h,.06*h).fill(e)}
+ break;
+ case"reel":n.circle(.46*h,.54*h,.3*h).stroke(o).circle(.46*h,.54*h,.12*h).fill(e).moveTo(.46*h,.54*h).lineTo(.8*h,.2*h).stroke(o).circle(.82*h,.18*h,.07*h).fill(s).moveTo(.2*h,.86*h).lineTo(.72*h,.86*h).stroke(o);
+ break;
+ case"bobber":n.moveTo(.5*h,.04*h).lineTo(.5*h,.22*h).stroke(o).moveTo(.5*h,.78*h).lineTo(.5*h,.96*h).stroke(o).ellipse(.5*h,.5*h,.2*h,.3*h).fill(15921382).poly(Array.from({
+ length:13}
+ ,(t,i)=>Math.PI+i/12*Math.PI).flatMap(t=>[.5*h+Math.cos(t)*h*.2,.5*h+Math.sin(t)*h*.3])).fill(15226687).ellipse(.5*h,.5*h,.2*h,.3*h).stroke({
+ ...o,width:.6*r}
+ );
+ break;
+ case"keepnet":{
+ const t=[[.5,.2,.36,.09],[.5,.5,.3,.08],[.5,.8,.24,.07]];
+ for(let i=0;
+ i<2;
+ i++){
+ const[s,e,r]=t[i],[o,a,c]=t[i+1];
+ for(const t of[-1,-.33,.33,1])n.moveTo(h*(s+r*t),h*e).lineTo(h*(o+c*t),h*a)}
+ n.stroke({
+ color:s,width:.5*r,alpha:.75}
+ );
+ for(const[i,s,e,r]of t)n.ellipse(h*i,h*s,h*e,h*r).stroke(o);
+ n.poly([.62*h,.16*h,.8*h,.02*h,.84*h,.2*h]).fill(e);
+ break}
+ case"shrimp":n.moveTo(.78*h,.3*h).bezierCurveTo(.72*h,.9*h,.2*h,.86*h,.22*h,.52*h).stroke({
+ ...o,width:.2*h,color:15698538}
+ ).moveTo(.8*h,.28*h).lineTo(.92*h,.08*h).moveTo(.76*h,.26*h).lineTo(.62*h,.06*h).stroke({
+ ...o,width:.5*r,color:15698538}
+ ).poly([.2*h,.5*h,.06*h,.36*h,.1*h,.6*h]).fill(15698538).circle(.72*h,.34*h,.04*h).fill(1776411);
+ break;
+ case"shell":n.moveTo(.5*h,.86*h).lineTo(.1*h,.46*h).arc(.5*h,.46*h,.4*h,Math.PI,0).lineTo(.5*h,.86*h).fill(15849399);
+ for(let t=0;
+ t<5;
+ t++){
+ const i=Math.PI+(t+.5)*(Math.PI/5);
+ n.moveTo(.5*h,.84*h).lineTo(.5*h+Math.cos(i)*h*.36,.46*h+Math.sin(i)*h*.36)}
+ n.stroke({
+ color:11897441,width:.6*r,cap:"round"}
+ );
+ break;
+ case"lure":n.ellipse(.46*h,.46*h,.3*h,.16*h).fill(10148330).poly([.74*h,.46*h,.92*h,.3*h,.92*h,.62*h]).fill(10148330).ellipse(.4*h,.42*h,.14*h,.05*h).fill({
+ color:16777215,alpha:.8}
+ ).circle(.26*h,.44*h,.035*h).fill(1776411).moveTo(.46*h,.62*h).lineTo(.46*h,.8*h).arc(.38*h,.8*h,.08*h,0,Math.PI).stroke({
+ ...o,width:.6*r,color:14212576}
+ );
+ break;
+ case"bigbait":n.moveTo(.14*h,.7*h).bezierCurveTo(.3*h,.3*h,.5*h,.9*h,.66*h,.5*h).bezierCurveTo(.74*h,.3*h,.84*h,.34*h,.88*h,.44*h).stroke({
+ ...o,width:.16*h,color:14256800}
+ ).star(.74*h,.2*h,5,.14*h,.06*h).fill(e);
+ break;
+ case"map":n.poly([.1*h,.22*h,.36*h,.14*h,.64*h,.24*h,.9*h,.16*h,.9*h,.78*h,.64*h,.86*h,.36*h,.76*h,.1*h,.84*h]).fill(15325096).moveTo(.36*h,.14*h).lineTo(.36*h,.76*h).moveTo(.64*h,.24*h).lineTo(.64*h,.86*h).stroke({
+ color:11901794,width:.5*r}
+ ).moveTo(.44*h,.42*h).lineTo(.56*h,.56*h).moveTo(.56*h,.42*h).lineTo(.44*h,.56*h).stroke({
+ color:13780270,width:.8*r,cap:"round"}
+ );
+ break;
+ case"people":n.circle(.36*h,.34*h,.14*h).fill(s).moveTo(.1*h,.86*h).bezierCurveTo(.1*h,.52*h,.62*h,.52*h,.62*h,.86*h).fill(s).circle(.68*h,.3*h,.12*h).fill({
+ color:s,alpha:.65}
+ ).moveTo(.5*h,.56*h).bezierCurveTo(.62*h,.46*h,.92*h,.5*h,.92*h,.82*h).lineTo(.66*h,.82*h).fill({
+ color:s,alpha:.65}
+ );
+ break;
+ case"pin":n.moveTo(.5*h,.92*h).bezierCurveTo(.2*h,.6*h,.16*h,.46*h,.16*h,.38*h).arc(.5*h,.38*h,.34*h,Math.PI,0).bezierCurveTo(.84*h,.46*h,.8*h,.6*h,.5*h,.92*h).fill(s).circle(.5*h,.38*h,.13*h).fill(1184276);
+ break;
+ case"clock":n.circle(.5*h,.5*h,.38*h).stroke(o).moveTo(.5*h,.5*h).lineTo(.5*h,.26*h).moveTo(.5*h,.5*h).lineTo(.68*h,.6*h).stroke(o);
+ break;
+ case"check":n.moveTo(.18*h,.52*h).lineTo(.42*h,.76*h).lineTo(.84*h,.26*h).stroke({
+ ...o,width:1.4*r}
+ )}
+ return n}
+ function Eki(t,i){
+ const s=new ip;
+ s.eventMode="none";
+ const e=i,[n,h,r]=t<=0?[3815998,3815998,3815998]:1===t?[15907131,16769674,12156183]:2===t?[13226712,16054522,9082783]:[13666900,15841677,9590320];
+ return s.moveTo(.24*e,.1*e).lineTo(.76*e,.1*e).lineTo(.72*e,.4*e).bezierCurveTo(.68*e,.58*e,.32*e,.58*e,.28*e,.4*e).closePath().fill(n).moveTo(.24*e,.16*e).bezierCurveTo(.02*e,.16*e,.06*e,.44*e,.3*e,.44*e).stroke({
+ color:r,width:.06*e,cap:"round"}
+ ).moveTo(.76*e,.16*e).bezierCurveTo(.98*e,.16*e,.94*e,.44*e,.7*e,.44*e).stroke({
+ color:r,width:.06*e,cap:"round"}
+ ).rect(.45*e,.56*e,.1*e,.16*e).fill(r).roundRect(.28*e,.72*e,.44*e,.14*e,.03*e).fill(n).roundRect(.34*e,.14*e,.08*e,.28*e,.04*e).fill({
+ color:h,alpha:.85}
+ ),s}
+ function Aki(t,i){
+ const s=new ip;
+ s.eventMode="none";
+ const e=1===t?15907131:2===t?13226712:13666900;
+ return s.poly([.3*i,0,.44*i,.34*i,.22*i,.34*i]).fill(4886754).poly([.7*i,0,.56*i,.34*i,.78*i,.34*i]).fill(13780270).circle(i/2,.62*i,.36*i).fill(e).circle(i/2,.62*i,.26*i).stroke({
+ color:16777215,width:Math.max(1,.05*i),alpha:.55}
+ ),s}
+ Qt(yki,"fishingIcon"),Qt(Eki,"cupShape"),Qt(Aki,"medalShape");
+ const Ski=[[255,215,177],[255,220,186],[193,204,214],[85,208,227]],Tki=[255/246,255/249,255/243,255/244],Cki=new Map;
+ function Oki(t){
+ const i=8*t.race+t.skin;
+ let s=Cki.get(i);
+ if(s)return s;
+ const e=Ski[t.race],n=e.reduce((t,i)=>t+i*i,0),h=nOi[t.race][t.skin],r=[h>>16,h>>8&255,255&h];
+ s=new bf({
+ resolution:"inherit",antialias:"inherit"}
+ );
+ const[o,a,c]=e.map(i=>i*Tki[t.race]/n),[l,u,d]=r;
+ return s.matrix=[l*o,l*a,l*c,0,0,u*o,u*a,u*c,0,0,d*o,d*a,d*c,0,0,0,0,0,1,0],Cki.set(i,s),s}
+ function Iki(t,i){
+ const s=new Ve,e=new Ye(t),n=new ip,h=[[346,367,348,354,356,350,366,350,380,350,387,357,390,368],[346,367,348,353,356,349,366,349,381,349,389,356,393,368],[346,367,348,355,356,351,366,351,380,351,388,358,391,368],[346,367,348,353,356,349,366,349,381,349,389,356,393,368]][i.race];
+ return n.moveTo(h[0],h[1]).bezierCurveTo(h[2],h[3],h[4],h[5],h[6],h[7]).bezierCurveTo(h[8],h[9],h[10],h[11],h[12],h[13]).lineTo(346,368).closePath().fill(16777215),e.label=`free-hand-skin-${
+ i.race}
+ `,e.filters=[Oki(i)],s.addChild(e,n),e.mask=n,s}
+ Qt(Oki,"skinFilter"),Qt(Iki,"buildFreeHandSkin");
+ const kki=[[{
+ eyes:[[211,200],[271,200]],cheeks:[[205,220],[284,219]],ear:[328,217],hull:[190,178,207,154,277,141,300,181,300,222,278,239,222,240,196,229]}
+ ,{
+ eyes:[[213,199],[277,197]],cheeks:[[211,223],[289,219]],ear:[337,206],hull:[187,180,206,151,263,145,305,180,304,224,277,242,222,242,195,230]}
+ ],[{
+ eyes:[[212,201],[271,200]],cheeks:[[210,223],[285,220]],ear:[329,212],hull:[192,181,207,152,277,140,302,180,302,224,279,240,222,241,196,229]}
+ ,{
+ eyes:[[213,199],[277,197]],cheeks:[[212,223],[289,220]],ear:[337,202],hull:[188,181,206,151,263,145,306,180,305,224,277,243,221,243,195,230]}
+ ],[{
+ eyes:[[212,200],[271,201]],cheeks:[[208,221],[284,220]],ear:[329,216],hull:[190,178,207,154,277,136,301,180,300,223,278,240,221,241,196,230]}
+ ,{
+ eyes:[[213,198],[277,197]],cheeks:[[211,223],[290,220]],ear:[337,206],hull:[188,180,206,151,263,144,306,180,305,225,277,243,221,243,195,230]}
+ ],[{
+ eyes:[[212,200],[271,200]],cheeks:[[204,211],[283,210]],ear:[339,186],hull:[190,178,207,153,277,138,301,178,300,223,278,240,221,241,196,229]}
+ ,{
+ eyes:[[212,197],[277,197]],cheeks:[[206,212],[290,211]],ear:[350,180],hull:[188,180,206,151,263,144,305,180,305,225,277,243,221,243,195,230]}
+ ]],Rki=Qt((t,i=2497046)=>({
+ width:t,color:i,cap:"round",join:"round"}
+ ),"stroke");
+ function xki(t){
+ const i=kki[t.race][t.sex],s=new ip,e=Qt(i=>t.feats.includes(i),"has");
+ if(e(1))for(const[n,h]of i.cheeks){
+ s.ellipse(n,h,9,4.5).fill({
+ color:15628921,alpha:.55}
+ );
+ for(const t of[-3,1,5])s.moveTo(n+t-1,h-1).lineTo(n+t,h+1.5).stroke(Rki(1.2,13196642))}
+ if(e(3)){
+ const[t,e]=i.cheeks[1];
+ s.moveTo(t-3,e-6).lineTo(t+2,e+6).stroke(Rki(2.5,10178641));
+ for(const i of[-2,2])s.moveTo(t-4,e+i+1).lineTo(t+3,e+i-2).stroke(Rki(1.6,10968155))}
+ if(e(5)){
+ const[t,e]=i.eyes[0];
+ s.moveTo(190,e-10).lineTo(t,e-3).lineTo(300,e-29).stroke(Rki(4,2762022)),s.moveTo(t-12,e-13).quadraticCurveTo(t,e-17,t+13,e-10).lineTo(t+11,e+8).quadraticCurveTo(t,e+20,t-11,e+8).closePath().fill(3156780).stroke(Rki(2.5,1446680)),s.moveTo(t-7,e-8).quadraticCurveTo(t,e-11,t+6,e-7).stroke(Rki(1.7,6050128))}
+ if(e(4)){
+ const[t,e]=i.eyes;
+ for(const[n,h]of i.eyes)s.ellipse(n,h+1,16,17).stroke(Rki(3.5));
+ s.moveTo(t[0]+16,t[1]-1).quadraticCurveTo((t[0]+e[0])/2,t[1]-6,e[0]-16,e[1]-1).stroke(Rki(3)),s.moveTo(t[0]-16,t[1]-4).lineTo(191,t[1]-8).stroke(Rki(3)),s.moveTo(e[0]+16,e[1]-4).lineTo(301,e[1]-9).stroke(Rki(3))}
+ return s}
+ function Pki(t){
+ const i=new ip;
+ if(t.feats.includes(6)){
+ const[s,e]=kki[t.race][t.sex].ear;
+ i.ellipse(s,e+5,4.7,6.5).stroke(Rki(4,3154712)),i.ellipse(s,e+5,4.7,6.5).stroke(Rki(2.3,15317589)),i.circle(s,e-1,2).fill(16770722)}
+ return i}
+ Qt(xki,"buildFaceDetails"),Qt(Pki,"buildEarring");
+ const Nki=[[[210,128,224,111,290,111,306,140,300,181,293,183,276,156,231,203,219,189,214,171,204,186,200,188],[210,128,224,111,290,111,306,140,307,174,298,174,265,142,259,190,233,187,216,178,205,157,200,178,200,182]],[[210,128,224,111,290,111,306,140,300,182,291,183,271,154,247,209,224,199,215,173,206,186,200,190],[210,128,224,111,290,111,306,140,307,174,298,173,264,144,257,200,234,190,216,181,206,156,200,178,200,182]],[[210,128,224,111,290,111,306,140,300,180,292,182,276,141,248,138,223,185,214,179,207,167,200,186,200,190],[210,128,224,111,290,111,306,140,307,173,300,173,258,123,250,155,244,191,224,188,208,173,202,159,200,177,200,181]],[[210,128,224,111,290,111,306,140,307,177,299,178,279,143,239,202,223,191,217,172,206,188,200,192],[210,128,224,111,290,111,306,140,307,174,299,175,265,140,258,200,234,191,217,181,208,162,200,180,200,184]]],Lki=new mf({
+ strength:1.3,quality:3}
+ );
+ function Dki(t){
+ const i=(new ip).poly([...Nki[t.race][t.sex]]).fill(16119285).stroke({
+ width:5,color:16119285,join:"round"}
+ );
+ return i.tint=nOi[t.race][t.skin],i.filters=[Lki],i.label="native-forehead",i}
+ Qt(Dki,"buildNativeForehead");
+ const Gki=1971215,Bki=15721679,Uki=7029798,Fki={
+ autoGenerateMipmaps:!0,magFilter:"linear",minFilter:"linear",mipmapFilter:"nearest"}
+ ;
+ function $ki(t,i){
+ const s=Qt(t=>Math.max(0,Math.min(255,Math.round(t*i))),"f");
+ return s(t>>16)<<16|s(t>>8&255)<<8|s(255&t)}
+ function Hki(t,i,s,e,n=0,h=0,r=2*Math.PI,o=28){
+ const a=[],c=Math.cos(n),l=Math.sin(n);
+ for(let u=0;
+ u<=o;
+ u++){
+ const n=h+u/o*(r-h),d=Math.cos(n)*s,f=Math.sin(n)*e;
+ a.push(t+d*c-f*l,i+d*l+f*c)}
+ return a}
+ Qt($ki,"shade"),Qt(Hki,"ellipsePts");
+ const Wki=Qt(t=>({
+ width:t,color:Gki,join:"round",cap:"round"}
+ ),"ink"),Vki=Qt(t=>({
+ skin:nOi[t.race][t.skin],hair:oOi[t.hairColor],cloth:fOi[t.outfitColor],hat:dOi[t.outfit].hat,style:rOi[t.sex][t.hair]??rOi[t.sex][0]}
+ ),"colorsOf"),jki=Qt((t,i)=>t.feats.includes(i),"has");
+ function Kki(t,i,s,e,n,h){
+ const r=-e*s*.15;
+ if("bob"===i)t.roundRect(1.14*-s+r,.92*-s,2.28*s,1.7*s,.62*s).fill(n).stroke(Wki(h));
+ else if("long"===i)t.roundRect(1.16*-s+r,.92*-s,2.32*s,2.45*s,.7*s).fill(n).stroke(Wki(h));
+ else if("twin"===i)for(const o of e?[-1]:[-1,1])t.poly(Hki(o*s*1.14+r,.6*s,.34*s,.62*s,.25*o)).fill(n).stroke(Wki(h));
+ else"pony"===i?t.poly(Hki(e?1.12*-s:1.05*s,e?.15*s:.35*s,.33*s,.76*s,e?.55:-.3)).fill(n).stroke(Wki(h)):"tied"===i&&t.circle(e?.98*-s:.55*s,e?.5*-s:.95*-s,.3*s).fill(n).stroke(Wki(h));
+ "short"!==i&&"shag"!==i&&"twin"!==i&&"pony"!==i||t.ellipse(r,.12*-s,1.08*s,.98*s).fill(n).stroke(Wki(h))}
+ function zki(t,i,s,e,n,h){
+ if(1===i?t.moveTo(e*s*.8,.14*-s).quadraticCurveTo(e*s*1.5,.36*-s,e*s*1.86,.66*-s).quadraticCurveTo(e*s*1.42,.08*s,e*s*.86,.3*s).closePath():3===i?t.moveTo(e*s*.84,.16*-s).quadraticCurveTo(e*s*1.25,.2*-s,e*s*1.5,.42*-s).quadraticCurveTo(e*s*1.25,.2*s,e*s*.86,.32*s).closePath():t.ellipse(e*s*.96,.12*s,.19*s,.25*s),t.fill(n).stroke(Wki(h)),0===i||2===i){
+ const i=e>0?-1.2:Math.PI-1.2,r=e*s*.98,o=.13*s,a=.09*s;
+ t.moveTo(r+Math.cos(i)*a,o+Math.sin(i)*a).arc(r,o,a,i,i+2.4).stroke({
+ width:.7*h,color:$ki(n,.72)}
+ )}
+ }
+ function Yki(t,i,s,e,n,h){
+ if("bald"===i)return void t.ellipse(.35*-s,.6*-s,.2*s,.09*s).fill({
+ color:16777215,alpha:.35}
+ );
+ const r=e*s*.12,o={
+ short:.3,shag:.26,tied:.46,bob:.22,twin:.26,pony:.28,long:.2}
+ [i],a={
+ bob:.74,long:.95}
+ [i]??.06,c={
+ short:[1.04,1.14,9],shag:[1.04,1.34,11],tied:[1.06,1.06,2],bob:[1.06,1.1,7],twin:[1.04,1.13,9],pony:[1.04,1.14,9],long:[1.06,1.08,5]}
+ [i];
+ t.moveTo(1.05*-s,s*a).lineTo(1.05*-s,.05*s);
+ const[l,u,d]=c;
+ for(let g=0;
+ g<=d;
+ g++){
+ const i=Math.PI*(1.02+g/d*.96),e=s*(g%2?u:l);
+ t.lineTo(Math.cos(i)*e+.3*r,Math.sin(i)*e*.98-.06*s)}
+ t.lineTo(1.05*s,.05*s).lineTo(1.05*s,s*a).lineTo(.8*s,s*a).lineTo(.82*s,-s*o+.08*s);
+ const f="long"===i?1:"shag"===i?6:5;
+ for(let g=f;
+ g>=0;
+ g--){
+ const e=.82*-s+1.64*s*(g/f)+r,n="long"===i?-s*o:-s*o+(g%2?.16*s:.04*-s);
+ t.lineTo(e,n)}
+ t.lineTo(.82*-s,-s*o+.08*s).lineTo(.8*-s,s*a).closePath(),t.fill(n).stroke(Wki(h));
+ const p=$ki(n,.72);
+ for(const[g,w,m,v]of[[-.35,-.95,-.2,-.45],[.12,-1,.18,-.5],[.52,-.82,.42,-.42]])t.moveTo(s*g+.3*r,s*w).lineTo(s*m+.3*r,s*v).stroke({
+ width:.6*h,color:p,cap:"round"}
+ );
+ if("twin"===i)for(const g of e?[-1]:[-1,1])t.circle(g*s*1.02,.12*s,.1*s).fill(16748451).stroke(Wki(.7*h));
+ "pony"===i&&t.circle(e?.92*-s:.86*s,e?.32*-s:.2*-s,.1*s).fill(16748451).stroke(Wki(.7*h))}
+ function qki(t,i,s,e,n){
+ t.moveTo(.86*-i+.5*s,.42*-i).quadraticCurveTo(s,.95*-i,.86*i+.5*s,.42*-i);
+ for(let h=5;
+ h>=0;
+ h--)t.lineTo(.8*-i+1.6*i*(h/5)+s,h%2?.1*-i:.32*-i);
+ t.closePath().fill(e).stroke(Wki(n))}
+ function Xki(t,i,s,e=0){
+ const{
+ skin:n,hair:h,cloth:r,hat:o,style:a}
+ =Vki(i),c=.09*s,l=e*s*.2;
+ "hood"===o?t.poly(Hki(-e*s*.12,.1*-s,1.34*s,1.3*s)).fill(r).stroke(Wki(c)):Kki(t,a,s,e,h,c);
+ const u=e?[-1]:[-1,1];
+ for(const w of u)zki(t,i.race,s,w,n,c);
+ t.ellipse(0,0,s,.96*s).fill(n).stroke(Wki(c)),t.ellipse(l,.3*-s,.78*s,.2*s).fill({
+ color:$ki(n,.86),alpha:.7}
+ );
+ const d=[[.34*-s+l,.12*s,1,-1],[.32*s+l,.12*s,e?.78:1,1]],f=2===i.race;
+ for(const[w,m,v,_]of d){
+ const e=w+_*s*.11*v,n=w-_*s*.11*v;
+ t.moveTo(e,m-.13*s).lineTo(n,m-.07*s).quadraticCurveTo(w-_*s*.13*v,m+.16*s,w,m+.15*s).quadraticCurveTo(w+_*s*.13*v,m+.14*s,e,m-.13*s).closePath().fill(f?2897218:1708560),f?t.circle(w,m+.03*s,.045*s).fill(9433343):t.circle(w+_*s*.025,m-.01*s,.035*s).fill(16777215),1===i.sex&&t.moveTo(e,m-.13*s).lineTo(e+_*s*.09*v,m-.2*s).stroke({
+ width:.75*c,color:1708560,cap:"round"}
+ )}
+ if("bald"===a||"tied"===a)for(const[w,,m,v]of d)t.moveTo(w+v*s*.12*m,Jki(s)-.3*s).lineTo(w-v*s*.1*m,Jki(s)-.22*s).stroke({
+ width:1.1*c,color:$ki(h,.8),cap:"round"}
+ );
+ if(t.circle(l+e*s*.1,.3*s,.035*s).fill($ki(n,.7)),jki(i,1))for(const w of[-1,1])t.ellipse(w*s*.58+l,.38*s,.15*s,.08*s).fill({
+ color:16744319,alpha:.42}
+ );
+ if(jki(i,0))for(const[w,m]of[[-.58,.3],[-.47,.37],[-.64,.4],[.5,.3],[.42,.38],[.58,.41]])t.circle(w*s+l,m*s,.035*s).fill({
+ color:9062952,alpha:.7}
+ );
+ if(jki(i,3)){
+ t.moveTo(l-.62*s,.2*s).lineTo(l-.3*s,.48*s).stroke({
+ width:.9*c,color:11028554,cap:"round"}
+ );
+ for(const i of[.3,.65]){
+ const e=l-s*(.62-.32*i),n=s*(.2+.28*i);
+ t.moveTo(e-.06*s,n+.07*s).lineTo(e+.06*s,n-.07*s).stroke({
+ width:.7*c,color:11028554,cap:"round"}
+ )}
+ }
+ const p=.52*s;
+ if(3===i.race){
+ t.ellipse(l,p,.2*s,.08*s).fill(2758676);
+ for(const i of[-1,1])t.moveTo(l+i*s*.16-.06*s,p+.04*s).lineTo(l+i*s*.2,p-.2*s).lineTo(l+i*s*.16+.06*s,p+.04*s).closePath().fill(16511968).stroke(Wki(.6*c))}
+ else t.moveTo(l-.08*s,p).quadraticCurveTo(l,p+.05*s,l+.08*s,p).stroke({
+ width:.85*c,color:4858904,cap:"round"}
+ );
+ if(jki(i,2)&&(t.moveTo(l-.66*s,.22*s).quadraticCurveTo(l-.55*s,1.16*s,l,1.14*s).quadraticCurveTo(l+.55*s,1.16*s,l+.66*s,.22*s).quadraticCurveTo(l+.32*s,.6*s,l,.5*s).quadraticCurveTo(l-.32*s,.6*s,l-.66*s,.22*s).closePath().fill(h).stroke(Wki(c)),t.poly(Hki(l-.15*s,.43*s,.17*s,.07*s,.3)).fill(h),t.poly(Hki(l+.15*s,.43*s,.17*s,.07*s,-.3)).fill(h)),jki(i,4)){
+ for(const[i,e,n]of d)t.ellipse(i,e+.02*s,.22*s*n,.21*s).stroke({
+ width:.85*c,color:1708560}
+ );
+ t.moveTo(d[0][0]+.22*s,d[0][1]).lineTo(d[1][0]-.22*s*d[1][2],d[1][1]).stroke({
+ width:.85*c,color:1708560}
+ )}
+ if(jki(i,5)){
+ const[i,e]=d[0];
+ t.moveTo(.98*-s,.08*-s).lineTo(i,e).lineTo(.96*s,.5*-s).stroke({
+ width:.8*c,color:1314832}
+ ),t.ellipse(i,e+.02*s,.21*s,.2*s).fill(1314832)}
+ if("hood"===o){
+ "bald"!==a&&qki(t,s,l,h,c);
+ const e=.8*Math.PI,o=2.2*Math.PI,d=.4*l,f=.04*-s,p=Hki(d,f,1.24*s,1.2*s,0,e,o,32),g=Hki(d,f,1*s,.97*s,0,o,e,32);
+ if(t.poly([...p,...g]).fill(r).stroke(Wki(c)),t.poly(Hki(d,f,1.04*s,1.01*s,0,e+.08,o-.08,32),!1).stroke({
+ width:.8*c,color:Bki}
+ ),1===i.race||3===i.race)for(const h of u)zki(t,i.race,s,h,n,c)}
+ else Yki(t,a,s,e,h,c);
+ if(f)for(const w of[0,.5,1]){
+ const i=l-.55*s+.38*s*w,e=.5*-s-.06*s*w;
+ 0===w&&t.moveTo(l-.55*s,.5*-s).lineTo(l-.17*s,.56*-s).stroke({
+ width:.8*c,color:5199974}
+ ),t.moveTo(i,e-.07*s).lineTo(i,e+.07*s).stroke({
+ width:.7*c,color:5199974}
+ )}
+ if(jki(i,6))for(const w of u)t.circle(w*s*.98,.42*s,.07*s).stroke({
+ width:.8*c,color:15251504}
+ );
+ const g=.3*l;
+ "rain"===o?(t.ellipse(g,.46*-s,1.48*s,.38*s).fill(r).stroke(Wki(c)),t.moveTo(.82*-s+g,.5*-s).quadraticCurveTo(.88*-s+g,1.36*-s,g+.05*s,1.34*-s).quadraticCurveTo(.9*s+g,1.32*-s,.84*s+g,.5*-s).closePath().fill($ki(r,.95)).stroke(Wki(c)),t.moveTo(.8*-s+g,.66*-s).quadraticCurveTo(g,.56*-s,.82*s+g,.66*-s).stroke({
+ width:1.4*c,color:$ki(r,.62)}
+ ),t.ellipse(g-.35*s,1.05*-s,.2*s,.08*s).fill({
+ color:16777215,alpha:.3}
+ )):"cap"===o&&(t.poly(Hki(.04*-s+g,.86*-s,1.06*s,.38*s,-.12)).fill(r).stroke(Wki(c)),t.circle(.04*-s+g,1.24*-s,.17*s).fill(Bki).stroke(Wki(.8*c)))}
+ Qt(Kki,"drawHairBack"),Qt(zki,"drawEar"),Qt(Yki,"drawHairFront"),Qt(qki,"drawFringe"),Qt(Xki,"drawHead");
+ const Jki=Qt(t=>.12*t,"y0");
+ function Qki(t,i,s,e){
+ const{
+ skin:n,cloth:h}
+ =Vki(s),r=.08*e;
+ t.clear(),i.clear(),t.ellipse(0,0,.85*e,.14*e).fill({
+ color:0,alpha:.28}
+ );
+ for(const l of[-1,1])t.roundRect(l*e*.25-.17*e,.82*-e,.34*e,.72*e,.1*e).fill(2828853).stroke(Wki(r)),t.roundRect(l*e*.27-.24*e,.36*-e,.48*e,.38*e,.12*e).fill(Uki).stroke(Wki(r)),t.circle(l*e*.27+l*e*.12,.24*-e,.045*e).fill(15251504);
+ const o=1.95*-e;
+ 3===s.outfit&&t.moveTo(.6*-e,o+.1*e).lineTo(.6*e,o+.1*e).lineTo(1*e,.45*-e).lineTo(1*-e,.45*-e).closePath().fill($ki(h,.82)).stroke(Wki(r));
+ const a=1===s.outfit?h:(s.outfit,Bki);
+ if(t.roundRect(.64*-e,o,1.28*e,e*(1===s.outfit?1.5:1.3),.3*e).fill(a).stroke(Wki(r)),0===s.outfit)for(const l of[-1,1]){
+ t.roundRect(l>0?.08*e:.64*-e,o,.56*e,1.3*e,.22*e).fill(h).stroke(Wki(r));
+ for(let i=0;
+ i<2;
+ i++)t.roundRect(.1*-e,o+e*(.3+.22*i),.2*e,.07*e,.03*e).fill(14263872)}
+ if(1===s.outfit){
+ t.rect(.42*-e,o+.18*e,.08*e,1*e).fill({
+ color:16777215,alpha:.25}
+ );
+ for(let i=0;
+ i<3;
+ i++)t.roundRect(.1*-e,o+e*(.28+.26*i),.2*e,.08*e,.03*e).fill(Uki)}
+ if(2===s.outfit){
+ for(let i=o+.3*e;
+ i<o+1.2*e;
+ i+=.26*e)t.rect(.6*-e,i,1.2*e,.12*e).fill(h);
+ t.moveTo(.3*-e,o+.04*e).lineTo(.3*e,o+.04*e).lineTo(0,o+.46*e).closePath().fill($ki(h,.75)).stroke(Wki(.8*r))}
+ 3===s.outfit&&(t.moveTo(.66*-e,o+.05*e).lineTo(.66*e,o+.05*e).lineTo(.5*e,o+.7*e).lineTo(0,o+.5*e).lineTo(.5*-e,o+.7*e).closePath().fill(h).stroke(Wki(r)),t.circle(0,o+.2*e,.1*e).fill(15251504).stroke(Wki(.7*r))),t.roundRect(.64*-e,o+.98*e,1.28*e,.16*e,.05*e).fill(5913122).stroke(Wki(.8*r)),t.circle(.05*e,o+1.06*e,.09*e).stroke({
+ width:.9*r,color:15251504}
+ );
+ const c=1===s.outfit||3===s.outfit?h:Bki;
+ t.roundRect(.58*e,o+.1*e,.3*e,.85*e,.14*e).fill(c).stroke(Wki(r)),t.roundRect(.58*e,o+.62*e,.3*e,.2*e,.06*e).fill(Uki),t.circle(.73*e,o+1*e,.14*e).fill(n).stroke(Wki(r)),t.moveTo(.62*-e,o-2.1*e).lineTo(.98*-e,o+1.1*e).stroke({
+ width:.09*e,color:9067051,cap:"round"}
+ ),t.moveTo(.62*-e,o-2.1*e).lineTo(.98*-e,o+1.1*e).stroke({
+ width:.03*e,color:13146714,cap:"round"}
+ ),t.moveTo(.62*-e,o-2.1*e).quadraticCurveTo(1.2*-e,o-1.4*e,1.25*-e,o-.7*e).stroke({
+ width:.025*e,color:15263976,alpha:.7}
+ ),t.ellipse(1.25*-e,o-.6*e,.09*e,.13*e).fill(14256698).stroke(Wki(.6*r)),t.roundRect(.98*-e,o+.1*e,.32*e,.62*e,.14*e).fill(c).stroke(Wki(r)),t.circle(.84*-e,o+.72*e,.15*e).fill(n).stroke(Wki(r)),i.position.set(0,o-.62*e),Xki(i,s,e,0)}
+ Qt(Qki,"drawFront");
+ const Zki=[{
+ body:[-1,77],tip:[0,-124]}
+ ,{
+ body:[-15,74],tip:[62,-124]}
+ ];
+ function tRi(t,i,s){
+ const{
+ skin:e,hair:n,cloth:h,hat:r,style:o}
+ =Vki(i),a=Zki[s],c=128+a.body[0],l=128+a.body[1],u=128+a.tip[0],d=128+a.tip[1],f=c+.22*(u-c)+(s?6:0),p=l-74;
+ for(const _ of[-1,1])t.ellipse(c+56*_,l-62,12,18).fill(Uki).stroke(Wki(4));
+ t.ellipse(c,l-2,56,33).fill(2===i.outfit?Bki:h).stroke(Wki(4)),2===i.outfit&&(t.roundRect(c-36,l-2,72,30,6).fill(h).stroke(Wki(3.2)),t.moveTo(c-30,l+4).lineTo(c+30,l+4).stroke({
+ width:3,color:Bki}
+ )),0===i.outfit&&t.moveTo(c,l-34).lineTo(c,l+30).stroke({
+ width:3,color:$ki(h,.7)}
+ ),3===i.outfit&&t.moveTo(c-56,l-6).quadraticCurveTo(c,l+50,c+56,l-6).closePath().fill($ki(h,.85)).stroke(Wki(4));
+ const g=1===i.outfit||3===i.outfit?h:Bki;
+ for(const _ of[-1,1])t.moveTo(c+44*_,l-18).quadraticCurveTo(c+40*_,l-60,f+9*_,p+6).stroke({
+ width:17,color:Gki,cap:"round"}
+ ),t.moveTo(c+44*_,l-18).quadraticCurveTo(c+40*_,l-60,f+9*_,p+6).stroke({
+ width:11,color:g,cap:"round"}
+ );
+ t.moveTo(f,p+18).lineTo(u,d).stroke({
+ width:8,color:Gki,cap:"round"}
+ ),t.moveTo(f,p+18).lineTo(u,d).stroke({
+ width:5,color:10119733,cap:"round"}
+ );
+ for(const _ of[.25,.5,.75])t.circle(f+(u-f)*_,p+18+(d-p-18)*_,3.5).fill(15260864);
+ for(const _ of[-1,1])t.circle(f+7*_,p+4,7).fill(e).stroke(Wki(3.2));
+ const w=c+(s?4:0),m=l-6,v=31;
+ if(("none"===r||"cap"===r)&&("long"!==o&&"bob"!==o||t.ellipse(w,m+("long"===o?12:4),37,v+("long"===o?14:6)).fill(n).stroke(Wki(4)),"pony"===o&&t.poly(Hki(w+5,m+30,10,18,-.2)).fill(n).stroke(Wki(4)),"twin"===o))for(const _ of[-1,1])t.poly(Hki(w+28*_,m+20,9,16,.5*_)).fill(n).stroke(Wki(4));
+ if((1===i.race||3===i.race)&&"rain"!==r)for(const _ of[-1,1]){
+ const s=1===i.race?1:.6;
+ t.moveTo(w+26*_,m-4).lineTo(w+_*(v+20*s),m+18*s).lineTo(w+24*_,m+10).closePath().fill(e).stroke(Wki(4))}
+ if("rain"===r)t.circle(w,m,45).fill(h).stroke(Wki(4)),t.circle(w,m-2,25).fill($ki(h,.92)).stroke(Wki(3.2)),t.ellipse(w-9,m-12,10,5).fill({
+ color:16777215,alpha:.3}
+ );
+ else if("hood"===r)t.moveTo(w-v-3,m-4).quadraticCurveTo(w-v-1,m-v-4,w,m-v-3).quadraticCurveTo(w+v+1,m-v-4,w+v+3,m-4).quadraticCurveTo(w+v,m+v,w,m+v+14).quadraticCurveTo(w-v,m+v,w-v-3,m-4).closePath().fill(h).stroke(Wki(4)),t.moveTo(w-v+5,m-8).quadraticCurveTo(w,m-v+2,w+v-5,m-8).stroke({
+ width:3,color:Bki,cap:"round"}
+ );
+ else{
+ if(t.circle(w,m,v).fill("bald"===o?e:n).stroke(Wki(4)),"bald"===o)t.ellipse(w-8,m-10,10,6).fill({
+ color:16777215,alpha:.35}
+ );
+ else{
+ const i=$ki(n,.7);
+ for(let s=0;
+ s<7;
+ s++){
+ const e=s/7*Math.PI*2+.3;
+ t.moveTo(w+5*Math.cos(e),m+3+5*Math.sin(e)).quadraticCurveTo(w+Math.cos(e+.5)*v*.6,m+Math.sin(e+.5)*v*.6,w+28*Math.cos(e+.2),m+28*Math.sin(e+.2)).stroke({
+ width:2,color:i,cap:"round"}
+ )}
+ "tied"===o&&t.circle(w,m+v-3,9).fill(n).stroke(Wki(4))}
+ "cap"===r&&(t.circle(w,m-2,30).fill(h).stroke(Wki(4)),t.circle(w,m-2,7).fill(Bki).stroke(Wki(3.2)))}
+ }
+ Qt(tRi,"drawTop");
+ let iRi=null;
+ const sRi={
+ }
+ ;
+ let eRi=[],nRi=null;
+ function hRi(){
+ return nRi??(nRi=(async()=>{
+ try{
+ const t=Qt(t=>CS.getAssetPath(`fishing/avatar/${
+ t}
+ ?v=${
+ SS.appVersion}
+ `),"path"),i=await fetch(t("avatar_parts.json"),{
+ cache:"no-store"}
+ );
+ if(!i.ok)return;
+ const{
+ pages:s}
+ =await i.json(),e={
+ }
+ ;
+ let n=[];
+ for(const h of s){
+ const i=await(await fetch(t(h),{
+ cache:"no-store"}
+ )).json(),s=await fd.load({
+ src:t(i.meta.image),parser:"loadTextures",data:{
+ autoGenerateMipmaps:!0}
+ }
+ ),r=new Vn(s,i);
+ await r.parse(),Object.assign(e,r.textures),Array.isArray(i.meta.parts)&&!n.length&&(n=i.meta.parts)}
+ await Promise.all(["male-long","male-pony","female-long","female-pony"].map(async i=>{
+ try{
+ sRi[i]=await fd.load({
+ src:t(`hair-v2/${
+ i}
+ .webp`)+"&hair=redraw-1008-640-v3",parser:"loadTextures",data:{
+ autoGenerateMipmaps:!0}
+ }
+ )}
+ catch(ort){
+ }
+ }
+ )),iRi=e,eRi=n,pRi.clear()}
+ catch(ort){
+ }
+ }
+ )()),nRi}
+ Qt(hRi,"loadAvatarParts");
+ const rRi=["human","elf","undead","orc"];
+ function oRi(t,i,s=0){
+ var e;
+ if(!iRi||!eRi.length)return null;
+ const{
+ skin:n,hair:h,cloth:r}
+ =Vki(t),o=rRi[t.race],a=t.sex?"f":"m",c="front"===i?rOi[t.sex][0]:0===t.sex&&2===t.hair?"tied":Vki(t).style,l="top"===i?`@${
+ s}
+ `:"",u=Qt(s=>!(s.view!==i||void 0!==s.style&&s.style!==c||void 0!==s.race&&s.race!==o||void 0!==s.sex&&s.sex!==a||void 0!==s.outfit&&s.outfit!==t.outfit||void 0!==s.feat),"fits"),d=eRi.filter(u);
+ if(!d.some(t=>"skin"===t.tint&&t.race===o&&("top"===i||t.sex===a)))return null;
+ d.sort((t,i)=>t.layer-i.layer||(t.order??0)-(i.order??0));
+ const f=[];
+ for(const p of d){
+ let s=p.file.replace(/\.png$/,"");
+ if("front"===i&&t.hair>0&&s.includes("/hair-"))continue;
+ const o=(null==(e=p.clipByOutfit)?void 0:e[String(t.outfit)])?`${
+ s}
+ --hat${
+ t.outfit}
+ ${
+ l}
+ `:null,a=o&&iRi[o]?o:`${
+ s}
+ ${
+ l}
+ `;
+ iRi[a]&&f.push([a,"hair"===p.tint?h:"skin"===p.tint?n:"cloth"===p.tint?r:null])}
+ return f}
+ Qt(oRi,"layersFor");
+ const aRi=Qt(t=>t.hair>0&&!sRi[`${
+ t.sex?"female":"male"}
+ -${
+ 1===t.hair?"long":"pony"}
+ `]?oRi({
+ ...t,hair:0}
+ ,"front"):oRi(t,"front"),"frontLayers"),cRi=Qt((t,i)=>oRi(t,"top",i),"topLayers");
+ function lRi(t){
+ const i=new Ve;
+ for(const[s,e]of t){
+ const t=new Ye(iRi[s]);
+ t.label=s,null!==e&&(t.tint=e),i.addChild(t)}
+ return i.eventMode="none",i}
+ Qt(lRi,"stack");
+ const uRi=[{
+ long:[11,12,.37,.34],pony:[67,2,.31,.31]}
+ ,{
+ long:[64,3,.3,.3],pony:[105,-5,.28,.31]}
+ ];
+ function dRi(t,i){
+ const s=new Ve,e=1===t.hair?"long":"pony",n=sRi[`${
+ t.sex?"female":"male"}
+ -${
+ e}
+ `];
+ if(!n)return s;
+ const[h,r,o,a]=uRi[t.sex][e],c=new Ye(n);
+ c.label=`hair-v2/${
+ t.sex}
+ -${
+ e}
+ `,c.position.set(h,r),c.scale.set(1254*o/n.width,1254*a/n.height),c.tint=oOi[t.hairColor];
+ const l=(new ip).rect(0,i?220:0,512,i?292:220).fill(16777215);
+ return s.addChild(c,l),c.mask=l,s}
+ function fRi(t,i){
+ const s=new Ve,e=t.hair>0;
+ e&&s.addChild(dRi(t,!0));
+ let n=!t.feats.some(t=>6!==t);
+ const h=Qt(()=>{
+ const i=new Ve,e=xki(t),h=(new ip).poly(kki[t.race][t.sex].hull).fill(16777215);
+ i.addChild(e,h),e.mask=h,s.addChild(i),n=!0}
+ ,"details");
+ for(const[r,o]of i){
+ n||!r.includes("tusks-")&&!r.includes("hair-front-")||h();
+ const i=new Ye(iRi[r]);
+ if(i.label=r,null!==o&&(i.tint=o),r.includes("/outfit-")){
+ const t=(new ip).poly([0,0,310,0,310,245,512,245,512,512,0,512]).fill(16777215);
+ s.addChild(i,t),i.mask=t}
+ else s.addChild(i);
+ r===`front/skin-${
+ rRi[t.race]}
+ -${
+ t.sex?"f":"m"}
+ `&&s.addChild(Dki(t)),1===t.sex&&r===`front/outfit-0-base-${
+ rRi[t.race]}
+ -f`&&s.addChild(Iki(iRi[r],t))}
+ return n||h(),e&&s.addChild(dRi(t,!1)),jki(t,6)&&s.addChild(Pki(t)),s.eventMode="none",s}
+ Qt(dRi,"newHair"),Qt(fRi,"stackFront");
+ const pRi=new Map;
+ let gRi=!1;
+ function wRi(){
+ var t,i;
+ gRi||(gRi=!0,null==(i=(t=ES.app.canvas).addEventListener)||i.call(t,"webglcontextrestored",()=>setTimeout(()=>{
+ var t,i;
+ for(const s of pRi.values()){
+ if(s.tex.destroyed)continue;
+ const e=new Ve;
+ s.build(e),ES.app.renderer.render({
+ container:e,target:s.tex,clear:!0}
+ ),null==(i=(t=s.tex.source).updateMipmaps)||i.call(t),e.destroy({
+ children:!0}
+ )}
+ }
+ ,0)))}
+ function mRi(t,i,s,e,n=1){
+ const h=pRi.get(t);
+ if(h&&!h.tex.destroyed)return h.tex;
+ wRi();
+ const r=new Ve;
+ e(r);
+ const o=ES.app.renderer.generateTexture({
+ target:r,frame:new Ui(0,0,i,s),resolution:n,textureSourceOptions:Fki}
+ );
+ return r.destroy({
+ children:!0}
+ ),pRi.set(t,{
+ tex:o,w:i,h:s,build:e}
+ ),o}
+ Qt(wRi,"hookRestore"),Qt(mRi,"bake$2");
+ const vRi=128/330;
+ function _Ri(t){
+ return mRi(`p:${
+ vOi(t)}
+ `,128,128,i=>{
+ const s=aRi(t);
+ if(s){
+ const e=fRi(t,s);
+ return e.scale.set(vRi),e.position.set(64-102.4,64-174*vRi),void i.addChild(e)}
+ const e=new ip;
+ e.position.set(64,72),Xki(e,t,40,0),i.addChild(e)}
+ ,2)}
+ function MRi(t,i,s=!1){
+ return mRi(`t${
+ i}
+ ${
+ s?"s":""}
+ :${
+ vOi(t)}
+ `,256,256,s=>{
+ const e=cRi(t,i);
+ if(e)return void s.addChild(lRi(e));
+ const n=new ip;
+ tRi(n,t,i),s.addChild(n)}
+ ,s?.5:1)}
+ function bRi(t){
+ return[MRi(t,0),MRi(t,1)]}
+ function yRi(t){
+ const i=aRi(t);
+ if(i){
+ const s=new Ve,e=fRi(t,i),n=(new ip).rect(-64,-64,128,128).fill(16777215);
+ return e.scale.set(vRi),e.pivot.set(264,174),s.addChild(e,n),e.mask=n,s}
+ const s=new ip;
+ return Xki(s,t,40,0),s}
+ Qt(_Ri,"avatarPortrait"),Qt(MRi,"avatarTopPose"),Qt(bRi,"avatarTop"),Qt(yRi,"buildFace");
+ const ERi=class extends Ve{
+ constructor(t){
+ super(),Zt(this,"body",new ip),Zt(this,"head",new ip),Zt(this,"art",null),this.R=t,this.eventMode="none",this.addChild(this.body,this.head)}
+ set(t){
+ var i;
+ null==(i=this.art)||i.destroy({
+ children:!0}
+ ),this.art=null;
+ const s=aRi(t);
+ if(s)return this.body.clear(),this.head.clear(),this.art=fRi(t,s),this.art.pivot.set(256,480),this.art.scale.set(this.R/100),void this.addChild(this.art);
+ Qki(this.body,this.head,t,this.R)}
+ }
+ ;
+ Qt(ERi,"AvatarFront");
+ let ARi=ERi;
+ const SRi=[{
+ id:"fish",text:"낚시",icon:"hook"}
+ ,{
+ id:"gear",text:"장비",icon:"toolbox"}
+ ,{
+ id:"tank",text:"어망",icon:"keepnet"}
+ ,{
+ id:"quest",text:"퀘스트",icon:"trophy"}
+ ,{
+ id:"shop",text:"상점",icon:"stall"}
+ ],TRi=class t extends uB{
+ constructor(){
+ super(),Zt(this,"paper",new ip),Zt(this,"pageBg",new ip),Zt(this,"chrome",new ip),Zt(this,"pages",new Ve),Zt(this,"pageMask",new ip),Zt(this,"overlay",new Ve),Zt(this,"me",new Ve),Zt(this,"meBg",new ip),Zt(this,"meFace",new Ye),Zt(this,"meLookRaw"),Zt(this,"dayBg",new ip),Zt(this,"dayText",rki("",zIi,12)),Zt(this,"walletBg",new ip),Zt(this,"goldIcon",_ki("gold",18)),Zt(this,"goldText",rki("",KIi,13)),Zt(this,"pearlIcon",_ki("pearl",18)),Zt(this,"pearlText",rki("",JIi,13)),Zt(this,"walletSig",""),Zt(this,"battleBg",new ip),Zt(this,"battleIcon",new ip),Zt(this,"battleText",rki("",KIi,13)),Zt(this,"battleSig",""),Zt(this,"castleDown",Qt(()=>!1,"castleDown")),Zt(this,"close",new Ve),Zt(this,"maximize",new Ve),Zt(this,"maximizeIcon",new ip),Zt(this,"navigation",new Ve),Zt(this,"subBar",new Ve),Zt(this,"subSig",""),Zt(this,"tabButtons",[]),Zt(this,"fxLayer",new Ve),Zt(this,"shown",{
+ gold:-1,pearl:-1}
+ ),Zt(this,"target",{
+ gold:-1,pearl:-1}
+ ),Zt(this,"devRow",new Ve),Zt(this,"devToggle",new dki("테스트",56,26,12)),Zt(this,"scrollTrack",new ip),Zt(this,"scrollY",0),Zt(this,"drag",null),Zt(this,"dragged",!1),Zt(this,"onResize",Qt(()=>{
+ var t,i,s;
+ null==(i=null==(t=this.activePage)?void 0:t.onResize)||i.call(t),null==(s=this.activePage)||s.update(),this.refresh()}
+ ,"onResize")),Zt(this,"speedChip",new dki("×1",62,26,12)),Zt(this,"dayChip",new dki("+1일",62,26,12)),Zt(this,"tideChip",new dki("▸노을",62,26,12)),Zt(this,"goldChip",new dki("+골드",62,26,12)),Zt(this,"botsChip",new dki("+200명",62,26,12)),Zt(this,"boatChip",new dki("배 1",62,26,12)),Zt(this,"journeyChip",new dki("퀘스트+",62,26,12)),Zt(this,"giantChip",new dki("그림자",62,26,12)),Zt(this,"badgeChip",new dki("뱃지 ▸",62,26,12)),Zt(this,"raidChip",new dki("약탈",62,26,12)),Zt(this,"robbedChip",new dki("털리기",62,26,12)),Zt(this,"cutChip",new dki("줄끊김",62,26,12)),Zt(this,"breakChip",new dki("고장",62,26,12)),Zt(this,"hazardChip",new dki("재난",62,26,12)),Zt(this,"fixChip",new dki("다고침",62,26,12)),Zt(this,"brokenDummyChip",new dki("고장배",62,26,12)),Zt(this,"huntChip",new dki("사냥",62,26,12)),Zt(this,"huntCrowdChip",new dki("사냥꾼+",62,26,12)),Zt(this,"gearChip",new dki("장비+",62,26,12)),Zt(this,"netChip",new dki("어망+",62,26,12)),Zt(this,"resetChip",new dki("처음부터",62,26,12)),Zt(this,"resetArmedUntil",0),Zt(this,"botSpots",null),Zt(this,"plunderSpots",null),Zt(this,"timer",new kR(250)),Zt(this,"unsubscribe",[]),Zt(this,"activePage",null),Zt(this,"onNavigate",null),Zt(this,"backStack",[]),Zt(this,"backBtn",new Ve),Zt(this,"backBg",new ip),Zt(this,"backGlow",new ip),Zt(this,"backArrow",new ip),Zt(this,"backText",rki("",jIi,14)),Zt(this,"backNow",null),Zt(this,"onExit",null),Zt(this,"lastInput",performance.now()),Zt(this,"immersed",!1),Zt(this,"immerseTween",null),Zt(this,"wake",new Ve),Zt(this,"exchangeOnly",!1),Zt(this,"tutorialMode",!1),Zt(this,"tutorialEvents",new Map),Zt(this,"pointer",null),this.width=t.WIDTH,this.bg.visible=this.txtTitle.visible=this.btnClose.visible=!1,this.paper.eventMode="static",this.pageBg.eventMode="none",this.chrome.eventMode="none",this.pageMask.eventMode="none",this.pages.mask=this.pageMask,this.pages.position.set(t.CONTENT_X,t.CONTENT_Y),this.overlay.position.set(t.CONTENT_X,t.CONTENT_Y);
+ const i=(new ip).moveTo(14,14).lineTo(34,34).moveTo(34,14).lineTo(14,34).stroke({
+ color:zIi,width:4,cap:"round"}
+ );
+ i.eventMode="none",this.close.addChild(i),this.close.eventMode="static",this.close.cursor="pointer",this.close.hitArea=new Ui(-4,-4,56,56),this.close.on("pointertap",t=>{
+ t.stopPropagation(),this.requestExit()}
+ ),this.maximizeIcon.eventMode="none",this.maximize.addChild(this.maximizeIcon),this.drawMaximizeIcon(),this.maximize.eventMode="static",this.maximize.cursor="pointer",this.maximize.hitArea=new Ui(-2,-4,50,56),this.maximize.on("pointertap",i=>{
+ i.stopPropagation(),this.setFullscreen(!t.fullscreen)}
+ ),this.on("removed",()=>this.setFullscreen(!1)),this.on("pointerdowncapture",()=>{
+ this.lastInput=performance.now(),this.pointer&&performance.now()-this.pointer.t0>300&&queueMicrotask(()=>this.endPoint())}
+ ),this.wake.eventMode="static",this.wake.visible=!1,this.wake.on("pointertap",t=>{
+ var i,s;
+ t.stopPropagation(),(null==(s=null==(i=this.activePage)?void 0:i.immersiveTap)?void 0:s.call(i))||this.setImmersed(!1)}
+ );
+ for(const{
+ id:t,text:n,icon:h}
+ of SRi){
+ const i=new Ve,s=new ip,e=rki(n,zIi,14),r=(new ip).circle(0,0,6).fill(14698538),o=yki(h,26,16777215);
+ s.eventMode="none",r.eventMode="none",r.visible=!1,i.addChild(s,o,e,r),i.eventMode="static",i.cursor="pointer",i.on("pointertap",i=>{
+ i.stopPropagation(),this.selectTab(t,"user")}
+ ),this.navigation.addChild(i),this.tabButtons.push({
+ id:t,root:i,bg:s,icon:o,text:e,dot:r}
+ )}
+ const s=RIi.getInstance();
+ this.speedChip.onTap=()=>{
+ s.devSpeed()}
+ ,this.dayChip.onTap=()=>{
+ s.devSkipDay().then(()=>vH.getInstance().showMessage("하루를 넘겼어요 (꺼둔 시간으로 처리)"))}
+ ,this.tideChip.onTap=()=>{
+ s.devSkipTide().then(t=>vH.getInstance().showMessage(t??`${
+ mSi[PSi(s.now())]}
+ (으)로 넘겼어요 (꺼둔 시간으로 처리)`))}
+ ,this.goldChip.onTap=()=>{
+ s.devAddGold()}
+ ,this.boatChip.onTap=()=>{
+ s.devBoat().then(t=>vH.getInstance().showMessage(t??`배 ${
+ s.state.gear.boat+1}
+ 단계로 바꿨어요`))}
+ ,this.botsChip.onTap=()=>{
+ var t;
+ const i=(null==(t=this.botSpots)?void 0:t.call(this))??[];
+ s.devBots(i).then(t=>vH.getInstance().showMessage(`가짜 낚시꾼 ${
+ t}
+ 명을 30분 동안 띄웠어요`))}
+ ,this.journeyChip.onTap=()=>{
+ s.devQuest().then(t=>vH.getInstance().showMessage(t??"들고 있는 퀘스트를 채웠어요 · NPC 에게 가서 마치기"))}
+ ,this.giantChip.onTap=()=>{
+ ei(()=>Promise.resolve().then(()=>XGi),void 0).then(t=>t.FishingMainPage.getInstance().devGiant())}
+ ,this.badgeChip.onTap=()=>{
+ nki.corner="right"===nki.corner?"left":"right",this.badgeChip.setText("right"===nki.corner?"뱃지 ▸":"◂ 뱃지");
+ const t=this.activePage;
+ t&&(t.onHide(),t.onShow())}
+ ,this.raidChip.onTap=()=>{
+ var t;
+ s.devPlunder("dummies",(null==(t=this.plunderSpots)?void 0:t.call(this,3))??[]).then(t=>vH.getInstance().showMessage(t??"어망이 찬 정박한 배 3척을 옆에 띄웠어요 (Zz) · 눌러서 망원경"))}
+ ,this.robbedChip.onTap=()=>{
+ var t;
+ s.devPlunder("robMe",((null==(t=this.plunderSpots)?void 0:t.call(this,4))??[]).slice(3)).then(t=>vH.getInstance().showMessage(t??"수상한 낚시꾼이 내 어망을 털기 시작했어요"))}
+ ,this.cutChip.onTap=()=>{
+ s.devPlunder("dummyCut").then(t=>vH.getInstance().showMessage(t??"시험 배 주인이 줄을 끊었어요"))}
+ ,this.breakChip.onTap=()=>{
+ s.devBoatTest("boatBreak").then(t=>t&&vH.getInstance().showMessage(t))}
+ ,this.hazardChip.onTap=()=>{
+ s.devBoatTest("boatHazard").then(t=>t&&vH.getInstance().showMessage(t))}
+ ,this.fixChip.onTap=()=>{
+ s.devBoatTest("boatFix").then(t=>vH.getInstance().showMessage(t??"배를 다 고치고 도움 점수를 채웠어요"))}
+ ,this.brokenDummyChip.onTap=()=>{
+ var t;
+ s.devBoatTest("brokenDummy",(null==(t=this.plunderSpots)?void 0:t.call(this,1))??[]).then(t=>vH.getInstance().showMessage(t??"옆에 고장 난 시험 배를 띄웠어요 · 눌러서 수리 돕기"))}
+ ,this.huntChip.onTap=()=>{
+ s.devHunt("huntNow").then(t=>vH.getInstance().showMessage(t??"몬스터를 불렀어요 · 작살을 채웠어요 (4분)"))}
+ ,this.gearChip.onTap=()=>{
+ s.devGear().then(t=>vH.getInstance().showMessage(t??"장비 33개를 넣었어요 (뽑기 30 + ★3·4·5)"))}
+ ,this.netChip.onTap=()=>{
+ s.devNetFill().then(t=>vH.getInstance().showMessage(t??"어망을 가득 채웠어요 (앞 3마리 특대)"))}
+ ,this.huntCrowdChip.onTap=()=>{
+ s.devHunt("huntCrowd").then(t=>vH.getInstance().showMessage(t??"가짜 사냥꾼 5명이 작살을 던졌어요"))}
+ ,this.resetChip.onTap=()=>{
+ const t=performance.now();
+ if(t>this.resetArmedUntil)return this.resetArmedUntil=t+3e3,this.resetChip.setText("한 번 더"),vH.getInstance().showMessage("한 번 더 누르면 낚시왕을 처음부터 다시 시작해요 (이 계정 · 나 만들기부터)"),void setTimeout(()=>{
+ performance.now()>this.resetArmedUntil&&this.resetChip.setText("처음부터")}
+ ,3100);
+ this.resetArmedUntil=0,this.resetChip.setText("지우는 중"),s.devReset().then(t=>{
+ t&&(this.resetChip.setText("처음부터"),vH.getInstance().showMessage(t))}
+ )}
+ ,this.devRow.addChild(this.speedChip,this.dayChip,this.tideChip,this.boatChip,this.goldChip,this.botsChip,this.journeyChip,this.giantChip,this.badgeChip,this.raidChip,this.robbedChip,this.cutChip,this.breakChip,this.hazardChip,this.fixChip,this.brokenDummyChip,this.huntChip,this.huntCrowdChip,this.gearChip,this.netChip,this.resetChip),this.devRow.visible=!1,this.devToggle.visible=OG.getInstance().development,this.devToggle.onTap=()=>{
+ this.devRow.visible=!this.devRow.visible}
+ ,this.scrollTrack.eventMode="none",this.pages.eventMode="static",this.pages.on("wheel",i=>{
+ this.maxScroll()<=0||(i.preventDefault(),i.stopPropagation(),this.scrollY+=i.deltaY*(1===i.deltaMode?16:2===i.deltaMode?t.contentHeight:1),this.updateScroll())}
+ ),this.pages.on("pointerdown",t=>{
+ this.dragged=!1,this.drag={
+ y:this.toLocal(t.global).y,scroll:this.scrollY,id:t.pointerId}
+ }
+ ),this.pages.on("pointermove",t=>this.moveScroll(t)),this.pages.on("pointerup",()=>{
+ this.drag=null}
+ ),this.pages.on("pointerupoutside",()=>{
+ this.drag=null}
+ ),this.pages.on("pointercancel",()=>{
+ this.drag=null}
+ ),this.pages.on("pointertapcapture",t=>{
+ this.dragged&&t.stopPropagation()}
+ ),this.goldIcon.pivot.set(9,9),this.pearlIcon.pivot.set(9,9),this.dayBg.eventMode=this.walletBg.eventMode=this.battleBg.eventMode=this.battleIcon.eventMode="none",this.meBg.circle(14,14,14).fill(GIi),this.meFace.anchor.set(.5),this.meFace.position.set(14,15),this.meFace.scale.set(.26);
+ const e=(new ip).circle(14,14,14).fill(16777215);
+ this.meFace.mask=e,this.meBg.eventMode=this.meFace.eventMode="none",this.me.addChild(this.meBg,this.meFace,e),this.me.visible=!1,this.me.eventMode="static",this.me.cursor="pointer",this.me.hitArea=new Ui(-6,-8,40,44),this.me.on("pointertap",t=>{
+ t.stopPropagation(),ei(()=>Promise.resolve().then(()=>Qxi),void 0).then(t=>{
+ t.FishingAvatarMaker.isOpen||t.FishingAvatarMaker.getInstance().open(!1)}
+ )}
+ ),ei(()=>Promise.resolve().then(()=>qdi),void 0).then(t=>{
+ this.castleDown=()=>t.BattleController.getInstance().isCastleDestroyed()}
+ ),this.fxLayer.eventMode="none",this.backGlow.eventMode=this.backBg.eventMode=this.backArrow.eventMode="none",this.backBtn.addChild(this.backGlow,this.backBg,this.backArrow,this.backText),this.backBtn.visible=!1,this.backBtn.eventMode="static",this.backBtn.cursor="pointer",this.backBtn.on("pointertap",t=>{
+ t.stopPropagation(),this.tapBack()}
+ ),this.addChild(this.paper,this.pageBg,this.pages,this.pageMask,this.overlay,this.chrome,this.subBar,this.backBtn,this.me,this.dayBg,this.dayText,this.walletBg,this.battleBg,this.battleIcon,this.battleText,this.goldIcon,this.goldText,this.pearlIcon,this.pearlText,this.devRow,this.devToggle,this.navigation,this.maximize,this.close,this.scrollTrack,this.fxLayer,this.wake),this.timer.addEventListener("timer",()=>this.onTimer())}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ static get layoutHeight(){
+ return this.fullscreen?ES.safeHeight:Math.min(960,ES.safeHeight-48)}
+ static get WIDTH(){
+ return this.fullscreen?640:616}
+ static get footerTop(){
+ return this.layoutHeight-this.FOOTER-(this.subOn?this.SUB_BAR:0)}
+ static get CONTENT_X(){
+ return(this.WIDTH-this.CONTENT_W)/2}
+ static get BLEED_W(){
+ return this.fullscreen?this.WIDTH:this.CONTENT_W}
+ static get OVERLAY_PAD(){
+ return this.fullscreen?this.CONTENT_X:0}
+ static get contentTop(){
+ return this.CONTENT_Y*(1-this.immersion)}
+ static get contentHeight(){
+ const t=this.footerTop-this.CONTENT_Y-6;
+ return t+(this.layoutHeight-t)*this.immersion}
+ present(i){
+ var s,e;
+ if(this.activePage===i&&this.parent)return i.update(),void this.refresh();
+ if(this.parent||this.setFullscreen(!0),this.activePage!==i&&(this.setImmersed(!1,!0),null==(s=this.activePage)||s.onHide(),this.pages.removeChildren(),this.activePage=i,t.subOn=!!(null==(e=i.subTabs)?void 0:e.call(i)),this.scrollY=0,this.drag=null,this.pages.addChild(i)),i.onShow(),this.refresh(),!this.parent){
+ super.show(),this.eventMode="static",this.timer.start(),ES.stage.on("resized",this.onResize);
+ const t=RIi.getInstance();
+ t.open=!0,this.unsubscribe.push(t.onChange(()=>this.updateHeader()),t.onNotice(t=>vH.getInstance().showMessage(t)))}
+ }
+ setExchangeOnly(t){
+ var i;
+ this.exchangeOnly=t;
+ for(const s of this.tabButtons)s.root.alpha=!t||"shop"===s.id||"quest"===s.id&&(null==(i=RIi.getInstance().social)?void 0:i.enabled)?1:.35;
+ ei(()=>Promise.resolve().then(()=>GUi),void 0).then(i=>i.FishingShopPage.getInstance().forceExchange(t))}
+ closeForSeason(){
+ var t;
+ this.parent&&(this.hideImmediately(),null==(t=this.onExit)||t.call(this))}
+ async selectTab(t,i="jump"){
+ var s,e,n;
+ if(this.exchangeOnly&&"shop"!==t&&("quest"!==t||!(null==(s=RIi.getInstance().social)?void 0:s.enabled)))return void vH.getInstance().showMessage("회차가 끝나 교환소만 열려 있어요");
+ const h=null==(e=this.activePage)?void 0:e.tabId;
+ "user"===i||"fish"===t?this.backStack=[]:h&&h!==t&&(this.backStack[this.backStack.length-1]===t?this.backStack.pop():this.backStack.push(h)),h!==t||"fish"===t?(await(null==(n=this.onNavigate)?void 0:n.call(this,t)),this.drawBack()):this.drawBack()}
+ async goBack(){
+ var t;
+ const i=this.backStack.pop();
+ i?(await(null==(t=this.onNavigate)?void 0:t.call(this,i)),this.drawBack()):this.drawBack()}
+ tapBack(){
+ var t,i,s,e;
+ (null==(i=null==(t=this.activePage)?void 0:t.backLabel)?void 0:i.call(t))?null==(e=(s=this.activePage).closeOne)||e.call(s):this.goBack(),this.drawBack()}
+ drawBack(){
+ var t,i,s;
+ const e=(null==(i=null==(t=this.activePage)?void 0:t.backLabel)?void 0:i.call(t))??null,n=this.backStack[this.backStack.length-1],h=e??(n?(null==(s=SRi.find(t=>t.id===n))?void 0:s.text)??null:null),r=h?gki(h,"으로","로"):null;
+ if(r===this.backNow)return;
+ const o=!this.backNow&&!!r;
+ this.backNow=r,this.walletSig="",this.drawCurrency(),o&&(MR.fromTo(this.backBtn.scale,{
+ x:.6,y:.6}
+ ,{
+ x:1,y:1,duration:.3,ease:"back.out(2.6)"}
+ ),MR.killTweensOf(this.backGlow),MR.fromTo(this.backGlow,{
+ alpha:.95}
+ ,{
+ alpha:0,duration:.7,repeat:1,delay:.25,ease:"power1.out"}
+ ),MR.fromTo(this.backGlow.scale,{
+ x:1,y:1}
+ ,{
+ x:1.12,y:1.45,duration:.7,repeat:1,delay:.25,ease:"power1.out"}
+ ))}
+ onTimer(){
+ var t;
+ RIi.getInstance().tick(),null==(t=this.activePage)||t.update(),this.updateScroll(),this.updateHeader(),this.updateImmersion(),this.drawBack()}
+ updateImmersion(){
+ var i;
+ if(this.tutorialMode)return;
+ const s=this.activePage;
+ if(!(t.fullscreen&&(null==s?void 0:s.fullBleed)&&0===this.overlay.children.length&&(null==(i=s.canImmerse)?void 0:i.call(s)))||this.isCastleDown())return this.lastInput=performance.now(),void(this.immersed&&this.setImmersed(!1));
+ !this.immersed&&performance.now()-this.lastInput>=t.IMMERSE_AFTER_MS&&this.setImmersed(!0)}
+ get inTutorial(){
+ return this.tutorialMode}
+ setTutorialMode(t){
+ var i;
+ if(this.tutorialMode!==t){
+ this.tutorialMode=t;
+ for(const i of[this.navigation,this.subBar,this.close,this.maximize,this.me,this.backBtn,this.devToggle,this.devRow])t?(this.tutorialEvents.set(i,i.eventMode??"passive"),i.eventMode="none"):i.eventMode=this.tutorialEvents.get(i)??i.eventMode;
+ t?(null==(i=this.immerseTween)||i.kill(),this.immerseTween=null,this.immersed=!0,this.wake.visible=!1,this.applyImmersion(1)):this.setImmersed(!1)}
+ }
+ setImmersed(i,s=!1){
+ var e;
+ if(this.immersed===i&&!s)return;
+ this.immersed=i,this.lastInput=performance.now(),this.wake.visible=i&&!this.tutorialMode,null==(e=this.immerseTween)||e.kill(),this.immerseTween=null;
+ const n=i?1:0;
+ if(s)return void this.applyImmersion(n);
+ const h={
+ t:t.immersion}
+ ;
+ this.immerseTween=MR.to(h,{
+ t:n,duration:i?.6:.3,ease:i?"power2.inOut":"power2.out",onUpdate:Qt(()=>this.applyImmersion(h.t),"onUpdate"),onComplete:Qt(()=>{
+ this.immerseTween=null}
+ ,"onComplete")}
+ )}
+ applyImmersion(i){
+ var s,e,n,h,r;
+ t.immersion=i;
+ for(const t of[this.chrome,this.me,this.backBtn,this.dayBg,this.dayText,this.walletBg,this.battleBg,this.battleIcon,this.battleText,this.goldIcon,this.goldText,this.pearlIcon,this.pearlText,this.devRow,this.devToggle,this.navigation,this.subBar,this.maximize,this.close,this.scrollTrack])t.alpha=1-i;
+ null==(e=null==(s=this.activePage)?void 0:s.setImmersion)||e.call(s,i),null==(h=null==(n=this.activePage)?void 0:n.onResize)||h.call(n),this.layoutPageArea();
+ for(const t of this.overlay.children)null==(r=t.layout)||r.call(t)}
+ layoutPageArea(){
+ const i=this.pageSpan();
+ this.pages.x=i.x,this.pageMask.clear().rect(i.x,t.contentTop,i.w,t.contentHeight).fill(16777215),this.updateScroll()}
+ updateHeader(){
+ var t;
+ const i=RIi.getInstance(),s=i.state;
+ if(s.look!==this.meLookRaw){
+ this.meLookRaw=s.look;
+ const t=i.look;
+ this.me.visible=!!t,t&&(this.meFace.texture=_Ri(t)),this.walletSig=""}
+ const e=i.season,n=i.seasonDays();
+ this.dayText.text="exchangeOnly"===i.phase()&&(null==e?void 0:e.shopEndAt)?`교환만 · ${
+ bki(e.shopEndAt)}
+ 까지`:i.isLastDay()?`${
+ i.eventDay()}
+ 일차 · 오늘 회차 끝`:n?`${
+ i.eventDay()}
+ 일차 / ${
+ n}
+ 일`:(null==e?void 0:e.endAt)?`${
+ i.eventDay()}
+ 일차 · ${
+ bki(e.endAt)}
+  끝`:`${
+ i.eventDay()}
+ 일차`,this.dayText.textColor=i.isLastDay()||"exchangeOnly"===i.phase()?XIi:zIi;
+ for(const r of["gold","pearl"]){
+ if(s[r]===this.target[r])continue;
+ const t=this.target[r]<0;
+ this.target[r]=s[r],MR.killTweensOf(this.shown,r),t?this.shown[r]=s[r]:MR.to(this.shown,{
+ [r]:s[r],duration:.7,ease:"power2.out",onUpdate:Qt(()=>this.drawCurrency(),"onUpdate")}
+ )}
+ this.drawCurrency(),this.drawBattle(),this.speedChip.setText(`×${
+ s.devSpeed}
+ `),this.boatChip.setText(`배 ${
+ s.gear.boat+1}
+ `),this.tideChip.setText(`▸${
+ mSi[(PSi(RIi.getInstance().now())+1)%4]}
+ `);
+ const h=yIi(i.dotsInput("tank"===(null==(t=this.activePage)?void 0:t.tabId)));
+ for(const r of this.tabButtons)r.dot.visible="quest"===r.id?h.quest:"tank"===r.id&&h.tank;
+ this.refreshSub()}
+ refreshSub(){
+ var i,s,e,n,h;
+ const r=!!(null==(s=null==(i=this.activePage)?void 0:i.subTabs)?void 0:s.call(i));
+ if(r===t.subOn)this.drawSub();
+ else{
+ t.subOn=r,this.refresh(),null==(n=null==(e=this.activePage)?void 0:e.onResize)||n.call(e);
+ for(const t of this.overlay.children)null==(h=t.layout)||h.call(t)}
+ }
+ drawSub(){
+ var i,s;
+ const e=t.subOn?(null==(s=null==(i=this.activePage)?void 0:i.subTabs)?void 0:s.call(i))??null:null,n=t.CONTENT_X,h=t.CONTENT_W,r=t.footerTop+6,o=e?`${
+ n}
+ |${
+ r}
+ |${
+ e.index}
+ |${
+ e.items.join(",")}
+ |${
+ (e.dots??[]).map(Number).join("")}
+ `:"off";
+ if(o===this.subSig)return;
+ if(this.subSig=o,this.subBar.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),this.subBar.visible=!!e,!e)return;
+ const a=e.items.length,c=(h-8-4*(a-1))/a;
+ this.subBar.position.set(n,r);
+ const l=(new ip).roundRect(0,0,h,50,14).fill(GIi);
+ l.eventMode="none",this.subBar.addChild(l),e.items.forEach((t,i)=>{
+ var s;
+ const n=i===e.index,h=new Ve;
+ if(h.position.set(4+i*(c+4),4),n){
+ const t=(new ip).roundRect(0,0,c,42,10).fill(UIi);
+ t.eventMode="none",h.addChild(t)}
+ const r=rki(t,n?KIi:zIi,16);
+ if(oki(r,c-16),r.position.set((c-r.width)/2,(42-r.height)/2),h.addChild(r),null==(s=e.dots)?void 0:s[i]){
+ const t=(new ip).circle(0,0,6).fill(15029053);
+ t.eventMode="none",t.position.set(c-12,9),h.addChild(t)}
+ h.eventMode="static",h.cursor="pointer",h.hitArea=new Ui(-2,-8,c+4,58),h.on("pointertap",t=>{
+ var s,e;
+ t.stopPropagation(),n||(null==(e=null==(s=this.activePage)?void 0:s.selectSub)||e.call(s,i),this.resetScroll(),queueMicrotask(()=>this.refreshSub()))}
+ ),this.subBar.addChild(h)}
+ )}
+ drawCurrency(){
+ this.goldText.text=Math.round(this.shown.gold).toLocaleString(),this.pearlText.text=Math.round(this.shown.pearl).toLocaleString();
+ const i=`${
+ this.dayText.text}
+ |${
+ this.goldText.text}
+ |${
+ this.pearlText.text}
+ |${
+ this.backNow}
+ `;
+ if(i===this.walletSig)return;
+ this.walletSig=i,oki(this.goldText,110),oki(this.pearlText,80);
+ const s=t.HEADER/2,e=s-14,n=this.backNow;
+ let h;
+ if(this.backBtn.visible=!!n,this.me.visible=!!RIi.getInstance().look&&!n,this.dayBg.visible=this.dayText.visible=!n,n){
+ this.backText.text=n;
+ const t=32,i=30+this.backText.width+14;
+ this.backBg.clear().roundRect(0,-t/2,i,t,t/2).fill(VIi),this.backGlow.clear().roundRect(0,-t/2,i,t,t/2).stroke({
+ color:VIi,width:3}
+ ),this.backGlow.pivot.set(i/2,0),this.backGlow.x=i/2,this.backGlow.alpha=0,this.backArrow.clear().moveTo(19,-7).lineTo(12,0).lineTo(19,7).stroke({
+ color:jIi,width:3,cap:"round",join:"round"}
+ ),this.backText.position.set(26,-this.backText.height/2),this.backBtn.position.set(14,s),this.backBtn.hitArea=new Ui(-10,-t/2-8,i+20,t+16),h=14+i+8}
+ else{
+ const t=this.me.visible?50:16;
+ this.me.position.set(16,s-14),this.dayText.position.set(t+10,s-this.dayText.height/2);
+ const i=this.dayText.width+20;
+ this.dayBg.clear().roundRect(t,e,i,28,9).fill(GIi),h=t+i+6}
+ this.goldIcon.position.set(h+9+9,s),this.goldText.position.set(this.goldIcon.x+9+5,s-this.goldText.height/2),this.pearlIcon.position.set(this.goldText.x+Math.max(36,this.goldText.width)+12+9,s),this.pearlText.position.set(this.pearlIcon.x+9+5,s-this.pearlText.height/2),this.walletBg.clear().roundRect(h,e,this.pearlText.x+Math.max(12,this.pearlText.width)+10-h,28,9).fill(GIi)}
+ drawBattle(){
+ const i=t.fullscreen;
+ if(this.battleBg.visible=this.battleIcon.visible=this.battleText.visible=i,!i)return void(this.battleSig="");
+ const s=this.isCastleDown(),e=s&&Math.floor(performance.now()/500)%2==0,n=`${
+ EG.wave.toLocaleString()}
+ 층`,h=`${
+ n}
+ |${
+ s}
+ |${
+ e}
+ |${
+ t.WIDTH}
+ |${
+ this.devToggle.visible}
+ `;
+ if(h===this.battleSig)return;
+ this.battleSig=h,this.battleText.text=n,this.battleText.textColor=s?e?16739179:16777215:KIi;
+ const r=t.HEADER/2,o=s?5906207:GIi,a=this.devToggle.visible?this.devToggle.x-8:this.maximize.x+4,c=32+this.battleText.width+10,l=a-c;
+ this.battleBg.clear().roundRect(l,r-14,c,28,9).fill(o);
+ const u=l+10,d=r-8,f=s?16739179:zIi;
+ this.battleIcon.clear().rect(u,d+5,16,11).fill(f).rect(u,d+1,4,5).fill(f).rect(u+6,d+1,4,5).fill(f).rect(u+12,d+1,4,5).fill(f).roundRect(u+5.5,d+9,5,7,2.5).fill(o),this.battleText.position.set(u+16+6,r-this.battleText.height/2)}
+ isCastleDown(){
+ try{
+ return this.castleDown()}
+ catch{
+ return!1}
+ }
+ pulse(t){
+ const i="gold"===t?this.goldIcon:this.pearlIcon;
+ MR.killTweensOf(i.scale),MR.fromTo(i.scale,{
+ x:1.4,y:1.4}
+ ,{
+ x:1,y:1,duration:.35,ease:"back.out(3)"}
+ )}
+ flyCurrency(t,i,s=7){
+ if(!this.parent)return;
+ const e="gold"===t?this.goldIcon:this.pearlIcon,n=this.toLocal(i);
+ for(let h=0;
+ h<s;
+ h++){
+ const i=_ki(t,20);
+ i.pivot.set(10,10),i.position.set(n.x,n.y),this.fxLayer.addChild(i);
+ const r=h/s*Math.PI*2+.6*Math.random(),o=26+30*Math.random();
+ MR.timeline({
+ delay:.035*h,onComplete:Qt(()=>{
+ i.destroy(),this.pulse(t),0===h&&qG.getInstance().playSFX(qG.SFX_GOLD_GOBLIN,.4)}
+ ,"onComplete")}
+ ).fromTo(i.scale,{
+ x:.4,y:.4}
+ ,{
+ x:1,y:1,duration:.2}
+ ,0).to(i,{
+ x:n.x+Math.cos(r)*o,y:n.y+Math.sin(r)*o*.7,duration:.24,ease:"power2.out"}
+ ,0).to(i,{
+ x:e.x,y:e.y,duration:.46,ease:"power2.in"}
+ ,.26).to(i.scale,{
+ x:.7,y:.7,duration:.46}
+ ,.26)}
+ }
+ setFullscreen(i){
+ var s;
+ if(t.fullscreen!==i){
+ this.setImmersed(!1,!0),t.fullscreen=i,EF.getInstance().visible=!i,this.width=t.WIDTH,this.drawMaximizeIcon(),this.onResize();
+ for(const t of this.overlay.children)null==(s=t.layout)||s.call(t)}
+ }
+ pageSpan(){
+ var i;
+ return t.fullscreen&&(null==(i=this.activePage)?void 0:i.fullBleed)?{
+ x:0,w:t.BLEED_W}
+ :{
+ x:t.CONTENT_X,w:t.CONTENT_W}
+ }
+ drawMaximizeIcon(){
+ const i=this.maximizeIcon.clear(),s={
+ color:zIi,width:3.5,join:"round",cap:"round"}
+ ;
+ t.fullscreen?i.moveTo(19,16).lineTo(19,12).lineTo(36,12).lineTo(36,29).lineTo(32,29).stroke(s).roundRect(12,19,17,17,2.5).stroke(s):i.roundRect(13,13,22,22,3).stroke(s)}
+ refresh(){
+ const i=t.WIDTH,s=t.layoutHeight,e=t.fullscreen;
+ this.height=s;
+ const n=s-t.FOOTER;
+ e?this.paper.clear().rect(0,0,i,s).fill(LIi):this.paper.clear().roundRect(0,0,i,s,20).fill(LIi).stroke({
+ color:WIi,width:2}
+ ),this.pageBg.clear().rect(e?0:2,t.HEADER,e?i:i-4,t.footerTop-t.HEADER).fill(DIi),this.overlay.position.set(t.CONTENT_X,t.CONTENT_Y),this.wake.hitArea=new Ui(0,0,i,s),this.chrome.clear().moveTo(24,t.footerTop).lineTo(i-24,t.footerTop).stroke({
+ color:WIi,width:1}
+ ),this.subSig="";
+ const h=t.HEADER/2;
+ this.walletSig="",this.battleSig="",this.close.position.set(i-56,h-24),this.maximize.position.set(i-56-44,h-24),this.devToggle.position.set(i-56-44-8-56,h-13),[this.speedChip,this.dayChip,this.tideChip,this.boatChip,this.goldChip,this.botsChip,this.journeyChip,this.giantChip,this.badgeChip,this.raidChip,this.robbedChip,this.cutChip,this.breakChip,this.hazardChip,this.fixChip,this.brokenDummyChip,this.huntChip,this.huntCrowdChip,this.gearChip,this.netChip,this.resetChip].forEach((t,i)=>t.position.set(i%4*68,30*Math.floor(i/4))),this.devRow.position.set(i-16-266,t.CONTENT_Y+54);
+ const r=(i-28-5*(SRi.length-1))/SRi.length;
+ this.tabButtons.forEach(({
+ id:t,root:i,bg:s,icon:e,text:h,dot:o}
+ ,a)=>{
+ var c;
+ i.position.set(14+a*(r+5),n+8),i.hitArea=new Ui(0,0,r,62);
+ const l=(null==(c=this.activePage)?void 0:c.tabId)===t;
+ s.clear(),l&&s.roundRect((r-52)/2,60,52,3,1.5).fill(VIi),e.tint=l?VIi:zIi,e.position.set((r-26)/2,4),h.textColor=l?VIi:zIi,h.position.set((r-h.width)/2,34),o.position.set(r/2+20,8)}
+ ),this.updateHeader(),this.layoutPageArea(),this.resetPostionY(),this.parent&&this.position.set(320,this.getDefaultPositionY())}
+ scrollToShow(i){
+ const s=i.getBounds(),e=this.pages.toLocal({
+ x:s.x,y:s.y}
+ ).y;
+ this.scrollY=e-.35*t.contentHeight,this.updateScroll()}
+ point(t,i){
+ this.endPoint();
+ const s=new ip,e=new Ve,n=rki(i,jIi,14),h=(new ip).roundRect(0,0,n.width+20,n.height+10,10).fill(VIi);
+ n.position.set(10,5),e.addChild(h,n),this.fxLayer.addChild(s,e),this.pointer={
+ node:t,g:s,tag:e,t0:performance.now()}
+ ,vn.shared.add(this.drawPoint,this),this.drawPoint()}
+ drawPoint(){
+ const i=this.pointer;
+ if(!i)return;
+ const s=performance.now()-i.t0;
+ let e=!i.node.destroyed,n=i.node;
+ for(;
+ e&&n&&n!==this;
+ n=n.parent)n.visible||(e=!1);
+ if(n!==this&&(e=!1),!e||s>5e3)return void this.endPoint();
+ const h=i.node.getBounds(),r=this.toLocal({
+ x:h.x,y:h.y}
+ ),o=this.toLocal({
+ x:h.x+h.width,y:h.y+h.height}
+ ),a=.55+.45*Math.abs(Math.sin(s/260));
+ i.g.clear().roundRect(r.x-5,r.y-5,o.x-r.x+10,o.y-r.y+10,12).stroke({
+ color:VIi,width:4,alpha:a}
+ ),i.tag.position.set(Math.max(8,Math.min(t.WIDTH-i.tag.width-8,(r.x+o.x)/2-i.tag.width/2)),r.y-i.tag.height-12),i.tag.alpha=Math.min(1,s/150)}
+ endPoint(){
+ this.pointer&&(vn.shared.remove(this.drawPoint,this),this.pointer.g.destroy(),this.pointer.tag.destroy({
+ children:!0}
+ ),this.pointer=null)}
+ resetScroll(){
+ this.scrollY=0,this.updateScroll()}
+ maxScroll(){
+ var i,s;
+ return!1===(null==(i=this.activePage)?void 0:i.scrollInShell)?0:Math.max(0,((null==(s=this.activePage)?void 0:s.getLocalBounds().maxY)??0)+12-t.contentHeight)}
+ updateScroll(){
+ const i=this.maxScroll(),s=t.contentHeight;
+ if(this.scrollY=Math.max(0,Math.min(i,this.scrollY)),this.pages.y=t.contentTop-this.scrollY,this.pages.hitArea=new Ui(0,this.scrollY,this.pageSpan().w,s),this.scrollTrack.clear(),i>0){
+ const e=Math.max(28,s*s/(s+i));
+ this.scrollTrack.roundRect(t.WIDTH-12,t.contentTop+(s-e)*this.scrollY/i,3,e,1.5).fill({
+ color:YIi,alpha:.65}
+ )}
+ }
+ moveScroll(t){
+ if(!this.drag||this.drag.id!==t.pointerId||this.maxScroll()<=0)return;
+ const i=this.toLocal(t.global).y-this.drag.y;
+ Math.abs(i)>6&&(this.dragged=!0),this.dragged&&(this.scrollY=this.drag.scroll-i,this.updateScroll())}
+ requestExit(){
+ var i,s,e,n;
+ const h=this.overlay.children[this.overlay.children.length-1];
+ (null==(i=null==h?void 0:h.closeOne)?void 0:i.call(h))||(null==(e=null==(s=this.activePage)?void 0:s.closeOne)?void 0:e.call(s))?this.drawBack():this.backStack.length?this.goBack():!this.activePage||"fish"===this.activePage.tabId||this.exchangeOnly?t.fullscreen?this.setFullscreen(!1):(this.hideImmediately(),null==(n=this.onExit)||n.call(this)):this.selectTab("fish","user")}
+ hideImmediately(){
+ var t;
+ this.setFullscreen(!1),this.timer.stop(),ES.stage.off("resized",this.onResize),this.drag=null;
+ for(const i of this.unsubscribe)i();
+ this.unsubscribe=[],null==(t=this.activePage)||t.onHide(),this.pages.removeChildren(),this.overlay.removeChildren(),this.activePage=null,this.backStack=[],this.backNow=null,this.walletSig="",RIi.getInstance().active=!1,RIi.getInstance().flushHooks(),RIi.getInstance().open=!1,super.hideImmediately()}
+ getDefaultPositionY(){
+ return ES.safeHeight/2}
+ onBackButton(){
+ return this.requestExit(),!0}
+ }
+ ;
+ Qt(TRi,"FishingShell"),Zt(TRi,"instance"),Zt(TRi,"fullscreen",!1),Zt(TRi,"HEADER",52),Zt(TRi,"FOOTER",84),Zt(TRi,"SUB_BAR",62),Zt(TRi,"subOn",!1),Zt(TRi,"CONTENT_Y",56),Zt(TRi,"CONTENT_W",568),Zt(TRi,"IMMERSE_AFTER_MS",3e4),Zt(TRi,"immersion",0);
+ let CRi=TRi;
+ const ORi=[398,307],IRi={
+ "인간":[[387,317],[363,343],[337,363],[310,383]],"엘프":[[410,317],[443,330],[477,350]],"언데드":[[413,297],[450,263],[477,240]],"오크":[[380,300],[350,270],[323,233]]}
+ ,kRi={
+ "인간":[[277,413],[250,437],[217,463],[193,490]],"엘프":[[543,387],[577,400],[610,420],[630,437]],"언데드":[[517,205],[547,183],[577,160]],"오크":[[270,193],[243,173],[217,150],[200,135]]}
+ ;
+ function RRi(t,i,s){
+ const e=Qt((i,s)=>{
+ const e=t[`${
+ i}
+ |${
+ s}
+ `]??[.5,.5];
+ return[800*e[0],600*e[1]]}
+ ,"p"),n=Qt(t=>{
+ const i=[...IRi[t]],s={
+ }
+ ;
+ return s.R=i.push(e(t,"R"))-1,i.push(...kRi[t]),s.C=i.push(e(t,"C"))-1,s.O=i.push(e(t,"O"))-1,{
+ pts:i,at:s}
+ }
+ ,"spoke"),h=n(i.race),r=n(s.race),o=h.at[i.zone],a=r.at[s.zone];
+ if(i.race===s.race)return o===a?[h.pts[o],h.pts[o]]:o<a?h.pts.slice(o,a+1):h.pts.slice(a,o+1).reverse();
+ if("R"===i.zone||"R"===s.zone)return[...h.pts.slice(0,o+1).reverse(),ORi,...r.pts.slice(0,a+1)];
+ const c=h.pts.slice(h.at.C,o+1).reverse(),l=Qt(t=>Math.atan2((t[1]-ORi[1])/268,(t[0]-ORi[0])/362),"ang"),u=l(e(i.race,"C"));
+ let d=l(e(s.race,"C"))-u;
+ for(;
+ d>Math.PI;
+ )d-=2*Math.PI;
+ for(;
+ d<=-Math.PI;
+ )d+=2*Math.PI;
+ const f=Math.max(3,Math.ceil(Math.abs(d)/(Math.PI/12)));
+ for(let p=1;
+ p<f;
+ p++){
+ const t=u+d*p/f;
+ c.push([ORi[0]+362*Math.cos(t),ORi[1]+268*Math.sin(t)])}
+ return c.push(...r.pts.slice(r.at.C,a+1)),c}
+ function xRi(t){
+ const i=[t[0],...t,t[t.length-1]],s=[];
+ for(let n=1;
+ n<i.length-2;
+ n++){
+ const t=i[n-1],e=i[n],h=i[n+1],r=i[n+2];
+ for(let i=0;
+ i<16;
+ i++){
+ const n=i/16,o=n*n,a=o*n,c=Qt(i=>.5*(2*e[i]+(-t[i]+h[i])*n+(2*t[i]-5*e[i]+4*h[i]-r[i])*o+(-t[i]+3*e[i]-3*h[i]+r[i])*a),"f");
+ s.push([c(0),c(1)])}
+ }
+ s.push(t[t.length-1]);
+ const e=[0];
+ for(let n=1;
+ n<s.length;
+ n++)e.push(e[n-1]+Math.hypot(s[n][0]-s[n-1][0],s[n][1]-s[n-1][1]));
+ return{
+ pts:s,L:e,len:e[e.length-1]}
+ }
+ Qt(RRi,"travelRoute"),Qt(xRi,"sampleRoute");
+ const PRi=Qt((t,i=0,s=1)=>t<i?i:t>s?s:t,"clamp$3");
+ function NRi(t,i){
+ const s=PRi(i)*t.len;
+ let e=1;
+ for(;
+ e<t.pts.length-1&&t.L[e]<s;
+ )e++;
+ const n=t.pts[e-1],h=t.pts[e],r=PRi((s-t.L[e-1])/Math.max(1e-6,t.L[e]-t.L[e-1]));
+ return{
+ x:n[0]+(h[0]-n[0])*r,y:n[1]+(h[1]-n[1])*r,ang:Math.atan2(h[1]-n[1],h[0]-n[0])}
+ }
+ function LRi(t,i){
+ const s=PRi(i)*t.len,e=[t.pts[0]];
+ for(let h=1;
+ h<t.pts.length&&t.L[h]<=s;
+ h++)e.push(t.pts[h]);
+ const n=NRi(t,i);
+ return e.push([n.x,n.y]),e}
+ Qt(NRi,"routeAt"),Qt(LRi,"routeUpTo");
+ const DRi=Qt(t=>PRi(.5+.0035*t,1.1,1.9),"travelVoyage"),GRi=Qt(t=>.75+t,"travelArrive"),BRi=Qt(t=>GRi(t)+1.6,"travelTotal"),URi=Qt(t=>GRi(t)+.7,"travelUnblock"),FRi={
+ outQuad:Qt(t=>1-(1-t)*(1-t),"outQuad"),inQuad:Qt(t=>t*t,"inQuad"),outCubic:Qt(t=>1-(1-t)**3,"outCubic"),inOutSine:Qt(t=>(1-Math.cos(Math.PI*t))/2,"inOutSine"),outBack:Qt(t=>1+2.70158*(t-1)**3+1.70158*(t-1)**2,"outBack")}
+ ,$Ri=Qt((t,i,s)=>PRi((t-i)/(s-i)),"prog"),HRi=Qt((t,i,s)=>t+(i-t)*s,"lerp$1");
+ function WRi(t,i){
+ const s=GRi(i),e=t<s+.3?.55*FRi.outQuad($Ri(t,0,.3)):.55*(1-FRi.outQuad($Ri(t,s+.3,s+.7))),n=$Ri(t,.1,.45),h=$Ri(t,s+.3,s+.7);
+ return{
+ dim:e,card:{
+ o:Math.min(FRi.outQuad(n),1-FRi.inQuad(h)),y:40*(1-FRi.outBack(n))+30*FRi.inQuad(h),s:HRi(.94,1,PRi(FRi.outBack(n),0,1.2))}
+ ,draw:FRi.outQuad($Ri(t,.45,.75)),sail:FRi.inOutSine($Ri(t,.75,s)),sailing:t>=.75,ring:t>=s?$Ri(t,s,s+.35):-1,pillTo:{
+ o:FRi.outQuad($Ri(t,.65,.8)),s:t>=s?HRi(1.2,1,FRi.outBack($Ri(t,s,s+.25))):1}
+ ,live:FRi.outQuad($Ri(t,s+.3,s+.7)),boatBack:1-FRi.outCubic($Ri(t,s+.35,s+.95)),banner:$Ri(t,s+.55,s+.75)*(1-$Ri(t,s+1.3,s+1.6))}
+ }
+ Qt(WRi,"travelPose");
+ const VRi=Qt((t,i,s)=>s?t:Math.min(t,GRi(i)),"travelClock"),jRi=Qt((t,i,s)=>s&&t<GRi(i)?GRi(i):t,"travelSkip");
+ function KRi(t){
+ const i=t.charCodeAt(t.length-1)-44032;
+ if(i<0||i>11171)return"(으)로";
+ const s=i%28;
+ return 0===s||8===s?"로":"으로"}
+ Qt(KRi,"ro");
+ const zRi=class t{
+ constructor(t){
+ Zt(this,"root",new Ve),Zt(this,"snap",null),Zt(this,"dim",new ip),Zt(this,"card",new Ve),Zt(this,"win",new Ve),Zt(this,"routeG",new ip),Zt(this,"pins",new ip),Zt(this,"ring",new ip),Zt(this,"wake",new ip),Zt(this,"boat"),Zt(this,"pillTo",new Ve),Zt(this,"banner",new Ve),Zt(this,"route"),Zt(this,"V"),Zt(this,"geom",{
+ x:0,y:0,s:1}
+ ),Zt(this,"k"),Zt(this,"W"),Zt(this,"H"),Zt(this,"t0",performance.now()),Zt(this,"t",0),Zt(this,"result"),Zt(this,"glided",!1),Zt(this,"closing",-1),Zt(this,"resolveDone"),Zt(this,"done",new Promise(t=>this.resolveDone=t)),this.o=t;
+ const i=CRi.getInstance();
+ this.W=CRi.WIDTH,this.H=CRi.layoutHeight,this.k=CRi.BLEED_W/430;
+ const s=nAi.world();
+ this.route=xRi(RRi(s.pins,t.from,t.to)),this.V=DRi(this.route.len);
+ try{
+ const t=BS.app.renderer.generateTexture({
+ target:i,frame:new Ui(0,0,this.W,this.H)}
+ );
+ this.snap=new Ye(t)}
+ catch{
+ this.snap=null}
+ this.dim.rect(0,0,this.W,this.H).fill(133132),this.boat=new Ye(nAi.boat(t.boatLv)),this.build(),this.snap&&this.root.addChild(this.snap),this.root.addChild(this.dim,this.card,this.banner),this.root.eventMode="static",this.root.hitArea=new Ui(0,0,this.W,this.H),this.root.on("pointertap",t=>{
+ t.stopPropagation(),this.skip()}
+ ),i.addChild(this.root),t.wait.then(t=>{
+ this.result=t}
+ ,()=>{
+ this.result="옮기지 못했어요"}
+ ),BS.app.ticker.add(this.tick,this),this.tick()}
+ static get active(){
+ return!!this.current}
+ static play(i){
+ var s;
+ null==(s=this.current)||s.finish();
+ const e=new t(i);
+ return this.current=e,e.done}
+ build(){
+ const t=this.k,i=this.o.from,s=this.o.to,e=356*t,n=230*t,h=12*t,r=e+2*h,o=n+2*h+30*t,a=this.route.pts.map(t=>t[0]),c=this.route.pts.map(t=>t[1]),l=Math.min(...a),u=Math.max(...a),d=Math.min(...c),f=Math.max(...c),p=Math.max(u-l+124,(f-d+124)*e/n),g=p*n/e;
+ this.geom={
+ x:(l+u)/2-p/2,y:(d+f)/2+6-g/2,s:e/p}
+ ;
+ const w=(new ip).roundRect(0,0,r,o,16*t).fill(QIi),m=new Ye(as.EMPTY);
+ nAi.worldMap().then(t=>{
+ m.texture=t,m.width=800*this.geom.s,m.scale.y=m.scale.x,m.position.set(-this.geom.x*this.geom.s,-this.geom.y*this.geom.s)}
+ );
+ const v=(new ip).roundRect(0,0,e,n,10*t).fill(16777215);
+ this.win.addChild(m,this.routeG,this.wake,this.pins,this.ring,this.boat,v),this.win.mask=v,this.win.position.set(h,h),this.boat.anchor.set(.5),this.boat.width=this.boat.height=40*t;
+ const _=this.px(this.route.pts[0]),M=this.px(this.route.pts[this.route.pts.length-1]),b=Qt((i,s)=>Math.max(4*t,Math.min(e-4*t-s,i)),"inX"),y=this.pill(RSi(i.race,i.zone,i.point),16777215),E=_.y+12*t+y.height>n-4*t?_.y-12*t-y.height:_.y+12*t;
+ y.position.set(b(_.x-y.width/2,y.width),E);
+ const A=this.pill(RSi(s.race,s.zone,s.point),VIi),S=M.y-12*t-A.height<4*t;
+ A.pivot.set(A.width/2,S?0:A.height),A.position.set(b(M.x-A.width/2,A.width)+A.width/2,S?M.y+12*t:M.y-12*t),this.pillTo.addChild(A),this.win.addChild(y,this.pillTo);
+ const T=RSi(i.race,i.zone,i.point),C=RSi(s.race,s.zone,s.point),O=rki(`${
+ T}
+ 에서`,zIi,13*t),I=rki(`${
+ C}
+ ${
+ KRi(C)}
+  가는 중`,KIi,13*t);
+ O.position.set(h+4*t,h+n+8*t),I.position.set(r-h-4*t-I.width,h+n+8*t),this.card.addChild(w,this.win,O,I),this.card.pivot.set(r/2,o/2),this.card.position.set(this.W/2,.262*this.H+o/2);
+ const k=rki(C,16777215,17*t),R=new Ve,x=rki(s.race,16777215,12*t),P=(new ip).roundRect(0,0,x.width+14*t,x.height+4*t,8*t).fill(hki[s.race]??VIi);
+ x.position.set(7*t,2*t),R.addChild(P,x);
+ const N=k.width+R.width+40*t,L=Math.max(k.height,R.height)+16*t,D=(new ip).roundRect(0,0,N,L,14*t).fill({
+ color:QIi,alpha:.88}
+ );
+ k.position.set(16*t,(L-k.height)/2),R.position.set(16*t+k.width+8*t,(L-R.height)/2),this.banner.addChild(D,k,R),this.banner.position.set((this.W-N)/2,.167*this.H)}
+ pill(t,i){
+ const s=this.k,e=new Ve,n=rki(t,i,12*s),h=(new ip).roundRect(0,0,n.width+18*s,n.height+6*s,10*s).fill({
+ color:659990,alpha:.86}
+ );
+ return n.position.set(9*s,3*s),e.addChild(h,n),e}
+ px(t){
+ const i=Array.isArray(t)?t[0]:t.x,s=Array.isArray(t)?t[1]:t.y;
+ return{
+ x:(i-this.geom.x)*this.geom.s,y:(s-this.geom.y)*this.geom.s}
+ }
+ get ready(){
+ return null===this.result&&this.o.mapReady()}
+ skip(){
+ const i=jRi(this.t,this.V,this.ready);
+ i!==this.t&&(this.t0-=1e3*(i-this.t)/t.speed)}
+ tick(){
+ var i,s;
+ if("string"==typeof this.result){
+ this.closing<0&&(this.closing=performance.now());
+ const t=Math.min(1,(performance.now()-this.closing)/250);
+ return this.root.alpha=1-t,void(t>=1&&this.finish())}
+ const e=(performance.now()-this.t0)/1e3*t.speed,n=this.t=VRi(e,this.V,this.ready);
+ n<e&&(this.t0=performance.now()-1e3*n/t.speed);
+ const h=WRi(n,this.V),r=this.k,o=GRi(this.V);
+ this.snap&&(this.snap.alpha=1-h.live),this.dim.alpha=h.dim,this.card.alpha=h.card.o,this.card.scale.set(h.card.s),this.card.y=.262*this.H+this.card.pivot.y+h.card.y*r;
+ const a=this.routeG.clear();
+ if(this.dashes(a,LRi(this.route,h.draw),5*r,6*r),a.stroke({
+ color:16777215,width:2.5*r,cap:"round"}
+ ),h.sailing&&h.sail>0){
+ const t=LRi(this.route,h.sail).map(t=>this.px(t));
+ a.moveTo(t[0].x,t[0].y);
+ for(const i of t.slice(1))a.lineTo(i.x,i.y);
+ a.stroke({
+ color:VIi,width:3.5*r,cap:"round",join:"round"}
+ )}
+ const c=this.px(this.route.pts[0]),l=this.px(this.route.pts[this.route.pts.length-1]);
+ this.pins.clear().circle(c.x,c.y,5*r).fill(15921908),h.draw>.85&&this.pins.circle(l.x,l.y,6*r).fill(VIi),this.ring.clear(),h.ring>=0&&this.ring.circle(l.x,l.y,(6+20*(1-(1-h.ring)**2))*r).stroke({
+ color:VIi,width:3*r,alpha:.9*(1-h.ring)}
+ );
+ const u=NRi(this.route,h.sail),d=this.px(u),f=1.2*Math.sin(9*n)*r;
+ if(this.boat.visible=h.sailing,this.boat.position.set(d.x,d.y+f),this.boat.rotation=u.ang+Math.PI/2,this.wake.clear(),h.sailing&&h.sail<.999)for(let t=0;
+ t<3;
+ t++){
+ const i=this.px(NRi(this.route,h.sail-.035*(t+1)));
+ this.wake.circle(i.x,i.y,3*r).fill({
+ color:15334399,alpha:.7-.2*t}
+ )}
+ this.pillTo.alpha=h.pillTo.o,this.pillTo.scale.set(h.pillTo.s),this.banner.alpha=h.banner,!this.glided&&n>=o+.35&&(this.glided=!0,null==(s=(i=this.o).onGlide)||s.call(i,NRi(this.route,1).ang)),this.root.eventMode=n<URi(this.V)?"static":"none",n>=BRi(this.V)&&this.finish()}
+ dashes(t,i,s,e){
+ let n=!0,h=s;
+ for(let r=1;
+ r<i.length;
+ r++){
+ let o=this.px(i[r-1]);
+ const a=this.px(i[r]);
+ let c=Math.hypot(a.x-o.x,a.y-o.y);
+ for(;
+ c>0;
+ ){
+ const i=Math.min(c,h),r=i/c,l={
+ x:o.x+(a.x-o.x)*r,y:o.y+(a.y-o.y)*r}
+ ;
+ n&&t.moveTo(o.x,o.y).lineTo(l.x,l.y),o=l,c-=i,h-=i,h<=1e-6&&(n=!n,h=n?s:e)}
+ }
+ }
+ finish(){
+ var i;
+ t.current===this&&(t.current=null),BS.app.ticker.remove(this.tick,this);
+ const s=null==(i=this.snap)?void 0:i.texture;
+ this.root.destroy({
+ children:!0}
+ ),null==s||s.destroy(!0),this.resolveDone()}
+ }
+ ;
+ Qt(zRi,"FishingTravelFx"),Zt(zRi,"speed",1),Zt(zRi,"current",null);
+ let YRi=zRi;
+ function qRi(t,i,s){
+ const e=new Ve,n=rki(t,i,13),h=new ip;
+ return h.roundRect(0,0,n.width+20,26,13).fill(s),n.position.set(10,(26-n.height)/2),e.addChild(h,n),e.eventMode="none",e}
+ function XRi(t,i=16){
+ const s=new Ve;
+ let e=0;
+ for(const n of t){
+ if(n.icon){
+ const t=NIi(n.icon,18,zIi,2.2);
+ t.position.set(e,0),s.addChild(t),e+=24}
+ const t=rki(n.text,n.color??KIi,14,!1);
+ t.position.set(e,(18-t.height)/2+1),s.addChild(t),e+=t.width+i}
+ return s.eventMode="none",s}
+ function JRi(t,i,s){
+ const e=new Ve,n=vSi[`${
+ t.race}
+ |${
+ t.zone}
+ `],h=i?`${
+ n}
+  · 잡아 봐야 알아요`:t.roam?`${
+ n}
+  · 날마다 바뀌는 곳 (회유)`:t.pts.length>=9?`${
+ n}
+  어디서나`:`${
+ n}
+  · ${
+ t.pts.slice(0,2).map(i=>RSi(t.race,t.zone,i)).join(", ")}
+ ${
+ t.pts.length>2?` 외 ${
+ t.pts.length-2}
+ 곳`:""}
+ `,r=[["depth","깊이","O"===t.zone&&"B"===t.depth?"심해":gSi[t.depth]],["clock","시간","전체"===t.tide?"모든 시간대":mSi[wSi.indexOf(t.tide)]],["map","위치",h]],o=20+34*r.length;
+ return e.addChild(aki(s,o,$Ii,null,12)),r.forEach(([t,n,h],r)=>{
+ const o=10+34*r,a=NIi(t,18,zIi,2.2),c=rki(n,zIi,12),l=rki(h,i&&"map"===t?zIi:KIi,14);
+ a.position.set(14,o+8),c.position.set(40,o+(34-c.height)/2),l.position.set(84,o+(34-l.height)/2),oki(l,s-84-14),e.addChild(a,c,l)}
+ ),e.eventMode="none",e}
+ Qt(qRi,"tagChip"),Qt(XRi,"factRow"),Qt(JRi,"habitatInfo");
+ const QRi=CRi.CONTENT_W,ZRi=["net","aquarium","dex"],txi=["어망","어항","도감"],ixi=Qt(t=>t>=1?16739166:t>=.8?16757611:qIi,"netColor"),sxi=QRi/6,exi=80,nxi=class t extends OR{
+ constructor(){
+ super(),Zt(this,"cells",[]),Zt(this,"headTitle",rki("",KIi,15)),Zt(this,"headHint",rki("",YIi,12,!1)),Zt(this,"row",null);
+ const i=(new ip).rect(0,0,QRi,t.H).fill({
+ color:0,alpha:.001}
+ );
+ i.eventMode="none",this.addChild(i,this.headTitle,this.headHint);
+ for(let s=0;
+ s<6;
+ s++){
+ const i=new Ve,e=new ip,n=new lki(exi,!1,!0),h=_ki("gold",14),r=rki("",zIi,12,!1);
+ e.roundRect(1.5,0,sxi-3,t.H-2,14).fill(ZIi),e.eventMode="none",n.position.set((sxi-exi)/2,8),i.addChild(e,n,h,r),i.position.set(s*sxi,0),i.eventMode="static",i.cursor="pointer",i.hitArea=new Ui(0,0,sxi,t.H),i.on("pointertap",t=>{
+ var i,e,n,h;
+ t.stopPropagation();
+ const r=null==(e=null==(i=this.row)?void 0:i.items)?void 0:e[s];
+ r&&(null==(h=(n=this.row).onPick)||h.call(n,r))}
+ ),this.addChild(i),this.cells.push({
+ root:i,tile:e,card:n,coin:h,under:r}
+ )}
+ }
+ setData(i){
+ this.row=i;
+ const s=i.head;
+ if(this.headTitle.visible=this.headHint.visible=!!s,s){
+ this.headTitle.text=s.title,this.headHint.text=s.hint;
+ const i=t.H-this.headTitle.height-10;
+ this.headTitle.position.set(4,i),this.headHint.position.set(this.headTitle.x+this.headTitle.width+8,i+(this.headTitle.height-this.headHint.height)/2+1),oki(this.headHint,QRi-this.headHint.x-4)}
+ this.cells.forEach((t,s)=>{
+ var e;
+ const n=null==(e=i.items)?void 0:e[s];
+ if(t.root.visible=!!n,!n)return;
+ const h="on"===n.check,r="lock"===n.check,o="price"===i.under&&!r;
+ t.tile.visible=h,t.card.set(n.c.id,kSi(n.c.id).star,n.c.grade),t.card.setFade(r?.4:1),t.card.setMark(h?"on":r?"lock":!n.check&&n.quest?"quest":null,h?ZIi:DIi),t.coin.visible=o,t.under.text=r?"의뢰":o?QOi(n.c).toLocaleString():_Ti(n.c.kg),t.under.textColor=h?VIi:r?YIi:zIi,oki(t.under,sxi-26);
+ const a=(o?17:0)+t.under.width,c=(sxi-a)/2;
+ t.coin.position.set(c,93+(t.under.height-14)/2),t.under.position.set(c+(o?17:0),93)}
+ )}
+ }
+ ;
+ Qt(nxi,"FishGridRow"),Zt(nxi,"H",116);
+ let hxi=nxi;
+ const rxi=QRi/6,oxi=class t extends OR{
+ constructor(){
+ super(),Zt(this,"cells",[]),Zt(this,"row",null);
+ const i=(new ip).rect(0,0,QRi,t.H).fill({
+ color:0,alpha:.001}
+ );
+ i.eventMode="none",this.addChild(i);
+ for(let s=0;
+ s<6;
+ s++){
+ const i=new Ve,e=new lki(72,!1,!0);
+ e.position.set((rxi-72)/2,6),i.addChild(e),i.position.set(s*rxi,0),i.eventMode="static",i.cursor="pointer",i.hitArea=new Ui(0,0,rxi,t.H),i.on("pointertap",t=>{
+ var i;
+ t.stopPropagation();
+ const e=null==(i=this.row)?void 0:i.items[s];
+ e&&this.row.onPick(e.s.id)}
+ ),this.addChild(i),this.cells.push({
+ root:i,card:e}
+ )}
+ }
+ setData(t){
+ this.row=t,this.cells.forEach((i,s)=>{
+ const e=t.items[s];
+ if(i.root.visible=!!e,!e)return;
+ const n=e.d??e.past;
+ i.card.set(e.s.id,e.s.star,n?uTi(n.bestR):0,!n),i.card.setFade(!e.d&&e.past?.45:1)}
+ )}
+ }
+ ;
+ Qt(oxi,"DexRow"),Zt(oxi,"H",88);
+ let axi=oxi;
+ function cxi(t,i,s,e,n,h,r){
+ const o=new pki("",s,e,n);
+ o.setPrimary(h),o.enabled=r;
+ const a=r?h?jIi:KIi:iki,c=rki(t,a,n),l=_ki("gold",n+2),u=rki(i.toLocaleString(),a,n-1);
+ l.alpha=r?1:.5;
+ let d=(s-(c.width+8+l.width+5+u.width))/2;
+ return c.position.set(d,(e-c.height)/2),d+=c.width+8,l.position.set(d,(e-l.height)/2),d+=l.width+5,u.position.set(d,(e-u.height)/2),o.addChild(c,l,u),o}
+ Qt(cxi,"coinButton");
+ const lxi=[{
+ v:1,text:"★1"}
+ ,{
+ v:2,text:"★2 이하"}
+ ,{
+ v:3,text:"★3 이하"}
+ ],uxi=[{
+ v:0,text:"C 보통"}
+ ,{
+ v:1,text:"B 대 이하"}
+ ],dxi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"tabId","tank"),Zt(this,"view","net"),Zt(this,"scrollInShell",!1),Zt(this,"netLayer",new Ve),Zt(this,"capBg",new ip),Zt(this,"capNum",rki("",KIi,26)),Zt(this,"capOf",rki("",zIi,15)),Zt(this,"gradeCounts",[]),Zt(this,"capBar",new ip),Zt(this,"capNote",rki("도둑이 어망에 줄을 걸었어요. 줄을 끊어야 팔 수 있어요",XIi,13,!1)),Zt(this,"sellBtn",new pki("팔기",132,52,18)),Zt(this,"sellGlow",new ip),Zt(this,"glowTween",null),Zt(this,"cutBtn",new pki("줄 끊기",132,52,16)),Zt(this,"netEmpty",rki("어망이 비었어요. 잡은 물고기는 모두 여기에 담겨요.",YIi,14,!1)),Zt(this,"netList",new TR(hxi,QRi,400,0)),Zt(this,"detail",new Ve),Zt(this,"card",null),Zt(this,"sheet",new Ve),Zt(this,"sheetOpen",!1),Zt(this,"sheetBg",new ip),Zt(this,"sheetBack",new Ve),Zt(this,"sheetTitle",rki("물고기 팔기",KIi,20)),Zt(this,"allChip",new dki("모두 고르기",150,40,14)),Zt(this,"starLb",rki("별",zIi,14)),Zt(this,"sizeLb",rki("크기",zIi,14)),Zt(this,"sizeNote",rki("특대·왕은 눌러서만",YIi,12,!1)),Zt(this,"starChips",lxi.map(t=>new dki(t.text,120,38,15))),Zt(this,"sizeChips",uxi.map(t=>new dki(t.text,120,38,15))),Zt(this,"sellList",new TR(hxi,QRi,300,0)),Zt(this,"barBg",new ip),Zt(this,"barN",rki("",zIi,15)),Zt(this,"barCoin",_ki("gold",24)),Zt(this,"barGold",rki("",VIi,24)),Zt(this,"barEmpty",rki("",zIi,17)),Zt(this,"barEmptySub",rki("위 칩으로 한꺼번에 · 눌러서 하나씩",YIi,13,!1)),Zt(this,"barSell",new pki("팔기",200,60,19)),Zt(this,"pickStar",0),Zt(this,"pickSize",-1),Zt(this,"pickAll",!1),Zt(this,"pickAdd",new Set),Zt(this,"pickDel",new Set),Zt(this,"selling",!1),Zt(this,"confirm",new Ve),Zt(this,"aqLayer",new Ve),Zt(this,"dexLayer",new Ve),Zt(this,"raceChips",["전체",...uSi].map(t=>new dki(t,108,36,14))),Zt(this,"zoneChips",["전체",...dSi.map(t=>pSi[t])].map(t=>new dki(t,130,36,14))),Zt(this,"dexKnownLb",rki("잡은 종",zIi,14)),Zt(this,"dexProgress",rki("",KIi,16)),Zt(this,"dexBar",new ip),Zt(this,"dexList",new TR(axi,QRi,300,0)),Zt(this,"raceFilter","전체"),Zt(this,"zoneFilter","전체"),Zt(this,"selected",0),Zt(this,"lastSig",""),this.capBg.eventMode=this.capBar.eventMode=this.sellGlow.eventMode="none",this.capNum.position.set(18,10),this.capNote.position.set(18,48),this.netLayer.addChild(this.capBg,this.capNum,this.capOf,this.capBar,this.capNote),[3,2,1,0].forEach(t=>{
+ const i=new Ve,s=(new ip).roundRect(0,0,20,20,6).fill(t?eki[t]:4868690),e=rki(aTi[t],16777215,13),n=rki("0",KIi,15);
+ e.position.set((20-e.width)/2,(20-e.height)/2),n.position.set(25,(20-n.height)/2),i.addChild(s,e,n),i.eventMode="none",this.gradeCounts.push({
+ root:i,n}
+ ),this.netLayer.addChild(i)}
+ ),this.sellBtn.position.set(QRi-18-132,12),this.sellBtn.onTap=()=>this.openSheet(),this.cutBtn.position.set(QRi-18-132,12),this.cutBtn.onTap=async()=>{
+ const t=await RIi.getInstance().plunderCut();
+ vH.getInstance().showMessage(t??"줄을 끊었어요! 어망을 지켰어요"),this.render()}
+ ,this.netEmpty.position.set(4,100),this.netEmpty.setWrapWidth(QRi-8),this.netList.y=88,this.netLayer.addChild(this.sellGlow,this.sellBtn,this.cutBtn,this.netEmpty,this.netList),this.sheetBg.eventMode="static";
+ const t=(new ip).roundRect(0,0,46,46,12).fill(GIi).moveTo(27,14).lineTo(18,23).lineTo(27,32).stroke({
+ color:KIi,width:3.5,cap:"round",join:"round"}
+ );
+ t.eventMode="none",this.sheetBack.addChild(t),this.sheetBack.eventMode="static",this.sheetBack.cursor="pointer",this.sheetBack.hitArea=new Ui(-6,-6,58,58),this.sheetBack.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>this.closeSheet())}
+ ),this.sheetTitle.position.set(60,9),this.allChip.soft=!0,this.allChip.position.set(QRi-150,3),this.allChip.onTap=()=>this.pickRule("all",0),this.starLb.position.set(2,67),this.sizeLb.position.set(2,113);
+ const i=(QRi-52-16)/3;
+ this.starChips.forEach((t,s)=>{
+ t.soft=!0,t.resize(i,38),t.position.set(52+s*(i+8),58),t.onTap=()=>this.pickRule("star",lxi[s].v)}
+ ),this.sizeChips.forEach((t,s)=>{
+ t.soft=!0,t.resize(i,38),t.position.set(52+s*(i+8),104),t.onTap=()=>this.pickRule("size",uxi[s].v)}
+ ),oki(this.sizeNote,i-8),this.sizeNote.position.set(52+2*(i+8)+(i-this.sizeNote.width)/2,104+(38-this.sizeNote.height)/2),this.sellList.y=156,this.barBg.eventMode="none",this.barSell.onTap=()=>{
+ this.sellPicked()}
+ ,this.sheet.addChild(this.sheetBg,this.sheetBack,this.sheetTitle,this.allChip,this.starLb,this.sizeLb,...this.starChips,...this.sizeChips,this.sizeNote,this.sellList,this.barBg,this.barN,this.barCoin,this.barGold,this.barEmpty,this.barEmptySub,this.barSell),this.sheet.visible=!1,this.detail.visible=!1,this.confirm.visible=!1;
+ const s=(QRi-32)/5;
+ this.raceChips.forEach((t,i)=>{
+ t.soft=!0,t.dot=i?hki[uSi[i-1]]:null,t.resize(s,36),t.position.set(i*(s+8),0),t.onTap=()=>{
+ this.raceFilter=i?uSi[i-1]:"전체",this.render(!0)}
+ ,this.dexLayer.addChild(t)}
+ );
+ const e=(QRi-24)/4;
+ this.zoneChips.forEach((t,i)=>{
+ t.soft=!0,t.resize(e,36),t.position.set(i*(e+8),44),t.onTap=()=>{
+ this.zoneFilter=t.value,this.render(!0)}
+ ,this.dexLayer.addChild(t)}
+ ),this.dexKnownLb.position.set(2,93),this.dexBar.eventMode="none",this.dexList.y=122,this.dexLayer.addChild(this.dexKnownLb,this.dexProgress,this.dexBar,this.dexList),this.addChild(this.netLayer,this.aqLayer,this.dexLayer,this.sheet,this.detail,this.confirm)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ onResize(){
+ this.render()}
+ onShow(){
+ this.render(!0)}
+ onHide(){
+ this.sheetOpen=!1,this.sheet.visible=!1,this.card=null,this.detail.visible=!1,this.hideConfirm(),this.stopGlow()}
+ subTabs(){
+ return this.sheetOpen?null:{
+ items:txi,index:ZRi.indexOf(this.view)}
+ }
+ selectSub(t){
+ this.view=ZRi[t]??"net",this.card=null,this.detail.visible=!1,this.render(!0)}
+ closeOne(){
+ return this.confirm.visible?(this.hideConfirm(),!0):this.card?(this.closeDetail(),!0):!!this.sheetOpen&&(this.closeSheet(),!0)}
+ update(){
+ this.sig()!==this.lastSig&&"dex"!==this.view&&this.render()}
+ sig(){
+ var t,i,s;
+ const e=RIi.getInstance(),n=e.state;
+ return`${
+ this.view}
+ |${
+ n.icebox.length}
+ |${
+ e.netCap}
+ |${
+ (null==(t=n.aquarium)?void 0:t.fish.length)??0}
+ |${
+ (null==(i=n.aquarium)?void 0:i.lv)??0}
+ |${
+ !!(null==(s=e.plunder)?void 0:s.raidBy)}
+ `}
+ openDex(t){
+ this.view="dex",this.selected=t,this.raceFilter=kSi(t).race,this.zoneFilter="전체",this.card={
+ mode:"dex",id:t}
+ }
+ openView(t){
+ this.view=t,this.sheetOpen&&this.closeSheet(),this.card=null,this.detail.visible=!1}
+ get sellButton(){
+ return this.sellBtn}
+ render(t=!1){
+ this.lastSig=this.sig(),this.netLayer.visible="net"===this.view,this.aqLayer.visible="aquarium"===this.view,this.dexLayer.visible="dex"===this.view,"net"===this.view?this.renderNet(t):(this.stopGlow(),"aquarium"===this.view?this.renderAquarium():this.renderDex(t)),this.sheetOpen&&this.renderSheet(),this.card&&this.drawDetail()}
+ fishCells(){
+ const t=RIi.getInstance(),i=new Map;
+ return t.netFish().map(s=>{
+ const e=`${
+ s.id}
+ :${
+ s.grade}
+ :${
+ s.at}
+ :${
+ s.kg}
+ `,n=i.get(e)??0;
+ return i.set(e,n+1),{
+ c:s,uid:`${
+ e}
+ #${
+ n}
+ `,quest:t.isQuestFish(s)}
+ }
+ )}
+ renderNet(t){
+ var i;
+ const s=RIi.getInstance(),e=CRi.contentHeight,n=s.netCount(),h=s.netCap,r=h?n/h:0,o=n>=h,a=!!(null==(i=s.plunder)?void 0:i.raidBy);
+ this.capBg.clear().roundRect(0,0,QRi,76,14).fill(GIi),this.capNum.text=`${
+ n}
+ `,this.capNum.textColor=o?ixi(1):KIi,this.capOf.text=`/ ${
+ h}
+ `,this.capOf.position.set(this.capNum.x+this.capNum.width+5,this.capNum.y+this.capNum.height-this.capOf.height-2);
+ const c=this.fishCells();
+ let l=Math.max(110,this.capOf.x+this.capOf.width+18);
+ [3,2,1,0].forEach((t,i)=>{
+ const s=c.filter(i=>i.c.grade===t).length,e=this.gradeCounts[i];
+ e.n.text=`${
+ s}
+ `,e.root.alpha=s?1:.35,e.root.position.set(l,15),l+=25+e.n.width+14}
+ ),this.capBar.clear(),a||vki(this.capBar,18,54,QRi-18-132-36,6,Math.min(1,r),ixi(r)),this.capNote.visible=a,oki(this.capNote,QRi-18-132-36),this.sellBtn.visible=!a,this.cutBtn.visible=a,this.sellBtn.enabled=n>0,o&&!a?this.startGlow():this.stopGlow(),this.netEmpty.visible=!c.length,this.netList.visible=c.length>0,this.netList.setListHeight(Math.max(60,e-this.netList.y),!1);
+ const u=[];
+ for(let d=0;
+ d<c.length;
+ d+=6)u.push({
+ items:c.slice(d,d+6),under:"kg",onPick:Qt(t=>this.openCard({
+ mode:"net",uid:t.uid}
+ ),"onPick")}
+ );
+ this.netList.dataProvider=u,t&&this.netList.showTopItem()}
+ startGlow(){
+ if(this.glowTween)return;
+ const t=this.sellBtn,i=this.sellGlow;
+ i.clear().roundRect(-66,-26,132,52,12).fill(VIi),i.position.set(t.x+66,t.y+26),i.visible=!0,this.glowTween=MR.timeline({
+ repeat:-1}
+ ).fromTo(i,{
+ alpha:.5}
+ ,{
+ alpha:0,duration:1.4,ease:"power1.out"}
+ ,0).fromTo(i.scale,{
+ x:1,y:1}
+ ,{
+ x:1+28/132,y:1+28/52,duration:1.4,ease:"power1.out"}
+ ,0)}
+ stopGlow(){
+ this.glowTween&&(this.glowTween.kill(),this.glowTween=null,this.sellGlow.visible=!1)}
+ openCard(t){
+ this.card=t,this.drawDetail(),MR.fromTo(this.detail,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ ),jG("light")}
+ closeDetail(){
+ this.card=null,this.detail.visible=!1,queueMicrotask(()=>{
+ this.card||this.detail.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ))}
+ )}
+ drawDetail(){
+ var t,i;
+ const s=this.card;
+ if(!s)return;
+ const e=RIi.getInstance();
+ let n=null,h=!1;
+ if("net"===s.mode){
+ const t=this.fishCells().find(t=>t.uid===s.uid);
+ if(!t)return void this.closeDetail();
+ n=t.c,h=t.quest}
+ else if("aq"===s.mode&&(n=e.aquarium().fish[s.index]??null,!n))return void this.closeDetail();
+ const r=kSi(n?n.id:s.id),o="dex"===s.mode?e.state.dex[r.id]:void 0,a="dex"!==s.mode||o||null==(t=e.life)?void 0:t.dex[r.id],c="dex"!==s.mode||!!o||!!a,l=this.detail,u=CRi.contentHeight,d=CRi.OVERLAY_PAD,f=Math.min(QRi-40,500),p=20,g=!!(null==(i=e.plunder)?void 0:i.raidBy);
+ l.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),l.visible=!0;
+ const w=(new ip).rect(-d,0,QRi+2*d,u).fill({
+ color:0,alpha:HIi}
+ );
+ w.eventMode="static",w.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>this.closeDetail())}
+ );
+ const m=new Ve,v=new ip;
+ m.eventMode="static",m.on("pointertap",t=>t.stopPropagation()),m.addChild(v);
+ const _=n?n.grade:o?uTi(o.bestR):a?uTi(a.bestR):0,M=new lki(104,!1,!0);
+ M.set(r.id,r.star,_,!c),M.setFade(!o&&a?.45:1),M.position.set(p,p);
+ const b=142,y=f-b-p,E=rki(c?r.name:"???",c?KIi:zIi,21);
+ E.position.set(b,22),oki(E,y-40);
+ const A=new Ve,S=[];
+ n?S.push(n.grade?qRi(`${
+ aTi[n.grade]}
+  ${
+ dTi(n.grade)}
+ `,16777215,eki[n.grade]):qRi("C 보통",zIi,BIi)):_&&S.push(qRi(`최고 ${
+ aTi[_]}
+  ${
+ dTi(_)}
+ `,16777215,eki[_])),S.push(qRi(`★${
+ r.star}
+ `,VIi,BIi),qRi(r.kind,zIi,BIi));
+ const T=$Si(r);
+ T&&S.push(qRi(T,zIi,BIi)),h&&S.push(qRi("의뢰용",qIi,1522214));
+ let C,O,I=0;
+ for(const D of S)D.x=I,I+=D.width+6,A.addChild(D);
+ if(A.position.set(b,56),A.width>y&&A.scale.set(y/A.width),n){
+ const t=Math.max(1,Math.floor((n.at-e.state.startAt)/864e5)+1);
+ C=XRi([{
+ icon:"weight",text:_Ti(n.kg)}
+ ,{
+ icon:"ruler",text:`${
+ n.cm}
+ cm`}
+ ]),O=XRi([{
+ icon:"pin",text:RSi(n.race,n.zone,n.point)}
+ ,{
+ text:`· ${
+ t}
+ 일차`,color:zIi}
+ ],6)}
+ else if(o)C=XRi([{
+ icon:"trophy",text:`최고 ${
+ _Ti(o.bestKg)}
+ `}
+ ,{
+ text:"잡은 수",color:zIi}
+ ,{
+ text:`${
+ o.count}
+ 마리`}
+ ],12),O=XRi([{
+ icon:"pin",text:`처음 ${
+ o.firstPoint}
+ `}
+ ,{
+ text:`· ${
+ o.firstDay}
+ 일차`,color:zIi}
+ ],6);
+ else if(a)C=XRi([{
+ text:`지난 회차에 잡았어요 (${
+ a.firstSeason}
+ 회차부터)`,color:zIi}
+ ]),O=XRi([{
+ icon:"trophy",text:`최고 ${
+ _Ti(a.bestKg)}
+ `}
+ ,{
+ text:`· ${
+ a.count}
+ 마리`,color:zIi}
+ ],6);
+ else{
+ const t=e.state.lost[r.id];
+ C=XRi([{
+ text:"아직 못 잡았어요",color:zIi}
+ ]),O=t?XRi([{
+ icon:"trophy",text:`놓친 대물 ${
+ _Ti(t)}
+ `,color:VIi}
+ ]):null}
+ C.position.set(b,92);
+ for(const D of[C,O])D&&D.width>y&&D.scale.set(y/D.width);
+ m.addChild(M,E,A,C),O&&(O.position.set(b,116),m.addChild(O));
+ let k=144;
+ const R=JRi(r,"dex"===s.mode&&!c&&r.star>=3,f-40);
+ R.position.set(p,k),m.addChild(R),k+=R.height+16;
+ const x=f-40;
+ if("net"===s.mode&&n){
+ const t=n,i=tIi(t),s=i?(x-10)/2:x,o=cxi("팔기",QOi(t),s,58,17,!0,!g);
+ if(o.position.set(i?p+s+10:p,k),o.onTap=()=>{
+ h?this.ask("의뢰에 쓸 물고기예요","팔면 다시 잡아야 해요",[t],"남겨 두기","그래도 팔기",!1,()=>{
+ this.sellCatches([t],o)}
+ ):this.sellCatches([t],o)}
+ ,i){
+ const i=e.aquarium(),n=new pki("어항에 넣기",s,58,17);
+ n.setPrimary(!1),n.position.set(p,k),n.enabled=!g&&i.fish.length<i.cap,n.onTap=async()=>{
+ n.enabled=!1;
+ const i=await e.aquariumPutFish(t);
+ vH.getInstance().showMessage(i??`${
+ gki(r.name,"을","를")}
+  어항에 넣었어요. 어항 물고기는 도둑맞지 않고 팔리지도 않아요`),i?n.enabled=!0:(this.card=null,this.detail.visible=!1,this.render())}
+ ,m.addChild(n)}
+ m.addChild(o)}
+ else if("aq"===s.mode){
+ const t=XRi([{
+ icon:"shield",text:"어항 물고기는 도둑맞지 않고 팔리지도 않아요",color:YIi}
+ ]);
+ t.position.set(p,k-2),m.addChild(t),k+=30;
+ const i=new pki("어망으로 꺼내기",x,58,17);
+ i.setPrimary(!1),i.position.set(p,k),i.onTap=async()=>{
+ i.enabled=!1;
+ const t=await e.aquariumTake(s.index);
+ vH.getInstance().showMessage(t??`${
+ gki(r.name,"을","를")}
+  어망으로 꺼냈어요`),t?i.enabled=!0:(this.card=null,this.detail.visible=!1,this.render())}
+ ,m.addChild(i)}
+ const P=new Ve,N=(new ip).moveTo(14,14).lineTo(30,30).moveTo(30,14).lineTo(14,30).stroke({
+ color:zIi,width:3,cap:"round"}
+ );
+ N.eventMode="none",P.addChild(N),P.position.set(f-52,8),P.eventMode="static",P.cursor="pointer",P.hitArea=new Ui(0,0,44,44),P.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>this.closeDetail())}
+ ),m.addChild(P);
+ const L="dex"===s.mode?k-16+p:k+58+p;
+ v.roundRect(0,0,f,L,16).fill(FIi),m.hitArea=new Ui(0,0,f,L),m.position.set((QRi-f)/2,Math.max(10,(u-L)/2)),l.addChild(w,m)}
+ openSheet(){
+ this.sellBtn.enabled&&(this.pickStar=0,this.pickSize=-1,this.pickAll=!1,this.pickAdd.clear(),this.pickDel.clear(),this.sheetOpen=!0,this.sheet.visible=!0,this.sellList.showTopItem(),CRi.getInstance().refreshSub(),this.renderSheet(),MR.fromTo(this.sheet,{
+ alpha:0,y:30}
+ ,{
+ alpha:1,y:0,duration:.22,ease:"power2.out"}
+ ))}
+ closeSheet(){
+ this.sheetOpen=!1,this.sheet.visible=!1,this.hideConfirm(),CRi.getInstance().refreshSub(),this.render()}
+ pickRule(t,i){
+ "all"===t?(this.pickAll=!this.pickAll,this.pickAll&&(this.pickStar=0,this.pickSize=-1)):("star"===t?this.pickStar=this.pickStar===i?0:i:this.pickSize=this.pickSize===i?-1:i,this.pickAll=!1),this.pickAdd.clear(),this.pickDel.clear(),jG("light"),this.renderSheet()}
+ ruleHit(t){
+ return!(tIi(t)||!this.pickAll&&(!this.pickStar&&this.pickSize<0||this.pickStar&&!(kSi(t.id).star<=this.pickStar)||!(this.pickSize<0||t.grade<=this.pickSize)))}
+ picked(t){
+ return!t.quest&&!this.pickDel.has(t.uid)&&(this.ruleHit(t.c)||this.pickAdd.has(t.uid))}
+ togglePick(t){
+ t.quest?vH.getInstance().showMessage("의뢰에 쓸 물고기라 남겨 둬요"):(this.picked(t)?(this.pickAdd.delete(t.uid),this.ruleHit(t.c)&&this.pickDel.add(t.uid)):(this.pickDel.delete(t.uid),this.ruleHit(t.c)||this.pickAdd.add(t.uid)),jG("light"),queueMicrotask(()=>{
+ this.sheetOpen&&this.renderSheet()}
+ ))}
+ pickedFish(){
+ return this.fishCells().filter(t=>this.picked(t)).map(t=>t.c)}
+ renderSheet(){
+ var t;
+ const i=RIi.getInstance(),s=CRi.contentHeight,e=CRi.OVERLAY_PAD,n=!!(null==(t=i.plunder)?void 0:t.raidBy);
+ this.sheetBg.clear().rect(-e,0,QRi+2*e,s).fill(DIi),this.allChip.selected=this.pickAll,this.allChip.setText(this.pickAll?"모두 고름":"모두 고르기"),this.starChips.forEach((t,i)=>{
+ t.selected=lxi[i].v===this.pickStar,t.draw()}
+ ),this.sizeChips.forEach((t,i)=>{
+ t.selected=uxi[i].v===this.pickSize,t.draw()}
+ );
+ const h=this.fishCells().map(t=>({
+ ...t,check:t.quest?"lock":this.picked(t)?"on":"off"}
+ )).sort((t,i)=>QOi(t.c)-QOi(i.c)||kSi(t.c.id).star-kSi(i.c.id).star),r=h.filter(t=>!t.quest&&!tIi(t.c)),o=h.filter(t=>!t.quest&&tIi(t.c)),a=h.filter(t=>t.quest),c=[],l=Qt(t=>{
+ for(let i=0;
+ i<t.length;
+ i+=6)c.push({
+ items:t.slice(i,i+6),under:"price",onPick:Qt(t=>this.togglePick(t),"onPick")}
+ )}
+ ,"add");
+ l(r),o.length&&(c.push({
+ head:{
+ title:`아끼는 물고기 ${
+ o.length}
+ `,hint:"★4 이상·특대·왕 · 눌러야 골라져요"}
+ }
+ ),l(o)),a.length&&(c.push({
+ head:{
+ title:`의뢰용 ${
+ a.length}
+ `,hint:"퀘스트에 써서 팔지 않아요"}
+ }
+ ),l(a)),this.sellList.setListHeight(Math.max(60,s-156-96),!1),this.sellList.dataProvider=c;
+ const u=s-96;
+ this.barBg.clear().rect(-e,u,QRi+2*e,96).fill(LIi);
+ const d=this.pickedFish(),f=d.length,p=d.reduce((t,i)=>t+QOi(i),0),g=f>0&&!n;
+ this.barN.visible=this.barCoin.visible=this.barGold.visible=g,this.barEmpty.visible=!g,this.barEmptySub.visible=!f&&!n,g&&(this.barN.text=`${
+ f}
+ 마리 팔면`,this.barN.position.set(4,u+16),this.barCoin.position.set(4,u+48),this.barGold.text=p.toLocaleString(),this.barGold.position.set(36,u+60-this.barGold.height/2)),this.barEmpty.text=n?"도둑이 줄을 걸었어요. 줄을 끊어야 팔 수 있어요":"팔 물고기를 골라요",this.barEmpty.textColor=n?XIi:zIi,oki(this.barEmpty,QRi-230),this.barEmpty.position.set(4,u+(n?36:20)),this.barEmptySub.position.set(4,u+52),this.barSell.position.set(QRi-200,u+18),this.barSell.enabled=g&&!this.selling}
+ async sellPicked(){
+ const t=this.pickedFish();
+ if(!t.length||this.selling)return;
+ const i=t.filter(t=>tIi(t));
+ i.length?this.ask("아끼는 물고기도 팔까요?",`★4 이상·특대·왕 ${
+ i.length}
+ 마리가 들어 있어요\n어항에 넣으면 털리지 않고 남아요`,i,"빼고 팔기","모두 팔기",!1,()=>{
+ this.sellCatches(t,this.barSell)}
+ ,()=>{
+ const i=t.filter(t=>!tIi(t));
+ i.length&&this.sellCatches(i,this.barSell)}
+ ):await this.sellCatches(t,this.barSell)}
+ async sellCatches(t,i){
+ if(this.selling)return;
+ this.selling=!0,this.sheetOpen&&this.renderSheet();
+ const s=i.toGlobal({
+ x:60,y:28}
+ );
+ let e;
+ try{
+ e=await RIi.getInstance().sellFish(t)}
+ finally{
+ this.selling=!1}
+ if(e.message)return vH.getInstance().showMessage(e.message),void this.render();
+ vH.getInstance().showMessage(`${
+ e.count}
+ 마리 팔았어요 · ${
+ e.gold.toLocaleString()}
+  G`),CRi.getInstance().flyCurrency("gold",s,Math.min(10,3+e.count)),jG("medium"),this.card=null,this.detail.visible=!1,this.sheetOpen?this.closeSheet():this.render()}
+ ask(t,i,s,e,n,h,r,o){
+ const a=this.confirm,c=CRi.contentHeight,l=CRi.OVERLAY_PAD,u=Math.min(QRi-60,420);
+ a.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const d=(new ip).rect(-l,0,QRi+2*l,c).fill({
+ color:0,alpha:HIi}
+ ),f=rki(t,VIi,19),p=i.split("\n").map(t=>{
+ const i=rki(t,zIi,14,!1);
+ return oki(i,u-36),i}
+ ),g=new Ve,w=s.slice(0,6);
+ w.forEach((t,i)=>{
+ const s=new lki(52,!1,!0);
+ s.set(t.id,kSi(t.id).star,t.grade),s.position.set(60*i,0),g.addChild(s)}
+ );
+ let m=18;
+ f.position.set((u-f.width)/2,m),m+=f.height+14,g.position.set((u-(60*w.length-8))/2,m),m+=66;
+ for(const E of p)E.position.set((u-E.width)/2,m),m+=E.height+2;
+ m+=16;
+ const v=(u-36-10)/2,_=new pki(e,v,52,16),M=new pki(n,v,52,16);
+ _.setPrimary(!h),M.setPrimary(h),_.position.set(18,m),M.position.set(18+v+10,m),_.onTap=()=>{
+ this.hideConfirm(),null==o||o()}
+ ,M.onTap=()=>{
+ this.hideConfirm(),r()}
+ ;
+ const b=m+52+18,y=new Ve;
+ y.addChild(aki(u,b,FIi,null,16),f,g,...p,_,M),y.position.set((QRi-u)/2,Math.max(10,(c-b)/2)),a.addChild(d,y),a.hitArea=new Ui(-l,0,QRi+2*l,c),a.eventMode="static",a.removeAllListeners("pointertap"),a.on("pointertap",t=>t.stopPropagation()),a.visible=!0,MR.fromTo(y,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ )}
+ hideConfirm(){
+ this.confirm.visible&&(this.confirm.visible=!1,queueMicrotask(()=>{
+ this.confirm.visible||this.confirm.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ))}
+ ))}
+ renderAquarium(){
+ const t=RIi.getInstance(),i=t.state,s=t.aquarium(),e=this.aqLayer;
+ e.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const n=rki("어항",KIi,18),h=rki(`${
+ s.fish.length}
+  / ${
+ s.cap}
+ `,zIi,16);
+ n.position.set(2,8),h.position.set(n.x+n.width+8,n.y+n.height-h.height-1);
+ const r=XRi([{
+ icon:"shield",text:"도둑맞지 않고 팔리지도 않아요",color:YIi}
+ ]);
+ if(r.position.set(2,42),e.addChild(n,h,r),null!==s.nextPrice){
+ const n=s.nextPrice,h=172,r=cxi("칸 +5",n,h,44,14,!1,i.gold>=n);
+ r.position.set(QRi-h,4),r.onTap=async()=>{
+ const i=await t.aquariumExpand();
+ vH.getInstance().showMessage(i??`어항이 ${
+ t.aquarium().cap}
+ 칸이 됐어요`),this.render()}
+ ,e.addChild(r)}
+ const o=QRi/5;
+ for(let a=0;
+ a<s.cap;
+ a++){
+ const t=a%5*o,i=76+Math.floor(a/5)*hxi.H,n=s.fish[a],h=new Ve;
+ if(h.position.set(t,i),n){
+ const t=new lki(exi,!1,!0);
+ t.set(n.id,kSi(n.id).star,n.grade),t.position.set((o-exi)/2,8);
+ const i=rki(_Ti(n.kg),zIi,12,!1);
+ i.position.set((o-i.width)/2,93),h.addChild(t,i),h.eventMode="static",h.cursor="pointer",h.hitArea=new Ui(0,0,o,hxi.H),h.on("pointertap",t=>{
+ t.stopPropagation(),this.openCard({
+ mode:"aq",index:a}
+ )}
+ )}
+ else{
+ const t=(new ip).roundRect((o-exi)/2,8,exi,exi,16).fill({
+ color:GIi,alpha:.75}
+ );
+ t.eventMode="none",h.addChild(t)}
+ e.addChild(h)}
+ if(!s.fish.length){
+ const t=rki("★4 이상이나 특대·왕 물고기를 어망에서 누르고 [어항에 넣기]로 넣어요.",YIi,13,!1);
+ t.setWrapWidth(QRi-8),t.position.set(4,76+Math.ceil(s.cap/5)*hxi.H+4),e.addChild(t)}
+ }
+ renderDex(t){
+ const i=RIi.getInstance(),s=i.state,e=CRi.contentHeight;
+ this.raceChips.forEach(t=>{
+ t.selected=t.value===this.raceFilter,t.draw()}
+ ),this.zoneChips.forEach(t=>{
+ t.selected=t.value===this.zoneFilter,t.draw()}
+ );
+ const n=OSi.filter(t=>!("전체"!==this.raceFilter&&t.race!==this.raceFilter||"전체"!==this.zoneFilter&&pSi[t.zone]!==this.zoneFilter)),h=n.filter(t=>s.dex[t.id]).length;
+ this.dexProgress.text=`${
+ h}
+  / ${
+ n.length}
+ `,this.dexProgress.position.set(this.dexKnownLb.x+this.dexKnownLb.width+8,this.dexKnownLb.y+this.dexKnownLb.height-this.dexProgress.height+1);
+ const r=this.dexProgress.x+this.dexProgress.width+16;
+ this.dexBar.clear(),vki(this.dexBar,r,100,QRi-r-2,6,n.length?h/n.length:0,qIi);
+ const o=[];
+ for(let a=0;
+ a<n.length;
+ a+=6)o.push({
+ items:n.slice(a,a+6).map(t=>{
+ var e;
+ return{
+ s:t,d:s.dex[t.id],past:s.dex[t.id]||null==(e=i.life)?void 0:e.dex[t.id]}
+ }
+ ),onPick:Qt(t=>{
+ this.selected=t,this.openCard({
+ mode:"dex",id:t}
+ )}
+ ,"onPick")}
+ );
+ if(this.dexList.setListHeight(e-this.dexList.y,!1),this.dexList.dataProvider=o,t){
+ const t=this.selected?n.findIndex(t=>t.id===this.selected):-1;
+ t>=12?this.dexList.scrollTo(Math.floor(t/6)):this.dexList.showTopItem()}
+ }
+ }
+ ;
+ Qt(dxi,"FishingTankPage"),Zt(dxi,"instance");
+ let fxi=dxi;
+ const pxi=CRi.CONTENT_W,gxi=500,wxi=Qt((t,i,s=0)=>222+s+108*t+(i?28:0)+90,"cardH"),mxi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"dim",new ip),Zt(this,"card",new Ve),Zt(this,"bg",aki(gxi,wxi(2,!0),FIi,null,18)),Zt(this,"cooler",yki("keepnet",40,VIi)),Zt(this,"away",rki("",zIi,14)),Zt(this,"count",rki("",KIi,40)),Zt(this,"sub",rki("",zIi,14)),Zt(this,"warn",rki("",XIi,13)),Zt(this,"cells",[]),Zt(this,"sum",rki("",VIi,15)),Zt(this,"ok",new pki("확인",200,50,16)),Zt(this,"tl",null),Zt(this,"cardHeight",0),this.dim.eventMode="static",this.cooler.position.set(230,18),this.card.addChild(this.bg,this.cooler,this.away,this.count,this.sub,this.warn,this.sum,this.ok);
+ for(let t=0;
+ t<12;
+ t++){
+ const i=new Ve,s=new lki(70),e=rki("",KIi,13),n=new Ve,h=30+t%6*74,r=222+108*Math.floor(t/6);
+ i.position.set(h+35,r+35),i.pivot.set(35,35),e.y=73,i.addChild(s,e,n),i.eventMode="none",this.card.addChild(i),this.cells.push({
+ root:i,card:s,n:e,badge:n}
+ )}
+ this.ok.onTap=()=>this.close(),this.warn.setWrapWidth(460),this.addChild(this.dim,this.card)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ close(){
+ var t,i;
+ null==(t=this.tl)||t.progress(1),null==(i=this.parent)||i.removeChild(this)}
+ closeOne(){
+ return this.close(),!0}
+ layout(){
+ const t=CRi.contentHeight,i=CRi.OVERLAY_PAD;
+ this.dim.clear().rect(-i,0,pxi+2*i,t).fill({
+ color:0,alpha:HIi}
+ ),this.dim.hitArea=new Ui(-i,0,pxi+2*i,2e3),this.card.position.set((pxi-gxi)/2,Math.max(10,(t-this.cardHeight)/2))}
+ open(t){
+ var i,s;
+ const e=0===t.count&&t.lost>0,n=[];
+ if(e?n.push("더 튼튼한 낚싯줄(장비 › 낚시 도구)이 있으면 잡을 수 있어요"):t.lost>0&&n.push(`줄이 끊어져 ${
+ t.lost}
+ 마리를 놓쳤어요 · 더 튼튼한 낚싯줄이 필요해요`),t.fullAt>0){
+ const s=new Date(t.fullAt-((null==(i=RIi.getInstance().state)?void 0:i.devOffset)??0));
+ n.push(`어망이 가득 차서 ${
+ String(s.getHours()).padStart(2,"0")}
+ :${
+ String(s.getMinutes()).padStart(2,"0")}
+ 부터 낚시를 쉬었어요. 어망을 비우면 다시 잡혀요`)}
+ t.sold&&n.push(`수조가 어망으로 바뀌어 넘친 ${
+ t.sold.count}
+ 마리를 ${
+ t.sold.gold.toLocaleString()}
+  G에 자동으로 팔았어요`);
+ const h=18*Math.max(0,n.length-1),r=t.byId.length-12,o=wxi(Math.ceil(Math.min(12,t.byId.length)/6),r>0,h);
+ this.cardHeight=o,this.layout(),this.bg.clear().roundRect(0,0,gxi,o,18).fill(FIi);
+ const a=Math.floor(t.minutes/60),c=t.minutes%60;
+ this.away.text=t.minutes>0?`다녀온 동안 · 약 ${
+ a?`${
+ a}
+ 시간 `:""}
+ ${
+ c}
+ 분`:"어망 정리",this.away.position.set((gxi-this.away.width)/2,66);
+ const l=!e&&0===t.count&&t.fullAt>0;
+ this.count.text=e?"놓쳤어요":l?"어망 가득":`${
+ t.count}
+ 마리`,this.count.position.set((gxi-this.count.width)/2,88),this.sub.text=e?`${
+ t.lost}
+ 마리가 줄을 끊고 달아났어요`:0===t.count?l?"어망이 차서 더 잡지 못했어요. 팔아서 비우면 다시 잡혀요":"어망을 정리했어요":`어망에 담겼어요 · 새 도감 ${
+ t.newIds.length}
+ 종`,oki(this.sub,460),this.sub.position.set((gxi-this.sub.width)/2,142),this.warn.visible=n.length>0,this.warn.textColor=t.lost>0||t.fullAt>0?XIi:VIi,this.warn.text=n.join("\n"),this.warn.position.set(Math.max(20,(gxi-this.warn.width)/2),170),this.ok.position.set(150,o-72),this.cells.forEach((t,i)=>{
+ const s=30+i%6*74,e=222+h+108*Math.floor(i/6);
+ t.root.position.set(s+35,e+35)}
+ ),this.cells.forEach((i,s)=>{
+ const e=t.byId[s];
+ i.root.visible=!!e,e&&(i.card.set(e.id,kSi(e.id).star,e.grade??0),i.n.text=`×${
+ e.count}
+ `,i.n.position.x=(70-i.n.width)/2,i.badge.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),t.newIds.includes(e.id)&&(i.badge.addChild(mki("NEW",728852,qIi,11,6)),i.badge.position.set((70-i.badge.width)/2,-9)))}
+ ),this.sum.text=r>0?`외 ${
+ r}
+ 종 더`:"",this.sum.position.set((gxi-this.sum.width)/2,o-106),CRi.getInstance().overlay.addChild(this),qG.getInstance().playSFX(qG.SFX_POPUP),null==(s=this.tl)||s.kill();
+ const u={
+ n:0}
+ ,d=MR.timeline();
+ d.fromTo(this.card,{
+ alpha:0,y:this.card.y+24}
+ ,{
+ alpha:1,y:this.card.y,duration:.22,ease:"power2.out"}
+ ).fromTo(this.cooler.scale,{
+ x:.6,y:.6}
+ ,{
+ x:1,y:1,duration:.3,ease:"back.out(3)"}
+ ,.05).to(u,{
+ n:t.count,duration:Math.min(.9,.3+.02*t.count),ease:"power1.out",onUpdate:Qt(()=>{
+ e||0===t.count||(this.count.text=`${
+ Math.round(u.n)}
+ 마리`,this.count.x=(gxi-this.count.width)/2)}
+ ,"onUpdate")}
+ ,.12),this.cells.forEach((t,i)=>{
+ t.root.visible&&(t.root.alpha=0,d.fromTo(t.root,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.12}
+ ,.25+.055*i).fromTo(t.root.scale,{
+ x:.4,y:.4}
+ ,{
+ x:1,y:1,duration:.26,ease:"back.out(2.6)"}
+ ,.25+.055*i))}
+ ),this.tl=d}
+ }
+ ;
+ Qt(mxi,"FishingSettlePanel"),Zt(mxi,"instance");
+ let vxi=mxi;
+ const _xi=Qt(t=>Math.max(0,Math.min(1,t)),"clamp01$3"),Mxi=Qt(t=>1+2.70158*Math.pow(t-1,3)+1.70158*Math.pow(t-1,2),"backOut$1");
+ function bxi(t,i){
+ if(null!==i&&t>=i){
+ const s=bxi(i,null),e=_xi((t-i)/160);
+ return{
+ scale:s.scale*(1-.1*e),alpha:s.alpha*(1-e),bob:0}
+ }
+ if(t<120)return{
+ scale:.6,alpha:0,bob:0}
+ ;
+ const s=_xi((t-120)/240),e=t>=360?6*Math.sin((t-360)/1200*Math.PI*2):0;
+ return{
+ scale:.6+.4*Mxi(s),alpha:s,bob:e}
+ }
+ Qt(bxi,"coachPose");
+ const yxi=VIi,Exi=jIi,Axi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"id",null),Zt(this,"body",new Ve),Zt(this,"bg",new ip),Zt(this,"tail",new ip),Zt(this,"text",rki("",Exi,13)),Zt(this,"t0",0),Zt(this,"tapAt",null),Zt(this,"target",null),Zt(this,"below",!1),Zt(this,"width0",0),this.eventMode="none",this.body.addChild(this.bg,this.tail,this.text),this.addChild(this.body),this.visible=!1}
+ show(t,i,s,e,n){
+ this.id=t,this.target=s,this.below=e,this.width0=n,this.text.text=i,this.t0=performance.now(),this.tapAt=null,this.visible=!0,this.alpha=0,vn.shared.remove(this.tick,this),vn.shared.add(this.tick,this),this.tick()}
+ dismiss(){
+ this.visible&&null===this.tapAt&&(this.tapAt=(performance.now()-this.t0)*t.speed)}
+ stop(){
+ (this.visible||this.target)&&this.end()}
+ tick(){
+ var i;
+ if(!this.parent)return this.end();
+ const s=(performance.now()-this.t0)*t.speed,e=(null==(i=this.target)?void 0:i.call(this))??null;
+ e||this.dismiss();
+ const n=bxi(s,this.tapAt);
+ if(e){
+ const t=this.parent.toLocal(e);
+ this.position.set(t.x,t.y)}
+ const h=this.text.width+24,r=this.text.height+16;
+ let o=-h/2;
+ const a=this.x+o;
+ a<8?o+=8-a:a+h>this.width0-8&&(o-=a+h-(this.width0-8));
+ const c=this.below?8:-8-r;
+ this.bg.clear().roundRect(o,c,h,r,10).fill(yxi),this.tail.clear(),this.below?this.tail.moveTo(-8,9).lineTo(0,0).lineTo(8,9).closePath().fill(yxi):this.tail.moveTo(-8,-9).lineTo(0,0).lineTo(8,-9).closePath().fill(yxi),this.text.position.set(o+12,c+8),this.body.scale.set(n.scale),this.body.y=this.below?-n.bob:n.bob,this.alpha=n.alpha,null!==this.tapAt&&s>=this.tapAt+160&&this.end()}
+ end(){
+ vn.shared.remove(this.tick,this),this.visible=!1,this.id=null,this.target=null}
+ }
+ ;
+ Qt(Axi,"FishingCoach"),Zt(Axi,"speed",1);
+ let Sxi=Axi;
+ const Txi=CRi.CONTENT_W,Cxi=1e3,Oxi=28,Ixi=1842206,kxi=921104,Rxi=2894894,xxi=4013377,Pxi=15921908,Nxi=10592678,Lxi=7237235,Dxi=VIi,Gxi=VIi,Bxi=jIi,Uxi=["종족","성별","얼굴"],Fxi=["어느 종족으로 시작할까요?","성별을 골라요","얼굴을 꾸며요"],$xi=Qt(t=>t/512*100,"frontR"),Hxi=class extends Ve{
+ constructor(t,i,s,e,n=!0){
+ super(),Zt(this,"bg",new ip),Zt(this,"text"),Zt(this,"onTap",null),Zt(this,"_enabled",!0),this.w=i,this.h=s,this.primary=n,this.text=rki(t,Bxi,e),this.addChild(this.bg,this.text),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ui(0,0,i,s),this.on("pointerdown",()=>{
+ this._enabled&&this.scale.set(.97)}
+ ),this.on("pointerup",()=>this.scale.set(1)),this.on("pointerupoutside",()=>this.scale.set(1)),this.on("pointertap",t=>{
+ var i;
+ t.stopPropagation(),this._enabled&&(null==(i=this.onTap)||i.call(this))}
+ ),this.draw()}
+ set enabled(t){
+ this._enabled=t,this.draw()}
+ get enabled(){
+ return this._enabled}
+ setText(t){
+ this.text.text=t,this.draw()}
+ draw(){
+ const t=this._enabled;
+ this.bg.clear().roundRect(0,0,this.w,this.h,16).fill({
+ color:this.primary?Gxi:Rxi,alpha:t?1:.4}
+ ),this.text.textColor=this.primary?Bxi:Pxi,this.text.alpha=t?1:.55,oki(this.text,this.w-12),this.text.position.set((this.w-this.text.width)/2,(this.h-this.text.height)/2)}
+ }
+ ;
+ Qt(Hxi,"MkButton");
+ let Wxi=Hxi;
+ const Vxi=class extends Ve{
+ constructor(t,i,s,e,n=null){
+ super(),Zt(this,"bg",new ip),Zt(this,"main"),this.w=i,this.h=s,this.onTap=n,this.main=rki(t,Pxi,e),this.addChild(this.bg,this.main),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ui(0,0,i,s),this.on("pointertap",t=>{
+ var i;
+ t.stopPropagation(),null==(i=this.onTap)||i.call(this)}
+ ),this.setOn(!1)}
+ setOn(t,i=!1){
+ this.bg.clear().roundRect(0,0,this.w,this.h,12).fill(t?Gxi:i?xxi:Rxi),this.main.textColor=t?Bxi:Pxi,oki(this.main,this.w-12),this.main.position.set((this.w-this.main.width)/2,(this.h-this.main.height)/2)}
+ }
+ ;
+ Qt(Vxi,"OptButton");
+ let jxi=Vxi;
+ const Kxi=class extends Ve{
+ constructor(t,i,s=null){
+ super(),Zt(this,"bg",new ip),this.color=t,this.s=i,this.onTap=s,this.addChild(this.bg),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ui(-4,-4,i+8,i+8),this.on("pointertap",t=>{
+ var i;
+ t.stopPropagation(),null==(i=this.onTap)||i.call(this)}
+ ),this.setOn(!1)}
+ setOn(t){
+ const i=this.s,s=t?6:0;
+ this.bg.clear(),t&&this.bg.roundRect(0,0,i,i,15).fill(Gxi),this.bg.roundRect(s,s,i-2*s,i-2*s,t?9:15).fill(this.color)}
+ }
+ ;
+ Qt(Kxi,"Swatch");
+ let zxi=Kxi;
+ const Yxi=class extends Ve{
+ constructor(t,i,s,e,n,h){
+ super(),Zt(this,"bg",new ip),Zt(this,"check",new Ve),this.w=t,this.h=i,this.onTap=h;
+ const r=rki(s,Pxi,28);
+ r.position.set((t-r.width)/2,e);
+ const o=(new ip).circle(0,0,20).fill(Gxi),a=rki("✓",Bxi,24);
+ a.position.set(-a.width/2,-a.height/2),this.check.addChild(o,a),this.check.position.set(t-32,32);
+ const c=(new ip).roundRect(0,0,t,i,22).fill(16777215),l=new Ve;
+ l.addChild(...n),l.mask=c,this.addChild(this.bg,l,c,r,this.check),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ui(0,0,t,i),this.on("pointertap",t=>{
+ t.stopPropagation(),this.onTap()}
+ ),this.setOn(!1)}
+ setOn(t){
+ this.bg.clear().roundRect(0,0,this.w,this.h,22).fill(t?xxi:Rxi),this.check.visible=t}
+ }
+ ;
+ Qt(Yxi,"PickCard");
+ let qxi=Yxi;
+ const Xxi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"dim",new ip),Zt(this,"card",new Ve),Zt(this,"cardBg",new ip),Zt(this,"title",rki("캐릭터 생성",Dxi,34)),Zt(this,"closeBtn",rki("닫기",Lxi,20)),Zt(this,"chips",new Ve),Zt(this,"question",rki("",Pxi,30)),Zt(this,"body",new Ve),Zt(this,"back",new Wxi("이전",120,76,26,!1)),Zt(this,"go",new Wxi("다음",484,76,26)),Zt(this,"draft",{
+ ...gOi}
+ ),Zt(this,"picked",{
+ race:!1,sex:!1}
+ ),Zt(this,"step",0),Zt(this,"first",!0),Zt(this,"busy",!1),Zt(this,"onDone",null),this.dim.eventMode="static",this.back.onTap=()=>{
+ this.step>0&&(this.step=this.step-1,this.render())}
+ ,this.go.onTap=()=>{
+ this.step<2?(this.step=this.step+1,this.render()):this.confirm()}
+ ,this.closeBtn.eventMode="static",this.closeBtn.cursor="pointer",this.closeBtn.on("pointertap",i=>{
+ var s;
+ i.stopPropagation(),this.first?(t.skipped=!0,this.close(),null==(s=this.onDone)||s.call(this)):this.close()}
+ ),this.cardBg.roundRect(0,0,540,Cxi,30).fill(Ixi),this.title.position.set(Oxi,30),this.chips.position.set(Oxi,96),this.question.position.set(Oxi,164),this.back.position.set(Oxi,896),this.card.addChild(this.cardBg,this.title,this.closeBtn,this.chips,this.question,this.body,this.back,this.go),this.addChild(this.dim,this.card)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ static get isOpen(){
+ var t;
+ return!!(null==(t=this.instance)?void 0:t.parent)}
+ open(t,i){
+ this.first=t,this.onDone=i??null;
+ const s=mOi(RIi.getInstance().look);
+ this.draft=t?{
+ ...gOi,skin:0,hair:0,hairColor:0,feats:[]}
+ :s??{
+ ...gOi}
+ ,this.picked={
+ race:!t||!!s,sex:!t||!!s}
+ ,this.step=t?0:2,this.title.text=t?"캐릭터 생성":"모습 바꾸기",this.closeBtn.text=t?"나중에 하기":"닫기",this.closeBtn.visible=!t||OG.getInstance().development,this.closeBtn.position.set(512-this.closeBtn.width,40),this.parent||CRi.getInstance().overlay.addChild(this),this.layout(),this.render(),MR.fromTo(this.card,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.2}
+ )}
+ close(){
+ var t;
+ this.busy||null==(t=this.parent)||t.removeChild(this)}
+ closeOne(){
+ return this.first&&!this.closeBtn.visible?(vH.getInstance().showMessage("먼저 내 낚시꾼 모습을 정해요"),!0):(this.close(),!0)}
+ layout(){
+ const t=CRi.contentHeight,i=CRi.OVERLAY_PAD;
+ this.dim.clear().rect(-i,0,Txi+2*i,t).fill({
+ color:0,alpha:.72}
+ ),this.dim.hitArea=new Ui(-i,0,Txi+2*i,2e3);
+ const s=Math.min(1,(t-16)/Cxi,(Txi-16)/540);
+ this.card.scale.set(s),this.card.position.set((Txi-540*s)/2,Math.max(8,(t-Cxi*s)/2))}
+ render(){
+ const t=this.step;
+ this.chips.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const i=464/3;
+ Uxi.forEach((s,e)=>{
+ const n=new jxi(`${
+ e+1}
+  ${
+ s}
+ `,i,44,20,this.first?null:()=>{
+ this.step=e,this.render()}
+ );
+ n.setOn(e===t,e<t),this.first&&(n.eventMode="none",n.cursor="default"),n.position.set(e*(i+10),0),this.chips.addChild(n)}
+ ),this.question.text=Fxi[t],this.body.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),this.body.position.set(Oxi,216),0===t?this.renderRaces():1===t?this.renderSexes():this.renderFace(),this.back.visible=t>0;
+ const s=t>0?352:484;
+ if(Math.abs(this.go.w-s)>1){
+ const t=this.go;
+ this.go=new Wxi("",s,76,26),this.go.onTap=t.onTap,this.card.addChildAt(this.go,this.card.getChildIndex(t)),t.destroy()}
+ this.go.position.set(t>0?160:Oxi,896),this.go.setText(t<2?"다음":this.first?"출발":"바꾸기"),this.go.enabled=0===t?this.picked.race:1!==t||this.picked.sex}
+ renderRaces(){
+ eOi.forEach((t,i)=>{
+ const s=new ARi($xi(236));
+ s.set({
+ ...gOi,race:i,sex:1,skin:0,hair:0,hairColor:aOi[i],feats:[]}
+ ),s.position.set(117,231.25);
+ const e=new qxi(234,300,t,243,[s],()=>{
+ this.picked.race&&this.draft.race===i||(this.draft.hairColor=aOi[i]),this.draft.race=i,this.draft.skin=Math.min(this.draft.skin,nOi[i].length-1),this.picked.race=!0,this.render()}
+ );
+ e.setOn(this.picked.race&&this.draft.race===i),e.position.set(i%2*250,316*Math.floor(i/2)),this.body.addChild(e)}
+ )}
+ renderSexes(){
+ sOi.forEach((t,i)=>{
+ const s=new ARi($xi(230));
+ s.set({
+ ...gOi,race:this.draft.race,sex:i,skin:0,hair:0,hairColor:this.draft.hairColor,feats:[]}
+ ),s.position.set(117,229.625);
+ const e=new qxi(234,360,t,299,[s],()=>{
+ this.draft.sex=i,this.picked.sex=!0,this.render()}
+ );
+ e.setOn(this.picked.sex&&this.draft.sex===i),e.position.set(250*i,0),this.body.addChild(e)}
+ )}
+ renderFace(){
+ const t=this.draft,i=this.body,s=(new ip).circle(100,100,100).fill(kxi),e=(new ip).circle(100,100,100).fill(16777215),n=yRi(t);
+ n.scale.set(1.5625),n.position.set(100,100);
+ const h=new Ve;
+ h.addChild(n),h.mask=e;
+ const r=(new ip).roundRect(214,0,270,200,22).fill(kxi),o=new ARi($xi(200));
+ o.set(t),o.position.set(349,187.5);
+ const a=new Wxi("무작위",96,40,18,!1);
+ a.position.set(378,10),a.onTap=()=>{
+ t.skin=Math.floor(Math.random()*nOi[t.race].length),t.hair=Math.floor(Math.random()*hOi[t.sex].length),t.hairColor=Math.floor(Math.random()*oOi.length),this.render()}
+ ,i.addChild(s,h,e,r,o,a);
+ let c=214;
+ const l=Qt(t=>{
+ const s=rki(t,Nxi,20,!1);
+ s.position.set(0,c),i.addChild(s),c+=34}
+ ,"title"),u=Qt((t,s,e)=>{
+ t.forEach((t,n)=>{
+ const h=new zxi(t,58,()=>{
+ e(n),this.render()}
+ );
+ h.setOn(n===s),h.position.set(70*n,c),i.addChild(h)}
+ ),c+=70}
+ ,"swatches"),d=Qt((t,s,e,n,h=10)=>{
+ t.forEach((t,r)=>{
+ const o=new jxi(t,n,54,21,()=>e(r));
+ o.setOn(s(r)),o.position.set(r*(n+h),c),i.addChild(o)}
+ ),c+=66}
+ ,"opts");
+ l("피부색"),u(nOi[t.race],t.skin,i=>{
+ t.skin=i}
+ ),l("머리 모양"),d(hOi[t.sex],i=>i===t.hair,i=>{
+ t.hair=i,this.render()}
+ ,146),l("머리 색"),u(oOi,t.hairColor,i=>{
+ t.hairColor=i}
+ ),l("얼굴 장식 · 두 개까지");
+ const f=(484-10*(lOi.length-1))/lOi.length;
+ d(lOi.map(t=>cOi[t]),i=>t.feats.includes(lOi[i]),i=>{
+ const s=lOi[i];
+ if(t.feats.includes(s))t.feats=t.feats.filter(t=>t!==s);
+ else{
+ if(!(t.feats.length<2))return void vH.getInstance().showMessage("얼굴 장식은 두 개까지 고를 수 있어요");
+ t.feats=[...t.feats,s].sort((t,i)=>t-i)}
+ this.render()}
+ ,f)}
+ async confirm(){
+ var t;
+ if(this.busy)return;
+ const i=mOi(this.draft);
+ if(i){
+ this.busy=!0,this.go.enabled=!1;
+ try{
+ let s;
+ try{
+ s=await RIi.getInstance().saveLook(i)}
+ catch{
+ s="연결이 원활하지 않아요"}
+ if(s||!RIi.getInstance().look)return vH.getInstance().showMessage(`모습을 저장하지 못했어요 (${
+ s??"서버가 모습을 모름"}
+ )`),void(this.closeBtn.visible=!0);
+ this.busy=!1,this.close(),vH.getInstance().showMessage(this.first?"출발!":"모습을 바꿨어요"),null==(t=this.onDone)||t.call(this)}
+ finally{
+ this.busy=!1,this.go.enabled=!0}
+ }
+ else vH.getInstance().showMessage("고를 수 없는 모습이에요")}
+ }
+ ;
+ Qt(Xxi,"FishingAvatarMaker"),Zt(Xxi,"instance"),Zt(Xxi,"skipped",!1);
+ let Jxi=Xxi;
+ const Qxi=Object.freeze(Object.defineProperty({
+ __proto__:null,FishingAvatarMaker:Jxi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Zxi=new Map;
+ function tPi(t,i){
+ const s=Zxi.get(t);
+ if(s&&!s.destroyed)return s;
+ const e=i(),n=ES.app.renderer.generateTexture({
+ target:e,resolution:2,antialias:!0}
+ );
+ return e.destroy({
+ children:!0}
+ ),Zxi.set(t,n),n}
+ Qt(tPi,"bake$1");
+ const iPi={
+ wood:{
+ shaft:10119740,shaftHi:13081186,head:12042438,headDark:6121584,fin:13193021,glow:null}
+ ,iron:{
+ shaft:6253427,shaftHi:10135470,head:14870764,headDark:5661547,fin:4157363,glow:null}
+ ,mithril:{
+ shaft:7322073,shaftHi:14219007,head:15924735,headDark:4889792,fin:10185983,glow:8380671}
+ }
+ ;
+ function sPi(t){
+ return tPi(`harpoon:${
+ t}
+ `,()=>{
+ const i=new Ve,s=new ip,e=iPi[t];
+ s.rect(0,0,128,28).fill({
+ color:0,alpha:.001}
+ ),e.glow&&s.poly([96,2,127,14,96,26,102,14]).fill({
+ color:e.glow,alpha:.35}
+ ).roundRect(6,9,92,10,5).fill({
+ color:e.glow,alpha:.18}
+ ),s.poly([2,6,18,12,18,16,2,22,7,14]).fill(e.fin).stroke({
+ color:2759186,width:1,alpha:.6}
+ ),s.roundRect(10,12,86,5,2.5).fill(e.shaft).rect(12,12.4,82,1.2).fill({
+ color:e.shaftHi,alpha:.9}
+ );
+ for(let t=0;
+ t<6;
+ t++)s.rect(30+3.2*t,11.2,1.7,6.6).fill(14731151);
+ return s.roundRect(92,10.5,9,8,2).fill(e.headDark),s.poly([99,4,124,14,99,24,104,14]).fill(e.head).stroke({
+ color:e.headDark,width:1.2}
+ ),s.poly([104,7,97,1,101,9]).fill(e.head).stroke({
+ color:e.headDark,width:1}
+ ),s.poly([104,21,97,27,101,19]).fill(e.head).stroke({
+ color:e.headDark,width:1}
+ ),s.moveTo(102,14).lineTo(121,14).stroke({
+ color:16777215,width:1,alpha:.7}
+ ),i.addChild(s),i}
+ )}
+ function ePi(){
+ return tPi("harpoonShadow",()=>{
+ const t=new Ve,i=new ip;
+ return i.rect(0,0,128,28).fill({
+ color:16777215,alpha:.001}
+ ),i.poly([2,6,18,12,18,16,2,22,7,14]).fill(16777215),i.roundRect(10,12,86,5,2.5).fill(16777215),i.roundRect(92,10.5,9,8,2).fill(16777215),i.poly([99,4,124,14,99,24,104,14]).fill(16777215),i.poly([104,7,97,1,101,9]).fill(16777215),i.poly([104,21,97,27,101,19]).fill(16777215),t.addChild(i),t}
+ )}
+ function nPi(){
+ return tPi("harpoonBlood",()=>{
+ const t=new Ve,i=new ip;
+ i.rect(0,0,64,64).fill({
+ color:16777215,alpha:.001}
+ );
+ for(let s=10;
+ s>=1;
+ s--){
+ const t=s/10;
+ i.ellipse(28,32,23*t,15*t).fill({
+ color:16777215,alpha:.075}
+ ),i.ellipse(40,27,16*t,11*t).fill({
+ color:16777215,alpha:.055}
+ ),i.ellipse(31,40,13*t,12*t).fill({
+ color:16777215,alpha:.045}
+ )}
+ return t.addChild(i),t}
+ )}
+ Qt(sPi,"harpoonTex"),Qt(ePi,"harpoonShadowTex"),Qt(nPi,"harpoonBloodTex");
+ const hPi={
+ perfect:{
+ text:"퍼펙트!",top:"#fff6b0",bottom:"#ff9a1f",stroke:5907456,size:46,rays:16766282}
+ ,great:{
+ text:"그레이트!",top:"#d8ffe4",bottom:"#28c068",stroke:736546,size:40,rays:9437119}
+ ,good:{
+ text:"명중",top:"#e2f4ff",bottom:"#4aa3ff",stroke:731725,size:36,rays:null}
+ ,miss:{
+ text:"빗나감…",top:"#eef4f5",bottom:"#8aa0a6",stroke:2240566,size:30,rays:null}
+ }
+ ;
+ function rPi(t){
+ return tPi(`grade:${
+ t}
+ `,()=>{
+ const i=hPi[t],s=new Ve,e=new gl({
+ type:"linear",start:{
+ x:0,y:0}
+ ,end:{
+ x:0,y:1}
+ ,textureSpace:"local",colorStops:[{
+ offset:0,color:i.top}
+ ,{
+ offset:.55,color:i.top}
+ ,{
+ offset:1,color:i.bottom}
+ ]}
+ ),n=new dw({
+ text:i.text,style:new qg({
+ fontFamily:"Arial",fontSize:i.size,fontWeight:"900",fill:e,letterSpacing:1,stroke:{
+ color:i.stroke,width:Math.round(.17*i.size),join:"round"}
+ ,dropShadow:{
+ color:0,alpha:.55,blur:3,distance:4,angle:Math.PI/2}
+ ,padding:10}
+ )}
+ ),h=n.width+40,r=n.height+30,o=new ip;
+ o.rect(0,0,h,r).fill({
+ color:0,alpha:.001}
+ );
+ for(let t=6;
+ t>=1;
+ t--)o.ellipse(h/2,r/2+2,(n.width/2+10)*(.7+.06*t),(n.height/2+4)*(.7+.07*t)).fill({
+ color:398362,alpha:.07}
+ );
+ if(i.rays){
+ const t=h/2,s=r/2,e=14,n=Math.min(h,1.6*r)/2,a=.42*n,c=[];
+ for(let i=0;
+ i<2*e;
+ i++){
+ const h=i/(2*e)*Math.PI*2,r=i%2?a:n;
+ c.push(t+Math.cos(h)*r*1.15,s+Math.sin(h)*r*.55)}
+ o.poly(c).fill({
+ color:i.rays,alpha:.32}
+ ),o.ellipse(t,s,.75*n,.32*n).fill({
+ color:i.rays,alpha:.28}
+ )}
+ return n.position.set((h-n.width)/2,(r-n.height)/2),s.addChild(o,n),s}
+ )}
+ function oPi(){
+ return tPi("glow",()=>{
+ const t=new Ve,i=new ip;
+ for(let s=12;
+ s>=1;
+ s--)i.circle(64,64,s/12*64).fill({
+ color:16777215,alpha:.085}
+ );
+ return t.addChild(i),t}
+ )}
+ function aPi(){
+ return tPi("ring",()=>{
+ const t=new Ve,i=new ip;
+ return i.circle(64,64,58).stroke({
+ color:16777215,width:7,alpha:.9}
+ ).circle(64,64,50).stroke({
+ color:16777215,width:3,alpha:.35}
+ ),t.addChild(i),t}
+ )}
+ function cPi(){
+ return tPi("harpoonRipple",()=>{
+ const t=new Ve,i=new ip;
+ i.rect(0,0,128,128).fill({
+ color:16777215,alpha:.001}
+ ),i.circle(64,64,58).stroke({
+ color:16777215,width:3.2,alpha:.85}
+ );
+ for(const s of[.2,2.5,4.4])i.arc(64,64,53,s,s+1.15).stroke({
+ color:16777215,width:1.8,alpha:.4}
+ );
+ return t.addChild(i),t}
+ )}
+ function lPi(){
+ return tPi("woodenMallet:flat",()=>{
+ const t=new Ve,i=new ip;
+ return i.rect(0,0,80,80).fill({
+ color:0,alpha:.001}
+ ),i.roundRect(30,28,8,41,2).fill(13870186).stroke({
+ color:5519136,width:2}
+ ),i.roundRect(12,10,44,23,2.5).fill(12158028).stroke({
+ color:5519136,width:2}
+ ).moveTo(18,15).lineTo(50,15).stroke({
+ color:14660985,width:1.8,cap:"round"}
+ ).moveTo(20,24).lineTo(30,24).moveTo(39,27).lineTo(48,27).stroke({
+ color:9396278,width:1.2,cap:"round"}
+ ),t.addChild(i),t}
+ )}
+ Qt(rPi,"gradeTex"),Qt(oPi,"glowTex"),Qt(aPi,"ringTex"),Qt(cPi,"harpoonRippleTex"),Qt(lPi,"woodenMalletTex");
+ const uPi={
+ cycleMs:2300,hits:[0,220,440],stowMs:300,crop:120,soundWindowMs:1e4,finishBurstMs:300,finishMs:2100,helpFlightMs:600}
+ ,dPi=Qt(t=>Math.min(1,Math.max(0,t)),"clamp01$2"),fPi=Qt((t,i,s)=>dPi((t-i)/s),"seg"),pPi=Qt(t=>1-(1-t)**3,"outCubic$1"),gPi=Qt((t,i)=>{
+ const s=t-1;
+ return s*s*((i+1)*s+i)+1}
+ ,"outBack");
+ function wPi(t,i=1){
+ const s=150/i,e=40/i,n=120/i;
+ return t>=-s&&t<-e?pPi((t+s)/(s-e)):t>=-e&&t<0?1-((t+e)/e)**2:t>=0&&t<n?.15*Math.sin(Math.PI*t/n):0}
+ function mPi(t){
+ if(!(t>=0))return{
+ raise:0,impactAge:1/0,hitIndex:-1,burstFirst:!1}
+ ;
+ const{
+ cycleMs:i,hits:s}
+ =uPi,e=Math.floor(t/i),n=t-e*i;
+ let h=0,r=1/0,o=-1,a=!1;
+ for(const c of[-1,0,1])s.forEach((t,l)=>{
+ const u=n-(t+c*i);
+ e+c<0||(h=Math.max(h,wPi(u)),u>=0&&u<r&&(r=u,o=(e+c)*s.length+l,a=0===l))}
+ );
+ return{
+ raise:h,impactAge:r,hitIndex:o,burstFirst:a}
+ }
+ function vPi(t){
+ const i=t.impactAge<90?1.2*(1-t.impactAge/90):0,s=-1.4*t.raise+i;
+ return Math.abs(s)<1e-9?0:s}
+ function _Pi(t){
+ return pPi(fPi(t,0,uPi.stowMs))}
+ function MPi(t){
+ return 8*Math.round(uPi.crop*dPi(t)/8)}
+ function bPi(t){
+ return t>=400?1:gPi(fPi(t,80,320),2)}
+ function yPi(t){
+ const i=uPi.finishBurstMs;
+ let s=0,e=1/0;
+ for(const h of[0,90,180,270]){
+ const i=t-h;
+ s=Math.max(s,wPi(i,2.2)),i>=0&&i<e&&(e=i)}
+ t>=i&&(s=0);
+ const n=t-i;
+ return{
+ raise:s,impactAge:e,white:n>=0&&n<260?.5*(1-n/260):0,rise:n>=0&&n<520?Math.sin(Math.PI*n/520):0,shine:n>=120&&n<820?(n-120)/700:-1,check:n>=120,badgeScale:n<0?1:n<260?1+.3*Math.sin(Math.PI*n/260):n<900?1:1-pPi(fPi(n,900,300)),ribbon:n>=60?gPi(fPi(n,60,380),2.2)*(1-fPi(n,1500,300)):0,starAge:n-100,ringAge:n,unstow:pPi(fPi(n,500,300)),done:t>=uPi.finishMs}
+ }
+ function EPi(t){
+ const i=fPi(t,0,uPi.helpFlightMs);
+ return{
+ k:i,lift:70*Math.sin(Math.PI*i),arrived:t>=uPi.helpFlightMs,impactAge:t-uPi.helpFlightMs}
+ }
+ function APi(t,i){
+ return null!==t&&t>=0&&t<=uPi.soundWindowMs&&i}
+ Qt(wPi,"raiseFor"),Qt(mPi,"hammerAt"),Qt(vPi,"leanAt"),Qt(_Pi,"stowAt"),Qt(MPi,"rodCrop"),Qt(bPi,"badgePop"),Qt(yPi,"finishPose"),Qt(EPi,"helpFlight"),Qt(APi,"hitSound");
+ const SPi=new Map;
+ function TPi(t,i,s=3){
+ const e=SPi.get(t);
+ if(e&&!e.destroyed)return e;
+ const n=i(),h=ES.app.renderer.generateTexture({
+ target:n,resolution:s,antialias:!0}
+ );
+ return n.destroy({
+ children:!0}
+ ),SPi.set(t,h),h}
+ function CPi(t){
+ return TPi(`repair:head:${
+ t}
+ `,()=>{
+ const i=new ip;
+ i.roundRect(-7.5,-4.2,15,8.4,2).fill(t?15053370:12158028).stroke({
+ color:t?8016392:4861720,width:1}
+ ),i.roundRect(-7.5,-4.2,1.6,8.4,.6).fill(t?10975248:7226917).roundRect(5.9,-4.2,1.6,8.4,.6).fill(t?10975248:7226917),i.moveTo(-5.2,-2.1).lineTo(5.2,-2.1).stroke({
+ color:t?16773560:14859140,width:1,cap:"round"}
+ );
+ const s=new Ve;
+ return s.addChild(i),s}
+ ,4)}
+ function OPi(){
+ return TPi("repair:chip",()=>{
+ const t=new Ve;
+ return t.addChild((new ip).rect(-1.6,-.8,3.2,1.6).fill(16777215)),t}
+ ,4)}
+ function IPi(){
+ return TPi("repair:soft",()=>{
+ const t=new ip;
+ for(let s=16;
+ s>=2;
+ s-=2)t.circle(0,0,s).fill({
+ color:16777215,alpha:.11}
+ );
+ const i=new Ve;
+ return i.addChild(t),i}
+ ,2)}
+ function kPi(){
+ return TPi("repair:star",()=>{
+ const t=(new ip).poly([0,-4,1.2,-1.2,4,0,1.2,1.2,0,4,-1.2,1.2,-4,0,-1.2,-1.2]).fill(16777215),i=new Ve;
+ return i.addChild(t),i}
+ ,4)}
+ function RPi(t){
+ return TPi(`repair:ribbon:${
+ t}
+ `,()=>{
+ const i=new Ve,s=new ip;
+ s.roundRect(-56,-15,112,30,7).fill(5913118).roundRect(-53,-12,106,24,5).fill(9067054).stroke({
+ color:16106577,width:1.4}
+ ),s.circle(-46,0,1.8).fill(3810322).circle(46,0,1.8).fill(3810322);
+ const e=new dw({
+ text:t,style:{
+ fontFamily:"Arial",fontWeight:"900",fontSize:15,fill:16773583,stroke:{
+ color:2758408,width:4,join:"round"}
+ }
+ }
+ );
+ return e.anchor.set(.5),e.y=.5,e.width>92&&e.scale.set(92/e.width),i.addChild(s,e),i}
+ ,3)}
+ Qt(TPi,"bake"),Qt(CPi,"malletHeadTex"),Qt(OPi,"chipTex"),Qt(IPi,"softTex"),Qt(kPi,"starTex"),Qt(RPi,"ribbonTex");
+ const xPi=new WeakMap,PPi=new WeakMap;
+ function NPi(t,i){
+ const s=PPi.get(t)??t;
+ if(i<=0)return s;
+ let e=xPi.get(s);
+ e||(e=new Map,xPi.set(s,e));
+ let n=e.get(i);
+ if(!n||n.destroyed){
+ const t=s.frame,h=i*(t.height/256);
+ n=new as({
+ source:s.source,frame:new Ui(t.x,t.y+h,t.width,t.height-h)}
+ ),e.set(i,n),PPi.set(n,s)}
+ return n}
+ function LPi(t,i){
+ return(t-i)/(256-i)}
+ function DPi(t){
+ return PPi.get(t)??t}
+ Qt(NPi,"cropRod"),Qt(LPi,"cropAnchorY"),Qt(DPi,"uncropped");
+ const GPi=Qt(t=>{
+ const i=43758.5453*Math.sin(127.1*t+311.7);
+ return i-Math.floor(i)}
+ ,"hash"),BPi=Qt(t=>{
+ let i=0;
+ for(let s=0;
+ s<t.length;
+ s++)i=31*i+t.charCodeAt(s)|0;
+ return Math.abs(i)}
+ ,"strHash$1"),UPi=Qt(t=>1-(1-t)**3,"outCubic"),FPi=class{
+ constructor(t){
+ Zt(this,"under",new Ve),Zt(this,"over",new Ve),Zt(this,"onSound",null),Zt(this,"myCrew",null),Zt(this,"crewOf",new Map),Zt(this,"otherLastHit",new Map),Zt(this,"mine",null),Zt(this,"pendingFresh",-1e9),Zt(this,"finishAt",-1),Zt(this,"stopAt",-1),Zt(this,"lastMineImpact",1/0),Zt(this,"lastFinishImpact",1/0),Zt(this,"finishSounded",!1),Zt(this,"helpPunchAt",-1e9),Zt(this,"rings",[]),Zt(this,"chips",[]),Zt(this,"flights",[]),Zt(this,"ringG",new ip),Zt(this,"trailG",new ip),Zt(this,"pool",[]),Zt(this,"used",0),Zt(this,"badge",new Ve),Zt(this,"badgeArc",new ip),Zt(this,"badgeCheck",new ip),Zt(this,"badgeMallet",new Ye(lPi())),Zt(this,"badgeGlow",new ip),Zt(this,"arcDrawn",-1),Zt(this,"arcBroken",!1),Zt(this,"ribbon",null),Zt(this,"hullFlash",new Ye),Zt(this,"shineWrap",new Ve),Zt(this,"shineBand",new ip),Zt(this,"shineMask",new Ye),this.scale=t;
+ for(const e of[this.under,this.over])e.eventMode="none";
+ this.under.addChild(this.ringG);
+ const i=(new ip).circle(0,0,16).fill({
+ color:1970698,alpha:.9}
+ ).circle(0,0,13.2).stroke({
+ color:2759182,width:3.6}
+ ),s=(new ip).circle(0,0,16).stroke({
+ color:16106577,width:1.2,alpha:.55}
+ );
+ this.badgeMallet.anchor.set(.425,.49375),this.badgeMallet.rotation=-.45,this.badgeMallet.scale.set(.3),this.badgeCheck.circle(0,0,14).fill(4173418).moveTo(-6,.5).lineTo(-1.5,5).lineTo(6.5,-4.5).stroke({
+ color:16777215,width:3.2,cap:"round",join:"round"}
+ ),this.badgeCheck.visible=!1,this.badge.addChild(i,this.badgeGlow,this.badgeArc,this.badgeMallet,this.badgeCheck,s),this.badge.visible=!1,this.hullFlash.anchor.set(.5),this.hullFlash.blendMode="add",this.hullFlash.visible=!1,this.shineMask.anchor.set(.5),this.shineBand.blendMode="add",this.shineWrap.addChild(this.shineBand,this.shineMask),this.shineBand.mask=this.shineMask,this.shineWrap.visible=!1;
+ for(let e=-5;
+ e<=5;
+ e++)this.shineBand.rect(5*e,-90,5,180).fill({
+ color:16777215,alpha:.55*(1-Math.abs(e)/6)}
+ );
+ this.over.addChild(this.hullFlash,this.shineWrap,this.trailG,this.badge)}
+ markFresh(){
+ this.pendingFresh=performance.now()}
+ setMine(t){
+ const i=performance.now();
+ if(!t)return this.mine&&this.finishAt<0&&(this.stopAt=i),void(this.finishAt<0&&(this.mine=null));
+ if(!(this.finishAt>=0)){
+ if(!this.mine){
+ const s=i-this.pendingFresh<5e3;
+ return this.mine={
+ since:s?i:i-uPi.stowMs-1e3,fresh:s?i:null,progress:t.progress,shown:t.progress,broken:t.broken}
+ ,this.stopAt=-1,this.finishSounded=!1,this.pendingFresh=-1e9,void(this.lastMineImpact=1/0)}
+ this.mine.progress=t.progress,this.mine.broken=t.broken}
+ }
+ finish(){
+ !this.mine||this.finishAt>=0||(this.finishAt=performance.now(),this.mine.progress=1,this.lastFinishImpact=1/0)}
+ get busy(){
+ return!!this.mine}
+ help(t,i,s=null){
+ const e=i();
+ e?this.flights.push({
+ from:t??{
+ x:e.x-60,y:e.y-220}
+ ,to:i,t0:performance.now(),arrived:!1,onArrive:s}
+ ):null==s||s()}
+ crewFor(t){
+ return this.crewOf.get(t)??null}
+ update(t,i,s){
+ const e=performance.now();
+ this.used=0,this.ringG.clear(),this.trailG.clear(),this.crewOf.clear(),this.myCrew=null,this.badge.visible=!1,this.hullFlash.visible=!1,this.shineWrap.visible=!1,this.ribbon&&(this.ribbon.visible=!1);
+ for(const n of s){
+ const t=mPi(e+BPi(n.id)%uPi.cycleMs);
+ this.crewOf.set(n.id,{
+ crop:uPi.crop,lean:vPi(t)}
+ );
+ const i=this.drawHead(n,t,vPi(t),!1);
+ t.hitIndex>=0&&this.otherLastHit.get(n.id)!==t.hitIndex&&(this.otherLastHit.has(n.id)&&t.impactAge<200&&this.chips.push({
+ x:i.x,y:i.y,t0:e-t.impactAge,seed:t.hitIndex+BPi(n.id),k:.8,gold:!1}
+ ),this.otherLastHit.set(n.id,t.hitIndex)),n.broken&&this.smoke(n,e,.5,BPi(n.id))}
+ if(t&&this.mine)this.drawMine(t,i,e);
+ else if(t&&this.stopAt>=0){
+ const t=1-_Pi(e-this.stopAt);
+ t>0?this.myCrew={
+ crop:MPi(t),lean:0}
+ :this.stopAt=-1}
+ this.drawFlights(e),this.drawChips(e),this.drawRings(e);
+ for(let n=this.used;
+ n<this.pool.length;
+ n++)this.pool[n].visible=!1;
+ if(this.otherLastHit.size>s.length)for(const n of[...this.otherLastHit.keys()])this.crewOf.has(n)||this.otherLastHit.delete(n)}
+ drawMine(t,i,s){
+ var e,n,h;
+ const r=this.mine;
+ if(r.shown+=.12*(r.progress-r.shown),this.finishAt>=0){
+ const h=s-this.finishAt,r=yPi(h);
+ if(r.done)return this.mine=null,void(this.finishAt=-1);
+ if(this.myCrew={
+ crop:MPi(1-r.unstow),lean:vPi(r)}
+ ,h<uPi.finishBurstMs+500){
+ const i=this.drawHead(t,r,vPi(r),!1);
+ r.impactAge<this.lastFinishImpact&&(this.chips.push({
+ x:i.x,y:i.y,t0:s-r.impactAge,seed:900+Math.floor(h/90),k:1,gold:!1}
+ ),null==(e=this.onSound)||e.call(this,"hit"))}
+ return this.lastFinishImpact=r.impactAge,h>=uPi.finishBurstMs&&!this.finishSounded&&(this.finishSounded=!0,null==(n=this.onSound)||n.call(this,"finish"),this.rings.push({
+ x:t.x,y:t.y,t0:s,r0:24,r1:62,dur:900,color:16772798,width:2.2}
+ ,{
+ x:t.x,y:t.y,t0:s+150,r0:20,r1:44,dur:800,color:16777215,width:1.4}
+ )),this.drawHullFx(i,r.white,r.shine),this.drawBadge(t,1,r.badgeScale,r.check,0),this.drawStars(t,r.starAge),void(r.ribbon>0&&(this.ribbon||(this.ribbon=new Ye(RPi("수리 완료!")),this.ribbon.anchor.set(.5),this.over.addChild(this.ribbon)),this.ribbon.visible=!0,this.ribbon.position.set(t.x,t.y-84),this.ribbon.scale.set(r.ribbon)))}
+ const o=s-r.since,a=_Pi(o),c=mPi(o-350),l=o>=350?vPi(c):0;
+ if(this.myCrew={
+ crop:MPi(a),lean:l}
+ ,o>=200){
+ const i=this.drawHead(t,o<350?{
+ raise:.35*Math.min(1,(o-200)/150),impactAge:1/0}
+ :c,l,!1);
+ c.impactAge<this.lastMineImpact&&c.hitIndex>=0&&(this.chips.push({
+ x:i.x,y:i.y,t0:s-c.impactAge,seed:c.hitIndex,k:1,gold:!1}
+ ),c.burstFirst&&this.rings.push({
+ x:t.x,y:t.y,t0:s-c.impactAge,r0:24,r1:40,dur:650,color:15137013,width:1.4}
+ ),APi(null===r.fresh?null:s-r.fresh,c.burstFirst)&&(null==(h=this.onSound)||h.call(this,"hit"))),this.lastMineImpact=c.impactAge}
+ r.broken&&this.smoke(t,s,1-.9*Math.min(1,r.shown),0);
+ const u=null===r.fresh?1:bPi(o),d=s-this.helpPunchAt,f=d>=0&&d<300?1+.25*Math.sin(Math.PI*d/300):1;
+ this.drawBadge(t,r.shown,u*f,!1,d>=0&&d<500?.8*(1-d/500):0,r.broken)}
+ drawHead(t,i,s,e){
+ const n=this.scale.angler,h=Math.sin(t.face),r=-Math.cos(t.face),o=85*n,a=o+4.5-5*i.raise+s,c=t.x+h*a,l=t.y+r*a;
+ if(i.raise>.05){
+ const s=this.sprite(IPi(),t.x+h*a+3*i.raise,t.y+r*a+4*i.raise,663070,.28*i.raise);
+ s.scale.set(.38,.24),s.rotation=t.face}
+ this.trailG.moveTo(t.x+h*(o-3+s),t.y+r*(o-3+s)).lineTo(c,l).stroke({
+ color:13212254,width:2,cap:"round"}
+ );
+ const u=this.sprite(CPi(e),c,l,16777215,1);
+ if(u.anchor.set(.5),u.rotation=t.face,u.scale.set(.7*(1+.35*i.raise)),i.impactAge<90){
+ const t=i.impactAge/90;
+ this.sprite(IPi(),c,l,16777200,.9*(1-t)).scale.set((3+4*t)/16)}
+ return{
+ x:c,y:l}
+ }
+ smoke(t,i,s,e){
+ if(s<=.01)return;
+ const n=Math.sin(t.face),h=-Math.cos(t.face),r=t.x-13*n,o=t.y-13*h;
+ for(let a=0;
+ a<7;
+ a++){
+ const t=1700,n=243*a+e%500,h=Math.floor((i-n)/t)*t+n,c=i-h,l=c/t,u=3*Math.sin((h+c)/260+a),d=r+.5*u+26*l,f=o-16*l+.4*u,p=s*(1-l)*Math.min(1,6*l);
+ this.sprite(IPi(),d,f,3421752,.62*p).scale.set((3.5+7.5*l)/14),this.sprite(IPi(),d-1.5,f-1.5,9868948,.22*p).scale.set((2+4*l)/14)}
+ }
+ drawBadge(t,i,s,e,n,h=!1){
+ if(s<=.01)return;
+ const r=this.badge;
+ r.visible=!0,r.position.set(t.x,t.y-46),r.scale.set(s),this.badgeCheck.visible=e,this.badgeMallet.visible=this.badgeArc.visible=!e;
+ const o=Math.round(200*Math.min(1,Math.max(0,i)))/200;
+ o===this.arcDrawn&&h===this.arcBroken||(this.arcDrawn=o,this.arcBroken=h,this.badgeArc.clear(),o>.005&&this.badgeArc.arc(0,0,13.2,-Math.PI/2,-Math.PI/2+2*Math.PI*o).stroke({
+ color:h?16747100:16757611,width:3.6,cap:"round"}
+ )),this.badgeGlow.clear(),n>0&&this.badgeGlow.circle(0,0,13.2).stroke({
+ color:16770700,width:6,alpha:n}
+ )}
+ drawHullFx(t,i,s){
+ const e=null==t?void 0:t.sprite;
+ if(!e||e.destroyed)return;
+ const n=Qt(t=>{
+ t.texture=e.texture,t.anchor.copyFrom(e.anchor),t.position.copyFrom(e.position),t.rotation=e.rotation,t.scale.copyFrom(e.scale),t.skew.copyFrom(e.skew)}
+ ,"copy");
+ if(i>0&&(n(this.hullFlash),this.hullFlash.visible=!0,this.hullFlash.alpha=i),s>=0){
+ this.shineWrap.visible=!0,n(this.shineMask);
+ const t=e.width,i=e.x,h=e.y;
+ this.shineBand.position.set(i-.9*t+1.8*t*s,h),this.shineBand.rotation=e.rotation+.6,this.shineBand.alpha=.85}
+ }
+ drawStars(t,i){
+ if(i<0||i>800)return;
+ const s=i/800;
+ for(let e=0;
+ e<10;
+ e++){
+ const i=e/10*Math.PI*2+.3,n=10+34*UPi(s),h=this.sprite(kPi(),t.x+Math.cos(i)*n,t.y-46+Math.sin(i)*n*.85,e%3?16769674:16777215,1-s);
+ h.anchor.set(.5),h.rotation=3*s,h.scale.set(1-.5*s)}
+ }
+ drawFlights(t){
+ this.flights=this.flights.filter(i=>{
+ var s,e;
+ const n=i.to(),h=EPi(t-i.t0);
+ if(!n)return!1;
+ if(!h.arrived){
+ const t=Qt(t=>({
+ x:i.from.x+(n.x-i.from.x)*t,y:i.from.y+(n.y-i.from.y)*t-70*Math.sin(Math.PI*t)}
+ ),"at");
+ for(let i=1;
+ i<=5;
+ i++){
+ const s=t(Math.max(0,h.k-.05*i));
+ this.trailG.circle(s.x,s.y,2.6-.3*i).fill({
+ color:16769674,alpha:.5-.08*i}
+ )}
+ const s=t(h.k),e=this.sprite(lPi(),s.x,s.y,16765803,1);
+ e.anchor.set(.425,.49375),e.scale.set(.34),e.rotation=7*h.k-.6;
+ const r=this.sprite(IPi(),s.x,s.y,16769674,.5);
+ return r.scale.set(.9),r.blendMode="add",!0}
+ return i.arrived||(i.arrived=!0,this.chips.push({
+ x:n.x,y:n.y,t0:t,seed:99,k:1.4,gold:!0}
+ ),this.rings.push({
+ x:n.x,y:n.y,t0:t,r0:14,r1:30,dur:600,color:16769674,width:1.8}
+ ),null==(s=this.onSound)||s.call(this,"help"),null==(e=i.onArrive)||e.call(i)),!1}
+ )}
+ helpPunch(){
+ this.helpPunchAt=performance.now()}
+ drawChips(t){
+ this.chips=this.chips.filter(i=>t-i.t0<=450);
+ for(const i of this.chips){
+ const s=t-i.t0,e=s/450;
+ for(let t=0;
+ t<6;
+ t++){
+ const s=GPi(7*i.seed+t)*Math.PI*2,n=(8+9*GPi(i.seed+3*t))*UPi(e)*i.k,h=this.sprite(OPi(),i.x+Math.cos(s)*n,i.y+Math.sin(s)*n,i.gold?t%2?16769674:16774864:t%2?14200179:9132587,1-e);
+ h.anchor.set(.5),h.rotation=s+6*e,h.scale.set(i.k)}
+ if(s<220){
+ const t=s/220;
+ this.ringG.circle(i.x,i.y,(3+7*t)*i.k).stroke({
+ color:16775398,width:1.4,alpha:.7*(1-t)}
+ )}
+ }
+ }
+ drawRings(t){
+ this.rings=this.rings.filter(i=>t-i.t0<=i.dur);
+ for(const i of this.rings){
+ const s=t-i.t0;
+ if(s<0)continue;
+ const e=s/i.dur,n=i.r0+(i.r1-i.r0)*UPi(e);
+ this.ringG.ellipse(i.x,i.y,n,.82*n).stroke({
+ color:i.color,width:i.width,alpha:.9*(1-e)}
+ )}
+ }
+ sprite(t,i,s,e,n){
+ let h=this.pool[this.used];
+ return h||(h=new Ye,h.eventMode="none",this.pool.push(h),this.over.addChildAt(h,Math.max(0,this.over.getChildIndex(this.badge)))),this.used++,h.texture=t,h.anchor.set(.5),h.position.set(i,s),h.tint=e,h.alpha=n,h.rotation=0,h.scale.set(1),h.blendMode="normal",h.visible=!0,h}
+ destroy(){
+ this.flights=[],this.chips=[],this.rings=[],this.under.destroy({
+ children:!0}
+ ),this.over.destroy({
+ children:!0}
+ )}
+ }
+ ;
+ Qt(FPi,"BoatRepairFx");
+ let $Pi=FPi;
+ const HPi=.115,WPi=Qt(t=>Math.max(0,Math.min(1,t)),"clamp01$1"),VPi=Qt(t=>{
+ const i=WPi(t);
+ return i*i*(3-2*i)}
+ ,"smooth01");
+ function jPi(t,i,s){
+ const e=46*(i<0?-1:1),n=Math.hypot(e,154),h=e/n,r=154/n,o={
+ x:t.x-16*h,y:t.y-16*r}
+ ,a=WPi(s/HPi),c=n*(1-a*(.35+.65*a)),l=16*WPi((s-HPi)/.04);
+ return{
+ x:o.x-h*c+h*l,y:o.y-r*c+r*l,angle:Math.atan2(154,e),entry:o,submerged:l,air:a}
+ }
+ function KPi(t,i){
+ if(i<=0||t<0||t>=.24)return{
+ push:0,flash:0}
+ ;
+ const s=t/.24,e=Math.min(3,i);
+ return{
+ push:[0,1.4,2.1,3][e]*Math.sin(Math.PI*Math.min(1,1.6*s))*(1-s),flash:[0,.22,.32,.45][e]*(1-VPi(2*s))}
+ }
+ Qt(jPi,"harpoonDrop"),Qt(KPi,"harpoonFlinch");
+ const zPi=Qt(t=>{
+ const i=46*(t<0?-1:1),s=Math.hypot(i,154);
+ return{
+ x:i/s,y:154/s}
+ }
+ ,"harpoonDir");
+ function YPi(t,i){
+ const s=16777215===t?16767436:6989494,e=WPi(i),n=Qt((t,i)=>t>>i&255,"ch"),h=Qt(i=>Math.round(n(t,i)+(n(s,i)-n(t,i))*e)<<i,"mix");
+ return h(16)|h(8)|h(0)}
+ Qt(YPi,"flinchTint");
+ const qPi=Qt(t=>[{
+ amp:0,ms:0}
+ ,{
+ amp:.9,ms:80}
+ ,{
+ amp:1.5,ms:110}
+ ,{
+ amp:2.4,ms:150}
+ ][Math.max(0,Math.min(3,t))],"harpoonShake"),XPi={
+ wood:{
+ tier:0,trail:12957073,water:12902357,accent:11589334}
+ ,iron:{
+ tier:1,trail:11127016,water:12836341,accent:8894942}
+ ,mithril:{
+ tier:2,trail:7922916,water:9104614,accent:12100591}
+ }
+ ,JPi=class extends Ve{
+ constructor(t,i,s,e,n={
+ }
+ ,h,r=!0){
+ super(),Zt(this,"underwater",new Ve),Zt(this,"age",0),Zt(this,"released",!1),Zt(this,"entered",!1),Zt(this,"impacted",!1),Zt(this,"aim"),Zt(this,"waterPoint",{
+ x:0,y:0}
+ ),Zt(this,"impactPoint",{
+ x:0,y:0}
+ ),Zt(this,"impactAngle",0),Zt(this,"bodyAngle",0),Zt(this,"side"),Zt(this,"miss"),Zt(this,"power"),Zt(this,"material"),Zt(this,"spear"),Zt(this,"wetSpear"),Zt(this,"dryMask",new ip),Zt(this,"wetMask",new ip),Zt(this,"wetBody",new Ve),Zt(this,"waterBlur",new mf({
+ strength:.35,quality:2}
+ )),Zt(this,"blood",new Ye(nPi())),Zt(this,"bloodWisp",new Ye(nPi())),Zt(this,"pinMark",(new ip).poly([-2.7,-.2,-1.1,-1.2,2.2,-.8,2.8,.3,.7,1.1,-1.8,.9]).fill({
+ color:5324874,alpha:.45}
+ )),Zt(this,"trail",new ip),Zt(this,"bubbles",new ip),Zt(this,"surface",new Ve),Zt(this,"rings",[]),Zt(this,"contact",(new ip).ellipse(0,0,3.2,1.2).fill({
+ color:14085609,alpha:.65}
+ )),Zt(this,"pressure"),Zt(this,"pressureEcho",new Ye(cPi())),Zt(this,"impactGlow",new Ye(oPi())),Zt(this,"result",new Ve),Zt(this,"droplets",[]),Zt(this,"crown",[]),Zt(this,"foam",(()=>{
+ const t=(new ip).ellipse(0,0,8,3.2).fill({
+ color:15136500,alpha:.32}
+ );
+ for(let i=0;
+ i<9;
+ i++){
+ const s=i/9*Math.PI*2+i%2*.2,e=7+i%3;
+ t.ellipse(Math.cos(s)*e,Math.sin(s)*e*.42,1.6+i%3*.6,.9+i%2*.4).fill({
+ color:16055290,alpha:.7}
+ )}
+ return t}
+ )()),Zt(this,"spray",new Ve),Zt(this,"sprayBeads",[]),Zt(this,"sprayFoam",new Ye(cPi())),Zt(this,"done"),Zt(this,"finish"),this.target=e,this.feedback=n,this.viewBounds=h,this.showResult=r,this.eventMode="none",this.done=new Promise(t=>{
+ this.finish=t}
+ ),this.miss=s<=0,this.power=this.miss?0:"perfect"===i?3:"great"===i?2:1,this.material=XPi[t],this.pressure=new Ye(0===this.material.tier?cPi():aPi()),this.side=e.missOffset<0?-1:1,this.aim={
+ ...e.point}
+ ,this.spear=new Ye(sPi(t)),this.wetSpear=new Ye(ePi());
+ for(const a of[this.spear,this.wetSpear])a.anchor.set(.96875,.5),a.scale.set(.2),a.visible=!1;
+ this.wetSpear.tint=this.aim.tint,this.spear.mask=this.dryMask,this.wetSpear.mask=this.wetMask,this.wetBody.addChild(this.bloodWisp,this.blood,this.wetSpear,this.wetMask,this.pinMark),this.wetBody.filters=[this.waterBlur],this.underwater.eventMode="none";
+ for(const a of[this.blood,this.bloodWisp])a.anchor.set(.5),a.tint=7886174,a.visible=!1;
+ this.pinMark.visible=!1;
+ for(let a=0;
+ a<=this.material.tier;
+ a++){
+ const t=new Ye(cPi());
+ t.anchor.set(.5),t.tint=1===a?this.material.accent:this.material.water,this.rings.push(t),this.surface.addChild(t)}
+ this.surface.addChild(this.foam,this.contact),this.foam.visible=!1,this.spray.visible=!1,this.sprayFoam.anchor.set(.5),this.sprayFoam.tint=this.material.water,this.spray.addChild(this.sprayFoam),this.contact.tint=this.material.water,this.pressure.anchor.set(.5),this.pressure.tint=this.material.water,this.pressureEcho.anchor.set(.5),this.pressureEcho.tint=this.material.accent,this.impactGlow.anchor.set(.5),this.impactGlow.tint=this.material.water,this.impactGlow.blendMode="add",this.pressure.visible=this.pressureEcho.visible=this.impactGlow.visible=this.surface.visible=this.result.visible=!1;
+ const o=new Ye(rPi(this.miss?"miss":i));
+ if(o.anchor.set(.5),o.scale.set(3===this.power?.35:.31),this.result.addChild(o),!this.miss){
+ const t=new dw({
+ text:`-${
+ s}
+ `,style:{
+ fontFamily:"Arial",fontSize:[0,15,18,22][this.power],fontWeight:"900",fill:3===this.power?16770202:2===this.power?14221284:16777215,stroke:{
+ color:1059638,width:3,join:"round"}
+ }
+ }
+ );
+ t.anchor.set(.5),t.y=20,this.result.addChild(t)}
+ this.underwater.addChild(this.impactGlow,this.wetBody,this.bubbles,this.pressure,this.pressureEcho),this.addChild(this.underwater,this.trail,this.spear,this.dryMask,this.surface,this.spray,this.result)}
+ destination(){
+ const t=this.target.sample();
+ t&&(this.aim={
+ ...t}
+ );
+ const i=this.miss?this.target.missOffset:0;
+ return{
+ ...this.aim,x:this.aim.x-Math.sin(this.aim.angle)*i,y:this.aim.y+Math.cos(this.aim.angle)*i}
+ }
+ placeSpear(t,i,s,e,n=1,h=0){
+ const r=Math.min(30,Math.max(0,e));
+ for(const o of[this.spear,this.wetSpear,this.dryMask,this.wetMask])o.position.set(t,i),o.rotation=s;
+ this.spear.visible=r<30,this.wetSpear.visible=r>0,this.spear.alpha=n,this.wetSpear.alpha=n*WPi(this.aim.alpha),this.wetSpear.tint=this.aim.tint,this.waterBlur.strength=this.aim.blur,this.dryMask.clear().rect(-30,-5,30-r,10).fill(16777215),this.wetMask.clear().rect(-r,-5,Math.max(0,r+(h>0?-h:1)),10).fill(16777215)}
+ enterWater(t,i){
+ this.entered=!0,this.waterPoint={
+ ...t}
+ ,this.surface.position.copyFrom(t),this.surface.visible=!0;
+ const s=this.miss?6:7+this.power+2*this.material.tier;
+ for(let n=0;
+ n<s;
+ n++){
+ const t=2.39996*n,s=(12+n%4*5)*(.8+.2*this.material.tier),e=(new ip).circle(0,0,.55+n%3*.16).fill(n%3?13953767:11131103);
+ this.surface.addChild(e),this.droplets.push({
+ sp:e,ox:2.5*Math.cos(t),oy:Math.sin(t),vx:Math.cos(t)*s-5*Math.cos(i),vy:Math.sin(t)*s*.42,vz:26+n%4*6}
+ )}
+ const e=this.miss?7:8+3*this.power;
+ for(let n=0;
+ n<e;
+ n++){
+ const t=n/e*Math.PI*2+.3,i=3+n%2,s=(new ip).circle(0,0,.9+n%3*.35).fill(n%4?15398901:12575976);
+ this.surface.addChild(s),this.crown.push({
+ sp:s,ox:Math.cos(t)*i,oy:Math.sin(t)*i*.45,vx:Math.cos(t)*(14+n%3*4),vy:6*Math.sin(t),vz:(this.miss?46:52+8*this.power)*(.8+7*n%5*.08),life:.34+.03*this.power}
+ )}
+ this.foam.visible=!0}
+ startSpray(t){
+ if(this.miss)return;
+ this.spray.position.copyFrom(t),this.spray.visible=!0;
+ const i=4+3*this.power;
+ for(let s=0;
+ s<i;
+ s++){
+ const t=s/i*Math.PI*2+.7,e=(new ip).circle(0,0,.7+s%3*.3).fill(14939379);
+ this.spray.addChild(e),this.sprayBeads.push({
+ sp:e,vx:Math.cos(t)*(10+4*this.power),vy:4*Math.sin(t),vz:34+9*this.power+s%3*5,life:.3}
+ )}
+ }
+ drawSpray(t){
+ if(!this.spray.visible)return;
+ const i=WPi(t/(.32+.05*this.power)),s=.05+(.1+.04*this.power)*(1-(1-i)**3);
+ this.sprayFoam.scale.set(s,.45*s),this.sprayFoam.alpha=.55*(1-i)**1.4*WPi(this.aim.alpha/.3);
+ for(const e of this.sprayBeads)e.sp.position.set(e.vx*t,e.vy*t-e.vz*t+230*t*t),e.sp.alpha=.85*(1-VPi(t/e.life));
+ t>.6&&(this.spray.visible=!1)}
+ drawWater(t){
+ const i=Math.max(0,t),s=this.material.tier,e=(.22+.11*s+.018*this.power)*(this.miss?.75:1);
+ for(let o=0;
+ o<this.rings.length;
+ o++){
+ const t=this.rings[o],n=i-.075*o,h=WPi(n/(.38+.11*s+.09*o)),r=.035+(e+.07*o)*(1-(1-h)**3);
+ t.visible=n>=0,t.scale.set(r,.42*r),t.alpha=(0===o?.55+.12*s:.32+.08*s)*(1-h)**1.5}
+ const n=(.8+.2*s)*(1+VPi(i/.08));
+ this.contact.scale.set(n,.7*n),this.contact.alpha=1-WPi(i/.085);
+ for(const o of this.crown)o.sp.position.set(o.ox+o.vx*i,o.oy+o.vy*i-o.vz*i+300*i*i),o.sp.alpha=.9*(1-VPi(i/o.life));
+ const h=WPi(i/.3),r=(this.miss?.9:1+.18*this.power)*(.6+1.1*(1-(1-h)**2));
+ this.foam.scale.set(r,r),this.foam.alpha=.8*(1-h)**1.6;
+ for(const o of this.droplets)o.sp.position.set(o.ox+o.vx*i,o.oy+o.vy*i-o.vz*i+220*i*i),o.sp.alpha=.75*(1-VPi(i/.24)),o.sp.scale.set(1-.4*VPi(i/.24))}
+ advance(t){
+ var i,s,e,n,h;
+ if(this.destroyed)return;
+ this.age+=Math.max(0,t);
+ const r=this.age-.025;
+ if(r<0)return;
+ const o=this.destination(),a=jPi(o,this.side,r);
+ if(this.released||(this.released=!0,null==(s=(i=this.feedback).release)||s.call(i)),!this.entered&&r>=HPi&&this.enterWater(a.entry,a.angle),this.entered&&this.drawWater(r-HPi),!this.impacted){
+ this.placeSpear(a.x,a.y,a.angle,a.submerged),this.trail.clear();
+ const t=this.material.tier,i=10+a.air*(16+9*t),s=Math.cos(a.angle),h=Math.sin(a.angle);
+ for(let e=this.entered?0:3;
+ e>=1;
+ e--){
+ const n=21+i*e/3,r=21+i*(e-1)/3;
+ this.trail.moveTo(a.x-s*n,a.y-h*n).lineTo(a.x-s*r,a.y-h*r).stroke({
+ color:this.material.trail,width:.4+.15*t+.25*(3-e),alpha:(4-e)*(.06+.035*t)}
+ )}
+ if(r<.155)return void this.drawBubbles(a,a.entry,r-HPi);
+ this.impacted=!0,this.impactPoint={
+ x:o.x,y:o.y}
+ ,this.impactAngle=a.angle,this.bodyAngle=o.angle,this.trail.clear(),this.pressure.position.copyFrom(o),this.pressureEcho.position.copyFrom(o),this.impactGlow.position.copyFrom(o),this.pressure.visible=!this.miss,this.pressureEcho.visible=!this.miss&&2===this.material.tier,this.impactGlow.visible=!this.miss&&this.material.tier>0,this.pinMark.visible=this.blood.visible=this.bloodWisp.visible=!this.miss,this.result.visible=this.showResult,this.miss||this.target.hit(this.power),null==(n=(e=this.feedback).impact)||n.call(e,this.power),this.startSpray(o)}
+ const c=Math.max(0,r-.155),l=WPi(c/1.4),u=Math.atan2(Math.sin(o.angle-this.bodyAngle),Math.cos(o.angle-this.bodyAngle)),d=this.impactAngle+(this.miss?0:u),f=this.miss?10*VPi(c/.12):7.2+(1.2+.4*this.material.tier)*VPi((c-.04)/.04),p=this.miss?this.impactPoint:o,g=this.miss?0:Math.sin(90*Math.max(0,c-.035))*(.14-.04*this.material.tier)*Math.exp(20*-Math.max(0,c-.035)),w=(1-VPi((c-(this.miss?.14:.95))/.4))*Math.min(1,o.alpha/.15),m=d+g;
+ this.placeSpear(p.x+Math.cos(m)*f,p.y+Math.sin(m)*f,m,this.miss?16+16*VPi(c/.1):30,w,this.miss?0:f),this.drawWound(p,c,w),this.drawBubbles(p,this.waterPoint,c+.04),this.drawImpact(c),this.drawSpray(c),this.result.position.set(this.impactPoint.x+14,this.impactPoint.y-60-12*VPi(l));
+ const v=null==(h=this.viewBounds)?void 0:h.call(this);
+ if(v){
+ const t=Math.min(v.width/2,this.result.width/2+6);
+ this.result.x=Math.max(v.x+t,Math.min(v.x+v.width-t,this.result.x)),this.result.y=Math.max(v.y+22,Math.min(v.y+v.height-38,this.result.y))}
+ this.result.scale.set(1+.18*(1-VPi((c-.11)/.14))),this.result.alpha=VPi((c-.11)/.06)*(1-VPi((c-.7)/.35)),c>=1.4&&(this.finish(!0),this.destroy({
+ children:!0}
+ ))}
+ drawImpact(t){
+ const i=this.material.tier,s=WPi(this.aim.alpha/.4),e=.025+(.12+.11*i)*VPi(t/(.14+.03*i));
+ this.pressure.scale.set(e,.5*e),this.pressure.alpha=(.32+.14*i)*(1-VPi(t/(.2+.07*i)))*s;
+ const n=WPi((t-.065)/.42),h=.03+.35*(1-(1-n)**3);
+ this.pressureEcho.scale.set(h,.48*h),this.pressureEcho.alpha=t<.065?0:.6*(1-n)**1.5*s;
+ const r=WPi(t/(2===i?.22:.1)),o=.07+.035*i+.1*r;
+ this.impactGlow.scale.set(o,.52*o),this.impactGlow.alpha=(2===i?.44:.18)*(1-r)**2*s}
+ drawWound(t,i,s){
+ if(this.miss)return;
+ const e=WPi(this.aim.alpha/.4);
+ this.pinMark.position.copyFrom(t),this.pinMark.alpha=s*WPi(this.aim.alpha),this.pinMark.scale.set(1+.25*(1-VPi(i/.09)));
+ const n=1-VPi((i-.5)/.85),h=VPi(i/.4),r=this.impactPoint.x+.35*(t.x-this.impactPoint.x),o=this.impactPoint.y+.35*(t.y-this.impactPoint.y)-2*i;
+ this.blood.position.set(r,o),this.blood.rotation=.4*this.bodyAngle,this.blood.scale.set(.16+.38*h,.12+.25*h),this.blood.alpha=(.42-.14*h)*n*e,this.bloodWisp.position.set(r-this.side*(1+5*i),o-4*i),this.bloodWisp.scale.set(.13+.37*h,.08+.16*h),this.bloodWisp.alpha=.14*VPi(i/.13)*n*e}
+ drawBubbles(t,i,s){
+ const e=this.bubbles.clear();
+ if(!(s<0||s>.43))for(let n=0;
+ n<5;
+ n++){
+ const h=(n+1)/6,r=.5*(1-WPi(s/.43));
+ e.circle(i.x+(t.x-i.x)*h+1.4*Math.sin(2.4*n),i.y+(t.y-i.y)*h-s*(4+n),.6+n%2*.35).stroke({
+ color:13234160,width:.65,alpha:r}
+ )}
+ }
+ get landed(){
+ return this.impacted}
+ cancel(){
+ this.destroyed||this.destroy({
+ children:!0}
+ )}
+ destroy(t){
+ this.destroyed||(this.finish(!1),this.underwater.destroyed||this.underwater.destroy({
+ children:!0}
+ ),this.result.destroyed||this.result.destroy({
+ children:!0}
+ ),this.waterBlur.blurXFilter.destroy(),this.waterBlur.blurYFilter.destroy(),this.waterBlur.destroy(),super.destroy(t??{
+ children:!0}
+ ))}
+ }
+ ;
+ Qt(JPi,"FishingHarpoonFx");
+ let QPi=JPi;
+ const ZPi=new WeakMap;
+ function tNi(t,i){
+ const s=Math.max(0,Math.min(1,i));
+ let e,n;
+ if(t.rig){
+ const i=t.rig;
+ if(e=i,"geometry"in i){
+ const t=i.geometry.positions,s=i.columns,e=(i.rows-1)/2;
+ n=Qt(i=>{
+ const n=(1-i)*(s-1),h=Math.min(s-2,Math.floor(n)),r=n-h,o=2*(e*s+h);
+ return{
+ x:t[o]+(t[o+2]-t[o])*r,y:t[o+1]+(t[o+3]-t[o+1])*r}
+ }
+ ,"point")}
+ else n=Qt(t=>({
+ x:.5-t,y:0}
+ ),"point")}
+ else{
+ if(!t.spine)return null;
+ {
+ const i=t.spine,s=i.skeleton.findSlot("body"),h=null==s?void 0:s.getAttachment();
+ if(!s||!h||!("regionUVs"in h))return null;
+ const r=h;
+ let o=ZPi.get(r);
+ if(!o){
+ o=[];
+ for(let t=0;
+ t<r.regionUVs.length;
+ t+=2)Math.abs(r.regionUVs[t+1]-.5)<.001&&o.push({
+ u:r.regionUVs[t],index:t}
+ );
+ o.sort((t,i)=>t.u-i.u),ZPi.set(r,o)}
+ if(o.length<2)return null;
+ e=i;
+ const a=o,c=new Float32Array(4);
+ n=Qt(t=>{
+ const i=1-t;
+ let e=0;
+ for(;
+ e<a.length-2&&a[e+1].u<i;
+ )e++;
+ const n=a[e],h=a[e+1],o=(i-n.u)/(h.u-n.u);
+ return r.computeWorldVertices(s,n.index,2,c,0,2),r.computeWorldVertices(s,h.index,2,c,2,2),{
+ x:c[0]+(c[2]-c[0])*o,y:c[1]+(c[3]-c[1])*o}
+ }
+ ,"point")}
+ }
+ e.updateLocalTransform();
+ const h=e.localTransform.apply(n(s)),r=e.localTransform.apply(n(Math.max(0,s-.015))),o=e.localTransform.apply(n(Math.min(1,s+.015)));
+ return{
+ x:h.x,y:h.y,angle:Math.atan2(r.y-o.y,r.x-o.x)}
+ }
+ Qt(tNi,"sampleHarpoonBody");
+ const iNi=class{
+ static get(t){
+ if(this.cache.has(t))return this.cache.get(t);
+ const i=this.build(t);
+ return this.cache.set(t,i),i}
+ static at(t,i,s){
+ const e=this.get(t);
+ if(e){
+ const t=Math.min(e.cols-1,Math.max(0,Math.floor(i/e.tile))),n=Math.min(e.rows-1,Math.max(0,Math.floor(s/e.tile))),h=e.owner[n*e.cols+t];
+ if(h>=0)return h}
+ return this.nearest(t,i,s)}
+ static nearest(t,i,s){
+ const e=nAi.topdownInfo(t).points;
+ let n=0,h=1/0;
+ return e.forEach((t,e)=>{
+ const r=(t.x-i)**2+(t.y-s)**2;
+ r<h&&(h=r,n=e)}
+ ),n}
+ static build(t){
+ const i=nAi.topdownInfo(t);
+ if("tile"!==i.type||!i.verts||!i.tile)return null;
+ const s=i.cols,e=i.rows,n=i.tile,h=s*e,r=s+1,o=Uint8Array.from(atob(i.verts),t=>t.charCodeAt(0)),a=Qt((t,i)=>{
+ const s=i*r+t;
+ return o[s>>3]>>(7&s)&1}
+ ,"vert"),c=new Uint8Array(h);
+ for(let v=0;
+ v<e;
+ v++)for(let t=0;
+ t<s;
+ t++)c[v*s+t]=a(t,v)+a(t+1,v)+a(t,v+1)+a(t+1,v+1)<=2?1:0;
+ const l=new Int8Array(h).fill(-1),u=new Int32Array(h).fill(2147483647),d=[],f=[],p=Qt((t,i)=>{
+ let s=d.length;
+ for(d.push(t),f.push(i);
+ s>0;
+ ){
+ const i=s-1>>1;
+ if(d[i]<=t)break;
+ d[s]=d[i],f[s]=f[i],s=i}
+ d[s]=t,f[s]=i}
+ ,"push"),g=Qt(()=>{
+ const t=f[0],i=d.pop(),s=f.pop();
+ if(d.length){
+ let t=0;
+ for(;
+ ;
+ ){
+ const s=2*t+1,e=s+1;
+ let n=t,h=i;
+ if(s<d.length&&d[s]<h&&(n=s,h=d[s]),e<d.length&&d[e]<h&&(n=e,h=d[e]),n===t)break;
+ d[t]=d[n],f[t]=f[n],t=n}
+ d[t]=i,f[t]=s}
+ return t}
+ ,"pop");
+ i.points.forEach((t,i)=>{
+ const h=Math.min(e-1,Math.floor(t.y/n))*s+Math.min(s-1,Math.floor(t.x/n));
+ 0!==u[h]&&(u[h]=0,l[h]=i,c[h]=1,p(0,h))}
+ );
+ const w=[[1,0,10],[-1,0,10],[0,1,10],[0,-1,10],[1,1,14],[1,-1,14],[-1,1,14],[-1,-1,14]];
+ for(;
+ d.length;
+ ){
+ const t=d[0],i=g();
+ if(t>u[i])continue;
+ const n=i%s,h=(i-n)/s;
+ for(const[r,o,a]of w){
+ const d=n+r,f=h+o;
+ if(d<0||f<0||d>=s||f>=e)continue;
+ const g=f*s+d;
+ if(!c[g])continue;
+ if(r&&o&&!c[h*s+d]&&!c[f*s+n])continue;
+ const w=t+a;
+ w<u[g]&&(u[g]=w,l[g]=l[i],p(w,g))}
+ }
+ for(let v=0;
+ v<h;
+ v++)if(c[v]&&l[v]<0){
+ const i=v%s,e=(v-i)/s;
+ l[v]=this.nearest(t,(i+.5)*n,(e+.5)*n)}
+ const m=new Uint8Array(h);
+ for(let v=0;
+ v<e;
+ v++)for(let t=0;
+ t<s;
+ t++){
+ const i=v*s+t,n=l[i];
+ n<0||(t+1<s&&l[i+1]>=0&&l[i+1]!==n||v+1<e&&l[i+s]>=0&&l[i+s]!==n)&&(m[i]=1)}
+ return{
+ cols:s,rows:e,tile:n,owner:l,edge:m,verts:o}
+ }
+ static fine(t){
+ if(t.fine)return t.fine;
+ const i=4*t.cols,s=4*t.rows,e=t.cols+1,n=Qt((i,s)=>{
+ if(i<0||s<0||i>t.cols||s>t.rows)return 1;
+ const n=s*e+i;
+ return t.verts[n>>3]>>(7&n)&1}
+ ,"vert"),h=Qt((i,s)=>i<0||s<0||i>=t.cols||s>=t.rows?-1:t.owner[s*t.cols+i],"own"),r=new Int8Array(i*s).fill(-1),o=new Uint8Array(i*s),a=new Float32Array(16);
+ for(let c=0;
+ c<s;
+ c++)for(let t=0;
+ t<i;
+ t++){
+ const s=(t+.5)/4,e=(c+.5)/4,o=Math.floor(s),l=Math.floor(e),u=s-o,d=e-l;
+ if((n(o,l)*(1-u)+n(o+1,l)*u)*(1-d)+(n(o,l+1)*(1-u)+n(o+1,l+1)*u)*d>.5)continue;
+ const f=s-.5,p=e-.5,g=Math.floor(f),w=Math.floor(p),m=f-g,v=p-w;
+ a.fill(0);
+ let _=-1,M=0;
+ for(const[t,i,n]of[[0,0,(1-m)*(1-v)],[1,0,m*(1-v)],[0,1,(1-m)*v],[1,1,m*v]]){
+ const s=h(g+t,w+i);
+ s<0||(a[s]+=n,a[s]>M&&(M=a[s],_=s))}
+ r[c*i+t]=_>=0?_:h(Math.floor(s),Math.floor(e))}
+ for(let c=0;
+ c<s;
+ c++)for(let t=0;
+ t<i;
+ t++){
+ const e=c*i+t,n=r[e];
+ n<0||(t+1<i&&r[e+1]>=0&&r[e+1]!==n||c+1<s&&r[e+i]>=0&&r[e+i]!==n)&&(o[e]=1)}
+ return t.fine={
+ owner:r,edge:o}
+ }
+ static paint(t,i,s,e,n,h=!0){
+ const r=this.fine(i),o=4*i.cols,a=4*i.rows;
+ t.width===o&&t.height===a||(t.width=o,t.height=a);
+ const c=t.getContext("2d"),l=c.createImageData(o,a),u=l.data,d=n>>16&255,f=n>>8&255,p=255&n,g=new Uint8Array(32);
+ for(let w=0;
+ w<g.length;
+ w++)g[w]=s(w)?1:0;
+ for(let w=0;
+ w<r.owner.length;
+ w++){
+ const t=r.owner[w];
+ if(t<0||!g[t])continue;
+ const i=t===e,s=4*w;
+ h&&1===r.edge[w]?(u[s]=i?d:255,u[s+1]=i?f:255,u[s+2]=i?p:255,u[s+3]=i?235:150):(u[s]=255,u[s+1]=255,u[s+2]=i?236:255,u[s+3]=i?46:22)}
+ c.putImageData(l,0,0)}
+ }
+ ;
+ Qt(iNi,"FishingTerritory"),Zt(iNi,"cache",new Map);
+ let sNi=iNi;
+ const eNi=32,nNi=class{
+ constructor(t,i,s){
+ Zt(this,"cols"),Zt(this,"rows"),Zt(this,"open"),Zt(this,"g"),Zt(this,"came"),Zt(this,"seen"),Zt(this,"shut"),Zt(this,"stamp",0),this.isLand=s,this.cols=Math.ceil(t/eNi),this.rows=Math.ceil(i/eNi);
+ const e=this.cols*this.rows;
+ this.open=new Uint8Array(e);
+ for(let n=0;
+ n<this.rows;
+ n++)for(let t=0;
+ t<this.cols;
+ t++){
+ const i=(t+.5)*eNi,e=(n+.5)*eNi;
+ this.open[n*this.cols+t]=s(i,e)||s(i-12,e)||s(i+12,e)||s(i,e-12)||s(i,e+12)?0:1}
+ this.g=new Float32Array(e),this.came=new Int32Array(e),this.seen=new Uint32Array(e),this.shut=new Uint32Array(e)}
+ nearestOpen(t,i,s=12){
+ const e=Math.min(this.cols-1,Math.max(0,Math.floor(t/eNi))),n=Math.min(this.rows-1,Math.max(0,Math.floor(i/eNi)));
+ if(this.open[n*this.cols+e])return n*this.cols+e;
+ let h=-1,r=1/0;
+ for(let o=1;
+ o<=s&&h<0;
+ o++)for(let s=n-o;
+ s<=n+o;
+ s++)for(let a=e-o;
+ a<=e+o;
+ a++){
+ if(Math.max(Math.abs(s-n),Math.abs(a-e))!==o||a<0||s<0||a>=this.cols||s>=this.rows)continue;
+ const c=s*this.cols+a;
+ if(!this.open[c])continue;
+ const l=((a+.5)*eNi-t)**2+((s+.5)*eNi-i)**2;
+ l<r&&(r=l,h=c)}
+ return h}
+ center(t){
+ const i=t%this.cols;
+ return{
+ x:(i+.5)*eNi,y:((t-i)/this.cols+.5)*eNi}
+ }
+ lineOpen(t,i,s,e){
+ const n=Math.hypot(s-t,e-i),h=Math.max(1,Math.ceil(n/8));
+ for(let r=0;
+ r<=h;
+ r++){
+ const n=t+(s-t)*r/h,o=i+(e-i)*r/h,a=Math.floor(n/eNi),c=Math.floor(o/eNi);
+ if(a<0||c<0||a>=this.cols||c>=this.rows||!this.open[c*this.cols+a])return!1}
+ return!0}
+ find(t,i,s,e){
+ const n=this.nearestOpen(t,i),h=this.nearestOpen(s,e);
+ if(n<0||h<0)return null;
+ const r=h===Math.floor(e/eNi)*this.cols+Math.floor(s/eNi)?{
+ x:s,y:e}
+ :this.center(h),o=n===Math.floor(i/eNi)*this.cols+Math.floor(t/eNi);
+ if(o&&this.lineOpen(t,i,r.x,r.y))return[r];
+ const a=++this.stamp,c=this.cols,l=this.rows,u=h%c,d=(h-u)/c,f=[],p=[],g=Qt((t,i)=>{
+ let s=f.length;
+ for(f.push(t),p.push(i);
+ s>0;
+ ){
+ const i=s-1>>1;
+ if(f[i]<=t)break;
+ f[s]=f[i],p[s]=p[i],s=i}
+ f[s]=t,p[s]=i}
+ ,"push"),w=Qt(()=>{
+ const t=p[0],i=f.pop(),s=p.pop();
+ if(f.length){
+ let t=0;
+ for(;
+ ;
+ ){
+ const s=2*t+1,e=s+1;
+ let n=t,h=i;
+ if(s<f.length&&f[s]<h&&(n=s,h=f[s]),e<f.length&&f[e]<h&&(n=e,h=f[e]),n===t)break;
+ f[t]=f[n],p[t]=p[n],t=n}
+ f[t]=i,p[t]=s}
+ return t}
+ ,"pop"),m=Qt(t=>{
+ const i=t%c,s=(t-i)/c,e=Math.abs(i-u),n=Math.abs(s-d);
+ return 10*(e+n)-6*Math.min(e,n)}
+ ,"h");
+ this.g[n]=0,this.came[n]=-1,this.seen[n]=a,g(m(n),n);
+ let v=!1;
+ const _=[[1,0,10],[-1,0,10],[0,1,10],[0,-1,10],[1,1,14],[1,-1,14],[-1,1,14],[-1,-1,14]];
+ for(;
+ f.length;
+ ){
+ const t=w();
+ if(this.shut[t]===a)continue;
+ if(this.shut[t]=a,t===h){
+ v=!0;
+ break}
+ const i=t%c,s=(t-i)/c,e=this.g[t];
+ for(const[n,h,r]of _){
+ const o=i+n,u=s+h;
+ if(o<0||u<0||o>=c||u>=l)continue;
+ const d=u*c+o;
+ if(!this.open[d]||this.shut[d]===a)continue;
+ if(n&&h&&(!this.open[s*c+o]||!this.open[u*c+i]))continue;
+ const f=e+r;
+ this.seen[d]===a&&f>=this.g[d]||(this.seen[d]=a,this.g[d]=f,this.came[d]=t,g(f+m(d),d))}
+ }
+ if(!v)return null;
+ const M=[];
+ for(let A=h;
+ -1!==A&&A!==n;
+ A=this.came[A])M.push(this.center(A));
+ M.reverse(),M[M.length-1]=r;
+ const b=[];
+ let y=o?{
+ x:t,y:i}
+ :this.center(n),E=-1;
+ for(o||b.push(y);
+ E<M.length-1;
+ ){
+ let t=M.length-1;
+ for(;
+ t>E+1&&!this.lineOpen(y.x,y.y,M[t].x,M[t].y);
+ )t--;
+ b.push(M[t]),y=M[t],E=t}
+ return b}
+ }
+ ;
+ Qt(nNi,"FishingPath");
+ let hNi=nNi;
+ const rNi=Qt(t=>Math.max(0,Math.min(1,t)),"clamp01");
+ function oNi(t,i,s){
+ const e=rNi((s-t)/(i-t));
+ return e*e*(3-2*e)}
+ function aNi(t,i){
+ return.38+.62*oNi(.12,.88,.5+.5*Math.sin(.19*t+i))}
+ function cNi(t){
+ return t+.18*Math.sin(t)}
+ function lNi(t,i,s,e,n,h){
+ const r=t-.5,o=(i-.5)*s,a=Math.sign(o),c=Math.max(0,Math.abs(o)-.07),l=oNi(.07,.49*s,Math.abs(o)),u=oNi(.9,.4,t),d=cNi(e)-.85*l-.65*u,f=(.18+.56*n)*Math.sin(d)*Math.pow(l,.65)+a*h*.13*l,p=c*Math.sin(f),g=oNi(.34,.02,t);
+ return{
+ x:r-.16*p+l*l*.016*Math.sin(d-.5),y:a*(Math.min(Math.abs(o),.07)+c*Math.cos(f))+g*g*.012*Math.sin(.62*e-3.5*(1-t))}
+ }
+ function uNi(t,i,s){
+ const e=oNi(.38,1,t);
+ return.042*(.55+.45*s)*e*e*Math.sin(cNi(i)-3.2*t)}
+ function dNi(t,i){
+ const s=cNi(t);
+ return{
+ pitch:(.14+.22*i)*Math.sin(s),yaw:.32*i*Math.sin(s-.6)}
+ }
+ Qt(oNi,"smoothRange"),Qt(aNi,"swimEffort"),Qt(cNi,"strokePhase"),Qt(lNi,"mantaVertex"),Qt(uNi,"sharkTail"),Qt(dNi,"whaleStroke");
+ const fNi={
+ catfish:{
+ k:5.7,slip:.55}
+ ,eel:{
+ k:9,slip:.7}
+ ,megalodon:{
+ k:3.2,slip:.32}
+ ,whaleShark:{
+ k:3.2,slip:.38}
+ ,sturgeon:{
+ k:4.6,slip:.5}
+ }
+ ;
+ function pNi(t,i,s){
+ const e=fNi[t];
+ return e?e.k*i/(e.slip*s):null}
+ function gNi(t,i){
+ return"manta"===t||"turtle"===t?0:"catfish"===t?oNi(.12,.6,i):"eel"===t?1:oNi(.38,.9,i)}
+ function wNi(t,i,s,e,n=!1){
+ const h=oNi(0,.68,(t/(2*Math.PI)%1+1)%1)*Math.PI*2,r=.55+.45*i;
+ return{
+ sweep:e*(n?.08:.31)*r*Math.sin(h)+s*(n?.12:.07),span:Math.cos((n?.16:.7)*r*Math.sin(h))*(1-e*s*.025)}
+ }
+ function mNi(t,i,s){
+ return(.006+.06*Math.pow(oNi(.12,1,t),1.5))*(.45+.55*s)*Math.sin(i-t*fNi.catfish.k)}
+ function vNi(t,i,s){
+ const e=.12*s+.035*Math.sin(i-2.7),n=.32+1.3*Math.abs(Math.sin(e));
+ return 1-oNi(.18,.1,t)*(1-n)}
+ function _Ni(t,i,s){
+ return(.02+.028*t)*(.7+.3*s)*Math.sin(i-t*fNi.eel.k)}
+ Qt(pNi,"bodyPhaseRate"),Qt(gNi,"bodyFlex"),Qt(wNi,"turtleFlipperPose"),Qt(mNi,"catfishSway"),Qt(vNi,"catfishTailProjection"),Qt(_Ni,"eelSway");
+ const MNi=-.02,bNi=[[0,0],[.05,.02],[.1,.021],[.14,.018],[.2,.026],[.34,.037],[.5,.05],[.64,.062],[.76,.072],[.86,.079],[.92,.08],[.955,.073],[.98,.058],[.995,.035],[1,0]];
+ function yNi(t){
+ if(t<=0||t>=1)return 0;
+ for(let i=1;
+ i<bNi.length;
+ i++){
+ const[s,e]=bNi[i];
+ if(t<=s){
+ const[n,h]=bNi[i-1];
+ return h+(e-h)*(t-n)/(s-n)}
+ }
+ return 0}
+ function ENi(t,i,s,e,n){
+ const h=Math.abs(i),r=i<0?-1:1,o=yNi(t);
+ if(t<.6||h<=o+.004)return{
+ x:0,y:0}
+ ;
+ const a=Qt((s,e,n)=>{
+ const h=Math.cos(n),r=Math.sin(n),o=t-s,a=i-e;
+ return{
+ x:s+o*h-a*r-t,y:e+o*r+a*h-i}
+ }
+ ,"turn"),c=.05*r,l=Math.hypot(t-.985,i-c),u=.072*r,d=Math.hypot(t-.84,i-u),f=oNi(.72,.82,t)*oNi(o+.004,o+.12,h),p=(1-oNi(.06,.1,d))*oNi(o+.004,o+.05,h)*(1-f),g=(r*(.08*Math.sin(.8*s+1.3-7*l)+.06*e)-.14*n)*oNi(0,.06,l),w=r*(.16*Math.sin(.6*s+(r>0?0:.9))+.06*e)*oNi(0,.04,d),m=a(.985,c,g),v=a(.84,u,w);
+ return{
+ x:m.x*f+v.x*p,y:m.y*f+v.y*p}
+ }
+ Qt(yNi,"catfishHalf"),Qt(ENi,"catfishAppendage");
+ const ANi={
+ manta:[33,33],catfish:[49,17],eel:[65,5]}
+ ,SNi=class extends Wy{
+ constructor(t,i){
+ const[s,e]=ANi[t];
+ super({
+ texture:i,verticesX:s,verticesY:e}
+ ),Zt(this,"columns"),Zt(this,"rows"),Zt(this,"aspect"),this.kind=t,this.autoResize=!1,this.columns=s,this.rows=e,this.aspect=i.height/i.width,this.eventMode="none"}
+ pose(t,i,s,e,n){
+ const h=this.geometry.positions;
+ if("manta"===this.kind){
+ const r=n(.5*t),o=Math.cos(r.a),a=Math.sin(r.a);
+ for(let n=0;
+ n<this.rows;
+ n++)for(let c=0;
+ c<this.columns;
+ c++){
+ const l=lNi(c/(this.columns-1),n/(this.rows-1),this.aspect,i,s,e),u=2*(n*this.columns+c);
+ h[u]=r.x+(o*l.x-a*l.y)*t,h[u+1]=r.y+(a*l.x+o*l.y)*t}
+ }
+ else{
+ const r="catfish"===this.kind?mNi:_Ni,o=1.05;
+ for(let a=0;
+ a<this.columns;
+ a++){
+ const c=a/(this.columns-1),l=1-c,u=n(l*t),d=r(l,i,s)*t,f=(r(l+.002,i,s)-r(l-.002,i,s))/.004,p=u.a-Math.atan(f),g=Math.cos(p),w=Math.sin(p),m="catfish"===this.kind?vNi(MNi+c*o,i,e):1;
+ for(let n=0;
+ n<this.rows;
+ n++){
+ const r=(n/(this.rows-1)-.5)*this.aspect;
+ let l=0,f=r*t;
+ if("catfish"===this.kind){
+ const n=ENi(MNi+c*o,r*o,i,s,e);
+ l=n.x/o*t,f=(r+n.y/o)*t}
+ f*=m;
+ const p=2*(n*this.columns+a);
+ h[p]=u.x-Math.sin(u.a)*d+g*l-w*f,h[p+1]=u.y+Math.cos(u.a)*d+w*l+g*f}
+ }
+ }
+ this.geometry.getBuffer("aPosition").update()}
+ destroy(t){
+ const i=this.geometry;
+ super.destroy(t),i.destroy()}
+ }
+ ;
+ Qt(SNi,"FishingGiantRig");
+ let TNi=SNi;
+ function CNi(t){
+ const i=Array.from({
+ length:9}
+ ,(i,s)=>t.skeleton.findBone(`b${
+ s}
+ `)),s=t.skeleton.findBone("fluke"),e=t.skeleton.findBone("finL"),n=t.skeleton.findBone("finR");
+ return(t,h,r,o)=>{
+ const a=dNi(h,r);
+ i.forEach((i,s)=>{
+ if(!i)return;
+ const e=oNi(3,8,s),n=a.pitch*e;
+ i.rotation=i.data.rotation+(t[s]??0)+a.yaw*e*.3,i.x=i.data.x*Math.cos(n),i.y=i.data.y}
+ ),s&&(s.scaleX=s.data.scaleX*Math.cos(a.pitch+.12*Math.sin(h-.7)),s.scaleY=s.data.scaleY,s.rotation=s.data.rotation+a.yaw),[e,n].forEach((t,i)=>{
+ if(!t)return;
+ const s=0===i?1:-1,e=.12*Math.sin(.5*h+.25*i+.7)+s*o*.16;
+ t.rotation=t.data.rotation+s*(2*Math.sin(.5*h+.7)+o*s*4),t.scaleX=t.data.scaleX*Math.cos(e),t.scaleY=t.data.scaleY}
+ )}
+ }
+ Qt(CNi,"whalePoser");
+ const ONi={
+ R:{
+ amplitude:.8,drift:.8,current:3.2}
+ ,C:{
+ amplitude:1.3,drift:1.25,current:1.25}
+ ,O:{
+ amplitude:1.85,drift:1.7,current:.55}
+ }
+ ,INi=.83205,kNi=.5547,RNi=[{
+ x:.83205,y:.5547,k:2*Math.PI/290,w:2*Math.PI/9.6,a:.64,phase:0}
+ ,{
+ x:.36,y:.93295,k:2*Math.PI/190,w:2*Math.PI/6.7,a:.25,phase:1.7}
+ ,{
+ x:-.62,y:.7846,k:2*Math.PI/410,w:2*Math.PI/14.3,a:.11,phase:3.1}
+ ],xNi=Qt((t,i,s)=>Math.max(i,Math.min(s,t)),"clamp$2");
+ function PNi(t,i,s){
+ const e=xNi((s-t)/(i-t),0,1);
+ return e*e*(3-2*e)}
+ function NNi(t,i,s,e){
+ let n=0,h=0,r=0,o=0,a=0,c=0;
+ const l=ONi[e];
+ for(const u of RNi){
+ const e=(t*u.x+i*u.y)*u.k-s*u.w+u.phase,d=Math.sin(e),f=Math.cos(e),p=u.a*l.amplitude;
+ n+=p*d,h-=p*u.w*f,r+=p*u.k*f*u.x,o+=p*u.k*f*u.y,a+=u.x*u.a*f*l.drift,c+=u.y*u.a*f*l.drift}
+ return{
+ height:n,velocity:h,slopeX:r,slopeY:o,driftX:a,driftY:c}
+ }
+ function LNi(t,i,s,e,n=1/0){
+ const h=NNi(t,i,s,e),r=Math.max(0,n),o=Number.isFinite(r)?Math.sin(r*Math.PI*2/.95)*Math.exp(1.8*-r):0;
+ return{
+ x:t+.65*h.driftX,y:i+.65*h.driftY-.95*h.height+1.4*o,rotation:xNi(2.8*h.slopeX+.65*h.slopeY+.1*o,-.14,.14),height:h.height}
+ }
+ function DNi(t,i=1){
+ return{
+ halfLength:(17.2+.9*Math.min(5,t))*i,halfWidth:(0===t?9:8.4+.65*Math.min(5,t))*i}
+ }
+ function GNi(t,i,s,e,n,h,r,o=1){
+ const a=xNi(h,0,5),c=1-.055*a,l=DNi(a,o),u=NNi(t,i,e,n),d=1-PNi(4,85,r),f=Math.cos(s),p=Math.sin(s);
+ let g=0,w=0,m=0,v=0,_=0,M=0;
+ for(const A of RNi){
+ const s=A.x*f+A.y*p,h=A.y*f-A.x*p,o=(t*A.x+i*A.y)*A.k-e*A.w+A.phase,u=A.w-Math.max(0,r)*A.k*s,d=u*(.42+.09*a),b=u*(.72+.13*a),y=A.a*ONi[n].amplitude*c,E=y/Math.hypot(1,d),S=y/Math.hypot(1,b),T=o+Math.atan(d),C=o+Math.atan(b);
+ g+=E*Math.sin(T),w-=E*u*Math.cos(T);
+ const O=Math.sin(A.k*h*l.halfWidth)/l.halfWidth*S*3.15,I=Math.sin(A.k*s*l.halfLength)/l.halfLength*S*2.25;
+ m+=O*Math.cos(C),v+=I*Math.cos(C),_+=O*u*Math.sin(C),M+=I*u*Math.sin(C)}
+ const b=m*(.24+.34*d)+v*d*.1,y=t+u.driftX*c*(.3+.7*d),E=i+u.driftY*c*(.3+.7*d);
+ return{
+ x:y+3*m,y:E-1.25*g+2*v,waterX:y,waterY:E,rotation:s+Math.PI/2+b,scaleX:Math.cos(m),scaleY:Math.cos(v),skew:.6*m,height:g,roll:m,pitch:v,velocity:w,rollVelocity:_,pitchVelocity:M}
+ }
+ Qt(PNi,"smoothWater"),Qt(NNi,"sampleWater"),Qt(LNi,"bobberFloatPose"),Qt(DNi,"hullSize"),Qt(GNi,"boatFloatPose");
+ const BNi={
+ full:{
+ points:220,foam:96,ripples:6,spacing:4}
+ ,nearby:{
+ points:56,foam:12,ripples:4,spacing:8}
+ }
+ ;
+ function UNi(t,i){
+ const s=DNi(t.level,t.hullScale),e=Math.max(0,-t.velocity-i*s.halfWidth*(t.rollVelocity??0)+Math.abs(t.pitchVelocity??0)*s.halfLength*.25),n=Math.max(0,-i*(t.roll??0)*8);
+ return Math.min(1.6,.7*e+.55*n+.035*ONi[t.zone].current)}
+ Qt(UNi,"hullWaterPressure");
+ const FNi=class{
+ constructor(t="full",i=719){
+ Zt(this,"points",[]),Zt(this,"foam",[]),Zt(this,"ripples",[]),Zt(this,"last",null),Zt(this,"group",0),Zt(this,"distance",0),Zt(this,"bubbles",0),Zt(this,"contact",[0,0]),Zt(this,"threshold",[1,1]),Zt(this,"anchor",null),this.detail=t,this.seed=i,this.reset()}
+ random(){
+ return this.seed=Math.imul(this.seed,1664525)+1013904223>>>0,this.seed/4294967296}
+ reset(){
+ this.points=[],this.foam=[],this.ripples=[],this.last=null,this.bubbles=this.distance=0,this.group++,this.anchor=null,this.contact=[.7*this.random(),.7*this.random()],this.threshold=[.8+.4*this.random(),.8+.4*this.random()]}
+ update(t,i){
+ const{
+ x:s,y:e,heading:n,speed:h,level:r,zone:o}
+ =i;
+ (t>.5||this.anchor&&Math.hypot(s-this.anchor.x,e-this.anchor.y)>80)&&(this.reset(),t=0),t=Math.max(0,t),this.anchor={
+ x:s,y:e}
+ ;
+ const a=BNi[this.detail],c="nearby"===this.detail,l=ONi[o].current,u=INi*l,d=kNi*l;
+ for(const _ of this.points)_.age+=t,_.x+=u*t*.35,_.y+=d*t*.35;
+ this.points=this.points.filter(t=>t.age<4.8);
+ for(const _ of this.foam){
+ _.age+=t;
+ const i=Math.exp(-1.25*t),s=(1-i)/1.25;
+ _.x+=u*t+_.vx*s,_.y+=d*t+_.vy*s,_.vx*=i,_.vy*=i}
+ this.foam=this.foam.filter(t=>t.age<t.life);
+ for(const _ of this.ripples)_.age+=t,_.x+=u*t*.55,_.y+=d*t*.55;
+ this.ripples=this.ripples.filter(t=>t.age<t.life);
+ const f=PNi(3,150,h),p=Math.cos(n),g=Math.sin(n),w=DNi(r,i.hullScale),m={
+ x:s-p*w.halfLength*.83,y:e-g*w.halfLength*.83}
+ ;
+ if(h>4){
+ this.last||(this.last=m,this.group++);
+ let i=Math.hypot(m.x-this.last.x,m.y-this.last.y);
+ for(;
+ i>=a.spacing;
+ ){
+ const t=a.spacing/i;
+ this.last={
+ x:this.last.x+(m.x-this.last.x)*t,y:this.last.y+(m.y-this.last.y)*t}
+ ,this.distance+=a.spacing,this.points.push({
+ ...this.last,nx:-g,ny:p,age:0,power:f,distance:this.distance,group:this.group}
+ ),i-=a.spacing}
+ for(this.bubbles+=t*(3+20*f)*PNi(3,18,h)*(c?.3:1);
+ this.bubbles>=1;
+ ){
+ this.bubbles--;
+ const t=this.random()<.5?-1:1,i=this.random()<.72,n=i?w.halfLength*(.3+.3*this.random()):.8*-w.halfLength,h=t*w.halfWidth*(i?.95:.45);
+ this.foam.push({
+ x:s+p*n-g*h,y:e+g*n+p*h,vx:-p*(6+12*f)-g*t*(2+4*f),vy:-g*(6+12*f)+p*t*(2+4*f),age:0,life:1.5+1.5*this.random(),size:2.1+this.random()*(1.5+2.5*f),alpha:.18+.22*f,rotation:this.random()*Math.PI*2,frame:Math.floor(8*this.random())}
+ )}
+ }
+ else this.last=null,this.bubbles=0;
+ const v=1-PNi(8,55,h);
+ for(let _=0;
+ _<2;
+ _++){
+ const h=0===_?1:-1,r=UNi(i,h);
+ if(this.contact[_]+=t*(.13+.46*r)*v,this.contact[_]<this.threshold[_])continue;
+ this.contact[_]-=this.threshold[_],this.threshold[_]=.8+.4*this.random();
+ const o=xNi(5*-(i.pitchVelocity??0),-.3,.3)*w.halfLength;
+ this.ripples.push({
+ x:s+p*o,y:e+g*o,age:0,life:3.5+1.1*this.random(),rotation:n+Math.PI/2,start:(1===h?0:Math.PI)-.9+.3*(this.random()-.5),span:1.5+.45*this.random(),spread:4.5+1.4*r,seed:this.random()*Math.PI*2,width:w.halfWidth+.6,length:w.halfLength,alpha:.23+.08*r}
+ )}
+ this.points.length>a.points&&this.points.splice(0,this.points.length-a.points),this.foam.length>a.foam&&this.foam.splice(0,this.foam.length-a.foam),this.ripples.length>a.ripples&&this.ripples.splice(0,this.ripples.length-a.ripples)}
+ }
+ ;
+ Qt(FNi,"BoatWaterModel");
+ let $Ni=FNi;
+ const HNi=class t extends Ve{
+ constructor(t="full",i=719){
+ super(),Zt(this,"model"),Zt(this,"surface",new ip),Zt(this,"trail",new ip),Zt(this,"contact",new ip),Zt(this,"bubbles",new Ve),Zt(this,"crests",new Ve),Zt(this,"waterlines",new Ve),Zt(this,"pool",[]),Zt(this,"crestPool",[]),Zt(this,"waterlinePool",[]),Zt(this,"renderElapsed",1),this.detail=t,this.model=new $Ni(t,i),this.eventMode="none",this.addChild(this.surface,this.trail,this.crests,this.contact,this.waterlines,this.bubbles)}
+ static crestTexture(t){
+ if(this.crestTextures[t])return this.crestTextures[t];
+ const i=document.createElement("canvas");
+ i.width=i.height=128;
+ const s=i.getContext("2d"),e=1.5+.15*t;
+ s.lineCap="round";
+ for(let h=0;
+ h<48;
+ h++){
+ const i=(h+.5)/48,n=Math.sin(i*Math.PI)**.8;
+ for(const[r,o,a]of[[1.7,4.5,`rgba(11,71,94,${
+ .38*n}
+ )`],[0,2.8,`rgba(224,245,239,${
+ n}
+ )`]]){
+ const i=Qt(i=>{
+ const s=-e/2+i/48*e,n=44+.7*Math.sin(4*s+1.9*t)+r;
+ return[64+Math.cos(s)*n,64+Math.sin(s)*n]}
+ ,"at"),n=i(h),c=i(h+1);
+ s.beginPath(),s.moveTo(n[0],n[1]),s.lineTo(c[0],c[1]),s.lineWidth=o,s.strokeStyle=a,s.stroke()}
+ }
+ const n=as.from(i);
+ return n.source.scaleMode="linear",this.crestTextures[t]=n}
+ reset(){
+ this.model.reset(),this.surface.clear(),this.trail.clear(),this.contact.clear(),this.renderElapsed=1,this.pool.forEach(t=>t.visible=!1),this.crestPool.forEach(t=>t.visible=!1),this.waterlinePool.forEach(t=>t.visible=!1)}
+ update(t,i,s,e=()=>!0){
+ if(this.model.update(t,i),this.renderElapsed+=t,"nearby"===this.detail&&this.renderElapsed<1/30)return;
+ this.renderElapsed%=1/30,"full"===this.detail&&this.drawSurface(i,e),this.drawTrail(s.wake),this.drawContact(i,e),this.drawRipples(e);
+ let n=0;
+ for(const h of this.model.foam){
+ if(!e(h.x,h.y))continue;
+ let t=this.pool[n];
+ t||(t=new Ye(s.puffs[h.frame]),t.anchor.set(.5),this.pool.push(t),this.bubbles.addChild(t));
+ const i=h.age/h.life;
+ t.texture=s.puffs[h.frame],t.visible=!0,t.position.set(h.x,h.y),t.rotation=h.rotation+.12*i,t.width=h.size*(1+1.1*i),t.height=h.size*(.72+.85*i),t.alpha=h.alpha*PNi(0,.12,i)*Math.pow(1-i,1.6),t.tint=14873839,n++}
+ for(let h=n;
+ h<this.pool.length;
+ h++)this.pool[h].visible=!1}
+ drawSurface(t,i){
+ const s=this.surface.clear(),{
+ x:e,y:n,time:h,zone:r}
+ =t,o=ONi[r].amplitude;
+ for(let a=-3;
+ a<=3;
+ a++)for(let t=-3;
+ t<=3;
+ t++){
+ const c=Math.floor(e/55)+t,l=Math.floor(n/55)+a,u=((Math.imul(c,374761393)^Math.imul(l,668265263))>>>0)/4294967296,d=55*c+15*Math.sin(51*u),f=55*l+15*Math.cos(37*u),p=Math.hypot(d-e,f-n);
+ if(p>170||!i(d,f))continue;
+ const g=NNi(d,f,h,r),w=.06*PNi(.15,.8,g.height/o)*(1-PNi(85,170,p));
+ if(w<.003)continue;
+ const m=-.5547,v=INi,_=6+10*u,M=d+g.driftX,b=f+g.driftY;
+ s.moveTo(M-m*_,b-v*_).quadraticCurveTo(M-1.6641,b-1.1094,M+m*_,b+v*_).stroke({
+ color:13823720,width:.8,alpha:w,cap:"round"}
+ ),s.moveTo(M-m*_+1.3,b-v*_+1.3).quadraticCurveTo(M-1.6641+1.3,b-1.1094+1.3,M+m*_+1.3,b+v*_+1.3).stroke({
+ color:739166,width:1.8,alpha:.45*w,cap:"round"}
+ )}
+ }
+ drawTrail(t){
+ const i=this.trail.clear(),s=this.model.points;
+ for(let e=1;
+ e<s.length;
+ e++){
+ const n=s[e-1],h=s[e],r=Math.hypot(h.x-n.x,h.y-n.y);
+ if(n.group!==h.group||r>20||r<.1||n.nx*h.nx+n.ny*h.ny<.8)continue;
+ const o=n.age/4.8,a=h.age/4.8,c=Math.pow(Math.max(0,1-.5*(o+a)),1.8),l=.5*(n.power+h.power),u=6+n.age*(5+9*n.power),d=6+h.age*(5+9*h.power);
+ for(const t of[-1,1]){
+ const s=n.x+n.nx*u*t,e=n.y+n.ny*u*t,r=h.x+h.nx*d*t,o=h.y+h.ny*d*t;
+ i.moveTo(s,e+1).lineTo(r,o+1).stroke({
+ color:671828,width:2,alpha:c*l*.035}
+ ),i.moveTo(s,e).lineTo(r,o).stroke({
+ color:14349294,width:.7+.3*l,alpha:c*l*.2}
+ )}
+ const f=3+n.age*(1.5+n.power),p=3+h.age*(1.5+h.power),g=.5*(f+p),w=(h.x-n.x)/r,m=(h.y-n.y)/r,v=-m,_=w;
+ if("nearby"===this.detail)continue;
+ const M=100,b=n.distance%M,y=new Si(w*M/t.width,m*M/t.width,v*g*2/t.height,_*g*2/t.height,n.x-v*g-w*b,n.y-_*g-m*b);
+ i.poly([n.x+v*f,n.y+_*f,h.x+v*p,h.y+_*p,h.x-v*p,h.y-_*p,n.x-v*f,n.y-_*f]).fill({
+ texture:t,matrix:y,textureSpace:"global",alpha:c*(.1+.28*l)}
+ )}
+ }
+ drawContact(i,s){
+ const e=this.contact.clear(),n=DNi(i.level,i.hullScale),h=PNi(3,150,i.speed),r=PNi(2,18,i.speed),o=Math.cos(i.heading),a=Math.sin(i.heading),c=Qt((t,s)=>({
+ x:i.x+o*t-a*s,y:i.y+a*t+o*s}
+ ),"point");
+ this.waterlinePool.forEach(t=>t.visible=!1);
+ for(const l of[-1,1]){
+ const o=UNi(i,l),a=c(.5*n.halfLength,l*n.halfWidth*.82),u=c(.1*-n.halfLength,l*(n.halfWidth+1)),d=c(.68*-n.halfLength,l*n.halfWidth*.8);
+ if(!s(a.x,a.y)||!s(d.x,d.y))continue;
+ const f=(.065+.14*o)*(1-.35*r);
+ if("nearby"===this.detail){
+ const s=-1===l?0:1;
+ let e=this.waterlinePool[s];
+ e||(e=new Ye(t.crestTexture(1)),e.anchor.set(.5),this.waterlinePool[s]=e,this.waterlines.addChild(e)),e.visible=!0,e.position.set(i.x,i.y),e.rotation=i.heading+Math.PI/2,e.scale.set(l*(n.halfWidth+.5)/44,.82*n.halfLength/44),e.alpha=f}
+ else e.moveTo(a.x+.6,a.y+.8).quadraticCurveTo(u.x+.6,u.y+.8,d.x+.6,d.y+.8).stroke({
+ color:737362,width:2.2,alpha:.45*f,cap:"round"}
+ ),e.moveTo(a.x,a.y).quadraticCurveTo(u.x,u.y,d.x,d.y).stroke({
+ color:13954792,width:2,alpha:.2*f,cap:"round"}
+ ),e.moveTo(a.x,a.y).quadraticCurveTo(u.x,u.y,d.x,d.y).stroke({
+ color:15005678,width:.7,alpha:f,cap:"round"}
+ );
+ if(r>0){
+ const t=c(n.halfLength+.5,l*(0===i.level?.55*n.halfWidth:.8)),s=c(.62*n.halfLength,l*(n.halfWidth+2+2*h)),o=c(.55*-n.halfLength,l*(n.halfWidth+5+5*h));
+ e.moveTo(t.x,t.y).quadraticCurveTo(s.x,s.y,o.x,o.y).stroke({
+ color:12379363,width:3+1.5*h,alpha:r*(.025+.025*h),cap:"round"}
+ ),e.moveTo(t.x,t.y).quadraticCurveTo(s.x,s.y,o.x,o.y).stroke({
+ color:15399410,width:.9+.65*h,alpha:r*(.16+.22*h),cap:"round"}
+ )}
+ }
+ }
+ drawRipples(i){
+ let s=0;
+ for(const e of this.model.ripples){
+ const n=e.age/e.life,h=e.age*e.spread/(1+.08*e.age),r=e.alpha*PNi(0,.1,n)*Math.pow(1-n,1.65),o=Math.cos(e.rotation),a=Math.sin(e.rotation),c=e.width+h,l=e.length+.82*h,u=Math.cos(e.start+e.span/2)>0?1:-1;
+ let d=!0;
+ for(const t of[-.9,0,.9]){
+ const s=Math.cos(t)*c*u,n=Math.sin(t)*l;
+ if(!i(e.x+o*s-a*n,e.y+a*s+o*n)){
+ d=!1;
+ break}
+ }
+ if(!d)continue;
+ const f=t.crestTexture(Math.min(3,Math.floor(e.seed/(2*Math.PI)*4)));
+ let p=this.crestPool[s];
+ p||(p=new Ye(f),p.anchor.set(.5),this.crestPool.push(p),this.crests.addChild(p)),p.texture=f,p.visible=!0,p.position.set(e.x,e.y),p.rotation=e.rotation,p.scale.set(u*c/44,l/44),p.alpha=r,s++}
+ for(let t=s;
+ t<this.crestPool.length;
+ t++)this.crestPool[t].visible=!1}
+ }
+ ;
+ Qt(HNi,"FishingBoatWater"),Zt(HNi,"crestTextures",[]);
+ let WNi=HNi;
+ const VNi={
+ fish:[[0,.001],[.06,.003],[.16,.006],[.23,.013],[.34,.032],[.48,.061],[.64,.078],[.76,.073],[.86,.057],[.94,.038],[.98,.021],[1,.002]],shark:[[0,.001],[.06,.003],[.13,.006],[.2,.014],[.32,.033],[.46,.058],[.6,.077],[.72,.077],[.83,.063],[.94,.036],[.98,.018],[1,.002]],megalodon:[[0,.001],[.07,.004],[.15,.009],[.24,.023],[.38,.051],[.53,.078],[.67,.089],[.78,.083],[.88,.064],[.96,.033],[1,.002]],whaleShark:[[0,.001],[.07,.004],[.16,.009],[.28,.027],[.43,.054],[.6,.078],[.77,.09],[.89,.094],[.96,.079],[.99,.05],[1,.012]],sturgeon:[[0,.001],[.06,.003],[.15,.007],[.27,.019],[.43,.044],[.59,.066],[.72,.07],[.81,.056],[.88,.035],[.96,.012],[1,.001]]}
+ ,jNi={
+ fish:[[.48,0],[.53,.062],[.565,.104],[.59,.102],[.63,.077],[.71,.045]],shark:[[.46,0],[.49,.06],[.52,.174],[.535,.186],[.555,.16],[.6,.114],[.66,.081],[.71,.055]],megalodon:[[.43,0],[.48,.06],[.52,.172],[.54,.182],[.565,.155],[.63,.106],[.71,.078]],whaleShark:[[.42,0],[.47,.06],[.5,.183],[.525,.202],[.56,.179],[.63,.12],[.74,.076]],sturgeon:[[.51,0],[.55,.08],[.58,.142],[.605,.155],[.635,.14],[.7,.09],[.77,.06]]}
+ ,KNi={
+ fish:[[.3,0],[.35,.041],[.39,.047],[.44,.03]],shark:[[.27,0],[.305,.049],[.325,.06],[.355,.051],[.41,.036]],megalodon:[[.26,0],[.295,.055],[.32,.063],[.36,.05],[.43,.032]],whaleShark:[[.23,0],[.28,.055],[.3,.071],[.34,.062],[.41,.03]],sturgeon:[[.2,0],[.24,.045],[.265,.062],[.3,.054],[.36,.024]]}
+ ,zNi={
+ fish:[[0,0],[.025,.085],[.08,.064],[.17,0]],shark:[[0,0],[.025,.16],[.075,.109],[.18,0]],megalodon:[[0,0],[.027,.17],[.08,.114],[.19,0]],whaleShark:[[0,0],[.025,.18],[.085,.118],[.2,0]],sturgeon:[[0,0],[.03,.13],[.09,.086],[.2,0]]}
+ ,YNi={
+ fish:[[0,0],[.025,.085],[.08,.064],[.17,0]],shark:[[.045,0],[.065,.074],[.115,.043],[.18,0]],megalodon:[[.025,0],[.045,.115],[.105,.075],[.19,0]],whaleShark:[[.04,0],[.065,.1],[.13,.056],[.2,0]],sturgeon:[[.075,0],[.1,.051],[.14,.029],[.2,0]]}
+ ;
+ function qNi(t,i){
+ if(i<t[0][0]||i>t[t.length-1][0])return 0;
+ for(let s=1;
+ s<t.length;
+ s++){
+ const[e,n]=t[s];
+ if(i<=e){
+ const[h,r]=t[s-1],o=e-h,a=(i-h)/o,c=Qt(i=>{
+ if(0===i)return(t[1][1]-t[0][1])/(t[1][0]-t[0][0]);
+ if(i===t.length-1)return(t[i][1]-t[i-1][1])/(t[i][0]-t[i-1][0]);
+ const s=t[i-1],e=t[i],n=t[i+1],h=e[0]-s[0],r=n[0]-e[0],o=(e[1]-s[1])/h,a=(n[1]-e[1])/r;
+ return o*a<=0?0:3*(h+r)/((2*r+h)/o+(r+2*h)/a)}
+ ,"slope"),l=a*a,u=l*a;
+ return(2*u-3*l+1)*r+(u-2*l+a)*o*c(s-1)+(-2*u+3*l)*n+(u-l)*o*c(s)}
+ }
+ return t[t.length-1][1]}
+ function XNi(t,i,s,e){
+ if("shark"===t)return uNi(i,s,e);
+ if("megalodon"===t||"whaleShark"===t)return uNi(i,s,e)*("megalodon"===t?.72:.88);
+ if("sturgeon"===t){
+ const t=oNi(.3,1,i);
+ return.043*(.45+.55*e)*t*t*Math.sin(s-4.6*i)}
+ const n=oNi(.28,1,i);
+ return.048*(.4+.6*e)*n*n*Math.sin(s-4.1*i)}
+ function JNi(t,i){
+ return 2*Math.PI*Math.max(.65,Math.min(2.2,.35+t/Math.max(10,.9*i)))}
+ function QNi(t,i){
+ return Math.max(.001,qNi(VNi[t],i))}
+ function ZNi(t,i,s,e){
+ const n=QNi(t,i),h=qNi(jNi[t],i),r=qNi(KNi[t],i),o="megalodon"===t||"whaleShark"===t,a=e*(o?.075:.12)+(o?.025:.035)*Math.sin(s-2.7),c=qNi(zNi[t],i)*Math.sin(a),l=-qNi(YNi[t],i)*Math.sin(a),u=Qt(t=>Math.max(h*Math.cos(.12+t*e*.2+.055*Math.sin(.5*s)),r),"fin");
+ return{
+ left:Math.max(n,u(1),c,l),right:Math.max(n,u(-1),-c,-l)}
+ }
+ Qt(qNi,"profile"),Qt(XNi,"fishBodySway"),Qt(JNi,"fishTailRate"),Qt(QNi,"topFishBodyHalfWidth"),Qt(ZNi,"topFishSection");
+ const tLi=new Map;
+ function iLi(t){
+ const i=tLi.get(t);
+ if(i)return i;
+ const s=document.createElement("canvas");
+ s.width=384,s.height=96;
+ const e=s.getContext("2d"),n=s.width,h=s.height,r=e.createImageData(n,h);
+ for(let l=0;
+ l<n;
+ l++){
+ const i=l/(n-1),s=ZNi(t,i,0,0).left,e=QNi(t,i);
+ for(let t=0;
+ t<h;
+ t++){
+ const i=Math.abs(t/(h-1)*2-1),o=i*s/e,a=Math.min(1,(1-i)/.06),c=(o>1?.72:.87+.13*Math.cos(o*Math.PI/2))*a,u=4*(t*n+l);
+ r.data[u]=r.data[u+1]=r.data[u+2]=255,r.data[u+3]=Math.round(255*c)}
+ }
+ e.putImageData(r,0,0);
+ const o=Qt((i,s)=>[i*n,h*(.5+s/(2*ZNi(t,i,0,0).left))],"uv"),a=Qt((i,s,r,a)=>{
+ const[c,l]=o(i,s),u=ZNi(t,i,0,0).left;
+ e.fillStyle=`rgba(255,255,255,${
+ a}
+ )`,e.beginPath(),e.ellipse(c,l,r*n,r*h/(2*u),0,0,2*Math.PI),e.fill()}
+ ,"dot");
+ if(e.globalCompositeOperation="destination-out","whaleShark"===t)for(let l=0;
+ l<24;
+ l++)for(let i=-3;
+ i<=3;
+ i++){
+ const s=.23+.029*l+Math.abs(i)%2*.012;
+ a(s,i*QNi(t,s)*.23+.0015*Math.sin(2.4*l+i),.0034+9e-4*Math.sin(1.7*l+2*i)**2,.48)}
+ else if("sturgeon"===t)for(let l=0;
+ l<13;
+ l++)for(const i of[-1,0,1]){
+ const s=.24+.045*l,n=i*QNi(t,s)*.69,h=[[s-.012,n],[s,n-.004],[s+.009,n],[s,n+.004]];
+ e.beginPath(),h.forEach(([t,i],s)=>{
+ const[n,h]=o(t,i);
+ s?e.lineTo(n,h):e.moveTo(n,h)}
+ ),e.closePath(),e.fillStyle=`rgba(255,255,255,${
+ 0===i?.43:.3}
+ )`,e.fill()}
+ else for(let l=0;
+ l<130;
+ l++)a(.3+.004*l,0,.0018,.07);
+ e.globalCompositeOperation="source-over";
+ const c=as.from(s);
+ return c.source.scaleMode="linear",tLi.set(t,c),c}
+ Qt(iLi,"megafaunaTexture");
+ const sLi=class t extends Wy{
+ constructor(i,s){
+ const e=s??("fish"===i?49:129);
+ super({
+ texture:"fish"===i||"shark"===i?t.edgeTexture():iLi(i),verticesX:e,verticesY:5}
+ ),Zt(this,"columns"),Zt(this,"rows",5),this.kind=i,this.autoResize=!1,this.columns=e,this.eventMode="none"}
+ static edgeTexture(){
+ if(this.feather)return this.feather;
+ const t=document.createElement("canvas");
+ t.width=4,t.height=64;
+ const i=t.getContext("2d"),s=i.createLinearGradient(0,0,0,64);
+ return s.addColorStop(0,"rgba(255,255,255,0)"),s.addColorStop(.13,"white"),s.addColorStop(.87,"white"),s.addColorStop(1,"rgba(255,255,255,0)"),i.fillStyle=s,i.fillRect(0,0,4,64),this.feather=as.from(t)}
+ pose(t,i,s,e,n){
+ const h=this.geometry.positions;
+ for(let r=0;
+ r<this.columns;
+ r++){
+ const o=r/(this.columns-1),a=1-o,c=n(a*t),l=XNi(this.kind,a,i,s),u=(XNi(this.kind,a+.002,i,s)-XNi(this.kind,a-.002,i,s))/.004,d=c.a-Math.atan(u),f=ZNi(this.kind,o,i,e);
+ for(let i=0;
+ i<this.rows;
+ i++){
+ const s=i/(this.rows-1)*2-1,e=s*(s<0?f.left:f.right)*t,n=2*(i*this.columns+r);
+ h[n]=c.x-Math.sin(c.a)*l*t-Math.sin(d)*e,h[n+1]=c.y+Math.cos(c.a)*l*t+Math.cos(d)*e}
+ }
+ this.geometry.getBuffer("aPosition").update()}
+ swim(t,i,s,e=0){
+ this.pose(t,i,s,e,i=>{
+ const s=Math.max(0,i/t-.25);
+ return{
+ x:.5*t-i,y:e*t*s*s*.1,a:-Math.atan(e*s*.2)}
+ }
+ )}
+ destroy(t){
+ const i=this.geometry;
+ super.destroy(t),i.destroy()}
+ }
+ ;
+ Qt(sLi,"FishingTopFishRig"),Zt(sLi,"feather",null);
+ let eLi=sLi;
+ const nLi=["stream","swirl","scatter"],hLi={
+ SPEED:40,BOAT_R:46,FADE_IN:1.2,FADE_OUT:1.6,MARGIN:70,COUNT:{
+ R:[50,70],C:[70,90],O:[90,120]}
+ ,FIRST_S:[20,40],EVERY_S:[60,120],SWIRL_IN:58,SWIRL_OUT:44,SWIRL_HOLD:6.5,SWIRL_DIST:[90,150]}
+ ,rLi=2*Math.PI,oLi=Qt((t,i,s)=>Math.max(i,Math.min(s,t)),"clamp$1"),aLi=Qt((t,i,s)=>{
+ const e=oLi((s-t)/(i-t),0,1);
+ return e*e*(3-2*e)}
+ ,"smooth$1"),cLi=Qt((t,i,s)=>t+(i-t)*s,"lerp");
+ function lLi(t){
+ let i=t>>>0;
+ return()=>{
+ i=i+1831565813>>>0;
+ let t=i;
+ return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),((t^t>>>14)>>>0)/4294967296}
+ }
+ Qt(lLi,"schoolRng");
+ const uLi=Qt((t,i)=>{
+ const[s,e]=hLi.COUNT[t];
+ return Math.round(s+i()*(e-s))}
+ ,"schoolCount"),dLi=Qt((t,i)=>{
+ const[s,e]=t?hLi.FIRST_S:hLi.EVERY_S;
+ return s+i()*(e-s)}
+ ,"nextSchoolDelay");
+ function fLi(t){
+ const i=[t[0],...t,t[t.length-1]],s=[];
+ for(let r=1;
+ r<i.length-2;
+ r++)for(let t=0;
+ t<24;
+ t++){
+ const e=t/24,n=e*e,h=n*e,[o,a,c,l]=[i[r-1],i[r],i[r+1],i[r+2]],u=Qt((t,i,s,r)=>.5*(2*i+(-t+s)*e+(2*t-5*i+4*s-r)*n+(3*i-t-3*s+r)*h),"f");
+ s.push([u(o.x,a.x,c.x,l.x),u(o.y,a.y,c.y,l.y)])}
+ s.push([t[t.length-1].x,t[t.length-1].y]);
+ const e=[0];
+ for(let r=1;
+ r<s.length;
+ r++)e.push(e[r-1]+Math.hypot(s[r][0]-s[r-1][0],s[r][1]-s[r-1][1]));
+ const n=e[e.length-1],h=s.length;
+ return{
+ len:n,at(t){
+ if(t<=0){
+ const i=Math.atan2(s[1][1]-s[0][1],s[1][0]-s[0][0]);
+ return[s[0][0]+Math.cos(i)*t,s[0][1]+Math.sin(i)*t,i]}
+ if(t>=n){
+ const i=Math.atan2(s[h-1][1]-s[h-2][1],s[h-1][0]-s[h-2][0]);
+ return[s[h-1][0]+Math.cos(i)*(t-n),s[h-1][1]+Math.sin(i)*(t-n),i]}
+ let i=0,r=h-1;
+ for(;
+ r-i>1;
+ ){
+ const s=i+r>>1;
+ e[s]<t?i=s:r=s}
+ const o=(t-e[i])/Math.max(1e-9,e[r]-e[i]),a=Math.atan2(s[r][1]-s[i][1],s[r][0]-s[i][0]);
+ return[cLi(s[i][0],s[r][0],o),cLi(s[i][1],s[r][1],o),a]}
+ }
+ }
+ function pLi(t,i){
+ let s=1e18,e=0;
+ for(let n=0;
+ n<=t.len;
+ n+=2){
+ const[h,r]=t.at(n),o=(h-i.x)**2+(r-i.y)**2;
+ o<s&&(s=o,e=n)}
+ return e}
+ function gLi(t,i,s,e=hLi.SPEED){
+ const n=Array.isArray(i)?{
+ mode:"stream",pts:i}
+ :i,h=lLi(s),r=40+.7*t,o=14+.14*t,a=[],c=oLi(Math.sqrt(t/80),.8,1.2);
+ for(let d=0;
+ d<t;
+ d++){
+ const t=Math.pow(h(),.85),i=2*h()-1,s=Math.pow(Math.sin(Math.PI*oLi(.96*t+.02,0,1)),.8)*(1-.3*t);
+ a.push({
+ d:t*r,w:i*o*s,depth:h(),L:10+4*h(),ph:h()*rLi,p1:h()*rLi,p2:h()*rLi,f1:.6+.5*h(),f2:.9+.6*h(),orbR:(10+36*Math.sqrt(h()))*c,orbA:h()*rLi,orbW:1.55*(.85+.3*h()),br:h()*rLi,sc:h()*rLi,flashAt:.25*h()}
+ )}
+ if("swirl"===n.mode){
+ const t=fLi(n.inPts),i=fLi(n.outPts),c=pLi(t,n.center),l=pLi(i,n.center),u=c/hLi.SWIRL_IN,d=u+hLi.SWIRL_HOLD,f={
+ C:n.center,inPath:t,outPath:i,inC:c,outC:l,tArrive:u,tLeave:d,spin:h()<.5?1:-1}
+ ;
+ return{
+ mode:"swirl",fish:a,D:r,W:o,path:t,v:e,seed:s,swirl:f,dur:d+(i.len-l+.9*r+10)/hLi.SWIRL_OUT}
+ }
+ const l=fLi(n.pts),u={
+ mode:n.mode,fish:a,D:r,W:o,path:l,v:e,seed:s,dur:(l.len+r)/e}
+ ;
+ if("scatter"===n.mode){
+ let i=1e18,s=u.dur/2;
+ for(let a=0;
+ a<u.dur;
+ a+=.1){
+ let e=0,h=0;
+ for(let i=0;
+ i<t;
+ i++){
+ const t=mLi(u,i,a);
+ e+=t.x,h+=t.y}
+ const r=(e/t-n.boat.x)**2+(h/t-n.boat.y)**2;
+ r<i&&(i=r,s=a)}
+ const e=Math.max(1.5,s-.9),h=a.map((t,i)=>wLi(mLi(u,i,e).x,mLi(u,i,e).y,mLi(u,i,e).a,a[i].w,n.boat)),r=h.reduce((t,i)=>t+i.x,0)/t,o=h.reduce((t,i)=>t+i.y,0)/t;
+ u.scatter={
+ ts:e,dir:h.map(t=>{
+ const i=t.x-r,s=t.y-o,e=Math.hypot(i,s)||1;
+ return[i/e,s/e,e]}
+ )}
+ }
+ return u}
+ function wLi(t,i,s,e,n,h=hLi.BOAT_R){
+ const r=Math.cos(s),o=Math.sin(s),a=t-n.x,c=i-n.y,l=a*r+c*o,u=-a*o+c*r+(e>=0?1:-1)*h*Math.exp(-Math.pow(l/(1.7*h),2));
+ return{
+ x:n.x+r*l-o*u,y:n.y+o*l+r*u}
+ }
+ function mLi(t,i,s){
+ const e=t.fish[i],n=5*Math.sin(e.f1*s+e.p1),h=3.5*Math.sin(e.f2*s+e.p2),[r,o,a]=t.path.at(t.v*s-(e.d+n)),c=e.w+h;
+ return{
+ x:r-Math.sin(a)*c,y:o+Math.cos(a)*c,a}
+ }
+ function vLi(t,i,s){
+ const e=t.scatter;
+ if(!e)return{
+ x:0,y:0}
+ ;
+ const n=t.fish[i],h=s-e.ts-.4*n.flashAt;
+ if(h<=0)return{
+ x:0,y:0}
+ ;
+ const r=42+34*(1-Math.min(1,e.dir[i][2]/60))+18*Math.sin(n.sc),o=h<.6?1-Math.pow(1-h/.6,3):1-aLi(.6,3.4,h);
+ return{
+ x:e.dir[i][0]*r*o,y:e.dir[i][1]*r*o}
+ }
+ function _Li(t,i,s){
+ if(!t.scatter)return 0;
+ const e=s-t.scatter.ts-.4*t.fish[i].flashAt;
+ return e<0?0:e<.12?e/.12:Math.max(0,1-(e-.12)/.38)}
+ function MLi(t,i,s,e){
+ const n=t.fish[i];
+ if("swirl"===t.mode&&t.swirl){
+ const i=t.swirl,h=5*Math.sin(n.f1*s+n.p1),r=3.5*Math.sin(n.f2*s+n.p2),o=.8*(n.w+r),[a,c,l]=i.inPath.at(Math.min(hLi.SWIRL_IN*s-(.8*n.d+h),i.inPath.len+40));
+ let u={
+ x:a-Math.sin(l)*o,y:c+Math.cos(l)*o}
+ ;
+ const d=n.orbR*(1+.12*Math.sin(1.1*s+n.br)),f=n.orbA+i.spin*n.orbW*(46/(n.orbR+18))*s,p={
+ x:i.C.x+Math.cos(f)*d,y:i.C.y+Math.sin(f)*d*.92}
+ ,[g,w,m]=i.outPath.at(hLi.SWIRL_OUT*(s-i.tLeave)-(.9*n.d+h)+i.outC);
+ let v={
+ x:g-Math.sin(m)*o*.875,y:w+Math.cos(m)*o*.875}
+ ;
+ e&&(u=wLi(u.x,u.y,l,n.w,e),v=wLi(v.x,v.y,m,n.w,e));
+ const _=aLi(i.tArrive-.6,i.tArrive+1.4,s+.004*n.d),M=aLi(i.tLeave,i.tLeave+2.2,s-.006*n.d),b=cLi(u.x,p.x,_),y=cLi(u.y,p.y,_);
+ return{
+ x:cLi(b,v.x,M),y:cLi(y,v.y,M)}
+ }
+ const h=mLi(t,i,s),r=e?wLi(h.x,h.y,h.a,n.w,e):h,o=vLi(t,i,s);
+ return{
+ x:r.x+o.x,y:r.y+o.y}
+ }
+ function bLi(t,i,s){
+ const e=t.swirl;
+ if(!e)return[];
+ const n=lLi(20973^t.seed),h=[],r=e.tArrive+.6,o=Math.floor((e.tLeave-r)/.17);
+ for(let a=0;
+ a<o;
+ a++){
+ const t=r+.17*a+.1*n(),o=n()*rLi,c=40*Math.sqrt(n());
+ t>i&&t<=s&&h.push({
+ x:e.C.x+Math.cos(o)*c,y:e.C.y+Math.sin(o)*c*.9}
+ )}
+ return h}
+ function yLi(t,i){
+ const s=t.swirl;
+ if(!s)return[];
+ const e=aLi(s.tArrive+.6,s.tArrive+1.6,i)*(1-aLi(s.tLeave,s.tLeave+1,i));
+ if(e<=0)return[];
+ const n=lLi(39454^t.seed),h=[];
+ for(let r=0;
+ r<10;
+ r++){
+ const t=n()*rLi,r=38*Math.sqrt(n()),o=Math.max(0,Math.sin(i*(5+4*n())+n()*rLi));
+ h.push({
+ x:s.C.x+Math.cos(t)*r,y:s.C.y+Math.sin(t)*r,a:.7*o*o*e}
+ )}
+ return h}
+ function ELi(t,i){
+ return aLi(0,hLi.FADE_IN,i)*(1-aLi(t.dur-hLi.FADE_OUT,t.dur,i))}
+ function ALi(t,i,s,e){
+ const n=t.fish[i],h=MLi(t,i,s,e),r=s>=.06,o=MLi(t,i,r?s-.06:s+.06,e),a=r?Math.atan2(h.y-o.y,h.x-o.x):Math.atan2(o.y-h.y,o.x-h.x),c=n.L*(1-.15*n.depth),l=rLi*oLi(.35+36/Math.max(10,.9*c),.65,2.2);
+ return{
+ x:h.x,y:h.y,rot:a,L:c,alpha:(.36-.14*n.depth)*ELi(t,s),phase:n.ph+l*s,flash:_Li(t,i,s)}
+ }
+ function SLi(t,i,s,e){
+ const n=s>0?(t.x+t.w-i.x)/s:s<0?(t.x-i.x)/s:1/0,h=e>0?(t.y+t.h-i.y)/e:e<0?(t.y-i.y)/e:1/0;
+ return Math.max(0,Math.min(n,h))}
+ Qt(fLi,"schoolPath"),Qt(pLi,"nearestS"),Qt(gLi,"makeFishSchool"),Qt(wLi,"flowAround"),Qt(mLi,"streamAt"),Qt(vLi,"scatterOffset"),Qt(_Li,"schoolFlash"),Qt(MLi,"schoolFishAt"),Qt(bLi,"swirlRipples"),Qt(yLi,"swirlGlints"),Qt(ELi,"schoolAlpha"),Qt(ALi,"schoolFishPose"),Qt(SLi,"toEdge");
+ const TLi=Qt(t=>(i,s)=>i>=t.x&&i<=t.x+t.w&&s>=t.y&&s<=t.y+t.h,"inViewOf");
+ function CLi(t,i,s,e){
+ const n=TLi(i);
+ for(let h=0;
+ h<=t.len;
+ h+=10){
+ const[i,r,o]=t.at(h),a=-Math.sin(o)*e,c=Math.cos(o)*e;
+ for(const[t,e]of[[i,r],[i+a,r+c],[i-a,r-c]])if(n(t,e)&&!s(t,e))return!1}
+ return!0}
+ function OLi(t,i,s,e,n=!1){
+ for(let h=0;
+ h<16;
+ h++){
+ const h=e()*rLi,r=Math.cos(h),o=Math.sin(h),a=-o,c=r,l=SLi(t,i,-r,-o)+hLi.MARGIN,u=SLi(t,i,r,o)+hLi.MARGIN,d=n?16*(2*e()-1):e()<.55?22*(2*e()-1):(e()<.5?-1:1)*(60+60*e()),f={
+ x:i.x-r*l,y:i.y-o*l}
+ ,p={
+ x:i.x+r*u,y:i.y+o*u}
+ ,g={
+ x:i.x+a*d,y:i.y+c*d}
+ ,w=45*(2*e()-1),m=45*(2*e()-1),v=[f,{
+ x:cLi(f.x,g.x,.5)+a*w,y:cLi(f.y,g.y,.5)+c*w}
+ ,g,{
+ x:cLi(g.x,p.x,.5)+a*m,y:cLi(g.y,p.y,.5)+c*m}
+ ,p];
+ if(CLi(fLi(v),t,s,24))return v}
+ return null}
+ function ILi(t,i,s,e,n=s){
+ const h=TLi({
+ x:t.x+60,y:t.y+60,w:t.w-120,h:t.h-120}
+ );
+ for(let r=0;
+ r<40;
+ r++){
+ const r=e()*rLi,o=hLi.SWIRL_DIST[0]+e()*(hLi.SWIRL_DIST[1]-hLi.SWIRL_DIST[0]),a={
+ x:i.x+Math.cos(r)*o,y:i.y+Math.sin(r)*o}
+ ;
+ if(!h(a.x,a.y)||!n(a.x,a.y))continue;
+ let c=!0;
+ for(let t=0;
+ t<12&&c;
+ t++)c=n(a.x+60*Math.cos(t*rLi/12),a.y+60*Math.sin(t*rLi/12));
+ if(!c)continue;
+ const l=e()*rLi,u=Math.cos(l),d=Math.sin(l),f=l+(e()<.5?-1:1)*(1.05+.95*e()),p=Math.cos(f),g=Math.sin(f),w={
+ x:a.x-u*(SLi(t,a,-u,-d)+hLi.MARGIN),y:a.y-d*(SLi(t,a,-u,-d)+hLi.MARGIN)}
+ ,m={
+ x:a.x+p*(SLi(t,a,p,g)+hLi.MARGIN),y:a.y+g*(SLi(t,a,p,g)+hLi.MARGIN)}
+ ,v=35*(2*e()-1),_=35*(2*e()-1),M={
+ x:cLi(w.x,a.x,.5)-d*v,y:cLi(w.y,a.y,.5)+u*v}
+ ,b={
+ x:cLi(a.x,m.x,.5)-g*_,y:cLi(a.y,m.y,.5)+p*_}
+ ,y=[w,M,a,{
+ x:a.x+40*u,y:a.y+40*d}
+ ],E=[{
+ x:a.x-72*p,y:a.y-72*g}
+ ,a,b,m];
+ if(CLi(fLi(y),t,s,20)&&CLi(fLi(E),t,s,20))return{
+ center:a,inPts:y,outPts:E}
+ }
+ return null}
+ Qt(CLi,"pathInWater"),Qt(OLi,"planSchoolPath"),Qt(ILi,"planSwirl");
+ const kLi=12,RLi=665137,xLi=Qt((t,i,s)=>{
+ const e=Qt(e=>Math.round((t>>e&255)+((i>>e&255)-(t>>e&255))*s),"ch");
+ return e(16)<<16|e(8)<<8|e(0)}
+ ,"mix"),PLi={
+ autoGenerateMipmaps:!0,magFilter:"linear",minFilter:"linear",mipmapFilter:"nearest"}
+ ;
+ let NLi=null;
+ function LLi(){
+ if(NLi&&NLi.every(t=>!t.destroyed))return NLi;
+ NLi=[];
+ for(let t=0;
+ t<kLi;
+ t++){
+ const i=new Ve,s=(new ip).rect(0,0,48,24).fill({
+ color:0,alpha:.001}
+ ),e=new eLi("fish",25);
+ e.tint=16777215,e.swim(32,t/kLi*Math.PI*2,.75,0),e.position.set(24,12),i.addChild(s,e),NLi.push(ES.app.renderer.generateTexture({
+ target:i,resolution:2,antialias:!0,textureSourceOptions:PLi}
+ )),i.destroy({
+ children:!0}
+ )}
+ return NLi}
+ Qt(LLi,"schoolFrames");
+ const DLi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"school",null),Zt(this,"t",0),Zt(this,"sprites",[]),Zt(this,"glints",new ip),this.eventMode="none",this.glints.eventMode="none",this.addChild(this.glints)}
+ get mode(){
+ var t;
+ return(null==(t=this.school)?void 0:t.mode)??null}
+ get active(){
+ return!!this.school}
+ start(t,i,s){
+ this.school=gLi(t,i,s),this.t=0;
+ const e=LLi();
+ for(;
+ this.sprites.length<t;
+ ){
+ const t=new Ye(e[0]);
+ t.anchor.set(.5),t.tint=RLi,t.eventMode="none",this.addChildAt(t,this.children.length-1),this.sprites.push(t)}
+ for(const n of this.sprites)n.visible=!1}
+ clear(){
+ this.school=null;
+ for(const t of this.sprites)t.visible=!1;
+ this.glints.clear()}
+ update(i,s,e,n){
+ const h=this.school;
+ if(!h)return;
+ const r=this.t;
+ if(this.t+=i*t.speed,this.t>=h.dur)return void this.clear();
+ if(n)for(const t of bLi(h,r,this.t))n(t.x,t.y);
+ this.glints.clear();
+ for(const t of yLi(h,this.t))t.a>.01&&this.glints.circle(t.x,t.y,1.4).fill({
+ color:16777215,alpha:t.a}
+ );
+ const o=LLi();
+ for(let t=0;
+ t<h.fish.length;
+ t++){
+ const i=ALi(h,t,this.t,s),n=this.sprites[t],r=i.alpha*(i.alpha>.003?e(i.x,i.y):0);
+ if(n.visible=r>.003,!n.visible)continue;
+ const a=(Math.floor(i.phase/(2*Math.PI)*kLi)%kLi+kLi)%kLi;
+ n.texture=o[a],n.position.set(i.x,i.y),n.rotation=i.rot,n.scale.set(i.L/32),n.alpha=Math.min(1,r*(1+1.3*i.flash)),n.tint=i.flash>0?xLi(RLi,14283512,i.flash):RLi}
+ }
+ }
+ ;
+ Qt(DLi,"FishingFishSchool"),Zt(DLi,"speed",1);
+ let GLi=DLi;
+ const BLi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"flippers",[]),this.eventMode="none";
+ for(const i of[!0,!1])for(const t of[-1,1]){
+ const s=new ip;
+ i?s.moveTo(.025,0).bezierCurveTo(-.01,.065,-.065,.13,-.145,.15).bezierCurveTo(-.17,.08,-.06,-.01,0,-.03).closePath().fill(16777215):s.moveTo(.04,0).bezierCurveTo(.045,.13,-.075,.31,-.2,.37).bezierCurveTo(-.225,.375,-.2,.29,-.16,.22).bezierCurveTo(-.105,.11,-.085,.035,-.055,-.025).closePath().fill(16777215),s.position.set(i?-.25:.19,t*(i?.145:.15)),s.scale.y=t,this.addChild(s),this.flippers.push({
+ shape:s,side:t,rear:i}
+ )}
+ const t=new ip;
+ t.moveTo(-.31,-.035).lineTo(-.47,0).lineTo(-.31,.035).closePath().fill(16777215),t.moveTo(.24,-.06).bezierCurveTo(.33,-.055,.37,-.082,.43,-.075).bezierCurveTo(.51,-.063,.525,.06,.43,.075).bezierCurveTo(.37,.082,.33,.055,.24,.06).closePath().fill(16777215),t.moveTo(.33,0).bezierCurveTo(.34,.13,.19,.235,-.02,.233).bezierCurveTo(-.23,.23,-.38,.11,-.37,0).bezierCurveTo(-.38,-.11,-.23,-.23,-.02,-.233).bezierCurveTo(.19,-.235,.34,-.13,.33,0).closePath().fill(16777215),this.addChild(t)}
+ pose(t,i,s,e,n){
+ const h=n(.5*t);
+ this.position.set(h.x,h.y),this.rotation=h.a,this.scale.set(t);
+ for(const{
+ shape:r,side:o,rear:a}
+ of this.flippers){
+ const t=wNi(i,s,e,o,a);
+ r.rotation=t.sweep,r.scale.y=o*t.span}
+ }
+ }
+ ;
+ Qt(BLi,"FishingTurtleRig");
+ let ULi=BLi;
+ const FLi=2*Math.PI,$Li=Qt((t,i,s)=>Math.max(i,Math.min(s,t)),"clamp");
+ function HLi(t,i,s){
+ const e=$Li((s-t)/(i-t),0,1);
+ return e*e*(3-2*e)}
+ function WLi(t,i){
+ const s=1-i;
+ return{
+ x:s**3*t[0].x+3*s*s*i*t[1].x+3*s*i*i*t[2].x+i**3*t[3].x,y:s**3*t[0].y+3*s*s*i*t[1].y+3*s*i*i*t[2].y+i**3*t[3].y}
+ }
+ function VLi(t){
+ const i=$Li(t.age*t.speed,0,t.length),s=t.distances;
+ let e=1;
+ for(;
+ e<s.length-1&&s[e]<i;
+ )e++;
+ const n=(e-1+(i-s[e-1])/Math.max(.001,s[e]-s[e-1]))/(s.length-1),h=t.points,r=1-n,o=WLi(h,n),a=3*(r*r*(h[1].x-h[0].x)+2*r*n*(h[2].x-h[1].x)+n*n*(h[3].x-h[2].x)),c=3*(r*r*(h[1].y-h[0].y)+2*r*n*(h[2].y-h[1].y)+n*n*(h[3].y-h[2].y)),l=6*(r*(h[2].x-2*h[1].x+h[0].x)+n*(h[3].x-2*h[2].x+h[1].x)),u=(a*(6*(r*(h[2].y-2*h[1].y+h[0].y)+n*(h[3].y-2*h[2].y+h[1].y)))-c*l)/Math.max(1,Math.hypot(a,c)**3);
+ return{
+ ...o,heading:Math.atan2(c,a),bank:$Li(u*t.speed*3.5,-.55,.55),height:t.height+3*Math.sin(.38*t.age+t.seed),alpha:HLi(0,2,t.age)*(1-HLi(t.life-2,t.life,t.age))}
+ }
+ function jLi(t,i,s,e,n){
+ const h="gull"===t?2.7:1.6,r=(i+2*s)%("gull"===t?10.5:18),o=HLi(0,.45,r)*(1-HLi(h-.5,h,r)),a=i*FLi*("gull"===t?1.55:1.8)+s,c=.12+.7*Math.sin(a)*o+n*e,l=.18+.95*Math.sin(a-.65)*o+n*e;
+ return{
+ inner:Math.cos($Li(c,-1.05,1.05)),outer:Math.cos($Li(l,-1.2,1.2)),sweep:o*Math.sin(a-.4)*.045,shade:$Li(.92+n*e*.14-.07*o*Math.sin(a),.65,1)}
+ }
+ Qt(HLi,"smooth"),Qt(WLi,"curve"),Qt(VLi,"sampleBirdFlight"),Qt(jLi,"birdWingPose");
+ const KLi=class{
+ constructor(t=Math.random){
+ Zt(this,"birds",[]),Zt(this,"nextIn",5),Zt(this,"id",0),Zt(this,"zone","R"),this.random=t}
+ reset(t){
+ this.zone=t,this.birds.length=0,this.nextIn=("R"===t?7:4)+5*this.random()}
+ update(t,i,s,e){
+ for(let _=this.birds.length-1;
+ _>=0;
+ _--)this.birds[_].age+=t,this.birds[_].age>=this.birds[_].life&&this.birds.splice(_,1);
+ if(2===s)return void(this.nextIn=Math.max(this.nextIn-t,6));
+ if(this.nextIn-=t,this.nextIn>0||this.birds.length)return;
+ const n=this.random,h="R"===this.zone?"hawk":"gull",r="hawk"===h?1:"C"===this.zone&&n()<.25?3:n()<.65?2:1,o=n()*FLi,a=Math.cos(o),c=Math.sin(o),l=-c,u=a,d=.5*Math.hypot(i.width,i.height)+160,f=d*("hawk"===h?.85:.18+.16*n())*(n()<.5?-1:1),p="hawk"===h?72:32+18*n(),g="hawk"===h&&e?e:{
+ x:i.x+.5*i.width,y:i.y+.5*i.height}
+ ,w=g.x-l*f*.65,m=g.y+p-u*f*.65,v=("hawk"===h?29:34)+7*n();
+ for(let _=0;
+ _<r;
+ _++){
+ const t=-a*_*32+l*_*26,i=-c*_*32+u*_*26,s=Qt((s,e)=>({
+ x:w+a*s+l*e+t,y:m+c*s+u*e+i}
+ ),"at"),e=[s(-d,0),s(.35*-d,f),s(.35*d,f),s(d,0)],r=[0];
+ let o=e[0],g=0;
+ for(let n=1;
+ n<=64;
+ n++){
+ const t=WLi(e,n/64);
+ g+=Math.hypot(t.x-o.x,t.y-o.y),r.push(g),o=t}
+ const M=v*(1-.018*_);
+ this.birds.push({
+ id:++this.id,kind:h,age:0,life:g/M,speed:M,span:"hawk"===h?35+5*n():25+6*n(),height:p+5*_,seed:n()*FLi,points:e,distances:r,length:g}
+ )}
+ this.nextIn=Math.max(...this.birds.map(t=>t.life))+("hawk"===h?27:"O"===this.zone?22:15)+15*n()}
+ }
+ ;
+ Qt(KLi,"BirdFlightModel");
+ let zLi=KLi;
+ const YLi=class extends Ve{
+ constructor(t,i=!1){
+ super(),Zt(this,"wings",[new ip,new ip]),Zt(this,"tail",new ip),this.kind=t,this.shadow=i,this.eventMode="none";
+ const s="gull"===t,e=1324356,n=new ip,h=i?e:s?15265263:6640452;
+ this.tail.moveTo(-8,-3.8).lineTo(s?-24:-29,-7).quadraticCurveTo(s?-27:-31,0,s?-24:-29,7).lineTo(-8,3.8).closePath().fill(h),this.tail.pivot.set(-8,0),this.tail.position.set(-8,0),n.ellipse(-1,0,15.5,4.5).fill(i?e:s?16118504:7757899),n.ellipse(14,0,6.5,3.5).fill(i?e:s?16776175:4799539),n.moveTo(19.2,-1.4).lineTo(24,0).lineTo(19.2,1.4).closePath().fill(i?e:s?14200162:9205586),i||n.ellipse(16.5,-2.1,.6,.6).fill(3620668),this.addChild(this.tail,...this.wings,n)}
+ pose(t,i,s,e){
+ this.scale.set(t/100),this.tail.rotation=.12*-e+.018*Math.sin(.65*i+s);
+ for(let n=0;
+ n<2;
+ n++){
+ const t=0===n?-1:1,h=jLi(this.kind,i,s,e,t),r=this.wings[n].clear(),o="gull"===this.kind,a=23*h.inner,c=a+27*h.outer,l=2.5+100*h.sweep,u=(o?-15:-11)+140*h.sweep,d=Qt(i=>i*t,"y");
+ r.moveTo(8.5,d(2.5)).quadraticCurveTo(9.5,d(.65*a),l,d(a)).quadraticCurveTo(u+7,d(c-7),u,d(c)).quadraticCurveTo(u+1.2,d(c-11),o?-7.5:-10.5,d(.9*a)).quadraticCurveTo(-8,d(6),-10.5,d(2.5)).closePath().fill(this.shadow?1324356:o?14279653:6115396),this.shadow||(r.moveTo(u,d(c)).quadraticCurveTo(u+1.5,d(c-6.5),u+3.1,d(c-10)).lineTo(u+5.5,d(c-7.3)).quadraticCurveTo(u+2.9,d(c-2.7),u,d(c)).closePath().fill(o?5069922:3421745),r.moveTo(3.5,d(7.5)).quadraticCurveTo(1.8,d(a),u+3.4,d(c-7.5)).stroke({
+ color:o?16119275:10191972,alpha:.5,width:.9}
+ )),r.alpha=this.shadow?1:h.shade}
+ }
+ }
+ ;
+ Qt(YLi,"FishingBirdRig");
+ let qLi=YLi;
+ const XLi=class{
+ constructor(){
+ Zt(this,"sky",new Ve),Zt(this,"shadows",new Ve),Zt(this,"model",new zLi),Zt(this,"views",new Map),Zt(this,"blur",new mf({
+ strength:1.25,quality:2}
+ )),Zt(this,"daylight",1),this.sky.eventMode=this.shadows.eventMode="none",this.shadows.filters=[this.blur],this.shadows.on("destroyed",()=>this.blur.destroy())}
+ reset(t){
+ this.model.reset(t);
+ for(const i of this.views.values())i.bird.destroy({
+ children:!0}
+ ),i.shadow.destroy({
+ children:!0}
+ );
+ this.views.clear()}
+ update(t,i,s,e,n){
+ let h;
+ if("R"===s&&!this.model.birds.length){
+ let t=1/0;
+ for(const s of[.25,.5,.75])for(const e of[.3,.5,.7]){
+ const r=i.x+i.width*s,o=i.y+i.height*e,a=n(r,o);
+ a>0&&Math.abs(a-55)<t&&(t=Math.abs(a-55),h={
+ x:r,y:o}
+ )}
+ }
+ this.model.update(t,i,e,h);
+ const r=new Set(this.model.birds.map(t=>t.id));
+ for(const[o,a]of this.views)r.has(o)||(a.bird.destroy({
+ children:!0}
+ ),a.shadow.destroy({
+ children:!0}
+ ),this.views.delete(o));
+ this.daylight+=((2===e?0:1)-this.daylight)*(1-Math.exp(1.3*-t));
+ for(const o of this.model.birds){
+ let t=this.views.get(o.id);
+ t||(t={
+ bird:new qLi(o.kind),shadow:new qLi(o.kind,!0)}
+ ,this.views.set(o.id,t),this.sky.addChild(t.bird),this.shadows.addChild(t.shadow));
+ const s=VLi(o);
+ t.bird.pose(o.span,o.age,o.seed,s.bank),t.shadow.pose(.86*o.span,o.age,o.seed,s.bank),t.bird.position.set(s.x,s.y-s.height),t.bird.rotation=t.shadow.rotation=s.heading,t.shadow.position.set(s.x+.28*s.height,s.y+.18*s.height),t.bird.alpha=s.alpha*this.daylight*("gull"===o.kind?.86:.8),t.shadow.alpha=s.alpha*this.daylight*("gull"===o.kind?.09:.065)*(3===e?.28:1===e?.65:1);
+ const n=s.x>i.x-160&&s.x<i.x+i.width+160&&s.y>i.y-160&&s.y<i.y+i.height+160;
+ t.bird.visible=t.shadow.visible=n}
+ this.shadows.visible=this.model.birds.length>0&&this.daylight>.01}
+ }
+ ;
+ Qt(XLi,"FishingBirds");
+ let JLi=XLi;
+ const QLi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"pool",[]),Zt(this,"used",0),Zt(this,"moon",0),Zt(this,"lantern",0),Zt(this,"initialized",!1),this.eventMode="none"}
+ static softLight(){
+ if(!this.texture){
+ const t=document.createElement("canvas");
+ t.width=t.height=64;
+ const i=t.getContext("2d"),s=i.createRadialGradient(32,32,0,32,32,32);
+ s.addColorStop(0,"rgba(255,255,255,1)"),s.addColorStop(.28,"rgba(255,255,255,.55)"),s.addColorStop(.65,"rgba(255,255,255,.12)"),s.addColorStop(1,"rgba(255,255,255,0)"),i.fillStyle=s,i.fillRect(0,0,64,64),this.texture=as.from(t),this.texture.source.scaleMode="linear"}
+ return this.texture}
+ facet(i,s,e,n,h,r,o){
+ if(o<.003||this.used>=400)return;
+ let a=this.pool[this.used++];
+ a||(a=new Ye(t.softLight()),a.anchor.set(.5),a.blendMode="add",a.eventMode="none",this.pool.push(a),this.addChild(a)),a.visible=!0,a.position.set(i,s),a.width=e,a.height=n,a.rotation=h,a.tint=r,a.alpha=o}
+ update(t,i,s,e,n,h,r){
+ const o=2===n?1:0,a=[0,.32,1,.16][n]??0,c=this.initialized?1-Math.exp(.8*-t):1;
+ this.initialized=!0,this.moon+=(o-this.moon)*c,this.lantern+=(a-this.lantern)*c,this.used=0;
+ const l=Qt((t,i,s)=>r(t,i)&&r(t-.5*s,i)&&r(t+.5*s,i),"wet");
+ if(this.moon>.01){
+ const t=64,n=46;
+ for(let h=Math.floor((s.y-48)/n);
+ h<=Math.ceil((s.y+s.height+48)/n);
+ h++)for(let r=Math.floor((s.x-64)/t);
+ r<=Math.ceil((s.x+s.width+64)/t);
+ r++){
+ let s=Math.imul(r,374761393)^Math.imul(h,668265263);
+ s=Math.imul(s^s>>>13,1274126177);
+ const o=(s>>>0)/4294967296,a=o*Math.PI*2,c=(r+.5)*t+25*Math.sin(7*a),u=(h+.5)*n+17*Math.cos(9*a),d=NNi(c,u,i,e),f=Math.pow(Math.max(0,Math.sin(i*(.43+.14*o)+a+.28*d.height)),3),p=(8+20*o)*(.8+.2*f),g=c+d.driftX,w=u-.9*d.height;
+ if(f<.025||!l(g,w,p))continue;
+ const m=.65+.35*Math.sin(.003*c+.0015*u)**2;
+ this.facet(g,w,p,1.1+.7*o,2*d.slopeX-.13,11914463,f*m*this.moon*.32)}
+ }
+ if(this.lantern>.01)for(const u of h.slice(0,24))if(!(u.x<s.x-80||u.x>s.x+s.width+80||u.y<s.y-80||u.y>s.y+s.height+80))for(let t=0;
+ t<11;
+ t++){
+ const s=1.7*u.seed+2.39996*t,n=7+4.1*t,h=u.x+Math.sin(s)*(2+.72*t),r=u.y+n,o=NNi(h,r,i,e),a=.58+.42*Math.sin(.8*i+s+.6*o.height),c=(6+2*Math.sin(3*s)+.52*t)*(.8+.35*a),d=h+1.4*o.driftX+75*o.slopeX,f=r-o.height;
+ l(d,f,c)&&this.facet(d,f,c,1.5+.9*a,2*o.slopeX-.13,u.color,this.lantern*u.strength*(1-t/12)**1.5*(.18+.35*a))}
+ for(let u=this.used;
+ u<this.pool.length;
+ u++)this.pool[u].visible=!1;
+ this.visible=this.used>0}
+ }
+ ;
+ Qt(QLi,"FishingWaterLight"),Zt(QLi,"texture");
+ let ZLi=QLi;
+ function tDi(t,i,s,e){
+ const n=new Set;
+ return t.filter(t=>!(n.has(t.id)||!Number.isFinite(t.x)||!Number.isFinite(t.y))&&(n.add(t.id),t.x>=s.x&&t.x<=s.x+s.width&&t.y>=s.y&&t.y<=s.y+s.height)).map(t=>({
+ boat:t,score:Math.max(0,Math.hypot(t.x-i.x,t.y-i.y)-(e.has(t.id)?45:0))}
+ )).sort((t,i)=>t.score-i.score||t.boat.id.localeCompare(i.boat.id)).slice(0,30).map(t=>t.boat)}
+ Qt(tDi,"nearbyBoats");
+ const iDi=165,sDi="육지와 너무 가까워요 · 조금 더 넓은 물로 가요",eDi=[1,1.1,1.25,1.5],nDi=[1400,700],hDi=3e3,rDi=nDi[0]+250,oDi=.36,aDi=[60,76,92,108,124,140,158],cDi=[6,16,26],lDi=.135,uDi=.105,dDi=[.62,.55,.55,.55],fDi=new Map;
+ function pDi(t,i){
+ let s=fDi.get(t);
+ if(!s){
+ const e=t.frame;
+ s=new as({
+ source:t.source,frame:new Ui(e.x,e.y,e.width,Math.round(e.height*(dDi[i]??.55)))}
+ ),fDi.set(t,s)}
+ return s}
+ Qt(pDi,"floatTop");
+ const gDi=[0,.5,1,.65],wDi=[16765562,16751178,13172586,8377599,16748488,12164351,6287568,15922943],mDi=Qt(t=>{
+ let i=2166136261;
+ for(let s=0;
+ s<t.length;
+ s++)i^=t.charCodeAt(s),i=Math.imul(i,16777619);
+ return i>>>0}
+ ,"strHash"),vDi=Qt(t=>wDi[mDi(t)%wDi.length],"lanternColor"),_Di=.29,MDi=Qt(t=>Math.max(0,["m","b","e"].indexOf(t.slice(-1))),"guestIndex"),bDi=Math.round(37.5)+16,yDi=1.7*_Di,EDi={
+ "인간":15909198,"엘프":7327615,"언데드":10849535,"오크":3975360}
+ ;
+ function ADi(t,i,s,e,n){
+ const h=NDi[e],r=LDi[n],o=new Float32Array(t*i);
+ for(let f=0;
+ f<i;
+ f++)for(let i=0;
+ i<t;
+ i++)o[f*t+i]=s(i,f)?0:1e9;
+ const a=Qt((s,e,n,h,r)=>{
+ const a=s+n,c=e+h;
+ if(a<0||c<0||a>=i||c>=t)return;
+ const l=s*t+e,u=o[a*t+c]+r;
+ u<o[l]&&(o[l]=u)}
+ ,"relax");
+ for(let f=0;
+ f<i;
+ f++)for(let i=0;
+ i<t;
+ i++)a(f,i,0,-1,1),a(f,i,-1,0,1),a(f,i,-1,-1,1.414),a(f,i,-1,1,1.414);
+ for(let f=i-1;
+ f>=0;
+ f--)for(let i=t-1;
+ i>=0;
+ i--)a(f,i,0,1,1),a(f,i,1,0,1),a(f,i,1,1,1.414),a(f,i,1,-1,1.414);
+ const c=Qt(t=>{
+ let i=h[r[0][1]];
+ for(let s=1;
+ s<r.length;
+ s++){
+ const[e]=r[s-1],[n,o,a]=r[s],c=i,l=h[o].map((t,i)=>c[i]+(t-c[i])*a);
+ if(t<=e)break;
+ const u=Math.min(1,(t-e)/(n-e)),d=u*u*(3-2*u);
+ if(i=c.map((t,i)=>t+(l[i]-t)*d),t<n)break}
+ return i}
+ ,"colorAt"),l=document.createElement("canvas");
+ l.width=t,l.height=i;
+ const u=l.getContext("2d"),d=u.createImageData(t,i);
+ for(let f=0;
+ f<i;
+ f++)for(let i=0;
+ i<t;
+ i++){
+ const s=c(Math.max(0,o[f*t+i]-.5)),e=4*(f*t+i);
+ d.data[e]=s[0],d.data[e+1]=s[1],d.data[e+2]=s[2],d.data[e+3]=255}
+ return u.putImageData(d,0,0),{
+ canvas:l,dist:o}
+ }
+ Qt(ADi,"waterCanvas");
+ const SDi={
+ whale:{
+ L:520,rope:!0,amp:.006,tailPow:3,wave:.8,freq:.2,speed:30,turn:.065,rMin:2.2,wn:.45,alpha:.38,need:230}
+ ,manta:{
+ L:280,rope:!1,amp:0,tailPow:1,wave:0,freq:.23,speed:32,turn:.16,rMin:1.5,wn:.6,alpha:.36,need:180}
+ ,shark:{
+ L:230,rope:!0,amp:.04,tailPow:2.4,wave:2.8,freq:.65,speed:42,turn:.24,rMin:1.35,wn:.8,alpha:.38,need:120}
+ ,catfish:{
+ L:170,rope:!0,amp:.04,tailPow:2,wave:1.8,freq:.5,speed:20,turn:.25,rMin:.55,wn:.7,alpha:.42,need:90}
+ ,eel:{
+ L:170,rope:!0,amp:.05,tailPow:1,wave:3.6,freq:.45,speed:22,turn:.35,rMin:.4,wn:.9,alpha:.38,need:60}
+ ,megalodon:{
+ L:900,rope:!0,amp:.03,tailPow:3,wave:3.2,freq:.08,speed:31,turn:.035,rMin:2.8,wn:.32,alpha:.36,need:300}
+ ,whaleShark:{
+ L:440,rope:!0,amp:.035,tailPow:3,wave:3.2,freq:.12,speed:25,turn:.075,rMin:2,wn:.45,alpha:.43,need:190}
+ ,turtle:{
+ L:112,rope:!1,amp:0,tailPow:1,wave:0,freq:.12,speed:15,turn:.12,rMin:1.7,wn:.55,alpha:.44,need:85}
+ ,sturgeon:{
+ L:245,rope:!0,amp:.04,tailPow:2.4,wave:4.6,freq:.18,speed:21,turn:.16,rMin:1.3,wn:.65,alpha:.43,need:100}
+ }
+ ,TDi={
+ O:{
+ kinds:[["whale",.23],["manta",.2],["shark",.17],["whaleShark",.22],["turtle",.1],["megalodon",.08]],first:[12,25],every:[40,80],under:.3,scale:1}
+ ,C:{
+ kinds:[["shark",.28],["manta",.24],["turtle",.4],["whaleShark",.08]],first:[45,70],every:[90,170],under:.25,scale:.8}
+ ,R:{
+ kinds:[["catfish",.44],["eel",.28],["sturgeon",.28]],first:[100,160],every:[200,360],under:.2,scale:1}
+ }
+ ,CDi=.95,ODi=[.95,.84,.73,.62,.51,.4,.29,.18,.12],IDi=[1,.85,0,.6],kDi=[16774358,16761486,12900607,16769772],RDi=[{
+ color:16777215,alpha:.2}
+ ,{
+ color:16756848,alpha:.22}
+ ,{
+ color:9416959,alpha:.08}
+ ,{
+ color:15791359,alpha:.14}
+ ],xDi=[{
+ color:16777215,alpha:0}
+ ,{
+ color:16747082,alpha:.16}
+ ,{
+ color:726848,alpha:.52}
+ ,{
+ color:14674154,alpha:.12}
+ ],PDi=[0,0,0,.55],NDi={
+ "인간":{
+ shallow:[126,208,214],mid:[58,162,198],deep:[26,104,162],abyss:[14,44,104],riverShallow:[126,208,214],riverDeep:[62,142,168],land:[128,168,92]}
+ ,"엘프":{
+ shallow:[128,222,196],mid:[52,168,172],deep:[22,104,136],abyss:[12,46,92],riverShallow:[128,222,196],riverDeep:[58,138,136],land:[84,158,88]}
+ ,"언데드":{
+ shallow:[120,150,144],mid:[74,110,118],deep:[36,62,82],abyss:[16,26,50],riverShallow:[120,150,144],riverDeep:[64,88,92],land:[92,88,104]}
+ ,"오크":{
+ shallow:[152,208,228],mid:[84,162,206],deep:[32,96,154],abyss:[14,42,94],riverShallow:[152,208,228],riverDeep:[70,126,160],land:[222,232,238]}
+ }
+ ,LDi={
+ R:[[0,"riverShallow",1],[2.5,"riverDeep",1]],C:[[0,"shallow",1],[2,"mid",1],[6,"deep",1],[16,"abyss",.45]],O:[[0,"shallow",1],[2,"mid",1],[6,"deep",1],[14,"abyss",.6],[26,"abyss",1]]}
+ ,DDi=.72,GDi=[18e3,55e3],BDi=Qt((t,i)=>{
+ let s=t-i;
+ for(;
+ s>Math.PI;
+ )s-=2*Math.PI;
+ for(;
+ s<-Math.PI;
+ )s+=2*Math.PI;
+ return s}
+ ,"angDiff"),UDi=class t extends Ve{
+ constructor(i,s=t.DEFAULT_H){
+ super(),Zt(this,"world",new Ve),Zt(this,"mapSprite",new Ye(as.EMPTY)),Zt(this,"chunkLayer",new Ve),Zt(this,"chunks",new Map),Zt(this,"shadowLayer",new Ve),Zt(this,"underLayer",new Ve),Zt(this,"giantLayer",new Ve),Zt(this,"giants",[]),Zt(this,"school",new GLi),Zt(this,"nextSchoolAt",0),Zt(this,"nextGiantAt",0),Zt(this,"giantSeen",!1),Zt(this,"landDist",null),Zt(this,"othersLayer",new Ve),Zt(this,"otherNames",new Ve),Zt(this,"others",new Map),Zt(this,"otherCandidates",[]),Zt(this,"otherPickAt",0),Zt(this,"boatWater",new WNi),Zt(this,"hullPose",GNi(0,0,0,0,"R",0,0)),Zt(this,"bobberWave",0),Zt(this,"floatLandedAt",-1/0),Zt(this,"boatShadow",new ip),Zt(this,"boat",new Ye(as.EMPTY)),Zt(this,"angler",new Ye(as.EMPTY)),Zt(this,"myLookRaw"),Zt(this,"myTop",null),Zt(this,"anglerRot",0),Zt(this,"lamp",new Ye(as.EMPTY)),Zt(this,"floatSp",new Ye(as.EMPTY)),Zt(this,"bobberLv",0),Zt(this,"rodTip",{
+ x:0,y:0}
+ ),Zt(this,"lampAt",{
+ x:0,y:0}
+ ),Zt(this,"lightLayer",new Ve),Zt(this,"lightClip",new ip),Zt(this,"lightPool",[]),Zt(this,"lightUsed",0),Zt(this,"waterLight",new ZLi),Zt(this,"myColor",vDi(EG.userId||"me")),Zt(this,"line",new ip),Zt(this,"float",new ip),Zt(this,"fx",new ip),Zt(this,"fxAdd",new ip),Zt(this,"flyLayer",new Ve),Zt(this,"hitLayer",new Ve),Zt(this,"worldTop",new Ve),Zt(this,"harpoonFxs",[]),Zt(this,"aimMark",null),Zt(this,"shakeAmp",0),Zt(this,"shakeUntil",0),Zt(this,"birds",new JLi),Zt(this,"birdClip",new ip),Zt(this,"labels",new Ve),Zt(this,"tideTint",new ip),Zt(this,"clip",new ip),Zt(this,"frame",new ip),Zt(this,"hint",new Ve),Zt(this,"hud",new Ve),Zt(this,"key",""),Zt(this,"info",null),Zt(this,"landBits",null),Zt(this,"race","인간"),Zt(this,"zone","R"),Zt(this,"point",0),Zt(this,"boatLv",0),Zt(this,"bx",0),Zt(this,"by",0),Zt(this,"heading",-Math.PI/2),Zt(this,"speed",0),Zt(this,"target",null),Zt(this,"route",[]),Zt(this,"nav",null),Zt(this,"stuckFor",0),Zt(this,"replanned",!1),Zt(this,"fxp",{
+ x:0,y:0}
+ ),Zt(this,"floatLift",0),Zt(this,"floatVisible",!1),Zt(this,"camX",0),Zt(this,"camY",0),Zt(this,"bite",!1),Zt(this,"biteIn",1/0),Zt(this,"biteInAt",0),Zt(this,"tide",0),Zt(this,"shadows",[]),Zt(this,"ripples",[]),Zt(this,"particles",[]),Zt(this,"foam",[]),Zt(this,"crowns",[]),Zt(this,"foamLayer",new Ve),Zt(this,"foamPool",[]),Zt(this,"foamUsed",0),Zt(this,"glints",new Ve),Zt(this,"glintList",[]),Zt(this,"glintPool",[]),Zt(this,"sun",new Ye(as.EMPTY)),Zt(this,"vignette",new Ye(as.EMPTY)),Zt(this,"fogOfWar",new Ye(as.EMPTY)),Zt(this,"fogCanvas",null),Zt(this,"fogTex",null),Zt(this,"fogBits",null),Zt(this,"fogStore",""),Zt(this,"fogCell",-1),Zt(this,"miniFog",new Ye(as.EMPTY)),Zt(this,"bigFog",new Ye(as.EMPTY)),Zt(this,"miniTerr",new Ye(as.EMPTY)),Zt(this,"bigTerr",new Ye(as.EMPTY)),Zt(this,"terrCanvas",[null,null]),Zt(this,"terrTex",[null,null]),Zt(this,"fog",null),Zt(this,"reel",null),Zt(this,"catchTl",null),Zt(this,"castTween",null),Zt(this,"retrieveTween",null),Zt(this,"departAt",0),Zt(this,"reelPull",!1),Zt(this,"running",!1),Zt(this,"lastTime",0),Zt(this,"startAt",performance.now()),Zt(this,"busyUntil",0),Zt(this,"nibbleSeen",-1),Zt(this,"onTapBefore",null),Zt(this,"onStopAtPoint",null),Zt(this,"onFrame",Qt(()=>this.drawMotion(performance.now()-this.startAt),"onFrame")),Zt(this,"startInSail",null),Zt(this,"rodHold",!1),Zt(this,"mode","fish"),Zt(this,"modeBtn",new Ve),Zt(this,"modeBg",new ip),Zt(this,"modeIcons",{
+ fish:yki("hook",22,16777215),sail:yki("boat",22,16777215)}
+ ),Zt(this,"modeText",rki("",jIi,13)),Zt(this,"onCast",null),Zt(this,"onModeChange",null),Zt(this,"hintTween",null),Zt(this,"foundMask",0),Zt(this,"zoneNow",-1),Zt(this,"zoneBanner",new Ve),Zt(this,"zoneTween",null),Zt(this,"fogRun",0),Zt(this,"glide",{
+ dx:0,dy:0,at:0,ms:0}
+ ),Zt(this,"mapFogCanvas",null),Zt(this,"mapFogTex",null),Zt(this,"nextFishAt",0),Zt(this,"rockUntil",0),Zt(this,"devWhaleBox",null),Zt(this,"nibbler",null),Zt(this,"nibbleRolled",0),Zt(this,"verts",null),Zt(this,"terr",null),Zt(this,"tileLayer",new Ve),Zt(this,"shoreLayer",new Ve),Zt(this,"shoreFoamLayer",new Ve),Zt(this,"propLayer",new Ve),Zt(this,"regions",new Map),Zt(this,"shoreRuns",new Map),Zt(this,"water",null),Zt(this,"surf",[]),Zt(this,"miniMap",new Ve),Zt(this,"miniImg",new Ye(as.EMPTY)),Zt(this,"miniBg",new ip),Zt(this,"miniDots",new ip),Zt(this,"miniGoal",new ip),Zt(this,"bigGoal",new ip),Zt(this,"bigMap",new Ve),Zt(this,"bigImg",new Ye(as.EMPTY)),Zt(this,"bigDots",new ip),Zt(this,"bigLabels",new Ve),Zt(this,"bigDim",new ip),Zt(this,"bigClose",new pki("닫기",132,46,16)),Zt(this,"bigTip",mki("가고 싶은 곳을 누르면 배가 출발해요",16777215,QIi,12,9)),Zt(this,"miniTex",null),Zt(this,"miniMe",new ip),Zt(this,"miniView",new ip),Zt(this,"miniTarget",new ip),Zt(this,"bigMe",new ip),Zt(this,"bigTarget",new ip),Zt(this,"bigOthers",new ip),Zt(this,"markSig",""),Zt(this,"bigOthersAt",0),Zt(this,"npcLayer",new Ve),Zt(this,"npcTags",new Ve),Zt(this,"npcs",[]),Zt(this,"npcSig",""),Zt(this,"npcSpots",[]),Zt(this,"onVisitorTap",null),Zt(this,"onHubTap",null),Zt(this,"onHubArrive",null),Zt(this,"hubLayer",new Ve),Zt(this,"hubs",[]),Zt(this,"hubViews",new Map),Zt(this,"hubPlaces",new Map),Zt(this,"hubSig",""),Zt(this,"goal",null),Zt(this,"goalSig",""),Zt(this,"goalMarks",new ip),Zt(this,"goalArrow",new Ve),Zt(this,"goalArrowHead",new ip),Zt(this,"goalArrowText",""),Zt(this,"chunkKey",""),Zt(this,"othersFloats",new Ve),Zt(this,"othersWater",new Ve),Zt(this,"othersLines",new ip),Zt(this,"onOtherTap",null),Zt(this,"speedBonus",0),Zt(this,"sailBlock",null),Zt(this,"repairFx",new $Pi({
+ angler:lDi}
+ )),Zt(this,"fixingNow",!1),Zt(this,"afterFixAt",0),Zt(this,"plunderG",new ip),Zt(this,"ropes",[]),Zt(this,"plunderFocus",null),Zt(this,"snaps",[]),Zt(this,"tut",!1),Zt(this,"tutorialMoveBtn",!1),Zt(this,"modeBtnHidden",!1),Zt(this,"tutorialRing",null),Zt(this,"tutorialRingScale",1),Zt(this,"tutorialLift",0),Zt(this,"rodBalloon",new Ve),Zt(this,"rodBalloonOn",!1),Zt(this,"rodBubble",new Ye(as.EMPTY)),Zt(this,"pointSyncUntil",0),Zt(this,"dockAt",0),Zt(this,"dockShown",0),this.viewW=i,this.viewH=s,this.on("removed",()=>this.cancelHarpoon());
+ for(const t of[this.boatShadow,this.line,this.float,this.fx,this.fxAdd,this.tideTint,this.frame,this.glints])t.eventMode="none";
+ this.glints.eventMode="none",this.shadowLayer.eventMode=this.flyLayer.eventMode=this.labels.eventMode=this.foamLayer.eventMode="none",this.underLayer.eventMode=this.giantLayer.eventMode="none",this.underLayer.addChild(this.giantLayer,this.shadowLayer,this.school),this.fxAdd.blendMode="add",this.boat.anchor.set(.5),this.boat.eventMode="none",this.angler.eventMode=this.lamp.eventMode=this.floatSp.eventMode="none",this.lamp.anchor.set(.5),this.floatSp.visible=!1,this.lightLayer.eventMode="none",this.lightLayer.mask=this.lightClip,this.birdClip.eventMode="none",this.birds.sky.mask=this.birdClip,this.chunkLayer.eventMode="none",this.othersLayer.eventMode=this.otherNames.eventMode=this.othersFloats.eventMode=this.othersLines.eventMode=this.othersWater.eventMode=this.plunderG.eventMode="none",this.tileLayer.eventMode="none",this.shoreFoamLayer.eventMode=this.shoreLayer.eventMode=this.propLayer.eventMode="none",this.npcLayer.eventMode=this.npcTags.eventMode=this.hubLayer.eventMode=this.goalMarks.eventMode=this.goalArrow.eventMode="none",this.world.addChild(this.mapSprite,this.tileLayer,this.shoreFoamLayer,this.shoreLayer,this.chunkLayer,this.glints,this.waterLight,this.birds.shadows,this.propLayer,this.npcLayer,this.hubLayer,this.othersWater,this.othersLayer,this.othersFloats,this.othersLines,this.plunderG,this.boatWater,this.foamLayer,this.boatShadow,this.line,this.float,this.floatSp,this.boat,this.angler,this.lamp,this.fx,this.fxAdd,this.flyLayer,this.otherNames,this.hitLayer,this.npcTags,this.fogOfWar,this.goalMarks,this.labels,this.rodBalloon),this.world.addChildAt(this.repairFx.under,this.world.getChildIndex(this.boatWater)),this.world.addChildAt(this.repairFx.over,this.world.getChildIndex(this.otherNames)),this.repairFx.onSound=t=>{
+ try{
+ qG.getInstance().playSFX("finish"===t?qG.SFX_GOLD_GOBLIN:qG.SFX_WOOD_MALLET,"finish"===t?.5:"help"===t?.35:.22)}
+ catch{
+ }
+ }
+ ,this.world.mask=this.clip,this.tideTint.alpha=0;
+ const[e,n]=t.lightTextures();
+ this.sun.texture=e,this.vignette.texture=n,this.sun.anchor.set(.5),this.sun.blendMode="add",this.sun.eventMode="none",this.vignette.eventMode="none",this.hint.eventMode=this.zoneBanner.eventMode="none",this.buildModeButton(),this.buildRodBalloon(),this.buildMinimap(),this.hud.addChild(this.hint,this.goalArrow,this.modeBtn,this.miniMap),this.worldTop.eventMode="none",this.addChild(this.world,this.clip,this.sun,this.vignette,this.birdClip,this.birds.sky,this.tideTint,this.lightClip,this.lightLayer,this.worldTop,this.zoneBanner,this.hud,this.bigMap,this.frame),this.layoutView(),this.setMode("fish"),this.eventMode="static",this.cursor="pointer",this.on("pointertap",t=>{
+ var i,s,e;
+ const n=this.world.toLocal(t.global);
+ if(this.rodBalloonHit(n.x,n.y))return t.stopPropagation(),this.hideRodBalloon(),this.hint.visible=!1,void this.arrive();
+ const h=this.hubAt(n.x,n.y);
+ if(h)return t.stopPropagation(),void(null==(i=this.onHubTap)||i.call(this,h,this.hubNear(h)));
+ const r="fish"===this.mode?this.npcAt(n.x,n.y):null;
+ if(r)return t.stopPropagation(),void(null==(s=this.onVisitorTap)||s.call(this,r));
+ if(null==(e=this.onTapBefore)?void 0:e.call(this))return void t.stopPropagation();
+ const o=this.otherAt(n.x,n.y);
+ if(o&&this.onOtherTap)return t.stopPropagation(),void this.onOtherTap(o.a,Math.hypot(o.x-this.bx,o.y-this.by)<=bOi);
+ const a=this.world.toLocal(t.global);
+ this.tapAt(a.x,a.y),t.stopPropagation()}
+ )}
+ resize(t,i){
+ if(t!==this.viewW||i!==this.viewH){
+ this.viewW=t,this.viewH=i,this.layoutView();
+ for(const s of this.surf)s.width=t+128,s.height=i+128;
+ this.fog&&(this.fog.width=t,this.fog.height=i),this.miniImg.texture!==as.EMPTY&&this.miniMap.position.set(10,i-this.miniImg.height-18),this.markSig="",this.bigMap.visible&&this.info&&this.buildMinimapTexture(),this.hint.visible&&this.hint.position.set((t-this.hint.width)/2,i-this.hint.height-12)}
+ }
+ setHudAlpha(t){
+ this.tut?this.applyTutorialHud():(this.hud.alpha=t,this.hud.visible=t>.01)}
+ layoutView(){
+ const t=this.viewW,i=this.viewH;
+ for(const s of[this.lightClip,this.birdClip,this.clip,this.tideTint])s.clear().rect(0,0,t,i).fill(16777215);
+ this.sun.width=1.5*t,this.sun.height=1.1*i,this.vignette.width=t,this.vignette.height=i,this.hitArea=new Ui(0,0,t,i),this.modeBtn.position.set(t-58,i-32-(this.tut?this.tutorialLift:0)),this.bigDim.clear().rect(0,0,t,i).fill({
+ color:526346,alpha:.82}
+ ),this.bigClose.position.set((t-132)/2,i-46-14),this.bigTip.position.set((t-this.bigTip.width)/2,i-46-14-this.bigTip.height-8),this.bigMap.hitArea=new Ui(0,0,t,i)}
+ get floatX(){
+ return this.fxp.x+this.world.x}
+ get floatY(){
+ return this.fxp.y+this.world.y-8}
+ get sailing(){
+ return"sail"===this.mode||!!this.target||this.speed>1}
+ get bigMapOpen(){
+ return this.bigMap.visible}
+ closeBigMap(){
+ this.bigMap.visible&&this.openBigMap(!1)}
+ get mapKey(){
+ return this.info?this.key:""}
+ get idleInSail(){
+ return"sail"===this.mode&&!this.target&&this.speed<=1}
+ get rodShown(){
+ return this.rodBalloonOn}
+ get boatSprite(){
+ return this.boat}
+ get rodBalloonView(){
+ return this.rodBalloon}
+ get fishing(){
+ return!this.sailing&&(this.floatVisible||!!this.reel||!!this.catchTl)}
+ start(){
+ this.running||(this.running=!0,this.lastTime=performance.now()-this.startAt,ES.app.ticker.add(this.onFrame))}
+ stop(){
+ this.cancelHarpoon(),this.running=!1,ES.app.ticker.remove(this.onFrame)}
+ update(i,s,e,n,h=1/0,r){
+ if(this.bite=n,this.biteIn=h,this.biteInAt=performance.now(),r&&r.boat!==this.boatLv&&(this.boatLv=r.boat,this.boat.texture=nAi.boat(this.boatLv),this.lamp.texture=nAi.gear().lanterns[t.lampGrade(this.boatLv)]),this.boat.texture===as.EMPTY&&(this.boat.texture=nAi.boat(this.boatLv),this.lamp.texture=nAi.gear().lanterns[t.lampGrade(this.boatLv)]),r&&(r.bobber!==this.bobberLv||this.floatSp.texture===as.EMPTY)){
+ this.bobberLv=Math.min(3,r.bobber);
+ const t=nAi.gear();
+ this.floatSp.texture=pDi(t.floats[this.bobberLv],this.bobberLv),this.floatSp.anchor.set(.5,1)}
+ if(s!==this.tide||0===this.tideTint.alpha){
+ this.tide=s;
+ const t=xDi[s];
+ this.tideTint.tint=t.color,this.tideTint.alpha=t.alpha;
+ const i=RDi[s];
+ this.sun.tint=i.color,this.sun.alpha=i.alpha}
+ const o=`${
+ i.race}
+ |${
+ i.zone}
+ `;
+ o!==this.key?(this.key=o,this.loadMap(i)):this.fogRun!==WTi.runId()&&this.fogBits?(this.fogRun=WTi.runId(),this.initFog(),this.foundMask=WTi.found(this.key),this.updateFog(!0)):i.point===this.point?this.pointSyncUntil=0:!this.target&&performance.now()>this.pointSyncUntil&&(this.point=i.point,this.teleport(i.point)),this.running||this.drawMotion(e)}
+ async loadMap(t){
+ this.cancelHarpoon(),this.race=t.race,this.zone=t.zone,this.point=t.point,this.otherCandidates=[],this.otherPickAt=0;
+ for(const i of this.others.values())this.dropOtherBoat(i);
+ this.others.clear(),this.info=nAi.topdownInfo(this.key),this.foundMask=WTi.found(this.key),this.zoneNow=-1,this.clearGiants(),this.birds.reset(t.zone);
+ {
+ const i=TDi[t.zone].first;
+ this.nextGiantAt=performance.now()+1e3*(i[0]+Math.random()*(i[1]-i[0]))}
+ if(this.school.clear(),this.nextSchoolAt=performance.now()+1e3*dLi(!0,Math.random),this.nav=null,this.route=[],this.clearChunks(),this.clearTiles(),"tile"===this.info.type){
+ this.landBits=null,this.verts=Uint8Array.from(atob(this.info.verts),t=>t.charCodeAt(0)),this.buildWater();
+ const t=this.info,i=await nAi.terrain(t.terrain);
+ if(this.info!==t)return;
+ this.terr=i,this.buildShore(),this.placeNpcShips(),this.hubSig="",this.hubPlaces.clear(),this.initFog()}
+ else this.verts=null,this.landBits=Uint8Array.from(atob(this.info.land),t=>t.charCodeAt(0));
+ if(this.info.chunk||"tile"===this.info.type)this.mapSprite.texture=as.EMPTY;
+ else{
+ const t=await nAi.topdownMap(this.key);
+ if(this.info!==nAi.topdownInfo(`${
+ this.race}
+ |${
+ this.zone}
+ `))return;
+ this.mapSprite.texture=t}
+ this.drawStatic(),this.buildMinimapTexture(),this.teleport(t.point),this.spawnShadows()}
+ teleport(t){
+ var i,s;
+ if(!(null==(i=this.info)?void 0:i.points[t]))return;
+ const e=this.startSpot(t);
+ this.bx=e.bx,this.by=e.by,this.target=null,this.route=[],this.speed=0,this.heading=-Math.PI/4,this.boatWater.reset(),this.foam=[],this.crowns=[],this.bobberWave=0;
+ for(const n of this.glintList)n.sp.visible=!1,this.glints.removeChild(n.sp),this.glintPool.push(n.sp);
+ this.glintList=[],this.dockAt=0,this.hideRodBalloon(),(null==(s=this.startInSail)?void 0:s.call(this))?"sail"!==this.mode?this.setMode("sail"):this.dock():("fish"!==this.mode&&this.setMode("fish"),this.cast(e.fx,e.fy,!0)),this.camX=this.bx,this.camY=this.by,this.updateFog(!0)}
+ startSpot(t){
+ const i=this.info.points[t],s=this.labels.children.find(i=>i.label===String(t)),e=18+(s?s.width/2:60),n=18+(s?s.height/2:15),h=Qt((t,s,h)=>Math.abs(t-i.x)>e+h||Math.abs(s-i.y)>n+h,"clear");
+ for(const a of[!0,!1])for(const s of a?[130,160,105,190,230,270,80]:[130,160,105,190])for(const e of[100,80,125,55,150,30,180,0,210,330,240,300,270]){
+ const n=e*Math.PI/180,r=i.x+Math.cos(n)*s,o=i.y+Math.sin(n)*s;
+ if(!h(r,o,26)||this.isLand(r,o)||sNi.at(this.key,r,o)!==t)continue;
+ if(a?!this.boatCanFish(r,o):this.shoreDist(r,o)<30)continue;
+ const c=Math.atan2(o-i.y,r-i.x);
+ for(const t of[.5,-.5,0,1,-1]){
+ const i=c+t,s=r+80*Math.cos(i),e=o+80*Math.sin(i);
+ if(h(s,e,10)&&(a?this.floatOk(s,e):!this.isLand(s,e)&&this.shoreDist(s,e)>=40))return{
+ bx:r,by:o,fx:s,fy:e}
+ }
+ }
+ let r=i.x-70,o=i.y+40;
+ return this.isLand(r,o)&&(r=i.x,o=i.y+70),this.isLand(r,o)&&(r=i.x,o=i.y),{
+ bx:r,by:o,fx:i.x+20,fy:i.y-10}
+ }
+ sailTo(t,i){
+ var s;
+ if(!this.info)return!1;
+ const e=null==(s=this.sailBlock)?void 0:s.call(this);
+ if(e)return this.showHint(e,!0),!1;
+ !this.nav&&this.verts&&(this.nav=new hNi(this.info.w,this.info.h,(t,i)=>this.isLand(t,i)));
+ const n=this.nav?this.nav.find(this.bx,this.by,t,i):[{
+ x:t,y:i}
+ ];
+ return n&&n.length?(this.route=n,this.target=n[n.length-1],this.stuckFor=0,this.replanned=!1,this.dockAt=0,this.departAt=Math.max(this.departAt,performance.now()+this.reelIn()),!0):(this.showHint("그곳으로 이어진 물길이 없어요",!0),!1)}
+ reelIn(){
+ var t;
+ if(this.catchTl){
+ const t=this.catchTl;
+ this.catchTl=null,t.progress(1)}
+ if(this.reel=null,this.reelPull=!1,null==(t=this.castTween)||t.kill(),this.castTween=null,!this.floatVisible||this.retrieveTween)return this.floatLift=0,this.retrieveTween?200:0;
+ const i={
+ ...this.fxp}
+ ,s={
+ p:0}
+ ;
+ return this.splash(i.x,i.y,3,15004914),this.retrieveTween=MR.to(s,{
+ p:1,duration:.24,ease:"power2.in",onUpdate:Qt(()=>{
+ const t=this.rodTip;
+ this.fxp={
+ x:i.x+(t.x-i.x)*s.p,y:i.y+(t.y-i.y)*s.p}
+ ,this.floatLift=12*Math.sin(s.p*Math.PI)}
+ ,"onUpdate"),onComplete:Qt(()=>{
+ this.floatVisible=!1,this.floatLift=0,this.retrieveTween=null}
+ ,"onComplete")}
+ ),260}
+ sailToHub(t){
+ const i=this.hubPlaces.get(t);
+ return!!i&&("sail"!==this.mode&&this.setMode("sail"),!!this.sailTo(i.dx,i.dy)&&(this.hideRodBalloon(),this.marker(i.dx,i.dy,16777215),!0))}
+ tapAt(i,s){
+ if(this.info){
+ if("sail"===this.mode){
+ if(this.isLand(i,s))return void this.marker(i,s,16751752);
+ if(!this.sailTo(i,s))return;
+ return this.marker(i,s,16777215),t.hintSeen=!0,this.hideRodBalloon(),void this.showHint("가는 중 · 멈추면 낚싯대 풍선을 눌러 낚시 시작",!1,!0)}
+ MR.fromTo(this.modeBtn.scale,{
+ x:1.25,y:1.25}
+ ,{
+ x:1,y:1,duration:.45,ease:"elastic.out(1.2, 0.4)"}
+ ),this.showHint("배를 옮기려면 오른쪽 아래 [이동]을 눌러요",!0)}
+ }
+ buildModeButton(){
+ const t=this.modeBtn;
+ t.addChild(this.modeBg,this.modeIcons.fish,this.modeIcons.sail,this.modeText);
+ for(const i of Object.values(this.modeIcons))i.position.set(12,11);
+ this.modeText.position.set(40,13),t.eventMode="static",t.cursor="pointer",t.hitArea=new Ui(0,0,96,44),t.pivot.set(48,22),t.on("pointertap",t=>{
+ t.stopPropagation(),"fish"!==this.mode?this.fixingNow?this.showHint("배를 다 고친 뒤에 낚시해요",!0):this.target?this.showHint("멈추면 머리 위 낚싯대 풍선을 눌러 낚시 시작",!0):(this.dockAt=0,this.showRodBalloon()):this.setMode("sail")}
+ )}
+ setMode(t){
+ var i;
+ const s=t!==this.mode;
+ this.mode=t;
+ const e="sail"===t;
+ this.modeBg.clear().roundRect(0,0,96,44,12).fill(e?6012341:VIi),this.modeIcons.fish.visible=!1,this.modeIcons.sail.visible=!0;
+ for(const n of Object.values(this.modeIcons))n.tint=jIi;
+ this.modeText.text=e?"이동 중":"이동",e?(this.departAt=Math.max(this.departAt,performance.now()+this.reelIn()),this.showHint("가고 싶은 곳을 누르세요",!1),this.target||this.dock()):(this.hideRodBalloon(),this.dockAt=0,this.showHint("느낌표(!)가 뜨면 눌러요 · 그냥 두면 입질 두 번에 한 마리",!1)),s&&(null==(i=this.onModeChange)||i.call(this,e))}
+ showHint(i,s,e=!1){
+ var n;
+ if(this.tut)return void(this.hint.visible=!1);
+ if(!e&&!s&&t.hintSeen&&"fish"===this.mode)return void(this.hint.visible=!1);
+ this.hint.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const h=mki(i,16777215,QIi,12,9);
+ h.alpha=.9,this.hint.addChild(h),this.hint.position.set((this.viewW-h.width)/2,this.viewH-h.height-12),this.hint.visible=!0,this.hint.alpha=1,null==(n=this.hintTween)||n.kill(),s&&(this.hintTween=MR.timeline().to(this.hint,{
+ alpha:0,duration:.4,delay:1.8}
+ ))}
+ marker(t,i,s){
+ this.ripples.push({
+ x:t,y:i,age:0,life:.6,r0:4,r1:18,alpha:.8}
+ ),16777215!==s&&this.ripples.push({
+ x:t,y:i,age:0,life:.4,r0:2,r1:10,alpha:.9}
+ )}
+ cast(t,i,s,e=!0){
+ var n,h,r;
+ if(this.fixingNow)return;
+ const o=Math.hypot(t-this.bx,i-this.by);
+ if(o>iDi&&(t=this.bx+(t-this.bx)*iDi/o,i=this.by+(i-this.by)*iDi/o),!this.floatOk(t,i))return;
+ if(null==(n=this.castTween)||n.kill(),this.castTween=null,null==(h=this.retrieveTween)||h.kill(),this.retrieveTween=null,this.floatLandedAt=-1/0,s)return this.fxp={
+ x:t,y:i}
+ ,this.floatLift=0,void(this.floatVisible=!0);
+ const a={
+ ...this.rodTip}
+ ,c={
+ p:0}
+ ,l=.34+.2*Math.min(1,o/iDi),u=18+.12*Math.min(o,iDi);
+ e&&(null==(r=this.onCast)||r.call(this)),this.fxp={
+ ...a}
+ ,this.floatLift=0,this.floatVisible=!0,this.busyUntil=performance.now()+1e3*l+150,this.castTween=MR.to(c,{
+ p:1,duration:l,ease:"none",onUpdate:Qt(()=>{
+ this.fxp={
+ x:a.x+(t-a.x)*c.p,y:a.y+(i-a.y)*c.p}
+ ,this.floatLift=4*u*c.p*(1-c.p)}
+ ,"onUpdate"),onComplete:Qt(()=>{
+ this.castTween=null,this.floatLift=0,this.floatLandedAt=performance.now(),this.splash(t,i,3,15004914,12),this.ripples.push({
+ x:t,y:i,age:0,life:1.4,r0:3,r1:17,alpha:.35}
+ )}
+ ,"onComplete")}
+ )}
+ isLand(t,i){
+ const s=this.info;
+ if(!s)return!1;
+ if(t<8||i<8||t>s.w-8||i>s.h-8)return!0;
+ if(this.verts){
+ const e=s.tile,n=t/e,h=i/e,r=Math.floor(n),o=Math.floor(h),a=n-r,c=h-o;
+ return(this.vert(r,o)*(1-a)+this.vert(r+1,o)*a)*(1-c)+(this.vert(r,o+1)*(1-a)+this.vert(r+1,o+1)*a)*c>.5}
+ const e=this.landBits;
+ if(!e)return!1;
+ const n=Math.floor(t/s.cell),h=Math.floor(i/s.cell)*s.cols+n;
+ return 1==(e[h>>3]>>(7&h)&1)}
+ known(t){
+ var i;
+ const s=null==(i=this.info)?void 0:i.points[t];
+ return!(!s||0!==t&&t!==this.point&&1&~(this.foundMask>>t)&&this.unexplored(s.x,s.y))}
+ knownSig(){
+ var t;
+ return((null==(t=this.info)?void 0:t.points)??[]).map((t,i)=>this.known(i)?1:0).join("")}
+ nearestPoint(){
+ return sNi.at(this.key,this.bx,this.by)}
+ trackZone(){
+ var t;
+ if(!(null==(t=this.info)?void 0:t.points.length))return;
+ const i=this.nearestPoint();
+ if(i===this.zoneNow)return;
+ const s=this.zoneNow<0;
+ this.zoneNow=i;
+ const e=!this.known(i);
+ WTi.markFound(this.key,i)&&(this.foundMask=WTi.found(this.key)),s||this.showZone(i,e)}
+ showZone(t,i){
+ var s;
+ const e=this.zoneBanner;
+ e.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const n=rki(RSi(this.race,this.zone,t),16777215,20),h=`난이도 ${
+ QSi({
+ zone:this.zone,point:t}
+ )}
+ `,r=rki(i?`새 수역을 찾았어요 · ${
+ h}
+ `:`${
+ t+1}
+ 번 수역 · ${
+ h}
+ `,i?VIi:13229279,12),o=Math.max(n.width,r.width)+44,a=(new ip).roundRect(0,0,o,58,12).fill({
+ color:QIi,alpha:.78}
+ );
+ n.position.set((o-n.width)/2,9),r.position.set((o-r.width)/2,36),e.addChild(a,n,r),e.position.set((this.viewW-o)/2,170),e.visible=!0,null==(s=this.zoneTween)||s.kill(),this.zoneTween=MR.timeline().fromTo(e,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.25}
+ ).to(e,{
+ alpha:0,duration:.5,delay:i?2.2:1.4,onComplete:Qt(()=>{
+ e.visible=!1}
+ ,"onComplete")}
+ ),i&&jG("light")}
+ drawStatic(){
+ var t;
+ const i=this.labels;
+ i.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),null==(t=this.info)||t.points.forEach((t,s)=>{
+ const e=mki(RSi(this.race,this.zone,s),16777215,QIi,13,9);
+ e.alpha=.9,e.position.set(t.x-e.width/2,t.y-e.height/2),e.label=String(s),i.addChild(e)}
+ )}
+ spawnShadows(){
+ this.shadowLayer.removeChildren().forEach(t=>t.destroy()),this.shadows=[],this.nibbler=null,this.nextFishAt=0}
+ drawMotion(t){
+ var i;
+ const s=Math.min(.05,Math.max(0,(t-this.lastTime)/1e3));
+ if(this.lastTime=t,!this.info)return;
+ const e=this.viewH;
+ if(this.target&&performance.now()>=this.departAt){
+ const t=this.route.length<=1,e=this.route[0]??this.target;
+ !t&&Math.hypot(e.x-this.bx,e.y-this.by)<28&&this.route.shift();
+ const n=this.route[0]??this.target,h=n.x-this.bx,r=n.y-this.by,o=Math.hypot(h,r),a=this.route.length<=1;
+ let c=Math.atan2(r,h)-this.heading;
+ for(;
+ c>Math.PI;
+ )c-=2*Math.PI;
+ for(;
+ c<-Math.PI;
+ )c+=2*Math.PI;
+ this.heading+=Math.max(-3.2*s,Math.min(3.2*s,c));
+ const l=aDi[Math.min(aDi.length-1,this.boatLv)]*(1+this.speedBonus/100),u=Math.max(.12,Math.cos(Math.min(Math.PI/2,Math.abs(c)))),d=(a&&o<60?l*Math.max(.15,o/60):l)*u;
+ this.speed+=(d-this.speed)*Math.min(1,3*s);
+ const f=this.bx+Math.cos(this.heading)*this.speed*s,p=this.by+Math.sin(this.heading)*this.speed*s;
+ if(f<40||p<40||f>this.info.w-40||p>this.info.h-40)this.target=null,this.route=[],this.speed=0,this.dock(),this.showHint("R"===this.zone?"여기까지예요 · 더 나갈 수 없어요":"바다 끝이에요 · 더 나갈 수 없어요",!0);
+ else if(this.isLand(f,p)&&!this.isLand(this.bx,this.by)){
+ if(this.speed=0,this.stuckFor+=s,this.stuckFor>1.2){
+ this.stuckFor=0;
+ const t=!this.replanned&&(null==(i=this.nav)?void 0:i.find(this.bx,this.by,this.target.x,this.target.y));
+ t?(this.route=t,this.replanned=!0):(this.target=null,this.route=[],this.dock())}
+ }
+ else this.bx=f,this.by=p,this.stuckFor=0;
+ this.target&&a&&o<6&&(this.target=null,this.route=[],this.dock())}
+ else this.speed*=Math.pow(.9,60*s);
+ if(this.afterFixAt&&performance.now()>=this.afterFixAt&&!this.fixingNow)if(this.afterFixAt=0,"fish"!==this.mode||this.floatVisible||this.target)"sail"!==this.mode||this.target||this.showRodBalloon();
+ else{
+ const t=this.castSpot();
+ t&&this.cast(t.x,t.y,!1)}
+ this.dockAt&&performance.now()>=this.dockAt&&!this.rodHold&&(this.dockAt=0,"sail"!==this.mode||this.target||this.showRodBalloon()),this.drawRodBalloon(t),this.camX+=(this.bx-this.camX)*Math.min(1,4*s),this.camY+=(this.by-this.camY)*Math.min(1,4*s);
+ const n=Math.max(this.viewW/2,Math.min(this.info.w-this.viewW/2,this.camX)),h=Math.max(e/2,Math.min(this.info.h-e/2,this.camY));
+ this.world.position.set(this.viewW/2-n,e/2-h);
+ const r=this.shakeUntil-performance.now();
+ if(r>0){
+ const t=this.shakeAmp*Math.min(1,r/220);
+ this.world.position.x+=2*(Math.random()-.5)*t,this.world.position.y+=2*(Math.random()-.5)*t}
+ if(this.birds.sky.position.copyFrom(this.world.position),this.worldTop.position.copyFrom(this.world.position),this.info.chunk&&this.updateChunks(n,h),this.verts&&this.updateTiles(n,h),this.drawSurface(t),this.drawGlints(s),this.shoreFoamLayer.alpha=.76+.12*Math.sin(t/2800)+.04*Math.sin(t/4700+1.3),this.fog){
+ const i=PDi[this.tide]??0;
+ this.fog.alpha+=(i-this.fog.alpha)*Math.min(1,1.5*s),this.fog.visible=this.fog.alpha>.01,this.fog.visible&&this.fog.tilePosition.set(.85*this.world.x+t/1e3*7,.85*this.world.y+t/1e3*3)}
+ this.sun.position.set(.22*this.viewW+18*Math.sin(t/9e3),.12*e+10*Math.cos(t/11e3)),this.moveShadows(t,s),this.moveSchool(s,{
+ x:n-this.viewW/2,y:h-e/2,w:this.viewW,h:e}
+ ),this.moveGiants(t,s),this.birds.update(s,{
+ x:n-this.viewW/2,y:h-e/2,width:this.viewW,height:e}
+ ,this.zone,this.tide,(t,i)=>this.shoreDist(t,i)),this.updateFog(!1),this.trackZone(),this.drawOthers(t,s),this.drawFixing(s),this.drawNpcs(t,s),this.drawHubs(t,s),this.drawGoal(t),this.drawMinimap(t),this.tut?this.applyTutorialHud():this.modeBtn.visible=!this.modeBtnHidden;
+ const o=(1-(this.glide.ms?Math.min(1,(performance.now()-this.glide.at)/this.glide.ms):1))**3,a=this.hullPose=GNi(this.bx+this.glide.dx*o,this.by+this.glide.dy*o,this.heading,t/1e3,this.zone,this.boatLv,this.speed),c=performance.now()<this.rockUntil?.07*Math.sin(t/110)*((this.rockUntil-performance.now())/1800):0;
+ this.boat.position.set(a.x,a.y),this.boat.rotation=a.rotation+c,this.boat.skew.set(a.skew,0),this.boat.scale.set(oDi*a.scaleX,oDi*a.scaleY);
+ const l=DNi(this.boatLv);
+ if(this.boatShadow.clear().ellipse(0,0,.95*l.halfWidth,.86*l.halfLength).fill({
+ color:401450,alpha:.19-.012*a.height}
+ ),this.boatShadow.position.set(a.waterX+1.5,a.waterY+2),this.boatShadow.rotation=this.boat.rotation,this.boatWater.update(s,{
+ x:a.waterX,y:a.waterY,heading:this.boat.rotation-Math.PI/2,speed:this.speed,level:this.boatLv,zone:this.zone,time:t/1e3,velocity:a.velocity,roll:a.roll,pitch:a.pitch,rollVelocity:a.rollVelocity,pitchVelocity:a.pitchVelocity}
+ ,nAi.foam(),(t,i)=>!this.isLand(t,i)),this.drawFoam(t,s),this.drawCrew(t,s),this.harpoonFxs.length){
+ for(const t of this.harpoonFxs)t.advance(s);
+ this.harpoonFxs=this.harpoonFxs.filter(t=>!t.destroyed)}
+ let u=0;
+ const d=this.biteIn-(performance.now()-this.biteInAt);
+ nDi.forEach((t,i)=>{
+ const s=(d-t)/110;
+ u+=Math.exp(-s*s),d<=t&&this.nibbleSeen<i&&this.floatVisible&&(this.nibbleSeen=i,this.ripples.push({
+ x:this.fxp.x,y:this.fxp.y,age:0,life:.8,r0:3,r1:12,alpha:.5}
+ ))}
+ ),d>nDi[0]+500&&(this.nibbleSeen=-1),this.moveNibbler(s,d),(this.floatVisible&&!this.retrieveTween&&Math.hypot(this.fxp.x-this.bx,this.fxp.y-this.by)>245||this.reel&&Math.hypot(this.reel.x-this.bx,this.reel.y-this.by)>285)&&(this.floatVisible=!1,this.reel&&this.reelIn());
+ const f=this.line.clear(),p=this.float.clear();
+ if(this.reel){
+ const i=this.rodTip.x,s=this.rodTip.y,e=this.reelPull?.8*Math.sin(t/28):5,n=(i+this.reel.x)/2,h=(s+this.reel.y)/2+e;
+ f.moveTo(i,s).quadraticCurveTo(n,h,this.reel.x,this.reel.y).stroke({
+ color:16053480,width:this.reelPull?.7:.55,alpha:.7}
+ )}
+ if(this.floatVisible){
+ const i=!!this.castTween||!!this.retrieveTween,e=LNi(this.fxp.x,this.fxp.y,t/1e3,this.zone,(performance.now()-this.floatLandedAt)/1e3),n=i?this.fxp.x:e.x,h=i?this.fxp.y-this.floatLift:e.y,r=this.bite?.55+.2*Math.sin(t/70):.3*u,o=this.rodTip.x,a=this.rodTip.y,c=this.floatSp,l=nAi.gear(),d=i?l.floats[this.bobberLv]:pDi(l.floats[this.bobberLv],this.bobberLv);
+ c.texture!==d&&(c.texture=d,c.anchor.set(.5,i?dDi[this.bobberLv]??.55:1)),c.visible=!0,c.position.set(n+(this.bite?.8*Math.sin(t/45):0),h+3*r),c.rotation=i?0:e.rotation,c.scale.set(uDi,uDi*(1-.5*r)),c.alpha=1-.25*r;
+ const g=-2.4*(1-.5*r),w=c.x-Math.sin(c.rotation)*g,m=c.y+Math.cos(c.rotation)*g;
+ f.moveTo(o,a).quadraticCurveTo((o+w)/2,(a+m)/2+8,w,m).stroke({
+ color:16053480,width:.5,alpha:.56}
+ ),p.ellipse(n,h+.5,4.5+3*r,1.8+r).stroke({
+ color:14808302,width:.6,alpha:i?0:this.bite?.5:.2}
+ ),!this.bite&&!i&&this.bobberWave<=0&&e.height>0&&this.ripples.push({
+ x:n,y:h,age:0,life:2.4,r0:4,r1:15,alpha:.18}
+ ),this.bobberWave=e.height,this.bite&&Math.random()<8*s&&this.ripples.push({
+ x:this.fxp.x,y:this.fxp.y,age:0,life:.6,r0:5,r1:16,alpha:.6}
+ )}
+ else this.floatSp.visible=!1;
+ const g=this.fx.clear(),w=this.fxAdd.clear();
+ for(const m of this.ripples){
+ m.age+=s;
+ const t=m.age/m.life;
+ t<1&&g.ellipse(m.x,m.y,m.r0+(m.r1-m.r0)*t,.75*(m.r0+(m.r1-m.r0)*t)).stroke({
+ color:16777215,width:1.3,alpha:(1-t)*m.alpha}
+ )}
+ this.ripples=this.ripples.filter(t=>t.age<t.life);
+ for(const m of this.particles){
+ m.age+=s,m.vz-=260*s,m.z=Math.max(0,m.z+m.vz*s),m.x+=m.vx*s,m.y+=m.vy*s;
+ const t=1-m.age/m.life;
+ t>0&&w.circle(m.x,m.y-m.z,m.size).fill({
+ color:m.color,alpha:.8*t}
+ )}
+ this.particles=this.particles.filter(t=>t.age<t.life),this.drawLights(t,s);
+ for(const m of this.labels.children){
+ const t=Number(m.label),i=this.info.points[t],s=Math.hypot(i.x-this.bx,i.y-this.by);
+ m.alpha=t===this.point?1:Math.max(.3,Math.min(.85,1.25-s/900)),m.visible=this.known(t)}
+ }
+ mapReadyFor(t){
+ return!(this.key!==t||!this.info||"tile"===this.info.type&&!this.terr)}
+ glideIn(t,i=70,s=600){
+ this.glide={
+ dx:-Math.cos(t)*i,dy:-Math.sin(t)*i,at:performance.now(),ms:s}
+ ,this.heading=t}
+ initFog(){
+ var t;
+ const i=this.info;
+ this.fogRun=WTi.runId(),this.fogStore=WTi.storeKey(this.key,i.verts),this.fogBits=WTi.bits(this.fogStore,i.cols*i.rows),this.fogCanvas&&this.fogCanvas.width===i.cols&&this.fogCanvas.height===i.rows||(this.fogCanvas=document.createElement("canvas"),this.fogCanvas.width=i.cols,this.fogCanvas.height=i.rows,null==(t=this.fogTex)||t.destroy(!0),this.fogTex=as.from(this.fogCanvas),this.fogTex.source.scaleMode="linear"),this.fogOfWar.texture=this.fogTex,this.fogOfWar.eventMode="none",this.fogOfWar.position.set(0,0),this.fogOfWar.width=i.cols*i.tile,this.fogOfWar.height=i.rows*i.tile,this.fogCell=-1}
+ unexplored(t,i){
+ const s=this.info,e=this.fogBits;
+ if(!s||!e||!s.tile)return!1;
+ const n=Math.floor(t/s.tile),h=Math.floor(i/s.tile);
+ return n<0||h<0||n>=s.cols||h>=s.rows||!WTi.has(e,h*s.cols+n)}
+ updateFog(t){
+ const i=this.info,s=this.fogBits,e=this.fogCanvas;
+ if(!(i&&s&&e&&i.tile))return;
+ const n=i.tile,h=i.cols,r=i.rows,o=Math.min(h-1,Math.max(0,Math.floor(this.bx/n))),a=Math.min(r-1,Math.max(0,Math.floor(this.by/n))),c=a*h+o;
+ if(c===this.fogCell&&!t)return;
+ const l=this.fogCell;
+ this.fogCell=c;
+ const u=Math.ceil(380/n)+2;
+ let d=!1;
+ for(let b=Math.max(0,a-u);
+ b<=Math.min(r-1,a+u);
+ b++)for(let t=Math.max(0,o-u);
+ t<=Math.min(h-1,o+u);
+ t++)Math.hypot((t+.5)*n-this.bx,(b+.5)*n-this.by)<=380&&!WTi.has(s,b*h+t)&&(WTi.set(s,b*h+t),d=!0);
+ d&&WTi.markDirty(this.fogStore);
+ let f=0,p=h-1,g=0,w=r-1;
+ if(!t&&l>=0){
+ const t=l%h,i=Math.floor(l/h);
+ f=Math.max(0,Math.min(o,t)-u),p=Math.min(h-1,Math.max(o,t)+u),g=Math.max(0,Math.min(a,i)-u),w=Math.min(r-1,Math.max(a,i)+u)}
+ const m=e.getContext("2d"),v=p-f+1,_=w-g+1,M=m.createImageData(v,_);
+ for(let b=g;
+ b<=w;
+ b++)for(let t=f;
+ t<=p;
+ t++){
+ const i=4*((b-g)*v+(t-f));
+ let e=.93;
+ if(WTi.has(s,b*h+t)){
+ const i=Math.hypot((t+.5)*n-this.bx,(b+.5)*n-this.by);
+ e=.42*(1-Math.min(1,Math.max(0,(380-i)/(1.5*n))))}
+ M.data[i]=cDi[0],M.data[i+1]=cDi[1],M.data[i+2]=cDi[2],M.data[i+3]=Math.round(255*e)}
+ m.putImageData(M,f,g),this.fogTex.source.update(),(t||d)&&this.paintMapFog(t?null:[f,g,p,w])}
+ paintMapFog(t){
+ var i;
+ const s=this.info,e=this.fogBits;
+ if(!s||!e||!s.tile)return;
+ const n=s.cols,h=s.rows;
+ this.mapFogCanvas&&this.mapFogCanvas.width===n&&this.mapFogCanvas.height===h||(this.mapFogCanvas=document.createElement("canvas"),this.mapFogCanvas.width=n,this.mapFogCanvas.height=h,null==(i=this.mapFogTex)||i.destroy(!0),this.mapFogTex=as.from(this.mapFogCanvas),this.mapFogTex.source.scaleMode="linear",t=null);
+ const[r,o,a,c]=t??[0,0,n-1,h-1],l=this.mapFogCanvas.getContext("2d"),u=a-r+1,d=c-o+1,f=l.createImageData(u,d),p=Math.round(209.1);
+ for(let g=o;
+ g<=c;
+ g++)for(let t=r;
+ t<=a;
+ t++){
+ const i=4*((g-o)*u+(t-r));
+ f.data[i]=cDi[0],f.data[i+1]=cDi[1],f.data[i+2]=cDi[2],f.data[i+3]=WTi.has(e,g*n+t)?0:p}
+ l.putImageData(f,r,o),this.mapFogTex.source.update(),this.miniFog.texture!==this.mapFogTex&&(this.miniFog.texture=this.mapFogTex,this.bigFog.texture=this.mapFogTex)}
+ placeMapFog(t,i){
+ const s=this.info;
+ if(!this.mapFogTex&&this.fogBits&&this.paintMapFog(null),t.visible=!!this.mapFogTex&&!!s.tile,!t.visible)return;
+ t.texture=this.mapFogTex;
+ const e=i.width/s.w;
+ t.position.set(i.x,i.y),t.width=s.cols*s.tile*e,t.height=s.rows*s.tile*e}
+ myAnglerTex(){
+ var t;
+ const i=null==(t=RIi.getInstance().state)?void 0:t.look;
+ if(i!==this.myLookRaw){
+ this.myLookRaw=i;
+ const t=RIi.getInstance().look;
+ this.myTop=t?bRi(t):null}
+ return this.myTop}
+ static otherAnglerTex(t){
+ const i=_Oi(t);
+ return i?MRi(i,0,!0):null}
+ static lampGrade(t){
+ return Math.min(2,Math.floor(nAi.boatArt(t)/2))}
+ drawCrew(i,s){
+ var e;
+ const n=nAi.gear(),h=this.boat.rotation,r=this.boat.scale.x,o=this.boat.scale.y,a=Math.cos(h),c=Math.sin(h),l=n.info.boats[nAi.boatArt(this.boatLv)],u=Qt((t,i)=>({
+ x:this.boat.x+t*a*r-i*Math.sin(h-this.boat.skew.x)*o,y:this.boat.y+t*c*r+i*Math.cos(h-this.boat.skew.x)*o}
+ ),"local"),d=u(l.seat[0],l.seat[1]),f=this.reel??(this.floatVisible&&!this.sailing?this.fxp:null),p=f?Math.atan2(f.y-d.y,f.x-d.x)+Math.PI/2:h;
+ this.anglerRot+=BDi(p,this.anglerRot)*Math.min(1,6*s);
+ const g=(this.reel?this.reelPull:this.bite)?1:0,w=n.info.angler[g],m=this.repairFx.myCrew,v=(null==m?void 0:m.crop)??0,_=(null==m?void 0:m.lean)??0,M=this.angler,b=NPi((null==(e=this.myAnglerTex())?void 0:e[g])??n.angler[g],v);
+ M.texture!==b&&(M.texture=b,M.anchor.set((128+w.body[0])/256,LPi(128+w.body[1],v))),M.position.set(d.x+Math.sin(this.anglerRot)*_,d.y-Math.cos(this.anglerRot)*_),M.rotation=this.anglerRot,M.scale.set(lDi);
+ const y=(w.tip[0]-w.body[0])*lDi,E=(w.tip[1]-w.body[1])*lDi,A=Math.cos(this.anglerRot),S=Math.sin(this.anglerRot);
+ this.rodTip={
+ x:d.x+y*A-E*S,y:d.y+y*S+E*A}
+ ;
+ const T=u(l.lantern[0],l.lantern[1]);
+ this.lamp.position.set(T.x,T.y),this.lamp.rotation=h-.7*this.hullPose.roll+.014*Math.sin(i/2200),this.lamp.scale.set(.2);
+ const C=n.info.lanterns[t.lampGrade(this.boatLv)].glass,O=Math.cos(this.lamp.rotation),I=Math.sin(this.lamp.rotation);
+ this.lampAt={
+ x:T.x+.2*(C[0]*O-C[1]*I),y:T.y+.2*(C[0]*I+C[1]*O)}
+ }
+ drawLights(t,i){
+ this.lightUsed=0;
+ const s=[],e=gDi[this.tide]??0;
+ if(e>0){
+ const i=3===this.tide,n=this.world.x,h=this.world.y,r=Qt(i=>.97+.02*Math.sin(t/2400+i)+.01*Math.sin(t/1100+1.7*i),"flick"),o=Qt((t,o,a,c,l,u,d=0)=>{
+ const f=r(u),p=1/(1+.45*d);
+ this.glow(n+t,h+o,c*(i?1.25:1)*(.7+.3*p),a,l*(i?.45:1)*f*p),this.glow(n+t,h+o,.16*c,a,.9*e*f*(.5+.5*p)),this.glow(n+t,h+o,5,16777215,.75*e*(.4+.6*p)),s.push({
+ x:t,y:o,color:a,seed:u,strength:f*p}
+ )}
+ ,"lamp");
+ if(this.floatSp.visible){
+ const t=2===this.bobberLv;
+ this.glow(n+this.floatSp.x,h+this.floatSp.y-8,t?46:26,t?16769658:this.myColor,(t?.8:.55)*e)}
+ const a=nAi.gear(),c=[{
+ x:this.lampAt.x,y:this.lampAt.y,color:this.myColor,seed:0,me:!0}
+ ];
+ for(const t of this.others.values()){
+ if(!t.sp.visible)continue;
+ const i=a.info.boats[nAi.boatArt(t.a.b)],s=t.sp.scale.x,e=t.sp.scale.y,r=t.sp.rotation,o=t.sp.skew.x,l=t.px+i.lantern[0]*Math.cos(r)*s-i.lantern[1]*Math.sin(r-o)*e,u=t.py+i.lantern[0]*Math.sin(r)*s+i.lantern[1]*Math.cos(r-o)*e,d=n+l,f=h+u;
+ if(d<-80||f<-80||d>this.viewW+80||f>this.viewH+80)continue;
+ const p=mDi(t.a.id);
+ c.push({
+ x:l,y:u,color:wDi[p%wDi.length],seed:p%100,me:!1,a:t.alpha/DDi}
+ )}
+ for(const t of this.npcs)t.ship.visible&&c.push({
+ x:t.x-9,y:t.y+20,color:16761962,seed:50+10*t.phase,me:!1}
+ );
+ for(const t of c){
+ let i=0;
+ for(const s of c)s!==t&&Math.abs(s.x-t.x)<70&&Math.abs(s.y-t.y)<70&&i++;
+ t.me?o(t.x,t.y,t.color,150,.3*e,0,.5*i):o(t.x,t.y,t.color,110,.24*e*(t.a??1),t.seed,i)}
+ }
+ this.waterLight.update(i,t/1e3,{
+ x:-this.world.x,y:-this.world.y,width:this.viewW,height:this.viewH}
+ ,this.zone,this.tide,s,(t,i)=>!this.isLand(t,i));
+ for(let n=this.lightUsed;
+ n<this.lightPool.length;
+ n++)this.lightPool[n].visible=!1}
+ glow(i,s,e,n,h){
+ let r=this.lightPool[this.lightUsed];
+ r||(r=new Ye(t.lightTextures()[0]),r.anchor.set(.5),r.blendMode="add",r.eventMode="none",this.lightPool.push(r),this.lightLayer.addChild(r)),r.visible=!0,r.position.set(i,s),r.width=r.height=e,r.tint=n,r.alpha=Math.min(1,h),this.lightUsed++}
+ drawFoam(t,i){
+ const s=nAi.foam();
+ this.foamUsed=0;
+ for(const e of this.foam){
+ e.age+=i,e.x+=e.vx*i,e.y+=e.vy*i,e.rot+=e.spin*i;
+ const t=Math.max(0,1-2*i);
+ e.vx*=t,e.vy*=t;
+ const n=e.age/e.life;
+ n<1&&this.foamSprite(s.puffs[e.t],e.x,e.y,2.8*e.r*(1+.6*n),e.rot,e.alpha*(1-n*n))}
+ this.foam=this.foam.filter(t=>t.age<t.life);
+ for(const e of this.crowns){
+ e.age+=i;
+ const t=Math.min(1,e.age/e.life),n=1-(1-t)*(1-t);
+ this.foamSprite(s.crowns[e.t],e.x,e.y,e.size*(.5+.65*n),e.rot,1-t*t)}
+ if(this.crowns=this.crowns.filter(t=>t.age<t.life),this.reel){
+ const i=this.reel,e=Math.floor(t/85)%4;
+ this.foamSprite(s.churn[e],i.x,i.y,(20+5*i.level)*(1+.06*Math.sin(t/70)),t/900,.95)}
+ for(let e=this.foamUsed;
+ e<this.foamPool.length;
+ e++)this.foamPool[e].visible=!1}
+ addFoam(t,i,s,e,n,h=0,r=0){
+ this.foam.push({
+ x:t,y:i,vx:h,vy:r,age:0,life:e,r:s,alpha:n,t:Math.floor(8*Math.random()),rot:Math.random()*Math.PI*2,spin:1.2*(Math.random()-.5)}
+ )}
+ foamSprite(t,i,s,e,n,h){
+ let r=this.foamPool[this.foamUsed];
+ r||(r=new Ye(t),r.anchor.set(.5),r.eventMode="none",this.foamPool.push(r),this.foamLayer.addChild(r)),r.texture=t,r.visible=!0,r.position.set(i,s),r.rotation=n,r.alpha=h,r.width=r.height=e,this.foamUsed++}
+ drawGlints(t){
+ const i=nAi.gear().glints;
+ if(!i||i.length<12)return;
+ const s=2===this.tide,e=Math.round(18*IDi[this.tide]*(this.viewW*this.viewH)/48e4);
+ if(this.glintList.length<e&&Math.random()<t*e*.7){
+ let t=null,e=-1;
+ for(let i=0;
+ i<3;
+ i++){
+ const i=Math.random()*this.viewW,n=Math.random()*this.viewH,h=-this.world.x+i,r=-this.world.y+n;
+ if(this.isLand(h,r))continue;
+ const o=Math.hypot(i-this.sun.x,n-this.sun.y)/this.viewW,a=(s?1:.35+Math.exp(-o*o*3))*Math.random();
+ a>e&&(e=a,t={
+ x:h,y:r}
+ )}
+ if(t){
+ const e=1+(Math.random()<.55?1:0)+(Math.random()<.25?1:0);
+ for(let n=0;
+ n<e;
+ n++){
+ const e=Math.random()*Math.PI*2,h=n?6+16*Math.random():0,r=t.x+Math.cos(e)*h,o=t.y+Math.sin(e)*h*.7;
+ if(n&&this.isLand(r,o))continue;
+ const a=s?Math.random()<.7:Math.random()<.3,c=this.glintPool.pop()??new Ye;
+ c.anchor.set(.5),c.blendMode="add",c.tint=kDi[this.tide]??16777215,c.visible=!1,c.rotation=0,c.texture=i[a?8:0],this.glints.addChild(c),this.glintList.push({
+ sp:c,x:r,y:o,dot:a,age:-n*(.08+.14*Math.random()),life:a?.45+.35*Math.random():.5+.35*Math.random(),s:(a?.5+.15*Math.random():.4+.15*Math.random())*(s?.85:1)}
+ )}
+ }
+ }
+ for(const n of this.glintList){
+ n.age+=t;
+ const e=n.sp;
+ if(n.age<0){
+ e.visible=!1;
+ continue}
+ const h=Math.min(.999,n.age/n.life);
+ e.visible=!0,e.texture=n.dot?i[8+Math.floor(4*h)]:i[Math.floor(8*h)],e.position.set(n.x+2.5*n.age,n.y),e.scale.set(n.s),e.alpha=s?.25*Math.sin(h*Math.PI):.95}
+ for(const n of this.glintList)n.age>=n.life&&(n.sp.visible=!1,this.glints.removeChild(n.sp),this.glintPool.push(n.sp));
+ this.glintList=this.glintList.filter(t=>t.age<t.life)}
+ static lightTextures(){
+ if(this.lightTex)return this.lightTex;
+ const t=Qt(t=>{
+ const i=document.createElement("canvas");
+ i.width=i.height=256,t(i.getContext("2d"));
+ const s=as.from(i);
+ return s.source.scaleMode="linear",s}
+ ,"mk"),i=t(t=>{
+ const i=t.createRadialGradient(128,128,0,128,128,128);
+ i.addColorStop(0,"rgba(255,255,255,1)"),i.addColorStop(.35,"rgba(255,255,255,0.42)"),i.addColorStop(1,"rgba(255,255,255,0)"),t.fillStyle=i,t.fillRect(0,0,256,256)}
+ ),s=t(t=>{
+ const i=t.createRadialGradient(128,128,80,128,128,182);
+ i.addColorStop(0,"rgba(2,12,20,0)"),i.addColorStop(1,"rgba(2,12,20,0.42)"),t.fillStyle=i,t.fillRect(0,0,256,256)}
+ );
+ return this.lightTex=[i,s]}
+ shoreDist(t,i){
+ const s=this.info,e=this.landDist;
+ if(!(null==s?void 0:s.tile)||!e)return 1e6;
+ const n=s.tile,h=s.cols+1,r=s.rows+1,o=t/n,a=i/n,c=Math.max(0,Math.min(h-2,Math.floor(o))),l=Math.max(0,Math.min(r-2,Math.floor(a))),u=Math.min(1,Math.max(0,o-c)),d=Math.min(1,Math.max(0,a-l)),f=Qt((t,i)=>Math.min(e[i*h+t],1e4),"at");
+ return((f(c,l)*(1-u)+f(c+1,l)*u)*(1-d)+(f(c,l+1)*(1-u)+f(c+1,l+1)*u)*d)*n}
+ clearGiants(){
+ for(const i of this.giants)t.destroyGiant(i);
+ this.giants=[]}
+ static destroyGiant(t){
+ var i;
+ t.view.destroy(),t.src.destroy({
+ children:!0}
+ ),t.rt.destroy(!0),null==(i=t.blur)||i.destroy()}
+ devWhaleSheet(){
+ if(this.devWhaleBox)return this.devWhaleBox.destroy({
+ children:!0}
+ ),this.devWhaleBox=null,"off";
+ const t=nAi.giantSpine.whale;
+ if(!t)return"no spine";
+ const i=new Ve;
+ return i.addChild((new ip).rect(0,0,this.viewW,this.viewH).fill(13624298)),[[0,0],[8,1],[-8,2],[0,3]].forEach(([s,e],n)=>{
+ const h=ZZ.from({
+ skeleton:t.skeleton,atlas:t.atlas,autoUpdate:!1}
+ ),r=CNi(h);
+ h.beforeUpdateWorldTransforms=()=>r(ODi.map((t,i)=>i<3?0:s),e*Math.PI/2,.8,0),h.update(e),h.tint=666170,h.scale.set(.95),h.position.set(.72*this.viewW,90+n*this.viewH*.24);
+ const o=rki(`휨 ${
+ s}
+ ° · ${
+ e}
+ 초`,1056816,12);
+ o.position.set(10,20+n*this.viewH*.24),i.addChild(h,o)}
+ ),this.addChild(i),this.devWhaleBox=i,"on"}
+ devGiant(t){
+ this.giants.length?this.showHint("지나가는 그림자가 떠난 뒤 다시 불러주세요",!0):this.spawnGiant(!0,t)||this.showHint("이 생물이 지나갈 만큼 넓고 깊은 수역이 필요해요",!0)}
+ spawnGiant(t=Math.random()<TDi[this.zone].under,i){
+ if(!this.info||!this.landDist||this.giants.length>=1)return!1;
+ const s=TDi[this.zone];
+ if(i&&!s.kinds.some(([t])=>t===i))return!1;
+ let e=Math.random(),n=s.kinds[0][0];
+ for(const[p,g]of s.kinds)if((e-=g)<=0){
+ n=p;
+ break}
+ i&&(n=i);
+ const h=SDi[n],r=h.L*s.scale,o=h.need*s.scale,a=Math.hypot(this.viewW,this.viewH)/2,c=-this.world.x+this.viewW/2,l=-this.world.y+this.viewH/2,u=t?this.bx:c+(Math.random()-.5)*this.viewW*.6,d=t?this.by:l+(Math.random()-.5)*this.viewH*.6;
+ if(this.shoreDist(u,d)<.7*o)return!1;
+ const f=Math.random()*Math.PI*2;
+ for(let p=0;
+ p<24;
+ p++){
+ const i=f+p*(2*Math.PI/24),s=.8*a+.3*r,e=u+Math.cos(i)*s,c=d+Math.sin(i)*s;
+ if(this.shoreDist(e,c)<o)continue;
+ let l=!0;
+ for(let t=.25;
+ t<=.75&&l;
+ t+=.25)this.shoreDist(e+(u-e)*t,c+(d-c)*t)<.8*o&&(l=!1);
+ if(!l)continue;
+ const g=Math.atan2(d-c,u-e);
+ for(let t=.25;
+ t<=1&&l;
+ t+=.25)this.shoreDist(e-Math.cos(g)*r*t,c-Math.sin(g)*r*t)<.8*o&&(l=!1);
+ if(!l)continue;
+ const w="megalodon"===n||"whaleShark"===n||"sturgeon"===n||"turtle"===n,m="megalodon"===n||"whaleShark"===n||"sturgeon"===n||"turtle"===n?{
+ sharp:as.WHITE,deep:as.WHITE}
+ :nAi.gear().giants[n],v=r/m.sharp.width;
+ let _,M,b=[];
+ const y="whale"===n?nAi.giantSpine.whale:null;
+ let E,A;
+ y?(E=ZZ.from({
+ skeleton:y.skeleton,atlas:y.atlas,autoUpdate:!1}
+ ),_=new Ye(as.EMPTY),M=new Ye(as.EMPTY)):"turtle"===n?(A=new ULi,_=new Ye(as.EMPTY),M=new Ye(as.EMPTY)):"shark"===n||"megalodon"===n||"whaleShark"===n||"sturgeon"===n?(A=new eLi(n),_=new Ye(as.EMPTY),M=new Ye(as.EMPTY)):"manta"===n||"catfish"===n||"eel"===n?(A=new TNi(n,m.sharp),_=new Ye(as.EMPTY),M=new Ye(as.EMPTY)):h.rope?(b=Array.from({
+ length:28}
+ ,()=>new yi),_=new zy({
+ texture:m.deep,points:b}
+ ),M=new zy({
+ texture:m.sharp,points:b}
+ )):(_=new Ye(m.deep),M=new Ye(m.sharp),_.anchor.set(.5),M.anchor.set(.5));
+ const S=w?r*("turtle"===n?1.15:.43):Math.max(m.sharp.height,h.rope?0:m.sharp.width)*v,T=Math.ceil(.5*(1.1*r+1.15*S+40)),C=Mv.create({
+ width:T,height:T}
+ ),O=new Ve;
+ O.addChild(_,M),E&&O.addChild(E),A&&O.addChild(A),O.position.set(T/2,T/2),O.scale.set(.5);
+ const I=new Ye(C);
+ I.anchor.set(.5),I.scale.set(2),I.tint=400424,I.alpha=0,I.eventMode="none",this.giantLayer.addChild(I);
+ const k=[];
+ for(let t=r+40;
+ t>=0;
+ t-=4)k.push({
+ x:e-Math.cos(g)*t,y:c-Math.sin(g)*t}
+ );
+ const R=E?new Array(ODi.length).fill(0):void 0,x={
+ kind:n,src:O,rt:C,view:I,deep:_,sharp:M,pts:b,k:v,L:r,x:e,y:c,dir:g,spine:E,bend:R,rig:A,v:.85*h.speed,want:g,w:0,tgt:g,vanish:0,passX:u,passY:d,reached:!1,reachedAt:0,trail:k,seed:Math.random()*Math.PI*2,effort:.7,bank:0,cruiseDir:g,depth:1,minDepth:"megalodon"===n?.42+.12*Math.random():t?.2:.35+.25*Math.random(),age:0,life:Math.max(12,r/h.speed*.85)+5*Math.random(),leaving:!1,phase:10*Math.random(),passed:!1}
+ ;
+ if(E&&R){
+ const t=CNi(E);
+ E.beforeUpdateWorldTransforms=()=>t(R,x.phase,x.effort,x.bank)}
+ return this.giants.push(x),this.giantSeen||(this.giantSeen=!0,this.showHint("…깊은 곳에서 거대한 그림자가 지나가요",!0)),!0}
+ return!1}
+ static trailAt(t,i,s){
+ let e=0,n=i;
+ for(let o=t.length-1;
+ o>=0;
+ o--){
+ const i=t[o],h=Math.hypot(n.x-i.x,n.y-i.y);
+ if(h>0&&e+h>=s){
+ const t=(s-e)/h;
+ return{
+ x:n.x+(i.x-n.x)*t,y:n.y+(i.y-n.y)*t,a:Math.atan2(n.y-i.y,n.x-i.x)}
+ }
+ e+=h,n=i}
+ const h=t[0]??i,r=t[1]??i;
+ return{
+ x:h.x,y:h.y,a:Math.atan2(r.y-h.y,r.x-h.x)}
+ }
+ static trailDir(i,s,e,n){
+ const h=t.trailAt(i,s,Math.max(0,e-n)),r=t.trailAt(i,s,e+n);
+ return Math.atan2(h.y-r.y,h.x-r.x)}
+ moveGiants(i,s){
+ const e=performance.now();
+ if(this.info&&this.landDist&&e>=this.nextGiantAt){
+ const t=0===this.giants.length&&QSi({
+ zone:this.zone,point:this.point}
+ )>=OOi.MIN_LEVEL&&this.spawnGiant(),i=TDi[this.zone].every;
+ this.nextGiantAt=e+(t?1e3*(i[0]+Math.random()*(i[1]-i[0])):2e4)}
+ const n=Math.hypot(this.viewW,this.viewH)/2,h=-this.world.x+this.viewW/2,r=-this.world.y+this.viewH/2,o=TDi[this.zone].scale;
+ for(const c of this.giants){
+ const i=SDi[c.kind],a=i.need*o;
+ c.age+=s;
+ const l=Math.hypot(c.passX-c.x,c.passY-c.y),u=Math.atan2(c.passY-c.y,c.passX-c.x);
+ !c.reached&&(l<.35*c.L||c.age>6&&Math.abs(BDi(u,c.dir))>Math.PI/2||c.age>45)&&(c.reached=!0,c.reachedAt=c.age,c.cruiseDir=c.dir,c.want=c.dir),(c.reached&&c.age-c.reachedAt>c.life||c.age>90)&&(c.leaving=!0),c.want=c.reached||c.leaving?c.cruiseDir+.075*Math.sin(.12*(c.age-c.reachedAt)+c.seed):u;
+ const d=Math.min(i.turn,c.v/(i.rMin*c.L)),f=Math.max(110,.55*c.L,i.rMin*c.L*.7),p=[];
+ let g=0;
+ for(let t=-7;
+ t<=7;
+ t++){
+ const i=c.dir+.2*t,s=Math.min(1.5*a,this.shoreDist(c.x+Math.cos(i)*f*.45,c.y+Math.sin(i)*f*.45),this.shoreDist(c.x+Math.cos(i)*f,c.y+Math.sin(i)*f));
+ p.push(s/a*1.6+1.5*Math.cos(BDi(c.want,i))-t*t*.003),p[p.length-1]>p[g]&&(g=p.length-1)}
+ let w=0;
+ if(g>0&&g<p.length-1){
+ const t=p[g-1]-2*p[g]+p[g+1];
+ t<0&&(w=Math.max(-.5,Math.min(.5,.5*(p[g-1]-p[g+1])/t)))}
+ c.tgt+=BDi(c.dir+.2*(g-7+w),c.tgt)*(1-Math.exp(1.2*-s));
+ const m=c.w+(i.wn*i.wn*BDi(c.tgt,c.dir)-2*i.wn*c.w)*s,v=.5*d*s;
+ c.w=Math.max(-d,Math.min(d,c.w+Math.max(-v,Math.min(v,m-c.w)))),c.dir+=c.w*s,(this.shoreDist(c.x+Math.cos(c.dir)*f*.4,c.y+Math.sin(c.dir)*f*.4)<.35*a||c.age>105)&&(c.leaving=!0,c.vanish=Math.max(c.vanish,1e-4)),c.vanish>0&&(c.vanish=Math.min(1,c.vanish+s/5)),c.effort+=(aNi(c.age,c.seed)-c.effort)*(1-Math.exp(.7*-s)),c.bank+=(c.w/(d||1)-c.bank)*(1-Math.exp(.8*-s));
+ const _=i.speed*(.78+.16*c.effort+.035*Math.sin(.11*c.age+c.seed))*(1-.1*Math.abs(c.bank));
+ c.v+=(_-c.v)*(1-Math.exp(.35*-s)),c.x+=Math.cos(c.dir)*c.v*s,c.y+=Math.sin(c.dir)*c.v*s,c.phase+=s*(pNi(c.kind,c.v,c.L)??i.freq*Math.PI*2*(.62+.38*c.effort));
+ let M=c.trail[c.trail.length-1],b=Math.hypot(c.x-M.x,c.y-M.y);
+ for(;
+ b>=4;
+ )M={
+ x:M.x+4*(c.x-M.x)/b,y:M.y+4*(c.y-M.y)/b}
+ ,c.trail.push(M),b-=4;
+ for(;
+ c.trail.length>Math.ceil((1.08*c.L+80)/4);
+ )c.trail.shift();
+ const y=c.leaving?1:c.reached||l<.8*n?c.minDepth:.9;
+ c.depth+=(y-c.depth)*(1-Math.exp(-s*(c.leaving?.2:.3)));
+ const E=t.trailAt(c.trail,c,.5*c.L),A=Math.min(1,Math.max(0,(this.shoreDist(E.x,E.y)-.3*a)/(.45*a))),S=oNi(0,4,c.age)*A*i.alpha*(1-oNi(0,1,c.vanish)),T=c.depth,C=1-T+T*T;
+ c.deep.alpha=T,c.sharp.alpha=1-T;
+ const O=(1-.45*T)*(1-oNi(.78,1,T));
+ if(c.view.alpha=S*O/(c.spine||c.rig?1:C),c.view.position.set(E.x,E.y),c.flinch){
+ const t=KPi((performance.now()-c.flinch.at)/1e3,c.flinch.power);
+ t.push||t.flash?(c.view.position.x+=c.flinch.dx*t.push,c.view.position.y+=c.flinch.dy*t.push,c.view.tint=YPi(c.flinch.base,t.flash)):(c.view.tint=c.flinch.base,c.flinch=void 0)}
+ const I=1+.06*(1-T);
+ let k=1/0;
+ if(c.spine&&c.bend){
+ const i=ODi,e=c.L*I,n=t.trailDir(c.trail,c,.06*e,.05*e);
+ let h=0;
+ for(let s=0;
+ s<i.length;
+ s++){
+ const r=(CDi-i[s])*e,o=s+1<i.length?(CDi-i[s+1])*e:r+.06*e,a=BDi(t.trailDir(c.trail,c,(r+o)/2,.07*e),n)*oNi(.14,.6,r/e);
+ if(c.bend[s]=-180*BDi(a,h)/Math.PI,h=a,s%2==0){
+ const i=t.trailAt(c.trail,c,r);
+ k=Math.min(k,Math.hypot(i.x-this.bx,i.y-this.by))}
+ }
+ const r=c.spine,o=t.trailAt(c.trail,c,0);
+ r.position.set(o.x-E.x-Math.cos(n)*(1-CDi)*e,o.y-E.y-Math.sin(n)*(1-CDi)*e),r.rotation=n,r.scale.set(e/300),r.update(s)}
+ else if(c.rig){
+ const i=c.L*I,s=t.trailDir(c.trail,c,.18*i,.13*i),e=t.trailAt(c.trail,c,.2*i);
+ c.rig.pose(i,c.phase,c.effort,c.bank,n=>{
+ const h=t.trailAt(c.trail,c,n),r=gNi(c.kind,n/i),o=e.x-Math.cos(s)*(n-.2*i),a=e.y-Math.sin(s)*(n-.2*i);
+ return{
+ x:o+(h.x-o)*r-E.x,y:a+(h.y-a)*r-E.y,a:s+BDi(t.trailDir(c.trail,c,n,.06*i),s)*r}
+ }
+ );
+ for(let n=1;
+ n<=4;
+ n++){
+ const s=t.trailAt(c.trail,c,i*n/5);
+ k=Math.min(k,Math.hypot(s.x-this.bx,s.y-this.by))}
+ }
+ else if(c.sharp instanceof zy){
+ const s=c.pts.length,e=c.L*I,n=c.k*I;
+ for(let h=0;
+ h<s;
+ h++){
+ const r=h/(s-1),o=(1-r)*e,a=Math.pow(1-r,i.tailPow),l=t.trailAt(c.trail,c,o),u=i.amp*e*a*Math.sin(c.phase-(1-r)*i.wave),d=l.x-Math.sin(l.a)*u,f=l.y+Math.cos(l.a)*u;
+ c.pts[h].set((d-E.x)/n,(f-E.y)/n),h%3==0&&(k=Math.min(k,Math.hypot(d-this.bx,f-this.by)))}
+ c.deep.scale.set(n),c.sharp.scale.set(n)}
+ else{
+ const i=c.L/c.sharp.texture.width*I,s=c.L*I,e=t.trailAt(c.trail,c,.2*s),n=t.trailAt(c.trail,c,.746*s),h=(e.x+n.x)/2,r=(e.y+n.y)/2,o=Math.atan2(e.y-n.y,e.x-n.x);
+ for(const t of[c.deep,c.sharp])t.position.set(h-E.x,r-E.y),t.rotation=o,t.scale.set(i);
+ k=Math.hypot(h-this.bx,r-this.by)}
+ if(c.spine||c.rig){
+ const t=.35+T*T*4;
+ c.blur??(c.blur=new mf({
+ strength:t,quality:2}
+ )),c.blur.strength=t,c.view.filters||(c.view.filters=[c.blur])}
+ const R=Math.hypot(E.x-h,E.y-r)<n+.7*c.L;
+ if(c.view.visible=R,R&&c.view.alpha>.002&&ES.app.renderer.render({
+ container:c.src,target:c.rt,clear:!0}
+ ),!c.passed&&c.view.alpha>.15&&k<.14*c.L){
+ c.passed=!0,this.rockUntil=e+1800,jG("whale"===c.kind||"megalodon"===c.kind?"medium":"light");
+ for(let t=0;
+ t<6;
+ t++)this.addFoam(this.bx+40*(Math.random()-.5),this.by+40*(Math.random()-.5),1.2+2*Math.random(),1.2+Math.random(),.55)}
+ }
+ const a=Qt(t=>t.vanish>=1||t.leaving&&t.depth>.992||t.leaving&&Math.hypot(h-t.x,r-t.y)>n+1.2*t.L,"gone");
+ for(const c of this.giants)a(c)&&t.destroyGiant(c);
+ this.giants=this.giants.filter(t=>!a(t))}
+ moveShadows(t,i){
+ const s=performance.now(),e=Math.max(8,Math.min(20,Math.round(this.viewW*this.viewH/42e3)));
+ if(this.info&&s>=this.nextFishAt&&this.shadows.length<e){
+ this.nextFishAt=s+(this.shadows.length<e/2?150:350+500*Math.random());
+ for(let t=0;
+ t<4;
+ t++){
+ const t=40-this.world.x+Math.random()*(this.viewW-80),i=60-this.world.y+Math.random()*(this.viewH-120);
+ if(Math.hypot(t-this.bx,i-this.by)<=90||this.isLand(t,i)||this.unexplored(t,i)||this.shoreDist(t,i)<60)continue;
+ const s=Math.random()*Math.PI*2,n=.5*(Math.random()-.5),h=14+18*Math.random(),r=4+4*Math.random(),o=Math.random()<.3?2+Math.floor(2*Math.random()):1;
+ for(let a=0;
+ a<o&&this.shadows.length<e;
+ a++){
+ const e=a*(12+8*Math.random()),c=(a%2?1:-1)*(a?8+8*Math.random():0),l=t-Math.cos(s)*e-Math.sin(s)*c,u=i-Math.sin(s)*e+Math.cos(s)*c;
+ if(a&&this.isLand(l,u))continue;
+ const d=new eLi("fish",25);
+ d.tint=665137,d.alpha=0,this.shadowLayer.addChild(d),this.shadows.push({
+ s:d,x:l,y:u,rot:s+.2*(Math.random()-.5),turn:n,v:h*(.92+.16*Math.random()),size:(o>1?16:18)+12*Math.random(),age:0,life:r+.6*Math.random(),phase:Math.random()*Math.PI*2,seed:Math.random()*Math.PI*2}
+ )}
+ break}
+ }
+ for(const n of this.shadows){
+ n.age+=i;
+ const t=n.x+Math.cos(n.rot)*n.v*i,s=n.y+Math.sin(n.rot)*n.v*i,e=t+36*Math.cos(n.rot),h=s+36*Math.sin(n.rot);
+ this.isLand(e,h)||this.shoreDist(e,h)<40?n.rot+=2.5*i:(n.x=t,n.y=s,n.rot+=n.turn*i);
+ const r=n.age/n.life,o=Math.min(1,n.age/.9),a=Math.min(1,Math.max(0,(1-r)/.3));
+ n.s.alpha=.32*o*a;
+ const c=.65+.2*Math.sin(.8*n.age+n.seed);
+ n.phase+=i*JNi(n.v,n.size),n.s.swim(n.size,n.phase,c,n.turn),n.s.position.set(n.x,n.y),n.s.rotation=n.rot}
+ for(const n of this.shadows)n.age>=n.life&&n.s.destroy();
+ this.shadows=this.shadows.filter(t=>t.age<t.life)}
+ moveSchool(t,i){
+ const s=performance.now();
+ !this.school.active&&this.info&&s>=this.nextSchoolAt&&(this.giants.length?this.nextSchoolAt=s+15e3:this.nextSchoolAt=s+(this.playSchool(i)?1e3*dLi(!1,Math.random):2e4)),this.school.update(t,{
+ x:this.bx,y:this.by}
+ ,(t,i)=>this.isLand(t,i)?0:this.seenSoft(t,i)*Math.max(0,Math.min(1,this.shoreDist(t,i)/25)),(t,i)=>this.ripples.push({
+ x:t,y:i,age:0,life:.9,r0:3,r1:16,alpha:.32}
+ ))}
+ playSchool(t,i,s){
+ if(!this.info)return!1;
+ const e=t??{
+ x:-this.world.x,y:-this.world.y,w:this.viewW,h:this.viewH}
+ ,n={
+ x:this.bx,y:this.by}
+ ,h=Qt((t,i)=>!this.isLand(t,i)&&this.shoreDist(t,i)>=30,"water"),r=Qt((t,i)=>h(t,i)&&!this.unexplored(t,i),"seen"),o=s??nLi[Math.floor(Math.random()*nLi.length)];
+ let a=null;
+ if("swirl"===o){
+ const t=ILi(e,n,h,Math.random,r);
+ t&&(a={
+ mode:"swirl",...t}
+ )}
+ if("scatter"===o){
+ const t=OLi(e,n,h,Math.random,!0);
+ t&&(a={
+ mode:"scatter",pts:t,boat:n}
+ )}
+ if(!a){
+ const t=OLi(e,n,h,Math.random);
+ t&&(a={
+ mode:"stream",pts:t}
+ )}
+ return!!a&&(this.school.start(i??uLi(this.zone,Math.random),a,1e9*Math.random()|0),!0)}
+ seenSoft(t,i){
+ const s=this.info,e=this.fogBits;
+ if(!s||!e||!s.tile)return 1;
+ const n=t/s.tile-.5,h=i/s.tile-.5,r=Math.floor(n),o=Math.floor(h),a=n-r,c=h-o,l=Qt((t,i)=>t<0||i<0||t>=s.cols||i>=s.rows?0:WTi.has(e,i*s.cols+t)?1:0,"at");
+ return(l(r,o)*(1-a)+l(r+1,o)*a)*(1-c)+(l(r,o+1)*(1-a)+l(r+1,o+1)*a)*c}
+ get schoolMode(){
+ return this.school.mode}
+ spawnNibbler(){
+ if(!this.floatVisible||this.sailing||this.reel||this.castTween||this.retrieveTween||performance.now()<this.busyUntil)return;
+ const t=this.fxp.x,i=this.fxp.y;
+ for(let s=0;
+ s<10;
+ s++){
+ const s=Math.random()*Math.PI*2,e=80+40*Math.random(),n=t+Math.cos(s)*e,h=i+Math.sin(s)*e;
+ if(this.isLand(n,h)||this.isLand((n+t)/2,(h+i)/2)||Math.hypot(n-this.bx,h-this.by)<60)continue;
+ const r=new eLi("fish",25);
+ r.tint=665137,r.alpha=0,this.shadowLayer.addChild(r);
+ const o=Math.atan2(i-h,t-n),a=performance.now();
+ return void(this.nibbler={
+ s:r,sx:n,sy:h,dist:e,ang:o,wob:Math.random()<.5?-1:1,x:n,y:h,rot:o,awayRot:o,size:20+5*Math.random(),phase:Math.random()*Math.PI*2,seed:10*Math.random(),state:"come",since:a,born:a}
+ )}
+ }
+ nibblerTo(t){
+ const i=this.nibbler;
+ i&&(i.state=t,i.since=performance.now(),"leave"===t&&(i.awayRot=i.rot+Math.PI+1.2*(Math.random()-.5)))}
+ resolveNibbler(t){
+ const i=this.nibbler;
+ i&&"leave"!==i.state&&"merge"!==i.state&&this.nibblerTo(t&&!this.sailing&&"come"!==i.state?"merge":"leave")}
+ moveNibbler(t,i){
+ const s=performance.now();
+ if(!this.nibbler){
+ const t=s+i;
+ return void(i<=hDi&&i>2400&&Math.abs(t-this.nibbleRolled)>1500&&(this.nibbleRolled=t,(this.tut||Math.random()<.45)&&this.spawnNibbler()))}
+ const e=this.nibbler,n="leave"!==e.state&&"merge"!==e.state;
+ (n&&(!this.floatVisible||this.sailing||this.castTween||this.retrieveTween)||("come"===e.state||"nibble"===e.state)&&i>3200)&&this.nibblerTo("leave");
+ const h=Math.cos(e.ang),r=Math.sin(e.ang),o=this.fxp.x-h*(.5*e.size+2),a=this.fxp.y-r*(.5*e.size+2);
+ let c=e.x,l=e.y,u=e.rot,d=6,f=.45;
+ if("come"===e.state){
+ const t=hDi-rDi,s=Math.max(0,Math.min(1,(hDi-i)/t)),n=s*s*(3-2*s),p=10*Math.sin(s*Math.PI)*e.wob;
+ c=e.sx+(o-e.sx)*n-r*p,l=e.sy+(a-e.sy)*n+h*p,u=e.ang-.3*Math.cos(s*Math.PI)*e.wob,d=8+e.dist/(t/1e3)*6*s*(1-s),f=.65,s>=1&&this.nibblerTo("nibble")}
+ else if("nibble"===e.state){
+ let t=0;
+ for(const s of nDi){
+ const e=(i-s)/110;
+ t+=Math.exp(-e*e)}
+ const n=1.2*Math.sin(s/420+e.seed);
+ c=o+h*(6*t-2)-r*n,l=a+r*(6*t-2)+h*n,u=e.ang,d=8+50*t,f=.5+.5*t,this.bite&&this.nibblerTo("bite")}
+ else if("bite"===e.state){
+ const t=1.6*Math.sin(s/45);
+ c=o+5*h-r*t,l=a+5*r+h*t,u=e.ang+.12*Math.sin(s/60),d=45,f=1,this.bite||this.nibblerTo("wait")}
+ else if("wait"===e.state){
+ const t=1.5*Math.sin(s/380+e.seed);
+ c=o-r*t,l=a+h*t,u=e.ang,s-e.since>3200&&this.nibblerTo("leave")}
+ else if("leave"===e.state){
+ const i=(s-e.since)/1e3;
+ u=e.rot+(e.awayRot-e.rot)*Math.min(1,6*t),d=30+90*Math.min(1,2*i),f=1,c=e.x+Math.cos(u)*d*t,l=e.y+Math.sin(u)*d*t}
+ let p=.55*Math.min(1,(s-e.born)/500);
+ if("leave"===e.state&&(p*=Math.max(0,1-(s-e.since)/900)),"merge"===e.state&&(p*=Math.max(0,1-(s-e.since)/180)),!n&&p<=0)return e.s.destroy(),void(this.nibbler=null);
+ e.x=c,e.y=l,e.rot=u,e.phase+=t*JNi(d,e.size),e.s.swim(e.size,e.phase,f,0),e.s.position.set(c,l),e.s.rotation=u,e.s.alpha=p}
+ updateChunks(t,i){
+ const s=this.info,e=s.chunk,n=this.viewH,h=this.key,r=e/2,o=Math.max(0,Math.floor((t-this.viewW/2-r)/e)),a=Math.min(s.chunkCols-1,Math.floor((t+this.viewW/2+r)/e)),c=Math.max(0,Math.floor((i-n/2-r)/e)),l=Math.min(s.chunkRows-1,Math.floor((i+n/2+r)/e));
+ for(let u=c;
+ u<=l;
+ u++)for(let t=o;
+ t<=a;
+ t++){
+ const i=`${
+ t}
+ _${
+ u}
+ `;
+ this.chunks.has(i)||(this.chunks.set(i,null),nAi.topdownChunk(h,t,u).then(s=>{
+ if(this.key!==h||!this.chunks.has(i))return void nAi.unloadChunk(h,t,u);
+ const n=new Ye(s);
+ n.position.set(t*e,u*e),this.chunkLayer.addChild(n),this.chunks.set(i,n)}
+ ))}
+ for(const[u,d]of this.chunks){
+ const[t,i]=u.split("_").map(Number);
+ t>=o-2&&t<=a+2&&i>=c-2&&i<=l+2||(this.chunks.delete(u),d&&(d.destroy(),nAi.unloadChunk(h,t,i)))}
+ }
+ static regionMap(t){
+ const i=this.regionTex.get(t);
+ if(i)return i;
+ const s=nAi.topdownInfo(t),[e,n]=t.split("|"),h=s.cols+1,r=s.rows+1,o=Uint8Array.from(atob(s.verts),t=>t.charCodeAt(0)),a=Qt((t,i)=>{
+ if(t<0||i<0||t>s.cols||i>s.rows)return 1;
+ const e=i*h+t;
+ return o[e>>3]>>(7&e)&1}
+ ,"vert"),c=ADi(h,r,a,e,n).canvas.getContext("2d").getImageData(0,0,h,r).data,l=nAi.terrainLand(s.terrain??"")??NDi[e].land,u=[.45*l[0]+232*.55,.45*l[1]+117.7,.45*l[2]+162*.55],d=new Float32Array(h*r);
+ for(let M=0;
+ M<r;
+ M++)for(let t=0;
+ t<h;
+ t++){
+ let i=0;
+ for(let s=-1;
+ s<=1;
+ s++)for(let e=-1;
+ e<=1;
+ e++)i+=a(t+e,M+s)*(0===e&&0===s?4:0===e||0===s?2:1);
+ d[M*h+t]=i/16}
+ const f=Qt((t,i)=>d[Math.min(r-1,Math.max(0,i))*h+Math.min(h-1,Math.max(0,t))],"sv"),p=4*(h-1),g=4*(r-1),w=document.createElement("canvas");
+ w.width=p,w.height=g;
+ const m=w.getContext("2d"),v=m.createImageData(p,g);
+ for(let M=0;
+ M<g;
+ M++){
+ const t=M/4,i=Math.floor(t),s=t-i;
+ for(let e=0;
+ e<p;
+ e++){
+ const t=e/4,n=Math.floor(t),o=t-n,a=(f(n,i)*(1-o)+f(n+1,i)*o)*(1-s)+(f(n,i+1)*(1-o)+f(n+1,i+1)*o)*s,d=4*(M*p+e),g=Math.min(h-1,n+1),w=Math.min(r-1,i+1),m=4*(i*h+n),_=4*(i*h+g),b=4*(w*h+n),y=4*(w*h+g),E=[0,1,2].map(t=>(c[m+t]*(1-o)+c[_+t]*o)*(1-s)+(c[b+t]*(1-o)+c[y+t]*o)*s),A=Math.min(1,Math.max(0,(a-.4)/.08)),S=Math.min(1,Math.max(0,(a-.5)/.12));
+ for(let i=0;
+ i<3;
+ i++){
+ const t=u[i]+(l[i]-u[i])*S;
+ v.data[d+i]=E[i]+(t-E[i])*A}
+ v.data[d+3]=255}
+ }
+ m.putImageData(v,0,0);
+ const _=as.from(w);
+ return _.source.scaleMode="linear",this.regionTex.set(t,_),_}
+ static regionFog(t){
+ const i=nAi.topdownInfo(t);
+ if(!i.verts||!i.tile)return null;
+ const s=WTi.bits(WTi.storeKey(t,i.verts),i.cols*i.rows),e=document.createElement("canvas");
+ e.width=i.cols,e.height=i.rows;
+ const n=e.getContext("2d"),h=n.createImageData(i.cols,i.rows);
+ for(let o=0;
+ o<i.cols*i.rows;
+ o++)h.data[4*o]=cDi[0],h.data[4*o+1]=cDi[1],h.data[4*o+2]=cDi[2],h.data[4*o+3]=WTi.has(s,o)?0:Math.round(.86*255);
+ n.putImageData(h,0,0);
+ const r=as.from(e);
+ return r.source.scaleMode="linear",r}
+ vert(t,i){
+ const s=this.info,e=s.cols+1;
+ if(t<0||i<0||t>s.cols||i>s.rows)return 1;
+ const n=i*e+t;
+ return this.verts[n>>3]>>(7&n)&1}
+ tileIndex(t,i){
+ return 8*this.vert(t,i)+4*this.vert(t+1,i)+2*this.vert(t+1,i+1)+this.vert(t,i+1)}
+ buildMinimap(){
+ const t=this.miniMap;
+ this.miniImg.eventMode=this.miniDots.eventMode=this.miniBg.eventMode="none";
+ for(const s of[this.miniMe,this.miniView,this.miniTarget,this.bigMe,this.bigTarget,this.bigOthers])s.eventMode="none";
+ this.miniMe.circle(0,0,3.5).fill(VIi).circle(0,0,1.6).fill(2825477),this.bigMe.circle(0,0,7).fill(VIi).circle(0,0,3).fill(2825477),this.miniTarget.circle(0,0,2.4).stroke({
+ color:16777215,width:1.5}
+ ),this.bigTarget.circle(0,0,5).stroke({
+ color:16777215,width:1.5}
+ ),this.miniFog.eventMode=this.bigFog.eventMode=this.miniTerr.eventMode=this.bigTerr.eventMode="none",t.addChild(this.miniBg,this.miniImg,this.miniFog,this.miniTerr,this.miniDots,this.miniGoal,this.miniView,this.miniTarget,this.miniMe),t.eventMode="static",t.cursor="pointer",t.on("pointertap",t=>{
+ t.stopPropagation(),this.openBigMap(!0)}
+ );
+ const i=this.bigMap;
+ i.addChild(this.bigDim,this.bigImg,this.bigFog,this.bigTerr,this.bigOthers,this.bigDots,this.bigGoal,this.bigTarget,this.bigMe,this.bigLabels,this.bigClose,this.bigTip),this.bigImg.eventMode=this.bigDots.eventMode=this.bigLabels.eventMode="none",i.eventMode="static",i.visible=!1,this.bigClose.onTap=()=>this.openBigMap(!1),i.on("pointertap",t=>{
+ t.stopPropagation();
+ const s=i.toLocal(t.global),e=this.info;
+ if(!e)return;
+ const n=this.bigImg.width/e.w,h=(s.x-this.bigImg.x)/n,r=(s.y-this.bigImg.y)/n;
+ h<0||r<0||h>e.w||r>e.h?this.openBigMap(!1):this.isLand(h,r)?this.showHint("육지예요 · 물을 눌러 주세요",!0):(this.openBigMap(!1),"sail"!==this.mode&&this.setMode("sail"),this.sailTo(h,r)&&this.marker(h,r,16777215))}
+ )}
+ buildMinimapTexture(){
+ var i,s;
+ const e=this.info;
+ let n;
+ if(null==(i=this.miniTex)||i.destroy(!0),this.miniTex=null,this.verts&&this.water){
+ const t=e.cols+1,i=e.rows+1,h=document.createElement("canvas");
+ h.width=t,h.height=i;
+ const r=h.getContext("2d");
+ r.drawImage(this.water.texture.source.resource,0,0);
+ const o=(null==(s=this.terr)?void 0:s.land)??NDi[this.race].land;
+ r.fillStyle=`rgb(${
+ o[0]}
+ ,${
+ o[1]}
+ ,${
+ o[2]}
+ )`;
+ for(let s=0;
+ s<i;
+ s++)for(let i=0;
+ i<t;
+ i++)this.vert(i,s)&&r.fillRect(i,s,1,1);
+ n=as.from(h),n.source.scaleMode="linear",this.miniTex=n}
+ else n=this.mapSprite.texture;
+ const h=t.MINI/Math.max(e.w,e.h);
+ this.miniImg.texture=n,this.miniImg.width=e.w*h,this.miniImg.height=e.h*h,this.miniImg.position.set(4,4),this.placeMapFog(this.miniFog,this.miniImg),this.miniBg.clear().roundRect(0,0,this.miniImg.width+8,this.miniImg.height+8,8).fill({
+ color:QIi,alpha:.85}
+ ),this.miniMap.position.set(10,this.viewH-this.miniImg.height-18),this.miniMap.hitArea=new Ui(0,0,this.miniImg.width+8,this.miniImg.height+8);
+ const r=this.viewH,o=Math.min((this.viewW-40)/e.w,(r-44-46-14-34-12)/e.h);
+ this.bigImg.texture=n,this.bigImg.width=e.w*o,this.bigImg.height=e.h*o,this.bigImg.position.set((this.viewW-this.bigImg.width)/2,44),this.placeMapFog(this.bigFog,this.bigImg),this.markSig="",this.bigLabels.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const a=RIi.getInstance().areaRows(this.race,this.zone);
+ e.points.forEach((t,i)=>{
+ if(!this.known(i))return;
+ const s=a[i],e=mki(`${
+ RSi(this.race,this.zone,i)}
+  ${
+ s.claimed||s.ready?"✓":`${
+ s.have}
+ /${
+ s.need}
+ `}
+ `,16777215,QIi,11,6);
+ e.position.set(this.bigImg.x+t.x*o-e.width/2,this.bigImg.y+t.y*o-26),this.bigLabels.addChild(e)}
+ )}
+ openBigMap(t){
+ this.bigMap.visible=t,this.miniMap.visible=!t,t&&(this.buildMinimapTexture(),this.bigOthersAt=0,MR.fromTo(this.bigMap,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.18}
+ ))}
+ drawMapMarks(){
+ const t=this.info,i=sNi.get(this.key);
+ for(const e of[this.miniTerr,this.bigTerr])e.visible=!!i;
+ i&&[[this.miniTerr,this.miniImg],[this.bigTerr,this.bigImg]].forEach(([s,e],n)=>{
+ var h;
+ const r=(h=this.terrCanvas)[n]??(h[n]=document.createElement("canvas"));
+ sNi.paint(r,i,t=>this.known(t),this.point,VIi,1===n);
+ let o=this.terrTex[n];
+ o&&o.width===r.width&&o.height===r.height?o.source.update():(null==o||o.destroy(!0),o=this.terrTex[n]=as.from(r),o.source.scaleMode="linear");
+ const a=e.width/t.w;
+ s.texture=o,s.position.set(e.x,e.y),s.width=i.cols*i.tile*a,s.height=i.rows*i.tile*a}
+ );
+ for(const[e,n,h]of[[this.miniDots,this.miniImg,!1],[this.bigDots,this.bigImg,!0]]){
+ const i=n.width/t.w;
+ e.clear(),t.points.forEach((t,s)=>{
+ this.known(s)&&e.circle(n.x+t.x*i,n.y+t.y*i,h?4.5:2).fill(s===this.point?VIi:16777215)}
+ )}
+ for(const[e,n,h]of[[this.miniGoal,this.miniImg,!1],[this.bigGoal,this.bigImg,!0]]){
+ const i=n.width/t.w;
+ e.clear();
+ for(const t of this.goalPoints()){
+ const s=n.x+t.x*i,r=n.y+t.y*i,o=h?7:3.4;
+ e.circle(s,r,o+(h?3:1.6)).fill({
+ color:QIi,alpha:.7}
+ ).circle(s,r,o).fill(VIi),h&&e.circle(s,r,.38*o).fill(2825477)}
+ for(const t of this.hubs){
+ const s=this.hubPlaces.get(t.id);
+ if(!s)continue;
+ const r=n.x+s.x*i,o=n.y+s.y*i,a=h?5:2.4;
+ e.roundRect(r-a,o-a,2*a,2*a,.4*a).fill("offer"===t.state||"ready"===t.state?16773296:14206628).stroke({
+ color:3811860,width:h?1.5:1}
+ )}
+ }
+ const s=this.miniImg.width/t.w;
+ this.miniView.clear().rect(0,0,this.viewW*s,this.viewH*s).stroke({
+ color:16777215,width:1,alpha:.7}
+ )}
+ drawMinimap(t){
+ const i=this.info;
+ if(!i||this.miniImg.texture===as.EMPTY)return;
+ const s=`${
+ this.point}
+ |${
+ this.knownSig()}
+ |${
+ this.miniImg.width}
+ |${
+ this.bigImg.width}
+ |${
+ this.goalSig}
+ |${
+ this.hubSig}
+ `;
+ s!==this.markSig&&(this.markSig=s,this.drawMapMarks());
+ const e=.6+.4*Math.sin(t/250),n=Qt((t,s,n)=>{
+ const h=n.width/i.w;
+ return t.position.set(n.x+this.bx*h,n.y+this.by*h),t.alpha=e,s.visible=!!this.target,this.target&&s.position.set(n.x+this.target.x*h,n.y+this.target.y*h),h}
+ ,"place");
+ if(this.miniMap.visible){
+ const t=n(this.miniMe,this.miniTarget,this.miniImg);
+ this.miniView.position.set(this.miniImg.x-this.world.x*t,this.miniImg.y-this.world.y*t)}
+ if(this.bigMap.visible){
+ const t=n(this.bigMe,this.bigTarget,this.bigImg),i=performance.now();
+ if(i-this.bigOthersAt>500){
+ this.bigOthersAt=i;
+ const s=this.bigOthers.clear();
+ for(const e of this.others.values()){
+ const n=this.otherPos(e,i);
+ s.circle(this.bigImg.x+n.x*t,this.bigImg.y+n.y*t,1.8).fill({
+ color:14675954,alpha:.7}
+ )}
+ }
+ }
+ }
+ buildWater(){
+ const t=this.info,i=t.cols+1,s=t.rows+1,e=t.tile,{
+ canvas:n,dist:h}
+ =ADi(i,s,(t,i)=>this.vert(t,i),this.race,this.zone);
+ this.landDist=h;
+ const r=as.from(n);
+ r.source.scaleMode="linear",this.water=new Ye(r),this.water.position.set(-e/2,-e/2),this.water.width=i*e,this.water.height=s*e,this.water.eventMode="none";
+ const o=nAi.water(),a=Qt((t,i,s,e=16777215)=>{
+ const n=new jp({
+ texture:t,width:this.viewW+128,height:this.viewH+128}
+ );
+ return n.alpha=i,n.blendMode=s,n.tint=e,n.eventMode="none",n}
+ ,"mk");
+ if(this.surf=[a(o.blotch,.32,"normal",135192),a(o.caustic,.11,"add"),a(o.caustic,.08,"add")],!this.fog){
+ const t=new jp({
+ texture:o.blotch,width:this.viewW,height:this.viewH}
+ );
+ t.tint=15660277,t.alpha=0,t.tileScale.set(5.5),t.eventMode="none",this.addChildAt(t,this.getChildIndex(this.birds.sky)),t.mask=null,this.fog=t}
+ this.surf[0].tileScale.set(4.2),this.surf[2].tileScale.set(1.45),this.tileLayer.addChild(this.water,this.underLayer,...this.surf)}
+ drawSurface(t){
+ if(!this.surf.length)return;
+ const i=t/1e3,s=-this.world.x-64,e=-this.world.y-64,n="R"===this.zone?.3:"C"===this.zone?.55:.8,h=[[2.99538,1.99692],[3.5,1.6],[-2.1,2.5]],r=[.27,.085,.06],o=NNi(-this.world.x+this.viewW/2,-this.world.y+this.viewH/2,i,this.zone).height/ONi[this.zone].amplitude;
+ this.surf.forEach((t,a)=>{
+ const[c,l]=h[a];
+ t.position.set(s,e),t.tilePosition.set(c*i*n-s,l*i*n-e),t.alpha=r[a]*(0===a?1:(.85+.15*o)*(2===this.tide?.35:1))}
+ )}
+ updateTiles(t,i){
+ if(!this.terr)return;
+ const s=this.info.tile,e=8*s,n=this.viewH,h=Math.max(0,Math.floor((t-this.viewW/2-3*s)/e)),r=Math.floor((t+this.viewW/2+3*s)/e),o=Math.max(0,Math.floor((i-n/2-s)/e)),a=Math.floor((i+n/2+3*s)/e);
+ for(let c=o;
+ c<=a;
+ c++)for(let t=h;
+ t<=r;
+ t++){
+ const i=`${
+ t}
+ _${
+ c}
+ `;
+ this.regions.has(i)||this.regions.set(i,this.buildRegion(t,c))}
+ for(const[c,l]of this.regions){
+ const[t,i]=c.split("_").map(Number);
+ t>=h-1&&t<=r+1&&i>=o-1&&i<=a+1||(this.regions.delete(c),this.destroyRegion(l))}
+ }
+ destroyRegion(t){
+ t.tiles.destroy({
+ children:!0}
+ ),t.props.destroy({
+ children:!0}
+ ),t.sand.destroy(),t.foam.destroy()}
+ dropRegions(){
+ for(const t of this.regions.values())this.destroyRegion(t);
+ this.regions.clear()}
+ solid(t,i){
+ const s=this.info;
+ return t>=0&&i>=0&&t<s.cols&&i<s.rows&&15===this.tileIndex(t,i)}
+ cellHash(t,i,s=0){
+ return aAi(7919*(this.info.seed??1)+104729*t+1299709*i+15485863*s)}
+ largeAt(t,i){
+ if(t%3||i%3||this.cellHash(t,i,1)%100>=3)return!1;
+ for(let s=i-2;
+ s<=i+1;
+ s++)for(let i=t-1;
+ i<=t+2;
+ i++)if(!this.solid(i,s))return!1;
+ return!0}
+ coveredByLarge(t,i){
+ for(let s=i;
+ s<=i+1;
+ s++)for(let i=t-1;
+ i<=t;
+ i++)if(this.largeAt(i,s))return!0;
+ return!1}
+ placeNpcShips(){
+ const t=this.info;
+ this.npcSpots=t.points.slice(0,3).map((i,s)=>{
+ const e=[[250,-140],[-260,-130],[20,-290],[260,150],[-260,150],[0,300]],n=Qt((t,i)=>[[0,0],[0,-46],[0,46],[-24,0],[24,0]].every(([s,e])=>!this.isLand(t+s,i+e)),"ok"),h=e.find(([t,s])=>n(i.x+t,i.y+s))??e[0];
+ return{
+ x:i.x+h[0],y:i.y+h[1],rot:1.2*(aAi(31*(t.seed??1)+s)%100/100-.5)}
+ }
+ ),this.npcSig="";
+ for(const i of this.npcs)i.ship.destroy(),i.shade.destroy(),i.water.destroy({
+ children:!0}
+ ),i.tag.destroy({
+ children:!0}
+ );
+ this.npcs=[]}
+ setVisitors(t){
+ if(!this.info||!this.npcSpots.length)return;
+ const i=t.map(t=>`${
+ t.key}
+ :${
+ t.state}
+ `).join("|")+this.key;
+ if(i===this.npcSig)return;
+ this.npcSig=i;
+ for(const e of this.npcs)e.ship.destroy(),e.shade.destroy(),e.water.destroy({
+ children:!0}
+ ),e.tag.destroy({
+ children:!0}
+ );
+ this.npcs=[];
+ const s=nAi.gear();
+ t.slice(0,this.npcSpots.length).forEach((t,i)=>{
+ const e=this.npcSpots[i],n=MDi(t.key),h=new Ye(s.npcBoats[n]);
+ h.anchor.set(.5),h.scale.set(_Di),h.rotation=e.rot,h.eventMode="none";
+ const r=(new ip).ellipse(3,5,20,34).fill({
+ color:401450,alpha:.22}
+ );
+ r.position.set(e.x,e.y),r.rotation=e.rot,r.eventMode="none";
+ const o=new Ve;
+ o.eventMode="none";
+ const a=new Ye(s.guestHeads[n]);
+ a.width=a.height=30;
+ const c=mki(`${
+ t.npc}
+  · ${
+ t.role}
+ `,16777215,QIi,11,7),l=a.width+4+c.width;
+ a.position.set(-l/2,-8),c.position.set(-l/2+a.width+4,0),a.alpha=c.alpha="done"===t.state?.55:.95;
+ const u=new Ve;
+ if("done"!==t.state){
+ const i="ready"===t.state,e=new Ye(s.bubbles[i?1:0]);
+ e.anchor.set(.5,XEi),e.scale.set(.15),e.position.set(0,18),u.addChild(e),u.position.set(-l/2+15,-26)}
+ o.addChild(c,a,u);
+ const d=new WNi("nearby",819+397*i);
+ d.alpha=.6,this.npcLayer.addChild(d,r,h),this.npcTags.addChild(o),this.npcs.push({
+ key:t.key,ship:h,shade:r,water:d,tag:o,bubble:u,x:e.x,y:e.y,rot:e.rot,state:t.state,phase:1.7*i}
+ )}
+ )}
+ drawNpcs(t,i){
+ for(const s of this.npcs){
+ const e=this.unexplored(s.x,s.y)||s.x<-this.world.x-120||s.x>-this.world.x+this.viewW+120||s.y<-this.world.y-120||s.y>-this.world.y+this.viewH+120;
+ if(e&&s.water.visible&&s.water.reset(),s.ship.visible=s.shade.visible=s.tag.visible=s.water.visible=!e,e)continue;
+ const n=t/1e3,h=GNi(s.x,s.y,s.rot-Math.PI/2,n,this.zone,4,0,1.5);
+ s.ship.position.set(h.x,h.y),s.ship.rotation=h.rotation,s.ship.scale.set(_Di*h.scaleX,_Di*h.scaleY),s.ship.skew.set(h.skew,0),s.tag.position.set(s.x,s.y-50),s.bubble.y=1.2*Math.sin(.85*n+s.phase)-26,s.shade.position.set(h.waterX,h.waterY),s.shade.rotation=h.rotation,s.water.update(i,{
+ x:h.waterX,y:h.waterY,heading:h.rotation-Math.PI/2,speed:0,level:4,hullScale:1.5,zone:this.zone,time:n,velocity:h.velocity,roll:h.roll,pitch:h.pitch,rollVelocity:h.rollVelocity,pitchVelocity:h.pitchVelocity}
+ ,nAi.foam(),(t,i)=>!this.isLand(t,i))}
+ }
+ npcAt(i,s){
+ for(const e of this.npcs)if(Math.hypot(i-e.x,s-(e.y-8))<=44||t.tagHit(e.tag,i,s))return e.key;
+ return null}
+ static tagHit(t,i,s,e=6){
+ if(!t.visible)return!1;
+ const n=t.getLocalBounds();
+ return i>=t.x+n.x-e&&i<=t.x+n.x+n.width+e&&s>=t.y+n.y-e&&s<=t.y+n.y+n.height+e}
+ setHubs(t){
+ var i;
+ (null==(i=this.info)?void 0:i.tile)&&this.verts||(t=[]);
+ const s=`${
+ this.key}
+ |`+t.map(t=>`${
+ t.id}
+ :${
+ t.state}
+ `).join("|");
+ if(s===this.hubSig)return;
+ this.hubSig=s,this.hubs=t;
+ for(const n of this.hubViews.values())n.body.destroy(),n.shade.destroy(),n.pier.destroy(),n.tag.destroy({
+ children:!0}
+ ),n.ship&&(n.ship.hull.destroy(),n.ship.mast.destroy(),n.ship.water.destroy({
+ children:!0}
+ ));
+ this.hubViews.clear();
+ const e=nAi.gear();
+ t.forEach((t,i)=>{
+ const s=this.hubPlaces.get(t.id)??(t.ship?this.placeShip(t.anchor):null)??this.placeHub(t.anchor);
+ if(!s)return;
+ if(this.hubPlaces.set(t.id,s),s.ship)return void this.addShipHub(t,i,{
+ x:s.x,y:s.y,rot:s.rot??0}
+ );
+ const n=Math.atan2(s.dy-s.y,s.dx-s.x),h=Math.hypot(s.dx-s.x,s.dy-s.y)-6,r=new ip;
+ r.rect(-4,-13,h,26).fill(9071173).stroke({
+ color:5126692,width:2}
+ );
+ for(let e=6;
+ e<h-4;
+ e+=11)r.moveTo(e,-12).lineTo(e,12);
+ r.stroke({
+ color:6112560,width:1.5,alpha:.8}
+ ),r.rect(h-8,-16,6,6).fill(5126692).rect(h-8,10,6,6).fill(5126692),r.position.set(s.x,s.y-4),r.rotation=n;
+ const o=(new ip).ellipse(0,0,12,4.5).fill({
+ color:1714714,alpha:.28}
+ );
+ o.position.set(s.x,s.y);
+ const a=new Ye(e.journeyNpcs[t.art]??e.journeyNpcs[0]);
+ a.anchor.set(.5,250/256),a.scale.set(.15),a.position.set(s.x,s.y);
+ const{
+ tag:c,bubble:l}
+ =this.hubTag(t,!1);
+ this.hubLayer.addChild(r,o,a),this.npcTags.addChild(c),this.hubViews.set(t.id,{
+ body:a,shade:o,pier:r,tag:c,bubble:l,x:s.x,y:s.y,phase:1.3*i}
+ )}
+ ),this.markSig=""}
+ hubTag(t,i){
+ const s=nAi.gear(),e=new Ve,n=i?34:28,h=wki(s.journeyFaces[t.art]??s.journeyFaces[0],n),r=mki(`${
+ t.name}
+  · ${
+ t.role}
+ `,16777215,QIi,i?13:11,7),o=n+4+r.width;
+ h.position.set(-o/2,i?-11:-9),r.position.set(-o/2+n+4,-1),h.alpha=r.alpha="idle"===t.state?.6:.96;
+ const a=new Ye("ready"===t.state?s.bubbles[1]:s.bubbles[0]);
+ return a.anchor.set(.5,XEi),a.scale.set(i?.2:.17),a.visible="offer"===t.state||"ready"===t.state,e.addChild(r,h,a),{
+ tag:e,bubble:a}
+ }
+ placeShip(t){
+ const i=this.info,s=null==i?void 0:i.points[t];
+ if(!i||!s)return null;
+ const e=this.startSpot(t),n=this.labels.children.find(i=>i.label===String(t)),h=56+(n?n.width/2:60),r=84+(n?n.height/2:15),o=Qt((t,i)=>[[0,0],[0,-72],[0,72],[-38,0],[38,0],[-28,-48],[28,-48],[-28,48],[28,48]].every(([s,e])=>!this.isLand(t+s,i+e)),"hullWet"),a=Math.atan2(e.fy-e.by,e.fx-e.bx);
+ let c=null,l=1/0;
+ for(const d of[190,160,220,250,270,150])for(let t=0;
+ t<24;
+ t++){
+ const i=t/24*Math.PI*2,n=e.bx+Math.cos(i)*d,u=e.by+Math.sin(i)*d;
+ if(!o(n,u)||this.shoreDist(n,u)<20)continue;
+ if(Math.abs(n-s.x)<h&&Math.abs(u-s.y)<r)continue;
+ if(Math.hypot(n-e.fx,u-e.fy)<130||this.npcSpots.some(t=>Math.hypot(t.x-n,t.y-u)<170))continue;
+ const f=Math.abs(Math.atan2(Math.sin(i-a),Math.cos(i-a))),p=Math.abs(d-190)+45*(Math.PI-f);
+ p<l&&(l=p,c={
+ x:n,y:u}
+ )}
+ if(!c)return null;
+ const u=Math.atan2(e.by-c.y,e.bx-c.x)+Math.PI/2+.9;
+ return{
+ x:c.x,y:c.y,dx:e.bx,dy:e.by,ship:!0,rot:u}
+ }
+ addShipHub(t,i,s){
+ const e=nAi.gear(),n=new Ye(e.npcBoats[2]??e.npcBoats[0]);
+ n.anchor.set(.5),n.scale.set(yDi),n.rotation=s.rot;
+ const h=(new ip).ellipse(4,8,36,62).fill({
+ color:401450,alpha:.26}
+ );
+ h.position.set(s.x,s.y),h.rotation=s.rot;
+ const r=new ip,o=new Ye(e.journeyNpcs[t.art]??e.journeyNpcs[0]);
+ o.anchor.set(.5,250/256),o.scale.set(.21),o.position.set(s.x,s.y+10);
+ const a=new WNi("nearby",1201+331*i);
+ a.alpha=.7;
+ const{
+ tag:c,bubble:l}
+ =this.hubTag(t,!0);
+ this.hubLayer.addChild(a,h,n,r,o),this.npcTags.addChild(c),this.hubViews.set(t.id,{
+ body:o,shade:h,pier:new ip,tag:c,bubble:l,x:s.x,y:s.y,phase:1.3*i,ship:{
+ hull:n,mast:r,water:a,rot:s.rot,flag:EDi[this.race]??EDi["인간"]}
+ }
+ )}
+ placeHub(t){
+ const i=this.info,s=sNi.get(this.key),e=null==i?void 0:i.points[t];
+ if(!i||!s||!e)return null;
+ const n=s.tile,h=[...this.hubPlaces.values()];
+ let r=null,o=1/0;
+ for(let a=0;
+ a<s.owner.length;
+ a++){
+ if(s.owner[a]!==t)continue;
+ const i=a%s.cols,c=(i+.5)*n,l=((a-i)/s.cols+.5)*n;
+ if(!this.isLand(c,l))for(const[t,s,a]of[[0,-1,0],[-1,0,90],[1,0,90],[0,1,200]]){
+ const i=c+t*n,u=l+s*n;
+ if(!this.isLand(i,u)||!this.isLand(i+t*n*.7,u+s*n*.7)||!this.isLand(i+(s?.5*n:0),u+(t?.5*n:0)))continue;
+ if(h.some(t=>Math.hypot(t.x-i,t.y-u)<300))continue;
+ const d=Math.abs(Math.hypot(c-e.x,l-e.y)-230)+a;
+ d<o&&(o=d,r={
+ x:i-14*t,y:u-14*s,dx:c-34*t,dy:l-34*s}
+ )}
+ }
+ return r}
+ hubNear(t){
+ const i=this.hubPlaces.get(t);
+ return!!i&&Math.hypot(this.bx-i.x,this.by-i.y)<=330}
+ hubPos(t){
+ return this.hubPlaces.get(t)??null}
+ hubAt(i,s){
+ for(const[e,n]of this.hubViews)if(n.body.visible){
+ if(n.ship?Math.abs(i-n.x)<=54&&s>=n.y-140&&s<=n.y+74:Math.abs(i-n.x)<=26&&s>=n.y-bDi-16&&s<=n.y+14)return e;
+ if(t.tagHit(n.tag,i,s))return e}
+ return null}
+ drawHubs(t,i){
+ for(const s of this.hubViews.values()){
+ const e=this.unexplored(s.x,s.y);
+ if(s.body.visible=s.shade.visible=s.pier.visible=s.tag.visible=!e,s.ship&&(e&&s.ship.water.visible&&s.ship.water.reset(),s.ship.hull.visible=s.ship.mast.visible=s.ship.water.visible=!e),e)continue;
+ const n=t/1e3+s.phase;
+ s.ship?this.drawShip(s,t/1e3,n,i):(s.tag.position.set(s.x,s.y-bDi),s.bubble.position.set(-s.tag.width/2+14,2.5*Math.sin(3*n)-12))}
+ }
+ drawShip(t,i,s,e){
+ const n=t.ship,h=GNi(t.x,t.y,n.rot-Math.PI/2,i,this.zone,5,0,2.4);
+ n.hull.position.set(h.x,h.y),n.hull.rotation=h.rotation,n.hull.scale.set(yDi*h.scaleX,yDi*h.scaleY),n.hull.skew.set(h.skew,0),t.shade.position.set(h.waterX,h.waterY),t.shade.rotation=h.rotation;
+ const r=.035*Math.sin(1.3*s);
+ t.body.position.set(t.x,t.y+12);
+ const o=h.x+22,a=h.y+4,c=a-92,l=n.mast.clear();
+ l.moveTo(o,a).lineTo(o+30*r,c).stroke({
+ color:5126692,width:4}
+ ),l.circle(o+30*r,c,3.5).fill(15325616);
+ const u=o+30*r,d=c+4,f=[];
+ for(let p=0;
+ p<=6;
+ p++){
+ const t=p/6;
+ f.push(u+40*t,d+3.2*Math.sin(5.5*i-3*t)*t)}
+ for(let p=6;
+ p>=0;
+ p--){
+ const t=p/6;
+ f.push(u+40*t,d+24*(1-t)+3.2*Math.sin(5.5*i-3*t)*t)}
+ l.poly(f).fill(n.flag).stroke({
+ color:1905672,width:2,alpha:.8}
+ ),l.circle(u+12,d+24*.38,4).fill({
+ color:16777215,alpha:.9}
+ ),t.tag.position.set(t.x,t.y-128),t.bubble.position.set(-t.tag.width/2+16,2.5*Math.sin(3*s)-14),n.water.update(e,{
+ x:h.waterX,y:h.waterY,heading:h.rotation-Math.PI/2,speed:0,level:5,hullScale:2.4,zone:this.zone,time:i,velocity:h.velocity,roll:h.roll,pitch:h.pitch,rollVelocity:h.rollVelocity,pitchVelocity:h.pitchVelocity}
+ ,nAi.foam(),(t,i)=>!this.isLand(t,i))}
+ setGoal(t){
+ const i=t?`${
+ t.points.join(",")}
+ |${
+ t.hub}
+ |${
+ t.label}
+ `:"";
+ i!==this.goalSig&&(this.goalSig=i,this.goal=t,this.goalArrowText="")}
+ goalPoints(){
+ const t=this.goal,i=this.info;
+ if(!t||!i)return[];
+ if(t.hub){
+ const i=this.hubPlaces.get(t.hub);
+ return i?[i]:[]}
+ return t.points.map(t=>i.points[t]).filter(Boolean)}
+ drawGoal(t){
+ const i=this.goalPoints(),s=this.goalMarks.clear();
+ this.goalArrow.visible=!1;
+ const e=this.tutorialRing;
+ if(e){
+ const i=ZCi(t),n=this.tutorialRingScale;
+ s.circle(e.x,e.y,i.r*n).stroke({
+ color:VIi,width:3*n,alpha:i.alpha}
+ ),s.circle(e.x,e.y,7*n).fill(VIi).circle(e.x,e.y,7*n).stroke({
+ color:2825477,width:2.5*n}
+ )}
+ if(!i.length||!this.goal)return;
+ const n=t/1400%1;
+ if(!this.goal.hub)for(const b of i)s.circle(b.x,b.y,22+26*n).stroke({
+ color:VIi,width:3,alpha:.75*(1-n)}
+ ),s.circle(b.x,b.y,7).fill(VIi).circle(b.x,b.y,7).stroke({
+ color:2825477,width:2}
+ );
+ let h=i[0],r=1/0;
+ for(const b of i){
+ const t=Math.hypot(b.x-this.bx,b.y-this.by);
+ t<r&&(r=t,h=b)}
+ const o=h.x+this.world.x,a=h.y+this.world.y,c=this.viewW,l=this.viewH;
+ if(o>46&&o<c-46&&a>86&&a<l-46)return;
+ const u=c/2,d=l/2,f=o-u,p=a-d,g=p>0?44:0,w=Math.min((c/2-46)/Math.max(1e-6,Math.abs(f)),(l/2-46-20-g)/Math.max(1e-6,Math.abs(p))),m=u+f*w,v=d+p*w+10,_=Math.atan2(p,f);
+ if(this.goalArrowText!==this.goal.label){
+ this.goalArrowText=this.goal.label,this.goalArrow.removeChildren().forEach(t=>{
+ t!==this.goalArrowHead&&t.destroy({
+ children:!0}
+ )}
+ );
+ const t=mki(this.goal.label,jIi,VIi,11,7);
+ t.label="tag",this.goalArrowHead.clear().poly([16,0,-8,-11,-3,0,-8,11]).fill(VIi).stroke({
+ color:2825477,width:2}
+ ),this.goalArrow.addChild(this.goalArrowHead,t)}
+ this.goalArrow.visible=!0,this.goalArrow.position.set(m,v),this.goalArrowHead.rotation=_,this.goalArrowHead.position.set(Math.cos(_)*(6+3*Math.sin(t/180)),Math.sin(_)*(6+3*Math.sin(t/180)));
+ const M=this.goalArrow.getChildByLabel("tag");
+ if(M){
+ let t=30*-Math.cos(_)-M.width/2,i=26*-Math.sin(_)-M.height/2;
+ t=Math.max(8-m,Math.min(c-8-m-M.width,t)),i=Math.max(8-v,Math.min(l-8-v-M.height,i)),M.position.set(t,i)}
+ }
+ buildShore(){
+ const t=this.info,i=t.tile,s=8*i,e=[[1,0],[2,1],[1,2],[0,1]],n=[];
+ for(let a=0;
+ a<t.rows;
+ a++)for(let i=0;
+ i<t.cols;
+ i++){
+ const t=this.tileIndex(i,a);
+ if(0===t||15===t)continue;
+ const s=[t>>3&1,t>>2&1,t>>1&1,1&t],h=Qt((t,s)=>n.push([2*i+e[t][0],2*a+e[t][1],2*i+e[s][0],2*a+e[s][1]]),"add");
+ if(5===t){
+ h(0,1),h(2,3);
+ continue}
+ if(10===t){
+ h(3,0),h(1,2);
+ continue}
+ const r=[0,1,2,3].filter(t=>s[t]!==s[(t+1)%4]);
+ 2===r.length&&h(r[0],r[1])}
+ const h=Qt((t,i)=>1e5*i+t,"key"),r=new Map;
+ n.forEach((t,i)=>{
+ for(const s of[h(t[0],t[1]),h(t[2],t[3])]){
+ const t=r.get(s);
+ t?t.push(i):r.set(s,[i])}
+ }
+ );
+ const o=new Uint8Array(n.length);
+ this.shoreRuns.clear();
+ for(let a=0;
+ a<n.length;
+ a++){
+ if(o[a])continue;
+ o[a]=1;
+ const t=[[n[a][0],n[a][1]],[n[a][2],n[a][3]]];
+ for(const i of[!0,!1])for(;
+ ;
+ ){
+ const s=i?t[t.length-1]:t[0],e=(r.get(h(s[0],s[1]))??[]).find(t=>!o[t]);
+ if(void 0===e)break;
+ o[e]=1;
+ const a=n[e],c=a[0]===s[0]&&a[1]===s[1]?[a[2],a[3]]:[a[0],a[1]];
+ i?t.push(c):t.unshift(c)}
+ let e=t.map(t=>[t[0]*i/2,t[1]*i/2]);
+ const c=t.length>2&&t[0][0]===t[t.length-1][0]&&t[0][1]===t[t.length-1][1];
+ for(let i=0;
+ i<3;
+ i++){
+ const t=c?[]:[e[0]];
+ for(let i=0;
+ i<e.length-1;
+ i++){
+ const[s,n]=e[i],[h,r]=e[i+1];
+ t.push([.75*s+.25*h,.75*n+.25*r],[.25*s+.75*h,.25*n+.75*r])}
+ t.push(c?t[0]:e[e.length-1]),e=t}
+ let l=null,u="";
+ for(let i=0;
+ i<e.length-1;
+ i++){
+ const[t,n]=e[i],[h,r]=e[i+1],o=`${
+ Math.floor((t+h)/2/s)}
+ _${
+ Math.floor((n+r)/2/s)}
+ `;
+ if(o!==u||!l){
+ l=[t,n],u=o;
+ const i=this.shoreRuns.get(o);
+ i?i.push(l):this.shoreRuns.set(o,[l])}
+ l.push(h,r)}
+ }
+ }
+ buildRegion(t,i){
+ const s=this.info,e=s.tile,n=this.terr,h=new Ve,r=new Ve;
+ h.eventMode=r.eventMode="none";
+ const o=[];
+ for(let u=8*i;
+ u<Math.min(s.rows,8*i+8);
+ u++)for(let i=8*t;
+ i<Math.min(s.cols,8*t+8);
+ i++){
+ const t=this.tileIndex(i,u);
+ if(t){
+ const s=new Ye(n.terrain[16*(t-1)+u%4*4+i%4]);
+ s.position.set(i*e,u*e),h.addChild(s)}
+ if(!this.solid(i,u))continue;
+ if(this.largeAt(i,u)){
+ const t=n.large[this.cellHash(i,u,2)%n.large.length];
+ o.push({
+ tex:t.tex,x:(i+1)*e,y:(u+1)*e-4,w:t.w,scale:1}
+ );
+ continue}
+ if(!(this.solid(i-1,u)&&this.solid(i+1,u)&&this.solid(i,u-1)&&this.solid(i,u+1)))continue;
+ if(this.coveredByLarge(i,u))continue;
+ const s=this.cellHash(i,u),r=s%100,a=r<50?0:r<85?1:2;
+ for(let h=0;
+ h<a;
+ h++){
+ const t=aAi(s+31337*h),r=t%100,a=r<40?t%6:r<70?6+(t>>>4)%6:r<90?12+(t>>>4)%4:16+(t>>>4)%8,c=n.small[a];
+ o.push({
+ tex:c.tex,x:i*e+12+(t>>>8)%40,y:u*e+22+(t>>>16)%38,w:c.w,scale:1}
+ )}
+ }
+ o.sort((t,i)=>t.y-i.y);
+ const a=new ip;
+ for(const u of o)a.ellipse(u.x+2,u.y-2,u.w*u.scale*.36,Math.max(2.5,u.w*u.scale*.1)).fill({
+ color:662032,alpha:.2}
+ );
+ r.addChild(a);
+ for(const u of o){
+ const t=new Ye(u.tex);
+ t.anchor.set(.5,1),t.position.set(u.x,u.y),t.scale.set(u.scale),r.addChild(t)}
+ const c=new ip,l=new ip;
+ for(const u of this.shoreRuns.get(`${
+ t}
+ _${
+ i}
+ `)??[])u.length<4||(l.poly(u,!1).stroke({
+ color:16777215,width:30,alpha:.16,join:"round",cap:"round"}
+ ),l.poly(u,!1).stroke({
+ color:16055291,width:19,alpha:.42,join:"round",cap:"round"}
+ ),c.poly(u,!1).stroke({
+ color:n.wet,width:13,join:"round",cap:"round"}
+ ),c.poly(u,!1).stroke({
+ color:n.sand,width:8.5,join:"round",cap:"round"}
+ ));
+ return this.tileLayer.addChild(h),this.propLayer.addChild(r),this.shoreLayer.addChild(c),this.shoreFoamLayer.addChild(l),{
+ tiles:h,props:r,sand:c,foam:l}
+ }
+ clearTiles(){
+ var t;
+ this.dropRegions(),null==(t=this.water)||t.destroy(!0),this.water=null;
+ for(const i of this.surf)i.destroy();
+ this.surf=[],this.tileLayer.removeChildren(),this.shoreRuns.clear(),this.terr=null}
+ clearChunks(){
+ const t=this.chunks,i=this.chunkKey;
+ this.chunks=new Map,this.chunkKey=this.key;
+ for(const[s,e]of t){
+ if(!e)continue;
+ e.destroy();
+ const[t,n]=s.split("_").map(Number);
+ nAi.unloadChunk(i,t,n)}
+ }
+ get boatPos(){
+ return this.info?{
+ x:Math.round(this.bx),y:Math.round(this.by),s:this.sailing}
+ :null}
+ setOthers(t){
+ this.otherCandidates=t.filter(t=>t.id!==EG.userId),this.pickOtherBoats(performance.now(),!0)}
+ dropOtherBoat(t){
+ MR.killTweensOf([t.sp,t.name,t.float,t.water]),t.sp.destroy({
+ children:!0}
+ ),t.name.destroy({
+ children:!0}
+ ),t.float.destroy(),t.water.destroy({
+ children:!0}
+ ),t.fixing=!1}
+ pickOtherBoats(i,s=!1){
+ var e;
+ this.otherPickAt=i+500;
+ const n=tDi(this.otherCandidates.map(t=>{
+ const i=this.others.get(t.id),s=i?this.otherPos(i):t;
+ return{
+ id:t.id,x:s.x,y:s.y,angler:t}
+ }
+ ).filter(t=>!this.unexplored(t.x,t.y)),{
+ x:this.bx,y:this.by}
+ ,{
+ x:-this.world.x-80,y:-this.world.y-80,width:this.viewW+160,height:this.viewH+160}
+ ,new Set(this.others.keys())).map(t=>t.angler),h=new Set(n.map(t=>t.id));
+ for(const[t,r]of this.others)h.has(t)||"leave"===r.mode||(r.sp.visible&&r.alpha>.05?(r.mode="leave",r.pending=null,r.away=Math.atan2(r.y-this.by,r.x-this.bx)+(Math.random()-.5)):(this.others.delete(t),this.dropOtherBoat(r)));
+ for(const r of n){
+ let n=this.others.get(r.id);
+ if(!n||s||"leave"===n.mode){
+ if(n){
+ "leave"===n.mode&&(n.mode="fish",n.castAt=i+800+1500*Math.random());
+ const s=Math.hypot(r.x-n.x,r.y-n.y);
+ if(n.tx=r.x,n.ty=r.y,s>=25){
+ const t="sail"===n.mode||r.s;
+ n.pending=this.crossesLand({
+ x:n.x,y:n.y}
+ ,r)?"hop":"sail",n.goAt=i+(t?2500*Math.random():1500+12500*Math.random()),n.cruise=Math.max(30,Math.min(140,s/35))*(.85+n.seed%30/100),"hop"===n.pending&&(n.away=Math.atan2(r.y-n.y,r.x-n.x)+1.2*(Math.random()-.5))}
+ if(r.b!==n.a.b&&(n.hull.texture=nAi.boat(r.b),n.lamp.texture=nAi.gear().lanterns[t.lampGrade(r.b)]),r.lk!==n.a.lk&&(n.crew.texture=t.otherAnglerTex(r.lk)??nAi.gear().angler[0]),!!r.a!=!!n.a.a||r.n!==n.a.n||(r.fx??0)!==(n.a.fx??0)||!!r.fk!=!!n.a.fk){
+ const i=t.otherName(r);
+ i.alpha=n.name.alpha,i.visible=n.name.visible,this.otherNames.addChildAt(i,this.otherNames.getChildIndex(n.name)),n.name.destroy({
+ children:!0}
+ ),n.name=i}
+ n.a=r}
+ else{
+ if(this.others.size>=30)continue;
+ const s=nAi.gear(),h=s.info.boats[nAi.boatArt(r.b)],o=s.info.angler[0],a=new Ve,c=new Ye(nAi.boat(r.b)),l=new Ye(t.otherAnglerTex(r.lk)??s.angler[0]),u=new Ye(s.lanterns[t.lampGrade(r.b)]);
+ c.anchor.set(.5),l.anchor.set((128+o.body[0])/256,(128+o.body[1])/256),l.position.set(h.seat[0],h.seat[1]),l.scale.set(.37500000000000006),u.anchor.set(.5),u.position.set(h.lantern[0],h.lantern[1]),u.scale.set(.5555555555555556),a.addChild(c,l,u),a.scale.set(oDi),a.alpha=0,this.othersLayer.addChild(a);
+ const d=new WNi("nearby",mDi(r.id));
+ d.alpha=0,this.othersWater.addChild(d);
+ const f=mDi(r.id)%Math.max(1,s.floats.length),p=new Ye(pDi(s.floats[f],f));
+ p.anchor.set(.5,1),p.scale.set(uDi),p.alpha=0,this.othersFloats.addChild(p);
+ const g=t.otherName(r);
+ g.alpha=0,this.otherNames.addChild(g),n={
+ a:r,sp:a,hull:c,lamp:u,name:g,rot:Math.random()*Math.PI*2,seenCatch:(null==(e=r.c)?void 0:e.at)??0,catchAt:0,dist:0,px:r.x,py:r.y,x:r.x,y:r.y,v:0,tx:r.x,ty:r.y,cruise:40,alpha:0,mode:"fish",pending:null,goAt:0,away:0,crew:l,float:p,fx:0,fy:0,fAlpha:0,seed:mDi(r.id)%1e3,fSet:!1,fly:null,castAt:i+600+2e3*Math.random(),recastAt:0,water:d}
+ ,this.others.set(r.id,n)}
+ r.c&&r.c.at>n.seenCatch&&(n.seenCatch=r.c.at,n.catchAt=i,this.otherCatch(n,r.c.id,r.c.star,r.c.g??0))}
+ }
+ }
+ otherPos(t,i){
+ return{
+ x:t.x,y:t.y}
+ }
+ crossesLand(t,i){
+ const s=Math.hypot(i.x-t.x,i.y-t.y),e=Math.ceil(s/48);
+ for(let n=1;
+ n<e;
+ n++)if(this.isLand(t.x+(i.x-t.x)*n/e,t.y+(i.y-t.y)*n/e))return!0;
+ return!1}
+ stepOther(t,i,s){
+ t.pending&&i>=t.goAt&&(t.mode=t.pending,t.pending=null);
+ const e=Qt(i=>{
+ t.rot+=Math.max(-.7*s,Math.min(.7*s,BDi(i,t.rot)))}
+ ,"turn");
+ if("fish"===t.mode){
+ const i=Math.min(1,.15*s);
+ t.x+=(t.tx-t.x)*i,t.y+=(t.ty-t.y)*i,t.v*=Math.max(0,1-2*s),t.alpha+=(this.otherAlpha(t)-t.alpha)*Math.min(1,1.5*s)}
+ else if("sail"===t.mode){
+ const n=t.tx-t.x,h=t.ty-t.y,r=Math.hypot(n,h),o=BDi(Math.atan2(h,n),t.rot);
+ e(Math.atan2(h,n));
+ const a=Math.min(t.cruise,6+.6*r)*Math.max(.15,Math.cos(o));
+ t.v+=(a-t.v)*Math.min(1,.9*s);
+ const c=t.x+Math.cos(t.rot)*t.v*s,l=t.y+Math.sin(t.rot)*t.v*s;
+ this.isLand(c+14*Math.cos(t.rot),l+14*Math.sin(t.rot))?(t.mode="hop",t.away=t.rot+.9*(Math.random()<.5?-1:1)):(t.x=c,t.y=l),r<8&&(t.mode="fish",t.castAt=i+800+1800*Math.random()),t.alpha+=(this.otherAlpha(t)-t.alpha)*Math.min(1,1.5*s)}
+ else{
+ e(t.away),t.v+=(40-t.v)*Math.min(1,.8*s);
+ const n=t.x+Math.cos(t.rot)*t.v*s,h=t.y+Math.sin(t.rot)*t.v*s;
+ this.isLand(n,h)?t.v*=.5:(t.x=n,t.y=h),t.alpha=Math.max(0,t.alpha-s*DDi/2.8),"hop"===t.mode&&t.alpha<=.01&&(t.x=t.tx,t.y=t.ty,t.v=0,t.mode="fish",t.rot=Math.random()*Math.PI*2,t.fSet=!1,t.fly=null,t.castAt=i+1200+1500*Math.random())}
+ }
+ pickOtherFloat(t,i){
+ const s=t.rot+.25*(t.seed%7-3)+(i?2.4*(Math.random()-.5):0);
+ for(let e=0;
+ e<8;
+ e++){
+ const n=s+(e%2?1:-1)*Math.ceil(e/2)*.7,h=60+(t.seed+(i?40*Math.random():0))%35,r=t.x+Math.cos(n)*h,o=t.y+Math.sin(n)*h;
+ if(!(this.isLand(r,o)||i&&Math.hypot(r-t.fx,o-t.fy)<25))return t.fx=r,t.fy=o,!0}
+ return!1}
+ drawOthers(t,i){
+ const s=performance.now(),e=this.viewH;
+ s>=this.otherPickAt&&this.pickOtherBoats(s);
+ const n=-this.world.x-80,h=-this.world.x+this.viewW+80,r=-this.world.y-80,o=-this.world.y+e+80,a=this.othersLines.clear(),c=t/1e3,l=nAi.gear();
+ for(const[d,f]of this.others){
+ if(this.stepOther(f,s,i),"leave"===f.mode&&f.alpha<=.01){
+ this.others.delete(d),this.dropOtherBoat(f);
+ continue}
+ const t=this.otherPos(f),e=t.x>n&&t.x<h&&t.y>r&&t.y<o&&!this.unexplored(t.x,t.y);
+ if(f.sp.visible=e,!e){
+ f.name.visible=!1,f.float.visible=!1,f.water.visible&&f.water.reset(),f.water.visible=!1;
+ continue}
+ f.sp.alpha=f.alpha,f.v;
+ const u=GNi(t.x,t.y,f.rot,c,this.zone,f.a.b,f.v);
+ f.sp.position.set(u.x,u.y),f.sp.rotation=u.rotation,f.sp.scale.set(oDi*u.scaleX,oDi*u.scaleY),f.sp.skew.set(u.skew,0),f.water.visible=!0;
+ const p=Math.hypot(t.x-this.bx,t.y-this.by);
+ f.water.alpha=f.alpha/DDi*(.42+.25*Math.max(0,1-p/500)),f.water.update(i,{
+ x:u.waterX,y:u.waterY,heading:u.rotation-Math.PI/2,speed:f.v,level:f.a.b,zone:this.zone,time:c,velocity:u.velocity,roll:u.roll,pitch:u.pitch,rollVelocity:u.rollVelocity,pitchVelocity:u.pitchVelocity}
+ ,nAi.foam(),(t,i)=>!this.isLand(t,i)),f.lamp.rotation=.65*-u.roll+.012*Math.sin(c/2.2+f.seed);
+ const g=l.info.boats[nAi.boatArt(f.a.b)],w=f.sp.scale.x,m=f.sp.scale.y,v=f.sp.rotation,_=f.sp.skew.x,M=f.sp.x+g.seat[0]*Math.cos(v)*w-g.seat[1]*Math.sin(v-_)*m,b=f.sp.y+g.seat[0]*Math.sin(v)*w+g.seat[1]*Math.cos(v-_)*m;
+ if("fish"!==f.mode||f.a.s||f.pending&&s>f.goAt-1200||f.a.fx&&f.a.fx>Date.now())f.fSet=!1,f.fly=null;
+ else if(!f.fSet&&s>=f.castAt&&f.fAlpha<.05)if(this.pickOtherFloat(f,f.recastAt>0)){
+ const t=Math.atan2(f.fy-b,f.fx-M);
+ f.fly={
+ x0:M+9*Math.cos(t),y0:b+9*Math.sin(t),t0:s}
+ ,f.fSet=!0,f.fAlpha=1,f.recastAt=s+GDi[0]+Math.random()*(GDi[1]-GDi[0])}
+ else f.castAt=s+3e3;
+ else f.fSet&&!f.fly&&s>=f.recastAt&&(f.fSet=!1,f.castAt=s+650);
+ if(f.fly||(f.fAlpha+=((f.fSet?1:0)-f.fAlpha)*Math.min(1,5*i)),f.float.visible=f.fAlpha>.02,f.float.visible){
+ let t,e;
+ if(f.fly){
+ const i=Math.min(1,(s-f.fly.t0)/480),n=4*(14+.12*Math.hypot(f.fx-f.fly.x0,f.fy-f.fly.y0))*i*(1-i);
+ t=f.fly.x0+(f.fx-f.fly.x0)*i,e=f.fly.y0+(f.fy-f.fly.y0)*i-n,f.float.rotation=0,i>=1&&(f.fly=null,this.ripples.push({
+ x:f.fx,y:f.fy,age:0,life:1.2,r0:3,r1:14,alpha:.32}
+ ))}
+ else{
+ const s=LNi(f.fx,f.fy,c,this.zone);
+ t=s.x,e=s.y,f.float.rotation=s.rotation,f.fSet&&Math.random()<.08*i&&this.ripples.push({
+ x:t,y:e,age:0,life:2.1,r0:4,r1:13,alpha:.16*f.fAlpha}
+ )}
+ f.float.position.set(t,e),f.float.alpha=f.fAlpha*f.alpha/DDi;
+ const n=Math.atan2(f.fy-b,f.fx-M);
+ f.crew.rotation=BDi(n+Math.PI/2,v)*Math.min(1,1.5*f.fAlpha);
+ const h=M+9*Math.cos(n),r=b+9*Math.sin(n);
+ a.moveTo(h,r).quadraticCurveTo((h+t)/2,(r+e)/2+9,t,e-3).stroke({
+ color:16053480,width:.45,alpha:.45*f.float.alpha}
+ )}
+ else f.crew.rotation*=Math.max(0,1-3*i);
+ f.dist=Math.hypot(t.x-this.bx,t.y-this.by),f.px=f.sp.x,f.py=f.sp.y}
+ const u=[...this.others.values()].filter(t=>t.sp.visible&&"leave"!==t.mode).sort((t,i)=>t.dist-i.dist);
+ for(const d of this.others.values())"leave"===d.mode&&(d.name.visible=!1);
+ u.forEach((t,i)=>{
+ const e=s-t.catchAt<4e3;
+ t.name.visible=i<6||e,t.name.visible&&(t.name.position.set(t.px-t.name.width/2,t.py-34),t.name.alpha=t.a.fx&&t.a.fx>Date.now()?1:(e?1:.7)*t.alpha/DDi)}
+ ),this.drawPlunder(t)}
+ setFixing(t){
+ this.repairFx.setMine(t?{
+ broken:t.broken,progress:t.progress??0}
+ :null);
+ const i=!!t;
+ i&&!this.fixingNow&&(this.hideRodBalloon(),this.reelIn(),this.afterFixAt=0),!i&&this.fixingNow&&(this.afterFixAt=performance.now()+1600),this.fixingNow=i}
+ repairStarted(){
+ this.repairFx.markFresh()}
+ repairFinished(){
+ this.repairFx.finish()}
+ drawFixing(t){
+ const i=nAi.gear(),s=128+i.info.angler[0].body[1],e=Date.now(),n=[];
+ for(const[h,r]of this.others){
+ const t=i.info.boats[nAi.boatArt(r.a.b)];
+ if(r.a.fx&&r.a.fx>e&&r.sp.visible&&"leave"!==r.mode&&r.alpha>.2){
+ const i=r.sp.rotation,s=r.sp.scale.x;
+ n.push({
+ id:h,broken:!!r.a.fk,face:i,x:r.sp.x+(t.seat[0]*Math.cos(i)-t.seat[1]*Math.sin(i))*s,y:r.sp.y+(t.seat[0]*Math.sin(i)+t.seat[1]*Math.cos(i))*s}
+ )}
+ else r.fixing&&(r.fixing=!1,r.crew.texture=DPi(r.crew.texture),r.crew.anchor.y=s/256,r.crew.position.set(t.seat[0],t.seat[1]))}
+ this.repairFx.update({
+ x:this.angler.x,y:this.angler.y,face:this.anglerRot}
+ ,{
+ sprite:this.boat}
+ ,n);
+ for(const h of n){
+ const t=this.others.get(h.id),e=this.repairFx.crewFor(h.id);
+ if(!t||!e)continue;
+ const n=i.info.boats[nAi.boatArt(t.a.b)];
+ t.fixing=!0,t.crew.texture=NPi(t.crew.texture,e.crop),t.crew.anchor.y=LPi(s,e.crop),t.crew.rotation=0,t.crew.position.set(n.seat[0],n.seat[1]-e.lean/Math.max(.01,t.sp.scale.y))}
+ }
+ cameraShake(t,i){
+ this.shakeAmp=Math.max(t,performance.now()<this.shakeUntil?this.shakeAmp:0),this.shakeUntil=Math.max(this.shakeUntil,performance.now()+i)}
+ boatHit(t,i=!1){
+ this.rockUntil=performance.now()+(i?2600:t>0?1800:900),this.splash(this.bx,this.by+6,i?18:t>0?10:5,15004914,i?30:t>0?20:10),i?this.floatTag("고장!",16739179,this.bx,this.by-70):this.floatTag(t>0?`내구도 −${
+ nSi(t)}
+ `:"끄떡없음",t>0?16751752:8378016,this.bx,this.by-64)}
+ bossGiant(t){
+ if(this.giants.length)return!0;
+ for(const i of[!0,!1,!1])if(this.spawnGiant(i,t)||this.spawnGiant(i))return!0;
+ return!1}
+ get hasBossShadow(){
+ return this.giants.some(t=>!t.leaving&&t.vanish<.5)}
+ bossShadow(t){
+ const i=this.giants.find(t=>!t.leaving&&t.vanish<.5);
+ if(!i)return null;
+ const s=-this.world.x+this.viewW/2,e=-this.world.y+this.viewH/2;
+ let n=Math.hypot(i.x-this.bx,i.y-this.by),h=!1;
+ const r=i.trail.slice(-Math.ceil(i.L/4));
+ for(let o=0;
+ o<r.length;
+ o+=3){
+ const t=r[o];
+ n=Math.min(n,Math.hypot(t.x-this.bx,t.y-this.by)),Math.abs(t.x-s)<this.viewW/2-10&&Math.abs(t.y-e)<this.viewH/2-10&&(h=!0)}
+ return Math.abs(i.x-s)<this.viewW/2&&Math.abs(i.y-e)<this.viewH/2&&(h=!0),h=h&&i.view.alpha>.12,{
+ near:h&&n<=t,dist:n,seen:h}
+ }
+ bossPoint(){
+ const t=this.giants.find(t=>!t.leaving);
+ if(!t)return{
+ x:this.bx+40,y:this.by-110}
+ ;
+ let i={
+ x:t.x,y:t.y}
+ ,s=Math.hypot(t.x-this.bx,t.y-this.by);
+ for(const e of t.trail.slice(-Math.ceil(t.L/4))){
+ const t=Math.hypot(e.x-this.bx,e.y-this.by);
+ t<s&&(s=t,i=e)}
+ return{
+ x:i.x,y:i.y}
+ }
+ harpoonBodyPoint(i,s){
+ var e;
+ const n={
+ alpha:i.view.alpha,tint:i.view.tint,blur:(null==(e=i.blur)?void 0:e.strength)??.35+i.depth*i.depth*4}
+ ,h=tNi(i,s);
+ if(h)return{
+ ...h,x:i.view.x+h.x,y:i.view.y+h.y,...n}
+ ;
+ const r=i.L*(1+.06*(1-i.depth)),o=r*s,a=t.trailAt(i.trail,i,o);
+ let c=a.x,l=a.y,u=t.trailDir(i.trail,i,o,.06*r);
+ if(i.rig){
+ const e=t.trailDir(i.trail,i,.18*r,.13*r),n=t.trailAt(i.trail,i,.2*r),h=gNi(i.kind,s),d=n.x-Math.cos(e)*(o-.2*r),f=n.y-Math.sin(e)*(o-.2*r);
+ c=d+(a.x-d)*h,l=f+(a.y-f)*h,u=e+BDi(u,e)*h}
+ else if(!i.spine){
+ const t=SDi[i.kind],e=t.amp*r*Math.pow(s,t.tailPow)*Math.sin(i.phase-s*t.wave);
+ c-=Math.sin(a.a)*e,l+=Math.cos(a.a)*e}
+ return{
+ x:c,y:l,angle:u,...n}
+ }
+ captureHarpoonTarget(t){
+ var i;
+ const s=this.giants.find(t=>!t.leaving&&t.vanish<.5&&t.view.alpha>.12);
+ if(!s||!(null==(i=this.bossShadow(t))?void 0:i.near))return null;
+ let e=.35,n=1/0;
+ for(let o=.18;
+ o<=.66;
+ o+=.04){
+ const i=this.harpoonBodyPoint(s,o),h=Math.hypot(i.x-this.bx,i.y-this.by),r=i.x+this.world.x,a=i.y+this.world.y,c=h+3*Math.max(0,64-h);
+ h<=t&&c<n&&r>=12&&r<=this.viewW-12&&a>=12&&a<=this.viewH-12&&(n=c,e=o)}
+ if(!Number.isFinite(n))return null;
+ const h=this.harpoonBodyPoint(s,e),r=(this.bx-h.x)*-Math.sin(h.angle)+(this.by-h.y)*Math.cos(h.angle)>=0?1:-1;
+ return{
+ point:h,sample:Qt(()=>s.view.destroyed?null:this.harpoonBodyPoint(s,e),"sample"),missOffset:r*Math.max(44,Math.min(100,.3*s.L)),hit:Qt((t=1)=>{
+ var i;
+ if(s.view.destroyed)return;
+ s.effort=Math.min(1,s.effort+.025);
+ const e=zPi(r);
+ s.flinch={
+ at:performance.now(),power:t,dx:e.x,dy:e.y,base:(null==(i=s.flinch)?void 0:i.base)??s.view.tint}
+ }
+ ,"hit")}
+ }
+ get harpoonBusy(){
+ return this.harpoonFxs.some(t=>!t.destroyed&&!t.landed)}
+ cancelHarpoon(){
+ for(const t of this.harpoonFxs)t.cancel();
+ this.harpoonFxs=[],this.setAimMark(null),this.line.destroyed||(this.line.visible=!0)}
+ setAimMark(t,i=16777215,s=0,e=!1){
+ var n;
+ if(!t)return null==(n=this.aimMark)||n.destroy(),void(this.aimMark=null);
+ this.aimMark&&!this.aimMark.destroyed||(this.aimMark=new ip,this.aimMark.eventMode="none",this.worldTop.addChild(this.aimMark));
+ const h=e?9:16-7*Math.max(0,Math.min(1,s)),r=this.aimMark.clear();
+ r.circle(0,0,h).stroke({
+ color:399649,width:4,alpha:.45}
+ ).circle(0,0,h).stroke({
+ color:i,width:2,alpha:.95}
+ );
+ for(let o=0;
+ o<4;
+ o++){
+ const t=o*Math.PI/2+Math.PI/4,s=Math.cos(t),e=Math.sin(t);
+ r.moveTo(s*(h+3),e*(h+3)).lineTo(s*(h+9),e*(h+9)).stroke({
+ color:i,width:2,alpha:.9}
+ )}
+ r.circle(0,0,1.6).fill(i),r.position.set(t.x,t.y)}
+ harpoonStrike(t,i,s,e,n={
+ }
+ ){
+ if(!this.running||this.harpoonBusy)return Promise.resolve(!1);
+ this.setAimMark(null);
+ const h=new QPi(t,i,s,e,{
+ release:n.release,impact:Qt((t=0)=>{
+ var i;
+ const s=qPi(t);
+ s.amp&&this.cameraShake(s.amp,s.ms),null==(i=n.impact)||i.call(n,t)}
+ ,"impact")}
+ ,()=>({
+ x:12-this.world.x,y:12-this.world.y,width:this.viewW-24,height:this.viewH-24}
+ ));
+ return this.harpoonFxs.push(h),this.giantLayer.addChild(h.underwater),this.hitLayer.addChild(h),this.worldTop.addChild(h.result),h.done}
+ helpFx(t,i=null,s="수리 +3%"){
+ const e=Qt(()=>{
+ if("me"===t)return{
+ x:this.angler.x,y:this.angler.y-8}
+ ;
+ const i=this.boatPoint(t);
+ return i?{
+ x:i.x,y:i.y-8}
+ :null}
+ ,"target"),n=i?this.boatPoint(i):"me"===t?null:this.boatPoint("me");
+ this.repairFx.help(n?{
+ x:n.x,y:n.y-20}
+ :null,e,()=>{
+ const i=e();
+ i&&("me"===t&&this.repairFx.helpPunch(),this.floatTag(s,16106577,i.x,i.y-64))}
+ )}
+ otherAlpha(t){
+ return t.a.a?.62*DDi:DDi}
+ static otherName(t){
+ return t.fx&&t.fx>Date.now()?mki(`${
+ t.fk?"고장":"수리 중"}
+  · ${
+ t.n}
+ `,16777215,t.fk?11879211:10115614,10,5):mki(t.a?`Zz ${
+ t.n}
+ `:t.n,t.a?13096664:16777215,QIi,10,5)}
+ otherAt(t,i){
+ let s=null,e=30;
+ for(const n of this.others.values()){
+ if(!n.sp.visible||"leave"===n.mode||n.alpha<.2)continue;
+ const h=Math.hypot(t-n.x,i-n.y);
+ h<=e&&(e=h,s=n)}
+ return s}
+ boatPoint(t){
+ if("me"===t)return{
+ x:this.bx,y:this.by}
+ ;
+ const i=this.others.get(t);
+ return i&&"leave"!==i.mode?{
+ x:i.x,y:i.y}
+ :null}
+ setPlunder(t,i){
+ this.ropes=t,this.plunderFocus=i}
+ drawPlunder(t){
+ const i=this.plunderG.clear(),s=t/1e3,e=Qt(t=>{
+ if("me"===t)return{
+ x:this.boat.x,y:this.boat.y}
+ ;
+ const i=this.others.get(t);
+ return i&&i.sp.visible?{
+ x:i.sp.x,y:i.sp.y}
+ :null}
+ ,"at");
+ for(const n of this.ropes){
+ const t=e(n.from),h=e(n.to);
+ if(!t||!h)continue;
+ const r=n.tension??0,o=n.tp??0,a=Math.hypot(h.x-t.x,h.y-t.y),c=Math.min(26,6+.08*a)*(1+.15*Math.sin(1.7*s))*(1-.18*r*o),l=r?Math.sin(s*(28+8*r))*(1.2+1.4*r)*(.4+o):0,u=-(h.y-t.y)/(a||1),d=(h.x-t.x)/(a||1),f=(t.x+h.x)/2+u*l,p=(t.y+h.y)/2+c+d*l,g=r>=3?16739211:2===r?16106577:1===r?14862735:13213802;
+ if(r>=2&&i.moveTo(t.x,t.y).quadraticCurveTo(f,p,h.x,h.y).stroke({
+ color:g,width:6+2*Math.sin(10*s),alpha:.22+.2*o}
+ ),i.moveTo(t.x,t.y).quadraticCurveTo(f,p,h.x,h.y).stroke({
+ color:2759182,width:3.2,alpha:.55}
+ ),i.moveTo(t.x,t.y).quadraticCurveTo(f,p,h.x,h.y).stroke({
+ color:g,width:1.6+(r>=2?.8:0),alpha:.95}
+ ),r&&Math.random()<.05*r*(.5+o)){
+ const i=Math.random()*Math.PI*2,s=14+18*Math.random(),e="me"===n.to?t:h;
+ this.ripples.push({
+ x:e.x+Math.cos(i)*s,y:e.y+Math.sin(i)*s,age:0,life:.7,r0:3,r1:10+3*r,alpha:.45}
+ )}
+ const w=Math.atan2(h.y-p,h.x-f);
+ i.arc(h.x-6*Math.cos(w),h.y-6*Math.sin(w),5,w-.4,w+.9*Math.PI).stroke({
+ color:14673640,width:1.6,alpha:.9}
+ )}
+ if(this.drawSnaps(i),this.plunderFocus){
+ const t=e(this.plunderFocus);
+ if(t){
+ const e=1+.06*Math.sin(3*s);
+ i.circle(t.x,t.y,30*e).stroke({
+ color:VIi,width:2,alpha:.85}
+ ),i.circle(t.x,t.y,30*e+5).stroke({
+ color:VIi,width:1,alpha:.3}
+ )}
+ }
+ }
+ plunderFly(t,i,s,e){
+ const n=this.boatPoint(t),h=this.boatPoint(i);
+ if(!n||!h)return;
+ let r,o=null,a=1;
+ if(s){
+ if(r=new Ve,o=new Ye(nAi.fish(s.id)),o.anchor.set(.5),a=40/Math.max(o.texture.width,o.texture.height,1),o.scale.set(h.x<n.x?-a:a,a),r.addChild(o),s.grade>=1){
+ const t=mki(["","B","A","S"][s.grade],16777215,eki[s.grade],9,4);
+ t.position.set(10,-22),r.addChild(t)}
+ }
+ else r=(new ip).ellipse(0,0,9,4.5).fill(12178652).ellipse(0,0,9,4.5).stroke({
+ color:2373180,width:1.2}
+ ).poly([-8,0,-14,-5,-14,5]).fill(12178652).circle(5,-1,1.1).fill(1778727);
+ r.eventMode="none",this.flyLayer.addChild(r);
+ const c=Math.hypot(h.x-n.x,h.y-n.y),l=Math.min(26,6+.08*c),u={
+ t:0}
+ ;
+ MR.to(u,{
+ t:1,duration:1.1,ease:"power1.inOut",onUpdate:Qt(()=>{
+ const t=u.t,i=(n.x+h.x)/2,s=(n.y+h.y)/2+l,e=(1-t)*(1-t)*n.x+2*(1-t)*t*i+t*t*h.x,a=(1-t)*(1-t)*n.y+2*(1-t)*t*s+t*t*h.y-10*Math.sin(t*Math.PI);
+ r.position.set(e,a),o?(r.scale.set(.85+.35*Math.sin(t*Math.PI)),o.rotation=.25*Math.sin(22*t)):r.rotation=Math.atan2(h.y-n.y,h.x-n.x)+.35*Math.sin(18*t)}
+ ,"onUpdate"),onComplete:Qt(()=>{
+ r.destroy({
+ children:!0}
+ ),this.splash(h.x,h.y,4,15004914,10);
+ const t=this.boatPoint(i)??h;
+ s&&s.grade>=2&&(this.burst(t.x,t.y,s.grade>=3?26:14,eki[s.grade]),this.splash(t.x,t.y,8,16777215,20)),e&&this.floatTag(e.text,e.color,t.x,t.y-64)}
+ ,"onComplete")}
+ ),this.splash(n.x,n.y,3,15004914,8)}
+ ropeSnap(t,i){
+ this.snaps.push({
+ a:t,b:i,t0:performance.now()}
+ );
+ const s=this.boatPoint(t),e=this.boatPoint(i);
+ s&&e&&this.splash((s.x+e.x)/2,(s.y+e.y)/2+12,8,15004914,18)}
+ drawSnaps(t){
+ const i=performance.now();
+ this.snaps=this.snaps.filter(t=>i-t.t0<900);
+ for(const s of this.snaps){
+ const e=this.boatPoint(s.a),n=this.boatPoint(s.b);
+ if(!e||!n)continue;
+ const h=(i-s.t0)/900,r=1-h,o=(e.x+n.x)/2,a=(e.y+n.y)/2,c=6+26*h,l=30*h;
+ for(const[i,s]of[[e,-1],[n,1]]){
+ const e=o+s*c,n=a+l;
+ t.moveTo(i.x,i.y).quadraticCurveTo((i.x+e)/2,(i.y+n)/2+10+.5*l,e,n).stroke({
+ color:13213802,width:1.6,alpha:r}
+ )}
+ }
+ }
+ sailNearBoat(t){
+ const i=this.boatPoint(t);
+ if(!i)return!1;
+ const s=Math.atan2(this.by-i.y,this.bx-i.x);
+ for(let e=0;
+ e<12;
+ e++){
+ const t=s+(e%2?1:-1)*Math.ceil(e/2)*.5,n=i.x+85*Math.cos(t),h=i.y+85*Math.sin(t);
+ if(!this.isLand(n,h)&&("sail"!==this.mode&&this.setMode("sail"),this.sailTo(n,h)))return this.hideRodBalloon(),this.marker(n,h,VIi),!0}
+ return!1}
+ otherCatch(t,i,s,e=0){
+ const n=performance.now(),h=this.otherPos(t,n),r=new Ye(nAi.fish(i));
+ r.anchor.set(.5),r.width=r.height=30;
+ const o=mki(`★${
+ s}
+ ${
+ fTi(e)}
+  ${
+ t.a.n}
+ `,16777215,e>=2?eki[e]:ski[Math.min(5,s)],10,6);
+ o.position.set(h.x-o.width/2,h.y-70),this.flyLayer.addChild(r,o);
+ const a={
+ h:0}
+ ;
+ MR.timeline({
+ onComplete:Qt(()=>{
+ r.destroy(),o.destroy({
+ children:!0}
+ )}
+ ,"onComplete")}
+ ).to(a,{
+ h:1,duration:.7,ease:"none",onUpdate:Qt(()=>{
+ r.position.set(h.x+18*a.h,h.y-240*a.h*(1-a.h)+10),r.rotation=1.2*(a.h-.5)}
+ ,"onUpdate")}
+ ).from(o,{
+ alpha:0,y:o.y+8,duration:.25}
+ ,0).to([r,o],{
+ alpha:0,duration:.5}
+ ,2.2),this.splash(h.x+10,h.y,5,15004914,16),(s>=5||3===e)&&this.burst(h.x,h.y,14,3===e?eki[3]:ski[5])}
+ waterAround(t){
+ const i=[],s=[90,520,120];
+ for(let e=0;
+ e<t;
+ e++){
+ const t=s[e%s.length];
+ for(let s=0;
+ s<24;
+ s++){
+ const n=2.1*e+.55*s,h=this.bx+Math.cos(n)*t,r=this.by+Math.sin(n)*t;
+ if(!(this.isLand(h,r)||this.info&&(h<0||r<0||h>this.info.w||r>this.info.h))){
+ i.push({
+ x:Math.round(h),y:Math.round(r),p:sNi.at(this.key,h,r)}
+ );
+ break}
+ }
+ }
+ return i}
+ sampleWater(t){
+ var i;
+ const s=(null==(i=this.info)?void 0:i.points)??[],e=[],n=this.info;
+ for(let h=0;
+ e.length<t&&h<60*t;
+ h++){
+ let t,i;
+ if(Math.random()<.4){
+ const e=s[Math.floor(Math.random()*s.length)],h=Math.random()*Math.PI*2,r=60+Math.random()*(n.w>1500?380:200);
+ t=e.x+Math.cos(h)*r,i=e.y+Math.sin(h)*r}
+ else t=Math.random()*n.w,i=Math.random()*n.h;
+ this.isLand(t,i)||e.push({
+ x:Math.round(t),y:Math.round(i),p:sNi.at(this.key,t,i)}
+ )}
+ return e}
+ get loadedChunks(){
+ return[...this.chunks.values()].filter(Boolean).length}
+ setTutorial(t){
+ this.tut=t,this.layoutView(),this.tutorialMoveBtn=!1,this.tutorialRing=null;
+ for(const i of[this.othersLayer,this.othersFloats,this.othersLines,this.otherNames,this.othersWater,this.plunderG])i.visible=!t;
+ t?this.applyTutorialHud():(this.modeBtn.visible=!0,this.miniMap.visible=!this.bigMap.visible)}
+ get inTutorial(){
+ return this.tut}
+ applyTutorialHud(){
+ this.hud.visible=!0,this.hud.alpha=1,this.hint.visible=!1,this.goalArrow.visible=!1,this.miniMap.visible=!1,this.modeBtn.visible=this.tutorialMoveBtn}
+ tutorialSail(t,i){
+ return!(!this.info||(this.isLand(t,i)?(this.marker(t,i,16751752),1):("sail"!==this.mode&&this.setMode("sail"),!this.sailTo(t,i)||(this.marker(t,i,16777215),this.hideRodBalloon(),0))))}
+ tutorialTapRod(){
+ return!!this.rodBalloonOn&&(this.hideRodBalloon(),this.arrive(),!0)}
+ tutorialModeTap(){
+ "fish"===this.mode&&this.setMode("sail")}
+ get moving(){
+ return!!this.target}
+ worldToGlobal(t,i){
+ return this.world.toGlobal({
+ x:t,y:i}
+ )}
+ globalToWorld(t){
+ return this.world.toLocal(t)}
+ get boatWorld(){
+ return{
+ x:this.bx,y:this.by}
+ }
+ get pointNow(){
+ return this.point}
+ get rodBalloonCenter(){
+ return this.rodBalloonOn?{
+ x:this.rodBalloon.x,y:this.rodBalloon.y+-24.8}
+ :null}
+ get modeButton(){
+ return this.modeBtn}
+ tutorialSpot(t,i,s,e,n){
+ if(!this.info)return null;
+ const h=this.viewW,r=this.viewH,o=this.world.x,a=this.world.y,c=Qt((t,i)=>{
+ const s=t+o,c=i+a;
+ if(s<44||s>h-44||c<e+36||c>r-n-36)return!1;
+ if(this.isLand(t,i)||this.shoreDist(t,i)<50)return!1;
+ for(const e of this.hubPlaces.values())if(Math.abs(e.x-t)<130&&i>e.y-175&&i<e.y+80)return!1;
+ for(const e of this.labels.children)if(Math.abs(e.x+e.width/2-t)<e.width/2+40&&Math.abs(e.y+e.height/2-i)<50)return!1;
+ if(sNi.at(this.key,t,i)!==this.point)return!1;
+ const l=Math.hypot(t-this.bx,i-this.by);
+ for(let e=12;
+ e<l;
+ e+=12){
+ const s=this.bx+(t-this.bx)*e/l,n=this.by+(i-this.by)*e/l;
+ if(this.isLand(s,n)||this.shoreDist(s,n)<22)return!1}
+ return!0}
+ ,"ok");
+ for(const l of[s,(i+s)/2,i])for(const i of t){
+ const t=i*Math.PI/180,s=this.bx+Math.cos(t)*l,e=this.by+Math.sin(t)*l;
+ if(c(s,e))return{
+ x:s,y:e}
+ }
+ return null}
+ buildRodBalloon(){
+ const t=this.rodBalloon;
+ this.rodBubble.anchor.set(.5,XEi),this.rodBubble.scale.set(.2),t.addChild(this.rodBubble),t.eventMode="none",t.visible=!1}
+ showRodBalloon(){
+ if(!this.fixingNow){
+ if(!this.castSpot())return this.hideRodBalloon(),void(this.hubs.some(t=>this.hubNear(t.id))||this.showHint(sDi,!0));
+ this.rodBalloonOn=!0,this.rodBalloon.visible=!0,this.rodBubble.texture===as.EMPTY&&(this.rodBubble.texture=nAi.gear().bubbles[2]),MR.killTweensOf(this.rodBalloon.scale),MR.fromTo(this.rodBalloon.scale,{
+ x:.2,y:.2}
+ ,{
+ x:1,y:1,duration:.32,ease:"back.out(3)"}
+ ),jG("light"),this.showHint("낚싯대 풍선을 누르면 낚시 시작 · 물을 누르면 그곳으로 가요",!1,!0)}
+ }
+ hideRodBalloon(){
+ this.rodBalloonOn=!1,this.rodBalloon.visible=!1}
+ drawRodBalloon(t){
+ if(!this.rodBalloonOn)return;
+ this.rodBalloon.position.set(this.bx,this.by-44+2.5*Math.sin(t/320));
+ const i=t%1600/1600;
+ MR.isTweening(this.rodBalloon.scale)||this.rodBubble.scale.set(.2*(1+(i<.18?.08*Math.sin(i/.18*Math.PI):0)))}
+ rodBalloonHit(t,i){
+ return this.rodBalloonOn&&Math.hypot(t-this.rodBalloon.x,i-(this.rodBalloon.y+-24.8))<=30}
+ dock(){
+ var t;
+ this.dockAt=performance.now()+2e3,this.dockShown=0,this.hint.visible=!1;
+ const i=this.hubs.find(t=>("offer"===t.state||"ready"===t.state)&&this.hubNear(t.id));
+ i&&(null==(t=this.onHubArrive)||t.call(this,i.id))}
+ castSpot(){
+ if(!this.boatCanFish())return null;
+ const t=this.heading;
+ for(const i of[80,110,140,60])for(let s=0;
+ s<16;
+ s++){
+ const e=t+(s%2?1:-1)*Math.ceil(s/2)*(Math.PI/8),n=this.bx+Math.cos(e)*i,h=this.by+Math.sin(e)*i;
+ if(this.floatOk(n,h)&&!this.isLand((this.bx+n)/2,(this.by+h)/2))return{
+ x:n,y:h}
+ }
+ return null}
+ landWithin(t,i,s){
+ if(this.isLand(t,i))return!0;
+ for(const e of[.5*s,s])for(let s=0;
+ s<16;
+ s++){
+ const n=s*Math.PI/8;
+ if(this.isLand(t+Math.cos(n)*e,i+Math.sin(n)*e))return!0}
+ return!1}
+ pierDist(t,i){
+ let s=1/0;
+ for(const e of this.hubPlaces.values()){
+ if(e.ship)continue;
+ const n=e.x,h=e.y-4,r=Math.atan2(e.dy-e.y,e.dx-e.x),o=Math.hypot(e.dx-e.x,e.dy-e.y)-6,a=Math.cos(r),c=Math.sin(r),l=Math.max(-4,Math.min(o,(t-n)*a+(i-h)*c));
+ s=Math.min(s,Math.hypot(t-(n+a*l),i-(h+c*l))-13)}
+ return s}
+ floatOk(t,i){
+ return!this.landWithin(t,i,56)&&this.pierDist(t,i)>=36}
+ boatCanFish(t=this.bx,i=this.by){
+ return!this.landWithin(t,i,110)&&this.pierDist(t,i)>=90}
+ arrive(){
+ var t;
+ const i=this.castSpot();
+ if(!i)return this.hideRodBalloon(),void this.showHint(sDi,!0);
+ this.setMode("fish");
+ const s=this.nearestPoint();
+ this.cast(i.x,i.y,!1,s===this.point),s!==this.point&&(this.point=s,this.pointSyncUntil=performance.now()+4e3,null==(t=this.onStopAtPoint)||t.call(this,s))}
+ splash(t,i,s,e=16777215,n=0){
+ n>0&&this.crowns.push({
+ x:t,y:i,age:0,life:.55,size:n,t:Math.floor(4*Math.random()),rot:Math.random()*Math.PI*2}
+ );
+ for(let h=0;
+ h<s;
+ h++){
+ const s=Math.random()*Math.PI*2,n=20+40*Math.random();
+ this.particles.push({
+ x:t,y:i,vx:Math.cos(s)*n,vy:Math.sin(s)*n*.6,z:0,vz:60+60*Math.random(),life:.6,age:0,size:1.2+Math.random(),color:e}
+ )}
+ this.ripples.push({
+ x:t,y:i,age:0,life:.9,r0:4,r1:20,alpha:.7}
+ )}
+ playCatch(t,i,s){
+ if(this.resolveNibbler("어류"===kSi(t.id).kind),this.sailing)return this.catchAboard(t,i);
+ if(this.reel||performance.now()<this.busyUntil)return t.broken||this.tag(`${
+ kSi(t.id).name}
+ ${
+ fTi(t.grade??0)}
+  ${
+ _Ti(t.kg)}
+ `,16777215),.3;
+ const e=kSi(t.id),n=t.grade??0,h=t.broken?1:t.star>=5||3===n?4:4===t.star||2===n?3:3===t.star||i?2:1,r={
+ x:this.bx,y:this.by}
+ ,o=this.floatVisible?{
+ ...this.fxp}
+ :{
+ x:this.bx-70*Math.sin(this.heading),y:this.by+70*Math.cos(this.heading)}
+ ,a=this.floatVisible&&!this.sailing;
+ this.floatVisible=!1,this.splash(o.x,o.y,8+3*h,15004914,22+5*h),jG(h>=3?"medium":"light");
+ const c=Math.max(1,Math.hypot(r.x-o.x,r.y-o.y)),l=(r.x-o.x)/c,u=(r.y-o.y)/c,d=c>34?{
+ x:r.x-22*l,y:r.y-22*u}
+ :{
+ ...o}
+ ,f=new eLi("fish"),p=96*(.2+.025*h);
+ f.tint=665137,f.alpha=.5,f.swim(p,0,1),this.shadowLayer.addChild(f);
+ const g={
+ p:0}
+ ,w=Qt((t,i,s)=>{
+ this.reel={
+ x:t,y:i,level:h}
+ ,f.position.set(t,i),f.rotation=Math.atan2(r.y-i,r.x-t),f.swim(p,40*s,1,.25*Math.sin(9*s)),Math.random()<.7&&this.addFoam(t+9*(Math.random()-.5),i+7*(Math.random()-.5),1.6+2.6*Math.random(),1+Math.random(),.65),Math.random()<.18+.05*h&&this.splash(t,i,1),Math.random()<.08&&this.ripples.push({
+ x:t,y:i,age:0,life:.9,r0:6,r1:18+3*h,alpha:.45}
+ )}
+ ,"place"),m=MR.timeline({
+ onComplete:Qt(()=>{
+ MR.killTweensOf(f),f.destroy(),this.catchTl===m&&(this.catchTl=null)}
+ ,"onComplete")}
+ );
+ if(this.catchTl=m,this.busyUntil=1/0,t.broken){
+ const t=Math.min(26,.3*c);
+ return m.to(g,{
+ p:1,duration:.9,ease:"none",onUpdate:Qt(()=>{
+ const i=9*Math.sin(g.p*Math.PI*5);
+ w(o.x+l*t*g.p-u*i,o.y+u*t*g.p+l*i,g.p)}
+ ,"onUpdate")}
+ ).call(()=>{
+ const t=this.reel;
+ this.reel=null,this.splash(t.x,t.y,10,15004914,26),this.tag("줄이 끊겼다! · 더 튼튼한 낚싯줄이 필요해요",XIi),jG("heavy"),MR.to(f,{
+ x:t.x-70*l,y:t.y-70*u,alpha:0,duration:.6,ease:"power2.out"}
+ )}
+ ).to({
+ }
+ ,{
+ duration:.6}
+ ).call(()=>{
+ this.busyUntil=0,!a||this.sailing||this.floatVisible||this.cast(o.x,o.y,!1,!1)}
+ ),.9}
+ const v=[3,3,4,5,6][h],_={
+ q:0,side:0}
+ ,M=Qt(()=>{
+ const t=performance.now()/1e3,i=Math.sin(9*t+h)*(2.5+h)*(1-.6*_.q),s=_.side+i,e=Math.max(0,Math.min(1,_.q));
+ w(o.x+(d.x-o.x)*e-u*s,o.y+(d.y-o.y)*e+l*s,t/4)}
+ ,"upd");
+ let b=0,y=0;
+ for(let x=0;
+ x<v;
+ x++){
+ const t=x===v-1,i=t?1-b:1/v*(.85+.45*Math.random());
+ b=Math.min(1,b+i);
+ const s=.26+.02*h;
+ if(m.to(_,{
+ q:b,side:0,duration:s,ease:"power2.out",onUpdate:M,onStart:Qt(()=>{
+ this.reelPull=!0,this.reel&&this.splash(this.reel.x,this.reel.y,2+h,15004914),h>=3&&jG("light")}
+ ,"onStart")}
+ ),y+=s,t)break;
+ const e=h>=3&&Math.random()<.35,n=e?.55:.3+.2*Math.random();
+ b=Math.max(0,b-i*(e?.45:.15)),m.to(_,{
+ q:b,side:(Math.random()<.5?-1:1)*(e?16+3*h:4+2*h),duration:n,ease:e?"power1.out":"sine.inOut",onUpdate:M,onStart:Qt(()=>{
+ this.reelPull=!1}
+ ,"onStart")}
+ ),y+=n}
+ m.call(()=>{
+ this.reelPull=!1}
+ );
+ const E=[0,26,30,34,40][h]*eDi[t.grade??0],A=new Ye(nAi.fish(t.id));
+ A.anchor.set(.5),A.width=A.height=E,A.visible=!1;
+ const S=(new ip).ellipse(0,0,.4*E,.18*E).fill({
+ color:401450,alpha:.35}
+ );
+ S.visible=!1,this.flyLayer.addChild(S,A);
+ const T=Math.hypot(r.x-d.x,r.y-d.y),C=22+.4*T+6*h,O=.42+T/400+.05*h,I={
+ p:0}
+ ;
+ let k=d.x,R=d.y;
+ return m.call(()=>{
+ this.reel=null,f.visible=!1,A.visible=S.visible=!0,this.splash(d.x,d.y,8+3*h,15004914,20+4*h),jG(h>=3?"medium":"light")}
+ ).to(I,{
+ p:1,duration:O,ease:"none",onUpdate:Qt(()=>{
+ const t=I.p,i=4*C*t*(1-t),s=d.x+(r.x-d.x)*t,e=d.y+(r.y-d.y)*t;
+ A.position.set(s,e-i),A.scale.set(E/100*(1+i/C*.35));
+ const n=A.x-k,h=A.y-R;
+ Math.abs(n)+Math.abs(h)>.2&&(A.rotation=Math.sign(n||1)*Math.atan2(h,Math.abs(n))*.8),k=A.x,R=A.y,S.position.set(s,e),S.alpha=1-i/C*.6}
+ ,"onUpdate")}
+ ).call(()=>{
+ this.splash(r.x,r.y,4,14207136),h>=3&&this.burst(r.x,r.y,h>=4?24:12,ski[Math.min(5,t.star)]),i||t.star>=4||this.tag(`${
+ e.name}
+ ${
+ fTi(t.grade??0)}
+  ${
+ _Ti(t.kg)}
+ `,16777215)}
+ ).to([A,S],{
+ alpha:0,duration:.3}
+ ,"+=0.35").call(()=>{
+ A.destroy(),S.destroy(),this.busyUntil=0,!a||this.sailing||this.floatVisible||this.cast(o.x,o.y,!1,!1)}
+ ),y+O}
+ burst(t,i,s,e){
+ for(let n=0;
+ n<s;
+ n++){
+ const s=Math.random()*Math.PI*2,n=40+80*Math.random();
+ this.particles.push({
+ x:t,y:i,vx:Math.cos(s)*n,vy:Math.sin(s)*n,z:10,vz:40+60*Math.random(),life:.8,age:0,size:1.5+1.5*Math.random(),color:e}
+ )}
+ }
+ catchAboard(t,i){
+ const s=Math.random()<.5?-1:1,e=34*-Math.sin(this.heading)*s,n=34*Math.cos(this.heading)*s;
+ if(this.splash(this.bx+e,this.by+n,6,15004914,18),t.broken)return.3;
+ const h=kSi(t.id),r=t.grade??0,o=t.star>=5||3===r?4:4===t.star||2===r?3:3===t.star||i?2:1,a=[0,26,30,34,40][o]*eDi[t.grade??0],c=new Ye(nAi.fish(t.id));
+ c.anchor.set(.5),c.width=c.height=a,this.flyLayer.addChild(c);
+ const l={
+ p:0}
+ ,u=26+5*o;
+ return MR.to(l,{
+ p:1,duration:.55,ease:"none",onUpdate:Qt(()=>{
+ const t=l.p;
+ c.position.set(this.bx+e*(1-t),this.by+n*(1-t)-4*u*t*(1-t)),c.rotation=(.5-t)*s*1.4}
+ ,"onUpdate"),onComplete:Qt(()=>{
+ c.destroy(),this.splash(this.bx,this.by,3,14207136),o>=3&&this.burst(this.bx,this.by,o>=4?24:12,ski[Math.min(5,t.star)]),i||t.star>=4||this.tag(`${
+ h.name}
+ ${
+ fTi(t.grade??0)}
+  ${
+ _Ti(t.kg)}
+ `,16777215)}
+ ,"onComplete")}
+ ),jG(o>=3?"medium":"light"),.55}
+ tag(t,i){
+ this.floatTag(t,i,this.bx,this.by-64)}
+ floatTag(t,i,s,e){
+ var n;
+ const h=rki(t,i,13),r=new Ve,o=new ip;
+ o.roundRect(0,0,h.width+14,h.height+6,(h.height+6)/2).fill({
+ color:QIi,alpha:.85}
+ ),h.position.set(7,3),r.addChild(o,h),r.position.set(s-r.width/2,e),null==(n=this.labels.parent)||n.addChild(r),MR.timeline({
+ onComplete:Qt(()=>r.destroy({
+ children:!0}
+ ),"onComplete")}
+ ).from(r,{
+ alpha:0,y:r.y+8,duration:.2}
+ ).to(r,{
+ y:r.y-14,alpha:0,duration:.5,ease:"power1.in"}
+ ,1.4)}
+ }
+ ;
+ Qt(UDi,"FishingSeaMap"),Zt(UDi,"DEFAULT_H",400),Zt(UDi,"hintSeen",!1),Zt(UDi,"lightTex",null),Zt(UDi,"regionTex",new Map),Zt(UDi,"MINI",108);
+ let FDi=UDi;
+ const $Di=[{
+ rays:[14,150],rays2:[9,110],sparkles:18,burst2:!1,ring:0,fish:124,shake:0}
+ ,{
+ rays:[14,160],rays2:[10,118],sparkles:22,burst2:!1,ring:1,fish:128,shake:0}
+ ,{
+ rays:[16,180],rays2:[11,130],sparkles:26,burst2:!0,ring:2,fish:138,shake:0}
+ ,{
+ rays:[18,205],rays2:[12,150],sparkles:32,burst2:!0,ring:3,fish:150,shake:5}
+ ],HDi=class{
+ static get active(){
+ return!!this.current&&this.current.h.shown&&!this.current.h.done}
+ static get pending(){
+ return!!this.current&&!this.current.h.done}
+ static dismiss(t=!1){
+ var i;
+ null==(i=this.current)||i.h.dismiss(t)}
+ static release(){
+ const t=this.current;
+ if(!t||t.h.done)return;
+ const i=t.startAt+1.6-performance.now()/1e3;
+ i<=0?t.h.dismiss():MR.delayedCall(i,()=>t.h.dismiss())}
+ static show(t,i,s,e,n,h,r={
+ }
+ ){
+ const o=r.queue??!0,a=r.holdSec??20,c=performance.now()/1e3;
+ let l=c+n;
+ const u=o?this.current:null;
+ if(u&&!u.h.done&&(l=Math.max(l,u.startAt+1.6),l-(c+n)>8))return null;
+ const d=Math.max(0,Math.min(3,i.grade)),f=$Di[d],p=Math.max(1,Math.min(6,i.star)),g=ski[p]??VIi,w=d>=2?eki[d]:g,m=new Ve;
+ m.eventMode="none",m.position.set(s,e),m.alpha=0;
+ const v=this.glow(w,300+30*d),_=this.glow(16777215,220+30*d),M=this.rays(f.rays[0],f.rays[1],16769946,.42),b=this.rays(f.rays2[0],f.rays2[1],w,.35),y=new Ve,E=(new ip).ellipse(0,.47*f.fish,.37*f.fish,9).fill({
+ color:398362,alpha:.35}
+ ),A=new Ye(i.tex);
+ A.anchor.set(.5),A.width=A.height=f.fish;
+ const S=A.scale.x,T=new Ve,C=mki("새 물고기 발견!",jIi,VIi,15,12);
+ if(T.addChild(C),d>=1){
+ const t=mki(`${
+ aTi[d]}
+  ${
+ cTi[d]}
+ `,16777215,eki[d],14,9);
+ t.position.set(C.width+6,(C.height-t.height)/2),T.addChild(t)}
+ T.pivot.set(T.width/2,T.height/2);
+ const O=.5*-f.fish-36;
+ T.position.set(0,O);
+ const I=rki(`${
+ i.name}
+ ${
+ fTi(d)}
+ `,KIi,20);
+ oki(I,300);
+ const k=rki("★".repeat(p),g,15),R=rki(`${
+ _Ti(i.kg)}
+ ${
+ i.dex?` · 도감 ${
+ i.dex}
+ 종째`:""}
+ `,zIi,13),x=new Ve,P=Math.max(I.width,k.width,R.width)+32,N=(new ip).roundRect(-P/2,0,P,78,14).fill({
+ color:QIi,alpha:.94}
+ );
+ d>=1&&N.roundRect(-P/2,0,P,78,14).stroke({
+ color:eki[d],width:2,alpha:.9}
+ ),I.position.set(-I.width/2,8),k.position.set(-k.width/2,34),R.position.set(-R.width/2,54);
+ const L=mki("화면을 누르면 닫혀요",zIi,QIi,12,8);
+ L.position.set(-L.width/2,86),L.alpha=0,x.addChild(N,I,k,R,L);
+ const D=.5*f.fish+12;
+ x.position.set(0,D);
+ const G=new Ve;
+ m.addChild(v,M,b,_,y,E,A,G,T,x),t.addChild(m);
+ const B=[];
+ let U=!1,F=!1,$=!1;
+ const H={
+ get shown(){
+ return U}
+ ,get done(){
+ return F}
+ ,dismiss:Qt((t=!1)=>{
+ if(!F&&!$){
+ if($=!0,!U)return j.kill(),void V();
+ j.kill(),null==W||W.kill();
+ for(const t of B)t.kill();
+ MR.to(m,{
+ alpha:0,y:m.y-18,duration:t?.15:.35,ease:"power1.in",onComplete:V}
+ )}
+ }
+ ,"dismiss")}
+ ;
+ let W=null;
+ const V=Qt(()=>{
+ var t,i;
+ if(!F){
+ F=!0,j.kill(),null==W||W.kill();
+ for(const t of B)t.kill();
+ MR.killTweensOf(m);
+ for(const t of G.children)MR.killTweensOf([t,t.scale]);
+ m.destroy({
+ children:!0}
+ ),(null==(t=this.current)?void 0:t.h)===H&&(this.current=null),null==(i=r.onEnd)||i.call(r)}
+ }
+ ,"finish");
+ o&&(this.current={
+ h:H,startAt:l}
+ );
+ const j=MR.timeline({
+ delay:l-c}
+ );
+ j.set(m,{
+ alpha:1}
+ ).call(()=>{
+ U=!0,u&&u.h!==H&&u.h.dismiss(!0),null==h||h(),this.burst(G,w,f.sparkles,70,90+15*d),B.push(MR.to(M,{
+ rotation:"+="+2*Math.PI,duration:26,ease:"none",repeat:-1}
+ ),MR.to(b,{
+ rotation:"-="+2*Math.PI,duration:34,ease:"none",repeat:-1}
+ ),MR.to(v,{
+ alpha:.75,duration:1.4,ease:"sine.inOut",yoyo:!0,repeat:-1,delay:.6}
+ ),MR.to(A,{
+ y:-5,duration:.8,ease:"sine.inOut",yoyo:!0,repeat:-1,delay:.6}
+ ),MR.timeline({
+ repeat:-1,repeatDelay:1.3,delay:1.6}
+ ).call(()=>this.burst(G,w,3+d,26,50)),MR.to(L,{
+ alpha:.8,duration:.5,delay:1.5}
+ )),W=MR.delayedCall(a,()=>H.dismiss())}
+ ,[],0).fromTo(_.scale,{
+ x:.2,y:.2}
+ ,{
+ x:1.7*_.scale.x,y:1.7*_.scale.y,duration:.45,ease:"power2.out"}
+ ,0).fromTo(_,{
+ alpha:1}
+ ,{
+ alpha:0,duration:.45,ease:"power1.in"}
+ ,0).fromTo(v.scale,{
+ x:0,y:0}
+ ,{
+ x:v.scale.x,y:v.scale.y,duration:.4,ease:"back.out(2)"}
+ ,0).fromTo([M,b],{
+ alpha:0}
+ ,{
+ alpha:1,duration:.35}
+ ,0).fromTo(M.scale,{
+ x:.4,y:.4}
+ ,{
+ x:1,y:1,duration:.5,ease:"back.out(1.6)"}
+ ,0).fromTo(b.scale,{
+ x:.4,y:.4}
+ ,{
+ x:1,y:1,duration:.5,ease:"back.out(1.6)"}
+ ,.05).fromTo(A.scale,{
+ x:.15*S,y:.15*S}
+ ,{
+ x:S,y:S,duration:.5,ease:"back.out(2.4)"}
+ ,.08).fromTo(A,{
+ rotation:-.35}
+ ,{
+ rotation:0,duration:.5,ease:"back.out(2)"}
+ ,.08).fromTo(E,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.3}
+ ,.2).fromTo(T,{
+ alpha:0,y:O+14}
+ ,{
+ alpha:1,y:O,duration:.3,ease:"back.out(2.5)"}
+ ,.3).fromTo(T.scale,{
+ x:.6,y:.6}
+ ,{
+ x:1,y:1,duration:.3,ease:"back.out(2.5)"}
+ ,.3).fromTo(x,{
+ alpha:0,y:D+10}
+ ,{
+ alpha:1,y:D,duration:.3,ease:"power2.out"}
+ ,.42);
+ for(let K=0;
+ K<f.ring;
+ K++){
+ const t=new ip;
+ y.addChild(t);
+ const i={
+ p:0}
+ ;
+ j.fromTo(i,{
+ p:0}
+ ,{
+ p:1,duration:.7,ease:"power2.out",onUpdate:Qt(()=>{
+ t.clear().circle(0,0,40+i.p*(130+25*d)).stroke({
+ color:eki[d],width:5*(1-i.p)+1,alpha:.85*(1-i.p)}
+ )}
+ ,"onUpdate")}
+ ,.05+.2*K)}
+ if(f.burst2&&j.call(()=>this.burst(G,16774084,Math.round(.6*f.sparkles),40,70+15*d),[],.55),f.shake){
+ const t={
+ k:0}
+ ;
+ j.fromTo(t,{
+ k:1}
+ ,{
+ k:0,duration:.45,ease:"power1.out",onUpdate:Qt(()=>{
+ m.position.set(s+2*(Math.random()-.5)*f.shake*t.k,e+2*(Math.random()-.5)*f.shake*t.k)}
+ ,"onUpdate")}
+ ,.08)}
+ return H}
+ static glow(t,i){
+ if(!this.glowTex){
+ const t=document.createElement("canvas");
+ t.width=t.height=128;
+ const i=t.getContext("2d"),s=i.createRadialGradient(64,64,0,64,64,64);
+ s.addColorStop(0,"rgba(255,255,255,0.9)"),s.addColorStop(.4,"rgba(255,255,255,0.35)"),s.addColorStop(1,"rgba(255,255,255,0)"),i.fillStyle=s,i.fillRect(0,0,128,128),this.glowTex=as.from(t)}
+ const s=new Ye(this.glowTex);
+ return s.anchor.set(.5),s.width=s.height=i,s.tint=t,s.blendMode="add",s}
+ static rays(t,i,s,e){
+ const n=new ip;
+ for(let h=0;
+ h<t;
+ h++){
+ const r=h/t*Math.PI*2,o=.07+h%2*.04,a=i*(h%2?.8:1);
+ n.poly([0,0,Math.cos(r-o)*a,Math.sin(r-o)*a,Math.cos(r+o)*a,Math.sin(r+o)*a]).fill({
+ color:s,alpha:e*(h%2?.7:1)}
+ )}
+ return n.blendMode="add",n}
+ static burst(t,i,s,e,n){
+ for(let h=0;
+ h<s;
+ h++){
+ const r=3+4*Math.random(),o=(new ip).poly([0,-r,.28*r,.28*-r,r,0,.28*r,.28*r,0,r,.28*-r,.28*r,-r,0,.28*-r,.28*-r]).fill(h%3==0?i:16774084);
+ o.blendMode="add",t.addChild(o);
+ const a=h/s*Math.PI*2+.4*Math.random(),c=e+Math.random()*n;
+ MR.timeline({
+ onComplete:Qt(()=>o.destroy(),"onComplete")}
+ ).fromTo(o,{
+ x:0,y:0,alpha:1,rotation:0}
+ ,{
+ x:Math.cos(a)*c,y:Math.sin(a)*c*.85,rotation:3*Math.random(),duration:.7+.4*Math.random(),ease:"power2.out"}
+ ).fromTo(o.scale,{
+ x:.4,y:.4}
+ ,{
+ x:1.2,y:1.2,duration:.3}
+ ,0).to(o,{
+ alpha:0,duration:.4}
+ ,"-=0.35")}
+ }
+ }
+ ;
+ Qt(HDi,"FishingDiscoveryFx"),Zt(HDi,"current",null),Zt(HDi,"glowTex",null);
+ let WDi=HDi;
+ const VDi=Qt(()=>`fishing.plunder.seen.${
+ EG.userId}
+ `,"seenKey");
+ function jDi(t,i){
+ try{
+ qG.getInstance().playSFX(t,i)}
+ catch{
+ }
+ }
+ function KDi(t,i=12){
+ const s=new Ve,e=["C","B","A","S"],n=[5921376,eki[1],eki[2],eki[3]];
+ let h=0;
+ for(const r of[3,2,1,0]){
+ if(!t[r])continue;
+ const o=mki(`${
+ e[r]}
+  ${
+ t[r]}
+ `,16777215,n[r],i,6);
+ o.x=h,h+=o.width+5,s.addChild(o)}
+ return s.eventMode="none",s}
+ Qt(jDi,"sfx$4"),Qt(KDi,"gradeChips");
+ const zDi=166;
+ function YDi(){
+ try{
+ const t=JSON.parse(localStorage.getItem(VDi())??"null");
+ return t&&"number"==typeof t.log?t:null}
+ catch{
+ return null}
+ }
+ function qDi(t){
+ try{
+ localStorage.setItem(VDi(),JSON.stringify(t))}
+ catch{
+ }
+ }
+ Qt(YDi,"loadSeen"),Qt(qDi,"saveSeen");
+ const XDi=class extends Ve{
+ constructor(t,i){
+ super(),Zt(this,"peekPanel",new Ve),Zt(this,"banner",new Ve),Zt(this,"notice",new Ve),Zt(this,"peekAngler",null),Zt(this,"peek",null),Zt(this,"peekBusy",!1),Zt(this,"track",{
+ thief:{
+ key:"",count:-1}
+ ,victim:{
+ key:"",count:-1}
+ }
+ ),Zt(this,"autoStopAt",0),Zt(this,"tensionKey",{
+ thief:"",victim:""}
+ ),Zt(this,"oldServerWarned",!1),Zt(this,"stopping",!1),Zt(this,"seen",null),Zt(this,"seenFor",""),Zt(this,"peekDrawnAt",0),Zt(this,"peekSig",""),Zt(this,"peekLive",null),Zt(this,"starting",!1),Zt(this,"hinted",!1),Zt(this,"bannerRows",new Map),Zt(this,"bannerW",0),Zt(this,"overlayOpen",Qt(()=>!1,"overlayOpen")),this.scene=t,this.viewH=i,this.peekPanel.visible=!1,this.peekPanel.eventMode="static",this.banner.visible=!1,this.banner.eventMode="static",this.notice.visible=!1,this.notice.eventMode="static",this.addChild(this.banner,this.notice,this.peekPanel),t.onOtherTap=(t,i)=>{
+ this.openPeek(t,i)}
+ }
+ get panelOpen(){
+ return this.peekPanel.visible||this.notice.visible}
+ get bannerBottom(){
+ return this.banner.visible?zDi+this.banner.height+8:zDi}
+ async openPeek(t,i){
+ var s;
+ if(this.peekBusy)return;
+ const e=this.scene.boatPoint("me"),n=this.scene.boatPoint(t.id);
+ if(!e||!n||Math.hypot(e.x-n.x,e.y-n.y)>380)vH.getInstance().showMessage(`${
+ t.n}
+  · 멀어서 안 보여요. 더 가까이 가 보세요`);
+ else{
+ this.peekAngler=t,this.peek=null,this.renderPeek(),this.peekPanel.visible=!0,MR.fromTo(this.peekPanel,{
+ alpha:0,y:12}
+ ,{
+ alpha:1,y:0,duration:.18}
+ ),jG("light"),this.peekBusy=!0;
+ try{
+ const i=await RIi.getInstance().plunderPeek(t.id);
+ if((null==(s=this.peekAngler)?void 0:s.id)!==t.id)return;
+ if(i.message||!i.result)return vH.getInstance().showMessage(i.message??"훔쳐볼 수 없어요"),void this.closePeek();
+ this.peek=i.result,this.renderPeek()}
+ finally{
+ this.peekBusy=!1}
+ }
+ }
+ closePeek(){
+ this.peekAngler=null,this.peek=null,this.peekPanel.visible=!1}
+ near(t){
+ const i=this.scene.boatPoint("me"),s=this.scene.boatPoint(t);
+ return!!i&&!!s&&Math.hypot(i.x-s.x,i.y-s.y)<=bOi}
+ renderPeek(){
+ var t,i,s,e,n,h;
+ const r=this.peekPanel,o=this.peekAngler,a=RIi.getInstance();
+ if(r.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),!o)return;
+ const c=CRi.BLEED_W,l=this.viewH(),u=c-20,d=26,f=null==(t=this.peek)?void 0:t.view,p=(null==f?void 0:f.fish)??[],g=Math.max(1,Math.floor((u-32+4)/34)),w=4*g,m=p.length>w?w-1:p.length,v=p.length?Math.ceil(Math.min(p.length,w)/g):0,_=v?34*v-4:24,M=86+_+12+44+54,b=l-M-8,y=aki(u,M,QIi,null,14);
+ y.alpha=.95,y.position.set(10,b);
+ const E=[y],A=_Oi(o.lk);
+ let S=d;
+ if(A){
+ const t=new Ye(_Ri(A)),i=(new ip).circle(22,22,22).fill(BIi),s=(new ip).circle(22,22,21).fill(16777215);
+ t.width=t.height=44;
+ const e=new Ve;
+ e.addChild(i,t,s),t.mask=s,e.position.set(d,b+10),E.push(e),S=80}
+ const T=rki(`훔쳐보기 · ${
+ o.n}
+ `,VIi,17);
+ T.position.set(S,b+12),oki(T,u-40-(S-d));
+ const C=this.peek?this.peek.away:!!o.a,O=rki(this.peek?C?`정박 중 (자리 비움) · 어망 ${
+ f.count}
+ 마리`:`낚시 중 · 어망 ${
+ f.count}
+ 마리`:"살펴보는 중…",zIi,13);
+ O.position.set(S,b+36),oki(O,u-40-(S-d)),E.push(T,O);
+ const I=b+60+24;
+ if(f&&p.length){
+ const t=KDi(f.grades);
+ if(t.position.set(d,b+60),E.push(t),p.slice(0,m).forEach((t,i)=>{
+ const s=new lki(30);
+ s.starsAlways=!0,s.set(null,t.star,t.grade),s.position.set(d+i%g*34,I+34*Math.floor(i/g)),E.push(s)}
+ ),m<p.length){
+ const t=m,i=new Ve,s=(new ip).roundRect(0,0,30,30,6).fill(BIi),e=rki("+"+(p.length-m),zIi,11);
+ e.position.set((30-e.width)/2,(30-e.height)/2),i.addChild(s,e),i.position.set(d+t%g*34,I+34*Math.floor(t/g)),E.push(i)}
+ }
+ else if(f){
+ const t=rki("어망이 비어 있어요",zIi,13,!1);
+ t.position.set(d,I),oki(t,u-40),E.push(t)}
+ const k=a.tickets(),R=a.realNow(),x=rki(f?"guild"===f.why?"같은 길드원의 물고기는 훔칠 수 없어요":"protected"===f.why?`경계 중 · ${
+ Mki(f.protectUntil-R)}
+  뒤에 다시`:"raided"===f.why?(null==(s=null==(i=a.plunder)?void 0:i.raid)?void 0:s.id)===o.id?"내가 털고 있어요 · 이미 넘어온 물고기는 빼고 보여요":`${
+ gki(f.raidedBy??"다른 낚시꾼","이","가")}
+  털고 있어요`:"capped"===f.why?"오늘은 더 털 수 없는 배예요":"empty"===f.why?"":`훔칠 수 있어요 · 어망에서 아무거나 1분에 한 마리씩, 최대 ${
+ Math.min(10,f.remaining,f.count)}
+ 마리`:"","raided"===(null==f?void 0:f.why)&&(null==(n=null==(e=a.plunder)?void 0:e.raid)?void 0:n.id)===o.id?VIi:"guild"===(null==f?void 0:f.why)?zIi:(null==f?void 0:f.why)?XIi:qIi,13);
+ x.position.set(d,I+_+12),oki(x,u-40);
+ const P=rki(this.ticketText(),zIi,12);
+ P.position.set(d,I+_+34),E.push(x,P),this.peekLive={
+ info:x,tk:P,infoW:u-40}
+ ;
+ const N=b+M-54,L=new pki("닫기",96,40,14);
+ L.setPrimary(!1),L.onTap=()=>this.closePeek();
+ const D=new pki("",150,40,14);
+ D.position.set(10+u-16-150,N),L.position.set(D.x-8-96,N);
+ const G=!!(null==(h=a.plunder)?void 0:h.raid);
+ f?G?(D.setText("이미 훔치는 중"),D.enabled=!1):"guild"===f.why?(D.setText("같은 길드원"),D.enabled=!1):f.why||0===f.count?(D.setText("훔칠 수 없어요"),D.enabled=!1):this.near(o.id)?k.n<1?(D.setText(`표 없음 · ${
+ Mki((k.nextAt??R)-R)}
+ `),D.enabled=!1):(D.setText("훔치기 (표 1장)"),D.onTap=async()=>{
+ if(this.starting)return;
+ this.starting=!0,D.enabled=!1;
+ const t=await a.plunderStart(o.id).finally(()=>{
+ this.starting=!1}
+ );
+ if(t)return vH.getInstance().showMessage(t),void(D.destroyed||(D.enabled=!0));
+ jG("medium"),jDi(qG.SFX_ARCHERY_FIRE_ARROW,.6),this.closePeek(),vH.getInstance().showMessage(`${
+ o.n}
+ 의 어망에 갈고리를 걸었어요. 1분에 한 마리씩 가져와요`)}
+ ):(D.setText("옆으로 가기"),D.onTap=()=>{
+ this.scene.sailNearBoat(o.id)&&(vH.getInstance().showMessage("옆에 닿으면 다시 눌러 훔치기"),this.closePeek())}
+ ):(D.setText("살펴보는 중"),D.enabled=!1),E.push(L,D),this.peekSig=this.peekSignature(),r.hitArea=new Ui(0,0,c,l),r.removeAllListeners("pointertap"),r.on("pointertap",t=>{
+ t.stopPropagation(),r.toLocal(t.global).y<b&&this.closePeek()}
+ ),r.addChild(...E)}
+ update(){
+ var t,i,s;
+ const e=RIi.getInstance(),n=e.plunder,h=e.realNow(),r=[];
+ if(null==n?void 0:n.raid){
+ const t=TOi(n.raid,h);
+ r.push({
+ from:"me",to:n.raid.id,tension:t.level,tp:t.p}
+ )}
+ if(null==n?void 0:n.raidBy){
+ const t=TOi(n.raidBy,h);
+ r.push({
+ from:n.raidBy.id,to:"me",tension:t.level,tp:t.p}
+ )}
+ for(const a of e.others)a.r&&a.r!==EG.userId&&a.id!==(null==(t=null==n?void 0:n.raidBy)?void 0:t.id)&&r.push({
+ from:a.id,to:a.r}
+ );
+ this.scene.setPlunder(r,this.peekPanel.visible?(null==(i=this.peekAngler)?void 0:i.id)??null:null);
+ const o=(null==n?void 0:n.raid)??(null==n?void 0:n.raidBy);
+ !o||o.plan||this.oldServerWarned||(this.oldServerWarned=!0,OG.getInstance().development&&vH.getInstance().showMessage("서버가 예전 빌드예요 — 훔친 물고기를 보려면 ef2_server 를 빌드·재시작해 주세요"));
+ for(const a of["thief","victim"]){
+ const t="thief"===a?(null==n?void 0:n.raid)??null:(null==n?void 0:n.raidBy)??null,i=t?`${
+ t.id}
+ :${
+ t.startAt}
+ `:"",e=this.track[a];
+ if(i!==e.key&&(t&&"victim"===a&&(jDi(qG.SFX_WAVE_CALL,.5),jG("heavy")),e.key=i,e.count=t?EOi(t,h):-1),!t)continue;
+ const r=EOi(t,h);
+ if(r>e.count){
+ const i=null==(s=t.plan)?void 0:s[r-1],n=i?{
+ id:i.id,star:i.star,grade:i.grade}
+ :void 0,h=i?`${
+ kSi(i.id).name}
+ ${
+ fTi(i.grade)}
+ `:"",o=(null==i?void 0:i.grade)??0;
+ "thief"===a?this.scene.plunderFly(t.id,"me",n,i?{
+ text:o>=3?`대물!! ${
+ h}
+ `:2===o?`큰 놈! ${
+ h}
+ `:`훔쳤다! ${
+ h}
+ `,color:o>=2?eki[o]:VIi}
+ :void 0):(this.scene.plunderFly("me",t.id,n,i?{
+ text:o>=3?`대물을 빼앗겼어요!! ${
+ h}
+ `:`빼앗김 · ${
+ h}
+ `,color:16757670}
+ :void 0),jG("light")),jDi(qG.SFX_NORMAL_CLICK,.45),"thief"===a&&o>=2&&MR.delayedCall(1.1,()=>{
+ jDi(o>=3?qG.SFX_TRUMPET:qG.SFX_GOLD_GOBLIN,.6),jG(o>=3?"heavy":"success")}
+ ),e.count=r}
+ const o=TOi(t,h),c=o.level?`${
+ i}
+ :${
+ r}
+ `:"";
+ if(c&&c!==this.tensionKey[a]&&(this.tensionKey[a]=c,jG(o.level>=3?"heavy":2===o.level?"medium":"light")),"thief"===a&&!this.stopping){
+ const i=this.scene.boatPoint("me"),s=this.scene.boatPoint(t.id);
+ if(i&&s&&Math.hypot(i.x-s.x,i.y-s.y)>230){
+ this.scene.ropeSnap("me",t.id),jDi(qG.SFX_STONE_BREAK,.5),vH.getInstance().showMessage(`너무 멀어져 줄이 끊겼어요. ${
+ Math.min(r,t.max)}
+ 마리만 챙겼어요`),this.stop(!0);
+ continue}
+ }
+ "thief"===a&&r>=t.max&&!this.stopping&&performance.now()>=this.autoStopAt&&(this.autoStopAt=performance.now()+5e3,this.stop(!0))}
+ this.renderBanner(),this.checkNotices(),this.hintOnce(e.others.some(t=>t.a)),this.peekPanel.visible&&this.peek&&this.renderPeekLive()}
+ ticketText(){
+ const t=RIi.getInstance(),i=t.tickets(),s=t.realNow();
+ return`훔치기 표 ${
+ i.n}
+ /3${
+ i.nextAt?` · 다음 ${
+ Mki(i.nextAt-s)}
+ `:""}
+ `}
+ peekSignature(){
+ var t,i;
+ const s=this.peekAngler,e=null==(t=this.peek)?void 0:t.view,n=RIi.getInstance();
+ return s?`${
+ s.id}
+ |${
+ null==e?void 0:e.why}
+ |${
+ null==e?void 0:e.count}
+ |${
+ this.near(s.id)}
+ |${
+ n.tickets().n}
+ |${
+ !!(null==(i=n.plunder)?void 0:i.raid)}
+ |${
+ CRi.BLEED_W}
+ |${
+ this.viewH()}
+ `:""}
+ renderPeekLive(){
+ var t;
+ const i=performance.now();
+ if(i-this.peekDrawnAt<500)return;
+ if(this.peekDrawnAt=i,this.peekSignature()!==this.peekSig||!this.peekLive||this.peekLive.tk.destroyed)return void this.renderPeek();
+ const s=null==(t=this.peek)?void 0:t.view,e=RIi.getInstance().realNow();
+ this.peekLive.tk.text=this.ticketText(),"protected"===(null==s?void 0:s.why)&&(this.peekLive.info.text=`경계 중 · ${
+ Mki(s.protectUntil-e)}
+  뒤에 다시`,oki(this.peekLive.info,this.peekLive.infoW))}
+ hintOnce(t){
+ if(!this.hinted&&t&&!this.overlayOpen()){
+ this.hinted=!0;
+ try{
+ if(localStorage.getItem("fishing.plunder.hint"))return;
+ localStorage.setItem("fishing.plunder.hint","1")}
+ catch{
+ }
+ vH.getInstance().showMessage("다른 배를 누르면 망원경으로 어망을 볼 수 있어요 (Zz 배 = 자리 비운 낚시꾼)")}
+ }
+ async stop(t){
+ if(!this.stopping){
+ this.stopping=!0;
+ try{
+ const i=await RIi.getInstance().plunderStop();
+ i.message&&!t&&vH.getInstance().showMessage(i.message)}
+ finally{
+ this.stopping=!1}
+ }
+ }
+ async cut(){
+ var t,i,s;
+ const e=null==(i=null==(t=RIi.getInstance().plunder)?void 0:t.raidBy)?void 0:i.id,n=await RIi.getInstance().plunderCut();
+ if(n)return void vH.getInstance().showMessage(n);
+ e&&this.scene.ropeSnap(e,"me"),jG("success"),jDi(qG.SFX_STONE_BREAK,.6),vH.getInstance().showMessage("줄을 끊었어요! 어망을 지켰어요");
+ const h=null==(s=RIi.getInstance().plunder)?void 0:s.log[0];
+ h&&this.seen&&(this.seen={
+ ...this.seen,log:Math.max(this.seen.log,h.at)}
+ ,qDi(this.seen))}
+ renderBanner(){
+ const t=RIi.getInstance(),i=t.plunder,s=t.realNow(),e=this.banner,n=[(null==i?void 0:i.raidBy)?{
+ r:i.raidBy,thief:!1}
+ :null,(null==i?void 0:i.raid)?{
+ r:i.raid,thief:!0}
+ :null].filter(Boolean),h=CRi.BLEED_W,r=Math.min(h-20,420);
+ if(r!==this.bannerW){
+ for(const t of this.bannerRows.values())t.row.destroy({
+ children:!0}
+ );
+ this.bannerRows.clear(),this.bannerW=r}
+ const o=new Set(n.map(({
+ r:t,thief:i}
+ )=>`${
+ i?"t":"v"}
+ :${
+ t.id}
+ :${
+ t.startAt}
+ `));
+ for(const[u,d]of this.bannerRows)o.has(u)||(d.row.destroy({
+ children:!0}
+ ),this.bannerRows.delete(u));
+ if(!n.length)return void(e.visible=!1);
+ const a=this.scene.boatPoint("me");
+ n.forEach(({
+ r:t,thief:i}
+ ,n)=>{
+ var h;
+ const o=`${
+ i?"t":"v"}
+ :${
+ t.id}
+ :${
+ t.startAt}
+ `;
+ let c=this.bannerRows.get(o);
+ if(!c){
+ const s=new Ve,n=new ip,h=rki(i?`${
+ t.name}
+ 의 어망 털기`:`${
+ gki(t.name,"이","가")}
+  내 어망을 털고 있어요!`,i?VIi:16765640,14);
+ h.position.set(12,8),oki(h,r-130);
+ const a=rki("",KIi,12,!1);
+ a.position.set(12,31);
+ const l=new pki(i?"도망치기":"줄 끊기",104,40,14);
+ l.position.set(r-112,9),i?(l.setPrimary(!1),l.onTap=()=>{
+ this.stop(!1)}
+ ):l.onTap=()=>{
+ this.cut()}
+ ;
+ const u=new Ve,d=new Ve;
+ u.position.set(12,54),s.addChild(n,h,a,l,u,d),e.addChild(s),c={
+ row:s,bg:n,t2:a,cards:u,netRow:d,shown:-1,netSig:"",bgSig:"",sig:"",h:0}
+ ,this.bannerRows.set(o,c)}
+ const l=EOi(t,s),u=AOi(t,s),d=this.scene.boatPoint(t.id),f=i&&!!a&&!!d&&Math.hypot(a.x-d.x,a.y-d.y)>188,p=TOi(t,s),g=p.level?i?p.level>=3?"줄이 엄청 묵직해요!! 대물 예감!!":2===p.level?"줄이 묵직해요… 큰 놈인가?!":"조금 묵직…?":p.level>=3?"뭔가 엄청 큰 게 끌려가요!! 줄을 끊어요!!":2===p.level?"큰 놈이 끌려가요… 줄을 끊어요!":"뭔가 끌려가요…":"",w=f?`${
+ l}
+ /${
+ t.max}
+ 마리 · 더 멀어지면 줄이 끊겨요!`:g?`${
+ i?`${
+ l}
+ /${
+ t.max}
+ 마리 · `:""}
+ ${
+ g}
+ `:i?`${
+ l}
+ /${
+ t.max}
+ 마리 · ${
+ l>=t.max?"다 끌어왔어요":`다음 한 마리 ${
+ Mki(u)}
+ `}
+ `:0===l?"갈고리를 걸었어요 · 1분마다 한 마리씩 끌려가요":`${
+ l}
+ 마리 끌려가는 중 · 끊으면 모두 돌아와요`,m=p.level>=3?eki[3]:2===p.level?eki[2]:1===p.level?14862735:KIi,v=`${
+ w}
+ |${
+ f}
+ |${
+ p.level}
+ `;
+ v!==c.sig&&(c.sig=v,c.t2.text=w,c.t2.textColor=f?XIi:m,oki(c.t2,r-130));
+ const _=Math.min(l,(null==(h=t.plan)?void 0:h.length)??0);
+ if(_!==c.shown){
+ c.shown=_,c.cards.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const i=Math.min(34,Math.floor((r-24-36)/10));
+ (t.plan??[]).slice(0,_).forEach((t,s)=>{
+ const e=new lki(i);
+ e.starsAlways=!0,e.set(t.id,t.star,t.grade),e.position.set(s*(i+4),0),c.cards.addChild(e)}
+ )}
+ const M=COi(t,s),b=M?M.join(","):"",y=_>0?Math.min(34,Math.floor((r-24-36)/10))+6:0;
+ if(b!==c.netSig&&(c.netSig=b,c.netRow.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),M&&M.some(t=>t>0))){
+ const t=rki(i?"남은 어망":"내 어망에 남은 것",zIi,11,!1),s=KDi(M,10);
+ s.position.set(t.width+6,1),c.netRow.addChild(t,s)}
+ c.netRow.position.set(12,54+y);
+ const E=58+y+(c.netRow.children.length?18:0),A=`${
+ E}
+ |${
+ p.level}
+ `;
+ A!==c.bgSig&&(c.bgSig=A,c.h=E,c.bg.clear().roundRect(0,0,r,E,12).fill({
+ color:i?2825477:4855058,alpha:.92}
+ ),p.level>=2&&c.bg.roundRect(1,1,r-2,E-2,11).stroke({
+ color:p.level>=3?eki[3]:eki[2],width:2,alpha:.9}
+ ))}
+ );
+ let c=0;
+ for(const{
+ r:u,thief:d}
+ of n){
+ const t=this.bannerRows.get(`${
+ d?"t":"v"}
+ :${
+ u.id}
+ :${
+ u.startAt}
+ `);
+ t.row.y=c,c+=t.h+6}
+ const l=c-6;
+ e.hitArea=new Ui(0,0,r,l),e.position.x=(h-r)/2,e.visible||(e.visible=!0,MR.fromTo(e,{
+ alpha:0,y:154}
+ ,{
+ alpha:1,y:zDi,duration:.25}
+ ))}
+ checkNotices(){
+ var t,i;
+ const s=RIi.getInstance().plunder;
+ if(!s||this.notice.visible)return;
+ if(this.overlayOpen())return;
+ if(this.seenFor!==EG.userId&&(this.seenFor=EG.userId,this.seen=YDi()),!this.seen){
+ const t=RIi.getInstance().realNow()-432e5;
+ this.seen={
+ log:t,last:t}
+ }
+ const e=s.last&&s.last.at>this.seen.last?s.last:null,n=s.log.filter(t=>t.at>this.seen.log);
+ (e||n.length)&&(this.seen={
+ log:Math.max(this.seen.log,(null==(t=s.log[0])?void 0:t.at)??0),last:Math.max(this.seen.last,(null==(i=s.last)?void 0:i.at)??0)}
+ ,qDi(this.seen),this.showNotice(e,n))}
+ showNotice(t,i){
+ var s;
+ const e=this.notice,n=CRi.BLEED_W;
+ e.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const h=[];
+ if(t&&(t.cut?h.push({
+ text:`${
+ t.name}
+ 에게 들켰어요! 줄이 끊겨 빈손으로 돌아왔어요`,color:XIi}
+ ):h.push({
+ text:`${
+ t.name}
+ 의 어망에서 ${
+ t.n}
+ 마리를 훔쳤어요!`,color:VIi,ids:t.ids,grades:t.grades}
+ )),i.length){
+ const t=i.filter(t=>!t.cut).reduce((t,i)=>t+i.n,0);
+ h.push({
+ text:t>0?`어망에서 ${
+ t}
+ 마리를 도둑맞았어요`:"도둑이 왔지만 줄을 끊어 지켰어요",color:t>0?16765640:qIi}
+ );
+ for(const s of i.slice(0,3))h.push({
+ text:`· ${
+ s.name}
+  ${
+ s.cut?"줄을 끊었어요":`${
+ s.n}
+ 마리`}
+ `,color:zIi}
+ )}
+ const r=Math.min(n-20,420);
+ let o=12;
+ const a=[];
+ for(const d of h){
+ const t=rki(d.text,d.color,14,d.color!==zIi);
+ if(t.position.set(14,o),oki(t,r-28),a.push(t),o+=24,null==(s=d.ids)?void 0:s.length){
+ const t=Math.min(36,Math.floor((r-28-36)/10));
+ d.ids.slice(0,10).forEach((i,s)=>{
+ var e;
+ const n=new lki(t);
+ n.starsAlways=!0,n.set(i,kSi(i).star,(null==(e=d.grades)?void 0:e[s])??0),n.position.set(14+s*(t+4),o),a.push(n)}
+ ),o+=t+8}
+ }
+ const c=rki("눌러서 닫기",YIi,11,!1);
+ c.position.set(r-14-c.width,o),a.push(c),o+=20;
+ const l=(new ip).roundRect(0,0,r,o,12).fill({
+ color:QIi,alpha:.94}
+ );
+ e.addChild(l,...a),e.hitArea=new Ui(0,0,r,o),e.removeAllListeners("pointertap"),e.on("pointertap",t=>{
+ t.stopPropagation(),e.visible=!1}
+ );
+ const u=this.banner.visible?zDi+this.banner.height+8:zDi;
+ e.position.set((n-r)/2,u),e.visible=!0,MR.killTweensOf(e),MR.fromTo(e,{
+ alpha:0,y:u-12}
+ ,{
+ alpha:1,y:u,duration:.25}
+ ),MR.to(e,{
+ alpha:0,duration:.4,delay:15,onComplete:Qt(()=>{
+ e.visible=!1}
+ ,"onComplete")}
+ ),t&&!t.cut&&t.n>0?(jG("success"),jDi(qG.SFX_GOLD_GOBLIN,.5)):(null==t?void 0:t.cut)&&jDi(qG.SFX_STONE_BREAK,.5)}
+ layout(){
+ this.bannerW=0,this.peekPanel.visible&&this.renderPeek()}
+ onHide(){
+ this.closePeek(),this.notice.visible=!1}
+ }
+ ;
+ Qt(XDi,"FishingPlunderUi");
+ let JDi=XDi;
+ const QDi=Qt(t=>vH.getInstance().showMessage(t),"toast");
+ function ZDi(t,i){
+ try{
+ qG.getInstance().playSFX(t,i)}
+ catch{
+ }
+ }
+ Qt(ZDi,"sfx$3");
+ const tGi=Qt(t=>`${
+ t.src}
+ :${
+ t.id}
+ :${
+ t.grade}
+ :${
+ t.at}
+ :${
+ t.kg}
+ `,"refKey"),iGi=Qt(t=>t.reduce((t,i)=>t+vTi(i.id,i.grade,i.r??.5),0),"valueOf"),sGi=Qt(t=>gki(t,"이","가"),"ga");
+ function eGi(t,i,s){
+ const e=RIi.getInstance().others.find(i=>i.id===t),n=_Oi(null==e?void 0:e.lk);
+ if(n)return wki(_Ri(n),s);
+ const h=new Ve,r=rki(i.slice(0,1),16777215,Math.round(.42*s));
+ return h.addChild((new ip).circle(s/2,s/2,s/2).fill(UIi),r),r.position.set((s-r.width)/2,(s-r.height)/2),h.eventMode="none",h}
+ Qt(eGi,"faceOf");
+ const nGi=class t extends Ve{
+ constructor(t,i){
+ super(),Zt(this,"banner",new Ve),Zt(this,"ask",new Ve),Zt(this,"win",new Ve),Zt(this,"emo",new Ve),Zt(this,"fx",new Ve),Zt(this,"confirm",new Ve),Zt(this,"bannerY",Qt(()=>166,"bannerY")),Zt(this,"onOpen",null),Zt(this,"nameEnd",{
+ them:0,me:0}
+ ),Zt(this,"view",null),Zt(this,"local",null),Zt(this,"sendTimer",null),Zt(this,"sending",null),Zt(this,"tab","net"),Zt(this,"pick",null),Zt(this,"flash",null),Zt(this,"chgAt",0),Zt(this,"palOpen",!1),Zt(this,"emoUntil",0),Zt(this,"emoSeq",0),Zt(this,"skipMineEmo",!1),Zt(this,"theirsSig",""),Zt(this,"busyOk",!1),Zt(this,"swapping",!1),Zt(this,"gridScroll",0),Zt(this,"sailReq",null),Zt(this,"live",{
+ }
+ ),Zt(this,"rendering",!1),Zt(this,"sigs",{
+ banner:"",ask:"",win:""}
+ ),Zt(this,"chgOn",!1),Zt(this,"parts",new Map),this.scene=t,this.viewH=i;
+ for(const s of[this.banner,this.ask,this.win,this.emo,this.fx,this.confirm])s.visible=!1,s.eventMode="static";
+ this.emo.eventMode="none",this.addChild(this.banner,this.ask,this.win,this.emo,this.fx,this.confirm),RIi.getInstance().onTrade(t=>this.onView(t))}
+ get panelOpen(){
+ return this.ask.visible||this.win.visible||this.fx.visible}
+ closeOne(){
+ return this.fx.visible?(this.swapping&&!this.fx.children.some(t=>t.alpha>.9&&"result"===t.label)||this.finishResult(),!0):this.confirm.visible?(this.hideConfirm(),!0):this.win.visible?(this.showConfirm(),!0):!!this.ask.visible&&(RIi.getInstance().tradeAnswer(!1),!0)}
+ finishResult(){
+ queueMicrotask(()=>{
+ this.swapping=!1,this.closeAll(),this.view=null,RIi.getInstance().tradeDismiss()}
+ )}
+ showConfirm(){
+ var t;
+ const i=this.confirm,s=this.W,e=this.H,n=Math.min(s-60,360),h=(s-n)/2,r=156,o=(e-r)/2;
+ i.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const a=(new ip).rect(0,0,s,e).fill({
+ color:0,alpha:.55}
+ ),c=aki(n,r,1315863,null,16);
+ c.position.set(h,o);
+ const l=rki("거래를 그만둘까요?",VIi,18);
+ l.position.set(h+(n-l.width)/2,o+20);
+ const u=rki("올린 물고기는 그대로 내 어망·어항에 있어요",zIi,13,!1);
+ u.position.set(h+(n-u.width)/2,o+52),oki(u,n-24),u.x=h+(n-u.width)/2;
+ const d=(n-32-8)/2,f=new pki("계속 거래",d,44,15),p=new pki("그만두기",d,44,15);
+ f.setPrimary(!1),f.position.set(h+16,o+r-60),p.position.set(h+16+d+8,o+r-60),f.onTap=()=>this.hideConfirm(),p.onTap=()=>{
+ this.hideConfirm(),RIi.getInstance().tradeCancel()}
+ ,i.addChild(a,c,l,u,f,p),i.hitArea=new Ui(0,0,s,e),i.removeAllListeners("pointertap"),i.on("pointertap",t=>t.stopPropagation()),i.visible=!0,null==(t=this.parent)||t.setChildIndex(this,this.parent.children.length-1),MR.fromTo(c,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ )}
+ hideConfirm(){
+ this.confirm.visible=!1,queueMicrotask(()=>this.confirm.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )))}
+ get bannerBottom(){
+ return this.banner.visible?this.bannerY()+66:this.bannerY()}
+ get W(){
+ return CRi.BLEED_W}
+ get H(){
+ return this.viewH()}
+ request(t){
+ this.near(t.id,148)?this.sendRequest(t):this.scene.sailNearBoat(t.id)?(this.sailReq={
+ a:t,until:Date.now()+25e3}
+ ,QDi(`${
+ t.n}
+  옆으로 가요 · 닿으면 거래를 청해요`)):QDi("그 배 옆으로 갈 수 없어요")}
+ near(t,i=160){
+ const s=this.scene.boatPoint("me"),e=this.scene.boatPoint(t);
+ return!!s&&!!e&&Math.hypot(s.x-e.x,s.y-e.y)<=i}
+ async sendRequest(t){
+ this.sailReq=null;
+ const i=await RIi.getInstance().tradeRequest(t.id);
+ i?QDi(i):jG("light")}
+ onView(t){
+ const i=this.view,s=RIi.getInstance();
+ if(this.view=t,!t)return!i||"ask"!==i.phase&&"open"!==i.phase||this.fx.visible||QDi("거래가 끝났어요"),void(this.fx.visible||this.closeAll());
+ if("gone"===t.phase){
+ const e=t.other.name,n="reject"===t.why?t.asker?`${
+ sGi(e)}
+  거래를 거절했어요`:"":"timeout"===t.why?t.asker?`${
+ sGi(e)}
+  답이 없어요`:"거래 요청이 지나갔어요":"idle"===t.why?"오래 손대지 않아 거래가 닫혔어요":t.byMe?"":"open"===(null==i?void 0:i.phase)?`${
+ sGi(e)}
+  거래를 그만뒀어요`:`${
+ sGi(e)}
+  거래 요청을 거뒀어요`;
+ return n&&QDi(n),this.closeAll(),void s.tradeDismiss()}
+ if("done"===t.phase)return(null==i?void 0:i.id)!==t.id?(this.view=null,void s.tradeDismiss()):void(this.swapping||this.fx.visible||this.playSwap("open"===i.phase?i:null,t));
+ (null==i?void 0:i.id)!==t.id&&this.resetRoom(t),t.emote&&t.emote.seq>this.emoSeq&&(this.emoSeq=t.emote.seq,t.emote.mine&&this.skipMineEmo?this.skipMineEmo=!1:this.showEmote(t.emote.mine,t.emote.e));
+ const e=t.theirs.map(tGi).join("|");
+ (null==i?void 0:i.id)===t.id&&"open"===i.phase&&"open"===t.phase&&e!==this.theirsSig&&(this.chgAt=Date.now()+1e3,this.flash={
+ text:i.okMe?`${
+ sGi(t.other.name)}
+  올린 것을 바꿨어요 · 다시 보고 OK 해 주세요`:`${
+ sGi(t.other.name)}
+  올린 것을 바꿨어요`,until:Date.now()+3200}
+ ,jG("light")),this.theirsSig=e,this.sendTimer||this.sending||(this.local=null),this.render()}
+ front(){
+ var t,i;
+ null==(t=this.onOpen)||t.call(this),null==(i=this.parent)||i.setChildIndex(this,this.parent.children.length-1)}
+ resetRoom(t){
+ var i;
+ this.local=null,this.tab="net",this.pick=null,this.flash=null,this.palOpen=!1,this.emoSeq=(null==(i=t.emote)?void 0:i.seq)??0,this.theirsSig=t.theirs.map(tGi).join("|"),this.gridScroll=0,this.busyOk=!1}
+ closeAll(){
+ this.banner.visible=this.ask.visible=this.win.visible=this.emo.visible=this.fx.visible=this.confirm.visible=!1,this.palOpen=!1,this.swapping=!1,this.local=null,this.sendTimer&&(clearTimeout(this.sendTimer),this.sendTimer=null);
+ for(const t of[this.banner,this.ask,this.win,this.emo,this.fx])t.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ this.live={
+ }
+ ,this.sigs={
+ banner:"",ask:"",win:""}
+ ,this.parts.clear()}
+ onHide(){
+ this.sailReq=null;
+ const t=RIi.getInstance();
+ t.tradeLive&&!t.tradePreview&&t.tradeCancel()}
+ layout(){
+ this.render()}
+ update(){
+ const t=this.sailReq;
+ t&&(this.near(t.a.id,148)?this.sendRequest(t.a):Date.now()>t.until&&(this.sailReq=null,QDi("옆에 닿지 못했어요 · 다시 눌러 주세요")));
+ const i=this.view;
+ if("ask"===(null==i?void 0:i.phase)&&this.live.text){
+ const t=Math.max(0,i.exp-RIi.getInstance().realNow()),s=Math.ceil(t/1e3);
+ this.live.text.text=i.asker?`답을 기다려요 · ${
+ s}
+ 초`:`${
+ s}
+ 초 안에 고르지 않으면 저절로 거절돼요`;
+ const{
+ bar:e,barW:n=0,barX:h=0,barY:r=0}
+ =this.live;
+ e&&e.clear().roundRect(h,r,Math.max(4,n*(t/2e4)),i.asker?3:6,3).fill(VIi)}
+ "open"===(null==i?void 0:i.phase)&&this.flash&&Date.now()>this.flash.until&&(this.flash=null,this.render()),"open"===(null==i?void 0:i.phase)&&this.chgOn!==this.chgAt>Date.now()&&this.render()}
+ render(){
+ if(!this.rendering&&!this.swapping){
+ this.rendering=!0;
+ try{
+ const t=this.view;
+ this.renderBanner("ask"===(null==t?void 0:t.phase)&&t.asker?t:null),this.renderAsk("ask"!==(null==t?void 0:t.phase)||t.asker?null:t),this.renderWin("open"===(null==t?void 0:t.phase)?t:null)}
+ finally{
+ this.rendering=!1}
+ }
+ }
+ soon(){
+ queueMicrotask(()=>this.render())}
+ renderBanner(t){
+ const i=this.banner,s=t?`${
+ t.id}
+ |${
+ t.other.name}
+ |${
+ this.bannerY()}
+ |${
+ this.W}
+ `:"";
+ if(s===this.sigs.banner&&i.visible===!!t)return;
+ if(this.sigs.banner=s,i.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),i.visible=!!t,!t)return;
+ const e=this.W-20,n=this.bannerY();
+ i.addChild(aki(e,58,QIi,null,12)).position.set(10,n),i.children[0].alpha=.94;
+ const h=rki(`${
+ t.other.name}
+ 에게 거래를 청했어요`,VIi,14);
+ h.position.set(24,n+9),oki(h,e-110);
+ const r=rki("답을 기다려요",zIi,12,!1);
+ r.position.set(24,n+31);
+ const o=new ip,a=new pki("취소",72,34,13);
+ a.setPrimary(!1),a.position.set(10+e-10-72,n+12),a.onTap=()=>{
+ RIi.getInstance().tradeCancel()}
+ ,i.addChild(h,r,o,a),this.live={
+ text:r,bar:o,barW:e,barX:10,barY:n+58-3}
+ ,this.update()}
+ renderAsk(t){
+ const i=this.ask,s=t?`${
+ t.id}
+ |${
+ t.other.name}
+ |${
+ RIi.getInstance().tradeLeft()}
+ |${
+ this.W}
+ |${
+ this.H}
+ `:"";
+ if(s===this.sigs.ask&&i.visible===!!t)return;
+ this.sigs.ask=s,i.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const e=i.visible;
+ if(i.visible=!!t,!t)return;
+ e||this.front();
+ const n=RIi.getInstance(),h=this.W,r=this.H,o=Math.min(h-20,460),a=(h-o)/2,c=176,l=r-c-8,u=a+16,d=aki(o,c,QIi,null,14);
+ d.alpha=.97,d.position.set(a,l);
+ const f=eGi(t.other.id,t.other.name,44);
+ f.position.set(u,l+14);
+ const p=rki(`${
+ t.other.name}
+  님이 거래하자고 해요`,VIi,17);
+ p.position.set(u+54,l+14),oki(p,o-86);
+ const g=rki(`어망·어항 물고기를 서로 6마리까지 바꿔요 · 오늘 남은 거래 ${
+ n.tradeLeft()}
+ 번`,zIi,12,!1);
+ g.position.set(u+54,l+40),oki(g,o-86);
+ const w=(new ip).roundRect(u,l+72,o-32,6,3).fill(BIi),m=new ip,v=rki("",YIi,12,!1);
+ v.position.set(u,l+84);
+ const _=new pki("거절",120,44,15),M=new pki("수락",o-32-128,44,15);
+ _.setPrimary(!1),_.position.set(u,l+c-58),M.position.set(u+128,l+c-58),_.onTap=()=>{
+ n.tradeAnswer(!1)}
+ ,M.onTap=async()=>{
+ M.enabled=!1;
+ const t=await n.tradeAnswer(!0);
+ t&&(QDi(t),M.destroyed||(M.enabled=!0))}
+ ,i.addChild(d,f,p,g,w,m,v,_,M),i.hitArea=new Ui(0,0,h,r),i.removeAllListeners("pointertap"),i.on("pointertap",t=>t.stopPropagation()),this.live={
+ text:v,bar:m,barW:o-32,barX:u,barY:l+72}
+ ,this.update()}
+ mine(t){
+ return this.local??t.mine}
+ geo(){
+ const t=this.W,i=this.H,s=t-16,e=i-10-8,n=s-24,h=Math.min(56,Math.floor((n-20-30)/6)),r=32+h+10,o=56+r+12,a=o+r+10,c=a+26,l=c+40,u=10+e-12-46;
+ return{
+ W:t,H:i,x0:8,y0:10,PW:s,PH:e,L:20,IW:n,S:h,blkH:r,aTop:56,bTop:o,infoY:a,phY:c,gridTop:l,gridH:Math.max(60,u-10-l),footY:u,cell:48,gap:6,cols:Math.max(4,Math.floor((n+6)/54))}
+ }
+ slotPos(t,i){
+ const s=this.geo(),e=6*s.S+30;
+ return{
+ x:s.L+(s.IW-e)/2+i*(s.S+6),y:("a"===t?s.aTop:s.bTop)+32}
+ }
+ card(t,i){
+ const s=new lki(i);
+ return s.set(t.id,kSi(t.id).star,t.grade),s}
+ part(t,i,s,e){
+ let n=this.parts.get(t);
+ n||(n={
+ c:new Ve,sig:"\0"}
+ ,n.c.label=t,this.parts.set(t,n),this.win.addChild(n.c)),(e||n.sig!==i)&&(n.sig=i,n.c.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),s(n.c))}
+ renderWin(t,i=!1){
+ var s;
+ const e=this.win,n=RIi.getInstance(),h=e.visible;
+ if(e.visible=!!t,this.emo.visible=!!t,!t)return void((h||this.parts.size)&&(e.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),this.parts.clear()));
+ h||this.front(),this.chgOn=this.chgAt>Date.now();
+ const r=this.geo(),{
+ W:o,H:a,x0:c,y0:l,PW:u,PH:d,L:f,IW:p,S:g,blkH:w}
+ =r,m=n.tradeFish(),v=this.mine(t),_=t.theirs,M=aIi(m.net.length,n.netCap,m.aq.length,iIi((null==(s=n.state.aquarium)?void 0:s.lv)??0),v,_),b=`${
+ o}
+ x${
+ a}
+ `;
+ this.part("frame",JSON.stringify([t.other.name,n.tradeLeft(),b]),i=>{
+ const s=(new ip).rect(0,0,o,a).fill({
+ color:0,alpha:.5}
+ ),e=aki(u,d,QIi,null,16);
+ e.alpha=.97,e.position.set(c,l);
+ const h=rki(`${
+ gki(t.other.name,"과","와")}
+  거래`,VIi,18);
+ h.position.set(f,l+14),oki(h,p-130);
+ const r=rki(`오늘 남은 거래 ${
+ n.tradeLeft()}
+ 번`,zIi,12,!1);
+ r.position.set(f+p-r.width,l+20),i.addChild(s,e,h,r)}
+ ,i),this.part("rows",JSON.stringify([v.map(tGi),_.map(tGi),t.okMe,t.okThem,this.chgOn,this.swapping,t.other.name,b]),i=>{
+ const s=Qt((t,s,e,n,h,r)=>{
+ const o=(new ip).roundRect(f,t,p,w,12).fill(n?1451549:"them"===s&&this.chgOn?3811860:1710621),a=(new ip).circle(f+14,t+16,4).fill(r),c=rki(h,KIi,14);
+ c.position.set(f+24,t+7);
+ const l=n?mki("OK",730132,qIi,11):mki("고르는 중",zIi,BIi,11);
+ l.position.set(f+30+c.width,t+8),this.nameEnd[s]=l.x+l.width;
+ const u=rki(e.length?`팔면 ${
+ iGi(e).toLocaleString()}
+ 골드`:"me"===s?`${
+ e.length}
+ /6`:"아직 없음",zIi,12);
+ u.position.set(f+p-10-u.width,t+9),i.addChild(o,a,c,l,u);
+ for(let d=0;
+ d<6;
+ d++){
+ const t=this.slotPos("them"===s?"a":"b",d),n=this.swapping?void 0:e[d];
+ if(!n){
+ if(i.addChild((new ip).roundRect(t.x,t.y,g,g,.2*g).fill("me"===s?2302758:2039586)),"me"===s&&d===e.length&&!this.swapping){
+ const s=rki("+",4868688,22);
+ s.position.set(t.x+(g-s.width)/2,t.y+(g-s.height)/2),i.addChild(s)}
+ continue}
+ const h=new Ve;
+ h.position.set(t.x,t.y),h.addChild(this.card(n,g)),h.eventMode="static",h.cursor="pointer",h.hitArea=new Ui(0,0,g,g),h.label=`slot-${
+ s}
+ -${
+ d}
+ `,h.on("pointertap",t=>{
+ t.stopPropagation(),"me"===s?this.removeMine(n):(this.pick={
+ who:"them",ref:n}
+ ,this.soon())}
+ ),i.addChild(h)}
+ }
+ ,"row");
+ s(r.aTop,"them",_,t.okThem,`${
+ sGi(t.other.name)}
+  올린 것`,9418751),s(r.bTop,"me",v,t.okMe,"내가 올린 것",VIi);
+ const e=new Ve;
+ e.addChild((new ip).circle(0,0,15).fill(BIi),this.swapIcon()),e.position.set(o/2,r.bTop-6),e.label="swapIcon",i.addChild(e)}
+ ,i);
+ let y="아래에서 누르면 올려요 · 올린 칸을 누르면 빼요",E=zIi;
+ if(this.flash&&this.flash.until>Date.now())y=this.flash.text,E=this.flash.bad?XIi:16757611;
+ else if(M.ok){
+ if(this.pick){
+ const i=this.pick.ref,s=kSi(i.id);
+ y=`${
+ s.name}
+ ${
+ fTi(i.grade)}
+  ${
+ "★".repeat(s.star)}
+  · ${
+ _Ti(i.kg)}
+  · 팔면 ${
+ vTi(i.id,i.grade,i.r??.5).toLocaleString()}
+ 골드${
+ "aq"===i.src?" · 어항":""}
+ ${
+ "them"===this.pick.who?` · ${
+ t.other.name}
+  것`:""}
+ `,E=KIi}
+ }
+ else y=`받을 어망 자리가 ${
+ M.short}
+ 칸 모자라요 · 어망을 비우거나 덜 받아 주세요`,E=XIi;
+ this.part("info",JSON.stringify([y,E,b]),t=>{
+ const i=rki(y,E,12.5,E!==zIi);
+ i.position.set(f+2,r.infoY),oki(i,p-4),t.addChild(i)}
+ ,i);
+ const A=`${
+ m.net.map(t=>`${
+ t.id}
+ :${
+ t.grade}
+ :${
+ t.at}
+ `).join()}
+ |${
+ m.aq.map(t=>`${
+ t.id}
+ :${
+ t.grade}
+ :${
+ t.at}
+ `).join()}
+ `;
+ this.part("picker",JSON.stringify([this.tab,A,v.map(tGi),M.netFree,M.aqFree,M.ok,b]),t=>{
+ [["어망","net",m.net.length],["어항","aq",m.aq.length]].forEach(([i,s,e],n)=>{
+ const h=new dki(`${
+ i}
+  ${
+ e}
+ `,84,30,13);
+ h.selected=this.tab===s,h.draw(),h.position.set(f+90*n,r.phY),h.onTap=()=>{
+ this.tab!==s&&(this.tab=s,this.gridScroll=0,this.soon())}
+ ,t.addChild(h)}
+ );
+ const i=M.ok?YIi:XIi,s=rki("받을 자리",i,11,!M.ok),e=rki(`어망 ${
+ M.netFree}
+ 칸 · 어항 ${
+ M.aqFree}
+ 칸`,i,11,!M.ok);
+ s.position.set(f+p-s.width,r.phY),e.position.set(f+p-e.width,r.phY+15),t.addChild(s,e,this.grid(v,m))}
+ ,i);
+ const S=!v.length&&!_.length,T=this.swapping?["바꾸는 중…",!1,!0]:this.busyOk?["…",!1,!0]:S?["물고기를 올려 주세요",!1,!0]:M.ok?t.okMe&&!this.local?[`OK 풀기 · ${
+ t.other.name}
+  기다리는 중`,!0,!1]:["OK",!0,!0]:["받을 자리가 모자라요",!1,!0],C=Date.now()>=this.emoUntil;
+ this.part("foot",JSON.stringify([T,this.palOpen,C,b]),t=>{
+ const i=new pki("😊",46,46,20);
+ i.setPrimary(this.palOpen),i.enabled=C,i.position.set(f,r.footY),i.onTap=()=>{
+ this.palOpen=!this.palOpen,this.soon()}
+ ;
+ const s=new pki("그만두기",92,46,15);
+ s.setPrimary(!1),s.position.set(f+54,r.footY),s.onTap=()=>{
+ n.tradeCancel()}
+ ;
+ const e=new pki(T[0],p-54-100,46,15);
+ e.position.set(f+154,r.footY),e.enabled=T[1],e.setPrimary(T[2]),e.onTap=()=>{
+ this.toggleOk()}
+ ,t.addChild(i,s,e)}
+ ,i),this.part("pal",JSON.stringify([this.palOpen,b]),t=>{
+ this.palOpen&&t.addChild(this.palette(r))}
+ ,i),h&&!i||(e.hitArea=new Ui(0,0,o,a),e.removeAllListeners("pointertap"),e.on("pointertap",t=>{
+ t.stopPropagation(),this.palOpen&&(this.palOpen=!1,this.soon())}
+ ))}
+ swapIcon(){
+ const t=new ip,i={
+ color:VIi,width:2.4,cap:"round",join:"round"}
+ ;
+ return t.moveTo(-4,-6).lineTo(-4,7).stroke(i).moveTo(-8,3).lineTo(-4,7).lineTo(0,3).stroke(i).moveTo(4,7).lineTo(4,-6).stroke(i).moveTo(0,-2).lineTo(4,-6).lineTo(8,-2).stroke(i),t.scale.set(1),t}
+ grid(t,i){
+ const s=this.geo(),e=("net"===this.tab?i.net:i.aq).map(t=>({
+ c:t,r:rIi(t,this.tab)}
+ )).sort((t,i)=>vTi(i.c.id,i.c.grade,i.c.r)-vTi(t.c.id,t.c.grade,t.c.r)),n=new Ve,h=new Ve,r=(new ip).rect(s.L,s.gridTop,s.IW,s.gridH).fill(16777215);
+ n.addChild(h,r),h.mask=r;
+ const o=Math.ceil(e.length/s.cols)*(s.cell+s.gap),a=Math.max(0,o-s.gridH);
+ this.gridScroll=Math.max(0,Math.min(a,this.gridScroll));
+ const c=new Set,l=e.map((t,i)=>({
+ ...t,i}
+ ));
+ for(const f of t){
+ const t=l.findIndex(t=>!c.has(t.i)&&oIi(t.r,f));
+ t>=0&&c.add(t)}
+ if(l.forEach((t,i)=>{
+ const e=new lki(s.cell);
+ if(e.set(t.c.id,kSi(t.c.id).star,t.c.grade),e.position.set(s.L+i%s.cols*(s.cell+s.gap),s.gridTop+Math.floor(i/s.cols)*(s.cell+s.gap)),c.has(i)){
+ e.alpha=.35;
+ const t=(new ip).moveTo(-7,0).lineTo(-2,5).lineTo(8,-6).stroke({
+ color:VIi,width:3.2,cap:"round",join:"round"}
+ );
+ t.position.set(e.x+s.cell/2,e.y+s.cell/2),h.addChild(e,t)}
+ else h.addChild(e)}
+ ),!e.length){
+ const t=rki("net"===this.tab?"어망이 비어 있어요":"어항이 비어 있어요",zIi,13,!1);
+ t.position.set(s.L+4,s.gridTop+6),h.addChild(t)}
+ h.y=-this.gridScroll,n.eventMode="static",n.hitArea=new Ui(s.L,s.gridTop,s.IW,s.gridH);
+ let u=null;
+ n.on("pointerdown",t=>{
+ u={
+ y:t.global.y,s:this.gridScroll,moved:!1}
+ }
+ ),n.on("globalpointermove",t=>{
+ if(!u)return;
+ const i=t.global.y-u.y;
+ Math.abs(i)>6&&(u.moved=!0),u.moved&&(this.gridScroll=Math.max(0,Math.min(a,u.s-i)),h.y=-this.gridScroll)}
+ );
+ const d=Qt(()=>{
+ setTimeout(()=>{
+ u=null}
+ ,0)}
+ ,"end");
+ return n.on("pointerup",d),n.on("pointerupoutside",d),n.on("wheel",t=>{
+ this.gridScroll=Math.max(0,Math.min(a,this.gridScroll+t.deltaY)),h.y=-this.gridScroll}
+ ),n.on("pointertap",t=>{
+ if(t.stopPropagation(),null==u?void 0:u.moved)return;
+ const i=n.toLocal(t.global),e=i.x-s.L,h=i.y-s.gridTop+this.gridScroll,r=Math.floor(e/(s.cell+s.gap)),o=Math.floor(h/(s.cell+s.gap));
+ if(r<0||r>=s.cols||e%(s.cell+s.gap)>s.cell||h%(s.cell+s.gap)>s.cell)return;
+ const a=l[o*s.cols+r];
+ a&&this.addMine(a.r)}
+ ),n}
+ palette(t){
+ const i=new Ve,s=(t.IW-18)/4,e=t.footY-10-138;
+ return i.addChild((new ip).roundRect(t.L,e,t.IW,138,14).fill(2500139)),hIi.forEach(([n,h],r)=>{
+ const o=new Ve,a=t.L+8+r%4*(s+2),c=e+8+64*Math.floor(r/4);
+ o.addChild((new ip).roundRect(0,0,s-4,58,10).fill(3421242));
+ const l=rki(n,KIi,22),u=rki(h,KIi,11);
+ l.position.set((s-4-l.width)/2,6),u.position.set((s-4-u.width)/2,36),oki(u,s-10),u.x=(s-4-u.width)/2,o.addChild(l,u),o.position.set(a,c),o.eventMode="static",o.cursor="pointer",o.hitArea=new Ui(0,0,s-4,58),o.on("pointertap",t=>{
+ t.stopPropagation(),this.sendEmote(r)}
+ ),i.addChild(o)}
+ ),i}
+ addMine(t){
+ const i=this.view;
+ if(!i||"open"!==i.phase)return;
+ const s=[...this.mine(i)];
+ return this.pick={
+ who:"me",ref:t}
+ ,s.some(i=>oIi(i,t))?(QDi("이미 올렸어요 · 위 칸을 누르면 빼요"),void this.soon()):s.length>=6?(QDi("한 번에 6마리까지 올릴 수 있어요"),void this.soon()):(s.push(t),void this.changeMine(s))}
+ removeMine(t){
+ const i=this.view;
+ if(!i)return;
+ const s=[...this.mine(i)],e=s.findIndex(i=>oIi(i,t));
+ e>=0&&s.splice(e,1),this.pick=null,this.changeMine(s)}
+ changeMine(t){
+ this.local=t,this.view&&(this.view={
+ ...this.view,okMe:!1,okThem:!1}
+ ),jG("light"),this.sendTimer&&clearTimeout(this.sendTimer),this.sendTimer=setTimeout(()=>{
+ this.sendTimer=null,this.flushOffer()}
+ ,250),this.soon()}
+ async flushOffer(){
+ for(this.sendTimer&&(clearTimeout(this.sendTimer),this.sendTimer=null);
+ this.sending;
+ )await this.sending;
+ const t=this.local;
+ if(!t)return;
+ const i=RIi.getInstance();
+ this.sending=(async()=>{
+ const s=await i.tradeOffer(t);
+ s?(QDi(s),this.local=null):this.local===t&&(this.local=null)}
+ )().finally(()=>{
+ this.sending=null}
+ ),await this.sending,this.local?await this.flushOffer():this.soon()}
+ async toggleOk(){
+ if(!this.busyOk){
+ this.busyOk=!0,this.soon();
+ try{
+ await this.flushOffer();
+ const t=this.view;
+ if(!t||"open"!==t.phase)return;
+ const i=await RIi.getInstance().tradeReady(!t.okMe);
+ i?QDi(i):jG("medium")}
+ finally{
+ this.busyOk=!1,this.soon()}
+ }
+ }
+ async sendEmote(t){
+ if(Date.now()<this.emoUntil)return;
+ this.palOpen=!1,this.emoUntil=Date.now()+1500,setTimeout(()=>this.soon(),1530),this.showEmote(!0,t),this.skipMineEmo=!0,this.soon();
+ const i=await RIi.getInstance().tradeEmote(t);
+ i&&(this.skipMineEmo=!1,QDi(i))}
+ showEmote(t,i){
+ const s=hIi[i];
+ if(!s||!this.win.visible)return;
+ const e=this.geo(),n=t?e.bTop:e.aTop;
+ for(const c of[...this.emo.children])c.label===(t?"emo-me":"emo-them")&&c.destroy({
+ children:!0}
+ );
+ const h=new Ve,r=rki(s[0],1315863,20),o=rki(s[1],1315863,14),a=r.width+o.width+22;
+ h.addChild((new ip).roundRect(0,0,a,34,16).fill(15921908).poly([12,33,24,33,14,41]).fill(15921908),r,o),r.position.set(9,(34-r.height)/2),o.position.set(13+r.width,(34-o.height)/2),h.label=t?"emo-me":"emo-them",h.pivot.set(12,41),h.position.set(Math.min(e.L+e.IW-a,this.nameEnd[t?"me":"them"]+18),n+2),this.emo.addChild(h),MR.fromTo(h.scale,{
+ x:.4,y:.4}
+ ,{
+ x:1,y:1,duration:.3,ease:"back.out(2.2)"}
+ ),MR.fromTo(h,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ ),MR.to(h,{
+ alpha:0,y:h.y-6,delay:2.5,duration:.3,onComplete:Qt(()=>{
+ h.destroyed||h.destroy({
+ children:!0}
+ )}
+ ,"onComplete")}
+ ),t||jG("light")}
+ playSwap(i,s){
+ const e=s.result;
+ if(!e)return RIi.getInstance().tradeDismiss(),void this.closeAll();
+ this.view={
+ ...i??s,phase:"open",mine:e.gave,theirs:e.got,okMe:!0,okThem:!0}
+ ,this.palOpen=!1,this.local=null,this.swapping=!0,this.renderWin(this.view,!0),this.renderBanner(null),this.renderAsk(null);
+ const n=this.fx,h=this.geo();
+ n.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),n.visible=!0,n.hitArea=new Ui(0,0,h.W,h.H),n.removeAllListeners("pointertap"),n.on("pointertap",t=>t.stopPropagation());
+ const r=[],o=Qt((t,i,s,e)=>{
+ const o=(new ip).circle(0,0,.7*h.S).fill({
+ color:16771488,alpha:.55}
+ );
+ o.alpha=0;
+ const a=this.card(t,h.S);
+ a.pivot.set(h.S/2,h.S/2),n.addChild(o,a),r.push({
+ c:a,from:i,to:s,side:e,big:kSi(t.id).star>=4||t.grade>=3,glow:o}
+ )}
+ ,"add");
+ e.gave.forEach((t,i)=>o(t,this.slotPos("b",i),this.slotPos("a",i),1)),e.got.forEach((t,i)=>o(t,this.slotPos("a",i),this.slotPos("b",i),-1));
+ const a=(new ip).rect(0,0,h.W,h.H).fill(0);
+ a.alpha=0;
+ const c=this.resultCard(s);
+ n.addChild(a,c);
+ const l=this.win.getChildByLabel("swapIcon",!0),u=performance.now(),d=t.speed;
+ let f=!1;
+ const p=Qt(()=>{
+ if(n.destroyed||!n.visible)return void vn.shared.remove(p);
+ const t=Math.min(1.6,(performance.now()-u)/1e3*d),i=fIi(t);
+ for(const s of r){
+ const t=s.from.x+(s.to.x-s.from.x)*i.cross+22*s.side*Math.sin(Math.PI*i.cross),e=s.from.y+(s.to.y-s.from.y)*i.cross-6*i.lift;
+ s.c.position.set(t+h.S/2,e+h.S/2),s.c.scale.set(1+.06*i.lift+.14*i.pop),s.c.zIndex=s.side>0?1:2,s.glow.position.set(s.to.x+h.S/2,s.to.y+h.S/2),s.glow.alpha=s.big?i.pop:0,s.glow.scale.set(.6+i.pop)}
+ l&&(l.rotation=Math.PI*i.spin),a.alpha=.5*i.dim,c.alpha=i.result,c.y=40*(1-i.result),!f&&t>=.9&&(f=!0,jG("medium"),ZDi(qG.SFX_ARCHERY_FIRE_ARROW,.35)),t>=1.6&&vn.shared.remove(p)}
+ ,"tick");
+ n.sortableChildren=!0,a.zIndex=9,c.zIndex=10,vn.shared.add(p)}
+ resultCard(t){
+ const i=RIi.getInstance(),s=t.result,e=this.geo(),n=new Ve,h=Math.min(e.W-36,400),r=(e.W-h)/2,o=r+16;
+ n.label="result";
+ const a=[];
+ let c=18;
+ const l=rki(s.got.length?"교환했어요!":"건네줬어요!",VIi,20);
+ if(l.position.set(r+(h-l.width)/2,c),a.push(l),c+=38,s.got.length){
+ const t=rki("받은 것",zIi,12,!1);
+ t.position.set(o,c),a.push(t),c+=22;
+ const i=56,e=10,n=Math.max(1,Math.floor((h-32+e)/(i+e))),l=Math.ceil(s.got.length/n);
+ s.got.forEach((t,o)=>{
+ const l=Math.floor(o/n),u=Math.min(n,s.got.length-l*n),d=r+(h-(u*i+(u-1)*e))/2+o%n*(i+e),f=c+l*(i+26),p=this.card(t,i);
+ p.position.set(d,f),a.push(p);
+ const g=rki(kSi(t.id).name,13224398,10.5,!1);
+ oki(g,i+8),g.position.set(d+(i-g.width)/2,f+i+3),a.push(g)}
+ ),c+=l*(i+26)+4;
+ const u=rki([s.toNet?`어망으로 ${
+ s.toNet}
+ 마리`:"",s.toAq?`어항으로 ${
+ s.toAq}
+ 마리`:""].filter(Boolean).join(" · "),zIi,12.5,!1);
+ u.position.set(r+(h-u.width)/2,c),a.push(u),c+=26}
+ else{
+ const t=rki("받은 것 없음 (선물)",zIi,12.5,!1);
+ t.position.set(r+(h-t.width)/2,c),a.push(t),c+=26}
+ if(s.gave.length){
+ const t=rki("준 것",zIi,12,!1);
+ t.position.set(o,c),a.push(t),c+=20;
+ const i=34,e=5,n=s.gave.length*i+(s.gave.length-1)*e;
+ s.gave.forEach((t,s)=>{
+ const o=this.card(t,i);
+ o.alpha=.55,o.position.set(r+(h-n)/2+s*(i+e),c),a.push(o)}
+ ),c+=i+12}
+ const u=rki(`오늘 남은 거래 ${
+ i.tradeLeft()}
+ 번`,zIi,12.5,!1);
+ u.position.set(r+(h-u.width)/2,c),a.push(u),c+=26;
+ const d=new pki("확인",h-32,44,15);
+ d.position.set(o,c),d.onTap=()=>this.finishResult(),a.push(d),c+=58;
+ const f=c,p=Math.max(20,(e.H-f)/2),g=(new ip).roundRect(r,0,h,f,16).fill(1315863);
+ return n.addChild(g,...a),n.pivot.set(0,-p),n.alpha=0,n}
+ }
+ ;
+ Qt(nGi,"FishingTradeUi"),Zt(nGi,"speed",1);
+ let hGi=nGi;
+ const rGi=class extends Ve{
+ constructor(t,i){
+ super(),Zt(this,"box",new Ve),Zt(this,"target",null),Zt(this,"w",236),Zt(this,"follow",Qt(()=>this.place(),"follow")),Zt(this,"onTrade",null),Zt(this,"onPeek",null),Zt(this,"onHelp",null),Zt(this,"wantsHelp",Qt(()=>!1,"wantsHelp")),this.scene=t,this.viewH=i,this.visible=!1,this.eventMode="static",this.addChild(this.box),this.on("pointertap",t=>{
+ this.box.getBounds().containsPoint(t.global.x,t.global.y)||(t.stopPropagation(),this.close())}
+ )}
+ get isOpen(){
+ return this.visible}
+ open(t){
+ this.target=t,this.render(),this.visible=!0,this.hitArea=new Ui(0,0,CRi.BLEED_W,this.viewH()),this.place(),vn.shared.remove(this.follow),vn.shared.add(this.follow),MR.fromTo(this.box,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.14}
+ ),jG("light")}
+ close(){
+ this.visible=!1,this.target=null,vn.shared.remove(this.follow)}
+ gate(t){
+ const i=RIi.getInstance(),s=i.plunder,e=this.scene.boatPoint("me"),n=this.scene.boatPoint(t.id),h=!e||!n||Math.hypot(e.x-n.x,e.y-n.y)>nIi,r=this.wantsHelp(t)?"고치는 중 · ":"";
+ return t.a?{
+ ok:!1,far:h,text:"자리 비움 · 거래는 둘 다 있을 때만",warn:!0}
+ :(null==s?void 0:s.raid)||(null==s?void 0:s.raidBy)?{
+ ok:!1,far:h,text:"털기 중에는 거래할 수 없어요",warn:!0}
+ :i.tradeLeft()<=0?{
+ ok:!1,far:h,text:"오늘 거래를 다 했어요 (하루 10번)",warn:!0}
+ :i.tradeLive?{
+ ok:!1,far:h,text:"다른 거래가 진행 중이에요",warn:!0}
+ :h?{
+ ok:!0,far:h,text:`${
+ r}
+ 조금 멀어요 · 누르면 옆으로 가서 청해요`,warn:!1}
+ :{
+ ok:!0,far:h,text:`${
+ r}
+ 바로 옆이에요 · 오늘 남은 거래 ${
+ i.tradeLeft()}
+ 번`,warn:!1}
+ }
+ render(){
+ const t=this.target,i=this.box;
+ if(i.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),!t)return;
+ const s=this.wantsHelp(t),e=this.gate(t),n=this.w=s?300:236,h=(n-24-(s?16:8))/(s?3:2),r=(new ip).roundRect(0,0,n,112,14).fill({
+ color:QIi,alpha:.96}
+ ),o=(new ip).poly([-7,0,7,0,0,8]).fill({
+ color:QIi,alpha:.96}
+ );
+ o.label="tail",o.y=112,r.eventMode="static";
+ const a=rki(`${
+ t.n}
+  님의 배`,VIi,15);
+ a.position.set(12,11),oki(a,n-24);
+ const c=rki(e.text,e.warn?XIi:s?16757611:zIi,12,!1);
+ c.position.set(12,34),oki(c,n-24);
+ const l=new pki("거래하기",h,40,14);
+ l.enabled=e.ok,l.onTap=()=>{
+ var t;
+ const i=this.target;
+ this.close(),i&&(null==(t=this.onTrade)||t.call(this,i))}
+ ;
+ const u=new pki("훔쳐보기",h,40,14);
+ if(u.setPrimary(!1),u.onTap=()=>{
+ var t;
+ const i=this.target;
+ this.close(),i&&(null==(t=this.onPeek)||t.call(this,i))}
+ ,l.position.set(12,60),u.position.set(12+h+8,60),i.addChild(r,o,a,c,l,u),s){
+ const t=new pki("수리 돕기",h,40,14);
+ t.setPrimary(!1),t.onTap=()=>{
+ var t;
+ const i=this.target;
+ this.close(),i&&(null==(t=this.onHelp)||t.call(this,i))}
+ ,t.position.set(12+2*(h+8),60),i.addChild(t)}
+ }
+ place(){
+ const t=this.target;
+ if(!t||!this.visible)return;
+ const i=this.scene.boatPoint(t.id);
+ if(!i)return void this.close();
+ const s=this.toLocal(this.scene.worldToGlobal(i.x,i.y)),e=this.w,n=Math.max(10,Math.min(CRi.BLEED_W-10-e,s.x-e/2)),h=Math.max(8,s.y-46-112);
+ this.box.position.set(n,h);
+ const r=this.box.getChildByLabel("tail");
+ r&&(r.x=Math.max(16,Math.min(e-16,s.x-n)))}
+ }
+ ;
+ Qt(rGi,"FishingBoatMenu");
+ let oGi=rGi;
+ const aGi={
+ gust:{
+ name:"돌풍",cause:"돌풍으로",icon:"wind",color:11986151,prefixes:["돌풍"]}
+ ,rapid:{
+ name:"급류",cause:"급류로",icon:"rapid",color:8375529,prefixes:["급류"]}
+ ,rock:{
+ name:"바위 충돌",cause:"바위 충돌로",icon:"rock",color:12504016,prefixes:["바위"]}
+ ,wave:{
+ name:"큰파도",cause:"큰파도로",icon:"wave",color:8902897,prefixes:["거센 파도","큰파도","큰 파도"]}
+ ,reef:{
+ name:"암초 충돌",cause:"암초 충돌로",icon:"rock",color:10340045,prefixes:["암초"]}
+ ,swell:{
+ name:"큰 너울",cause:"큰 너울로",icon:"wave",color:8042992,prefixes:["큰 너울"]}
+ ,storm:{
+ name:"폭풍",cause:"폭풍으로",icon:"storm",color:12369136,prefixes:["폭풍"]}
+ ,thunder:{
+ name:"번개",cause:"번개로",icon:"thunder",color:16766843,prefixes:["번개"]}
+ ,monster:{
+ name:"몬스터의 물살",cause:"몬스터의 물살로",icon:"monster",color:12822761,prefixes:["몬스터"]}
+ ,log:{
+ name:"통나무 충돌",cause:"통나무 충돌로",icon:"log",color:14464907,prefixes:["떠내려온 통나무","통나무"]}
+ ,vine:{
+ name:"가시 덩굴",cause:"가시 덩굴로",icon:"vine",color:10869146,prefixes:["가시 덩굴"]}
+ ,ghost:{
+ name:"망령의 손길",cause:"망령의 손길로",icon:"ghost",color:12892397,prefixes:["망령"]}
+ ,ice:{
+ name:"얼음 충돌",cause:"얼음 덩어리 충돌로",icon:"ice",color:10938865,prefixes:["얼음"]}
+ }
+ ,cGi={
+ name:"재난",cause:"재난으로",icon:"warning",color:16764803,prefixes:[]}
+ ;
+ function lGi(t){
+ return aGi[t]??Object.values(aGi).find(i=>i.prefixes.some(i=>t.startsWith(i)))??cGi}
+ function uGi(t,i=30){
+ const s=new ip,e=t.color,n={
+ color:e,width:2.1,cap:"round",join:"round"}
+ ;
+ switch(s.eventMode="none",t.icon){
+ case"wind":s.moveTo(3,10).lineTo(20,10).bezierCurveTo(28,10,27,2,22,4).stroke(n).moveTo(1,16).lineTo(25,16).bezierCurveTo(33,16,31,24,26,22).stroke(n).moveTo(5,22).lineTo(16,22).bezierCurveTo(23,22,22,30,17,28).stroke(n);
+ break;
+ case"wave":s.moveTo(2,25).bezierCurveTo(9,24,7,10,16,6).bezierCurveTo(23,2,30,7,27,12).bezierCurveTo(24,7,18,10,20,16).bezierCurveTo(22,23,27,23,30,23).lineTo(30,28).lineTo(2,28).closePath().fill({
+ color:e,alpha:.23}
+ ).stroke(n).moveTo(6,25).quadraticCurveTo(13,28,18,23).stroke({
+ ...n,color:15202047,width:1.6}
+ );
+ break;
+ case"rapid":for(let t=0;
+ t<3;
+ t++){
+ const i=7+9*t,e=1===t?2:5;
+ s.moveTo(e,i).bezierCurveTo(e+5,i-4,17,i+4,26,i).moveTo(22,i-3).lineTo(27,i).lineTo(23,i+4).stroke(n)}
+ break;
+ case"rock":s.poly([4,24,9,11,16,7,24,14,28,24]).fill({
+ color:e,alpha:.25}
+ ).stroke(n).moveTo(16,8).lineTo(14,17).lineTo(22,23).stroke({
+ ...n,width:1.4}
+ ).moveTo(1,28).quadraticCurveTo(8,25,15,28).quadraticCurveTo(22,31,31,27).stroke(n).moveTo(25,8).lineTo(28,4).moveTo(28,12).lineTo(31,11).stroke(n);
+ break;
+ case"storm":s.moveTo(7,19).bezierCurveTo(0,19,0,10,7,10).bezierCurveTo(7,0,21,0,23,9).bezierCurveTo(33,7,34,19,25,19).closePath().fill({
+ color:e,alpha:.25}
+ ).stroke(n).moveTo(8,23).lineTo(5,28).moveTo(16,23).lineTo(13,29).moveTo(24,23).lineTo(21,28).stroke(n);
+ break;
+ case"thunder":s.poly([18,2,5,18,14,18,11,30,28,12,18,12,23,2]).fill(e);
+ break;
+ case"monster":s.moveTo(4,25).bezierCurveTo(11,26,11,17,12,8).bezierCurveTo(13,1,26,2,26,11).bezierCurveTo(26,17,20,18,18,14).bezierCurveTo(23,15,23,8,19,9).bezierCurveTo(17,10,24,27,13,28).closePath().fill({
+ color:e,alpha:.3}
+ ).stroke(n).moveTo(1,29).quadraticCurveTo(7,26,15,29).quadraticCurveTo(23,32,31,27).stroke(n);
+ break;
+ case"log":s.moveTo(9,10).lineTo(24,3).quadraticCurveTo(33,10,27,20).lineTo(13,28).closePath().fill({
+ color:e,alpha:.22}
+ ).stroke(n).ellipse(10,19,6,9).stroke(n).ellipse(10,19,2.5,4).stroke({
+ ...n,width:1.4}
+ ).moveTo(18,13).lineTo(25,9).moveTo(20,20).lineTo(27,16).stroke({
+ ...n,width:1.4}
+ );
+ break;
+ case"vine":s.moveTo(5,29).bezierCurveTo(30,27,4,5,27,3).stroke({
+ ...n,width:3}
+ ).poly([13,23,6,19,13,18]).fill(e).poly([17,14,25,11,18,9]).fill(e).moveTo(15,9).quadraticCurveTo(4,9,5,3).quadraticCurveTo(14,1,15,9).fill({
+ color:e,alpha:.5}
+ );
+ break;
+ case"ghost":s.moveTo(5,28).lineTo(5,13).bezierCurveTo(5,-1,27,-1,27,13).lineTo(27,28).lineTo(21,24).lineTo(16,29).lineTo(11,24).closePath().fill({
+ color:e,alpha:.2}
+ ).stroke(n).ellipse(12,13,1.7,2.4).fill(e).ellipse(21,13,1.7,2.4).fill(e);
+ break;
+ case"ice":s.poly([7,6,21,3,29,13,24,27,10,30,3,19]).fill({
+ color:e,alpha:.2}
+ ).stroke(n).moveTo(7,6).lineTo(13,15).lineTo(29,13).moveTo(13,15).lineTo(10,30).moveTo(17,8).lineTo(21,7).stroke({
+ ...n,width:1.5}
+ );
+ break;
+ default:s.poly([16,3,30,28,2,28]).stroke(n).moveTo(16,11).lineTo(16,19).stroke(n).circle(16,24,1.4).fill(e)}
+ return s.scale.set(i/32),s}
+ function dGi(t,i){
+ const s=lGi(t.text),e=t.dmg>0,n=new Ve,h=rki(e?`${
+ s.cause}
+  내구도가 감소했습니다.`:`${
+ s.name}
+ 에도 배가 끄떡없습니다.`,KIi,14),r=rki(e?`내구도 −${
+ nSi(t.dmg)}
+   ·  남은 내구도 ${
+ Math.ceil(t.hp)}
+ `:"내구도 손상 없음",e?XIi:qIi,12,!1),o=Math.min(i,Math.max(300,Math.max(h.width,r.width)+80));
+ h.setWrapWidth(o-80),r.setWrapWidth(o-80);
+ const a=Math.max(62,h.height+r.height+23),c=new ip;
+ c.roundRect(0,0,o,a,13).fill({
+ color:e?2694947:GIi,alpha:.96}
+ ).roundRect(11,(a-40)/2,40,40,11).fill({
+ color:s.color,alpha:.12}
+ );
+ const l=uGi(s,30);
+ return l.position.set(16,(a-30)/2),h.position.set(64,10),r.position.set(64,14+h.height),n.addChild(c,l,h,r),n.eventMode="none",n}
+ function fGi(t,i){
+ try{
+ qG.getInstance().playSFX(t,i)}
+ catch{
+ }
+ }
+ Qt(lGi,"hazardArt"),Qt(uGi,"hazardIcon"),Qt(dGi,"hazardNotice"),Qt(fGi,"sfx$2");
+ const pGi=WSi.find(t=>"boat"===t.key).names,gGi=Qt(t=>t>.5?8378016:t>.25?16106577:16739179,"hpColor"),wGi=class extends Ve{
+ constructor(t,i){
+ super(),Zt(this,"chip",new Ve),Zt(this,"chipBg",new ip),Zt(this,"chipBar",new ip),Zt(this,"chipText",rki("",KIi,12)),Zt(this,"banner",new Ve),Zt(this,"bannerBg",new ip),Zt(this,"bannerBar",new ip),Zt(this,"bannerTitle",rki("",KIi,14)),Zt(this,"bannerSub",rki("",zIi,12,!1)),Zt(this,"stopBtn",new pki("그만 고치기",112,34,13)),Zt(this,"panelBox",new Ve),Zt(this,"helpBox",new Ve),Zt(this,"helpTarget",null),Zt(this,"helpBusy",!1),Zt(this,"notices",[]),Zt(this,"chipKey",""),Zt(this,"wasFixing",!1),Zt(this,"finishFxAt",0),Zt(this,"onPeek",null),Zt(this,"bannerY",Qt(()=>166,"bannerY")),Zt(this,"panelSig",""),Zt(this,"panelLive",null),Zt(this,"helpSig",""),Zt(this,"helpLive",null),this.scene=t,this.viewH=i,this.chip.addChild(this.chipBg,this.chipBar,this.chipText),this.chip.eventMode="static",this.chip.cursor="pointer",this.chip.on("pointertap",t=>{
+ t.stopPropagation(),this.openPanel()}
+ ),this.banner.addChild(this.bannerBg,this.bannerBar,this.bannerTitle,this.bannerSub,this.stopBtn),this.banner.visible=!1,this.banner.eventMode="static",this.banner.on("pointertap",t=>t.stopPropagation()),this.stopBtn.onTap=()=>{
+ this.stop()}
+ ,this.panelBox.visible=this.helpBox.visible=!1,this.panelBox.eventMode=this.helpBox.eventMode="static",this.addChild(this.banner,this.panelBox,this.helpBox),t.sailBlock=()=>RIi.getInstance().boatProblem();
+ const s=RIi.getInstance().onBoatLog(t=>this.onLogs(t));
+ this.once("destroyed",()=>{
+ s();
+ for(const t of this.notices)MR.killTweensOf(t);
+ this.notices=[]}
+ )}
+ get panelOpen(){
+ return this.panelBox.visible||this.helpBox.visible}
+ get bannerBottom(){
+ return this.bannerY()+(this.banner.visible?66:0)}
+ closeAll(){
+ this.panelBox.visible=!1,this.helpBox.visible=!1,this.helpTarget=null}
+ update(){
+ const t=RIi.getInstance();
+ if(!t.ready)return;
+ const i=t.boatHp(),s=i.hp/i.max,e=i.fixing?`수리 ${
+ Math.floor(100*s)}
+ %`:`배 ${
+ Math.ceil(i.hp)}
+ /${
+ i.max}
+ `,n=`${
+ e}
+ |${
+ Math.round(50*s)}
+ |${
+ i.fixing}
+ `;
+ if(n!==this.chipKey){
+ this.chipKey=n,this.chipText.text=e,this.chipText.textColor=i.fixing?16757611:s<=.25?XIi:KIi;
+ const t=Math.max(92,this.chipText.width+20);
+ this.chipBg.clear().roundRect(0,0,t,26,8).fill({
+ color:i.fixing?3810324:QIi,alpha:.78}
+ ),this.chipText.position.set(10,3),this.chipBar.clear(),vki(this.chipBar,10,20,t-20,3,s,i.fixing?16757611:gGi(s),BIi),this.chip.hitArea=new Ui(0,0,t,26)}
+ this.wasFixing&&!i.fixing&&i.hp>=i.max-.5&&this.playFinish(),this.wasFixing=i.fixing,this.scene.setFixing(i.fixing?{
+ broken:i.broken,progress:i.hp/i.max}
+ :null),this.renderBanner(),this.panelBox.visible&&this.renderPanel(),this.helpBox.visible&&this.renderHelp()}
+ renderBanner(){
+ var t;
+ const i=RIi.getInstance(),s=i.boatHp();
+ if(this.banner.visible=s.fixing,!s.fixing)return;
+ const e=CRi.BLEED_W,n=Math.min(e-20,460),h=(e-n)/2;
+ this.banner.position.set(h,this.bannerY()),this.bannerBg.clear().roundRect(0,0,n,58,12).fill({
+ color:s.broken?3807764:2827284,alpha:.92}
+ ),this.bannerTitle.text=s.broken?"배가 고장 났어요 · 고치는 중":"배를 고치는 중",this.bannerTitle.textColor=s.broken?16757611:VIi,this.bannerTitle.position.set(14,8),oki(this.bannerTitle,n-150);
+ const r=(null==(t=i.state.boat)?void 0:t.helps.length)??0,o=Math.max(0,s.endAt-i.now()),a=!s.broken||s.hp>=DAi.MOVE_MIN;
+ this.bannerSub.text=`${
+ Mki(o)}
+  남음 · 내구도 ${
+ Math.floor(s.hp)}
+ /${
+ s.max}
+ ${
+ r?` · 도움 ${
+ r}
+ 명`:""}
+ ${
+ a?"":` · ${
+ DAi.MOVE_MIN}
+ 까지는 고쳐야 떠나요`}
+ `,this.bannerSub.position.set(14,30),oki(this.bannerSub,n-150),this.bannerBar.clear(),vki(this.bannerBar,14,49,n-150,4,s.hp/s.max,16757611,4864552),this.stopBtn.position.set(n-124,12),this.stopBtn.setPrimary(!1),this.stopBtn.enabled=a,this.banner.hitArea=new Ui(0,0,n,58)}
+ async stop(){
+ const t=await RIi.getInstance().boatRepair("stop");
+ t&&vH.getInstance().showMessage(t)}
+ async start(){
+ const t=await RIi.getInstance().boatRepair("start");
+ t?vH.getInstance().showMessage(t):(this.closeAll(),jG("light"),this.scene.repairStarted(),vH.getInstance().showMessage("배를 고치기 시작했어요. 고치는 동안은 낚시를 쉬어요"))}
+ openPanel(){
+ this.helpBox.visible=!1,this.panelBox.visible=!0,this.panelSig="",this.renderPanel(),MR.fromTo(this.panelBox,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ )}
+ renderPanel(){
+ const t=RIi.getInstance(),i=t.state,s=t.boatHp(),e=i.gear.boat,n=t.helpPts(),h=ZAi(e),r=t.now(),o=`${
+ e}
+ |${
+ i.spot.race}
+ |${
+ i.spot.zone}
+ |${
+ s.fixing}
+ |${
+ s.hp>=s.max}
+ `;
+ if(o===this.panelSig&&this.panelLive)return this.panelLive.hp.text=`내구도 ${
+ Math.floor(s.hp)}
+  / ${
+ s.max}
+ `,this.panelLive.help.text=`도움 점수 ${
+ n.n}
+ /${
+ h}
+ ${
+ n.nextAt?` · 다음 ${
+ Mki(n.nextAt-r)}
+ `:""}
+  · 고치는 남의 배를 누르면 3% 앞당겨 줘요`,this.panelLive.bar.clear(),void vki(this.panelLive.bar,0,0,this.panelLive.barW,8,s.hp/s.max,s.fixing?16757611:gGi(s.hp/s.max));
+ this.panelSig=o;
+ const a=this.panelBox;
+ a.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const c=CRi.BLEED_W,l=this.viewH(),u=Math.min(c-20,480),d=(c-u)/2,f=d+18,p=FAi(i.spot.race,i.spot.zone),g=VAi(i.spot.race,i.spot.zone),w=330,m=l-w-8,v=aki(u,w,QIi,null,14);
+ v.alpha=.96,v.position.set(d,m);
+ const _=rki(`${
+ pGi[e]}
+  · 배 ${
+ e+1}
+ 단계`,VIi,17);
+ _.position.set(f,m+14);
+ const M=rki(`튼튼함 ${
+ sSi(i)}
+  · 다 고치는 데 ${
+ Mki(rSi(i))}
+  (${
+ pSi[i.spot.zone]}
+ ) · 배 장비 포함`,zIi,12,!1);
+ M.position.set(f,m+40),oki(M,u-36);
+ const b=rki(`내구도 ${
+ Math.floor(s.hp)}
+  / ${
+ s.max}
+ `,KIi,14);
+ b.position.set(f,m+62);
+ const y=new ip,E=u-36;
+ y.position.set(f,m+86),vki(y,0,0,E,8,s.hp/s.max,s.fixing?16757611:gGi(s.hp/s.max));
+ const A=UAi[p-1],S=rki(`이 지역 난이도 ${
+ p}
+ /12 · ${
+ lSi(i.spot.race,i.spot.zone)}
+ ${
+ e>=A?" · 내 배로 안정적":" · 내 배는 자주 고장 나요"}
+ `,e>=A?qIi:XIi,13);
+ S.position.set(f,m+108),oki(S,u-36);
+ const T=[v,_,M,b,y,S];
+ let C=m+134;
+ for(const R of[...g].sort((t,i)=>i.dmg-t.dmg)){
+ const t=eSi(R.dmg,sSi(i)),s=lGi(R.key),e=uGi(s,16),n=rki(s.name,KIi,12,!1);
+ e.position.set(f,C),n.position.set(f+23,C);
+ const h=rki(t>0?`내구도 −${
+ nSi(t)}
+ `:"끄떡없음",t>0?XIi:qIi,12);
+ h.position.set(f+190,C),T.push(e,n,h),C+=20}
+ const O=rki(`도움 점수 ${
+ n.n}
+ /${
+ h}
+ ${
+ n.nextAt?` · 다음 ${
+ Mki(n.nextAt-r)}
+ `:""}
+  · 고치는 남의 배를 누르면 3% 앞당겨 줘요`,zIi,12,!1);
+ O.position.set(f,m+w-82),oki(O,u-36),T.push(O),this.panelLive={
+ hp:b,help:O,bar:y,barW:E}
+ ;
+ const I=new pki("닫기",96,40,14);
+ I.setPrimary(!1),I.onTap=()=>this.closeAll();
+ const k=new pki("",170,40,14);
+ if(k.position.set(d+u-18-170,m+w-54),I.position.set(k.x-8-96,k.y),s.fixing)k.setText("고치는 중"),k.enabled=!1;
+ else if(s.hp>=s.max)k.setText("고칠 곳이 없어요"),k.enabled=!1;
+ else{
+ const t=(s.max-s.hp)/s.max*rSi(i);
+ k.setText(`고치기 (${
+ Mki(t)}
+ )`),k.onTap=()=>{
+ this.start()}
+ }
+ T.push(I,k),a.hitArea=new Ui(0,0,c,l),a.removeAllListeners("pointertap"),a.on("pointertap",t=>{
+ t.stopPropagation(),a.toLocal(t.global).y<m&&this.closeAll()}
+ ),a.addChild(...T)}
+ wantsHelp(t){
+ return!!t.fx&&t.fx>RIi.getInstance().realNow()}
+ openHelp(t){
+ this.panelBox.visible=!1,this.helpTarget=t,this.helpBox.visible=!0,this.helpSig="",this.renderHelp(),MR.fromTo(this.helpBox,{
+ alpha:0,y:12}
+ ,{
+ alpha:1,y:0,duration:.16}
+ ),jG("light")}
+ renderHelp(){
+ const t=this.helpTarget,i=RIi.getInstance();
+ if(!t)return void(this.helpBox.visible=!1);
+ const s=i.others.find(i=>i.id===t.id)??t,e=i.realNow(),n=Math.max(0,(s.fx??0)-e),h=i.helpPts(),r=this.scene.boatPoint("me"),o=this.scene.boatPoint(t.id),a=!!r&&!!o&&Math.hypot(r.x-o.x,r.y-o.y)<=DAi.HELP_RANGE,c=`${
+ t.id}
+ |${
+ n>0}
+ |${
+ h.n}
+ |${
+ a}
+ `,l=n>0?`${
+ s.fk?"고장 나서 고치는 중":"고치는 중"}
+  · ${
+ Mki(n)}
+  남음`:"다 고친 것 같아요";
+ if(c===this.helpSig&&this.helpLive)return void(this.helpLive.sub.text=l);
+ this.helpSig=c;
+ const u=this.helpBox;
+ u.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const d=CRi.BLEED_W,f=this.viewH(),p=Math.min(d-20,480),g=(d-p)/2,w=g+18,m=f-168-8,v=aki(p,168,QIi,null,14);
+ v.alpha=.96,v.position.set(g,m);
+ const _=rki(`${
+ t.n}
+  님의 배`,VIi,17);
+ _.position.set(w,m+14),oki(_,p-36);
+ const M=rki(l,16757611,13);
+ M.position.set(w,m+40),oki(M,p-36);
+ const b=rki(`도움 점수 ${
+ h.n}
+ 개 · 한 번 도우면 다 고치는 시간의 3%를 앞당겨요 (한 번 고장에 한 번)`,zIi,12,!1);
+ b.position.set(w,m+64),oki(b,p-36),this.helpLive={
+ sub:M}
+ ;
+ const y=new pki("훔쳐보기",96,40,14);
+ y.setPrimary(!1),y.onTap=()=>{
+ var t;
+ const i=this.helpTarget;
+ this.closeAll(),i&&(null==(t=this.onPeek)||t.call(this,i))}
+ ;
+ const E=new pki("닫기",80,40,14);
+ E.setPrimary(!1),E.onTap=()=>this.closeAll();
+ const A=new pki("",160,40,14);
+ A.position.set(g+p-18-160,m+168-54),y.position.set(A.x-8-96,A.y),E.position.set(y.x-8-80,A.y),n<=0?(A.setText("다 고쳤어요"),A.enabled=!1):a?h.n<1?(A.setText(`점수 없음 · ${
+ Mki((h.nextAt??i.now())-i.now())}
+ `),A.enabled=!1):(A.setText("수리 돕기 (점수 1)"),A.onTap=async()=>{
+ if(this.helpBusy)return;
+ this.helpBusy=!0,A.enabled=!1;
+ const s=await i.boatHelp(t.id).finally(()=>{
+ this.helpBusy=!1}
+ );
+ if(s.message)return vH.getInstance().showMessage(s.message),void(A.destroyed||(A.enabled=!0));
+ jG("medium"),this.scene.helpFx(t.id),this.closeAll(),vH.getInstance().showMessage(`${
+ t.n}
+  님의 배 수리를 도와줬어요! (3% 앞당김)`)}
+ ):(A.setText("옆으로 가기"),A.onTap=()=>{
+ this.scene.sailNearBoat(t.id)&&(vH.getInstance().showMessage("옆에 닿으면 다시 눌러 수리 돕기"),this.closeAll())}
+ ),vGi(u,[v,_,M,b,E,y,A]),u.hitArea=new Ui(0,0,d,f),u.removeAllListeners("pointertap"),u.on("pointertap",t=>{
+ t.stopPropagation(),u.toLocal(t.global).y<m&&this.closeAll()}
+ )}
+ onLogs(t){
+ var i,s;
+ for(const e of t)if("hazard"===e.kind)this.scene.boatHit(e.dmg),this.showNotice(dGi(e,Math.min(460,CRi.BLEED_W-24))),e.dmg>0&&(jG(e.dmg>=30?"heavy":"medium"),fGi(qG.SFX_STONE_BREAK,.35));
+ else if("broke"===e.kind)this.scene.boatHit(0,!0),this.scene.repairStarted(),this.notice("배가 고장 났어요! 고치는 동안은 낚시할 수 없어요",16777215,11879211),jG("heavy");
+ else if("repaired"===e.kind)this.wasFixing?(this.playFinish(),this.wasFixing=!1):Date.now()-this.finishFxAt>5e3&&(this.notice("배를 다 고쳤어요! 다시 낚시해요",qIi,1194538),fGi(qG.SFX_GOLD_GOBLIN,.5));
+ else if("help"===e.kind){
+ this.notice(hSi(e.text),VIi,2827284);
+ const t=RIi.getInstance(),n=(null==(i=t.state.boat)?void 0:i.helps)??[],h=n[n.length-1]??null,r=h?null==(s=t.others.find(t=>t.id===h))?void 0:s.n:void 0;
+ this.scene.helpFx("me",h,r?`+3% · ${
+ r}
+  님`:"수리 +3%")}
+ else"travel"===e.kind&&this.notice(hSi(e.text),16751752,3807764)}
+ playFinish(){
+ this.finishFxAt=Date.now(),this.scene.repairFinished()}
+ notice(t,i,s){
+ const e=CRi.BLEED_W,n=mki(t,i,s,14,12);
+ n.scale.set(Math.min(1,(e-24)/n.width)),this.showNotice(n)}
+ showNotice(t){
+ if(this.addChild(t),this.notices.push(t),this.notices.length>3){
+ const t=this.notices.shift();
+ MR.killTweensOf(t),t.destroy({
+ children:!0}
+ )}
+ this.layoutNotices(),MR.fromTo(t,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.2}
+ ),MR.to(t,{
+ alpha:0,delay:3.2,duration:.5,onComplete:Qt(()=>{
+ this.notices=this.notices.filter(i=>i!==t),t.destroy({
+ children:!0}
+ ),this.layoutNotices()}
+ ,"onComplete")}
+ )}
+ layoutNotices(){
+ let t=this.viewH()-104;
+ for(let i=this.notices.length-1;
+ i>=0;
+ i--){
+ const s=this.notices[i];
+ s.position.set((CRi.BLEED_W-s.width)/2,t-s.height),t=s.y-8}
+ }
+ layout(){
+ this.chipKey="",this.panelSig="",this.helpSig="",this.layoutNotices()}
+ }
+ ;
+ Qt(wGi,"FishingBoatUi");
+ let mGi=wGi;
+ function vGi(t,i){
+ t.addChild(...i)}
+ Qt(vGi,"kids");
+ const _Gi={
+ miss:9018538,good:9685215,great:9298101,perfect:16766836}
+ ,MGi={
+ miss:"빗나감",good:"명중",great:"그레이트",perfect:"퍼펙트!"}
+ ,bGi={
+ wood:14464634,iron:12375785,mithril:10807780}
+ ,yGi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"shade",new ip),Zt(this,"card",new Ve),Zt(this,"back",new ip),Zt(this,"rail",new ip),Zt(this,"focus",new ip),Zt(this,"trail",new ip),Zt(this,"needle",new Ve),Zt(this,"needleInk",new ip),Zt(this,"feedback",new ip),Zt(this,"weapon",new Ye),Zt(this,"title",rki("",KIi,20)),Zt(this,"target",rki("",zIi,16,!1)),Zt(this,"hint",rki("중앙에 맞춰 멈추세요",zIi,16,!1)),Zt(this,"legends",["good","great","perfect"].map(t=>({
+ grade:t,bg:new ip,text:rki("good"===t?"명중":`${
+ MGi[t].replace("!","")}
+  ${
+ $Oi(t)}
+ %`,_Gi[t],16)}
+ ))),Zt(this,"fireBg",new ip),Zt(this,"fireText",rki("눌러서 던지기",jIi,19)),Zt(this,"cancel",new Ve),Zt(this,"cancelBg",new ip),Zt(this,"cancelText",rki("취소",zIi,17)),Zt(this,"range",zOi),Zt(this,"state","closed"),Zt(this,"startedAt",0),Zt(this,"lockedAt",0),Zt(this,"now",0),Zt(this,"w",1),Zt(this,"railW",1),Zt(this,"cardY",0),Zt(this,"accent",bGi.wood),Zt(this,"currentGrade",null),Zt(this,"lockGrade","miss"),Zt(this,"finishResolve",null),Zt(this,"value",-1),Zt(this,"onFire",null),Zt(this,"onCancel",null),Zt(this,"onKey",Qt(t=>{
+ var i,s;
+ "aiming"!==this.state||t.repeat||t.target instanceof HTMLElement&&(t.target.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.target.tagName))||"Space"!==t.code&&"Enter"!==t.code&&"Escape"!==t.code||(t.preventDefault(),t.stopPropagation(),"Escape"===t.code?null==(i=this.onCancel)||i.call(this):null==(s=this.onFire)||s.call(this))}
+ ,"onKey")),this.visible=!1,this.eventMode="none",this.weapon.anchor.set(.5),this.weapon.scale.set(.36),this.weapon.rotation=-.3,this.needle.addChild((new ip).roundRect(-3.5,-6,7,41,2).fill(QIi),this.needleInk),this.needleInk.roundRect(-1.5,-5,3,39,1).fill(16774361).poly([-6,-13,6,-13,0,-5]).fill(16774361).poly([-4,37,4,37,0,32]).fill(16774361),this.card.addChild(this.back,this.rail,this.focus,this.trail,this.needle,this.feedback,this.weapon,this.title,this.target,this.hint);
+ for(const t of this.legends)this.card.addChild(t.bg,t.text);
+ this.cancel.addChild(this.cancelBg,this.cancelText),this.cancel.eventMode="static",this.cancel.cursor="pointer",this.cancel.on("pointerdown",t=>{
+ var i;
+ t.stopPropagation(),"aiming"===this.state&&(null==(i=this.onCancel)||i.call(this))}
+ ),this.cancel.on("pointertap",t=>t.stopPropagation()),this.card.addChild(this.fireBg,this.fireText,this.cancel),this.addChild(this.shade,this.card),this.on("pointerdown",t=>{
+ var i;
+ t.stopPropagation(),"aiming"===this.state&&(null==(i=this.onFire)||i.call(this))}
+ ),this.on("pointertap",t=>t.stopPropagation())}
+ open(t,i,s,e,n=performance.now(),h=zOi){
+ this.close(),this.range=h,this.state="aiming",this.visible=!0,this.eventMode="static",this.cursor="pointer",this.startedAt=this.now=n,this.value=-1,this.currentGrade=null,this.accent=bGi[t],this.weapon.texture=sPi(t),this.title.text=kOi[t].name,this.title.textSize=20,this.title.textColor=this.accent,this.target.text=i,this.hint.text="중앙에 맞춰 멈추세요",this.fireText.text="눌러서 던지기",this.cancel.visible=!0,this.layout(s,e),this.update(n),window.addEventListener("keydown",this.onKey)}
+ layout(t,i){
+ this.hitArea=new Ui(0,0,t,i),this.w=Math.min(560,t-24),this.railW=this.w-40,this.cardY=Math.max(12,i-242-Math.min(146,.2*i)),this.card.position.set((t-this.w)/2,this.cardY),this.shade.clear().rect(0,0,t,i).fill({
+ color:0,alpha:.12}
+ ),this.back.clear().roundRect(0,4,this.w,242,16).fill({
+ color:0,alpha:.26}
+ ).roundRect(0,0,this.w,242,16).fill({
+ color:GIi,alpha:.98}
+ ).roundRect(.5,.5,this.w-1,241,16).stroke({
+ color:this.accent,alpha:.5,width:1}
+ ).moveTo(18,46).lineTo(this.w-18,46).stroke({
+ color:WIi,alpha:.8,width:1}
+ ),this.weapon.position.set(40,25),this.title.position.set(72,11),oki(this.title,this.w-90),oki(this.target,.4*this.w),this.target.position.set(this.w-20-this.target.width,52),this.hint.position.set(20,52),oki(this.hint,.55*this.w-22),this.drawRail(),this.needle.y=90;
+ const s=(this.w-40)/3;
+ this.legends.forEach((t,i)=>{
+ oki(t.text,s-12),t.text.position.set(20+i*s+(s-t.text.width)/2,138+(34-t.text.height)/2)}
+ ),this.cancel.position.set(16,184),this.cancel.hitArea=new Ui(0,-4,84,54),this.cancelBg.clear().roundRect(0,0,84,46,9).fill(BIi),this.cancelText.position.set((84-this.cancelText.width)/2,(46-this.cancelText.height)/2),this.currentGrade=null,this.paintGrade("locked"===this.state?this.lockGrade:qOi(this.value,this.range)),this.placeNeedle()}
+ drawRail(){
+ const t=this.rail.clear(),i=this.railW;
+ t.roundRect(17,87,i+6,34,9).fill(QIi).roundRect(20,90,i,28,6).fill(BIi);
+ for(const n of[{
+ r:this.range.good,c:3304320}
+ ,{
+ r:this.range.great,c:4756605}
+ ,{
+ r:this.range.perfect,c:15316814}
+ ]){
+ const s=20+i*(1-n.r)/2,e=n.r*i;
+ t.roundRect(s,90,e,28,3).fill(n.c).roundRect(s+1,91,e-2,4,2).fill({
+ color:16777215,alpha:.16}
+ )}
+ for(let n=0;
+ n<=20;
+ n++){
+ const s=20+i*n/20;
+ t.moveTo(s,124).lineTo(s,118+(n%5?8:11))}
+ t.stroke({
+ color:9020842,alpha:.35,width:1}
+ );
+ const s=this.range.perfect*i/2,e=this.w/2;
+ this.focus.clear().moveTo(e-s,86).lineTo(e-s,82).lineTo(e-s+5,82).moveTo(e+s,86).lineTo(e+s,82).lineTo(e+s-5,82).stroke({
+ color:_Gi.perfect,width:1.5}
+ )}
+ paintGrade(t){
+ if(t===this.currentGrade)return;
+ this.currentGrade=t;
+ const i=this.railW/3;
+ this.legends.forEach((s,e)=>{
+ s.bg.clear().roundRect(20+e*i+2,138,i-4,34,8).fill({
+ color:_Gi[s.grade],alpha:t===s.grade?.17:.035}
+ ),s.text.alpha=t===s.grade?1:.68}
+ );
+ const s="locked"===this.state,e=s?16:108,n=this.w-e-16;
+ this.fireBg.clear().roundRect(e,184,n,46,9).fill(s?BIi:this.accent),this.fireText.textColor=s?_Gi[t]:1517611,this.fireText.position.set(e+(n-this.fireText.width)/2,184+(46-this.fireText.height)/2),this.needleInk.tint=s?_Gi[t]:16777215}
+ placeNeedle(){
+ this.needle.x=20+(this.value+1)*this.railW/2}
+ update(t){
+ if(this.visible&&!this.destroyed)if(this.now=t,"aiming"===this.state){
+ const i=Math.max(0,t-this.startedAt),s=$Ti(i),e=$Ti(Math.max(0,i-28));
+ this.value=s,this.placeNeedle(),this.paintGrade(qOi(s,this.range));
+ const n=Math.max(-26,Math.min(26,(e-s)*this.railW/2));
+ this.trail.clear().poly([this.needle.x,100,this.needle.x+n,104,this.needle.x,108]).fill({
+ color:16774361,alpha:.2}
+ );
+ const h=Math.min(1,i/140);
+ this.card.alpha=.65+.35*h,this.card.y=this.cardY+(1-h)**2*7,this.focus.alpha=.65+.2*Math.sin(i/240)}
+ else if("locked"===this.state){
+ const i=Math.max(0,t-this.lockedAt),s=Math.min(1,i/280);
+ this.needle.scale.set(1+.14*Math.sin(s*Math.PI));
+ const e=this.needle.x,n=5+15*s;
+ if(this.feedback.clear().moveTo(e-n,88).lineTo(e-n,120).moveTo(e+n,88).lineTo(e+n,120).stroke({
+ color:_Gi[this.lockGrade],alpha:.6*(1-s),width:1.5}
+ ),s>=1&&this.finishResolve){
+ const t=this.finishResolve;
+ this.finishResolve=null,t(!0)}
+ }
+ }
+ freeze(t,i=performance.now()){
+ "aiming"===this.state&&(this.state="locked",this.lockedAt=this.now=i,this.trail.clear(),this.cancel.visible=!1,this.card.alpha=this.focus.alpha=1,this.card.y=this.cardY,this.setResult(t))}
+ setResult(t){
+ this.lockGrade=t,this.currentGrade=null,this.title.text="great"===t||"perfect"===t?`${
+ MGi[t]}
+   ${
+ $Oi(t)}
+ %`:MGi[t],this.title.textSize=22,this.title.textColor=_Gi[t],oki(this.title,this.w-90),this.hint.text="조준 완료",this.fireText.text="작살 투척",this.paintGrade(t)}
+ finish(t){
+ return"locked"===this.state&&this.visible?(this.setResult(t),this.now-this.lockedAt>=280?Promise.resolve(!0):new Promise(t=>{
+ this.finishResolve=t}
+ )):Promise.resolve(!1)}
+ close(){
+ var t;
+ this.state="closed",this.visible=!1,this.eventMode="none",this.needle.scale.set(1),this.feedback.clear(),window.removeEventListener("keydown",this.onKey),null==(t=this.finishResolve)||t.call(this,!1),this.finishResolve=null}
+ destroy(t){
+ this.close(),super.destroy(t)}
+ }
+ ;
+ Qt(yGi,"FishingHarpoonGauge");
+ let EGi=yGi;
+ function AGi(t,i){
+ try{
+ qG.getInstance().playSFX(t,i)}
+ catch{
+ }
+ }
+ function SGi(t,i,s){
+ const e=t.charCodeAt(t.length-1);
+ return e<44032||e>55203?`${
+ t}
+ ${
+ i}
+ (${
+ s}
+ )`:`${
+ t}
+ ${
+ (e-44032)%28?i:s}
+ `}
+ Qt(AGi,"sfx$1"),Qt(SGi,"josa");
+ const TGi=230,CGi={
+ miss:9018538,good:9685215,great:9298101,perfect:16766836}
+ ,OGi=class t extends Ve{
+ constructor(t,i){
+ super(),Zt(this,"chip",new Ve),Zt(this,"chipBg",new ip),Zt(this,"chipText",rki("",KIi,12)),Zt(this,"banner",new Ve),Zt(this,"bannerBg",new ip),Zt(this,"bannerBar",new ip),Zt(this,"bannerTitle",rki("",KIi,14)),Zt(this,"bannerSub",rki("",zIi,12,!1)),Zt(this,"throwBtn",new Ve),Zt(this,"throwBg",new ip),Zt(this,"throwText",rki("작살",jIi,15)),Zt(this,"throwSub",rki("",jIi,11,!1)),Zt(this,"gauge",new EGi),Zt(this,"gaugeOn",!1),Zt(this,"throwing",!1),Zt(this,"preparing",!1),Zt(this,"aimId",null),Zt(this,"aimStartPerf",0),Zt(this,"aimEndPerf",0),Zt(this,"gaugeFrame",0),Zt(this,"aimTarget",null),Zt(this,"generation",0),Zt(this,"contextKey",""),Zt(this,"statusRevision",0),Zt(this,"records",new Ve),Zt(this,"boss",null),Zt(this,"status",null),Zt(this,"statusAt",0),Zt(this,"spawnedW",null),Zt(this,"alertMap",""),Zt(this,"spawnTry",0),Zt(this,"spawnFails",0),Zt(this,"craft",new Ve),Zt(this,"crafting",!1),Zt(this,"warnedW",null),Zt(this,"lastSeenResult",-1),Zt(this,"chipKey",""),Zt(this,"bannerY",Qt(()=>166,"bannerY")),Zt(this,"tickGauge",Qt(()=>{
+ if(!this.gauge.visible||this.destroyed)return void(this.gaugeFrame=0);
+ if(this.aimId&&this.gaugeOn&&performance.now()>=this.aimEndPerf)return this.closeGauge(),void this.renderThrowBtn();
+ this.gauge.update(performance.now());
+ const t=!this.gaugeOn;
+ t||(this.aimTarget=this.scene.captureHarpoonTarget(TGi));
+ const i=this.aimTarget?this.aimTarget.sample()??this.aimTarget.point:null,s=qOi(this.gauge.value,this.gauge.range);
+ this.scene.setAimMark(i,CGi[s],1-Math.min(1,Math.abs(this.gauge.value)/this.gauge.range.good),t),this.gaugeFrame=requestAnimationFrame(this.tickGauge)}
+ ,"tickGauge")),Zt(this,"recordsSig",""),Zt(this,"craftSig",""),this.scene=t,this.viewH=i,this.chip.addChild(this.chipBg,this.chipText),this.chip.eventMode="static",this.chip.cursor="pointer",this.chip.on("pointertap",t=>{
+ t.stopPropagation(),this.openRecords()}
+ ),this.banner.addChild(this.bannerBg,this.bannerBar,this.bannerTitle,this.bannerSub),this.banner.visible=!1,this.banner.eventMode="static",this.banner.on("pointertap",t=>{
+ t.stopPropagation(),this.openRecords()}
+ ),this.throwBtn.addChild(this.throwBg,this.throwText,this.throwSub),this.throwBtn.visible=!1,this.throwBtn.eventMode="static",this.throwBtn.cursor="pointer",this.throwBtn.on("pointertap",t=>{
+ t.stopPropagation(),KOi(RIi.getInstance().harpoons())?this.openGauge():this.openCraft()}
+ ),this.gauge.onFire=()=>{
+ this.stopGauge()}
+ ,this.gauge.onCancel=()=>{
+ this.closeAll(),this.renderThrowBtn()}
+ ,this.records.visible=!1,this.records.eventMode="static",this.craft.visible=!1,this.craft.eventMode="static",this.addChild(this.banner,this.throwBtn,this.gauge,this.records,this.craft)}
+ get panelOpen(){
+ return this.gauge.visible||this.records.visible||this.craft.visible}
+ get bannerBottom(){
+ return this.bannerY()+(this.banner.visible?this.banner.height+8:0)}
+ get active(){
+ return!!this.boss}
+ closeAll(){
+ this.generation++,this.records.visible=this.craft.visible=!1,this.closeGauge(),this.scene.cancelHarpoon()}
+ update(){
+ var t,i;
+ const s=RIi.getInstance();
+ if(!s.ready)return;
+ const e=s.state,n=s.realNow(),h=GOi(e.spot,n,e.huntDevAt),r=`${
+ e.spot.race}
+ |${
+ e.spot.zone}
+ |${
+ (null==h?void 0:h.w)??"none"}
+ `;
+ if(r!==this.contextKey){
+ this.closeAll(),this.contextKey=r,this.status=null,this.statusAt=0;
+ const t=`${
+ e.spot.race}
+ |${
+ e.spot.zone}
+ `;
+ t!==this.alertMap&&(this.alertMap=t,this.spawnedW=null)}
+ this.boss=h;
+ const o=(null==(t=e.hunt)?void 0:t.xp)??0,a=WOi(o);
+ this.chip.visible=!!h||o>0||QSi(e.spot)>=OOi.MIN_LEVEL;
+ const c=`${
+ a.name}
+ |${
+ !!h}
+ `;
+ if(c!==this.chipKey){
+ this.chipKey=c,this.chipText.text=h?"사냥 중!":a.name,this.chipText.textColor=h?16757611:KIi;
+ const t=this.chipText.width+20;
+ this.chipBg.clear().roundRect(0,0,t,26,8).fill({
+ color:h?3810324:QIi,alpha:.78}
+ ),this.chipText.position.set(10,4),this.chip.hitArea=new Ui(0,0,t,26)}
+ const l=BOi(e.spot,n,e.huntDevAt);
+ if(!h&&l&&l.at-n<6e4&&l.at>n&&this.warnedW!==l.w&&(this.warnedW=l.w,vH.getInstance().showMessage(`거대한 그림자가 다가와요… ${
+ l.name}
+ ! (1분 뒤)`)),h&&this.spawnedW!==h.w&&(this.spawnedW=h.w,this.status=null,this.spawnTry=0,this.spawnFails=0,jG("medium"),AGi(qG.SFX_STONE_BREAK,.5),vH.getInstance().showMessage(`${
+ SGi(h.name,"이","가")}
+  나타났어요! 그림자가 가까이 지날 때 작살을 던져요`)),h&&!this.scene.hasBossShadow&&performance.now()>this.spawnTry&&(this.spawnTry=performance.now()+3e3,this.scene.bossGiant(h.kind)?this.spawnFails=0:this.spawnFails++),h&&!this.throwing&&performance.now()-this.statusAt>3e3){
+ this.statusAt=performance.now();
+ const t=this.statusRevision,i=this.generation;
+ s.huntStatus().then(s=>{
+ i===this.generation&&t===this.statusRevision&&!this.throwing&&(null==s?void 0:s.boss)&&this.boss&&s.boss.w===this.boss.w&&(this.status={
+ w:s.boss.w,total:s.boss.total,n:s.boss.n}
+ )}
+ ).catch(()=>{
+ }
+ )}
+ this.renderBanner(),this.renderThrowBtn(),this.records.visible&&this.renderRecords(!1),this.craft.visible&&this.renderCraft();
+ const u=null==(i=e.hunt)?void 0:i.last;
+ if(u&&u.at!==this.lastSeenResult){
+ const t=this.lastSeenResult<0;
+ this.lastSeenResult=u.at,(!t||n-u.at<6e5)&&this.showResult(u)}
+ }
+ renderBanner(){
+ var t,i;
+ const s=this.boss,e=RIi.getInstance();
+ if(this.banner.visible=!!s,!s)return;
+ const n=CRi.BLEED_W,h=Math.min(n-20,460),r=(n-h)/2;
+ this.banner.position.set(r,this.bannerY());
+ const o=(null==(t=this.status)?void 0:t.w)===s.w?this.status.total:0,a=(null==(i=this.status)?void 0:i.w)===s.w?this.status.n:0,c=o>=s.hp,l=Math.max(0,s.end-e.realNow());
+ this.bannerBg.clear().roundRect(0,0,h,56,12).fill({
+ color:c?1194538:2759472,alpha:.92}
+ ),this.bannerTitle.text=c?`${
+ s.name}
+  사냥 성공!`:`${
+ s.name}
+  · ${
+ pSi[e.state.spot.zone]}
+ 의 몬스터`,this.bannerTitle.textColor=c?qIi:15120639,this.bannerTitle.position.set(14,7),oki(this.bannerTitle,h-28);
+ const u=this.spawnFails>=2?" · 물이 좁아 그림자가 안 와요. 넓은 물로 가요":"";
+ this.bannerSub.text=`${
+ c?"남은 시간 동안 더 던져도 기여가 올라요":`체력 ${
+ Math.max(0,s.hp-o)}
+ /${
+ s.hp}
+ `}
+  · 함께 ${
+ a}
+ 명 · ${
+ Mki(l)}
+  남음${
+ u}
+ `,this.bannerSub.position.set(14,28),oki(this.bannerSub,h-28),this.bannerBar.clear(),vki(this.bannerBar,14,47,h-28,4,c?1:1-o/s.hp,c?qIi:13724671,3811904),this.banner.hitArea=new Ui(0,0,h,56)}
+ throwState(){
+ var t;
+ const i=RIi.getInstance(),s=this.boss,e=i.harpoons(),n=KOi(e),h=n?e.stock[n]:0,r=jOi(i.state,s,`${
+ i.state.spot.race}
+ |${
+ i.state.spot.zone}
+ `),o=this.scene.bossShadow(TGi),a=i.realNow()-((null==(t=i.state.hunt)?void 0:t.lastThrow)??0)<OOi.CD_MS,c=this.throwing||this.scene.harpoonBusy?"투척 중":a?"재장전":i.boatProblem()?"수리 중":n?r<1?"장전 끝":o?o.near&&this.scene.captureHarpoonTarget(TGi)?"":o.seen?"더 가까이":"그림자 대기":"그림자 대기":"만들기";
+ return{
+ ok:!c,kind:n,have:h,left:r,why:c}
+ }
+ renderThrowBtn(){
+ const t=RIi.getInstance(),i=this.boss;
+ if(this.throwBtn.visible=!(!i||this.gauge.visible||this.craft.visible||this.records.visible),!this.throwBtn.visible)return;
+ const s=CRi.BLEED_W,e=this.viewH(),n=40,h=this.throwState();
+ this.throwBtn.position.set(s-16-80,e-150-80);
+ const r=h.ok?1+.04*Math.sin(performance.now()/160):1;
+ this.throwBtn.pivot.set(n,n),this.throwBtn.position.set(s-16-n,e-150-n),this.throwBtn.scale.set(r),this.throwBg.clear().circle(n,n,n).fill(h.ok?VIi:"만들기"===h.why?UIi:tki),this.throwText.text="만들기"===h.why?"작살 만들기":"작살",this.throwText.textColor=h.ok?jIi:"만들기"===h.why?KIi:iki,oki(this.throwText,72),this.throwText.position.set(n-this.throwText.width/2,22),this.throwSub.text=h.ok||"장전 끝"===h.why?`${
+ kOi[h.kind].name.replace(" 작살","")}
+  ${
+ h.have}
+  · ${
+ h.left}
+ /${
+ FOi(t.state.gear.boat)}
+ `:"만들기"===h.why?"물고기로":h.why,this.throwSub.textColor=h.ok?jIi:zIi,oki(this.throwSub,72),this.throwSub.position.set(n-this.throwSub.width/2,44),this.throwBtn.hitArea=new Ui(0,0,80,80)}
+ closeGauge(){
+ this.gaugeOn=!1,this.aimId=null,this.gauge.close(),this.aimTarget=null,this.scene.setAimMark(null),cancelAnimationFrame(this.gaugeFrame),this.gaugeFrame=0}
+ async openGauge(){
+ var t;
+ const i=RIi.getInstance();
+ if(!this.boss||this.preparing||this.throwing||this.gauge.visible||this.scene.harpoonBusy)return;
+ const s=this.throwState();
+ if(!s.ok)return void vH.getInstance().showMessage("재장전"===s.why?"작살을 다시 준비하고 있어요":"수리 중"===s.why?"배를 고치는 중엔 작살을 던질 수 없어요":"장전 끝"===s.why?`이번 몬스터에는 ${
+ FOi(i.state.gear.boat)}
+ 개까지 던질 수 있어요 (장전 칸)`:"그림자가 배 가까이 지날 때 던질 수 있어요");
+ let e=performance.now(),n=YOi(i.gearStats().aim),h=s.kind;
+ if(null==(t=i.social)?void 0:t.enabled){
+ const t=this.generation,s=this.contextKey;
+ this.preparing=!0;
+ try{
+ const r=await i.prepareHuntAim();
+ if(this.destroyed||t!==this.generation||s!==this.contextKey||!this.boss)return;
+ if(r.message||!r.aim)return void vH.getInstance().showMessage(r.message??"다시 조준해 주세요");
+ this.aimId=r.aim.id,e=r.startPerf,n=r.aim.range,h=r.aim.kind,this.aimStartPerf=e,this.aimEndPerf=e+r.aim.expiresAt-r.aim.startAt}
+ catch{
+ return void vH.getInstance().showMessage("조준을 준비하지 못했어요. 다시 눌러 주세요")}
+ finally{
+ this.preparing=!1}
+ }
+ this.gaugeOn=!0,this.gauge.open(h,this.boss.name,CRi.BLEED_W,this.viewH(),e,n),this.throwBtn.visible=!1,jG("light"),this.tickGauge()}
+ async stopGauge(){
+ var t;
+ if(!this.gaugeOn||this.throwing||!this.boss)return;
+ if(this.aimId&&performance.now()<this.aimStartPerf)return;
+ const i=RIi.getInstance(),s=this.boss,e=this.throwState(),n=((null==(t=this.aimTarget)?void 0:t.sample())?this.aimTarget:null)??this.scene.captureHarpoonTarget(TGi);
+ this.aimTarget=n,this.gaugeOn=!1;
+ const h=GOi(i.state.spot,i.realNow(),i.state.huntDevAt);
+ if(!e.ok||!n||(null==h?void 0:h.w)!==s.w)return this.closeGauge(),this.renderThrowBtn(),void vH.getInstance().showMessage(n?"지금은 작살을 던질 수 없어요":"그림자가 멀어졌어요. 가까이 오면 다시 조준해요");
+ const r=qOi(this.gauge.value,this.gauge.range),o=this.generation,a=this.contextKey,c=`${
+ i.state.spot.race}
+ |${
+ i.state.spot.zone}
+ `,l=Qt(()=>!this.destroyed&&o===this.generation&&a===this.contextKey&&c===`${
+ i.state.spot.race}
+ |${
+ i.state.spot.zone}
+ `,"current");
+ this.throwing=!0,this.statusRevision++,this.gauge.freeze(r),jG("light");
+ try{
+ const t=this.aimId?await i.huntShot(this.aimId):await i.huntThrow(r);
+ if(!l())return;
+ if(t.message||!t.result)return this.closeGauge(),void vH.getInstance().showMessage(t.message??"작살을 던지지 못했어요");
+ const h=t.result,o=h.dmg<=0?"miss":h.grade??r,a=h.kind??e.kind??"wood",c="mithril"===a?2:"iron"===a?1:0;
+ if(!(await this.gauge.finish(o))||!l())return;
+ let u;
+ this.closeGauge();
+ const d=new Promise(t=>{
+ u=t}
+ ),f=this.scene.harpoonStrike(a,o,h.dmg,n,{
+ release:Qt(()=>{
+ l()&&AGi(qG.SFX_ARCHERY_FIRE_ARROW,.3+.08*c)}
+ ,"release"),impact:Qt(()=>{
+ u(),l()&&(this.statusRevision++,this.status={
+ w:s.w,total:h.total,n:h.n}
+ ,this.statusAt=performance.now(),this.renderBanner(),jG("miss"===o?"light":"perfect"===o&&c>0?"heavy":c>0?"medium":"light"),AGi("miss"===o?qG.SFX_BATTLE_BOW_ATTACK2:qG.SFX_ARCHERY_HIT_ON_TARGET,"miss"===o?.36:.42+.1*c+("perfect"===o?.08:0)),h.killed&&h.total-h.dmg<h.hp&&(vH.getInstance().showMessage(`${
+ h.name}
+  사냥 성공! 결과는 몬스터가 지나간 뒤에 받아요`),AGi(qG.SFX_TRUMPET,.5)))}
+ ,"impact")}
+ );
+ await Promise.race([d,f])}
+ catch{
+ l()&&(this.closeGauge(),vH.getInstance().showMessage("투척 결과를 확인하지 못했어요. 잠시 후 다시 확인해 주세요"))}
+ finally{
+ this.throwing=!1,l()&&this.renderThrowBtn()}
+ }
+ showResult(t){
+ const i=CRi.BLEED_W,s=mki(t.killed?`${
+ t.name}
+  사냥 성공! 내 피해 ${
+ t.my}
+  · 골드 +${
+ t.gold.toLocaleString()}
+  · 진주 +${
+ t.pearl}
+ `:`${
+ SGi(t.name,"이","가")}
+  달아났어요 · 모두의 피해 ${
+ t.total}
+ /${
+ t.hp}
+  (함께 ${
+ t.n}
+ 명)`,t.killed?16777215:zIi,t.killed?3111503:2759472,14,12);
+ s.position.set((i-s.width)/2,this.viewH()-190),this.addChild(s),t.killed&&(AGi(qG.SFX_TRUMPET,.6),jG("heavy")),MR.fromTo(s,{
+ alpha:0,y:s.y+10}
+ ,{
+ alpha:1,y:s.y,duration:.25}
+ ),MR.to(s,{
+ alpha:0,delay:5,duration:.6,onComplete:Qt(()=>s.destroy({
+ children:!0}
+ ),"onComplete")}
+ )}
+ openRecords(){
+ this.records.visible=!0,this.renderRecords(!0),MR.fromTo(this.records,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ )}
+ renderRecords(t){
+ const i=RIi.getInstance(),s=i.state.hunt,e=(null==s?void 0:s.xp)??0,n=WOi(e),h=BOi(i.state.spot,i.realNow(),i.state.huntDevAt),r=`${
+ e}
+ |${
+ JSON.stringify((null==s?void 0:s.records)??{
+ }
+ )}
+ |${
+ (null==h?void 0:h.w)??"x"}
+ `;
+ if(!t&&r===this.recordsSig)return;
+ this.recordsSig=r;
+ const o=this.records;
+ o.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const a=CRi.BLEED_W,c=this.viewH(),l=Math.min(a-20,480),u=(a-l)/2,d=u+18,f=128+24*xOi.length+60,p=Math.max(10,c-f-8),g=aki(l,f,QIi,null,14);
+ g.alpha=.96,g.position.set(u,p);
+ const w=rki(`몬스터 헌터 · ${
+ n.name}
+ `,VIi,17);
+ w.position.set(d,p+14);
+ const m=rki(`경험치 ${
+ e}
+ ${
+ n.next?` / 다음 등급 ${
+ n.next}
+ `:" · 최고 등급"}
+  · 사냥에 성공하면 내가 준 피해만큼`,zIi,12,!1);
+ m.position.set(d,p+40),oki(m,l-36);
+ const v=i.realNow(),_=rki(h?h.at<=v?`지금 ${
+ SGi(h.name,"이","가")}
+  지나가는 중!`:`이 지역 다음 몬스터: ${
+ h.name}
+  · ${
+ Mki(h.at-v)}
+  뒤`:"난이도 2 자리부터 몬스터가 지나가요",h&&h.at<=v?16757611:KIi,13);
+ _.position.set(d,p+62),oki(_,l-36);
+ const M=[d+200,d+250,d+300,d+360],b=[g,w,m,_],y=rki("몬스터",YIi,12,!1);
+ y.position.set(d,p+92),b.push(y),["목격","참가","성공","최고 기여"].forEach((t,i)=>{
+ const s=rki(t,YIi,12,!1);
+ s.position.set(M[i]-s.width/2,p+92),b.push(s)}
+ ),xOi.forEach((t,i)=>{
+ const e=null==s?void 0:s.records[t.name],n=p+116+24*i,h=rki(`${
+ t.name}
+  (${
+ pSi[t.zone]}
+ )`,(null==e?void 0:e.killed)?qIi:(null==e?void 0:e.seen)||(null==e?void 0:e.joined)?KIi:YIi,13,!!(null==e?void 0:e.killed));
+ h.position.set(d,n),oki(h,170),b.push(h),[null==e?void 0:e.seen,null==e?void 0:e.joined,null==e?void 0:e.killed,null==e?void 0:e.best].forEach((t,i)=>{
+ const s=rki(t?String(t):"-",(null==e?void 0:e.killed)?qIi:zIi,13,!1);
+ s.position.set(M[i]-s.width/2,n),b.push(s)}
+ )}
+ );
+ const E=new pki("닫기",96,40,14);
+ E.setPrimary(!1),E.position.set(u+l-18-96,p+f-52),E.onTap=()=>{
+ this.records.visible=!1}
+ ;
+ const A=new pki("작살 만들기",140,40,14);
+ A.position.set(E.x-8-140,E.y),A.onTap=()=>this.openCraft(),b.push(E,A),o.hitArea=new Ui(0,0,a,c),o.removeAllListeners("pointertap"),o.on("pointertap",t=>{
+ t.stopPropagation(),o.toLocal(t.global).y<p&&(this.records.visible=!1)}
+ ),o.addChild(...b)}
+ openCraft(){
+ this.records.visible=!1,this.craft.visible=!0,this.craftSig="",this.renderCraft(),MR.fromTo(this.craft,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ )}
+ static fishFor(t){
+ const i=RIi.getInstance();
+ return i.netGroups().filter(s=>kSi(s.id).star>=t&&!i.isQuestFish(s)).reduce((t,i)=>t+i.count,0)}
+ renderCraft(){
+ const i=RIi.getInstance(),s=i.harpoons(),e=`${
+ JSON.stringify(s)}
+ |${
+ i.state.gold}
+ |${
+ t.fishFor(1)}
+ |${
+ t.fishFor(2)}
+ |${
+ t.fishFor(3)}
+ `;
+ if(e===this.craftSig)return;
+ this.craftSig=e;
+ const n=this.craft;
+ n.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const h=CRi.BLEED_W,r=this.viewH(),o=Math.min(h-20,480),a=(h-o)/2,c=a+18,l=84+92*IOi.length+60,u=r-l-8,d=aki(o,l,QIi,null,14);
+ d.alpha=.96,d.position.set(a,u);
+ const f=rki("작살 만들기",VIi,17);
+ f.position.set(c,u+14);
+ const p=rki(`어망의 물고기(값싼 것부터 · 의뢰 물고기는 빼고) + 골드 · 몬스터 한 번에 ${
+ FOi(i.state.gear.boat)}
+ 개까지 던져요`,zIi,12,!1);
+ p.position.set(c,u+40),oki(p,o-36);
+ const g=[d,f,p];
+ IOi.forEach((e,n)=>{
+ const h=kOi[e],r=u+70+92*n,l=s.use===e,d=t.fishFor(h.minStar),f=(new ip).roundRect(c-8,r,o-20,84,10).fill(l?BIi:GIi),p=rki(`${
+ h.name}
+  · 피해 ×${
+ h.mult}
+  · ${
+ s.stock[e]}
+ 개`,l?VIi:KIi,15);
+ p.position.set(c+4,r+8);
+ const w=rki(`★${
+ h.minStar}
+  이상 물고기 ${
+ h.fish}
+ 마리 + ${
+ h.gold.toLocaleString()}
+  골드 (맞는 물고기 ${
+ d}
+ 마리)`,d>=h.fish?zIi:XIi,12,!1);
+ w.position.set(c+4,r+32),oki(w,o-60),g.push(f,p,w);
+ const m=new pki("1개",64,32,13),v=new pki("5개",64,32,13),_=new pki(l?"던질 작살":"이걸 던지기",104,32,13);
+ _.setPrimary(!1),_.enabled=!l,m.position.set(c+4,r+52),v.position.set(c+74,r+52),_.position.set(a+o-24-104,r+52),m.enabled=d>=h.fish&&i.state.gold>=h.gold,v.enabled=d>=5*h.fish&&i.state.gold>=5*h.gold,m.onTap=()=>{
+ this.make(e,1)}
+ ,v.onTap=()=>{
+ this.make(e,5)}
+ ,_.onTap=async()=>{
+ const t=await i.huntUse(e);
+ t&&vH.getInstance().showMessage(t),this.craftSig="",this.renderCraft()}
+ ,g.push(m,v,_)}
+ );
+ const w=new pki("닫기",96,40,14);
+ w.setPrimary(!1),w.position.set(a+o-18-96,u+l-52),w.onTap=()=>{
+ this.craft.visible=!1}
+ ,g.push(w),n.hitArea=new Ui(0,0,h,r),n.removeAllListeners("pointertap"),n.on("pointertap",t=>{
+ t.stopPropagation(),n.toLocal(t.global).y<u&&(this.craft.visible=!1)}
+ ),n.addChild(...g)}
+ async make(t,i){
+ if(this.crafting)return;
+ this.crafting=!0;
+ const s=await RIi.getInstance().huntCraft(t,i).finally(()=>{
+ this.crafting=!1}
+ );
+ if(s.message||!s.result)return void vH.getInstance().showMessage(s.message??"작살을 만들지 못했어요");
+ const e=s.result.used.map(t=>`${
+ kSi(t.id).name}
+  ${
+ t.count}
+ `).join(" · ");
+ vH.getInstance().showMessage(`${
+ kOi[t].name}
+  ${
+ i}
+ 개를 만들었어요 (${
+ e}
+ )`),jG("light"),AGi(qG.SFX_STONE_BREAK,.4),this.craftSig="",this.renderCraft()}
+ layout(){
+ this.chipKey="",this.recordsSig="",this.craftSig="",this.gaugeOn?this.closeGauge():this.gauge.visible&&this.gauge.layout(CRi.BLEED_W,this.viewH())}
+ destroy(t){
+ this.closeAll(),super.destroy(t)}
+ }
+ ;
+ Qt(OGi,"FishingHuntUi"),Zt(OGi,"rule",OOi);
+ let IGi=OGi;
+ const kGi=class t extends Ve{
+ constructor(i){
+ super(),Zt(this,"active",!1),Zt(this,"rodHold",!0),Zt(this,"stepId","hello"),Zt(this,"lines",YCi("인간")),Zt(this,"captain",jCi("인간")),Zt(this,"clock",0),Zt(this,"timers",[]),Zt(this,"wantTap",!1),Zt(this,"dim",new Ve),Zt(this,"dimHole",new Ye(t.holeTexture())),Zt(this,"dimRest",new ip),Zt(this,"dimTarget",null),Zt(this,"flash",new ip),Zt(this,"flashUntil",0),Zt(this,"flashOn",!1),Zt(this,"hand",new Ve),Zt(this,"handArt",new ip),Zt(this,"handTarget",null),Zt(this,"taps",new Ve),Zt(this,"prog",new Ve),Zt(this,"chips",[]),Zt(this,"skip",new Ve),Zt(this,"skipBg",new ip),Zt(this,"skipText",rki("건너뛰기",zIi,12)),Zt(this,"talk",new Ve),Zt(this,"talkBg",new ip),Zt(this,"faceBg",new ip),Zt(this,"faceMask",new ip),Zt(this,"face",new Ye(as.EMPTY)),Zt(this,"who",rki("",VIi,14)),Zt(this,"say",rki("",KIi,15.5)),Zt(this,"more",rki("▼",VIi,13)),Zt(this,"go",new Ve),Zt(this,"goBg",new ip),Zt(this,"goText",rki("시작 포인트로 이동",jIi,16)),Zt(this,"talkTop",!1),Zt(this,"typing",null),Zt(this,"onGo",null),Zt(this,"idle",new Ve),Zt(this,"ring",null),Zt(this,"seaPoint",null),Zt(this,"fishId",0),Zt(this,"finished",!1),Zt(this,"progH",0),Zt(this,"progAt",0),Zt(this,"seaSailing",!1),Zt(this,"waitingBite",!1),Zt(this,"lastNow",performance.now()),Zt(this,"moreY",0),Zt(this,"talkLayout",{
+ x:0,y:0,w:0,h:0,padL:0,narrow:!1,size:15.5}
+ ),Zt(this,"button",null),Zt(this,"withMore",!1),this.host=i,this.visible=!1,this.eventMode="static",this.dim.eventMode=this.flash.eventMode=this.hand.eventMode=this.taps.eventMode=this.idle.eventMode=this.prog.eventMode="none",this.dimHole.anchor.set(.5),this.dim.addChild(this.dimHole,this.dimRest),this.dim.visible=!1,this.flash.blendMode="add",this.handArt.svg('<svg viewBox="0 0 64 64"><path d="M23 5c3.3 0 5.5 2.4 5.5 5.6v16.6l1.9-.9c2.3-1 5 0 6.1 2.2l.4.9 1.7-.7c2.3-.9 4.9.2 5.9 2.4l.4.9.9-.2c3-.5 5.7 1.8 5.7 4.8v9.2C51.5 54.1 44 61 35.3 61h-4.2c-6.3 0-12-3.4-15-8.9l-6.4-11.6c-1.2-2.2-.4-5 1.8-6.2 2-1.1 4.5-.6 5.9 1.2l2.1 2.7V10.6C17.5 7.4 19.7 5 23 5z" fill="#ffffff" stroke="#1b1b1d" stroke-width="3" stroke-linejoin="round"/><path d="M28.5 27v12M36.8 29.5V40M45 32.6V41" stroke="#1b1b1d" stroke-width="2.4" stroke-linecap="round" fill="none"/></svg>'),this.hand.addChild(this.handArt),this.hand.visible=!1,this.skip.addChild(this.skipBg,this.skipText),this.skip.eventMode="static",this.skip.cursor="pointer",this.skip.on("pointertap",t=>{
+ t.stopPropagation(),this.skipToEnd()}
+ ),this.faceBg.eventMode=this.faceMask.eventMode="none",this.face.mask=this.faceMask,this.go.addChild(this.goBg,this.goText),this.go.eventMode="static",this.go.cursor="pointer",this.go.on("pointertap",t=>{
+ t.stopPropagation();
+ const i=this.onGo;
+ this.onGo=null,null==i||i()}
+ ),this.talkBg.eventMode="none",this.talk.addChild(this.talkBg,this.faceBg,this.face,this.faceMask,this.who,this.say,this.more,this.go),this.talk.visible=!1,this.addChild(this.dim,this.flash,this.idle,this.prog,this.skip,this.talk,this.hand,this.taps),this.on("pointerdown",t=>this.onDown(t))}
+ get k(){
+ return this.host.W()/370}
+ start(t){
+ this.active=!0,this.finished=!1,this.visible=!0,this.eventMode="static",MR.killTweensOf(this),this.alpha=1,this.clock=0,this.timers=[],this.lastNow=performance.now(),this.lines=YCi(t),this.captain=jCi(t),this.rodHold=!0,this.ring=this.seaPoint=null,this.face.texture=nAi.gear().journeyNpcs[this.captain.art]??as.EMPTY,this.who.text=this.captain.name,this.talkTop=!1,this.host.scene.tutorialRingScale=this.k,this.host.scene.tutorialLift=this.host.lift(),this.host.scene.setTutorial(!0),this.layout(),vn.shared.remove(this.tick,this),vn.shared.add(this.tick,this),this.run("hello")}
+ stop(){
+ this.active&&(this.active=!1,this.visible=!1,vn.shared.remove(this.tick,this),this.timers=[],this.typing=null,this.host.scene.setTutorial(!1))}
+ layout(){
+ const t=this.host.W(),i=this.host.H(),s=this.k;
+ this.hitArea=new Ui(0,0,t,i),this.skipText.textSize=Math.round(12*s);
+ const e=this.skipText.width+20*s,n=this.skipText.height+12*s;
+ if(this.skipBg.clear().roundRect(0,0,e,n,8*s).fill({
+ color:921104,alpha:.72}
+ ),this.skipText.position.set(10*s,6*s),this.skip.position.set(t-14*s-e,14*s),this.skip.hitArea=new Ui(-6*s,-6*s,e+12*s,n+12*s),!this.chips.length)for(const c of FCi){
+ const t=new ip,i=rki(c,YIi,11.5);
+ this.prog.addChild(t,i),this.chips.push({
+ bg:t,text:i}
+ )}
+ const h=14*s,r=this.skip.x-8*s,o=5*s,a=(r-h-3*o)/4;
+ this.chips.forEach((t,i)=>{
+ t.text.textSize=Math.round(11.5*s),t.text.scale.set(Math.min(1,(a-10*s)/Math.max(1,t.text.width/t.text.scale.x))),t.bg.position.set(h+i*(a+o),14*s),t.bg.label=String(a)}
+ ),this.progH=n,this.drawProg(),this.drawTalk(),this.idle.visible&&this.buildIdle()}
+ drawProg(){
+ const t=this.k;
+ this.chips.forEach((i,s)=>{
+ const e=Number(i.bg.label),n=s===this.progAt,h=s<this.progAt;
+ i.bg.clear().roundRect(0,0,e,this.progH,8*t).fill(n?{
+ color:VIi,alpha:1}
+ :h?{
+ color:4013377,alpha:.9}
+ :{
+ color:921104,alpha:.72}
+ ),i.text.textColor=n?jIi:h?KIi:YIi,i.text.position.set(i.bg.x+(e-i.text.width)/2,i.bg.y+(this.progH-i.text.height)/2)}
+ )}
+ run(t){
+ const i=HCi(t);
+ switch(this.stepId=t,this.wantTap=!1,this.progAt=i.prog,this.drawProg(),this.spot(null),this.point(null),"idle"!==t&&(this.idle.visible=!1),"movebtn"===t&&(this.talkTop=!0),i.kind){
+ case"talk":return"idle"===t&&(this.buildIdle(),this.idle.visible=!0,MR.fromTo(this.idle,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.3}
+ )),void this.speak(this.lines[t],{
+ more:!0,onDone:Qt(()=>{
+ this.wantTap=!0}
+ ,"onDone")}
+ );
+ case"goal":{
+ const t=this.host.scene,i=this.k;
+ return this.ring=t.tutorialSpot([-45,-20,-70,0,-100,20,-135,45,180,90,135,-160],150,230,14*i+this.progH,150*i)??t.tutorialSpot([-45,0,-90,45,-135,90,135,180,-20,-70,20,70],90,150,14*i+this.progH,150*i),this.ring?(t.tutorialRing=this.ring,void this.speak(this.lines.goal,{
+ onDone:Qt(()=>{
+ const i=this.ring;
+ i&&(this.spot(()=>({
+ p:this.toLocalOf(t.worldToGlobal(i.x,i.y)),r:46*this.k}
+ )),this.point(()=>this.toLocalOf(t.worldToGlobal(i.x,i.y))),this.wantTap=!0)}
+ ,"onDone")}
+ )):(this.rodHold=!1,void this.run("rod"))}
+ case"wait":return void this.speak(this.lines[t],{
+ }
+ );
+ case"rod":return this.rodHold=!1,void this.speak(this.lines.rod,{
+ }
+ );
+ case"bite":return this.speak(this.lines.bite,{
+ }
+ ),this.point(()=>{
+ const t=this.host.biteGlobal();
+ return t?this.toLocalOf(t):null}
+ ),this.flashUntil=this.clock+3300,this.wantTap=!0,void jG("medium");
+ case"btn":{
+ const t=this.host.scene,i=t.modeButton;
+ return t.tutorialMoveBtn=!0,MR.fromTo(i.scale,{
+ x:.3,y:.3}
+ ,{
+ x:1,y:1,duration:.35,ease:"back.out(3)"}
+ ),void this.speak(this.lines.movebtn,{
+ onDone:Qt(()=>{
+ const t=Qt(()=>{
+ const t=i.getBounds();
+ return this.toLocalOf({
+ x:t.x+t.width/2,y:t.y+t.height/2}
+ )}
+ ,"at");
+ this.spot(()=>({
+ p:t(),r:44*this.k}
+ )),this.point(t),this.wantTap=!0}
+ ,"onDone")}
+ )}
+ case"sea":{
+ const t=this.host.scene,i=this.k;
+ return this.rodHold=!0,void this.speak(this.lines.sea,{
+ onDone:Qt(()=>{
+ this.seaPoint=t.tutorialSpot([-135,-110,-160,180,-90,160,135,110,90,-45,0,45],120,190,this.talkBottom()+10*i,90*i)??t.tutorialSpot([-135,-90,180,135,90,45,0,-45],90,150,this.talkBottom()+10*i,90*i);
+ const s=this.seaPoint;
+ s&&this.point(()=>this.toLocalOf(t.worldToGlobal(s.x,s.y))),this.wantTap=!0}
+ ,"onDone")}
+ )}
+ case"end":return void this.speak(this.lines.end,{
+ button:"시작 포인트로 이동",onButton:Qt(()=>this.finish(),"onButton")}
+ )}
+ }
+ next(){
+ const t="hooked"===this.stepId||"missed"===this.stepId?null:$Ci(this.stepId);
+ t&&this.run(t)}
+ skipToEnd(){
+ if(this.finished)return;
+ const t=this.host.scene;
+ t.tutorialRing=null,this.ring=this.seaPoint=null,WDi.dismiss(!0),this.timers=[],this.talkTop=t.tutorialMoveBtn,this.run("end")}
+ finish(){
+ this.finished||(this.finished=!0,this.wantTap=!1,this.spot(null),this.point(null),this.host.backend().finish(),jG("light"),this.active=!1,this.eventMode="none",vn.shared.remove(this.tick,this),this.timers=[],this.typing=null,this.host.scene.setTutorial(!1),MR.to(this,{
+ alpha:0,duration:.6,onComplete:Qt(()=>{
+ this.active||(this.visible=!1)}
+ ,"onComplete")}
+ ),this.host.onFinish(this.captain.id))}
+ onCatch(t,i,s){
+ this.active&&"hooked"===this.stepId&&(this.fishId=t.id,this.lines=YCi(this.host.race(),kSi(t.id).name),this.later(1e3*s+(i?2800:900),()=>this.run("caught")))}
+ onDown(t){
+ if(t.target!==this||!this.active||this.finished)return;
+ const i=this.toLocal(t.global),s=this.k;
+ this.tapRing(i);
+ const e=this.stepId,n="hooked"===e||"missed"===e?null:HCi(e);
+ if(this.typing&&(this.typing.shown=1/0,!n||"talk"===n.kind||!this.wantTap))return;
+ if(!n)return;
+ if("talk"===n.kind){
+ if(!this.wantTap)return;
+ return"caught"===e&&WDi.dismiss(),void this.next()}
+ if(!this.wantTap)return;
+ const h=this.host.scene;
+ if("goal"===n.kind&&this.ring){
+ const t=this.toLocalOf(h.worldToGlobal(this.ring.x,this.ring.y));
+ if(Math.hypot(i.x-t.x,i.y-t.y)>50*s)return;
+ const e=this.ring;
+ if(this.ring=null,h.tutorialRing=null,!h.tutorialSail(e.x,e.y))return this.rodHold=!1,void this.run("rod");
+ jG("light"),this.run("sailing")}
+ else if("rod"===n.kind){
+ const t=h.rodBalloonCenter;
+ if(!t)return;
+ const e=this.toLocalOf(h.worldToGlobal(t.x,t.y));
+ if(Math.hypot(i.x-e.x,i.y-e.y)>48*s)return;
+ if(!h.tutorialTapRod())return;
+ jG("light"),this.wantTap=!1,this.spot(null),this.point(null),this.later(650,()=>this.run("wait"))}
+ else if("bite"===n.kind){
+ if(!this.host.backend().hookable())return;
+ this.hook()}
+ else if("btn"===n.kind){
+ const t=h.modeButton.getBounds(),e=this.toLocalOf({
+ x:t.x+t.width/2,y:t.y+t.height/2}
+ );
+ if(Math.abs(i.x-e.x)>t.width/2+14*s||Math.abs(i.y-e.y)>t.height/2+14*s)return;
+ h.tutorialModeTap(),jG("light"),this.run("sea")}
+ else if("sea"===n.kind){
+ const t=h.globalToWorld(this.toGlobal(i));
+ if(!h.tutorialSail(t.x,t.y))return;
+ jG("light"),this.wantTap=!1,this.point(null),this.talk.visible=!1,this.stepId="sea",this.seaSailing=!0}
+ }
+ hook(){
+ this.stepId="hooked",this.wantTap=!1,this.point(null),this.spot(null),this.talk.visible=!1,this.flashUntil=0,this.host.backend().hook().then(t=>{
+ t&&this.active&&"hooked"===this.stepId&&(this.stepId="missed",this.speak(this.lines.missed,{
+ }
+ ),this.later(900,()=>{
+ this.host.backend().recast(),this.waitBite()}
+ ))}
+ )}
+ missed(){
+ this.stepId="missed",this.wantTap=!1,this.point(null),this.flashUntil=0,this.speak(this.lines.missed,{
+ }
+ ),this.later(900,()=>{
+ this.host.backend().recast(),this.waitBite()}
+ )}
+ waitBite(){
+ this.waitingBite=!0}
+ tick(){
+ if(!this.active)return;
+ const i=performance.now(),s=Math.min(1e3,i-this.lastNow)*t.speed;
+ if(this.lastNow=i,this.clock+=s,this.timers.length){
+ const t=this.timers.filter(t=>t.at<=this.clock);
+ this.timers=this.timers.filter(t=>t.at>this.clock);
+ for(const i of t)i.fn()}
+ const e=this.typing;
+ if(e){
+ const t=Math.min(e.chars.length,e.shown===1/0?e.chars.length:XCi(e.chars.join(""),this.clock-e.t0));
+ if(t!==e.drawn&&(e.drawn=t,this.say.text=e.chars.slice(0,t).join("")),t>=e.chars.length){
+ this.typing=null;
+ const t=e.onDone;
+ this.finishTalk(),null==t||t()}
+ }
+ const n=this.host.scene,h=this.host.backend(),r=this.stepId;
+ if("sailing"===r&&!n.moving&&n.idleInSail)this.run("rod");
+ else if("rod"!==r||!n.rodShown||this.wantTap||this.typing)"wait"===r&&h.biteOpen()?this.run("bite"):"missed"===r&&this.waitingBite&&h.biteOpen()?(this.waitingBite=!1,this.run("bite")):"bite"!==r||h.biteOpen()||h.hookable()?"sea"===r&&this.seaSailing&&!n.moving&&(this.seaSailing=!1,this.talk.visible=!1,this.later(900,()=>this.run("done"))):this.missed();
+ else{
+ const t=Qt(()=>{
+ const t=n.rodBalloonCenter;
+ return t?this.toLocalOf(n.worldToGlobal(t.x,t.y)):null}
+ ,"at");
+ this.spot(()=>{
+ const i=t();
+ return i?{
+ p:i,r:40*this.k}
+ :null}
+ ),this.point(t),this.wantTap=!0}
+ this.drawDim(),this.drawHand(),this.drawFlash(),this.more.visible&&(this.more.y=this.moreY+1.5*Math.sin(this.clock/1e3*Math.PI*2)*this.k);
+ for(const t of[...this.taps.children]){
+ const i=Math.min(1,(this.clock-(t.t0??0))/550),s=this.k;
+ t.clear().circle(t.p.x,t.p.y,(8+20*(1-(1-i)*(1-i)))*s).stroke({
+ color:16777215,width:3*s,alpha:1-i}
+ ),i>=1&&t.destroy()}
+ }
+ later(t,i){
+ this.timers.push({
+ at:this.clock+t,fn:i}
+ )}
+ talkBottom(){
+ return this.talkTop?this.talkLayout.y+this.talkLayout.h:this.progH+14*this.k}
+ speak(t,i){
+ const s=this.k,e=this.host.W()-24*s,n=Qt(t=>({
+ ...this.say.getStyle(),fontSize:t*s,lineHeight:Math.round(t*s*1.5)}
+ ),"style"),h=Qt(t=>e-(t?72:94)*s-16*s,"wrapW"),r=Qt((i,s)=>sD.wrapTextCJK(t,n(i),h(s)),"wrap"),o=iOi((t,i)=>r(t,i).split("\n").length),a=r(o.size,o.narrow);
+ this.say.setWrapWidth(0),this.say.setStyle(n(o.size)),this.say.textColor=KIi,this.talkLayout={
+ ...this.talkLayout,narrow:o.narrow,size:o.size}
+ ,this.say.text=a,this.button=i.button??null,this.goText.text=i.button??"",this.onGo=i.onButton??null,this.withMore=!!i.more,this.drawTalk(),this.say.text="",this.more.visible=!1,this.go.visible=!1,this.talk.visible=!0,this.typing={
+ chars:[...a],t0:this.clock,shown:0,drawn:0,onDone:i.onDone}
+ }
+ finishTalk(){
+ this.more.visible=this.withMore,this.go.visible=!!this.button}
+ drawTalk(){
+ const t=this.k,i=this.host.W(),s=this.host.H(),e=this.talkLayout,n=12*t,h=i-24*t,r=(e.narrow?72:94)*t;
+ this.who.textSize=Math.round(14*t);
+ const o=this.say.height,a=this.button?10*t+48*t:0,c=Math.max(112*t,14*t+this.who.height+4*t+o+a+14*t),l=this.talkTop?14*t+this.progH+10*t:s-14*t-c;
+ this.talkLayout={
+ ...e,x:n,y:l,w:h,h:c,padL:r}
+ ,this.talkBg.clear().roundRect(n,l,h,c,18*t).fill({
+ color:921104,alpha:.95}
+ );
+ const u=(e.narrow?52:72)*t,d=(e.narrow?66:88)*t,f=n+12*t,p=l+12*t;
+ this.faceBg.clear().roundRect(f,p,u,d,12*t).fill(2894894),this.faceMask.clear().roundRect(f,p,u,d,12*t).fill(16777215);
+ const g=(e.narrow?76:104)*t;
+ if(this.face.width=this.face.height=g,this.face.position.set(f-(e.narrow?8:10)*t,p+1*t),this.who.position.set(n+r,l+14*t),this.say.position.set(n+r,this.who.y+this.who.height+4*t),this.more.textSize=Math.round(13*t),this.moreY=l+c-10*t-this.more.height,this.more.position.set(n+h-14*t-this.more.width,this.moreY),this.button){
+ const i=h-r-16*t,s=this.say.y+o+10*t;
+ this.goText.textSize=Math.round(16*t),this.goBg.clear().roundRect(0,0,i,48*t,12*t).fill(VIi),this.goText.position.set((i-this.goText.width)/2,(48*t-this.goText.height)/2),this.go.position.set(n+r,s),this.go.hitArea=new Ui(0,0,i,48*t)}
+ }
+ buildIdle(){
+ const t=this.k,i=this.host.W(),s=this.host.H(),e=nAi.gear();
+ this.idle.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const n=22*t,h=i-44*t,r=46*t,o=16*t,a=o+2*r+12*t,c=Math.max(this.talkBottom()+14*t,.24*s),l=(new ip).roundRect(n,c,h,a,18*t).fill({
+ color:921104,alpha:.95}
+ ).rect(n+o,c+o+r,h-2*o,1).fill(WIi);
+ this.idle.addChild(l),[["그냥 두면","자동으로",2,KIi],["눌러 주면","느낌표 때",1,VIi]].forEach(([i,s,a,l],u)=>{
+ const d=c+o+r*u+r/2,f=rki(i,l,Math.round(14*t)),p=rki(s,zIi,Math.round(11.5*t));
+ f.position.set(n+o,d-(f.height+p.height+2*t)/2),p.position.set(n+o,f.y+f.height+2*t),this.idle.addChild(f,p);
+ const g=n+o+74*t+8*t;
+ for(let n=0;
+ n<a;
+ n++){
+ const i=new Ye(e.bubbles[0]);
+ i.width=i.height=30*t,i.position.set(g+32*n*t,d-15*t),this.idle.addChild(i)}
+ const w=rki("→",zIi,Math.round(16*t)),m=n+h-o-40*t;
+ w.position.set(m-8*t-18*t+(18*t-w.width)/2,d-w.height/2);
+ const v=new Ye(this.fishId?nAi.fish(this.fishId):as.EMPTY);
+ v.anchor.set(.5),v.scale.set(40*t/100),v.position.set(m+20*t,d),this.idle.addChild(w,v)}
+ )}
+ spot(t){
+ this.dimTarget=t,t?(this.dim.visible=!0,MR.to(this.dim,{
+ alpha:1,duration:.35}
+ )):MR.to(this.dim,{
+ alpha:0,duration:.25,onComplete:Qt(()=>{
+ this.dimTarget||(this.dim.visible=!1)}
+ ,"onComplete")}
+ )}
+ drawDim(){
+ var t;
+ const i=null==(t=this.dimTarget)?void 0:t.call(this);
+ if(!i)return;
+ const s=this.host.W(),e=this.host.H(),n=i.r/100,h=256*n;
+ this.dimHole.scale.set(n),this.dimHole.position.set(i.p.x,i.p.y);
+ const r=i.p.x-h,o=i.p.x+h,a=i.p.y-h,c=i.p.y+h;
+ this.dimRest.clear().rect(0,0,s,Math.max(0,a)).rect(0,c,s,Math.max(0,e-c)).rect(0,Math.max(0,a),Math.max(0,r),Math.max(0,Math.min(e,c)-Math.max(0,a))).rect(o,Math.max(0,a),Math.max(0,s-o),Math.max(0,Math.min(e,c)-Math.max(0,a))).fill({
+ color:0,alpha:.58}
+ )}
+ point(t){
+ this.handTarget=t,this.hand.visible=!!t}
+ drawHand(){
+ var t;
+ const i=null==(t=this.handTarget)?void 0:t.call(this);
+ if(!i)return void(this.hand.visible=!1);
+ const s=this.k,e=54*s,n=QCi(this.clock);
+ this.hand.visible=!0,this.handArt.scale.set(e/64);
+ const h=23/64*e,r=5/64*e,o=10*s;
+ this.hand.pivot.set(e/2,e/2),this.hand.position.set(i.x-h+e/2+n.dx*s,i.y+o-r+e/2+n.dy*s),this.hand.scale.set(n.scale)}
+ drawFlash(){
+ const t=this.flashUntil-this.clock;
+ if(t<=0)return void(this.flashOn&&(this.flash.clear(),this.flashOn=!1));
+ this.flashOn=!0,this.flash.clear();
+ const i=.06*Math.sin((3300-t)/1100*Math.PI)**2;
+ this.flash.rect(0,0,this.host.W(),this.host.H()).fill({
+ color:16777215,alpha:i}
+ )}
+ tapRing(t){
+ const i=new ip;
+ i.t0=this.clock,i.p=t,this.taps.addChild(i)}
+ toLocalOf(t){
+ return this.toLocal(t)}
+ static holeTexture(){
+ if(this.hole)return this.hole;
+ const t=document.createElement("canvas");
+ t.width=t.height=512;
+ const i=t.getContext("2d"),s=i.createRadialGradient(256,256,100,256,256,156);
+ return s.addColorStop(0,"rgba(0,0,0,0)"),s.addColorStop(1,"rgba(0,0,0,0.58)"),i.fillStyle=s,i.fillRect(0,0,512,512),this.hole=as.from(t)}
+ }
+ ;
+ Qt(kGi,"FishingTutorial"),Zt(kGi,"speed",1),Zt(kGi,"hole",null);
+ let RGi=kGi;
+ const xGi=[9,15,21,3],PGi=Qt(t=>String(t).padStart(2,"0"),"pad");
+ function NGi(t){
+ const i=PSi(t),s=NSi(t),e=(xGi[i]+6*(1-s/xSi))%24,n=Math.floor(e),h=Math.min(59,Math.floor(60*(e-n)));
+ return{
+ tide:i,hour:e,text:`${
+ PGi(n)}
+ :${
+ PGi(h)}
+ `,left:s}
+ }
+ Qt(NGi,"gameClock");
+ const LGi=Qt(t=>(t-12)/24*Math.PI*2,"dialAngle"),DGi=Qt(t=>[LGi(xGi[t]),LGi(xGi[t]+6)],"phaseArc");
+ function GGi(t){
+ const i=[];
+ for(const s of t){
+ const t=i.find(t=>t.id===s.id);
+ t?t.who.push({
+ name:s.name,have:s.have,need:s.need}
+ ):i.push({
+ id:s.id,who:[{
+ name:s.name,have:s.have,need:s.need}
+ ]}
+ )}
+ return i}
+ function BGi(t,i,s){
+ const e=DSi(s),n=t.race===i.race&&t.zone===i.zone&&BSi(t,i.point,e),h=t.depth===i.depth,r="전체"===t.tide||wSi[PSi(s)]===t.tide,o=!!t.roam;
+ let a=null;
+ return o||n||(a=t.pts.reduce((t,s)=>Math.abs(s-i.point)<Math.abs(t-i.point)?s:t,t.pts[0])),{
+ here:n&&h&&r,placeOk:n,depthOk:h,tideOk:r,roam:o,near:a,tideWait:r?0:LSi(s,wSi.indexOf(t.tide))}
+ }
+ function UGi(t,i){
+ if(!t||"fish"!==t.kind||!t.id)return null;
+ const s=kSi(t.id).depth;
+ return s===i.depth?null:s}
+ function FGi(t,i,s,e,n){
+ const h=RIi.getInstance(),r=BGi(t,i,s),o=new Ve,a=vSi[`${
+ t.race}
+ |${
+ t.zone}
+ `],c=r.roam?`${
+ a}
+  · 날마다 바뀌는 곳 (회유)`:t.pts.length>=9?`${
+ a}
+  어디서나`:`${
+ a}
+  · ${
+ t.pts.slice(0,2).map(i=>RSi(t.race,t.zone,i)).join(", ")}
+ ${
+ t.pts.length>2?` 외 ${
+ t.pts.length-2}
+ 곳`:""}
+ `,l="전체"===t.tide?"모든 시간대":`${
+ mSi[wSi.indexOf(t.tide)]}
+ 에만`,u=mSi[NGi(s).tide],d=[{
+ k:"서식지",v:c,ok:r.placeOk,okText:"✓ 여기",act:null!==r.near?{
+ text:"가기",go:!0,run:Qt(()=>h.goTo({
+ race:t.race,zone:t.zone,point:r.near,depth:t.depth}
+ ),"run")}
+ :void 0}
+ ,{
+ k:"깊이",v:gSi[t.depth],ok:r.depthOk,okText:"✓ 지금 깊이",act:{
+ text:"맞추기",go:!1,run:Qt(()=>h.setDepth(t.depth),"run")}
+ }
+ ,{
+ k:"시간대",v:l,ok:r.tideOk,okText:`✓ 지금 ${
+ u}
+ `,wait:r.tideOk?void 0:`${
+ mSi[wSi.indexOf(t.tide)]}
+ 까지 ${
+ Mki(r.tideWait)}
+ `}
+ ];
+ let f=0;
+ for(const g of d){
+ const t=rki(g.k,zIi,12),i=rki(g.v,KIi,13);
+ t.position.set(0,f+6),i.position.set(54,f+5);
+ let s=e;
+ if(g.ok){
+ const t=rki(g.okText,qIi,12);
+ t.position.set(e-t.width,f+6),s=t.x-8,o.addChild(t)}
+ else if(g.act){
+ const t=new pki(g.act.text,64,28,12);
+ t.position.set(e-64,f+1),s=t.x-8;
+ const{
+ run:i,go:h}
+ =g.act;
+ t.onTap=async()=>{
+ t.enabled=!1;
+ const s=await i();
+ if(s)return vH.getInstance().showMessage(s),void(t.enabled=!0);
+ jG("light"),n(h)}
+ ,o.addChild(t)}
+ else if(g.wait){
+ const t=rki(g.wait,zIi,11);
+ t.position.set(e-t.width,f+7),s=t.x-8,o.addChild(t)}
+ oki(i,s-i.x),o.addChild(t,i),f+=32}
+ const p=rki(r.here?"지금 여기서 잘 잡혀요!":"셋 다 맞으면 잘 잡혀요",r.here?qIi:zIi,11,!!r.here);
+ return p.position.set(0,f+4),o.addChild(p),{
+ node:o,height:f+4+p.height}
+ }
+ Qt(GGi,"wantedFish"),Qt(BGi,"habitat"),Qt(UGi,"journeyDepth"),Qt(FGi,"habitatRows");
+ const $Gi=[16106577,16748378,4876472,12034796],HGi=Qt(t=>t<=2?8378016:t<=4?16106577:t<=6?16757611:16751752,"levelColor"),WGi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"band",new Ve),Zt(this,"bandBg",new ip),Zt(this,"clockSeg",new Ve),Zt(this,"dial",new ip),Zt(this,"dialIcon",new Ye(as.EMPTY)),Zt(this,"needle",new ip),Zt(this,"clockText",rki("",KIi,15)),Zt(this,"depthSeg",new Ve),Zt(this,"depthGlyph",new ip),Zt(this,"depthArrow",rki("▾",zIi,11)),Zt(this,"netSeg",new Ve),Zt(this,"netIcon",yki("keepnet",20,16777215)),Zt(this,"netText",rki("",KIi,13)),Zt(this,"seps",new ip),Zt(this,"place",new Ve),Zt(this,"placeBg",new ip),Zt(this,"badge",new ip),Zt(this,"badgeText",rki("",1056783,11)),Zt(this,"placeText",rki("",KIi,12)),Zt(this,"pop",new Ve),Zt(this,"strip",new Ve),Zt(this,"card",new Ve),Zt(this,"cardId",0),Zt(this,"onDepth",null),Zt(this,"onNet",null),Zt(this,"sig",""),Zt(this,"stripSig",""),Zt(this,"last",null),Zt(this,"bandY",19),Zt(this,"bandW",0),Zt(this,"popSig",""),Zt(this,"cardSig",""),this.bandBg.eventMode=this.dial.eventMode=this.needle.eventMode=this.depthGlyph.eventMode=this.seps.eventMode="none",this.dialIcon.eventMode="none",this.dialIcon.anchor.set(.5),this.clockSeg.addChild(this.dial,this.dialIcon,this.needle,this.clockText),this.depthSeg.addChild(this.depthGlyph,this.depthArrow),this.netSeg.addChild(this.netIcon,this.netText);
+ for(const[t,i]of[[this.clockSeg,()=>this.togglePop()],[this.depthSeg,()=>{
+ var t;
+ return null==(t=this.onDepth)?void 0:t.call(this)}
+ ],[this.netSeg,()=>{
+ var t;
+ return null==(t=this.onNet)?void 0:t.call(this)}
+ ]])t.eventMode="static",t.cursor="pointer",t.on("pointertap",t=>{
+ t.stopPropagation(),i()}
+ );
+ this.band.addChild(this.bandBg,this.seps,this.clockSeg,this.depthSeg,this.netSeg),this.band.position.set(10,10),this.placeBg.eventMode=this.badge.eventMode="none",this.place.addChild(this.placeBg,this.badge,this.badgeText,this.placeText),this.place.eventMode="none",this.place.position.set(10,59),this.pop.visible=!1,this.pop.eventMode="static",this.pop.on("pointertap",t=>{
+ t.stopPropagation(),this.closePops()}
+ ),this.card.visible=!1,this.card.eventMode="static",this.card.on("pointertap",t=>t.stopPropagation()),this.strip.eventMode="static",this.addChild(this.band,this.place,this.strip,this.pop,this.card)}
+ get cardOpen(){
+ return this.card.visible||this.pop.visible}
+ get bandRight(){
+ return this.band.x+this.bandW}
+ closePops(){
+ this.pop.visible=!1,this.card.visible=!1,this.cardId=0}
+ closeIfOutside(t){
+ if(!this.cardOpen)return!1;
+ for(let i=t;
+ i;
+ i=i.parent)if(i===this.card||i===this.pop||i===this.strip||i===this.clockSeg)return!1;
+ return this.closePops(),!0}
+ update(t){
+ this.last=t;
+ const i=NGi(t.now),s=QSi(t.spot),e=`${
+ i.text}
+ |${
+ i.tide}
+ |${
+ t.spot.race}
+ |${
+ t.spot.zone}
+ |${
+ t.spot.point}
+ |${
+ t.spot.depth}
+ |${
+ t.net}
+ /${
+ t.netCap}
+ |${
+ t.problem??""}
+ `;
+ e!==this.sig&&(this.sig=e,this.drawBand(i.hour,i.tide,i.text,t),this.drawPlace(s,t)),this.pop.visible&&this.drawPop(),this.drawStrip(t),this.card.visible&&this.cardId&&this.drawCard(this.cardId)}
+ drawBand(t,i,s,e){
+ const n=20,h=this.dial.clear();
+ h.circle(n,n,19.5).fill({
+ color:QIi,alpha:.65}
+ );
+ for(let _=0;
+ _<4;
+ _++){
+ const[t,s]=DGi(_),e=t+.07-Math.PI/2,r=s-.07-Math.PI/2;
+ h.moveTo(n+16*Math.cos(e),n+16*Math.sin(e)).arc(n,n,16,e,r).stroke({
+ color:$Gi[_],width:_===i?4.5:3,alpha:_===i?1:.45,cap:"round"}
+ )}
+ const r=nAi.gear().times;
+ this.dialIcon.texture!==r[i]&&(this.dialIcon.texture=r[i]),this.dialIcon.width=this.dialIcon.height=24,this.dialIcon.position.set(n,n);
+ const o=LGi(t),a=n+13.5*Math.sin(o),c=n-13.5*Math.cos(o);
+ this.needle.clear().moveTo(n,n).lineTo(a,c).stroke({
+ color:16777215,width:1.6,alpha:.9,cap:"round"}
+ ).circle(a,c,2.6).fill(16777215).circle(a,c,2.6).stroke({
+ color:QIi,width:.8}
+ ),this.dial.position.set(0,0),this.dialIcon.x=n,this.needle.position.set(0,0),this.clockText.text=s,this.clockText.position.set(44,(44-this.clockText.height)/2-2);
+ const l=44+this.clockText.width+2;
+ this.clockSeg.position.set(2,2),this.clockSeg.hitArea=new Ui(-2,-2,l+6,44);
+ const u=this.depthGlyph.clear(),d=["S","M","B"].indexOf(e.spot.depth);
+ [3,9,15].forEach((t,i)=>u.roundRect(1,t,18,4.5,2.25).fill(i===d?8048872:3820114)),this.depthArrow.position.set(22,3);
+ const f=22+this.depthArrow.width,p=e.netCap?e.net/e.netCap:0,g=p>=1?XIi:p>=.8?16757611:KIi;
+ this.netIcon.tint=g,this.netText.text=`${
+ e.net}
+ /${
+ e.netCap}
+ `,this.netText.textColor=g,this.netText.position.set(24,1);
+ const w=24+this.netText.width;
+ let m=2+l+9;
+ const v=Qt(t=>this.seps.rect(t,13,1,18).fill({
+ color:3815998}
+ ),"sep");
+ this.seps.clear(),v(m),m+=10,this.depthSeg.position.set(m,11),this.depthSeg.hitArea=new Ui(-9,-11,f+18,44),m+=f+9,v(m),m+=10,this.netSeg.position.set(m,11),this.netSeg.hitArea=new Ui(-9,-11,w+18,44),m+=w+10,this.bandW=m,this.bandBg.clear().roundRect(0,0,m,44,12).fill({
+ color:QIi,alpha:.8}
+ )}
+ drawPlace(t,i){
+ const s=!!i.problem;
+ this.badge.visible=this.badgeText.visible=!s,s||(this.badge.clear().roundRect(0,0,18,18,6).fill(HGi(t)),this.badgeText.text=String(t),this.badgeText.position.set((18-this.badgeText.width)/2,(18-this.badgeText.height)/2)),this.placeText.text=s?i.problem:RSi(i.spot.race,i.spot.zone,i.spot.point),this.placeText.textColor=s?XIi:KIi,oki(this.placeText,250);
+ const e=s?8:24;
+ this.placeText.position.set(e,(18-this.placeText.height)/2),this.placeBg.clear().roundRect(-2,-3,e+this.placeText.width+9,24,8).fill({
+ color:QIi,alpha:.55}
+ )}
+ togglePop(){
+ this.card.visible=!1,this.cardId=0,this.pop.visible=!this.pop.visible,this.pop.visible&&(this.drawPop(),MR.fromTo(this.pop,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ ),jG("light"))}
+ drawPop(){
+ const t=this.last;
+ if(!t)return;
+ const i=NGi(t.now),s=mSi[(i.tide+1)%4],e=QSi(t.spot),n=[`${
+ mSi[i.tide]}
+  ${
+ i.text}
+  · ${
+ s}
+ 까지 ${
+ Mki(i.left)}
+ `,`낚시꾼 ${
+ t.crowd}
+ 명 · 난이도 ${
+ e}
+ ${
+ e<=1?" (초급 자리)":""}
+ `,"물때가 바뀌면 나오는 물고기도 바뀌어요"],h=n.join("|");
+ if(h===this.popSig&&this.pop.children.length)return;
+ this.popSig=h,this.pop.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const r=new ip,o=n.map((t,i)=>rki(t,2===i?zIi:KIi,2===i?11:12,2!==i));
+ let a=9,c=0;
+ for(const l of o)l.position.set(12,a),a+=l.height+4,c=Math.max(c,l.width);
+ r.roundRect(0,0,c+24,a+5,10).fill({
+ color:QIi,alpha:.95}
+ ),this.pop.addChild(r,...o),this.pop.position.set(8,57),this.pop.hitArea=new Ui(0,0,c+24,a+5)}
+ stripCell(t=0){
+ return this.strip.children.filter(t=>"static"===t.eventMode)[t]??null}
+ setStripY(t){
+ this.strip.y=t,this.card.visible&&(this.card.y=t+52)}
+ drawStrip(t){
+ const i=t.wanted.slice(0,5),s=i.map(i=>BGi(kSi(i.id),t.spot,t.now).here),e=RIi.getInstance().state.dex,n=i.map((t,i)=>`${
+ t.id}
+ :${
+ t.who.map(t=>`${
+ t.have}
+ /${
+ t.need}
+ `).join(",")}
+ :${
+ s[i]}
+ :${
+ !!e[t.id]}
+ `).join("|")+`|${
+ t.wanted.length}
+ `;
+ if(n===this.stripSig)return;
+ if(this.stripSig=n,this.strip.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),this.strip.visible=i.length>0,!i.length)return void this.closePops();
+ const h=new ip;
+ this.strip.addChild(h),i.forEach((t,i)=>{
+ const n=kSi(t.id),h=new Ve,r=new lki(38);
+ r.set(t.id,n.star,0,!e[t.id]),h.addChild(r);
+ const o=t.who.find(t=>t.need>0&&t.have<t.need)??t.who.find(t=>t.need>0);
+ if(o){
+ const t=rki(`${
+ Math.min(o.have,o.need)}
+ /${
+ o.need}
+ `,KIi,10),i=(new ip).roundRect(0,0,t.width+8,14,7).fill({
+ color:QIi,alpha:.92}
+ ),s=new Ve;
+ s.addChild(i,t),t.position.set(4,1),s.position.set(38-t.width-6,28),h.addChild(s)}
+ s[i]&&h.addChild((new ip).circle(34,4,5).fill(8378016).circle(34,4,5).stroke({
+ color:QIi,width:1.5}
+ )),h.position.set(6+44*i,6),h.eventMode="static",h.cursor="pointer",h.hitArea=new Ui(-3,-3,44,46),h.on("pointertap",i=>{
+ i.stopPropagation(),this.toggleCard(t.id)}
+ ),this.strip.addChild(h)}
+ );
+ const r=t.wanted.length-i.length;
+ let o=6+44*i.length-6+6;
+ if(r>0){
+ const t=rki(`+${
+ r}
+ `,zIi,12);
+ t.position.set(o,6+(38-t.height)/2),this.strip.addChild(t),o+=t.width+8}
+ h.roundRect(0,0,o,50,12).fill({
+ color:QIi,alpha:.6}
+ ),this.strip.x=10,this.strip.hitArea=new Ui(0,0,o,50)}
+ openCard(t){
+ this.card.visible&&this.cardId===t||this.toggleCard(t)}
+ toggleCard(t){
+ this.pop.visible=!1,this.card.visible&&this.cardId===t?this.closePops():(this.cardId=t,this.card.visible=!0,this.cardSig="",this.drawCard(t),MR.fromTo(this.card,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ ),jG("light"))}
+ drawCard(t){
+ const i=this.last;
+ if(!i)return;
+ const s=i.wanted.find(i=>i.id===t);
+ if(!s)return void this.closePops();
+ const e=kSi(t),n=BGi(e,i.spot,i.now),h=!!RIi.getInstance().state.dex[t],r=`${
+ t}
+ |${
+ n.placeOk}
+ |${
+ n.depthOk}
+ |${
+ n.tideOk}
+ |${
+ Math.ceil(n.tideWait/6e4)}
+ |${
+ s.who.map(t=>t.have).join(",")}
+ |${
+ h}
+ `;
+ if(r===this.cardSig&&this.card.children.length)return;
+ this.cardSig=r,this.card.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const o=new ip,a=[o],c=new lki(44);
+ c.set(t,e.star,0,!h),c.position.set(12,12);
+ const l=rki(`${
+ e.name}
+ `,KIi,15),u=rki("★".repeat(e.star),VIi,12);
+ l.position.set(66,14),oki(l,202),u.position.set(l.x+l.width+6,17);
+ const d=rki(s.who.map(t=>t.need>0?`${
+ t.name}
+  ${
+ Math.min(t.have,t.need)}
+ /${
+ t.need}
+ `:t.name).join(" · "),zIi,11,!1);
+ d.position.set(66,37),oki(d,242),a.push(c,l,u,d);
+ const f=FGi(e,i.spot,i.now,296,()=>{
+ this.cardSig=""}
+ );
+ f.node.position.set(12,66),a.push(f.node);
+ const p=66+f.height+12;
+ o.roundRect(0,0,320,p,12).fill({
+ color:QIi,alpha:.96}
+ ),this.card.addChild(...a),this.card.position.set(10,this.strip.y+52),this.card.hitArea=new Ui(0,0,320,p)}
+ }
+ ;
+ Qt(WGi,"FishingStatusHud");
+ let VGi=WGi;
+ const jGi=68,KGi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"bg",new ip),Zt(this,"lines",[rki("",KIi,15),rki("",zIi,12,!1),rki("",zIi,12,!1),rki("",VIi,12,!1)]),Zt(this,"forId",0),Zt(this,"hideCall",null),this.eventMode="none",this.addChild(this.bg,...this.lines),this.visible=!1}
+ show(t,i,s,e,n,h){
+ var r;
+ this.forId=t;
+ let o=10,a=0;
+ this.lines.forEach((t,e)=>{
+ t.text=i[e]??"",t.textColor=s[e]??zIi,t.visible=!!i[e],t.visible&&(oki(t,300),t.position.set(12,o),o+=t.height+3,a=Math.max(a,t.width))}
+ ),o+=7,a+=24,this.bg.clear().roundRect(0,0,a,o,10).fill({
+ color:QIi,alpha:.96}
+ ),this.position.set(Math.max(0,Math.min(CRi.BLEED_W-a,e-a/2)),h?n-o-6:n+6),this.visible=!0,MR.fromTo(this,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.12}
+ ),null==(r=this.hideCall)||r.kill(),this.hideCall=MR.delayedCall(4,()=>this.hide())}
+ hide(){
+ var t;
+ this.visible=!1,this.forId=0,null==(t=this.hideCall)||t.kill(),this.hideCall=null}
+ }
+ ;
+ Qt(KGi,"FishTip");
+ let zGi=KGi;
+ const YGi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"tabId","fish"),Zt(this,"scrollInShell",!1),Zt(this,"fullBleed",!0),Zt(this,"onOpenMap",null),Zt(this,"scene",new FDi(CRi.BLEED_W,this.H)),Zt(this,"hud",new VGi),Zt(this,"fishBtn",new pki("물고기",76,34,13)),Zt(this,"mapBtn",new pki("해도",64,34,13)),Zt(this,"bite",new Ve),Zt(this,"popLayer",new Ve),Zt(this,"fxCatch",new Ve),Zt(this,"fishPanel",new Ve),Zt(this,"panelBg",new ip),Zt(this,"candTitle",rki("이곳의 물고기",KIi,16)),Zt(this,"candCount",rki("",zIi,13)),Zt(this,"candClose",rki("✕",zIi,20)),Zt(this,"candCards",[]),Zt(this,"candBadges",[]),Zt(this,"candPool",[]),Zt(this,"candMore",rki("",zIi,12,!1)),Zt(this,"tip",new zGi),Zt(this,"settling",!1),Zt(this,"awayRetryAt",0),Zt(this,"netSellBtn",new pki("가득 참",92,26,12)),Zt(this,"netWasFull",!1),Zt(this,"othersAt",-1),Zt(this,"t0",performance.now()),Zt(this,"unsub",[]),Zt(this,"journeyBox",new Ve),Zt(this,"journeySig",""),Zt(this,"hubPanel",new Ve),Zt(this,"hubId",""),Zt(this,"logPanel",new Ve),Zt(this,"plunder"),Zt(this,"boatUi"),Zt(this,"huntUi"),Zt(this,"tradeUi"),Zt(this,"boatMenu"),Zt(this,"trackerTask",null),Zt(this,"progressHoldUntil",0),Zt(this,"lastWanted",[]),Zt(this,"dailyBusy",!1),Zt(this,"greeted",!1),Zt(this,"hubNearNow",!1),Zt(this,"depthOnClose",!1),Zt(this,"hubBusy",new Set),Zt(this,"hubPraise",""),Zt(this,"hubDrawn",""),Zt(this,"abandonArm",""),Zt(this,"logDrawn",""),Zt(this,"biteMark",new Ye(as.EMPTY)),Zt(this,"visitorPanel",new Ve),Zt(this,"visitorKey",""),Zt(this,"visitorSpot",""),Zt(this,"swallowTap",!1),Zt(this,"coach",new Sxi),Zt(this,"sailTipAnchor",Qt(()=>this.scene.idleInSail?t.anchorOf(this.scene.boatSprite,!1)():null,"sailTipAnchor")),Zt(this,"realTutBackend",{
+ biteOpen:Qt(()=>!!RIi.getInstance().biteOpen(),"biteOpen"),hookable:Qt(()=>!!RIi.getInstance().hookable(),"hookable"),hook:Qt(async()=>(await RIi.getInstance().hook()).message,"hook"),recast:Qt(()=>{
+ RIi.getInstance().cast()}
+ ,"recast"),finish:Qt(()=>{
+ RIi.getInstance().markTip("tut")}
+ ,"finish"),biteIn:Qt(()=>RIi.getInstance().biteIn(),"biteIn")}
+ ),Zt(this,"tutBackend",this.realTutBackend),Zt(this,"tutPreviewing",!1),Zt(this,"tutRace","인간"),Zt(this,"tut",new RGi({
+ scene:this.scene,backend:Qt(()=>this.tutBackend,"backend"),race:Qt(()=>this.tutRace,"race"),W:Qt(()=>CRi.BLEED_W,"W"),H:Qt(()=>this.H,"H"),biteGlobal:Qt(()=>t.shown(this.bite)?this.bite.toGlobal({
+ x:0,y:0}
+ ):null,"biteGlobal"),onFinish:Qt(t=>this.endTutorial(t),"onFinish"),lift:Qt(()=>CRi.FOOTER+6,"lift")}
+ )),Zt(this,"quietAfterTut",!1),Zt(this,"onTutorialPreviewEnd",null),Zt(this,"autoTag",new Ve),this.hud.onDepth=()=>{
+ this.cycleDepth()}
+ ,this.hud.onNet=()=>{
+ fxi.getInstance().openView("net"),CRi.getInstance().selectTab("tank")}
+ ,this.netSellBtn.visible=!1,this.netSellBtn.onTap=()=>{
+ fxi.getInstance().openView("net"),CRi.getInstance().selectTab("tank")}
+ ,this.fishBtn.setPrimary(!1),this.mapBtn.setPrimary(!1),this.mapBtn.onTap=()=>{
+ var t;
+ return null==(t=this.onOpenMap)?void 0:t.call(this)}
+ ,this.fishBtn.onTap=()=>this.toggleFishPanel(),this.biteMark.anchor.set(.5,XEi),this.biteMark.scale.set(.2),this.biteMark.position.set(0,25),this.bite.addChild(this.biteMark),this.bite.visible=!1,this.bite.eventMode="static",this.bite.cursor="pointer",this.bite.hitArea=new Ui(-44,-44,88,96),this.bite.on("pointertap",t=>{
+ t.stopPropagation(),this.tryHook()}
+ ),this.scene.onTapBefore=()=>this.hookTap(),this.scene.startInSail=()=>{
+ const t=RIi.getInstance();
+ return!t.tipSeen("sail")||!t.tipSeen("rod")}
+ ,this.autoTag.eventMode="none",this.scene.onStopAtPoint=t=>{
+ var i,s;
+ this.tutPreviewing?null==(s=(i=this.tutBackend).onCast)||s.call(i):this.stopAt(t)}
+ ,this.scene.onVisitorTap=t=>this.openVisitor(t),this.scene.onModeChange=()=>RIi.getInstance().syncSoon(),this.scene.onCast=()=>{
+ var t,i;
+ this.tutPreviewing?null==(i=(t=this.tutBackend).onCast)||i.call(t):RIi.getInstance().cast()}
+ ,this.scene.onHubTap=(t,i)=>this.openHub(t,i),RIi.getInstance().onBigMove=(t,i,s)=>this.playTravel(t,i,s),this.scene.onHubArrive=t=>{
+ this.hubPanel.visible||this.logPanel.visible||this.tut.active||this.openHub(t,!0)}
+ ,this.journeyBox.eventMode="static",this.journeyBox.cursor="pointer",this.journeyBox.on("pointertap",t=>{
+ t.stopPropagation(),this.tapNext()}
+ ),this.journeyBox.position.set(10,84),this.hubPanel.visible=!1,this.hubPanel.eventMode="static",this.logPanel.visible=!1,this.logPanel.eventMode="static",this.visitorPanel.visible=!1,this.visitorPanel.eventMode="static",this.popLayer.eventMode="none",this.buildFishPanel(),this.fxCatch.eventMode="static",this.fxCatch.visible=!1,this.fxCatch.on("pointertap",t=>{
+ var i,s;
+ t.stopPropagation(),null==(s=(i=this.scene).onTapBefore)||s.call(i),WDi.dismiss()}
+ ),this.plunder=new JDi(this.scene,()=>this.H),this.plunder.overlayOpen=()=>!(!vxi.getInstance().parent&&!Jxi.isOpen);
+ const i=this.scene.onOtherTap;
+ this.boatUi=new mGi(this.scene,()=>this.H),this.boatUi.bannerY=()=>this.plunder.bannerBottom,this.boatUi.onPeek=t=>null==i?void 0:i(t,!1),this.huntUi=new IGi(this.scene,()=>this.H),this.huntUi.bannerY=()=>this.boatUi.bannerBottom,this.tradeUi=new hGi(this.scene,()=>this.H),this.tradeUi.bannerY=()=>this.huntUi.bannerBottom,this.tradeUi.onOpen=()=>{
+ this.closeHub(),this.closeVisitor(),this.closeLog(),this.plunder.closePeek(),this.boatUi.closeAll(),this.huntUi.closeAll(),this.boatMenu.close()}
+ ,this.boatMenu=new oGi(this.scene,()=>this.H),this.boatMenu.wantsHelp=t=>this.boatUi.wantsHelp(t),this.boatMenu.onTrade=t=>this.tradeUi.request(t),this.boatMenu.onPeek=t=>null==i?void 0:i(t,!1),this.boatMenu.onHelp=t=>{
+ this.plunder.closePeek(),this.boatUi.openHelp(t)}
+ ,this.scene.onOtherTap=t=>{
+ this.closeHub(),this.closeVisitor(),this.boatUi.closeAll(),this.plunder.closePeek(),this.tradeUi.panelOpen||this.boatMenu.open(t)}
+ ,this.addChild(this.scene,this.boatUi.chip,this.huntUi.chip,this.netSellBtn,this.fishBtn,this.mapBtn,this.bite,this.autoTag,this.journeyBox,this.hud,this.popLayer,this.fishPanel,this.visitorPanel,this.hubPanel,this.logPanel,this.plunder,this.boatUi,this.huntUi,this.tradeUi,this.boatMenu,this.fxCatch,this.coach,this.tut),this.eventMode="static",this.on("pointerdowncapture",t=>{
+ this.coach.dismiss();
+ const i=this.hud.closeIfOutside(t.target);
+ this.swallowTap=!1,(this.hookTap()||i)&&(this.swallowTap=!0,t.stopPropagation())}
+ ),this.on("pointertapcapture",t=>{
+ this.swallowTap&&(this.swallowTap=!1,t.stopPropagation())}
+ )}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ get H(){
+ return CRi.contentHeight}
+ get depthBtn(){
+ return this.hud.depthSeg}
+ get netChip(){
+ return this.hud.netSeg}
+ get hereDef(){
+ const t=RIi.getInstance().state.spot;
+ return"R"===t.zone?XTi[t.race]:null}
+ static questRace(t){
+ var i;
+ const s=RIi.getInstance();
+ return(null==(i=wCi(t.id,s.startRace()))?void 0:i.race)??s.startRace()}
+ get inJourneyMap(){
+ const i=RIi.getInstance().state.spot,s=this.trackedNow();
+ return"R"===i.zone&&(!s||i.race===t.questRace(s.def))}
+ static npc(t){
+ for(const i of Object.values(XTi)){
+ const s=i.npcs.find(i=>i.id===t);
+ if(s)return s}
+ return XTi["인간"].npcs[0]}
+ trackedNow(){
+ const t=RIi.getInstance(),i=t.tracked();
+ return i?t.questHeld().find(t=>t.def.id===i.id)??null:null}
+ hubStates(t){
+ const i=RIi.getInstance(),s=i.questHeld(),e=new Map;
+ for(const n of t.npcs){
+ const h=s.filter(t=>i.questTurnIn(t.def)===n.id);
+ e.set(n.id,h.some(t=>t.ready)?"ready":i.questOffers(t.race,n.id).length?"offer":h.length?"wait":"idle")}
+ return e}
+ offeringNpc(t){
+ const i=RIi.getInstance();
+ return t.npcs.find(s=>i.questOffers(t.race,s.id).length>0)??null}
+ get questFresh(){
+ const t=RIi.getInstance().qlog();
+ return!t.held.length&&!t.done.length}
+ syncJourney(){
+ const i=this.hereDef,s=RIi.getInstance();
+ if(i){
+ const e=this.hubStates(i);
+ this.scene.setHubs(i.npcs.map(t=>({
+ id:t.id,name:t.name,role:t.role,art:t.art,anchor:t.anchor,ship:t.ship,state:this.tut.active?"idle":e.get(t.id)??"idle"}
+ ))),!this.questFresh||i.race!==s.startRace()||this.tut.active||this.tutorialDue()||this.greetFirstHub(i.npcs[0].id);
+ let n=null;
+ const h=this.trackedNow();
+ if(h&&t.questRace(h.def)===i.race){
+ const e=h.def,r=s.questTurnIn(e);
+ (h.ready||"meet"===e.kind)&&i.npcs.some(t=>t.id===r)?n={
+ points:[],hub:r,label:t.npc(r).name}
+ :"fish"===e.kind?n={
+ points:kSi(e.fish).pts,hub:null,label:kSi(e.fish).name}
+ :"any"!==e.kind&&"area"!==e.kind||void 0===e.point||(n={
+ points:[e.point],hub:null,label:RSi(i.race,"R",e.point)}
+ )}
+ else if(!h){
+ const t=this.offeringNpc(i);
+ t&&(n={
+ points:[],hub:t.id,label:t.name}
+ )}
+ this.scene.setGoal(this.tut.active?null:n)}
+ else this.scene.setHubs([]),this.scene.setGoal(null);
+ this.renderTracker(),this.logPanel.visible&&this.renderLog()}
+ taskInput(){
+ const i=RIi.getInstance(),s=i.state,e=s.boat,n=this.trackedNow(),h=i.questHeld(),r=i.realNow(),o=BOi(s.spot,r,s.huntDevAt),a=h.find(t=>t.ready&&"meet"!==t.def.kind),c=this.hereDef?this.offeringNpc(this.hereDef):null;
+ return{
+ boatBroken:!!(null==e?void 0:e.broken)&&!e.repairAt,netFull:i.netFull(),contestReady:i.contestReady(),daily:i.daily(),journeyReady:a?{
+ npc:t.npc(i.questTurnIn(a.def)).name}
+ :null,goalsReady:i.goalsReady(),monster:o?{
+ name:o.name,inMs:o.at-r}
+ :null,journeyNext:n?{
+ title:`퀘스트 · ${
+ n.def.title}
+ `,line:OCi(n.def,n.got).text}
+ :c?{
+ title:"퀘스트",line:`${
+ c.name}
+ 에게 퀘스트 받기`}
+ :null,journeyHere:this.inJourneyMap,areaReady:(()=>{
+ const t=i.areaReady();
+ return t?{
+ name:t.name,pearl:t.pearl}
+ :null}
+ )(),areaNext:(()=>{
+ const t=i.areaNext();
+ return t?{
+ name:t.name,have:t.have,need:t.need}
+ :null}
+ )(),dailyOff:!0}
+ }
+ get progressHeld(){
+ return performance.now()<this.progressHoldUntil}
+ renderTracker(){
+ this.progressHeld&&this.journeySig||(this.drawTracker(),this.hud.setStripY(this.journeyBox.y+this.journeyBox.height+6))}
+ drawTracker(){
+ const i=RIi.getInstance(),s=this.journeyBox,e=bIi(this.taskInput()),n=this.trackedNow(),h=i.qlog().held.length,r=this.hereDef?this.offeringNpc(this.hereDef):null,o=("journey"===e.kind||"journeyReady"===e.kind)&&this.inJourneyMap&&(!!n||!!r),a=o?`q|${
+ null==n?void 0:n.def.id}
+ |${
+ null==n?void 0:n.got}
+ |${
+ null==n?void 0:n.ready}
+ |${
+ h}
+ |${
+ null==r?void 0:r.id}
+ `:`t|${
+ e.kind}
+ |${
+ e.title}
+ |${
+ e.sub}
+ `;
+ if(this.trackerTask=e,s.visible=!0,a===this.journeySig)return;
+ this.journeySig=a,s.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const c=new ip;
+ if(o){
+ const e=nAi.gear().journeyFaces,o=null==n?void 0:n.def,a="meet"===(null==o?void 0:o.kind),l=!!(null==n?void 0:n.ready)&&!a,u=t.npc(o?l||a||o.teach?i.questTurnIn(o):o.npc:r.id),d=wki(e[u.art]??e[0],28);
+ d.position.set(3,3);
+ const f=rki(o?l?`✓ ${
+ u.name}
+ 에게 가서 마치기`:t.questLine(o,n.got):`${
+ u.name}
+ 에게 퀘스트 받기`,l?qIi:KIi,13);
+ f.setWrapWidth(214);
+ const p=Math.max(34,f.height+12);
+ f.position.set(38,(p-f.height)/2);
+ const g=rki("›",zIi,16);
+ g.position.set(38+f.width+6,(p-g.height)/2-1);
+ const w=g.x+g.width+10;
+ if(c.roundRect(0,0,w,p,Math.min(17,p/2)).fill({
+ color:l?1194534:QIi,alpha:.85}
+ ),d.y=(p-28)/2,s.addChild(c,d,f,g),h){
+ const t=new Ve,e=rki(`${
+ h}
+ `,1776411,10);
+ t.addChild((new ip).circle(0,0,8).fill(h>=i.questHoldMax()?XIi:VIi),e),e.position.set(-e.width/2,-e.height/2),t.position.set(d.x+27,d.y+3),s.addChild(t)}
+ if(n&&!n.ready&&n.need>1){
+ const t=(new ip).roundRect(10,p-3,Math.max(0,(w-20)*Math.min(1,n.got/n.need)),3,1.5).fill(VIi);
+ s.addChild(t)}
+ s.hitArea=new Ui(0,0,w,p)}
+ else{
+ const t="repair"===e.kind||"net"===e.kind,i="claim"===e.kind||"contest"===e.kind||"goal"===e.kind||"journeyReady"===e.kind,n=rki(e.title,t?XIi:i?qIi:VIi,12);
+ n.position.set(12,5);
+ const h=rki(e.sub,KIi,13);
+ h.position.set(12,22),oki(n,260),oki(h,260);
+ const r=rki("›",zIi,16),o=Math.max(n.width,h.width)+12+22;
+ r.position.set(o-18,(42-r.height)/2-1),c.roundRect(0,0,o,42,14).fill({
+ color:i?1194534:t?3806994:QIi,alpha:.85}
+ ),s.hitArea=new Ui(0,0,o,42),s.addChild(c,n,h,r)}
+ this.hubPanel.visible&&this.renderHub()}
+ tapNext(){
+ const t=this.trackerTask,i=CRi.getInstance();
+ if(t)switch(t.go){
+ case"repair":return void this.boatUi.openPanel();
+ case"net":return fxi.getInstance().openView("net"),void i.selectTab("tank");
+ case"hunt":return void this.huntUi.openRecords();
+ case"claim":return void this.claimDailyHere();
+ case"fish":return void vH.getInstance().showMessage("입질이 오면 직접 눌러 낚아요");
+ case"journey":return void(RIi.getInstance().qlog().held.length?this.openLog():this.inJourneyMap?this.tapTracker():this.goJourney());
+ default:ei(()=>Promise.resolve().then(()=>xUi),void 0).then(s=>{
+ s.FishingQuestPage.getInstance().openView(t.go),i.selectTab("quest")}
+ )}
+ }
+ async goJourney(){
+ const t=RIi.getInstance(),i=t.startRace(),s=XTi[i],e=this.offeringNpc(s)??s.npcs[0],n=await t.goTo({
+ race:i,zone:"R",point:e.anchor,depth:t.state.spot.depth}
+ );
+ !n&&YRi.active||vH.getInstance().showMessage(n??`${
+ s.river}
+ 으로 왔어요 · ${
+ e.name}
+ 에게 가 보세요`)}
+ goTurnIn(i){
+ const s=RIi.getInstance(),e=s.questTurnIn(i),n=t.npc(e);
+ if(this.closeLog(),this.scene.hubNear(e))return void this.openHub(e,!0);
+ if(this.scene.sailToHub(e))return void vH.getInstance().showMessage(`${
+ n.name}
+ 에게 가요`);
+ const h=Object.values(XTi).find(t=>t.npcs.some(t=>t.id===e));
+ h&&s.goTo({
+ race:h.race,zone:"R",point:n.anchor,depth:s.state.spot.depth}
+ ).then(t=>{
+ !t&&YRi.active||vH.getInstance().showMessage(t??`${
+ h.river}
+ 으로 왔어요 · ${
+ n.name}
+ 에게 가 보세요`)}
+ )}
+ static questLine(t,i){
+ const s=OCi(t,i);
+ return CCi.includes(t.kind)?`${
+ s.hint}
+  ${
+ s.text}
+ `:s.text}
+ async goQuestPlace(i){
+ const s=CRi.getInstance(),e=Qt(async(t,i,e)=>{
+ await s.selectTab(t);
+ const n=i();
+ n&&(s.scrollToShow(n),s.point(n,e))}
+ ,"go");
+ switch(i.kind){
+ case"gear":{
+ const{
+ FishingGearPage:t}
+ =await ei(async()=>{
+ const{
+ FishingGearPage:t}
+ =await Promise.resolve().then(()=>lUi);
+ return{
+ FishingGearPage:t}
+ }
+ ,void 0),s=WSi.find(t=>t.key===i.gear);
+ return void(await e("gear",()=>t.getInstance().focusTool(i.gear),`여기서 ${
+ gki(s.title,"을","를")}
+  올려요`))}
+ case"sell":return fxi.getInstance().openView("net"),void(await e("tank",()=>fxi.getInstance().sellButton,"여기서 물고기를 팔아요"));
+ case"contest":case"area":{
+ const{
+ FishingQuestPage:t}
+ =await ei(async()=>{
+ const{
+ FishingQuestPage:t}
+ =await Promise.resolve().then(()=>xUi);
+ return{
+ FishingQuestPage:t}
+ }
+ ,void 0);
+ return t.getInstance().openView(i.kind),void(await s.selectTab("quest"))}
+ case"harpoon":return void(t.shown(this.huntUi.throwBtn)?s.point(this.huntUi.throwBtn,"물고기로 작살을 만들어요"):this.huntUi.openCraft())}
+ }
+ playTravel(t,i,s){
+ if(!CRi.getInstance().parent||this.tut.active)return;
+ const e=`${
+ i.race}
+ |${
+ i.zone}
+ `;
+ YRi.play({
+ from:t,to:i,boatLv:RIi.getInstance().state.gear.boat,wait:s,mapReady:Qt(()=>this.scene.mapReadyFor(e),"mapReady"),onGlide:Qt(t=>this.scene.glideIn(t),"onGlide")}
+ )}
+ async claimDailyHere(){
+ if(!this.dailyBusy){
+ this.dailyBusy=!0;
+ try{
+ const t=await RIi.getInstance().claimDaily();
+ if(t)return void vH.getInstance().showMessage(t);
+ jG("success"),vH.getInstance().showMessage("오늘 할 일 끝! 진주 200개를 받았어요"),CRi.getInstance().flyCurrency("pearl",this.journeyBox.toGlobal({
+ x:60,y:23}
+ ),8)}
+ finally{
+ this.dailyBusy=!1,this.renderTracker()}
+ }
+ }
+ greetFirstHub(t){
+ this.greeted||this.hubPanel.visible||!this.scene.hubPos(t)||vxi.getInstance().parent||Jxi.isOpen||!RIi.getInstance().look&&!Jxi.skipped||(this.greeted=!0,this.openHub(t,this.scene.hubNear(t)))}
+ devGiant(){
+ this.scene.devGiant()}
+ tapTracker(){
+ const t=this.hereDef,i=t?this.offeringNpc(t):null;
+ i&&this.openHub(i.id,this.scene.hubNear(i.id))}
+ async matchQuestDepth(t){
+ const i=RIi.getInstance(),s="fish"===t.kind?UGi({
+ kind:"fish",id:t.fish}
+ ,i.state.spot):null;
+ if(!s)return;
+ const e=await i.setDepth(s);
+ vH.getInstance().showMessage(e??`${
+ gSi[s]}
+ 에 사는 물고기예요 · 깊이를 ${
+ gSi[s]}
+ 으로 맞췄어요`),this.render()}
+ openHub(t,i){
+ this.plunder.closePeek(),this.closeLog(),this.hubId=t,this.hubNearNow=i,this.closeVisitor(),this.renderHub(!0),this.hubPanel.visible=!0,MR.fromTo(this.hubPanel,{
+ alpha:0,y:12}
+ ,{
+ alpha:1,y:0,duration:.18}
+ )}
+ closeHub(){
+ this.hubPraise="",this.hubId="",this.quietAfterTut=!1,this.hubPanel.visible=!1;
+ const t=this.depthOnClose?RIi.getInstance().tracked():null;
+ this.depthOnClose=!1,"fish"===(null==t?void 0:t.kind)&&this.matchQuestDepth(t)}
+ static questIcon(t,i){
+ if("fish"===t.kind){
+ const s=kSi(t.fish),e=new lki(i);
+ return e.set(s.id,s.star,0,!RIi.getInstance().state.dex[s.id]),e}
+ const s="sell"===t.kind?"keepnet":"harpoon"===t.kind?"toolbox":"hunt"===t.kind?"pin":"contest"===t.kind?"trophy":"area"===t.kind?"map":"meet"===t.kind?"people":"any"===t.kind?"hook":"boat"===t.gear?"boat":"line"===t.gear?"spool":"rod"===t.gear?"rod":"reel"===t.gear?"reel":"bobber"===t.gear?"bobber":"auto"===t.gear?"autorod":"keepnet",e=new Ve;
+ return e.addChild((new ip).roundRect(0,0,i,i,9).fill(BIi),yki(s,.62*i,16777215)),e.children[1].position.set(.19*i,.19*i),e}
+ static rewardRow(t){
+ const i=new Ve;
+ let s=0;
+ if(t.gold){
+ const e=_ki("gold",15),n=rki(t.gold.toLocaleString(),VIi,12);
+ n.position.set(19,-1),e.x=s,n.x+=s,i.addChild(e,n),s=n.x+n.width+10}
+ if(t.pearl){
+ const e=_ki("pearl",15),n=rki(`${
+ t.pearl}
+ `,JIi,12);
+ e.x=s,n.position.set(s+19,-1),i.addChild(e,n)}
+ return i}
+ renderHub(i=!1){
+ var s,e;
+ const n=RIi.getInstance(),h=this.hubPanel;
+ if(!this.hubId)return h.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),void this.closeHub();
+ const r=Object.values(XTi).find(t=>t.npcs.some(t=>t.id===this.hubId))??this.hereDef??XTi[n.startRace()],o=t.npc(this.hubId),a=(null==(s=this.hereDef)?void 0:s.race)===r.race,c=a&&(this.hubNearNow||this.scene.hubNear(o.id)),l=n.questHeld().filter(t=>n.questTurnIn(t.def)===o.id),u=n.questOffers(r.race,o.id),d=n.questHoldMax(),f=n.qlog().held.length>=d,p=null==(e=pCi(r.race,0,n.startRace())[0])?void 0:e.id,g=CRi.BLEED_W,w=g-20,m=10,v=138,_=[...l.filter(t=>t.ready),...l.filter(t=>!t.ready)].length+u.length,M=[r.race,o.id,c,l.map(t=>`${
+ t.def.id}
+ :${
+ t.got}
+ :${
+ t.ready}
+ `).join(","),u.map(t=>t.id).join(","),f,[...this.hubBusy].join(","),g,this.H].join("|");
+ if(!i&&M===this.hubDrawn&&h.children.length)return;
+ this.hubDrawn=M,h.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const b=104,y=b+58*_+58,E=this.H-y-8,A=aki(w,y,QIi,null,14);
+ A.alpha=.96,A.position.set(m,E);
+ const S=nAi.gear(),T=new Ye(S.journeyNpcs[o.art]??S.journeyNpcs[0]);
+ T.width=T.height=132,T.position.set(6,E+b-128);
+ const C=rki(o.name,VIi,18),O=rki(o.role,zIi,13);
+ C.position.set(v,E+14),O.position.set(C.x+C.width+8,E+18);
+ const I=[A,T,C,O],k=l.find(t=>t.ready),R=!!k&&"meet"===k.def.kind&&!c,x=r.npcs.findIndex(t=>t.id===o.id),P=pCi(r.race,x,n.startRace()).every(t=>n.qlog().done.includes(t.id)),N=R?`${
+ o.role}
+  · 배를 몰고 가서 말을 걸어요`:this.hubPraise?this.hubPraise:k?k.def.done:u.length?u[0].line:l.length?"맡긴 일 잘 부탁해요!":P?`고마웠어요! ${
+ r.river}
+ 에 오면 또 들러 줘요.`:"어서 와요. 지금은 딱히 부탁할 게 없네요.",L=rki(R?N:`"${
+ N}
+ "`,R?zIi:KIi,13,!1);
+ if(L.setWrapWidth(m+w-14-v),L.position.set(v,E+42),oki(L,2.2*(m+w-14-v)),I.push(L),_){
+ const t=n.qlog().held.length,i=new Ve,s=(new ip).circle(9,9,9).fill(VIi),e=rki("!",1776411,12,!1),h=rki(`퀘스트 ${
+ t}
+ /${
+ d}
+ `,t>=d?XIi:VIi,13);
+ e.position.set(9-e.width/2,9-e.height/2),h.position.set(24,9-h.height/2),i.addChild(s,e,h),i.position.set(m+w-16-i.width,E+b-24),I.push(i)}
+ let D=E+b;
+ const G=Qt((i,s,e,n,h)=>{
+ const r=(new ip).roundRect(20,D,w-20,52,10).fill(h?1194534:GIi),o=t.questIcon(i,40);
+ o.position.set(28,D+6);
+ const a=rki(i.title,KIi,14);
+ a.position.set(76,D+7);
+ const c=rki(s,e,12,!1);
+ c.position.set(76,D+28);
+ const l=t.rewardRow(i);
+ l.position.set(76+a.width+10,D+9);
+ const u=w-20-66-(n?104:12);
+ oki(a,u-60),oki(c,u),I.push(r,o,a,c,l),n&&(n.position.set(m+w-10-96,D+6),I.push(n)),D+=58}
+ ,"addRow");
+ for(const t of l.filter(t=>t.ready)){
+ const i=new pki("마치기",88,40,14);
+ i.enabled=c&&!this.hubBusy.has(t.def.id),i.onTap=async()=>{
+ if(this.hubBusy.has(t.def.id))return;
+ const s=i.toGlobal({
+ x:44,y:20}
+ ),e=n.questHoldMax();
+ this.hubBusy.add(t.def.id),i.enabled=!1;
+ const h=await n.questComplete(t.def.id).finally(()=>this.hubBusy.delete(t.def.id));
+ if(h.message)return vH.getInstance().showMessage(h.message),void this.renderHub(!0);
+ jG("success");
+ const r=CRi.getInstance();
+ h.gold&&r.flyCurrency("gold",s,6),h.pearl&&r.flyCurrency("pearl",s,4);
+ const o=n.questHoldMax();
+ o>e?(this.hubPraise=`잘하고 있어요! 이제 퀘스트를 한 번에 ${
+ o}
+ 개까지 받을 수 있어요.`,vH.getInstance().showMessage(`퀘스트를 한 번에 ${
+ o}
+ 개까지 받을 수 있어요`),qG.getInstance().playSFX(qG.SFX_POPUP)):vH.getInstance().showMessage(`"${
+ t.def.done}
+ "`),this.syncJourney(),this.renderHub(!0)}
+ ,G(t.def,"meet"===t.def.kind?"✓ 인사하러 왔어요":"✓ 다 했어요",qIi,i,!0)}
+ for(const $ of l.filter(t=>!t.ready))G($.def,t.questLine($.def,$.got),zIi,null,!1);
+ for(const t of u){
+ const i=new pki("받기",88,40,14),s=t.id===p;
+ i.enabled=!f&&(c||s)&&!this.hubBusy.has(t.id),i.onTap=async()=>{
+ if(this.hubBusy.has(t.id))return;
+ this.hubBusy.add(t.id),i.enabled=!1;
+ const e=await n.questAccept(t.id,r.race,o.id).finally(()=>this.hubBusy.delete(t.id));
+ if(e)return vH.getInstance().showMessage(e),void this.renderHub(!0);
+ jG("light"),this.syncJourney(),"fish"===t.kind&&(this.depthOnClose=!0),s||"meet"===t.kind?this.closeHub():this.renderHub(!0)}
+ ,G(t,OCi(t,0).ask,zIi,i,!1)}
+ const B=E+y-58+8,U=new pki("닫기",96,40,14);
+ U.setPrimary(!1),U.onTap=()=>this.closeHub(),U.position.set(m+w-16-96,B),I.push(U);
+ const F=rki(f&&u.length?`퀘스트는 지금 ${
+ d}
+ 개까지 들 수 있어요 · 마칠수록 늘어요`:!c&&_?"가까이 가야 받고 마칠 수 있어요":"",zIi,12);
+ if(F.position.set(28,B+12),I.push(F),!c&&_){
+ const t=new pki("여기로 가기",120,40,14);
+ t.position.set(U.x-8-120,B),t.onTap=()=>{
+ a?this.scene.sailToHub(o.id)&&this.closeHub():(this.closeHub(),n.goTo({
+ race:r.race,zone:"R",point:o.anchor,depth:n.state.spot.depth}
+ ).then(t=>{
+ !t&&YRi.active||vH.getInstance().showMessage(t??`${
+ r.river}
+ 으로 왔어요 · ${
+ o.name}
+ 에게 가 보세요`)}
+ ))}
+ ,I.push(t),oki(F,t.x-F.x-10)}
+ h.hitArea=new Ui(0,0,g,this.H),h.removeAllListeners("pointertap"),h.on("pointertap",t=>{
+ t.stopPropagation(),h.toLocal(t.global).y<E&&this.closeHub()}
+ ),h.addChild(...I)}
+ openLog(){
+ this.closeHub(),this.closeVisitor(),this.abandonArm="",this.renderLog(!0),this.logPanel.visible=!0,MR.fromTo(this.logPanel,{
+ alpha:0,y:12}
+ ,{
+ alpha:1,y:0,duration:.18}
+ )}
+ closeLog(){
+ this.logPanel.visible=!1,this.abandonArm=""}
+ renderLog(i=!1){
+ var s;
+ const e=RIi.getInstance(),n=this.logPanel,h=e.questHeld(),r=null==(s=e.tracked())?void 0:s.id,o=CRi.BLEED_W,a=o-20,c=[h.map(t=>`${
+ t.def.id}
+ :${
+ t.got}
+ :${
+ t.ready}
+ `).join(","),r,this.abandonArm,o,this.H].join("|");
+ if(!i&&c===this.logDrawn&&n.children.length)return;
+ this.logDrawn=c,n.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const l=50+64*Math.max(1,h.length)+58,u=this.H-l-8,d=aki(a,l,QIi,null,14);
+ d.alpha=.96,d.position.set(10,u);
+ const f=rki(`퀘스트 ${
+ h.length}
+ /${
+ e.questHoldMax()}
+ `,VIi,17);
+ f.position.set(26,u+14);
+ const p=[d,f];
+ if(!h.length){
+ const t=rki("들고 있는 퀘스트가 없어요. NPC 에게 말을 걸어 받아요.",zIi,13);
+ t.position.set(26,u+50+18),p.push(t)}
+ const g=nAi.gear().journeyFaces;
+ h.forEach((i,s)=>{
+ const n=u+50+64*s,h=i.def.id===r,o=new Ve,c=(new ip).roundRect(0,0,a-20,58,10).fill(i.ready?1194534:h?UIi:GIi);
+ o.addChild(c);
+ const l=t.npc(e.questTurnIn(i.def)),d=wki(g[l.art]??g[0],34);
+ d.position.set(10,12);
+ const f=rki(i.def.title,KIi,14);
+ f.position.set(54,8);
+ const w=rki(i.ready?`✓ ${
+ l.name}
+ 에게 가서 마치기`:t.questLine(i.def,i.got),i.ready?qIi:zIi,12,!1);
+ w.position.set(54,31),oki(f,a-20-54-110),oki(w,a-20-54-110),o.addChild(d,f,w),i.need>1&&!i.ready&&o.addChild((new ip).roundRect(54,52,Math.max(0,(a-20-54-110)*(i.got/i.need)),3,1.5).fill(VIi));
+ const m=i.ready||"meet"===i.def.kind,v=new pki(m?"이동":this.abandonArm===i.def.id?"정말 포기?":"포기",92,36,12);
+ v.setPrimary(m),v.position.set(a-20-100,11),v.onTap=async()=>{
+ if(m)return void this.goTurnIn(i.def);
+ if(this.abandonArm!==i.def.id)return this.abandonArm=i.def.id,void this.renderLog();
+ v.enabled=!1;
+ const t=await e.questAbandon(i.def.id);
+ if(this.abandonArm="",t)return vH.getInstance().showMessage(t),void this.renderLog();
+ vH.getInstance().showMessage(`"${
+ i.def.title}
+ " 퀘스트를 포기했어요 · ${
+ l.name}
+ 에게 다시 받을 수 있어요`),this.syncJourney(),this.renderLog()}
+ ,o.addChild(v),o.position.set(20,n),c.eventMode="static",c.cursor="pointer",c.on("pointertap",t=>{
+ if(t.stopPropagation(),e.track(i.def.id),this.abandonArm="",this.journeySig="",this.syncJourney(),"fish"===i.def.kind&&!i.ready)return this.closeLog(),this.render(),this.hud.openCard(i.def.fish),void this.matchQuestDepth(i.def);
+ if(i.ready||"meet"===i.def.kind){
+ this.closeLog();
+ const t=e.questTurnIn(i.def);
+ return void this.openHub(t,this.scene.hubNear(t))}
+ if(CCi.includes(i.def.kind))return this.closeLog(),void this.goQuestPlace(i.def);
+ this.renderLog()}
+ ),p.push(o)}
+ );
+ const w=new pki("닫기",96,40,14);
+ w.setPrimary(!1),w.position.set(10+a-16-96,u+l-58+8),w.onTap=()=>this.closeLog();
+ const m=rki("누르면 그 퀘스트 하는 곳으로 가요",zIi,12);
+ m.position.set(26,w.y+12),p.push(w,m),n.hitArea=new Ui(0,0,o,this.H),n.removeAllListeners("pointertap"),n.on("pointertap",t=>{
+ t.stopPropagation(),n.toLocal(t.global).y<u&&this.closeLog()}
+ ),n.addChild(...p)}
+ syncVisitors(){
+ const t=RIi.getInstance(),i=t.quests();
+ this.hereDef?this.scene.setVisitors([]):this.scene.setVisitors(i.reqs.map(s=>({
+ key:s.key,npc:s.npc,role:s.role,state:i.done.includes(s.key)?"done":t.questHave(s)>=s.count?"ready":"open"}
+ )))}
+ openVisitor(t){
+ this.plunder.closePeek(),this.visitorKey=t,this.renderVisitor(),this.visitorPanel.visible=!0,MR.fromTo(this.visitorPanel,{
+ alpha:0,y:12}
+ ,{
+ alpha:1,y:0,duration:.18}
+ )}
+ closeVisitor(){
+ this.visitorKey="",this.visitorPanel.visible=!1}
+ renderVisitor(){
+ const t=RIi.getInstance(),i=t.quests(),s=i.reqs.find(t=>t.key===this.visitorKey),e=this.visitorPanel;
+ if(e.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),!s)return void this.closeVisitor();
+ const n=i.done.includes(s.key),h=t.questHave(s),r=!n&&h>=s.count,o=CRi.BLEED_W,a=o-20,c=196,l=this.H-c-8,u=160,d=aki(a,c,QIi,null,14);
+ d.alpha=.94,d.position.set(10,l);
+ const f=new Ye(nAi.gear().guests[["m","b","e"].indexOf(s.key.slice(-1))]??nAi.gear().guests[0]);
+ f.width=f.height=164,f.position.set(4,l+c-170);
+ const p=rki(`${
+ s.npc}
+ `,VIi,18),g=rki(s.role,zIi,13);
+ p.position.set(u,l+14),g.position.set(p.x+p.width+8,l+18);
+ const w=rki(s.line,KIi,14,!1);
+ w.position.set(u,l+42),oki(w,10+a-14-u);
+ const m=kSi(s.speciesId),v=!!t.state.dex[s.speciesId],_=new lki(56);
+ _.set(s.speciesId,m.star,s.minGrade,!v),_.position.set(u,l+70);
+ const M=rki(`${
+ v||s.line.includes(m.name)?m.name:"???"}
+ ${
+ s.minGrade?` (${
+ dTi(s.minGrade)}
+  이상)`:""}
+ `,KIi,15);
+ M.position.set(226,l+74),oki(M,10+a-14-226);
+ const b=rki(`가진 수 ${
+ Math.min(h,s.count)}
+  / ${
+ s.count}
+ `,r?qIi:zIi,13);
+ b.position.set(226,l+98);
+ const y=new Ve,E=_ki("gold",16),A=rki(s.gold.toLocaleString(),VIi,13);
+ if(A.position.set(20,-1),y.addChild(E,A),s.pearl){
+ const t=_ki("pearl",16),i=rki(`${
+ s.pearl}
+ `,JIi,13);
+ t.x=A.x+A.width+12,i.position.set(t.x+20,-1),y.addChild(t,i)}
+ y.position.set(226,l+118);
+ const S=new pki("닫기",96,40,14);
+ S.setPrimary(!1),S.position.set(10+a-16-96-8-120,l+c-54),S.onTap=()=>this.closeVisitor();
+ const T=new pki(n?"납품 완료":r?"납품하기":"물고기 부족",120,40,14);
+ T.enabled=r,T.position.set(10+a-16-120,l+c-54),T.onTap=async()=>{
+ const i=await t.deliver(s);
+ if(i)return void vH.getInstance().showMessage(i);
+ vH.getInstance().showMessage(`${
+ s.npc}
+ : "고마워요!"`),jG("success");
+ const e=CRi.getInstance();
+ e.flyCurrency("gold",T.toGlobal({
+ x:60,y:20}
+ ),7),s.pearl&&e.flyCurrency("pearl",T.toGlobal({
+ x:60,y:20}
+ ),4),this.syncVisitors(),this.renderVisitor()}
+ ,e.hitArea=new Ui(0,0,o,this.H),e.removeAllListeners("pointertap"),e.on("pointertap",t=>{
+ t.stopPropagation(),e.toLocal(t.global).y<l&&this.closeVisitor()}
+ ),e.addChild(d,f,p,g,w,_,M,b,y,S,T)}
+ buildFishPanel(){
+ const t=this.fishPanel;
+ t.visible=!1,t.eventMode="static",t.on("pointertap",t=>{
+ t.stopPropagation(),this.tip.hide()}
+ ),this.candTitle.position.set(16,16),this.candCount.y=19,this.candClose.eventMode="static",this.candClose.cursor="pointer",this.candClose.hitArea=new Ui(-10,-10,44,44),this.candClose.on("pointertap",t=>{
+ t.stopPropagation(),this.toggleFishPanel()}
+ ),t.addChild(this.panelBg,this.candTitle,this.candCount,this.candClose,this.candMore,this.tip)}
+ toggleFishPanel(){
+ this.fishPanel.visible=!this.fishPanel.visible,this.tip.hide(),this.fishPanel.visible&&(this.render(),MR.fromTo(this.fishPanel,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.15}
+ ))}
+ onResize(){
+ this.layout()}
+ backLabel(){
+ return this.scene.bigMapOpen?"낚시":null}
+ closeOne(){
+ return!(!this.tradeUi.closeOne()&&(this.scene.bigMapOpen?(this.scene.closeBigMap(),0):this.boatMenu.isOpen?(this.boatMenu.close(),0):this.hud.cardOpen?(this.hud.closePops(),0):this.logPanel.visible?(this.closeLog(),0):this.hubPanel.visible?(this.closeHub(),0):this.visitorPanel.visible?(this.closeVisitor(),0):this.fishPanel.visible?(this.toggleFishPanel(),0):this.plunder.panelOpen?(this.plunder.onHide(),0):this.boatUi.panelOpen?(this.boatUi.closeAll(),0):!this.huntUi.panelOpen||(this.huntUi.closeAll(),0)))}
+ layout(){
+ const t=CRi.BLEED_W,i=this.H;
+ this.scene.resize(t,i),this.mapBtn.position.set(t-64-10,10),this.fishBtn.position.set(t-64-10-76-6,10),this.fishPanel.hitArea=new Ui(0,0,t,i),this.fxCatch.hitArea=new Ui(0,0,t,i),this.candClose.position.set(t-34,12),this.hubPanel.visible&&this.renderHub(!0),this.logPanel.visible&&this.renderLog(),this.visitorPanel.visible&&this.renderVisitor(),this.plunder.layout(),this.tradeUi.layout(),this.boatUi.layout(),this.huntUi.layout(),this.tut.active&&this.tut.layout()}
+ canImmerse(){
+ const t=RIi.getInstance().plunder;
+ return!this.tut.active&&!this.hud.cardOpen&&this.scene.fishing&&!this.fishPanel.visible&&!this.hubPanel.visible&&!this.logPanel.visible&&!this.visitorPanel.visible&&!this.plunder.panelOpen&&!(null==t?void 0:t.raid)&&!(null==t?void 0:t.raidBy)&&!this.scene.bigMapOpen&&!this.boatUi.panelOpen&&!RIi.getInstance().boatHp().fixing&&!this.huntUi.panelOpen&&!this.huntUi.active&&!this.tradeUi.panelOpen&&!this.boatMenu.isOpen&&!RIi.getInstance().tradeLive}
+ setImmersion(t){
+ const i=UCi(t,CRi.getInstance().inTutorial);
+ for(const s of[this.hud,this.boatUi.chip,this.huntUi.chip,this.netSellBtn,this.journeyBox])s.alpha=i.info;
+ for(const s of[this.fishBtn,this.mapBtn])s.alpha=i.menu;
+ this.scene.setHudAlpha(i.menu)}
+ immersiveTap(){
+ var t,i;
+ return(null==(i=(t=this.scene).onTapBefore)?void 0:i.call(t))??!1}
+ onShow(){
+ const t=RIi.getInstance();
+ this.layout(),t.active=!0,t.posProvider=()=>{
+ const t=this.scene.boatPos;
+ return t&&this.tutPreviewing?{
+ ...t,s:!0}
+ :t}
+ ,CRi.getInstance().botSpots=()=>this.scene.sampleWater(200),CRi.getInstance().plunderSpots=t=>this.scene.waterAround(t),this.unsub.push(t.onCatch((t,i)=>this.pop(t,i))),this.render(),this.scene.start(),t.look||Jxi.skipped?this.intro():Jxi.isOpen||Jxi.getInstance().open(!0,()=>this.intro())}
+ intro(){
+ CRi.getInstance().activePage===this&&this.settleIfAny()}
+ async settleIfAny(){
+ const t=RIi.getInstance(),i=vxi.getInstance();
+ if(!(this.settling||!t.state.away&&!t.state.migratedSold||i.parent||Jxi.isOpen||Date.now()<this.awayRetryAt)){
+ this.settling=!0;
+ try{
+ const s=await t.awayReport();
+ s?i.open(s):(t.state.away||t.state.migratedSold)&&(this.awayRetryAt=Date.now()+3e4)}
+ finally{
+ this.settling=!1}
+ }
+ }
+ drawNetFull(){
+ const t=RIi.getInstance().netFull();
+ this.netSellBtn.visible=t,t&&!this.netWasFull&&vH.getInstance().showMessage("어망이 가득 찼어요. 어망을 비워야 다시 잡혀요"),this.netWasFull=t}
+ wantedList(){
+ const i=RIi.getInstance(),s=[];
+ if(this.tut.active)return[];
+ for(const o of i.questHeld())"fish"===o.def.kind&&o.got<o.need&&s.push({
+ id:o.def.fish,name:t.npc(i.questTurnIn(o.def)).name,have:o.got,need:o.need}
+ );
+ const e=i.state.contest,n=i.contestStanding(),h=e?yTi(e.day):null;
+ (null==h?void 0:h.speciesId)&&n&&!n.ended&&s.push({
+ id:h.speciesId,name:`대회 · ${
+ h.title}
+ `,have:0,need:0}
+ );
+ const r=i.quests();
+ for(const t of r.reqs)r.done.includes(t.key)||s.push({
+ id:t.speciesId,name:t.npc,have:i.questHave(t),need:t.count}
+ );
+ return GGi(s)}
+ async stopAt(t){
+ const i=RIi.getInstance(),s=i.state.spot,e=await i.moveTo(s.race,s.zone,t);
+ !e&&this.tut.active||vH.getInstance().showMessage(e??`${
+ RSi(s.race,s.zone,t)}
+  · 여기서 낚시해요`),this.render()}
+ hookTap(){
+ if(this.tut.active)return!1;
+ const t=RIi.getInstance(),i=t.plunder;
+ return!(!this.scene.fishing||this.fishPanel.visible||this.hubPanel.visible||this.logPanel.visible||this.visitorPanel.visible||this.plunder.panelOpen||(null==i?void 0:i.raid)||(null==i?void 0:i.raidBy)||this.hud.cardOpen||this.scene.bigMapOpen||this.boatUi.panelOpen||this.huntUi.panelOpen||this.tradeUi.panelOpen||this.boatMenu.isOpen||!t.hookable()||(this.tryHook(),0))}
+ async tryHook(){
+ const t=await RIi.getInstance().hook();
+ t.message&&vH.getInstance().showMessage(t.message)}
+ onHide(){
+ WDi.dismiss(!0),this.coach.stop(),this.tut.active&&(this.tut.stop(),CRi.getInstance().setTutorialMode(!1)),this.scene.stop(),this.tip.hide(),this.fishPanel.visible=!1,this.closeVisitor(),this.depthOnClose=!1,this.closeHub(),this.closeLog(),this.plunder.onHide(),this.tradeUi.onHide(),this.boatMenu.close(),this.boatUi.closeAll(),this.huntUi.closeAll(),RIi.getInstance().active=!1;
+ for(const t of this.unsub)t();
+ this.unsub=[]}
+ update(){
+ this.settleIfAny(),this.render()}
+ async cycleDepth(){
+ const t=RIi.getInstance(),i=t.state,s=fSi.indexOf(i.spot.depth);
+ for(let e=1;
+ e<fSi.length;
+ e++){
+ const n=fSi[(s+e)%fSi.length];
+ if(tTi(i.gear,{
+ ...i.spot,depth:n}
+ ))continue;
+ const h=await t.setDepth(n);
+ return h&&vH.getInstance().showMessage(h),void this.render()}
+ vH.getInstance().showMessage("다른 깊이는 도구가 더 필요해요")}
+ static shown(t){
+ if(!(null==t?void 0:t.parent))return!1;
+ for(let i=t;
+ i;
+ i=i.parent)if(!i.visible)return!1;
+ return!0}
+ static anchorOf(i,s){
+ return()=>{
+ if(!t.shown(i))return null;
+ const e=i.getLocalBounds();
+ return i.toGlobal({
+ x:e.x+e.width/2,y:s?e.y+e.height+2:e.y-2}
+ )}
+ }
+ previewTip(i){
+ const s=t.anchorOf,e=Qt(i=>i&&t.shown(i)?i:this.netChip,"or"),n={
+ bite:[t.BITE_TIP,()=>this.toGlobal({
+ x:this.scene.floatX,y:this.scene.floatY-62}
+ ),!1],sail:[t.SAIL_TIP,s(this.scene.boatSprite,!1),!1],rod:[t.ROD_TIP,s(this.scene.rodBalloonView.visible?this.scene.rodBalloonView:this.scene.boatSprite,!1),!1],net:["잡은 물고기는 어망에 담겨요",s(this.netChip,!0),!0],sell:["누르면 어망으로 가요",s(e(this.netSellBtn),!0),!0],next:["누르면 할 일로 바로 가요",s(e(this.journeyBox),!0),!0],move:["이동을 누르고 갈 물을 눌러요",s(e(this.scene.modeBtn),!1),!1],depth:["누르면 물 깊이가 바뀌어요",s(this.depthBtn,!0),!0],card:[t.CARD_TIP,s(e(this.hud.stripCell()??void 0),!0),!0]}
+ ,[h,r,o]=n[i];
+ this.coach.show(i,h,r,o,CRi.BLEED_W)}
+ dismissTip(){
+ this.coach.dismiss()}
+ tutorialDue(){
+ const i=RIi.getInstance(),s=i.state;
+ if(!s||!i.look||t.previewing||this.tutPreviewing)return!1;
+ const e=i.startRace(),n=i.qlog();
+ return"R"===s.spot.zone&&s.spot.race===e&&qCi({
+ tutSeen:i.tipSeen("tut"),look:!0,dex:i.dexCount(),journeyStep:n.done.length,accepted:n.held.length>0}
+ )}
+ tutorialCheck(){
+ if(this.tut.active||!this.tutorialDue())return;
+ const t=RIi.getInstance(),i=t.state;
+ CRi.getInstance().activePage!==this||Jxi.isOpen||vxi.getInstance().parent||this.scene.mapKey===`${
+ i.spot.race}
+ |${
+ i.spot.zone}
+ `&&this.scene.boatPos&&this.startTutorial(t.startRace())}
+ startTutorial(t){
+ this.tutRace=t,this.closeHub(),this.closeVisitor(),this.fishPanel.visible=!1,this.tip.hide(),this.coach.dismiss(),this.plunder.closePeek(),CRi.getInstance().setTutorialMode(!0),this.layout(),this.tut.start(t)}
+ endTutorial(t){
+ var i;
+ CRi.getInstance().setTutorialMode(!1),this.layout(),this.greeted=!0,this.quietAfterTut=!0,this.tutPreviewing&&(this.tutPreviewing=!1,this.tutBackend=this.realTutBackend,null==(i=this.onTutorialPreviewEnd)||i.call(this)),this.syncJourney(),this.scene.sailToHub(t)||this.openHub(t,this.scene.hubNear(t))}
+ previewTutorial(t){
+ this.tut.active&&(this.tut.stop(),CRi.getInstance().setTutorialMode(!1));
+ let i=-1,s=!1;
+ const e=Qt(()=>performance.now(),"now"),n=Qt(()=>i+4e3/RGi.speed,"at"),h=rAi/RGi.speed,r=Qt((t=0)=>i>=0&&!s&&e()>=n()&&e()<n()+h+t,"open");
+ this.tutPreviewing=!0,this.tutBackend={
+ biteOpen:Qt(()=>r(),"biteOpen"),hookable:Qt(()=>r(2e3),"hookable"),biteIn:Qt(()=>i>=0&&!s?n()-e():1/0,"biteIn"),hook:Qt(async()=>{
+ s=!0;
+ const t=RIi.getInstance(),i=t.state,e=gTi({
+ ...i.spot,point:this.scene.pointNow}
+ ,t.now(),i.gear,null)??gTi(i.spot,t.now(),i.gear,null);
+ return e&&this.pop({
+ ...e,broken:!1,manual:!0}
+ ,!0),e?null:"물고기가 없어요"}
+ ,"hook"),recast:Qt(()=>{
+ i=e(),s=!1}
+ ,"recast"),onCast:Qt(()=>{
+ i=e(),s=!1}
+ ,"onCast"),finish:Qt(()=>{
+ }
+ ,"finish")}
+ ,this.startTutorial(t)}
+ showAutoTag(t=0){
+ const i=this.scene.boatPos,s=this.scene.world;
+ if(!i||!s)return;
+ MR.killTweensOf(this.autoTag),this.autoTag.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const e=mki("자동으로 잡았어요",16106577,QIi,12,9);
+ this.autoTag.addChild(e),this.autoTag.position.set(s.x+i.x-e.width/2,s.y+i.y-64-e.height-6),this.autoTag.alpha=0,MR.timeline({
+ delay:t}
+ ).to(this.autoTag,{
+ alpha:1,y:this.autoTag.y-6,duration:.15}
+ ).to(this.autoTag,{
+ alpha:0,duration:.2,delay:1.05}
+ )}
+ coachCheck(){
+ var i;
+ const s=RIi.getInstance(),e=s.state,n=this.coach;
+ if(t.previewing||this.tut.active||this.tutPreviewing||this.quietAfterTut)return;
+ if(n.visible)return void("bite"!==n.id||this.bite.visible||n.dismiss());
+ if(Jxi.isOpen||!s.look&&!Jxi.skipped)return;
+ if(this.tutorialDue())return;
+ if(this.scene.mapKey!==`${
+ e.spot.race}
+ |${
+ e.spot.zone}
+ `)return;
+ if(vxi.getInstance().parent||this.hubPanel.visible||this.logPanel.visible||this.visitorPanel.visible||this.fishPanel.visible)return;
+ if(WDi.pending||this.fxCatch.visible||this.plunder.panelOpen||this.boatUi.panelOpen||this.huntUi.panelOpen||this.tradeUi.panelOpen||this.boatMenu.isOpen||this.scene.bigMapOpen)return;
+ const h=CRi.BLEED_W,r=Qt((i,e,r,o)=>{
+ n.show(i,e,t.anchorOf(r,o),o,h),s.markTip(i)}
+ ,"show"),o=s.qlog(),a=s.questHeld().some(t=>"meet"===t.def.kind);
+ if(!s.tipSeen("bite")&&this.bite.visible&&((null==(i=s.biteOpen())?void 0:i.left)??0)>=t.BITE_TIP_MIN_LEFT)r("bite",t.BITE_TIP,this.bite,!1);
+ else if(!s.tipSeen("sail")&&this.scene.idleInSail)n.show("sail",t.SAIL_TIP,this.sailTipAnchor,!1,h),s.markTip("sail");
+ else if(!s.tipSeen("rod")&&this.scene.rodShown)r("rod",t.ROD_TIP,this.scene.rodBalloonView,!1);
+ else if(!s.tipSeen("net")&&Object.keys(e.dex).length>0&&t.shown(this.netChip))r("net","잡은 물고기는 어망에 담겨요",this.netChip,!0);
+ else if(!s.tipSeen("sell")&&t.shown(this.netSellBtn)&&s.netCount()>=s.netCap/2)r("sell","누르면 어망으로 가요",this.netSellBtn,!0);
+ else if(!s.tipSeen("next")&&o.done.length>=1&&t.shown(this.journeyBox))r("next","누르면 할 일로 바로 가요",this.journeyBox,!0);
+ else if(!s.tipSeen("move")&&a){
+ const i=this.scene.modeBtn;
+ t.shown(i)&&r("move","이동을 누르고 갈 물을 눌러요",i,!1)}
+ else!s.tipSeen("card")&&s.questHeld().some(t=>"fish"===t.def.kind&&!t.ready)&&t.shown(this.hud.stripCell()??void 0)&&r("card",t.CARD_TIP,this.hud.stripCell(),!0)}
+ render(){
+ var t;
+ this.tutorialCheck(),this.coachCheck();
+ const i=RIi.getInstance(),s=i.state,e=s.spot,n=i.now();
+ this.scene.rodHold=this.tut.active?this.tut.rodHold:!i.tipSeen("sail")||this.coach.visible&&"sail"===this.coach.id;
+ const h=PSi(n),r=tTi(s.gear,e)??i.boatProblem(),o=this.tut.active?this.tutBackend:null,a=r?null:o?o.biteOpen()?{
+ }
+ :null:i.biteOpen(),c=r?1/0:o?o.biteIn():i.biteIn(),l=this.tutPreviewing?{
+ ...e,point:this.scene.pointNow}
+ :e;
+ this.scene.update(l,h,performance.now()-this.t0,!!a&&!this.scene.sailing,c,s.gear),i.othersAt!==this.othersAt&&(this.othersAt=i.othersAt,this.scene.setOthers(i.others));
+ const u=(null==(t=i.crowd)?void 0:t[e.point])??FSi(e.race,e.zone,e.point,n);
+ this.hud.update({
+ now:n,spot:e,problem:r,crowd:u,net:i.netCount(),netCap:i.netCap,wanted:this.progressHeld?this.lastWanted:this.lastWanted=this.wantedList()}
+ ),this.drawNetFull();
+ let d=this.hud.bandRight+6;
+ for(const g of[this.boatUi.chip,this.huntUi.chip,this.netSellBtn])g.position.set(d,this.hud.bandY),g.visible&&(d+=g.width+6);
+ this.biteMark.texture===as.EMPTY&&(this.biteMark.texture=nAi.gear().bubbles[0]),this.bite.position.set(this.scene.floatX,this.scene.floatY-30);
+ const f=!!a&&!this.scene.sailing;
+ f&&!this.bite.visible&&MR.fromTo(this.bite.scale,{
+ x:.3,y:.3}
+ ,{
+ x:1,y:1,duration:.22,ease:"back.out(4)"}
+ ),this.bite.visible=f,this.fishPanel.visible&&this.renderFishPanel();
+ const p=`${
+ e.race}
+ |${
+ e.zone}
+ `;
+ p!==this.visitorSpot&&(this.visitorSpot=p,this.closeVisitor(),this.closeHub()),this.syncVisitors(),this.syncJourney(),this.plunder.update(),this.boatUi.update(),this.huntUi.update(),this.tradeUi.update(),this.scene.speedBonus=i.gearStats().speed,this.scene.modeBtnHidden=this.hubPanel.visible||this.logPanel.visible||this.visitorPanel.visible}
+ renderFishPanel(){
+ const t=RIi.getInstance(),i=t.state,s=t.now(),e=t.gearStats(),n=oTi(i.spot,s,i.gear,i.bait,e.star+e.luck).sort((t,i)=>i.w-t.w);
+ this.candPool=n;
+ const h=n.reduce((t,i)=>t+i.w,0)||1;
+ this.candCount.text=`발견 ${
+ n.filter(t=>i.dex[t.s.id]).length}
+ /${
+ n.length}
+ `,this.candCount.x=this.candTitle.x+this.candTitle.width+10;
+ const r=CRi.BLEED_W;
+ for(;
+ this.candCards.length<n.length;
+ ){
+ const t=this.candCards.length,i=new lki(jGi,!0);
+ i.eventMode="static",i.cursor="pointer",i.hitArea=new Ui(0,0,jGi,jGi),i.on("pointertap",i=>{
+ i.stopPropagation(),this.toggleTip(t)}
+ );
+ const s=new Ve;
+ this.fishPanel.addChildAt(i,this.fishPanel.getChildIndex(this.tip)),this.fishPanel.addChildAt(s,this.fishPanel.getChildIndex(this.tip)),this.candCards.push(i),this.candBadges.push(s)}
+ const o=Math.min(7,Math.max(1,n.length)),a=o>1?Math.min(12,(r-32-o*jGi)/(o-1)):0;
+ this.candCards.forEach((t,s)=>{
+ const e=n[s],h=this.candBadges[s];
+ if(t.visible=h.visible=!!e,!e)return;
+ t.set(e.s.id,e.s.star,0,!i.dex[e.s.id]),t.position.set(16+s%o*(jGi+a),56+82*Math.floor(s/o));
+ const r=$Si(e.s);
+ h.label!==r&&(h.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),h.label=r,r&&h.addChild(mki(r,16777215,ski[e.s.star],10,5))),h.position.set(t.x+(jGi-h.width)/2,t.y-8)}
+ );
+ const c=Math.ceil(n.length/o);
+ this.candMore.position.set(16,56+82*c+4);
+ const l=n.filter(t=>t.s.star>=3).reduce((t,i)=>t+i.w/h*100,0);
+ this.candMore.text=n.length?(l>0?`희귀 어종 출현 확률 ${
+ l.toFixed(1)}
+ %`:"다른 물때와 깊이에서 희귀 어종을 찾아보세요.")+" · 카드를 누르면 정보가 보여요":"이 물때에는 만날 수 있는 물고기가 없어요.",oki(this.candMore,r-32);
+ const u=this.candMore.y+this.candMore.height+16;
+ this.panelBg.clear().rect(0,0,r,this.H).fill({
+ color:526346,alpha:.5}
+ ).roundRect(0,0,r,u,12).fill({
+ color:QIi,alpha:.95}
+ )}
+ toggleTip(t){
+ const i=this.candPool[t],s=this.candCards[t];
+ if(!i||!s)return;
+ if(this.tip.visible&&this.tip.forId===i.s.id)return void this.tip.hide();
+ const e=RIi.getInstance().state,n=e.dex[i.s.id],h=i.s,r=this.candPool.reduce((t,i)=>t+i.w,0)||1,o=$Si(h),a=ZSi(h,e.spot),c=a>XSi(e.gear);
+ this.tip.show(h.id,[`${
+ n?h.name:"???"}
+   ★${
+ h.star}
+ ${
+ o?` · ${
+ o}
+ `:""}
+ `,`${
+ "O"===h.zone&&"B"===h.depth?"심해":gSi[h.depth]}
+  · ${
+ "전체"===h.tide?"모든 물때":`${
+ h.tide}
+  물때`}
+  · 힘 ${
+ a}
+ ${
+ c?" (줄이 약해요)":""}
+ `,`지금 확률 ${
+ (i.w/r*100).toFixed(1)}
+ % · ${
+ h.kind}
+ `,n?`잡은 수 ${
+ n.count}
+  · 최고 ${
+ _Ti(n.bestKg)}
+ `:"아직 못 잡았어요"],[KIi,c?XIi:zIi,zIi,n?VIi:YIi],s.x+34,s.y+jGi,!1)}
+ pop(t,i){
+ const s=this.scene.playCatch(t,i,RIi.getInstance().state.gear);
+ if(this.progressHoldUntil=Math.max(this.progressHoldUntil,performance.now()+1e3*s),MR.delayedCall(s+.02,()=>{
+ this.parent&&!this.progressHeld&&(this.renderTracker(),this.render())}
+ ),this.tut.onCatch(t,i,s),t.broken)return;
+ if(t.manual||this.showAutoTag(s),WDi.release(),i)return void WDi.show(this.popLayer,{
+ tex:nAi.fish(t.id),name:kSi(t.id).name,star:t.star,grade:t.grade??0,kg:t.kg,dex:RIi.getInstance().dexCount()}
+ ,CRi.BLEED_W/2,Math.max(150,Math.min(300,.3*this.H)),s+.05,()=>{
+ qG.getInstance().playSFX(qG.SFX_TRUMPET,.6),jG("success"),this.fxCatch.visible=!0}
+ ,{
+ onEnd:Qt(()=>{
+ WDi.active||(this.fxCatch.visible=!1)}
+ ,"onEnd")}
+ );
+ if(t.star<4)return;
+ const e=new lki(84);
+ e.set(t.id,t.star,t.grade??0,!1);
+ const n=rki(`${
+ kSi(t.id).name}
+  ${
+ _Ti(t.kg)}
+ `,VIi,16),h=new Ve;
+ h.eventMode="none",h.addChild(e,n),oki(n,300),n.position.set((84-n.width)/2,88),h.pivot.set(42,42),h.position.set(CRi.BLEED_W/2,130),h.alpha=0,this.popLayer.addChild(h),MR.timeline({
+ delay:s+.1,onComplete:Qt(()=>{
+ h.destroy({
+ children:!0}
+ )}
+ ,"onComplete")}
+ ).set(h,{
+ alpha:1}
+ ).fromTo(h.scale,{
+ x:.3,y:.3}
+ ,{
+ x:1,y:1,duration:.28,ease:"back.out(2)"}
+ ,0).to(h,{
+ alpha:0,y:118,duration:.4}
+ ,2.1)}
+ }
+ ;
+ Qt(YGi,"FishingMainPage"),Zt(YGi,"instance"),Zt(YGi,"previewing",!1),Zt(YGi,"BITE_TIP","지금! 눌러요"),Zt(YGi,"SAIL_TIP","물을 누르면 배가 그곳으로 가요"),Zt(YGi,"CARD_TIP","물고기를 누르면 사는 곳·깊이·시간대가 나와요"),Zt(YGi,"ROD_TIP","낚싯대를 누르면 낚시를 시작해요"),Zt(YGi,"BITE_TIP_MIN_LEFT",900);
+ let qGi=YGi;
+ const XGi=Object.freeze(Object.defineProperty({
+ __proto__:null,FishingMainPage:qGi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),JGi=CRi.CONTENT_W,QGi=(JGi-16)/3,ZGi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"bg",new ip),Zt(this,"nameText",rki("",KIi,15)),Zt(this,"sub",rki("",zIi,12,!1)),Zt(this,"crowd",new Ve),Zt(this,"crowdText",rki("",zIi,11)),Zt(this,"bar",new ip),Zt(this,"fish",new lki(42)),Zt(this,"badge",new Ve),Zt(this,"onTap",null),this.bg.eventMode="none",this.bar.eventMode="none";
+ const t=yki("people",14,YIi);
+ this.crowd.addChild(t,this.crowdText),this.crowdText.position.set(17,-1),this.addChild(this.bg,this.bar,this.nameText,this.sub,this.crowd,this.fish,this.badge),this.nameText.position.set(10,9),this.sub.position.set(10,33),this.crowd.position.set(10,60),this.fish.position.set(QGi-42-8,24),this.eventMode="static",this.cursor="pointer",this.hitArea=new Ui(0,0,QGi,84),this.on("pointertap",t=>{
+ var i;
+ t.stopPropagation(),null==(i=this.onTap)||i.call(this)}
+ )}
+ set(t){
+ var i;
+ this.bg.clear().roundRect(.5,.5,QGi-1,83,10).fill(t.unknown?QIi:t.current?UIi:GIi).stroke({
+ color:t.current?VIi:WIi,width:t.current?2:1}
+ ),this.nameText.textColor=t.unknown?YIi:KIi,this.crowd.visible=!t.unknown;
+ const s=t.fish?QGi-42-24:QGi-20;
+ this.nameText.text=t.name,oki(this.nameText,t.unknown?QGi-20:s),this.sub.text=t.sub,oki(this.sub,t.unknown?QGi-20:s),this.crowdText.text=`${
+ t.crowd}
+ 명`,this.bar.clear(),t.unknown||vki(this.bar,58,66,s-50,5,t.live?t.known/t.live:0,t.known>=t.live?qIi:6012341),this.fish.visible=!!t.fish,this.badge.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),t.current?this.badge.addChild(mki("낚시 중",jIi,VIi,10,6)):(null==(i=t.fish)?void 0:i.tag)&&this.badge.addChild(mki(t.fish.tag,16777215,ski[t.fish.star],10,5)),this.badge.position.set(QGi-this.badge.width-6,5),t.fish&&this.fish.set(t.fish.id,t.fish.star,0,!t.fish.known)}
+ }
+ ;
+ Qt(ZGi,"PointCard");
+ let tBi=ZGi;
+ const iBi={
+ "인간":"인간 왕국","엘프":"엘프 숲","언데드":"언데드 늪","오크":"오크 설원"}
+ ,sBi=420,eBi=96,nBi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"tabId","fish"),Zt(this,"onBack",null),Zt(this,"race","인간"),Zt(this,"zone","R"),Zt(this,"view","world"),Zt(this,"back",new pki("‹ 낚시로",110,38,14)),Zt(this,"titleText",rki("해도",KIi,20)),Zt(this,"worldView",new Ve),Zt(this,"worldImg",new Ye(as.EMPTY)),Zt(this,"worldPins",new Ve),Zt(this,"worldHint",rki("",zIi,13,!1)),Zt(this,"regionView",new Ve),Zt(this,"regionImg",new Ye(as.EMPTY)),Zt(this,"regionFog",new Ye(as.EMPTY)),Zt(this,"regionTerr",new Ye(as.EMPTY)),Zt(this,"terrCanvas",document.createElement("canvas")),Zt(this,"terrTex",null),Zt(this,"regionMarks",new Ve),Zt(this,"regionTitle",rki("",KIi,17)),Zt(this,"regionDex",rki("",zIi,12)),Zt(this,"regionGate",rki("",zIi,12)),Zt(this,"cards",[]),Zt(this,"foot",rki("수역은 스팟 둘레의 넓은 물이에요. 배로 새 수역에 들어가면 지도에 드러나요. 회유어(★4)는 날마다 UTC 0시에 몇몇 수역 중 한 곳으로 옮겨요.",YIi,12,!1)),Zt(this,"pulse",0),this.back.setPrimary(!1),this.back.onTap=()=>{
+ var t;
+ "region"===this.view?this.showWorld():null==(t=this.onBack)||t.call(this)}
+ ,this.titleText.position.set(126,6),this.addChild(this.back,this.titleText);
+ const t=Math.round(.75*JGi);
+ this.worldImg.position.set(0,50),this.worldImg.eventMode="none";
+ const i=(new ip).roundRect(0,50,JGi,t,14).fill(16777215);
+ this.worldImg.mask=i,this.worldPins.position.set(0,50),this.worldHint.position.set(4,50+t+12),this.worldHint.setWrapWidth(JGi-8),this.worldView.addChild(this.worldImg,i,this.worldPins,this.worldHint),this.regionTitle.position.set(4,52),this.regionDex.y=56,this.regionGate.y=56;
+ const s=(JGi-sBi)/2;
+ this.regionImg.position.set(s,eBi),this.regionImg.width=this.regionImg.height=sBi,this.regionImg.eventMode="none";
+ const e=(new ip).roundRect(s,eBi,sBi,sBi,14).fill(16777215);
+ this.regionImg.mask=e,this.regionFog.position.set(s,eBi),this.regionFog.eventMode="none",this.regionTerr.position.set(s,eBi),this.regionTerr.eventMode="none";
+ const n=(new ip).roundRect(s,eBi,sBi,sBi,14).fill(16777215);
+ this.regionTerr.mask=n;
+ const h=(new ip).roundRect(s,eBi,sBi,sBi,14).fill(16777215);
+ this.regionFog.mask=h,this.regionMarks.position.set(s,eBi),this.regionView.addChild(this.regionTitle,this.regionDex,this.regionGate,this.regionImg,e,this.regionFog,h,this.regionTerr,n,this.regionMarks);
+ for(let r=0;
+ r<9;
+ r++){
+ const t=new tBi;
+ t.position.set(r%3*(QGi+8),530+92*Math.floor(r/3)),t.onTap=()=>{
+ this.tapPoint(this.zone,r,t)}
+ ,this.regionView.addChild(t),this.cards.push(t)}
+ this.foot.setWrapWidth(JGi-8),this.foot.position.set(4,812),this.regionView.addChild(this.foot)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ closeOne(){
+ var t;
+ return"region"===this.view?this.showWorld():null==(t=this.onBack)||t.call(this),!0}
+ onShow(){
+ const t=RIi.getInstance().state;
+ this.race=t.spot.race,this.zone=t.spot.zone,this.showWorld()}
+ onHide(){
+ }
+ update(){
+ if("world"!==this.view)return;
+ this.pulse+=.25;
+ const t=this.worldPins.getChildByLabel("here");
+ t&&(t.scale.set(1+.12*Math.sin(this.pulse)),t.alpha=.75+.25*Math.sin(this.pulse))}
+ showWorld(){
+ this.view="world",this.titleText.text="해도",this.back.setText("‹ 낚시로"),this.removeChild(this.regionView),this.addChild(this.worldView),nAi.worldMap().then(t=>{
+ this.worldImg.texture=t,this.worldImg.width=JGi,this.worldImg.height=Math.round(.75*JGi)}
+ ),this.renderWorld(),CRi.getInstance().resetScroll()}
+ renderWorld(){
+ const t=RIi.getInstance().state,i=nAi.world(),s=Math.round(.75*JGi);
+ this.worldPins.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ for(const n of uSi){
+ const[t,e]=i.labels[n]??[.5,.5],h=mki(iBi[n],16777215,hki[n],12,8);
+ h.alpha=.92,h.position.set(t*JGi-h.width/2,e*s-h.height/2),h.eventMode="none",this.worldPins.addChild(h)}
+ for(const n of uSi)for(const e of dSi){
+ const h=`${
+ n}
+ |${
+ e}
+ `,r=i.pins[h];
+ if(!r)continue;
+ const o=t.spot.race===n&&t.spot.zone===e,a=new Ve;
+ if(a.position.set(r[0]*JGi,r[1]*s),o){
+ const t=(new ip).circle(0,0,17).stroke({
+ color:VIi,width:3}
+ );
+ t.label="here",t.position.set(r[0]*JGi,r[1]*s),t.eventMode="none",this.worldPins.addChild(t)}
+ const c=(new ip).circle(0,0,11).fill(hki[n]).circle(0,0,11).stroke({
+ color:16777215,width:2.5}
+ ),l=rki(pSi[e][0],16777215,11);
+ l.position.set(-l.width/2,-l.height/2-1);
+ const u=mki(vSi[h],16777215,o?8018448:QIi,11,6);
+ u.alpha=.9,u.position.set(-u.width/2,14),a.addChild(c,l,u),a.eventMode="static",a.cursor="pointer",a.hitArea=new Ui(-Math.max(28,u.width/2),-24,Math.max(56,u.width),58),a.on("pointertap",t=>{
+ t.stopPropagation(),this.showRegion(n,e)}
+ ),this.worldPins.addChild(a)}
+ const e=`${
+ iBi[t.spot.race]}
+  · ${
+ pSi[t.spot.zone]}
+  · ${
+ RSi(t.spot.race,t.spot.zone,t.spot.point)}
+ `;
+ this.worldHint.text=`지역을 누르면 그 지역의 낚시터를 골라요 · 지금: ${
+ e}
+ `}
+ showRegion(t,i){
+ this.view="region",this.race=t,this.zone=i,this.titleText.text=iBi[t],this.back.setText("‹ 전체 지도"),this.removeChild(this.worldView),this.addChild(this.regionView),this.regionImg.texture=FDi.regionMap(`${
+ t}
+ |${
+ i}
+ `),this.regionImg.width=this.regionImg.height=sBi;
+ const s=this.regionFog.texture,e=FDi.regionFog(`${
+ t}
+ |${
+ i}
+ `);
+ this.regionFog.texture=e??as.EMPTY,this.regionFog.visible=!!e,e&&(this.regionFog.width=this.regionFog.height=sBi),s!==as.EMPTY&&s.destroy(!0),this.render(),CRi.getInstance().resetScroll(),MR.fromTo(this.regionView,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.18}
+ )}
+ async tapPoint(t,i,s){
+ var e;
+ const n=RIi.getInstance();
+ if(!this.pointKnown(t,i))return vH.getInstance().showMessage("아직 못 찾은 곳이에요 · 배를 몰아 찾아가 보세요"),void MR.fromTo(s,{
+ x:s.x-6}
+ ,{
+ x:s.x,duration:.3,ease:"elastic.out(1.2, 0.3)"}
+ );
+ const h=await n.moveTo(this.race,t,i);
+ if(h)return vH.getInstance().showMessage(h),void MR.fromTo(s,{
+ x:s.x-6}
+ ,{
+ x:s.x,duration:.3,ease:"elastic.out(1.2, 0.3)"}
+ );
+ qG.getInstance().playSFX(qG.SFX_POPUP),YRi.active||vH.getInstance().showMessage(`${
+ RSi(this.race,t,i)}
+ (으)로 옮겼어요`),null==(e=this.onBack)||e.call(this)}
+ pointKnown(t,i){
+ const s=RIi.getInstance().state.spot,e=s.race===this.race&&s.zone===t?s.point:-1;
+ return WTi.pointKnown(`${
+ this.race}
+ |${
+ t}
+ `,i,e)}
+ render(){
+ var t;
+ const i=RIi.getInstance(),s=i.state,e=i.now(),n=DSi(e),h=this.zone;
+ this.regionTitle.text=`${
+ pSi[h]}
+  · ${
+ vSi[`${
+ this.race}
+ |${
+ h}
+ `]}
+ `;
+ const r=OSi.filter(t=>t.race===this.race&&t.zone===h);
+ this.regionDex.text=`도감 ${
+ r.filter(t=>s.dex[t.id]).length}
+ /${
+ r.length}
+ `,this.regionDex.x=this.regionTitle.width+14;
+ const o=tTi(s.gear,{
+ race:this.race,zone:h,depth:"M"}
+ ),a=s.gear.boat<DAi.ENTRY[h];
+ this.regionGate.text=o?`잠김 · ${
+ o}
+ `:`${
+ lSi(this.race,h)}
+ ${
+ "O"===h?` · 바닥은 ${
+ WSi.find(t=>"reel"===t.key).names[4]}
+ `:""}
+ `,this.regionGate.textColor=o||a?XIi:s.gear.boat<UAi[FAi(this.race,h)-1]?16757611:zIi,this.regionGate.position.x=JGi-this.regionGate.width-4;
+ const c=`${
+ this.race}
+ |${
+ h}
+ `,l=nAi.topdownInfo(c),u=sBi/Math.max(l.w,l.h),d=s.spot.race===this.race&&s.spot.zone===h?s.spot.point:-1,f=sNi.get(c);
+ this.regionTerr.visible=!!f,f&&(sNi.paint(this.terrCanvas,f,t=>this.pointKnown(h,t),d,VIi),this.terrTex&&this.terrTex.width===this.terrCanvas.width&&this.terrTex.height===this.terrCanvas.height?this.terrTex.source.update():(null==(t=this.terrTex)||t.destroy(!0),this.terrTex=as.from(this.terrCanvas),this.terrTex.source.scaleMode="linear"),this.regionTerr.texture=this.terrTex,this.regionTerr.width=f.cols*f.tile*u,this.regionTerr.height=f.rows*f.tile*u),this.regionMarks.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),l.points.forEach((t,i)=>{
+ if(!this.pointKnown(h,i))return;
+ const e=s.spot.race===this.race&&s.spot.zone===h&&s.spot.point===i,n=new Ve;
+ n.position.set(t.x*u,t.y*u);
+ const r=e?VIi:16777215;
+ n.addChild((new ip).circle(0,0,6).fill(r).circle(0,0,6).stroke({
+ color:QIi,width:2}
+ ));
+ const o=mki(RSi(this.race,h,i),e?jIi:16777215,e?VIi:QIi,10,5);
+ o.alpha=.9,o.position.set(-o.width/2,-28),n.addChild(o),n.eventMode="static",n.cursor="pointer",n.hitArea=new Ui(-Math.max(24,o.width/2),-38,Math.max(48,o.width),52),n.on("pointertap",t=>{
+ t.stopPropagation(),this.tapPoint(h,i,this.cards[i])}
+ ),this.regionMarks.addChild(n)}
+ );
+ const p=RIi.getInstance().areaRows(this.race,h);
+ for(let g=0;
+ g<this.cards.length;
+ g++){
+ const t=rTi(this.race,h,g,n),i=p[g],r=t.filter(t=>t.zone===h&&!t.roam&&t.star>=2).sort((t,i)=>i.star-t.star||t.pts.length-i.pts.length)[0],a=s.spot.race===this.race&&s.spot.zone===h&&s.spot.point===g,c=t.filter(t=>s.dex[t.id]).length;
+ this.cards[g].alpha=o?.5:1;
+ const l=this.pointKnown(h,g);
+ this.cards[g].set(l?{
+ name:RSi(this.race,h,g),sub:`난이도 ${
+ QSi({
+ zone:h,point:g}
+ )}
+  · 수역 도감 ${
+ i.have}
+ /${
+ i.need}
+ ${
+ i.claimed?" · ✓ 클리어":i.ready?" · 진주 받기":""}
+ `,crowd:FSi(this.race,h,g,e),known:c,live:t.length,current:a,fish:r?{
+ id:r.id,star:r.star,known:!!s.dex[r.id],tag:r.star>=3?"명물":""}
+ :null}
+ :{
+ name:`${
+ g+1}
+ 번 · 아직 못 찾은 곳`,sub:"배로 찾아가면 드러나요",crowd:0,known:0,live:0,current:!1,unknown:!0,fish:null}
+ )}
+ }
+ }
+ ;
+ Qt(nBi,"FishingMapPage"),Zt(nBi,"instance");
+ let hBi=nBi;
+ const rBi=[{
+ main:10119740,dark:6176032,light:13803626,gem:8378016}
+ ,{
+ main:11565626,dark:7030048,light:15250538,gem:6014660}
+ ,{
+ main:11122367,dark:6056821,light:15331829,gem:9422847}
+ ,{
+ main:14723118,dark:9067792,light:16769162,gem:16739211}
+ ,{
+ main:5222030,dark:2252876,light:11858136,gem:16106577}
+ ];
+ function oBi(t,i,s){
+ const e=rBi[s%5],n={
+ color:e.dark,width:3}
+ ;
+ switch(i){
+ case"prow":if(t.moveTo(40,112).quadraticCurveTo(30,70,58,46).lineTo(74,56).quadraticCurveTo(56,78,62,112).closePath().fill(e.main).stroke(n),t.circle(72,40,22).fill(e.main).stroke(n),t.circle(80,36,4).fill(e.dark),0===s)for(let i=0;
+ i<5;
+ i++)t.circle(54+3*i,26+6*i,7).fill(e.light);
+ 1===s&&t.poly([86,52,106,48,92,62]).fill(e.light).stroke(n),2===s&&t.poly([66,18,60,2,74,16]).fill(e.light).poly([80,20,84,4,88,22]).fill(e.light),3===s&&t.poly([92,40,110,44,92,48]).fill(e.light).stroke(n),4===s&&t.ellipse(72,22,14,6).fill(e.light),t.circle(48,92,5).fill(e.gem);
+ break;
+ case"compass":t.circle(64,64,46).fill(e.dark).circle(64,64,40).fill(e.main).circle(64,64,32).fill(16052192);
+ for(let i=0;
+ i<8;
+ i++){
+ const s=i/8*Math.PI*2;
+ t.moveTo(64+26*Math.cos(s),64+26*Math.sin(s)).lineTo(64+31*Math.cos(s),64+31*Math.sin(s)).stroke({
+ color:e.dark,width:2}
+ )}
+ if(t.poly([64,34,70,64,64,94,58,64]).fill(12866111).poly([64,64,70,64,64,94,58,64]).fill(4085088),t.circle(64,64,4).fill(e.light),t.circle(64,14,7).fill(e.main).stroke(n),s>=2&&t.circle(64,64,2.5).fill(e.gem),3===s&&t.rect(40,100,48,8).fill(e.dark),4===s)for(let i=0;
+ i<4;
+ i++)t.circle(64+44*Math.cos(1.57*i),64+44*Math.sin(1.57*i),4).fill(e.gem);
+ break;
+ case"deck":for(let i=0;
+ i<4;
+ i++){
+ const s=22+22*i;
+ t.roundRect(16,s,96,19,4).fill(i%2?e.main:e.light).stroke({
+ color:e.dark,width:2}
+ ),t.circle(26,s+9.5,2.5).fill(e.dark).circle(102,s+9.5,2.5).fill(e.dark)}
+ 1===s&&t.rect(16,50,96,6).fill({
+ color:6056821,alpha:.8}
+ ),2===s&&t.ellipse(64,64,30,10).fill({
+ color:16052192,alpha:.7}
+ ),3===s&&t.rect(60,22,8,85).fill({
+ color:e.dark,alpha:.6}
+ ),4===s&&t.circle(96,30,7).fill(e.gem).circle(36,96,5).fill(e.gem);
+ break;
+ case"anchor":t.circle(64,22,11).stroke({
+ color:e.main,width:7}
+ ),t.rect(59,30,10,66).fill(e.main).stroke(n),t.rect(40,42,48,9).fill(e.main).stroke(n),t.moveTo(22,74).quadraticCurveTo(28,110,64,108).quadraticCurveTo(100,110,106,74).stroke({
+ color:e.main,width:9}
+ ),t.poly([16,78,28,66,30,82]).fill(e.main).poly([112,78,100,66,98,82]).fill(e.main),2===s&&t.circle(64,60,7).fill(16052192).circle(61,58,1.5).fill(1254955).circle(67,58,1.5).fill(1254955),3===s&&t.moveTo(64,96).lineTo(64,118).stroke({
+ color:e.main,width:6}
+ ),4===s&&t.circle(64,74,5).fill(e.gem),1===s&&t.rect(56,30,16,8).fill(e.dark);
+ break;
+ case"toolbox":t.roundRect(18,50,92,56,8).fill(e.main).stroke(n),t.roundRect(18,50,92,14,6).fill(e.dark),t.moveTo(48,50).lineTo(48,36).lineTo(80,36).lineTo(80,50).stroke({
+ color:e.dark,width:6}
+ ),t.roundRect(56,70,16,12,3).fill(e.light),t.moveTo(84,30).lineTo(108,6).stroke({
+ color:13226968,width:6}
+ ).circle(108,8,8).stroke({
+ color:13226968,width:5}
+ ),1===s&&t.rect(24,88,80,6).fill(e.dark),2===s&&t.circle(36,84,6).fill(e.gem).circle(92,84,6).fill(e.gem),3===s&&t.poly([64,88,68,96,60,96]).fill(e.light),4===s&&t.rect(26,96,76,4).fill(e.gem);
+ break;
+ case"sail":if(t.rect(30,10,6,108).fill(e.dark),t.moveTo(38,14).quadraticCurveTo(100,40,108,100).lineTo(38,100).closePath().fill(e.light).stroke({
+ color:e.dark,width:3}
+ ),t.moveTo(38,56).quadraticCurveTo(80,64,100,80).stroke({
+ color:e.main,width:4}
+ ),0===s&&t.circle(66,72,6).fill(e.main),1===s&&t.moveTo(38,36).quadraticCurveTo(70,44,90,56).stroke({
+ color:e.gem,width:3}
+ ),2===s&&t.poly([62,60,76,70,66,74,80,88,60,74,70,70]).fill(e.main),3===s)for(let i=0;
+ i<3;
+ i++)t.poly(aBi(58+14*i,80-8*i,5)).fill(e.gem);
+ 4===s&&t.rect(38,86,70,6).fill(e.main),t.poly([30,8,44,4,36,14]).fill(12866111);
+ break;
+ case"lantern":{
+ const i=[16763210,9431295,10485642,12035839,16752730][s%5];
+ t.circle(64,66,40).fill({
+ color:i,alpha:.18}
+ ),t.moveTo(64,6).lineTo(64,20).stroke({
+ color:e.dark,width:4}
+ ).circle(64,10,6).stroke({
+ color:e.dark,width:3}
+ ),t.roundRect(42,20,44,10,3).fill(e.main).stroke(n),t.roundRect(44,30,40,58,8).fill({
+ color:16055290,alpha:.55}
+ ).stroke({
+ color:e.main,width:5}
+ ),t.ellipse(64,62,8,14).fill(i).ellipse(64,66,4,8).fill(16777215),t.roundRect(40,88,48,12,4).fill(e.main).stroke(n),3===s&&t.circle(64,104,5).fill(e.gem),2===s&&t.poly([44,30,38,24,46,26]).fill(e.main).poly([84,30,90,24,82,26]).fill(e.main);
+ break}
+ }
+ }
+ function aBi(t,i,s){
+ const e=[];
+ for(let n=0;
+ n<10;
+ n++){
+ const h=-Math.PI/2+n/10*Math.PI*2,r=n%2?.45*s:s;
+ e.push(t+Math.cos(h)*r,i+Math.sin(h)*r)}
+ return e}
+ function cBi(t){
+ const i=AAi(t);
+ if(!i)return as.EMPTY;
+ return nAi.boatGearIcon(pAi.indexOf(i.slot),i.v)||tPi(`gear:${
+ t}
+ `,()=>{
+ const t=new Ve,s=new ip;
+ return s.rect(0,0,128,128).fill({
+ color:0,alpha:.001}
+ ),oBi(s,i.slot,i.v),t.addChild(s),t}
+ )}
+ function lBi(t){
+ return nAi.boatGearIcon(pAi.indexOf(t),5)||tPi(`gearSlot:${
+ t}
+ `,()=>{
+ const i=new Ve,s=new ip;
+ return s.rect(0,0,128,128).fill({
+ color:0,alpha:.001}
+ ),oBi(s,t,2),i.addChild(s),i}
+ )}
+ Qt(oBi,"drawIcon"),Qt(aBi,"starPts"),Qt(cBi,"gearIconTex"),Qt(lBi,"gearSlotTex");
+ const uBi=16740241;
+ function dBi(t,i,s,e){
+ return t.moveTo(i,s+.9*e).bezierCurveTo(i-1.55*e,s-.05*e,i-.95*e,s-1.3*e,i,s-.45*e).bezierCurveTo(i+.95*e,s-1.3*e,i+1.55*e,s-.05*e,i,s+.9*e)}
+ Qt(dBi,"heartPath");
+ const fBi=class extends Ve{
+ constructor(t,i=!1){
+ super(),Zt(this,"bg",new ip),Zt(this,"icon",new Ye),Zt(this,"band",new ip),Zt(this,"stars",rki("",VIi,11)),Zt(this,"marks",new Ve),Zt(this,"ring",DIi),this.size=t,this.thinFrame=i,this.eventMode="none",this.icon.anchor.set(.5),this.band.eventMode="none",this.marks.eventMode="none",this.addChild(this.bg,this.icon,this.band,this.stars,this.marks)}
+ set(t,i,s,e={
+ }
+ ){
+ const n=this.size,h=null===t?BIi:LAi[Math.max(1,Math.min(7,i))],r=this.thinFrame?2:Math.max(2,.05*n),o=.2*n,a=Math.max(1,o-r);
+ if(this.bg.clear(),null!==t&&i>=7&&this.bg.roundRect(-3,-3,n+6,n+6,o+3).fill({
+ color:16769126,alpha:.35}
+ ),this.bg.roundRect(0,0,n,n,o).fill(h).roundRect(r,r,n-2*r,n-2*r,a).fill(null===t?1054234:QIi),null!==t){
+ const t=nAi.gearBackground(i);
+ this.bg.roundRect(r,r,n-2*r,n-2*r,a).fill(t?{
+ texture:t,textureSpace:"local"}
+ :{
+ color:h,alpha:.32}
+ )}
+ this.icon.texture=null!==t?cBi(t):s?lBi(s):as.EMPTY,this.icon.alpha=null!==t?e.lock?.45:1:.3,this.icon.scale.set(.7*n/(this.icon.texture.frame.width||128)),this.icon.position.set(n/2,.41*n);
+ const c=Math.round(.22*n),l=n-r-c;
+ if(this.band.clear(),this.stars.visible=null!==t&&i>0,this.stars.visible){
+ const t=n-r,s=n-r;
+ this.band.moveTo(r,l).lineTo(t,l).lineTo(t,s-a).arcTo(t,s,t-a,s,a).lineTo(r+a,s).arcTo(r,s,r,s-a,a).closePath().fill({
+ color:0,alpha:.28}
+ ),this.stars.text=MTi(i),this.stars.textSize=Math.max(9,Math.round(.15*n)),this.stars.textColor=i>=7?16769126:VIi,oki(this.stars,n-2*r-4),this.stars.position.set((n-this.stars.width)/2,l+(c-this.stars.height)/2)}
+ this.marks.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const u=Math.max(9,Math.round(.15*n));
+ if(null!==t&&(e.on||e.lock)){
+ const t=(new ip).circle(u-4,u-4,u+2).fill(this.ring).circle(u-4,u-4,u).fill(e.on?5030794:3816e3);
+ if(e.on&&t.moveTo(u-4-.45*u,u-4).lineTo(u-4-.1*u,u-4+.35*u).lineTo(u-4+.5*u,u-4-.35*u).stroke({
+ color:536604,width:Math.max(2,.24*u),cap:"round",join:"round"}
+ ),this.marks.addChild(t),e.lock&&!e.on){
+ const t=NIi("lock",1.2*u,13092812,2.6);
+ t.position.set(u-4-.6*u,u-4-.62*u),this.marks.addChild(t)}
+ }
+ if(null!==t&&e.pick){
+ const t=n-u+4,i=u-4,s=new ip;
+ "on"===e.pick?s.roundRect(-3,-3,n+6,n+6,o+3).stroke({
+ color:VIi,width:3.5}
+ ).circle(t,i,u+2).fill(this.ring).circle(t,i,u).fill(VIi).moveTo(t-.45*u,i).lineTo(t-.1*u,i+.35*u).lineTo(t+.5*u,i-.35*u).stroke({
+ color:jIi,width:Math.max(2,.24*u),cap:"round",join:"round"}
+ ):s.circle(t,i,u+2).fill(this.ring).circle(t,i,u).fill({
+ color:QIi,alpha:.8}
+ ).circle(t,i,u-1.2).stroke({
+ color:zIi,width:2.2}
+ ),this.marks.addChild(s)}
+ if(null!==t&&e.kept){
+ const t=e.up||e.pick?u-4:n-u+4,i=u-4;
+ this.marks.addChild(dBi((new ip).circle(t,i,u+2).fill(this.ring).circle(t,i,u).fill(uBi),t,i+.06*u,.5*u).fill(16777215))}
+ if(e.up){
+ const t=n-u+4,i=u-4;
+ this.marks.addChild((new ip).circle(t,i,u+2).fill(this.ring).circle(t,i,u).fill(15029053).poly([t,i-.45*u,t+.48*u,i+.32*u,t-.48*u,i+.32*u]).fill(16777215))}
+ }
+ }
+ ;
+ Qt(fBi,"GearCard");
+ let pBi=fBi;
+ const gBi=CRi.CONTENT_W;
+ function wBi(t,i){
+ try{
+ qG.getInstance().playSFX(t,i)}
+ catch{
+ }
+ }
+ Qt(wBi,"sfx");
+ const mBi=Qt((t,i)=>{
+ const s=vAi[t].unit;
+ return`${
+ s.endsWith("↓")?"−":"+"}
+ ${
+ Math.round(10*i)/10}
+ ${
+ s.replace("↓","")}
+ `}
+ ,"fmt"),vBi=Qt(t=>{
+ const i=RIi.getInstance().state.gearBox,s=AAi(t.id),e=new Set(Object.values((null==i?void 0:i.equipped)??{
+ }
+ ));
+ return((null==i?void 0:i.items)??[]).filter(i=>{
+ var n;
+ return i.star===t.star&&(null==(n=AAi(i.id))?void 0:n.slot)===s.slot&&!e.has(i.uid)}
+ ).length}
+ ,"freeSame"),_Bi=class t extends Ve{
+ constructor(){
+ super(...arguments),Zt(this,"card",new Ve),Zt(this,"shade",null)}
+ show(){
+ var i;
+ null==(i=t.current)||i.close(),t.current=this,CRi.getInstance().overlay.addChild(this),MR.fromTo(this.card,{
+ alpha:0,y:this.card.y+14}
+ ,{
+ alpha:1,y:this.card.y,duration:.18,ease:"power2.out"}
+ )}
+ frame(t,i){
+ const s=CRi.contentHeight,e=CRi.OVERLAY_PAD,n=!!this.shade;
+ this.shade||(this.shade=new ip,this.shade.eventMode="static",this.shade.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>this.close())}
+ ),this.eventMode="static",this.addChildAt(this.shade,0),this.card.eventMode="static",this.card.on("pointertap",t=>t.stopPropagation())),this.shade.clear().rect(-e,0,gBi+2*e,s).fill({
+ color:0,alpha:HIi}
+ );
+ const h=(new ip).roundRect(0,6,t,i,20).fill({
+ color:0,alpha:.35}
+ ).roundRect(0,0,t,i,20).fill(FIi);
+ h.eventMode="none",this.card.addChildAt(h,0),this.card.hitArea=new Ui(0,0,t,i);
+ const r=Math.max(10,(s-i)/2);
+ this.card.position.set((gBi-t)/2,n?Math.max(10,Math.min(this.card.y,s-i-10)):r),this.card.parent||this.addChild(this.card)}
+ closeX(t){
+ const i=new Ve,s=(new ip).moveTo(14,14).lineTo(30,30).moveTo(30,14).lineTo(14,30).stroke({
+ color:zIi,width:3,cap:"round"}
+ );
+ return s.eventMode="none",i.addChild(s),i.position.set(t-52,8),i.eventMode="static",i.cursor="pointer",i.hitArea=new Ui(0,0,44,44),i.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>this.close())}
+ ),i}
+ close(){
+ t.current===this&&(t.current=null),this.destroyed||this.destroy({
+ children:!0}
+ )}
+ closeOne(){
+ return this.close(),!0}
+ }
+ ;
+ Qt(_Bi,"GearOverlay"),Zt(_Bi,"current",null);
+ let MBi=_Bi;
+ const bBi=class t extends MBi{
+ static open(i){
+ RIi.getInstance().state.gear.boat+1<DAi.LEVELS&&new t(i).show()}
+ constructor(t){
+ super();
+ const i=RIi.getInstance().state,s=i.gear.boat,e=s+1,n=WSi.find(t=>"boat"===t.key),h=n.prices[e],r=Math.min(gBi-24,520),o=22,a=new Ye(nAi.boatBig(e));
+ a.anchor.set(.5),a.scale.set(88/(a.texture.frame.height||384)),a.position.set(62,58);
+ const c=rki(`다음 배 · ${
+ e+1}
+ 단계`,zIi,15,!1),l=rki(n.names[e],KIi,24);
+ c.position.set(116,25),l.position.set(116,50),oki(l,r-44-144),this.card.addChild(a,c,l,this.closeX(r));
+ const u={
+ ...i,gear:{
+ ...i.gear,boat:e}
+ }
+ ,d=[["기본 내구도",`${
+ DAi.MAX_HP[s]}
+  → ${
+ DAi.MAX_HP[e]}
+ `],["장비 포함 최대 내구도",`${
+ iSi(i)}
+  → ${
+ iSi(u)}
+ `],["장착 가능한 장비",`★${
+ CAi(s)}
+  → ★${
+ CAi(e)}
+ `]],f=e===DAi.ENTRY.C?"연안":e===DAi.ENTRY.O?"대양":"";
+ f&&d.push(["새로 갈 수 있는 지역",f]);
+ let p=116;
+ for(const[v,_]of d){
+ const t=rki(v,zIi,16,!1),i=rki(_,VIi,18);
+ t.position.set(o,p),i.position.set(r-o-i.width,p),oki(t,i.x-o-18),this.card.addChild(t,i,(new ip).moveTo(o,p+34).lineTo(r-o,p+34).stroke({
+ color:WIi,width:1}
+ )),p+=48}
+ const g=new pki(`${
+ h.toLocaleString()}
+  골드 · 업그레이드`,r-44,54,18);
+ g.position.set(o,p+4),g.enabled=i.gold>=h,g.onTap=()=>{
+ this.close(),t()}
+ ;
+ const w=Math.max(0,h-Math.floor(i.gold)),m=rki(w?`${
+ w.toLocaleString()}
+  골드 부족 · 보유 ${
+ Math.floor(i.gold).toLocaleString()}
+ `:`보유 골드 ${
+ Math.floor(i.gold).toLocaleString()}
+ `,w?XIi:zIi,15,!1);
+ oki(m,r-44),m.position.set((r-m.width)/2,p+72),this.card.addChild(g,m),this.frame(r,p+116)}
+ }
+ ;
+ Qt(bBi,"BoatUpgradePanel");
+ let yBi=bBi;
+ const EBi=class t extends MBi{
+ static open(i){
+ new t(i).show()}
+ constructor(i){
+ super();
+ const s=RIi.getInstance().state,e=s.gearBox,n=CAi(s.gear.boat),h=new Set(Object.values((null==e?void 0:e.equipped)??{
+ }
+ )),r=xAi(e,i,n),o=((null==e?void 0:e.items)??[]).filter(t=>{
+ var s;
+ return(null==(s=AAi(t.id))?void 0:s.slot)===i}
+ ).sort((t,i)=>Number(h.has(i.uid))-Number(h.has(t.uid))||i.star-t.star||t.uid-i.uid),a=Math.min(gBi-24,520),c=Math.floor((a-40-48)/5),l=new Ye(lBi(i));
+ l.anchor.set(.5),l.scale.set(44/(l.texture.frame.width||128)),l.position.set(42,42);
+ const u=rki(SAi[i],KIi,22),d=mki(`${
+ o.length}
+ `,zIi,$Ii,14,9);
+ u.position.set(74,28),d.position.set(u.x+u.width+10,32),this.card.addChild(l,u,d,this.closeX(a));
+ let f=84;
+ if(o.length){
+ if(o.slice(0,t.MAX).forEach((t,e)=>{
+ var o,a;
+ const l=new pBi(c);
+ l.ring=FIi,l.set(t.id,t.star,void 0,{
+ on:h.has(t.uid),lock:!h.has(t.uid)&&t.star>n,up:(null==r?void 0:r.uid)===t.uid,kept:!!(null==(a=null==(o=s.gearBox)?void 0:o.kept)?void 0:a.includes(t.uid))}
+ ),l.position.set(20+e%5*(c+12),f+Math.floor(e/5)*(c+12)),l.eventMode="static",l.cursor="pointer",l.hitArea=new Ui(0,0,c,c),l.on("pointertap",s=>{
+ s.stopPropagation(),queueMicrotask(()=>TBi.open(t,i))}
+ ),this.card.addChild(l)}
+ ),f+=Math.ceil(Math.min(o.length,t.MAX)/5)*(c+12)-12,o.length>t.MAX){
+ const t=new pki(`가방에서 모두 보기 (${
+ o.length}
+ )`,a-40,50,16);
+ t.setPrimary(!1),t.position.set(20,f+16),t.onTap=()=>{
+ this.close(),ei(()=>Promise.resolve().then(()=>lUi),void 0).then(t=>t.FishingGearPage.getInstance().showMode("bag",i))}
+ ,this.card.addChild(t),f+=66}
+ }
+ else{
+ const t=rki(`아직 ${
+ SAi[i]}
+  장비가 없어요. 장비 상자에서 나와요`,zIi,15,!1);
+ t.position.set(20,f),oki(t,a-40);
+ const s=new pki("장비 상자로",a-40,56,17);
+ s.position.set(20,f+40),s.onTap=()=>{
+ this.close(),ei(()=>Promise.resolve().then(()=>lUi),void 0).then(t=>t.FishingGearPage.getInstance().showMode("chest"))}
+ ,this.card.addChild(t,s),f+=96}
+ this.frame(a,f+20)}
+ }
+ ;
+ Qt(EBi,"GearSlotPanel"),Zt(EBi,"MAX",15);
+ let ABi=EBi;
+ const SBi=class t extends MBi{
+ constructor(t,i){
+ super(),Zt(this,"busy",!1),Zt(this,"openStat",null),this.it=t,this.from=i,this.build()}
+ static open(i,s){
+ new t(i,s).show()}
+ rebuild(){
+ this.card.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),this.build()}
+ build(){
+ var t,i,s;
+ const e=this.it,n=this.from,h=RIi.getInstance().state,r=AAi(e.id),o=CAi(h.gear.boat),a=null==(t=h.gearBox)?void 0:t.equipped[r.slot],c=a===e.uid,l=e.star>o,u=vBi(e),d=!!(null==(s=null==(i=h.gearBox)?void 0:i.kept)?void 0:s.includes(e.uid)),f=Math.min(gBi-24,500),p=20;
+ let g=p;
+ if(n){
+ const t=new Ve,i=rki(SAi[n],zIi,15),s=i.width+40;
+ t.addChild((new ip).roundRect(0,0,s,38,11).fill($Ii).moveTo(20,12).lineTo(13,19).lineTo(20,26).stroke({
+ color:zIi,width:3,cap:"round",join:"round"}
+ ),i),i.position.set(28,(38-i.height)/2),t.position.set(p,g-6),t.eventMode="static",t.cursor="pointer",t.hitArea=new Ui(0,0,s,38),t.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>ABi.open(n))}
+ ),this.card.addChild(t),g+=44}
+ this.card.addChild(this.closeX(f));
+ const w=new pBi(124);
+ w.ring=FIi,w.set(e.id,e.star,void 0,{
+ on:c,kept:d}
+ ),w.position.set(p,g);
+ const m=rki(r.name,KIi,24);
+ m.position.set(164,g+16),oki(m,f-p-144-56);
+ const v=new Ve;
+ let _=0;
+ const M=Qt((t,i,s=!1)=>{
+ const e=new Ve,n=rki(t,i,14),h=s?28:11,r=n.height+10,o=h+n.width+11;
+ if(e.addChild((new ip).roundRect(0,0,o,r,r/2).fill($Ii),n),n.position.set(h,5),s){
+ const t=NIi("lock",15,i,2.6);
+ t.position.set(9,(r-15)/2),e.addChild(t)}
+ e.x=_,v.addChild(e),_+=o+8}
+ ,"addPill");
+ M(SAi[r.slot],zIi),M(`★${
+ e.star}
+ `,VIi),c?M("장착 중",qIi):l&&M(`배 ${
+ e.star}
+ 단계부터`,XIi,!0),v.position.set(164,g+62);
+ const b=new Ve,y=rki(d?"아끼는 장비":"아끼기",d?uBi:zIi,14),E=40+y.width+12,A=(new ip).roundRect(0,0,E,34,17).fill(d?4860469:$Ii);
+ dBi(A,22,18,8),d?A.fill(uBi):A.stroke({
+ color:zIi,width:2.2,join:"round"}
+ ),y.position.set(40,(34-y.height)/2),b.addChild(A,y),b.position.set(164,g+124-34),b.eventMode="static",b.cursor="pointer",b.hitArea=new Ui(-6,-6,E+12,46),b.on("pointertap",t=>{
+ t.stopPropagation(),this.toggleKeep(!d)}
+ ),this.card.addChild(w,m,v,b),g+=142;
+ const S=OAi(e.id,e.star),T=f-40,C=r.stats.map((t,i)=>{
+ const s=void 0!==S[t]&&(i<2||e.star>=5),n=this.openStat===t,h=n?rki(`${
+ s?"":"★5가 되면 생겨요 · "}
+ ${
+ _Ai(t)}
+ `,12763848,14,!1):null;
+ return null==h||h.setWrapWidth(T-66),{
+ k:t,i,has:s,open:n,help:h,h:50+(h?h.height+12:0)}
+ }
+ ),O=C.reduce((t,i)=>t+i.h,0)+8,I=aki(T,O,$Ii,null,14);
+ I.position.set(p,g),this.card.addChild(I);
+ let k=g+4;
+ for(const{
+ k:P,i:N,has:L,open:D,help:G,h:B}
+ of C){
+ const t=new Ve;
+ t.position.set(p,k),N&&t.addChild((new ip).rect(14,0,T-28,1).fill({
+ color:16777215,alpha:.06}
+ )),D&&t.addChild((new ip).roundRect(4,2,T-8,B-4,10).fill({
+ color:16777215,alpha:.04}
+ ));
+ const i=NIi(L?P:"lock",22,L?VIi:5921376);
+ i.position.set(16,14);
+ const s=rki(vAi[P].name,L?0===N?KIi:14079706:7829373,0===N?17:16,0===N&&L);
+ s.position.set(50,(50-s.height)/2);
+ const e=new Ve,n=D?VIi:9342611,h=rki("i",n,12);
+ e.addChild((new ip).circle(9,9,8.5).stroke({
+ color:n,width:1.6}
+ ),h),h.position.set(9-h.width/2,9-h.height/2),e.position.set(s.x+s.width+8,16);
+ const r=rki(L?mBi(P,S[P]):"★5부터",L?0===N?VIi:KIi:7829373,0===N?18:16,L);
+ r.position.set(T-16-r.width,(50-r.height)/2),t.addChild(i,s,e,r),G&&(G.position.set(50,46),t.addChild(G)),t.eventMode="static",t.cursor="pointer",t.hitArea=new Ui(0,0,T,B),t.on("pointertap",t=>{
+ t.stopPropagation(),this.openStat=D?null:P,jG("light"),queueMicrotask(()=>{
+ this.destroyed||this.rebuild()}
+ )}
+ ),this.card.addChild(t),k+=B}
+ if(g+=O+18,e.star<7){
+ const t=!c&&u>=3,i=168,s=rki("합성",zIi,15);
+ s.position.set(p,g+12);
+ const n=rki(`같은 ${
+ SAi[r.slot]}
+  ★${
+ e.star}
+  ${
+ u}
+ 개`,t?13092812:YIi,15,!1);
+ n.position.set(76,g+12),oki(n,f-p-i-10-76);
+ const h=new pki("이 장비로 합성",i,44,15);
+ h.setPrimary(t),h.enabled=t,h.position.set(f-p-i,g),h.onTap=()=>{
+ this.close(),ei(()=>Promise.resolve().then(()=>lUi),void 0).then(t=>t.FishingGearPage.getInstance().openMerge(e))}
+ ,this.card.addChild(s,n,h),g+=62}
+ const R=f-40,x=new pki(c?"해제":l?`배 ${
+ e.star}
+ 단계부터 장착`:a?"바꿔 장착":"장착",R,60,19);
+ if(x.setPrimary(!c),x.enabled=c||!l,x.position.set(p,g),x.onTap=()=>{
+ this.toggle(c,r.slot)}
+ ,this.card.addChild(x),g+=60,c){
+ const t=rki("장착 중인 장비는 합성에 쓰지 않아요",YIi,13,!1);
+ t.position.set((f-t.width)/2,g+10),this.card.addChild(t),g+=30}
+ this.frame(f,g+p)}
+ async toggle(t,i){
+ if(this.busy)return;
+ this.busy=!0;
+ const s=RIi.getInstance(),e=t?await s.gearUnequip(i):await s.gearEquip(this.it.uid);
+ this.busy=!1,e?vH.getInstance().showMessage(e):(jG("light"),wBi(qG.SFX_STONE_BREAK,.3),vH.getInstance().showMessage(t?`${
+ SAi[i]}
+  해제`:`${
+ AAi(this.it.id).name}
+  ★${
+ this.it.star}
+  장착`),this.close())}
+ async toggleKeep(t){
+ if(this.busy)return;
+ this.busy=!0;
+ const i=await RIi.getInstance().gearKeep(this.it.uid,t);
+ this.busy=!1,i?vH.getInstance().showMessage(i):(jG("light"),this.destroyed||this.rebuild())}
+ }
+ ;
+ Qt(SBi,"GearDetailPanel");
+ let TBi=SBi;
+ const CBi=class t extends MBi{
+ constructor(t,i,s){
+ super(),Zt(this,"reveal",MR.timeline()),this.on("removed",()=>this.close());
+ const e=Math.min(gBi-16,540),n=Math.min(5,Math.max(1,t.length)),h=Math.min(110,Math.floor((e-40-48)/5));
+ let r=20;
+ const o=s?nAi.gearChest(!0):null;
+ if(o){
+ const t=new Ye(o);
+ t.anchor.set(.5,0),t.scale.set(150/o.frame.width),t.position.set(e/2,r-12),this.card.addChild(t),this.reveal.fromTo(t.scale,{
+ x:90/o.frame.width,y:90/o.frame.width}
+ ,{
+ x:150/o.frame.width,y:150/o.frame.width,duration:.35,ease:"back.out(2.2)"}
+ ,0),r+=130}
+ const a=rki(i,VIi,22);
+ a.position.set((e-a.width)/2,r),this.card.addChild(a),r+=a.height+16;
+ const c=Math.ceil(t.length/n),l=n*h+12*(n-1),u=Math.max(0,...t.map(t=>t.star));
+ t.forEach((t,i)=>{
+ const s=new Ve,a=new pBi(h),c=AAi(t.id),u=.08*i+(o?.2:0);
+ s.position.set((e-l)/2+i%n*(h+12),r+Math.floor(i/n)*(h+34)),a.ring=FIi,a.set(t.id,t.star);
+ const d=rki(c.name,t.star>=4?VIi:13092812,13,!1);
+ oki(d,h+8),d.position.set((h-d.width)/2,h+5),s.addChild(a,d),this.card.addChild(s),s.alpha=0,this.reveal.fromTo(s,{
+ alpha:0,y:s.y+18}
+ ,{
+ alpha:1,y:s.y,duration:.22,ease:"back.out(2)"}
+ ,u)}
+ ),r+=c*(h+34)+6,u>=4?(wBi(qG.SFX_TRUMPET,.5),jG("heavy")):u>=3&&wBi(qG.SFX_GOLD_GOBLIN,.45);
+ const d=(e-40-10)/2,f=new pki("내 배로",d,56,17),p=new pki("확인",d,56,17);
+ f.setPrimary(!1),f.position.set(20,r),p.position.set(20+d+10,r),f.onTap=()=>{
+ this.close(),ei(()=>Promise.resolve().then(()=>lUi),void 0).then(t=>t.FishingGearPage.getInstance().showMode("boat"))}
+ ,p.onTap=()=>this.close(),this.card.addChild(f,p),this.frame(e,r+56+20)}
+ static open(i,s,e=!1){
+ new t(i,s,e).show()}
+ destroy(t){
+ this.reveal.kill(),MR.killTweensOf(this.card),super.destroy(t??{
+ children:!0}
+ )}
+ }
+ ;
+ Qt(CBi,"GearRevealPanel");
+ let OBi=CBi;
+ const IBi=CRi.CONTENT_W,kBi=WSi.find(t=>"boat"===t.key);
+ function RBi(t,i,s,e){
+ const n=new pki("",i,s,17),h=rki(t,jIi,18),r=_ki("gold",18),o=rki("",jIi,15);
+ n.setPrimary(e),n.addChild(h,r,o);
+ const a=Qt((t,a,c=!1)=>{
+ const l=null!==t&&a<t,u=null!==t&&!l&&!c;
+ n.enabled=u;
+ const d=u?e?jIi:KIi:iki;
+ h.textColor=d,o.text=null===t?"":t.toLocaleString(),o.textColor=l?XIi:d,r.visible=null!==t;
+ const f=23+o.width;
+ h.position.set((i-h.width)/2,null===t?(s-h.height)/2:.5*s-h.height-1),r.position.set((i-f)/2,.5*s+4),o.position.set(r.x+23,.5*s+2)}
+ ,"set");
+ return{
+ btn:n,set:a}
+ }
+ Qt(RBi,"priceButton");
+ const xBi={
+ prow:[.5,0],compass:[0,0],deck:[0,1],anchor:[0,2],toolbox:[1,0],sail:[1,1],lantern:[1,2]}
+ ,PBi=84,NBi=["hp","speed","repair"],LBi=Qt((t,i)=>{
+ const s=vAi[t].unit;
+ return`${
+ s.endsWith("↓")?"−":"+"}
+ ${
+ Math.round(10*i)/10}
+ ${
+ s.replace("↓","")}
+ `}
+ ,"statValue"),DBi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"heading",new Ve),Zt(this,"dock",new Ve),Zt(this,"water",new ip),Zt(this,"waterMask",new ip),Zt(this,"boat",new Ye),Zt(this,"slots",pAi.map(t=>{
+ const i=new Ve,s=new pBi(PBi,!0),e=rki(SAi[t],12898518,16),n=rki("미장착",11188415,13,!1);
+ return s.ring=1914434,n.position.set((PBi-n.width)/2,PBi-n.height-5),i.addChild(s,n,e),i.eventMode="static",i.cursor="pointer",i.hitArea=new Ui(-6,-6,96,114),i.on("pointertap",i=>{
+ i.stopPropagation(),queueMicrotask(()=>ABi.open(t))}
+ ),{
+ slot:t,root:i,card:s,name:e,empty:n}
+ }
+ )),Zt(this,"auto",new pki("자동 장착",146,36,15)),Zt(this,"info",new Ve),Zt(this,"moreStats",new Ve),Zt(this,"moreLabel",rki("",zIi,15,!1)),Zt(this,"expanded",!1),Zt(this,"next",new Ve),Zt(this,"details",new pki("›",44,44,28)),Zt(this,"up",new pki("",IBi-32,48,17)),Zt(this,"upCoin",_ki("gold",20)),Zt(this,"upTitle",rki("",jIi,17)),Zt(this,"upNote",rki("",zIi,15,!1)),Zt(this,"busy",!1),Zt(this,"sig",""),this.water.eventMode="none",this.waterMask.eventMode="none",this.water.mask=this.waterMask,this.boat.anchor.set(.5),this.boat.eventMode="none",this.auto.onTap=()=>{
+ this.autoEquip()}
+ ,this.auto.setPrimary(!1),this.moreStats.addChild(this.moreLabel),this.moreStats.eventMode="static",this.moreStats.cursor="pointer",this.moreStats.on("pointertap",t=>{
+ t.stopPropagation(),this.expanded=!this.expanded,this.update(),this.expanded||CRi.getInstance().resetScroll()}
+ ),this.details.setPrimary(!1),this.details.onTap=()=>yBi.open(()=>{
+ this.upgrade()}
+ ),this.up.onTap=()=>{
+ this.upgrade()}
+ ,this.up.addChild(this.upCoin,this.upTitle,this.upNote),this.dock.addChild(this.water,this.waterMask,this.boat,...this.slots.map(t=>t.root)),this.dock.y=88,this.addChild(this.heading,this.dock,this.auto,this.info,this.next)}
+ get upgradeButton(){
+ return this.up.parent?this.up:null}
+ dockH(){
+ return Math.round(Math.min(440,Math.max(360,CRi.contentHeight-420)))}
+ update(){
+ const t=RIi.getInstance().state,i=t.gearBox,s=t.gear.boat,e=`${
+ this.dockH()}
+ |${
+ s}
+ |${
+ Math.floor(t.gold)}
+ |${
+ this.busy}
+ |${
+ this.expanded}
+ |${
+ JSON.stringify((null==i?void 0:i.equipped)??{
+ }
+ )}
+ |${
+ ((null==i?void 0:i.items)??[]).map(t=>`${
+ t.uid}
+ .${
+ t.id}
+ .${
+ t.star}
+ `).join(",")}
+ `;
+ e!==this.sig&&(this.sig=e,this.draw())}
+ draw(){
+ const t=RIi.getInstance(),i=t.state,s=i.gearBox,e=i.gear.boat,n=CAi(e),h=this.dockH(),r=pAi.filter(t=>null==s?void 0:s.items.some(i=>i.uid===s.equipped[t])),o=pAi.filter(t=>xAi(s,t,n));
+ this.heading.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const a=rki(kBi.names[e],KIi,30);
+ a.position.set(2,4),oki(a,IBi-170);
+ const c=rki(`${
+ e+1}
+  / ${
+ kBi.names.length}
+ 단계`,zIi,16,!1);
+ c.position.set(2,52);
+ const l=new ip,u=c.x+c.width+12;
+ for(let x=0;
+ x<kBi.names.length;
+ x++)l.roundRect(u+15*x,60,11,5,2.5).fill(x<=e?VIi:UIi);
+ const d=rki(`장비 ★${
+ n}
+ 까지`,VIi,16);
+ d.position.set(u+15*kBi.names.length+10,52);
+ const f=rki(`장착 장비  ${
+ r.length}
+  / ${
+ pAi.length}
+ `,zIi,16,!1);
+ f.position.set(IBi-f.width,12),this.heading.addChild(a,c,l,d,f),this.auto.visible=o.length>0,this.auto.enabled=!this.busy,this.auto.setText(`자동 장착 ${
+ o.length}
+ `),this.auto.position.set(IBi-146,43);
+ const p=IBi/2,g=(h+112)/2;
+ this.water.clear().rect(0,0,IBi,h).fill(1778217);
+ for(const[x,P,N]of[[.62,.62,1715254],[.5,.5,1782848],[.4,.41,2047050],[.3,.32,2245715],[.2,.22,2443610]])this.water.ellipse(p,g,IBi*x,h*P).fill({
+ color:N,alpha:.9}
+ );
+ for(const x of[.34,.46])this.water.ellipse(p,g,IBi*x*.8,h*x).stroke({
+ color:10542320,width:1.5,alpha:.07}
+ );
+ this.waterMask.clear().roundRect(0,0,IBi,h,24).fill(16777215),this.boat.texture=nAi.boatBig(e),this.boat.scale.set(Math.min(.74*h,IBi-216)/(this.boat.texture.frame.height||384)),this.boat.position.set(p,g),this.slots.forEach(({
+ slot:t,root:i,card:e,name:r,empty:a}
+ )=>{
+ const c=null==s?void 0:s.items.find(i=>i.uid===s.equipped[t]);
+ e.set(c?c.id:null,(null==c?void 0:c.star)??0,t,{
+ lock:!!c&&c.star>n,up:o.includes(t)}
+ ),a.visible=!c,r.position.set((PBi-r.width)/2,89);
+ const[l,u]=xBi[t],d=(h-28-PBi-26)/2;
+ i.position.set(.5===l?(IBi-PBi)/2:0===l?22:IBi-22-PBi,14+u*d)}
+ );
+ const w=this.info;
+ w.removeChildren().forEach(t=>{
+ t!==this.moreStats&&t.destroy({
+ children:!0}
+ )}
+ ),w.y=88+h+14;
+ const m=rki("장비 효과",KIi,19);
+ m.position.set(2,2),w.addChild(m);
+ const v=t.gearStats(),_=[...NBi,...gAi.filter(t=>!NBi.includes(t))].filter(t=>v[t]>0),M=_.slice(0,3),b=_.slice(3);
+ this.moreStats.visible=b.length>0,this.moreLabel.text=this.expanded?"접기 ∧":`전체 ${
+ _.length}
+ 개 보기 ∨`,this.moreStats.position.set(IBi-this.moreLabel.width-4,6),this.moreStats.hitArea=new Ui(-12,-9,this.moreLabel.width+16,38),w.addChild(this.moreStats);
+ let y=40;
+ if(_.length){
+ const t=aki(IBi,84,GIi,null,16),i=IBi/M.length,s=new ip;
+ t.y=y,w.addChild(t,s),M.forEach((t,e)=>{
+ const n=e*i+18,h=rki(vAi[t].name,zIi,16,!1),r=rki(LBi(t,v[t]),VIi,27);
+ h.position.set(n,y+10),r.position.set(n,y+36),oki(h,i-32),oki(r,i-32),e&&s.moveTo(e*i,y+14).lineTo(e*i,y+70).stroke({
+ color:WIi,width:1}
+ ),w.addChild(h,r)}
+ )}
+ else{
+ const t=aki(IBi,84,GIi,null,16);
+ t.y=y;
+ const i=rki("빈 슬롯을 눌러 장비를 장착해 보세요",zIi,16,!1);
+ i.position.set(18,y+28),oki(i,IBi-36),w.addChild(t,i)}
+ if(y+=84,this.expanded&&b.length){
+ y+=12;
+ const t=aki(IBi,34*Math.ceil(b.length/2)+24,GIi,null,16);
+ t.y=y,w.addChild(t),b.forEach((t,i)=>{
+ const s=18+i%2*(IBi/2),e=y+12+34*Math.floor(i/2),n=rki(vAi[t].name,zIi,15,!1),h=rki(LBi(t,v[t]),VIi,16);
+ h.position.set(s+IBi/2-38-h.width,e),oki(n,h.x-s-10),n.position.set(s,e),w.addChild(n,h)}
+ ),y+=t.height}
+ const E=this.next;
+ E.removeChildren().forEach(t=>{
+ t!==this.up&&t!==this.details&&t.destroy({
+ children:!0}
+ )}
+ ),E.y=w.y+y+14;
+ const A=e+1;
+ if(A>=kBi.names.length){
+ const t=mki("가장 좋은 배예요",VIi,GIi,15,14);
+ return void E.addChild(t)}
+ E.addChild(aki(IBi,168,2894632,6115378,18));
+ const S=new Ye(nAi.boatBig(A));
+ S.anchor.set(.5),S.scale.set(72/(S.texture.frame.height||384)),S.position.set(50,46);
+ const T=rki(`다음 배 · ${
+ A+1}
+ 단계`,zIi,15,!1),C=rki(kBi.names[A],KIi,23),O=A===DAi.ENTRY.C?"연안":A===DAi.ENTRY.O?"대양":"",I=rki(`기본 내구도 ${
+ DAi.MAX_HP[e]}
+  → ${
+ DAi.MAX_HP[A]}
+  · ★${
+ CAi(A)}
+  장비${
+ O?` · ${
+ O}
+  해금`:""}
+ `,14206864,16,!1);
+ T.position.set(94,14),C.position.set(94,37),I.position.set(18,83),oki(C,IBi-176),oki(I,IBi-36),this.details.position.set(IBi-62,23),this.up.position.set(16,108);
+ const k=kBi.prices[A],R=Math.max(0,k-Math.floor(i.gold));
+ this.up.enabled=!this.busy&&!R,this.upTitle.text=`${
+ k.toLocaleString()}
+  · 업그레이드`,this.upTitle.textColor=this.up.enabled?jIi:14011049,this.upNote.text=R?`${
+ R.toLocaleString()}
+  골드 부족`:this.busy?"처리 중":"",this.upNote.textColor=R?14005387:zIi,this.upCoin.position.set(13,14),this.upTitle.position.set(41,(48-this.upTitle.height)/2),this.upNote.position.set(IBi-48-this.upNote.width,(48-this.upNote.height)/2),oki(this.upTitle,(this.upNote.text?this.upNote.x-12:IBi-48)-this.upTitle.x),E.addChild(S,T,C,I,this.details,this.up)}
+ async autoEquip(){
+ if(this.busy)return;
+ this.busy=!0,this.update();
+ const t=await RIi.getInstance().gearEquipBest().finally(()=>{
+ this.busy=!1,this.update()}
+ );
+ if(t.message)return vH.getInstance().showMessage(t.message),void this.update();
+ jG("success");
+ try{
+ qG.getInstance().playSFX(qG.SFX_STONE_BREAK,.35)}
+ catch{
+ }
+ vH.getInstance().showMessage(t.n?`${
+ t.n}
+ 칸을 더 좋은 장비로 바꿨어요`:"이미 가장 좋은 장비예요"),this.update();
+ for(const i of this.slots)MR.fromTo(i.card.scale,{
+ x:1.12,y:1.12}
+ ,{
+ x:1,y:1,duration:.35,ease:"back.out(3)"}
+ )}
+ async upgrade(){
+ if(this.busy)return;
+ const t=RIi.getInstance(),i=kBi.prices[t.state.gear.boat+1];
+ if(void 0===i||t.state.gold<i)return;
+ let s;
+ this.busy=!0,this.update();
+ try{
+ s=await t.upgrade("boat")}
+ finally{
+ this.busy=!1,this.update()}
+ if(s)return vH.getInstance().showMessage(s),void this.update();
+ vH.getInstance().showMessage(`배: ${
+ kBi.names[t.state.gear.boat]}
+ (으)로 올렸어요`),jG("success"),qG.getInstance().playSFX(qG.SFX_LEVEL_UP),this.update();
+ const e=this.boat.scale.x;
+ MR.fromTo(this.boat.scale,{
+ x:1.15*e,y:1.15*e}
+ ,{
+ x:e,y:e,duration:.5,ease:"back.out(3)"}
+ )}
+ }
+ ;
+ Qt(DBi,"FishingMyBoatView");
+ let GBi=DBi;
+ const BBi=IBi/6,UBi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"filter",null),Zt(this,"onMerge",null),Zt(this,"count",rki("",KIi,18)),Zt(this,"merge",new pki("합성",190,50,16)),Zt(this,"chips",[]),Zt(this,"grid",new Ve),Zt(this,"cards",[]),Zt(this,"shown",[]),Zt(this,"sig",""),this.count.position.set(2,12),this.merge.position.set(IBi-190,0),this.merge.onTap=()=>{
+ var t;
+ return null==(t=this.onMerge)?void 0:t.call(this)}
+ ,this.addChild(this.count,this.merge,this.grid);
+ const t=(IBi-56)/8;
+ for(let i=0;
+ i<8;
+ i++){
+ const s=new Ve;
+ s.position.set(i*(t+8),66),s.eventMode="static",s.cursor="pointer",s.hitArea=new Ui(0,0,t,t);
+ const e=i?pAi[i-1]:null;
+ s.on("pointertap",t=>{
+ t.stopPropagation(),this.filter=this.filter!==e&&e?e:null,this.sig="",this.update(),CRi.getInstance().resetScroll()}
+ ),this.chips.push(s),this.addChild(s)}
+ this.grid.y=66+t+18}
+ update(){
+ const t=RIi.getInstance().state,i=t.gearBox,s=CAi(t.gear.boat),e=`${
+ this.filter}
+ |${
+ s}
+ |${
+ JSON.stringify((null==i?void 0:i.equipped)??{
+ }
+ )}
+ |${
+ ((null==i?void 0:i.kept)??[]).join(".")}
+ |${
+ ((null==i?void 0:i.items)??[]).map(t=>`${
+ t.uid}
+ .${
+ t.star}
+ `).join(",")}
+ `;
+ if(e===this.sig)return;
+ this.sig=e;
+ const n=(null==i?void 0:i.items)??[],h=new Set(Object.values((null==i?void 0:i.equipped)??{
+ }
+ )),r=new Set((null==i?void 0:i.kept)??[]);
+ this.count.text=`가방 ${
+ n.length}
+  / 400`,this.merge.setPrimary(PAi(i).length>0),this.merge.enabled=NAi(i).length>0;
+ const o=(IBi-56)/8;
+ this.chips.forEach((t,i)=>{
+ t.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const s=i?pAi[i-1]:null,e=this.filter===s,n=(new ip).roundRect(0,0,o,o,14).fill(e?4865308:GIi);
+ if(e&&n.roundRect(1.5,1.5,o-3,o-3,13).stroke({
+ color:VIi,width:2.5}
+ ),t.addChild(n),!s){
+ const i=rki("전체",e?VIi:13092812,15);
+ return i.position.set((o-i.width)/2,(o-i.height)/2),void t.addChild(i)}
+ const h=new Ye(lBi(s));
+ h.anchor.set(.5),h.scale.set(.8*o/(h.texture.frame.width||128)),h.position.set(o/2,o/2),h.alpha=e?1:.7,t.addChild(h)}
+ );
+ const a=n.filter(t=>{
+ var i;
+ return!this.filter||(null==(i=AAi(t.id))?void 0:i.slot)===this.filter}
+ ).sort((t,i)=>Number(h.has(i.uid))-Number(h.has(t.uid))||pAi.indexOf(AAi(t.id).slot)-pAi.indexOf(AAi(i.id).slot)||i.star-t.star||t.id-i.id);
+ for(;
+ this.cards.length<a.length;
+ ){
+ const t=new pBi(82),i=this.cards.length;
+ t.eventMode="static",t.cursor="pointer",t.hitArea=new Ui(-4,-4,90,90),t.on("pointertap",t=>{
+ var s;
+ t.stopPropagation();
+ const e=this.shown[i],n=null==(s=RIi.getInstance().state.gearBox)?void 0:s.items.find(t=>t.uid===e);
+ n&&queueMicrotask(()=>TBi.open(n))}
+ ),this.grid.addChild(t),this.cards.push(t)}
+ this.shown=a.map(t=>t.uid),this.cards.forEach((t,i)=>{
+ const e=a[i];
+ t.visible=!!e,e&&(t.set(e.id,e.star,void 0,{
+ on:h.has(e.uid),lock:!h.has(e.uid)&&e.star>s,kept:r.has(e.uid)}
+ ),t.position.set(i%6*BBi+(BBi-82)/2,96*Math.floor(i/6)))}
+ ),a.length||(this.count.text+=this.filter?` · ${
+ SAi[this.filter]}
+  없음`:"")}
+ }
+ ;
+ Qt(UBi,"FishingGearBagView");
+ let FBi=UBi;
+ const $Bi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"glow",new ip),Zt(this,"chest",new Ye),Zt(this,"title",rki("장비 상자",KIi,30)),Zt(this,"sub",rki("열면 배 장비 하나가 나와요",zIi,16,!1)),Zt(this,"odds",new Ve),Zt(this,"one",RBi("1개 열기",(IBi-12)/2,100,!1)),Zt(this,"ten",RBi("10개 열기",(IBi-12)/2,100,!0)),Zt(this,"bag",rki("",YIi,14,!1)),Zt(this,"bob",null),Zt(this,"busy",!1),Zt(this,"sig",""),this.glow.eventMode="none",this.chest.anchor.set(.5),this.chest.eventMode="none",this.one.btn.onTap=()=>{
+ this.pull(1)}
+ ,this.ten.btn.onTap=()=>{
+ this.pull(10)}
+ ;
+ let t=0;
+ for(const[i,s]of TAi){
+ const e=new Ve,n=rki(`★${
+ i}
+  ${
+ Math.round(100*s)}
+ %`,13092812,14),h=n.height+12,r=30+n.width+12;
+ e.addChild((new ip).roundRect(0,0,r,h,h/2).fill(GIi).roundRect(12,h/2-5,10,10,3).fill(LAi[i]),n),n.position.set(30,6),e.x=t,t+=r+8,this.odds.addChild(e)}
+ this.addChild(this.glow,this.chest,this.title,this.sub,this.odds,this.one.btn,this.ten.btn,this.bag)}
+ stop(){
+ var t;
+ null==(t=this.bob)||t.kill(),this.bob=null,this.sig=""}
+ update(){
+ var t,i,s;
+ const e=RIi.getInstance().state,n=CRi.contentHeight,h=`${
+ n}
+ |${
+ e.gold}
+ |${
+ this.busy}
+ |${
+ (null==(t=e.gearBox)?void 0:t.items.length)??0}
+ `;
+ if(h===this.sig)return;
+ this.sig=h;
+ const r=Math.max(8,(n-612)/2),o=nAi.gearChest(!1)??cBi(55);
+ this.chest.texture=o,this.chest.scale.set(300/(o.frame.width||384)),null==(i=this.bob)||i.kill(),this.bob=null,this.chest.position.set(IBi/2,r+150),this.visible&&(this.bob=MR.to(this.chest,{
+ y:"-=8",duration:1.3,yoyo:!0,repeat:-1,ease:"sine.inOut"}
+ )),this.glow.clear();
+ for(const[c,l]of[[1,.05],[.78,.07],[.56,.09],[.36,.1]])this.glow.circle(IBi/2,r+150,186*c).fill({
+ color:16106577,alpha:l}
+ );
+ let a=r+300+20;
+ this.title.position.set((IBi-this.title.width)/2,a),a+=40,this.sub.position.set((IBi-this.sub.width)/2,a),a+=50,this.odds.position.set((IBi-this.odds.width)/2,a),a+=64,this.one.btn.position.set(0,a),this.ten.btn.position.set((IBi-12)/2+12,a),this.one.set(100,e.gold,this.busy),this.ten.set(1e3,e.gold,this.busy),a+=118,this.bag.text=`가방 ${
+ (null==(s=e.gearBox)?void 0:s.items.length)??0}
+  / 400`,this.bag.position.set((IBi-this.bag.width)/2,a)}
+ async pull(t){
+ if(!this.busy){
+ this.busy=!0,this.update();
+ try{
+ const i=await RIi.getInstance().gearPull(t);
+ if(i.message||!i.result)return void vH.getInstance().showMessage(i.message??"열지 못했어요");
+ jG("medium"),OBi.open(i.result,`상자 ${
+ t}
+ 개`,!0)}
+ finally{
+ this.busy=!1,this.sig="",this.update()}
+ }
+ }
+ }
+ ;
+ Qt($Bi,"FishingGearChestView");
+ let HBi=$Bi;
+ const WBi=CRi.CONTENT_W,VBi=(WBi-24)/6,jBi=Math.min(82,Math.floor(VBi-14)),KBi=jBi+18,zBi=[{
+ q:"s1",text:"★1",max:1}
+ ,{
+ q:"s2",text:"★2 이하",max:2}
+ ,{
+ q:"all",text:"모두",max:6}
+ ];
+ function YBi(t,i,s,e,n,h=16){
+ const r=WBi,o=i+s,a=e?h:0,c=n?h:0;
+ return t.moveTo(0+a,i).lineTo(r-a,i),a&&t.arcTo(r,i,r,i+a,a),t.lineTo(r,o-c),c&&t.arcTo(r,o,r-c,o,c),t.lineTo(0+c,o),c&&t.arcTo(0,o,0,o-c,c),t.lineTo(0,i+a),a&&t.arcTo(0,i,0+a,i,a),t.closePath().fill(GIi)}
+ Qt(YBi,"part");
+ const qBi=class extends OR{
+ constructor(){
+ super(),Zt(this,"bg",new ip),Zt(this,"icon",new Ye),Zt(this,"slotName",rki("",KIi,18)),Zt(this,"stars",rki("",VIi,14)),Zt(this,"count",rki("",YIi,14)),Zt(this,"res",rki("",zIi,15)),Zt(this,"cells",[]),Zt(this,"row",null);
+ const t=(new ip).rect(0,0,WBi,KBi).fill({
+ color:0,alpha:.001}
+ );
+ t.eventMode=this.bg.eventMode=this.icon.eventMode="none",this.icon.anchor.set(.5),this.addChild(t,this.bg,this.icon,this.slotName,this.stars,this.count,this.res);
+ for(let i=0;
+ i<6;
+ i++){
+ const t=new Ve,s=new pBi(jBi);
+ s.ring=GIi,s.position.set((VBi-jBi)/2,6),t.addChild(s),t.position.set(12+i*VBi,0),t.eventMode="static",t.cursor="pointer",t.hitArea=new Ui(0,0,VBi,KBi),t.on("pointertap",t=>{
+ var s,e,n,h;
+ t.stopPropagation();
+ const r=null==(e=null==(s=this.row)?void 0:s.items)?void 0:e[i];
+ r&&(null==(h=(n=this.row).onPick)||h.call(n,r.it.uid))}
+ ),this.addChild(t),this.cells.push({
+ root:t,card:s}
+ )}
+ }
+ setData(t){
+ this.row=t;
+ const i=t.head;
+ if(this.bg.clear(),[this.icon,this.slotName,this.stars,this.count,this.res].forEach(t=>t.visible=!!i),i){
+ YBi(this.bg,14,KBi-14+1,!0,!1);
+ const t=14+(KBi-14)/2+2;
+ this.icon.texture=lBi(i.slot),this.icon.scale.set(44/(this.icon.texture.frame.width||128)),this.icon.position.set(38,t),this.slotName.text=SAi[i.slot],this.slotName.position.set(70,t-this.slotName.height/2),this.stars.text=MTi(i.star),this.stars.position.set(this.slotName.x+this.slotName.width+6,t-this.stars.height/2),this.count.text=`${
+ i.n}
+ 개`,this.count.position.set(this.stars.x+this.stars.width+10,t-this.count.height/2);
+ const s=Math.floor(i.picks/3),e=i.picks%3?3-i.picks%3:0;
+ this.res.text=s?`→ ★${
+ i.star+1}
+  × ${
+ s}
+ ${
+ e?` · ${
+ e}
+ 개 더`:""}
+ `:e?`${
+ e}
+ 개 더 고르면 ★${
+ i.star+1}
+ `:`3개 → ★${
+ i.star+1}
+ `,this.res.textColor=s?VIi:e?16757611:zIi,oki(this.res,WBi-12-(this.count.x+this.count.width+12)),this.res.position.set(WBi-12-this.res.width,t-this.res.height/2)}
+ else t.items&&YBi(this.bg,-1,(t.last?KBi-2:KBi)+1,!1,!!t.last);
+ this.cells.forEach((i,s)=>{
+ var e;
+ const n=null==(e=t.items)?void 0:e[s];
+ i.root.visible=!!n,n&&i.card.set(n.it.id,n.it.star,void 0,{
+ pick:n.picked?"on":"off",kept:n.kept}
+ )}
+ )}
+ }
+ ;
+ Qt(qBi,"MergeRow");
+ let XBi=qBi;
+ const JBi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"onClose",null),Zt(this,"bg",new ip),Zt(this,"back",new Ve),Zt(this,"title",rki("합성",KIi,20)),Zt(this,"hint",rki("같은 부위 · 같은 별 3개 → 별 하나 위",zIi,13,!1)),Zt(this,"quickChips",zBi.map(t=>new dki(t.text,120,44,15))),Zt(this,"clearChip",new dki("비우기",100,44,15)),Zt(this,"allChip",new dki("다른 장비도 보기",200,44,15)),Zt(this,"list",new TR(XBi,WBi,300,0)),Zt(this,"empty",rki("",YIi,15,!1)),Zt(this,"barBg",new ip),Zt(this,"barN",rki("",KIi,20)),Zt(this,"barSub",rki("",zIi,14,!1)),Zt(this,"barKept",new Ve),Zt(this,"barGo",new pki("합성",200,60,19)),Zt(this,"picked",[]),Zt(this,"quick",null),Zt(this,"only",null),Zt(this,"busy",!1),Zt(this,"sig",""),this.bg.eventMode="static";
+ const t=(new ip).roundRect(0,0,48,48,12).fill(GIi).moveTo(28,15).lineTo(19,24).lineTo(28,33).stroke({
+ color:KIi,width:3.5,cap:"round",join:"round"}
+ );
+ t.eventMode="none",this.back.addChild(t),this.back.eventMode="static",this.back.cursor="pointer",this.back.hitArea=new Ui(-6,-6,60,60),this.back.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>{
+ var t;
+ return null==(t=this.onClose)?void 0:t.call(this)}
+ )}
+ ),this.back.position.set(0,2),this.title.position.set(62,12);
+ const i=(WBi-100-32)/3;
+ this.quickChips.forEach((t,s)=>{
+ t.resize(i,44),t.position.set(s*(i+8),64),t.onTap=()=>this.pickQuick(zBi[s].q)}
+ ),this.clearChip.position.set(WBi-100,64),this.clearChip.onTap=()=>{
+ this.picked=[],this.quick=null,jG("light"),this.render()}
+ ,this.allChip.position.set(0,64),this.allChip.onTap=()=>{
+ this.only=null,this.render()}
+ ,this.list.y=120,this.empty.position.set(4,144),this.barBg.eventMode="none",this.barGo.onTap=()=>{
+ this.merge()}
+ ,this.addChild(this.bg,this.back,this.title,this.hint,...this.quickChips,this.clearChip,this.allChip,this.list,this.empty,this.barBg,this.barN,this.barSub,this.barKept,this.barGo),this.visible=!1}
+ get isOpen(){
+ return this.visible}
+ open(t){
+ if(this.picked=[],this.quick=null,this.only=null,this.sig="",t){
+ const i=AAi(t.id),s=RIi.getInstance().state.gearBox,e=new Set((null==s?void 0:s.kept)??[]),n=i&&NAi(s).find(s=>s.slot===i.slot&&s.star===t.star);
+ n&&(this.only={
+ slot:n.slot,star:n.star}
+ ,this.picked=[t.uid,...n.list.filter(i=>i.uid!==t.uid&&!e.has(i.uid)).slice(0,2).map(t=>t.uid)])}
+ this.visible=!0,this.render(),this.list.showTopItem()}
+ close(){
+ this.visible=!1,this.busy=!1}
+ update(){
+ this.visible&&this.render()}
+ groups(){
+ const t=NAi(RIi.getInstance().state.gearBox);
+ return this.only?t.filter(t=>t.slot===this.only.slot&&t.star===this.only.star):t}
+ pickQuick(t){
+ var i;
+ const s=new Set((null==(i=RIi.getInstance().state.gearBox)?void 0:i.kept)??[]);
+ if(this.picked=[],this.quick===t)this.quick=null;
+ else{
+ this.quick=t;
+ const i=zBi.find(i=>i.q===t).max;
+ for(const t of this.groups()){
+ if(t.star>i)continue;
+ const e=t.list.filter(t=>!s.has(t.uid));
+ this.picked.push(...e.slice(0,3*Math.floor(e.length/3)).map(t=>t.uid))}
+ }
+ jG("light"),this.render()}
+ toggle(t){
+ const i=this.picked.indexOf(t);
+ i>=0?this.picked.splice(i,1):this.picked.push(t),this.quick=null,queueMicrotask(()=>{
+ this.visible&&this.render()}
+ )}
+ plan(){
+ const t=RIi.getInstance().state.gearBox,i=new Set((null==t?void 0:t.kept)??[]),s=new Map,e=[],n=new Map;
+ for(const r of this.picked){
+ const i=null==t?void 0:t.items.find(t=>t.uid===r),e=i&&AAi(i.id);
+ if(!i||!e)continue;
+ const n=`${
+ e.slot}
+ |${
+ i.star}
+ `;
+ s.set(n,[...s.get(n)??[],r])}
+ let h=0;
+ for(const[r,o]of s){
+ const t=Number(r.split("|")[1]);
+ for(let s=0;
+ s+3<=o.length;
+ s+=3){
+ const r=o.slice(s,s+3);
+ e.push(r),h+=r.filter(t=>i.has(t)).length,n.set(t+1,(n.get(t+1)??0)+1)}
+ }
+ return{
+ triples:e,made:n,kept:h}
+ }
+ render(){
+ var t,i;
+ const s=RIi.getInstance().state.gearBox,e=CRi.contentHeight,n=CRi.OVERLAY_PAD,h=this.groups(),r=new Set(h.flatMap(t=>t.list.map(t=>t.uid)));
+ this.picked=this.picked.filter(t=>r.has(t));
+ const o=new Set((null==s?void 0:s.kept)??[]),a=`${
+ e}
+ |${
+ null==(t=this.only)?void 0:t.slot}
+ ${
+ null==(i=this.only)?void 0:i.star}
+ |${
+ this.quick}
+ |${
+ this.busy}
+ |${
+ this.picked.join(",")}
+ |${
+ [...o].join(",")}
+ |${
+ h.map(t=>`${
+ t.slot}
+ ${
+ t.star}
+ :${
+ t.list.map(t=>t.uid).join(".")}
+ `).join("/")}
+ `;
+ if(a===this.sig)return;
+ this.sig=a,this.bg.clear().rect(-n,0,WBi+2*n,e).fill(DIi),oki(this.hint,WBi-62-this.title.width-24),this.hint.position.set(WBi-this.hint.width-2,18),this.quickChips.forEach((t,i)=>{
+ t.visible=!this.only,t.selected=this.quick===zBi[i].q,t.draw()}
+ ),this.clearChip.visible=!this.only,this.clearChip.enabled=this.picked.length>0,this.clearChip.draw(),this.allChip.visible=!!this.only;
+ const c=new Set(this.picked),l=[],u=Qt(t=>this.toggle(t),"onPick");
+ for(const g of h){
+ l.push({
+ head:{
+ slot:g.slot,star:g.star,n:g.list.length,picks:g.list.filter(t=>c.has(t.uid)).length}
+ }
+ );
+ for(let t=0;
+ t<g.list.length;
+ t+=6)l.push({
+ items:g.list.slice(t,t+6).map(t=>({
+ it:t,picked:c.has(t.uid),kept:o.has(t.uid)}
+ )),last:t+6>=g.list.length,onPick:u}
+ )}
+ this.list.visible=l.length>0,this.empty.visible=!l.length,this.empty.text="합성할 장비가 없어요\n같은 부위 · 같은 별 장비가 3개 모이면 여기에 나와요 (장착한 것은 빼고)",this.empty.setWrapWidth(WBi-8),this.list.setListHeight(Math.max(60,e-120-92-8),!1),this.list.dataProvider=l;
+ const d=e-92,f=this.plan(),p=f.triples.length;
+ if(this.barBg.clear().rect(-n,d,WBi+2*n,92).fill(QIi),this.barN.text=p?`합성 ${
+ p}
+ 번`:"골라 주세요",this.barN.textColor=p?KIi:zIi,this.barN.position.set(4,d+14),this.barSub.text=p?`장비 ${
+ 3*p}
+ 개 → ${
+ [...f.made.entries()].sort((t,i)=>t[0]-i[0]).map(([t,i])=>`★${
+ t}
+  ${
+ i}
+ `).join(" · ")}
+ `:"칸을 누르거나 위에서 한꺼번에",this.barSub.textColor=p?VIi:YIi,oki(this.barSub,WBi-230-(f.kept?56:0)),this.barSub.position.set(4,d+52),this.barKept.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),f.kept){
+ const t=rki(`${
+ f.kept}
+ `,uBi,15),i=dBi(new ip,9,9,8).fill(uBi);
+ t.position.set(22,(18-t.height)/2),this.barKept.addChild(i,t),this.barKept.position.set(this.barSub.x+this.barSub.width+12,d+53)}
+ this.barGo.position.set(WBi-200,d+16),this.barGo.enabled=p>0&&!this.busy}
+ async merge(){
+ var t;
+ const i=this.plan().triples;
+ if(!i.length||this.busy)return;
+ this.busy=!0,this.render();
+ const s=await RIi.getInstance().gearMergeGroups(i);
+ if(this.busy=!1,s.message||!s.result)return vH.getInstance().showMessage(s.message??"합성하지 못했어요"),this.sig="",void this.render();
+ jG("success"),null==(t=this.onClose)||t.call(this),OBi.open(s.result,"합성 결과")}
+ }
+ ;
+ Qt(JBi,"FishingGearMergeView");
+ let QBi=JBi;
+ const ZBi=CRi.CONTENT_W,tUi=(ZBi-12)/2,iUi={
+ boat:"boat",line:"spool",rod:"rod",reel:"reel",bobber:"bobber",icebox:"keepnet",auto:"autorod"}
+ ,sUi=["×1","×1.3","×1.6","×2"],eUi=WSi.filter(t=>"boat"!==t.key),nUi=["boat","bag","chest","tools"],hUi=["내 배","장비 가방","장비 상자","낚시 도구"];
+ function rUi(){
+ const t=tUi-24,i=new pki("",t,48),s=rki("올리기",jIi,18),e=_ki("gold",18),n=rki("",jIi,18);
+ return s.position.set(16,12),e.y=15,n.y=12,i.addChild(s,e,n),{
+ btn:i,set:Qt((h,r,o=!1)=>{
+ const a=r<h;
+ i.enabled=!a&&!o,s.textColor=i.enabled?jIi:iki,n.text=h.toLocaleString(),n.textColor=a?XIi:s.textColor,n.x=t-16-n.width,e.x=n.x-23}
+ ,"set")}
+ }
+ function oUi(t,i,s){
+ const e=WSi.find(i=>i.key===t).effects.map(String),n=Qt((t,i)=>{
+ var s;
+ return(null==(s=i.exec(t))?void 0:s[1])??""}
+ ,"m"),h=Qt((t,e)=>i===s?`${
+ t}
+ `:`${
+ t}
+  → ${
+ e}
+ `,"values");
+ switch(t){
+ case"line":return["버티는 물고기 힘",`${
+ h(i+1,s+1)}
+ ${
+ s===e.length-1?" · 고래도!":""}
+ `];
+ case"rod":return["큰 개체 다시 뽑기",h(n(e[i],/([\d.]+%)/),n(e[s],/([\d.]+%)/))];
+ case"reel":return["입질 속도",`${
+ h(n(e[i],/(×[\d.]+)/),n(e[s],/(×[\d.]+)/))}
+ ${
+ /심해/.test(e[s])?" · 심해 입장":""}
+ `];
+ case"bobber":return["★3 이상 등장 확률",h(n(e[i],/(×[\d.]+)/),n(e[s],/(×[\d.]+)/))];
+ case"icebox":return["담을 수 있는 물고기",`${
+ h(n(e[i],/(\d+)마리/),n(e[s],/(\d+)마리/))}
+ 마리`];
+ case"auto":return["꺼 둔 동안 자동 낚시",`입질 ${
+ h(lAi(i),lAi(s))}
+ 번에 1마리`];
+ default:return["",""]}
+ }
+ Qt(rUi,"toolButton"),Qt(oUi,"toolEffect");
+ const aUi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"tabId","gear"),Zt(this,"myBoat",new GBi),Zt(this,"bag",new FBi),Zt(this,"chest",new HBi),Zt(this,"mergeView",new QBi),Zt(this,"tools",new Ve),Zt(this,"stats",[]),Zt(this,"rows",[]),Zt(this,"busy",!1);
+ const i=this.tools,s=rki("낚시 도구",KIi,26),e=rki("다음 도구로 한 단계 더",zIi,14,!1);
+ s.position.set(2,0),e.position.set(ZBi-e.width-2,10);
+ const n=aki(ZBi,112,GIi,null,16);
+ n.y=42,i.addChild(s,e,n);
+ const h=(ZBi-32-16)/3;
+ ["map","line","clock","star","moon","icebox"].forEach((t,s)=>{
+ const e=16+s%3*(h+8),n=51+49*Math.floor(s/3),r=NIi(t,20,9425128);
+ r.position.set(e,n+12);
+ const o=rki("",YIi,12,!1),a=rki("",KIi,16);
+ o.position.set(e+30,n+1),a.position.set(e+30,n+20),i.addChild(r,o,a),this.stats.push({
+ k:o,v:a}
+ )}
+ ),eUi.forEach((t,s)=>{
+ const e=new Ve;
+ e.position.set(s%2*(tUi+12),166+236*Math.floor(s/2));
+ const n=(new ip).roundRect(0,0,tUi,224,16).fill(VIi);
+ n.alpha=0,n.eventMode="none";
+ const h=(new ip).roundRect(12,14,92,92,18).fill(2961463);
+ h.eventMode="none";
+ const r=yki(iUi[t.key],46,KIi);
+ r.pivot.set(23,23),r.position.set(58,60);
+ const o=new Ye(as.EMPTY);
+ o.anchor.set(.5),o.position.set(58,60),o.eventMode="none";
+ const a=rki(t.title,zIi,13),c=rki("",KIi,19),l=rki("",qIi,19);
+ a.position.set(116,17),c.position.set(116,40),l.position.set(14,140);
+ const u=rki("",zIi,12,!1),d=rki("",zIi,13,!1);
+ u.position.set(116,73),d.position.set(14,118);
+ const f=new ip;
+ f.eventMode="none",f.position.set(116,97);
+ const p=rUi();
+ p.btn.position.set(12,166),p.btn.onTap=()=>{
+ this.upgrade(t.key,s)}
+ ;
+ const g=mki("최고 단계",VIi,3813920,15,14);
+ g.position.set((tUi-g.width)/2,178),e.addChild(aki(tUi,224,GIi,null,16),n,h,r,o,a,c,u,f,d,l,p.btn,g),i.addChild(e),this.rows.push({
+ key:t.key,root:e,flash:n,icon:r,img:o,kind:a,name:c,stage:u,pips:f,effect:d,fx:l,up:p,max:g}
+ )}
+ ),this.bag.onMerge=()=>this.openMerge(),this.mergeView.onClose=()=>this.closeMerge(),this.addChild(this.myBoat,this.bag,this.chest,this.tools,this.mergeView),this.setMode(t.mode)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ get scrollInShell(){
+ return!this.mergeView.isOpen}
+ onShow(){
+ this.update()}
+ onHide(){
+ this.chest.stop(),this.mergeView.isOpen&&(this.mergeView.close(),this.bag.visible="bag"===t.mode)}
+ closeOne(){
+ return!!this.mergeView.isOpen&&(this.closeMerge(),!0)}
+ openMerge(i){
+ "bag"!==t.mode&&this.setMode("bag"),this.bag.visible=!1,this.mergeView.open(i);
+ const s=CRi.getInstance();
+ s.refreshSub(),s.resetScroll()}
+ closeMerge(){
+ this.mergeView.isOpen&&(this.mergeView.close(),this.bag.visible="bag"===t.mode,CRi.getInstance().refreshSub(),this.update())}
+ subTabs(){
+ if(this.mergeView.isOpen)return null;
+ const i=RIi.getInstance().state,s=i.gearBox,e=CAi(i.gear.boat),n=pAi.some(t=>!!xAi(s,t,e)),h=PAi(s).some(t=>t.n>=3);
+ return{
+ items:hUi,index:nUi.indexOf(t.mode),dots:[n,h,!1,!1]}
+ }
+ selectSub(t){
+ this.setMode(nUi[t]??"boat")}
+ showMode(t,i){
+ "bag"===t&&(this.bag.filter=i??null),this.setMode(t);
+ const s=CRi.getInstance();
+ s.refreshSub(),s.resetScroll()}
+ focusTool(t){
+ var i;
+ return"boat"===t?(this.setMode("boat"),CRi.getInstance().refreshSub(),this.myBoat.upgradeButton):(this.setMode("tools"),CRi.getInstance().refreshSub(),(null==(i=this.rows.find(i=>i.key===t))?void 0:i.up.btn)??null)}
+ setMode(i){
+ this.mergeView.isOpen&&"bag"!==i&&(this.mergeView.close(),CRi.getInstance().refreshSub()),t.mode=i,this.myBoat.visible="boat"===i,this.bag.visible="bag"===i&&!this.mergeView.isOpen,this.chest.visible="chest"===i,this.tools.visible="tools"===i,"chest"!==i&&this.chest.stop(),this.update()}
+ async upgrade(t,i){
+ if(this.busy)return;
+ const s=RIi.getInstance(),e=eUi[i];
+ let n;
+ this.busy=!0,this.update();
+ try{
+ n=await s.upgrade(t)}
+ finally{
+ this.busy=!1,this.update()}
+ if(n)return void vH.getInstance().showMessage(n);
+ vH.getInstance().showMessage(`${
+ e.title}
+ : ${
+ e.names[s.state.gear[t]]}
+ (으)로 올렸어요`),jG("success"),qG.getInstance().playSFX(qG.SFX_LEVEL_UP);
+ const h=this.rows[i];
+ MR.fromTo(h.flash,{
+ alpha:.35}
+ ,{
+ alpha:0,duration:.6,ease:"power2.out"}
+ ),this.update();
+ const r=h.img.visible?h.img:h.icon,o=h.img.visible?88/Math.max(h.img.texture.width,h.img.texture.height):1;
+ MR.killTweensOf(r.scale),MR.killTweensOf(r),MR.fromTo(r.scale,{
+ x:1.35*o,y:1.35*o}
+ ,{
+ x:o,y:o,duration:.45,ease:"back.out(3)"}
+ ),MR.fromTo(r,{
+ rotation:-.25}
+ ,{
+ rotation:0,duration:.45,ease:"back.out(3)"}
+ )}
+ update(){
+ const i=t.mode;
+ if("boat"===i)return void this.myBoat.update();
+ if("bag"===i)return void(this.mergeView.isOpen?this.mergeView.update():this.bag.update());
+ if("chest"===i)return void this.chest.update();
+ const s=RIi.getInstance(),e=s.state,n=e.gear,h=[["갈 수 있는 곳",n.boat>=DAi.ENTRY.O?n.reel>=4?"강·연안·대양·심해":"강·연안·대양":n.boat>=DAi.ENTRY.C?"강·연안":"강"],["줄 힘",`${
+ XSi(n)}
+ 까지`],["입질 간격",`${
+ Math.round(15e3/YSi(n)/1e3)}
+ ~${
+ Math.round(3e4/YSi(n)/1e3)}
+ 초`],["★3 이상",sUi[n.bobber]],["꺼 둔 동안 입질",`${
+ lAi(n.auto)}
+ 번에 1마리`],["어망",`${
+ qSi(n,s.gearStats().icebox)}
+ 마리`]],r=(ZBi-32-16)/3;
+ this.stats.forEach((t,i)=>{
+ t.k.text=h[i][0],t.v.text=h[i][1],oki(t.k,r-30),oki(t.v,r-30)}
+ ),eUi.forEach((t,i)=>{
+ const s=this.rows[i],h=n[t.key],r=t.prices.length-1,o=h>=r,a=o?h:h+1;
+ s.icon.tint=o?VIi:16777215;
+ const c=nAi.toolIcon(t.key,a);
+ s.img.visible=!!c,s.icon.visible=!c,c&&s.img.texture!==c&&(s.img.texture=c,s.img.scale.set(88/Math.max(c.width,c.height))),s.name.text=t.names[a],oki(s.name,tUi-130),s.kind.text=`${
+ t.title}
+  · ${
+ o?"보유":"다음"}
+ `,oki(s.kind,tUi-130),s.stage.text="auto"===t.key?0===h?"아직 미보유":`보유 ${
+ h}
+  / ${
+ r}
+ 단계`:`보유 ${
+ h+1}
+  / ${
+ r+1}
+ 단계`,s.pips.clear();
+ const l="auto"===t.key?1:0;
+ for(let e=l;
+ e<=r;
+ e++)s.pips.roundRect(16*(e-l),0,12,7,3.5).fill(e<=h?VIi:UIi);
+ const[u,d]=oUi(t.key,h,a);
+ s.effect.text=u,s.fx.text=d,s.fx.textColor=o?VIi:qIi,oki(s.fx,tUi-28),s.up.btn.visible=!o,s.max.visible=o,o||s.up.set(t.prices[h+1],e.gold,this.busy)}
+ )}
+ }
+ ;
+ Qt(aUi,"FishingGearPage"),Zt(aUi,"instance"),Zt(aUi,"mode","boat");
+ let cUi=aUi;
+ const lUi=Object.freeze(Object.defineProperty({
+ __proto__:null,FishingGearPage:cUi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),uUi=CRi.CONTENT_W,dUi=class t extends OR{
+ constructor(){
+ super(),Zt(this,"bg",new ip),Zt(this,"title",rki("",KIi,14)),Zt(this,"detail",rki("",zIi,12,!1)),Zt(this,"reward",rki("",JIi,12)),Zt(this,"button",new pki("받기",92,38,13)),Zt(this,"row",null),this.addChild((new ip).rect(0,0,uUi,t.H).fill({
+ color:0,alpha:.001}
+ )),this.title.position.set(12,9),this.detail.position.set(12,33),this.reward.position.set(12,53),this.button.position.set(uUi-104,17),this.button.onTap=()=>{
+ var t,i;
+ return null==(i=null==(t=this.row)?void 0:t.action)?void 0:i.call(t)}
+ ,this.addChild(this.bg,this.title,this.detail,this.reward,this.button)}
+ setData(i){
+ this.row=i,this.bg.clear().rect(0,0,uUi,t.H-5).fill(i.me?UIi:GIi),this.title.text=i.title,this.detail.text=i.detail,this.reward.text=i.reward;
+ for(const t of[this.title,this.detail,this.reward])oki(t,uUi-(i.button?126:24));
+ this.button.visible=!!i.button,this.button.enabled=!!i.action,this.button.setText(i.button??"받기")}
+ }
+ ;
+ Qt(dUi,"SocialRow"),Zt(dUi,"H",76);
+ let fUi=dUi;
+ const pUi=class extends Ve{
+ constructor(){
+ super(),Zt(this,"title",rki("",KIi,18)),Zt(this,"detail",rki("",zIi,12,!1)),Zt(this,"status",rki("",zIi,12,!1)),Zt(this,"rule",rki("",JIi,12)),Zt(this,"action",new pki("참가하기",142,40,14)),Zt(this,"refresh",new pki("새로 보기",100,34,12)),Zt(this,"list",new TR(fUi,uUi,300,0)),Zt(this,"signature",""),Zt(this,"busy",!1),this.y=50,this.title.position.set(4,4),this.detail.position.set(4,36),this.rule.position.set(4,60),this.action.position.set(uUi-146,0),this.refresh.position.set(uUi-104,91),this.list.y=134,this.status.position.set(4,101),this.action.onTap=()=>{
+ this.perform()}
+ ,this.refresh.onTap=()=>{
+ RIi.getInstance().refreshSocial(!0)}
+ ,this.addChild(this.title,this.detail,this.rule,this.status,this.action,this.refresh,this.list)}
+ async perform(t){
+ if(!this.busy){
+ this.busy=!0;
+ try{
+ const i=RIi.getInstance(),s=t?await i.claimSocial(t):await i.joinSocial();
+ vH.getInstance().showMessage(s??(t?"보상을 받았어요":"오늘 대회에 참가했어요"))}
+ catch{
+ vH.getInstance().showMessage("결과를 확인하지 못했어요. 새로 보기를 눌러 주세요")}
+ finally{
+ this.busy=!1,this.render()}
+ }
+ }
+ render(){
+ var t,i,s;
+ const e=RIi.getInstance(),n=e.social,h=[],r=null==n?void 0:n.board,o=(null==r?void 0:r.day)??(null==n?void 0:n.day)??1,a=yTi(o),c=e.claimableSocialIds();
+ c.length&&h.push({
+ title:`받을 보상 ${
+ c.length}
+ 개`,detail:"끝난 대회·사냥 결과예요 · 이번 회차 교환이 끝나기 전까지 받아요",reward:"",button:"모두 받기",action:Qt(()=>{
+ this.perform(c)}
+ ,"action")}
+ );
+ for(const g of(null==n?void 0:n.rewards)??[])null===g.claimedAt&&g.seasonId===(null==(t=e.season)?void 0:t.id)&&h.push({
+ title:`${
+ "hunt"===g.source?"사냥":"대회"}
+  · ${
+ g.title}
+ `,detail:`${
+ g.date}
+  · ${
+ g.rank?`${
+ g.rank}
+ 위`:"기록 없음"}
+ ${
+ g.hunt?` · ${
+ g.hunt.killed?"사냥 성공":"달아났어요"}
+  · 내 피해 ${
+ g.hunt.my}
+ `:` · ${
+ (null==(i=g.contest)?void 0:i.record)??""}
+ `}
+ `,reward:`진주 ${
+ g.participationPearl+g.rankPearl}
+  (참가 ${
+ g.participationPearl}
+  + 순위 ${
+ g.rankPearl}
+ )${
+ g.gold?` · 골드 ${
+ g.gold.toLocaleString()}
+ `:""}
+ `,button:"받기",action:Qt(()=>{
+ this.perform([g.id])}
+ ,"action")}
+ );
+ const l=e.state.contest;
+ l&&!l.claimed&&e.now()>=l.endAt&&h.push({
+ title:"이전 방식으로 참가한 대회",detail:"받지 않은 결과가 있어요",reward:"이 대회의 원래 보상을 받아요",button:"받기",action:Qt(()=>{
+ this.busy||(this.busy=!0,e.claimContest().finally(()=>{
+ this.busy=!1,this.signature="",this.render()}
+ ))}
+ ,"action")}
+ ),this.title.text=`오늘 · ${
+ a.title}
+ `;
+ const u=(null==r?void 0:r.endAt)??(null==n?void 0:n.endAt)??0,d=u-e.realNow(),f=u?new Date(u).toLocaleTimeString([],{
+ hour:"2-digit",minute:"2-digit"}
+ ):"";
+ if(this.detail.text=d>0?`${
+ (null==n?void 0:n.date)??""}
+  · 내 시간 ${
+ f}
+  마감 · ${
+ Mki(d)}
+  남음`:"오늘 대회를 마쳤어요. 잠시 후 새로 보기를 눌러 주세요",this.status.text=r?`${
+ r.group}
+ 번 방 · 마지막 자동 낚시 기록은 마감 때 더해져요`:"빈자리에는 다른 낚시꾼이 들어와요",this.rule.text=`${
+ a.desc}
+  · 1위 진주 30 ~ 30위 1 · 사냥 성공은 참가 + 순위 진주`,this.action.setText(r?`참가 중 · ${
+ r.count}
+ /30명`:"참가하기"),this.action.enabled=!this.busy&&!r&&!!(null==n?void 0:n.enabled)&&"open"===e.phase()&&d>0,r)for(const g of r.rows)h.push({
+ title:`${
+ g.rank||"—"}
+ 위 · ${
+ g.name}
+ ${
+ g.me?" (나)":""}
+ `,detail:g.score>0?`기록 ${
+ ATi(a,g.score)}
+ `:"아직 대회 기록이 없어요",reward:`예상 진주 ${
+ FTi(g.rank)}
+ `,me:g.me}
+ );
+ else h.push({
+ title:"하루 중 언제든 참가해요",detail:"같은 게임 서버의 낚시꾼과 최대 30명이 겨뤄요",reward:"참가한 뒤 잡은 물고기부터 기록에 들어가요"}
+ );
+ for(const g of(null==n?void 0:n.past)??[]){
+ const t=g.rows.find(t=>t.me);
+ h.push({
+ title:`${
+ g.date}
+  · ${
+ yTi(g.day).title}
+ `,detail:g.final?`내 순위 ${
+ (null==t?void 0:t.rank)?`${
+ t.rank}
+ 위`:"기록 없음"}
+  · ${
+ g.count}
+ 명 참가`:"마지막 기록을 모으고 있어요",reward:g.final?"결과는 맨 위 받을 보상에서 받아요":"잠시 후 새로 보기를 눌러 주세요"}
+ )}
+ oki(this.title,uUi-162),oki(this.detail,uUi-8),oki(this.rule,uUi-8),oki(this.status,uUi-116),this.list.setListHeight(Math.max(80,CRi.contentHeight-this.y-((null==(s=this.parent)?void 0:s.y)??0)-this.list.y-8),!1);
+ const p=JSON.stringify(h);
+ p!==this.signature&&(this.signature=p,this.list.dataProvider=h)}
+ }
+ ;
+ Qt(pUi,"FishingSocialPanel");
+ let gUi=pUi;
+ const wUi=.16,mUi=Qt(t=>Math.max(0,Math.min(1,t)),"c01"),vUi=Qt(t=>t*t,"eIn"),_Ui=Qt(t=>1-(1-t)*(1-t),"eOut"),MUi=Qt(t=>1+2.70158*Math.pow(t-1,3)+1.70158*Math.pow(t-1,2),"backOut");
+ function bUi(t){
+ const i=vUi(mUi(t/wUi));
+ let s=2.4-1.4*i,e=16*i-30,n=1,h=1;
+ const r=mUi(t/.07);
+ if(t>=wUi){
+ const i=_Ui(mUi((t-wUi)/.12));
+ n=1.12-.12*i,h=.9+.1*i,s=1-.03*Math.sin(Math.PI*mUi((t-.28)/.22)),e=-14}
+ const o=mUi((t-wUi)/.3),a=mUi((t-wUi)/.2);
+ return{
+ scale:s,rot:e,sx:n,sy:h,alpha:r,burst:t<wUi?{
+ s:0,a:0}
+ :{
+ s:.8+.9*_Ui(o),a:.5*(1-o)}
+ ,shake:t<wUi?0:5*(1-a)*Math.sin(a*Math.PI*6),pin:t<.45?0:MUi(mUi((t-.45)/.25)),oldPin:1-mUi((t-.45)/.08)}
+ }
+ Qt(bUi,"stampPose");
+ const yUi=CRi.CONTENT_W,EUi=[["area","수역"],["contest","대회"],["visit","의뢰"],["goal","업적"]].filter(([t])=>"visit"!==t||qTi),AUi=EUi.map(([t])=>t),SUi=Qt((t,i)=>10*Math.round(TTi(t)*STi(i)/10),"rankGold"),TUi=class t extends OR{
+ constructor(){
+ super(),Zt(this,"bg",new ip),Zt(this,"nameText",rki("",KIi,14)),Zt(this,"prog",rki("",zIi,12,!1)),Zt(this,"bar",new ip),Zt(this,"pearl",_ki("pearl",18)),Zt(this,"reward",rki("",JIi,13)),Zt(this,"btn",new pki("받기",110,40,14)),Zt(this,"row",null);
+ const i=(new ip).rect(0,0,yUi,t.H).fill({
+ color:0,alpha:.001}
+ );
+ i.eventMode="none",this.addChild(i),this.nameText.position.set(14,9),this.prog.position.set(14,36),this.bar.eventMode="none",this.btn.position.set(yUi-122,11),this.btn.onTap=()=>{
+ var t;
+ return null==(t=this.row)?void 0:t.onClaim(this.btn)}
+ ,this.addChild(this.bg,this.nameText,this.prog,this.bar,this.pearl,this.reward,this.btn)}
+ setData(i){
+ this.row=i;
+ const s=!i.claimed&&i.progress>=i.need;
+ this.bg.clear().roundRect(0,0,yUi,t.H-6,10).fill(s?2244666:GIi),this.nameText.text=i.label,this.nameText.textColor=i.claimed?YIi:KIi,this.pearl.position.set(14+this.nameText.width+12,10),this.reward.text=`${
+ i.pearl}
+ `,this.reward.position.set(this.pearl.x+22,10),this.prog.text=`${
+ Math.min(i.progress,i.need).toLocaleString()}
+  / ${
+ i.need.toLocaleString()}
+ `,this.bar.clear(),vki(this.bar,150,42,yUi-150-140,8,i.progress/i.need,i.claimed?YIi:s?qIi:VIi),this.btn.enabled=s,this.btn.setText(i.claimed?"완료":"받기")}
+ }
+ ;
+ Qt(TUi,"GoalRow"),Zt(TUi,"H",66);
+ let CUi=TUi;
+ const OUi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"dim",new ip),Zt(this,"card",new Ve),Zt(this,"cardBg",new ip),Zt(this,"cup",new Ve),Zt(this,"big",rki("",16771496,44)),Zt(this,"sub",rki("",KIi,15)),Zt(this,"gap",rki("",VIi,14)),Zt(this,"goldIcon",_ki("gold",24)),Zt(this,"goldText",rki("",KIi,20)),Zt(this,"pearlIcon",_ki("pearl",24)),Zt(this,"pearlText",rki("",JIi,20)),Zt(this,"confetti",new Ve),Zt(this,"ok",new pki("낚시 지갑에 받기",360,50,17)),Zt(this,"tl",null),this.dim.eventMode="static",this.card.addChild(this.cardBg,this.confetti,this.cup,this.big,this.sub,this.gap,this.goldIcon,this.goldText,this.pearlIcon,this.pearlText,this.ok),this.confetti.eventMode="none",this.ok.position.set(40,334),this.ok.onTap=()=>{
+ var t,i;
+ null==(t=this.tl)||t.progress(1);
+ const s=CRi.getInstance();
+ s.flyCurrency("gold",this.goldIcon.toGlobal({
+ x:12,y:12}
+ ),9),s.flyCurrency("pearl",this.pearlIcon.toGlobal({
+ x:12,y:12}
+ ),5),null==(i=this.parent)||i.removeChild(this)}
+ ,this.addChild(this.dim,this.card)}
+ closeOne(){
+ var t,i;
+ return null==(i=(t=this.ok).onTap)||i.call(t),!0}
+ layout(){
+ const i=CRi.contentHeight,s=CRi.OVERLAY_PAD,e=t.CH;
+ this.dim.clear().rect(-s,0,yUi+2*s,i).fill({
+ color:0,alpha:.65}
+ ),this.dim.hitArea=new Ui(-s,0,yUi+2*s,2e3),this.card.position.set(yUi/2,Math.max(10,(i-e)/2)+e/2)}
+ open(i){
+ var s;
+ const e=t.CW,n=t.CH;
+ this.card.pivot.set(e/2,n/2),this.layout();
+ const h=i.rank<=3;
+ if(this.cardBg.clear().roundRect(0,0,e,n,20).fill(h?2760978:FIi),h&&this.cardBg.roundRect(0,0,e,n,20).stroke({
+ color:10123836,width:2}
+ ),this.cup.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),h){
+ const t=Eki(i.rank,84);
+ t.position.set(-42,-42),this.cup.addChild(t)}
+ this.cup.position.set(e/2,70),this.big.textColor=1===i.rank?16765773:2===i.rank?15133679:3===i.rank?14721130:KIi;
+ const r=Qt(t=>1===t?"우승!":2===t?"아차상!":3===t?"3등!":`${
+ t}
+ 등`,"title");
+ this.sub.text=`${
+ i.day}
+ 일차 ${
+ i.title}
+  · 30명 중 ${
+ i.rank}
+ 위 · 기록 ${
+ "-"===i.record?"없음":i.record}
+ `,this.gap.text=i.gapToFirst?`1등과 ${
+ i.gapToFirst}
+  차이!`:h?"장식장에 컵이 남아요":"꼴찌까지 모두 골드를 받아요";
+ const o=Qt((t,i)=>{
+ oki(t,e-40),t.position.set((e-t.width)/2,i)}
+ ,"place");
+ o(this.sub,200),o(this.gap,230);
+ const a={
+ rank:30,gold:0,pearl:0}
+ ,c=Qt(()=>{
+ this.goldText.text=Math.round(a.gold).toLocaleString(),this.pearlText.text=`${
+ Math.round(a.pearl)}
+ `;
+ const t=30+this.goldText.width+30+30+this.pearlText.width;
+ this.goldIcon.position.set((e-t)/2,278),this.goldText.position.set(this.goldIcon.x+30,276),this.pearlIcon.position.set(this.goldText.x+this.goldText.width+30,278),this.pearlText.position.set(this.pearlIcon.x+30,276)}
+ ,"drawReward"),l=Qt(()=>{
+ this.big.text=r(Math.round(a.rank)),this.big.pivot.set(this.big.width/2,this.big.height/2),this.big.position.set(e/2,160)}
+ ,"drawRank");
+ l(),c(),this.confetti.removeChildren().forEach(t=>t.destroy()),CRi.getInstance().overlay.addChild(this),null==(s=this.tl)||s.kill();
+ const u=MR.timeline();
+ u.fromTo(this.card,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.2}
+ ).fromTo(this.card.scale,{
+ x:.9,y:.9}
+ ,{
+ x:1,y:1,duration:.25,ease:"back.out(2)"}
+ ,0).set([this.sub,this.gap,this.goldIcon,this.goldText,this.pearlIcon,this.pearlText,this.ok,this.cup],{
+ alpha:0}
+ ,0).to(a,{
+ rank:i.rank,duration:.9,ease:"power2.out",onUpdate:l}
+ ,.15).call(()=>{
+ jG(h?"success":"light"),qG.getInstance().playSFX(h?qG.SFX_TRUMPET:qG.SFX_POPUP),h&&this.burst(e)}
+ ,[],1.05).fromTo(this.big.scale,{
+ x:1.6,y:1.6}
+ ,{
+ x:1,y:1,duration:.35,ease:"back.out(3)"}
+ ,1.05).to(this.cup,{
+ alpha:1,duration:.2}
+ ,1.05).fromTo(this.cup.scale,{
+ x:.3,y:.3}
+ ,{
+ x:1,y:1,duration:.45,ease:"back.out(2.5)"}
+ ,1.05).to([this.sub,this.gap],{
+ alpha:1,duration:.25}
+ ,1.3).to([this.goldIcon,this.goldText,this.pearlIcon,this.pearlText],{
+ alpha:1,duration:.2}
+ ,1.5).to(a,{
+ gold:i.gold,pearl:i.pearl,duration:.7,ease:"power1.out",onUpdate:c}
+ ,1.5).to(this.ok,{
+ alpha:1,duration:.2}
+ ,1.9),this.tl=u}
+ burst(t){
+ const i=[16765773,16743019,8378016,8369919,15262964];
+ for(let s=0;
+ s<36;
+ s++){
+ const e=(new ip).rect(-3,-1.5,6,3).fill(i[s%i.length]);
+ e.position.set(t/2,90),this.confetti.addChild(e);
+ const n=-Math.PI/2+2.4*(Math.random()-.5),h=120+160*Math.random();
+ MR.timeline({
+ onComplete:Qt(()=>e.destroy(),"onComplete")}
+ ).to(e,{
+ x:t/2+Math.cos(n)*h,y:90+Math.sin(n)*h*.8,rotation:8*Math.random(),duration:.6,ease:"power2.out"}
+ ).to(e,{
+ y:"+="+(120+80*Math.random()),alpha:0,rotation:"+="+6*Math.random(),duration:1.1,ease:"power1.in"}
+ )}
+ }
+ }
+ ;
+ Qt(OUi,"ResultPanel"),Zt(OUi,"CW",440),Zt(OUi,"CH",404);
+ let IUi=OUi;
+ const kUi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"tabId","quest"),Zt(this,"view","area"),Zt(this,"socialPanel",new gUi),Zt(this,"body",new Ve),Zt(this,"result",new IUi),Zt(this,"contestLayer",new Ve),Zt(this,"cBg",aki(yUi,214,BIi,WIi,14)),Zt(this,"cIcon",yki("trophy",26,VIi)),Zt(this,"cTitle",rki("",VIi,20)),Zt(this,"cDesc",rki("",KIi,14,!1)),Zt(this,"cTarget",new lki(52)),Zt(this,"cTargetText",rki("",KIi,14)),Zt(this,"cTargetSub",rki("",zIi,12,!1)),Zt(this,"cGo",new pki("그곳으로",100,38,13)),Zt(this,"cStatus",rki("",KIi,14)),Zt(this,"cBar",new ip),Zt(this,"cBtn",new pki("참가하기",200,46,16)),Zt(this,"devEnd",new pki("끝내기(개발)",110,32,12)),Zt(this,"rewardTitle",rki("상금 · 30명 모두 받아요",KIi,15)),Zt(this,"rewardStrip",new Ve),Zt(this,"boardTitle",rki("",KIi,15)),Zt(this,"board",new Ve),Zt(this,"boardRows",[]),Zt(this,"calTitle",rki("10일 대회 달력",KIi,15)),Zt(this,"cal",[]),Zt(this,"calHint",rki("개발 · 날짜를 누르면 그날 대회를 바로 열어요",VIi,12)),Zt(this,"calBusy",!1),Zt(this,"visitLayer",new Ve),Zt(this,"vNext",rki("",zIi,13)),Zt(this,"vCards",[]),Zt(this,"areaLayer",new Ve),Zt(this,"areaKey",null),Zt(this,"areaSel",null),Zt(this,"areaSheet",!1),Zt(this,"areaPop",null),Zt(this,"areaSig",""),Zt(this,"areaBusy",!1),Zt(this,"pinGlows",[]),Zt(this,"slam",null),Zt(this,"slamRefs",{
+ stamp:null,burst:null,panel:null,pin:null}
+ ),Zt(this,"previewIdx",-1),Zt(this,"goalLayer",new Ve),Zt(this,"goalList",new TR(CUi,yUi,400,0)),Zt(this,"records",new Ve),Zt(this,"contestBusy",!1),this.buildContest(),this.buildVisit(),this.records.y=52,this.goalList.y=190,this.goalLayer.addChild(this.records),this.goalLayer.addChild(this.goalList),this.body.y=-t.LIFT,this.body.addChild(this.contestLayer,this.visitLayer,this.areaLayer,this.goalLayer,this.socialPanel),this.addChild(this.body)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ get scrollInShell(){
+ var t;
+ return"goal"!==this.view&&"area"!==this.view&&!("contest"===this.view&&(null==(t=RIi.getInstance().social)?void 0:t.enabled))}
+ closeOne(){
+ return"area"===this.view&&(null!==this.areaPop?(this.areaPop=null,this.renderArea(!0),!0):!!this.areaSheet&&(this.areaSheet=!1,this.renderArea(!0),!0))}
+ onResize(){
+ this.render()}
+ subTabs(){
+ const t=RIi.getInstance(),i=yIi(t.dotsInput(!1)).seg;
+ return{
+ items:EUi.map(([,t])=>t),index:AUi.indexOf(this.view),dots:AUi.map(s=>"contest"===s?i.contest||t.socialRewardsReady():!!i[s])}
+ }
+ selectSub(t){
+ CRi.getInstance().exchangeOnly&&"contest"!==AUi[t]||(this.view=AUi[t],this.render())}
+ buildContest(){
+ const t=this.contestLayer;
+ this.cBg.y=48,this.cIcon.position.set(16,62),this.cTitle.position.set(50,62),this.cDesc.position.set(16,98),this.cTarget.position.set(16,126),this.cTargetText.position.set(78,130),this.cTargetSub.position.set(78,154),this.cGo.setPrimary(!1),this.cGo.position.set(yUi-116,134),this.cGo.onTap=()=>{
+ this.goContestSpot()}
+ ,this.cStatus.position.set(16,190),this.cBar.eventMode="none",this.cBtn.position.set(yUi-216,58),this.cBtn.onTap=()=>{
+ this.onContestButton()}
+ ,this.devEnd.setPrimary(!1),this.devEnd.onTap=async()=>{
+ await RIi.getInstance().devEndContest(),this.render()}
+ ,this.rewardTitle.position.set(4,274),this.rewardStrip.y=302,this.boardTitle.position.set(4,376),this.board.y=406;
+ for(let i=0;
+ i<7;
+ i++){
+ const t=new Ve,s=new ip,e=new Ve,n=rki("",zIi,14),h=rki("",KIi,14),r=rki("",KIi,14),o=rki("",VIi,12);
+ s.eventMode="none",t.addChild(s,e,n,h,r,o),t.y=38*i,e.position.set(10,3),h.position.set(50,8),this.board.addChild(t),this.boardRows.push({
+ root:t,bg:s,medal:e,rank:n,name:h,score:r,gold:o}
+ )}
+ t.addChild(this.cBg,this.cIcon,this.cTitle,this.cDesc,this.cTarget,this.cTargetText,this.cTargetSub,this.cGo,this.cStatus,this.cBar,this.cBtn,this.devEnd,this.rewardTitle,this.rewardStrip,this.boardTitle,this.board,this.calTitle);
+ for(let i=0;
+ i<10;
+ i++){
+ const s=new ip,e=rki(`${
+ i+1}
+ `,KIi,14),n=rki(bTi[i].title,zIi,11,!1),h=rki("",VIi,11),r=new Ve,o=new Ve;
+ s.eventMode="none",r.eventMode="none";
+ const a={
+ bg:s,day:e,title:n,res:h,cup:r,hit:o,d:i+1}
+ ;
+ o.cursor="pointer",o.on("pointertap",t=>{
+ t.stopPropagation(),this.devOpenDay(a.d)}
+ ),t.addChild(s,e,n,h,r,o),this.cal.push(a)}
+ t.addChild(this.calHint)}
+ buildVisit(){
+ this.vNext.position.set(4,52),this.visitLayer.addChild(this.vNext);
+ for(let t=0;
+ t<3;
+ t++){
+ const i=new Ve;
+ i.y=82+192*t;
+ const s=new ip;
+ s.eventMode="none";
+ const e=new ip,n=rki("",16777215,20),h=rki("",KIi,16),r=rki("",zIi,13,!1);
+ e.eventMode="none";
+ const o=new lki(60),a=rki("",KIi,14),c=rki("",zIi,12,!1),l=new ip,u=new Ve;
+ l.eventMode="none",u.eventMode="none";
+ const d=new pki("그곳으로",96,40,13),f=new pki("납품",104,44,15);
+ d.setPrimary(!1),h.position.set(76,14),r.position.set(76,40),r.setWrapWidth(yUi-90),o.position.set(16,80),a.position.set(88,82),c.position.set(88,106),u.position.set(16,150),d.position.set(yUi-216,128),f.position.set(yUi-116,126);
+ const p=new Ve;
+ p.eventMode="none";
+ const g=new Ye(as.EMPTY);
+ g.position.set(12,10),g.eventMode="none",i.addChild(s,e,n,g,h,r,o,a,c,l,u,d,f,p),this.visitLayer.addChild(i),this.vCards.push({
+ root:i,bg:s,av:e,init:n,face:g,npc:h,line:r,fish:o,ask:a,where:c,bar:l,reward:u,go:d,btn:f,stamp:p}
+ )}
+ }
+ openView(t){
+ this.view=AUi.includes(t)?t:"reward"===t?"contest":"area","area"===this.view&&(this.areaKey=null,this.areaSel=null,this.areaSig="")}
+ onShow(){
+ CRi.getInstance().exchangeOnly&&(this.view="contest"),RIi.getInstance().refreshSocial(!0),this.render()}
+ onHide(){
+ this.areaSheet=!1,this.areaPop=null,this.stopPinGlows(),this.areaSig=""}
+ update(){
+ "contest"===this.view&&RIi.getInstance().refreshSocial(),"goal"!==this.view&&this.render()}
+ async onContestButton(){
+ if(!this.contestBusy){
+ this.contestBusy=!0;
+ try{
+ const t=RIi.getInstance(),i=t.contestStanding(),s=t.state.contest;
+ if(s&&(null==i?void 0:i.ended)&&!s.claimed){
+ const i=await t.claimContest();
+ i&&this.result.open(i)}
+ else{
+ const i=await t.joinContest();
+ i||jG("medium"),vH.getInstance().showMessage(i??`${
+ t.state.contest.room}
+ 번 방 30명이 모였어요. 12시간 동안 겨뤄요!`)}
+ }
+ finally{
+ this.contestBusy=!1}
+ this.render()}
+ }
+ contestShown(){
+ const t=RIi.getInstance(),i=t.state.contest,s=t.eventDay();
+ return yTi(i&&!i.claimed?i.day:s)}
+ async goContestSpot(){
+ const t=this.contestShown(),i=RIi.getInstance();
+ if(!t.speciesId)return;
+ const s=kSi(t.speciesId),e=await i.goTo(USi(s));
+ e?vH.getInstance().showMessage(e):(vH.getInstance().showMessage(`${
+ vSi[`${
+ s.race}
+ |${
+ s.zone}
+ `]}
+ (으)로 옮겼어요${
+ s.roam?" · 회유어는 오늘 자리를 찾아야 해요":""}
+ `),CRi.getInstance().selectTab("fish"))}
+ render(){
+ var t;
+ const i="contest"===this.view&&!!(null==(t=RIi.getInstance().social)?void 0:t.enabled);
+ this.socialPanel.visible=i,this.contestLayer.visible="contest"===this.view&&!i,this.visitLayer.visible="visit"===this.view,this.areaLayer.visible="area"===this.view,this.goalLayer.visible="goal"===this.view,this.socialPanel.visible?this.socialPanel.render():"contest"===this.view?this.renderContest():"visit"===this.view?this.renderVisit():"area"===this.view?this.renderArea():this.renderGoals()}
+ areaRowsOf(t,i){
+ return RIi.getInstance().areaRows(t,i).map(t=>t.idx===this.previewIdx?{
+ ...t,claimed:!0,ready:!1}
+ :t)}
+ defaultArea(t,i,s){
+ const e=t.find(t=>t.ready);
+ if(e)return e.point;
+ const n=RIi.getInstance().state.spot;
+ return n.race===i&&n.zone===s?n.point:([...t].filter(t=>!t.claimed).sort((t,i)=>t.missing.length-i.missing.length||t.point-i.point)[0]??t[0]).point}
+ stopPinGlows(){
+ this.pinGlows.forEach(t=>t.kill()),this.pinGlows=[]}
+ static mapView(t,i,s,e){
+ const n=650,h=s/e;
+ let r=Math.min(...t.map(t=>t.x))-n,o=Math.min(...t.map(t=>t.y))-n,a=Math.max(...t.map(t=>t.x))+n-r,c=Math.max(...t.map(t=>t.y))+n-o;
+ if(a/c<h){
+ const t=c*h;
+ r-=(t-a)/2,a=t}
+ else{
+ const t=a/h;
+ o-=(t-c)/2,c=t}
+ a>i&&(a=i,c=a/h),c>i&&(c=i,a=c*h),r=Math.max(0,Math.min(i-a,r)),o=Math.max(0,Math.min(i-c,o));
+ const l=s/a;
+ return{
+ k:l,ox:r*l,oy:o*l}
+ }
+ renderArea(i=!1){
+ const s=RIi.getInstance(),e=s.state,n=CRi.contentHeight;
+ this.areaKey||(this.areaKey=`${
+ e.spot.race}
+ |${
+ e.spot.zone}
+ `);
+ const h=this.areaKey,[r,o]=h.split("|"),a=this.areaRowsOf(r,o);
+ null===this.areaSel&&(this.areaSel=this.defaultArea(a,r,o));
+ const c=[h,this.areaSel,s.areaClaimed().join(","),Object.keys(e.dex).length,`${
+ e.spot.race}
+ ${
+ e.spot.zone}
+ ${
+ e.spot.point}
+ `,this.areaSheet,this.areaPop,e.gear.boat,Math.round(n),this.previewIdx].join("|");
+ if(!i&&(this.slam||c===this.areaSig))return;
+ this.areaSig=c;
+ const l=this.areaLayer;
+ this.stopPinGlows(),this.slamRefs={
+ stamp:null,burst:null,panel:null,pin:null}
+ ,l.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const u=t.LIFT+4,d=a.filter(t=>t.claimed).length,f=new Ve,p=new ip,g=(new ip).circle(0,0,5.5).fill(hki[r]),w=rki(vSi[h],KIi,20),m=rki(`${
+ r}
+  · ${
+ pSi[o]}
+ `,zIi,13),v=(new ip).moveTo(0,0).lineTo(6,6).lineTo(12,0).stroke({
+ color:zIi,width:3,cap:"round",join:"round"}
+ );
+ g.position.set(18,26),w.position.set(32,(52-w.height)/2),m.position.set(w.x+w.width+8,w.y+w.height-m.height-2),v.position.set(m.x+m.width+10,23);
+ const _=v.x+12+14;
+ p.roundRect(0,0,_,52,12).fill(GIi),p.eventMode=g.eventMode=v.eventMode="none",f.addChild(p,g,w,m,v),f.position.set(0,u),f.eventMode="static",f.cursor="pointer",f.hitArea=new Ui(0,0,_,52),f.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>{
+ this.areaSheet=!0,this.renderArea(!0)}
+ )}
+ );
+ const M=9===d,b=new ip,y=_ki("pearl",18),E=rki("+300",M?VIi:zIi,15),A=38+E.width+14;
+ b.roundRect(0,0,A,40,20).fill(M?ZIi:GIi),b.position.set(yUi-A,u+6),y.position.set(b.x+14,u+17),E.position.set(y.x+24,u+26-E.height/2);
+ const S=rki(`${
+ d}
+ /9`,KIi,19),T=rki("수역",zIi,13);
+ S.position.set(b.x-12-S.width,u+26-S.height/2),T.position.set(S.x-6-T.width,u+26-T.height/2+1),l.addChild(f,b,y,E,T,S);
+ const C=Math.max(240,Math.min(470,n-84-392)),O=u+64,I=nAi.topdownInfo(h),k=t.mapView(I.points,I.w,yUi,C),R=new Ve;
+ R.position.set(0,O);
+ const x=new Ye(FDi.regionMap(h));
+ x.width=x.height=I.w*k.k,x.position.set(-k.ox,-k.oy),x.eventMode="none";
+ const P=(new ip).roundRect(0,0,yUi,C,16).fill(16777215);
+ x.mask=P,R.addChild(x,P);
+ const N=e.spot.race===r&&e.spot.zone===o?e.spot.point:-1;
+ a.forEach(t=>{
+ const i=I.points[t.point],s=Math.max(32,Math.min(yUi-32,i.x*k.k-k.ox)),e=Math.max(40,Math.min(C-44,i.y*k.k-k.oy)),n=t.point===this.areaSel;
+ if(!t.claimed&&!t.ready&&!n){
+ const i=rki(`${
+ t.have}
+ /${
+ t.need}
+ `,KIi,12),n=(new ip).roundRect(0,0,i.width+16,i.height+4,10).fill({
+ color:657932,alpha:.78}
+ );
+ n.position.set(s-(i.width+16)/2,e+28),i.position.set(n.x+8,n.y+2),n.eventMode="none",R.addChild(n,i)}
+ if(R.addChild(this.buildPin(t,s,e,n,h)),t.point===N){
+ const t=rki("지금 여기",jIi,12),i=t.width+16,h=e-(n?40:34)-22,r=(new ip).roundRect(s-i/2,h,i,22,9).fill(VIi).poly([s-5,h+22,s+5,h+22,s,h+27]).fill(VIi);
+ r.eventMode="none",t.position.set(s-t.width/2,h+(22-t.height)/2),R.addChild(r,t)}
+ }
+ ),l.addChild(R),this.drawAreaPanel(l,a[this.areaSel]??a[0],O+C+12,t.LIFT+n-4,h),this.areaSheet&&this.drawAreaSheet(l,n),null!==this.areaPop&&this.drawAreaPop(l,this.areaPop,n)}
+ buildPin(t,i,s,e,n){
+ const h=new Ve;
+ if(h.position.set(i,s),e){
+ const t=(new ip).circle(0,0,29).fill({
+ color:16777215,alpha:.85}
+ );
+ t.eventMode="none",h.addChild(t)}
+ if(t.claimed){
+ const i=nAi.areaStamp("mini"),s=new Ve;
+ if(i){
+ const t=new Ye(i);
+ t.anchor.set(.5),t.width=t.height=48,s.addChild(t)}
+ else s.addChild((new ip).circle(0,0,24).fill(13909298));
+ this.slam&&this.slam.key===n&&this.slam.p===t.point&&(s.scale.set(0),this.slamRefs.pin=s),h.addChild(s)}
+ else if(t.ready){
+ const t=(new ip).circle(0,0,24).fill(VIi),i=(new ip).circle(0,0,24).fill(VIi),s=_ki("pearl",22);
+ t.eventMode=i.eventMode="none",s.position.set(-11,-11),h.addChild(t,i,s),e||this.pinGlows.push(MR.fromTo(t,{
+ alpha:.7}
+ ,{
+ alpha:0,duration:1.4,repeat:-1,ease:"power1.out",onUpdate:Qt(()=>{
+ t.scale.set(1+.6*(1-t.alpha/.7))}
+ ,"onUpdate")}
+ ))}
+ else{
+ const i=t.need?t.have/t.need:0,s=(new ip).circle(0,0,24).fill({
+ color:16777215,alpha:.22}
+ );
+ i>0&&s.moveTo(0,0).arc(0,0,24,-Math.PI/2,-Math.PI/2+2*Math.PI*i).closePath().fill(VIi),s.circle(0,0,19).fill(1447707),s.eventMode="none";
+ const e=rki(`${
+ t.point+1}
+ `,16777215,18);
+ e.position.set(-e.width/2,-e.height/2),h.addChild(s,e)}
+ return h.scale.set(e?1.22:1),h.eventMode="static",h.cursor="pointer",h.hitArea=new la(0,0,30),h.on("pointertap",i=>{
+ i.stopPropagation(),queueMicrotask(()=>{
+ this.areaSel=t.point,this.renderArea(!0)}
+ )}
+ ),h}
+ drawAreaPanel(i,s,e,n,h){
+ const r=RIi.getInstance(),o=r.state,a=Math.max(300,n-e),c=16,l=new Ve;
+ l.position.set(0,e);
+ const u=(new ip).roundRect(0,0,yUi,a,16).fill(GIi);
+ u.eventMode="none",l.addChild(u);
+ const d=new Ve;
+ if(s.claimed){
+ const t=nAi.areaStamp("mini");
+ if(t){
+ const i=new Ye(t);
+ i.width=i.height=34,d.addChild(i)}
+ }
+ else if(s.ready){
+ d.addChild((new ip).circle(17,17,15).fill(VIi));
+ const t=_ki("pearl",18);
+ t.position.set(8,8),d.addChild(t)}
+ else{
+ const t=s.need?s.have/s.need:0,i=(new ip).circle(17,17,15).fill({
+ color:16777215,alpha:.22}
+ );
+ t>0&&i.moveTo(17,17).arc(17,17,15,-Math.PI/2,-Math.PI/2+2*Math.PI*t).closePath().fill(VIi),i.circle(17,17,12).fill(1447707);
+ const e=rki(`${
+ s.point+1}
+ `,16777215,14);
+ e.position.set(17-e.width/2,17-e.height/2),d.addChild(i,e)}
+ d.position.set(c,14);
+ const f=rki(s.name,KIi,19);
+ f.position.set(60,31-f.height/2);
+ const p=qRi(`난이도 ${
+ s.level}
+ `,zIi,BIi);
+ if(l.addChild(d,f,p),s.claimed)oki(f,yUi-170-p.width-10-f.x);
+ else{
+ const t=_ki("pearl",20),i=rki(`${
+ s.pearl}
+ `,JIi,16);
+ i.position.set(yUi-c-i.width,31-i.height/2),t.position.set(i.x-24,21),l.addChild(t,i),oki(f,t.x-12-p.width-10-f.x)}
+ p.position.set(f.x+f.width+10,18);
+ const g=rki(`${
+ s.claimed?"클리어":s.ready?"다 잡았어요!":`남은 물고기 ${
+ s.missing.length}
+ `}
+  · ${
+ s.have}
+ /${
+ s.need}
+ `,zIi,14),w=s.claimed?yUi-150:yUi-c;
+ g.position.set(w-g.width,60);
+ const m=new ip;
+ vki(m,c,66,Math.max(60,g.x-12-c),8,s.need?s.have/s.need:0,s.claimed?qIi:VIi),m.eventMode="none",l.addChild(m,g);
+ const v=[...s.missing,...s.species.filter(t=>o.dex[t.id])],_=(yUi-32)/6;
+ v.forEach((t,i)=>{
+ const s=!!o.dex[t.id],e=c+i%6*_,n=92+110*Math.floor(i/6),h=new Ve,r=new lki(72,!1,!0);
+ r.set(t.id,t.star,0,!s),r.setFade(s?.55:1),r.setMark(null,GIi),r.position.set((_-72)/2,0);
+ const a="전체"===t.tide?null:mSi[wSi.indexOf(t.tide)],u=rki(s?"✓ 잡음":`${
+ "O"===t.zone&&"B"===t.depth?"심해":gSi[t.depth]}
+ ${
+ a?` · ${
+ a}
+ `:""}
+ `,s?qIi:zIi,12,s);
+ oki(u,_-4),u.position.set((_-u.width)/2,80),h.addChild(r,u),h.position.set(e,n),h.eventMode="static",h.cursor="pointer",h.hitArea=new Ui(0,0,_,102),h.on("pointertap",i=>{
+ i.stopPropagation(),queueMicrotask(()=>{
+ this.areaPop=t.id,this.renderArea(!0)}
+ )}
+ ),l.addChild(h)}
+ );
+ const M=a-c-58;
+ if(s.ready){
+ const t=new pki("",yUi-32,58,18),i=rki("받기",jIi,18),e=_ki("pearl",22),n=rki(`${
+ s.pearl}
+ `,jIi,18),h=i.width+10+22+6+n.width;
+ i.position.set((yUi-32-h)/2,(58-i.height)/2),e.position.set(i.x+i.width+10,18),n.position.set(e.x+28,(58-n.height)/2),t.addChild(i,e,n),t.position.set(c,M),t.onTap=()=>{
+ this.claimAreaRow(s,t)}
+ ,l.addChild(t)}
+ else if(s.claimed){
+ const t=r.areaClaimed().filter(t=>Math.floor(t/9)===Math.floor(s.idx/9)).length+(this.previewIdx!==s.idx||r.areaClaimed().includes(s.idx)?0:1),i=(new ip).roundRect(c,M,yUi-32,58,9).fill(2762274),e=_ki("pearl",20),n=rki(`진주 ${
+ s.pearl}
+  받았어요 · 도장 ${
+ t}
+ /9`,zIi,16),h=28+n.width;
+ e.position.set((yUi-h)/2,M+19),n.position.set(e.x+28,M+(58-n.height)/2),i.eventMode="none",l.addChild(i,e,n)}
+ else{
+ const t=o.spot.race===s.race&&o.spot.zone===s.zone&&o.spot.point===s.point,i=new pki(t?"지금 이 수역에 있어요":"이 수역으로 가기",yUi-32,58,17);
+ i.setPrimary(!1),i.enabled=!t,i.position.set(c,M),i.onTap=()=>{
+ this.goAreaRow(s)}
+ ,l.addChild(i)}
+ if(s.claimed){
+ const i=bUi(this.slam&&this.slam.key===h&&this.slam.p===s.point?0:1.2),e=new Ve,n=new ip,r=new Ve;
+ e.position.set(yUi-4-75,59),n.circle(0,0,92).fill({
+ color:13909298,alpha:.18}
+ ).circle(0,0,75).cut().circle(0,0,75).fill({
+ color:13909298,alpha:.55}
+ ).circle(0,0,58).cut(),n.scale.set(i.burst.s),n.alpha=i.burst.a;
+ const o=nAi.areaStamp(s.level);
+ if(o){
+ const t=new Ye(o);
+ t.anchor.set(.5),t.width=t.height=150,r.addChild(t)}
+ t.poseStamp(r,i),e.addChild(n,r),e.eventMode="none",l.addChild(e),this.slam&&this.slam.key===h&&this.slam.p===s.point&&(this.slamRefs.stamp=r,this.slamRefs.burst=n,this.slamRefs.panel=l)}
+ i.addChild(l)}
+ static poseStamp(t,i){
+ t.scale.set(i.scale*i.sx,i.scale*i.sy);
+ const s=t.children[0];
+ s&&(s.rotation=i.rot*Math.PI/180),t.alpha=i.alpha}
+ async claimAreaRow(t,i){
+ if(this.areaBusy)return;
+ this.areaBusy=!0;
+ const s=RIi.getInstance(),e=i.toGlobal({
+ x:(yUi-32)/2,y:29}
+ );
+ try{
+ const i=await s.claimArea(t.race,t.zone,t.point);
+ if(i.message)return void vH.getInstance().showMessage(i.message);
+ vH.getInstance().showMessage(i.bonus?`${
+ t.name}
+  도장! 진주 ${
+ i.pearl}
+  · 지역 9곳을 다 채워 진주 ${
+ i.bonus}
+  더`:`${
+ t.name}
+  도장! 진주 ${
+ i.pearl}
+ `),this.playSlam(`${
+ t.race}
+ |${
+ t.zone}
+ `,t.point,e,i.bonus?10:5)}
+ finally{
+ this.areaBusy=!1}
+ }
+ playSlam(i,s,e,n){
+ this.areaKey=i,this.areaSel=s;
+ const h={
+ key:i,p:s,t0:performance.now(),from:e,pearls:n,hit:!1,flown:!1}
+ ;
+ this.slam=h,this.renderArea(!0);
+ const r=Qt(()=>{
+ if(this.slam!==h)return;
+ const i=Math.min(1.2,(performance.now()-h.t0)/1e3*t.stampSpeed),s=bUi(i),e=this.slamRefs;
+ e.stamp&&!e.stamp.destroyed&&t.poseStamp(e.stamp,s),e.burst&&!e.burst.destroyed&&(e.burst.scale.set(s.burst.s),e.burst.alpha=s.burst.a),e.panel&&!e.panel.destroyed&&(e.panel.x=s.shake),e.pin&&!e.pin.destroyed&&e.pin.scale.set(s.pin),!h.hit&&i>=wUi&&(h.hit=!0,jG("medium"),qG.getInstance().playSFX(qG.SFX_WOOD_MALLET)),!h.flown&&i>=.3&&(h.flown=!0,h.pearls&&CRi.getInstance().flyCurrency("pearl",h.from,h.pearls)),i<1.2?requestAnimationFrame(r):(this.slam=null,this.renderArea(!0))}
+ ,"step");
+ requestAnimationFrame(r)}
+ async goAreaRow(t){
+ var i;
+ const s=RIi.getInstance(),e=await s.goTo({
+ race:t.race,zone:t.zone,point:t.point,depth:(null==(i=t.missing[0])?void 0:i.depth)??s.state.spot.depth}
+ );
+ e?vH.getInstance().showMessage(e):(vH.getInstance().showMessage(`${
+ t.name}
+ (으)로 가요 · 못 잡은 물고기 ${
+ t.missing.length}
+ 마리`),CRi.getInstance().selectTab("fish"))}
+ drawAreaSheet(i,s){
+ const e=RIi.getInstance(),n=e.state,h=CRi.OVERLAY_PAD,r=t.LIFT,o=(new ip).rect(-h,r,yUi+2*h,s).fill({
+ color:0,alpha:HIi}
+ );
+ o.eventMode="static",o.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>{
+ this.areaSheet=!1,this.renderArea(!0)}
+ )}
+ );
+ const a=["R","C","O"],c=(yUi-74-16)/3,l=90+96*uSi.length+16,u=new Ve;
+ u.position.set(0,r+s-l),u.eventMode="static",u.on("pointertap",t=>t.stopPropagation()),u.addChild((new ip).roundRect(-h,0,yUi+2*h,l+30,22).fill(FIi));
+ const d=rki("지역",KIi,19),f=rki(`12곳 · 수역 ${
+ e.areaClaimed().length}
+ /108 · 지역마다 9곳을 다 채우면 진주 +300`,zIi,13);
+ d.position.set(0,24),f.position.set(d.width+14,24+d.height-f.height-2),oki(f,yUi-60-f.x);
+ const p=new Ve,g=(new ip).moveTo(12,12).lineTo(28,28).moveTo(28,12).lineTo(12,28).stroke({
+ color:zIi,width:3,cap:"round"}
+ );
+ g.eventMode="none",p.addChild(g),p.position.set(yUi-40,16),p.eventMode="static",p.cursor="pointer",p.hitArea=new Ui(0,0,40,40),p.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>{
+ this.areaSheet=!1,this.renderArea(!0)}
+ )}
+ ),u.addChild(d,f,p),a.forEach((t,i)=>{
+ const s=rki(pSi[t],zIi,13);
+ s.position.set(74+i*(c+8)+(c-s.width)/2,70),u.addChild(s)}
+ ),uSi.forEach((t,i)=>{
+ const s=96+96*i,e=(new ip).circle(6,s+44,5).fill(hki[t]),h=rki(t,KIi,14);
+ e.eventMode="none",h.position.set(18,s+(88-h.height)/2),u.addChild(e,h),a.forEach((i,e)=>{
+ const h=`${
+ t}
+ |${
+ i}
+ `,r=74+e*(c+8),o=n.gear.boat<DAi.ENTRY[i],a=this.areaRowsOf(t,i),l=a.filter(t=>t.claimed).length,d=new Ve,f=(new ip).roundRect(0,0,c,88,12).fill(o?1908001:h===this.areaKey?ZIi:GIi);
+ f.eventMode="none";
+ const p=rki(vSi[h],o?YIi:KIi,15);
+ if(p.position.set(12,16),oki(p,c-24),d.addChild(f,p),o){
+ const t=NIi("lock",16,YIi,2.4),s=rki(`배 ${
+ DAi.ENTRY[i]+1}
+ 단계부터`,YIi,12);
+ t.position.set(12,54),s.position.set(32,62-s.height/2),oki(s,c-44),d.addChild(t,s)}
+ else{
+ const t=rki(`${
+ l}
+ /9`,zIi,13),i=new ip;
+ if(t.position.set(12,62-t.height/2),a.forEach((s,e)=>i.roundRect(t.x+t.width+8+11*e,58,8,8,2.5).fill(s.claimed?13909298:s.ready?VIi:3816e3)),i.eventMode="none",d.addChild(t,i),a.some(t=>t.ready)){
+ const t=(new ip).circle(c-12,12,5).fill(15029053);
+ t.eventMode="none",d.addChild(t)}
+ d.eventMode="static",d.cursor="pointer",d.hitArea=new Ui(0,0,c,88),d.on("pointertap",t=>{
+ t.stopPropagation(),queueMicrotask(()=>{
+ this.areaKey=h,this.areaSel=null,this.areaSheet=!1,this.renderArea(!0)}
+ )}
+ )}
+ d.position.set(r,s),u.addChild(d)}
+ )}
+ ),i.addChild(o,u)}
+ drawAreaPop(i,s,e){
+ const n=RIi.getInstance(),h=kSi(s),r=!!n.state.dex[s],o=CRi.OVERLAY_PAD,a=t.LIFT,c=Qt(()=>{
+ queueMicrotask(()=>{
+ this.areaPop=null,this.renderArea(!0)}
+ )}
+ ,"close"),l=(new ip).rect(-o,a,yUi+2*o,e).fill({
+ color:0,alpha:HIi}
+ );
+ l.eventMode="static",l.on("pointertap",t=>{
+ t.stopPropagation(),c()}
+ );
+ const u=Math.min(yUi-40,500),d=new Ve,f=new ip;
+ d.eventMode="static",d.on("pointertap",t=>t.stopPropagation());
+ const p=new lki(104,!1,!0);
+ p.set(h.id,h.star,0,!r),p.position.set(20,20);
+ const g=rki(r?h.name:"???",r?KIi:zIi,21);
+ g.position.set(142,22),oki(g,u-20-122-52);
+ const w=new Ve,m=$Si(h);
+ [qRi(`★${
+ h.star}
+ `,VIi,BIi),qRi(h.kind,zIi,BIi),...m?[qRi(m,zIi,BIi)]:[]].forEach((t,i,s)=>{
+ t.x=i?s[i-1].x+s[i-1].width+6:0,w.addChild(t)}
+ ),w.position.set(142,56);
+ const v=XRi([{
+ text:r?"✓ 잡았어요":"아직 못 잡았어요",color:r?qIi:zIi}
+ ]);
+ v.position.set(142,94);
+ const _=JRi(h,!r&&h.star>=3,u-40);
+ _.position.set(20,144);
+ const M=new Ve,b=(new ip).moveTo(14,14).lineTo(30,30).moveTo(30,14).lineTo(14,30).stroke({
+ color:zIi,width:3,cap:"round"}
+ );
+ b.eventMode="none",M.addChild(b),M.position.set(u-52,8),M.eventMode="static",M.cursor="pointer",M.hitArea=new Ui(0,0,44,44),M.on("pointertap",t=>{
+ t.stopPropagation(),c()}
+ );
+ const y=144+_.height+20;
+ f.roundRect(0,0,u,y,16).fill(FIi),d.addChild(f,p,g,w,v,_,M),d.hitArea=new Ui(0,0,u,y),d.position.set((yUi-u)/2,a+Math.max(10,(e-y)/2)),i.addChild(l,d)}
+ previewStamp(t=!1){
+ const i=RIi.getInstance(),s=i.state.spot,e=`${
+ s.race}
+ |${
+ s.zone}
+ `,n=i.areaRows(s.race,s.zone),h=n.findIndex(t=>t.idx===this.previewIdx),r=t?h+1:Math.max(0,h),o=[...n.slice(r),...n.slice(0,r)].find(t=>!t.claimed)??n[0];
+ this.view="area",this.previewIdx=o.idx,this.playSlam(e,o.point,{
+ x:0,y:0}
+ ,0)}
+ renderContest(){
+ var t;
+ const i=RIi.getInstance(),s=i.state,e=i.eventDay(),n=i.now(),h=s.contest,r=i.contestStanding(),o=!!h&&!h.claimed,a=this.contestShown(),c=o&&h.day!==e&&OG.getInstance().development&&!(null==r?void 0:r.ended);
+ this.cTitle.text=`${
+ o?h.day:e}
+ 일차 · ${
+ a.title}
+ ${
+ o&&h.day!==e?c?" · 개발로 엶":" (지난 대회)":""}
+ `,oki(this.cTitle,yUi-280),this.cDesc.text=a.desc,oki(this.cDesc,yUi-32);
+ const l=a.speciesId?kSi(a.speciesId):null;
+ if(this.cTarget.visible=!!l,this.cGo.visible=!!l,l){
+ const t=!!s.dex[l.id];
+ this.cTarget.set(l.id,l.star,0,!t),this.cTargetText.text=`${
+ t?l.name:"???"}
+  · 가장 무거운 한 마리`,this.cTargetSub.text=`${
+ vSi[`${
+ l.race}
+ |${
+ l.zone}
+ `]}
+  · ${
+ "전체"===l.tide?"모든 물때":`${
+ l.tide}
+  물때`}
+  · ${
+ t?HSi(l):"소문만 무성해요"}
+ `,this.cTargetText.x=this.cTargetSub.x=78}
+ else{
+ const t=PSi(n);
+ this.cTargetText.text="tidePct"===a.kind?`${
+ mSi[a.tide]}
+ 에 잡은 물고기만`:"class"===a.kind?`${
+ a.kindClass}
+  종류만`:"어디서 잡아도 돼요",this.cTargetSub.text="tidePct"===a.kind?t===a.tide?"지금이 그 시간대예요!":`다음 ${
+ mSi[a.tide]}
+ 까지 ${
+ Mki(LSi(n,a.tide))}
+ `:"count"===a.kind||"class"===a.kind||"dex"===a.kind?"켜둔 시간이 길수록 유리해요":"종 대비 크기(%)로 겨뤄서 대양 고래가 없어도 공평해요",this.cTargetText.x=this.cTargetSub.x=16}
+ oki(this.cTargetText,yUi-210),oki(this.cTargetSub,yUi-210);
+ const u=!!h&&h.day===e;
+ if(this.cBar.clear(),h&&r&&!h.claimed?(this.cStatus.text=r.ended?`대회 끝! 지금 ${
+ r.myRank}
+ 위 · 결과를 받아 주세요`:`${
+ h.room}
+ 번 방 · 지금 ${
+ r.myRank}
+ 위 · 남은 시간 ${
+ Mki(h.endAt-n)}
+ `,this.cBtn.setText(r.ended?"결과 받기":"진행 중"),this.cBtn.enabled=r.ended,vki(this.cBar,16,218,yUi-32-(this.devEnd.visible?120:0),6,r.progress,r.ended?qIi:VIi)):u?(this.cStatus.text="오늘 대회는 끝났어요. 내일 새 대회가 열려요.",this.cBtn.setText("내일 다시"),this.cBtn.enabled=!1):null!=(null==(t=i.season)?void 0:t.endAt)&&n+432e5>i.season.endAt+(s.devOffset??0)?(this.cStatus.text="오늘 대회는 마감됐어요. 회차가 곧 끝나요",this.cBtn.setText("마감"),this.cBtn.enabled=!1):(this.cStatus.text="누르면 선착순으로 30명 방에 들어가요. 방이 차면 12시간.",this.cBtn.setText("참가하기"),this.cBtn.enabled=!0),oki(this.cStatus,yUi-32-120),this.devEnd.visible=OG.getInstance().development&&!!h&&!!r&&!r.ended&&!h.claimed,this.devEnd.position.set(yUi-126,186),this.renderRewardStrip(o?h.day:e),this.board.visible=this.boardTitle.visible=!(!h||!r||h.claimed),h&&r&&!h.claimed){
+ this.boardTitle.text=`${
+ h.room}
+ 번 방 순위 · 30명`;
+ const t=yTi(h.day),i=r.rows,s=r.myRank-1,e=s<6?i.slice(0,7).map((t,i)=>({
+ r:t,i}
+ )):[...i.slice(0,5).map((t,i)=>({
+ r:t,i}
+ )),{
+ r:null,i:-1}
+ ,{
+ r:i[s],i:s}
+ ];
+ this.boardRows.forEach((i,s)=>{
+ const n=e[s];
+ if(i.root.visible=!!n,!n)return;
+ i.bg.clear();
+ const r=n.r&&n.r.score>0?n.i+1:0;
+ if(i.medal.label!==String(r)&&(i.medal.label=String(r),i.medal.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),r>=1&&r<=3&&i.medal.addChild(Aki(r,28))),!n.r)return i.rank.text="",i.name.text="⋮",i.score.text="",void(i.gold.text="");
+ const o=n.r.me,a=n.i+1;
+ i.bg.roundRect(0,0,yUi,34,8).fill(o?UIi:GIi),o&&i.bg.stroke({
+ color:6012341,width:1.5}
+ ),i.rank.text=r>=1&&r<=3?"":r?`${
+ r}
+ `:"-",i.rank.position.set(24-i.rank.width/2,8),i.name.text=`${
+ o?"나":n.r.name}
+ ${
+ 1===r?" · 우승":2===r?" · 아차상":""}
+ `,i.name.textColor=o?10481894:KIi,i.score.text=n.r.score>0?ATi(t,n.r.score):"기록 없음",i.score.textColor=n.r.score>0?KIi:YIi,i.gold.text=`${
+ SUi(h.day,a).toLocaleString()}
+  G`,i.gold.alpha=r?1:.5,i.gold.position.set(yUi-14-i.gold.width,10),i.score.position.set(yUi-104-i.score.width,8)}
+ )}
+ const d=12+(this.board.visible?676:376);
+ this.calTitle.position.set(4,d);
+ const f=(yUi-24)/5,p=OG.getInstance().development,g=p&&h&&!h.claimed?h.day:e;
+ this.calHint.visible=p,this.calHint.position.set(yUi-this.calHint.width-4,d+2);
+ const w=10*Math.floor((Math.max(1,e)-1)/10);
+ this.cal.forEach((t,i)=>{
+ const n=i%5*(f+6),h=d+30+66*Math.floor(i/5),r=w+i+1,o=r===g,a=!p&&r<e,c=s.history.find(t=>t.day===r);
+ t.d=r,t.hit.eventMode=p?"static":"none",t.hit.hitArea=new Ui(n,h,f,60),t.bg.clear().roundRect(n,h,f,60,8).fill(o?VIi:GIi),o||t.bg.stroke({
+ color:WIi,width:1,alpha:a?.4:1}
+ ),t.day.text=`${
+ r}
+ 일`,t.day.textColor=o?jIi:a?YIi:KIi,t.day.position.set(n+8,h+5),t.title.text=yTi(r).title,t.title.textColor=o?jIi:zIi,oki(t.title,f-12),t.title.position.set(n+8,h+36);
+ const l=c&&c.rank<=3?c.rank:0;
+ if(t.cup.label!==String(l)&&(t.cup.label=String(l),t.cup.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),l)){
+ const i=Eki(l,26);
+ i.position.set(n+f-30,h+4),t.cup.addChild(i)}
+ t.res.text=c&&!l?`${
+ c.rank}
+ 위`:"",t.res.position.set(n+f-t.res.width-6,h+7)}
+ )}
+ async devOpenDay(t){
+ if(!this.calBusy&&OG.getInstance().development){
+ this.calBusy=!0;
+ try{
+ const i=await RIi.getInstance().devContestDay(t);
+ vH.getInstance().showMessage(i??`${
+ t}
+ 일 · ${
+ yTi(t).title}
+  대회를 열었어요 (개발 · 12시간)`),i||jG("light")}
+ finally{
+ this.calBusy=!1}
+ this.render()}
+ }
+ renderRewardStrip(t){
+ const i=this.rewardStrip;
+ if(i.label===String(t))return;
+ i.label=String(t),i.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const s=(yUi-24)/4;
+ [{
+ r:1,t:"우승"}
+ ,{
+ r:2,t:"아차상"}
+ ,{
+ r:3,t:"3등"}
+ ,{
+ r:30,t:"꼴찌도"}
+ ].forEach((e,n)=>{
+ const h=n*(s+8);
+ if(i.addChild(Object.assign(aki(s,58,GIi,WIi,10),{
+ x:h}
+ )),e.r<=3){
+ const t=Aki(e.r,24);
+ t.position.set(h+8,5),i.addChild(t)}
+ const r=rki(e.t,e.r<=3?KIi:zIi,12);
+ r.position.set(h+(e.r<=3?36:10),9);
+ const o=_ki("gold",14);
+ o.position.set(h+10,35);
+ const a=rki(`${
+ SUi(t,e.r).toLocaleString()}
+  · 진주 ${
+ CTi(e.r)}
+ `,VIi,12);
+ oki(a,s-34),a.position.set(h+28,33),i.addChild(r,o,a)}
+ )}
+ renderVisit(){
+ const t=RIi.getInstance(),i=t.quests(),s=t.visitorsOpen();
+ if(this.vCards.forEach((t,e)=>{
+ t.root.visible=s&&e<i.reqs.length}
+ ),!s)return this.vNext.text="아직 찾아온 손님이 없어요",void oki(this.vNext,yUi-8);
+ this.vNext.text=`손님 배를 눌러도 납품할 수 있어요 · 다음 손님까지 ${
+ Mki(i.nextAt-t.now())}
+ `,oki(this.vNext,yUi-8);
+ const e=[14921803,13132906,5995472];
+ i.reqs.forEach((s,n)=>{
+ const h=this.vCards[n],r=kSi(s.speciesId),o=i.done.includes(s.key),a=t.questHave(s),c=!o&&a>=s.count;
+ h.bg.clear().roundRect(.5,.5,yUi-1,180,14).fill(c?2244666:GIi).stroke({
+ color:c?qIi:WIi,width:c?1.5:1}
+ ),h.av.clear().circle(40,38,26).fill(e[n]).circle(40,38,26).stroke({
+ color:16777215,width:2,alpha:.35}
+ ),h.init.text=s.npc[0],h.init.position.set(40-h.init.width/2,38-h.init.height/2);
+ const l=nAi.gear().guestHeads,u=["m","b","e"].indexOf(s.key.slice(-1));
+ u>=0&&l[u]?(h.face.texture=l[u],h.face.width=h.face.height=56,h.face.visible=!0,h.av.clear(),h.init.visible=!1):(h.face.visible=!1,h.init.visible=!0),h.npc.text=`${
+ s.npc}
+  · ${
+ s.role}
+ `,h.line.text=s.line;
+ const d=!!t.state.dex[r.id];
+ h.fish.set(r.id,r.star,s.minGrade,!d);
+ const f=d||s.line.includes(r.name);
+ if(h.ask.text=`${
+ f?r.name:"???"}
+ ${
+ s.minGrade?` (${
+ dTi(s.minGrade)}
+  이상)`:""}
+  ×${
+ s.count}
+    ${
+ Math.min(a,s.count)}
+ /${
+ s.count}
+ `,h.ask.textColor=c?qIi:KIi,oki(h.ask,yUi-88-20),h.where.text=d?HSi(r):`${
+ vSi[`${
+ r.race}
+ |${
+ r.zone}
+ `]}
+  어딘가 · ${
+ "전체"===r.tide?"모든 물때":`${
+ r.tide}
+  물때`}
+ `,oki(h.where,yUi-88-20),h.bar.clear(),vki(h.bar,88,132,yUi-88-232,6,a/s.count,c||o?qIi:VIi),h.reward.label!==s.key){
+ h.reward.label=s.key,h.reward.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const t=_ki("gold",16),i=rki(s.gold.toLocaleString(),VIi,13);
+ if(i.position.set(20,-1),h.reward.addChild(t,i),s.pearl){
+ const t=_ki("pearl",16),e=rki(`${
+ s.pearl}
+ `,JIi,13);
+ t.x=i.x+i.width+12,e.position.set(t.x+20,-1),h.reward.addChild(t,e)}
+ }
+ if(h.btn.enabled=c,h.btn.setText(o?"완료":"납품"),h.go.visible=!o&&!c,h.go.onTap=async()=>{
+ const i=USi(r);
+ !d&&r.star>=3&&(i.point=0);
+ const s=await t.goTo(i);
+ s?vH.getInstance().showMessage(s):(vH.getInstance().showMessage(`${
+ vSi[`${
+ r.race}
+ |${
+ r.zone}
+ `]}
+ (으)로 옮겼어요`),CRi.getInstance().selectTab("fish"))}
+ ,h.btn.onTap=async()=>{
+ const i=await t.deliver(s);
+ if(i)return void vH.getInstance().showMessage(i);
+ vH.getInstance().showMessage(`${
+ s.npc}
+ : "고마워요!"`),jG("success");
+ const e=CRi.getInstance();
+ e.flyCurrency("gold",h.btn.toGlobal({
+ x:52,y:22}
+ ),7),s.pearl&&e.flyCurrency("pearl",h.btn.toGlobal({
+ x:52,y:22}
+ ),4),this.render(),MR.fromTo(h.stamp.scale,{
+ x:1.8,y:1.8}
+ ,{
+ x:1,y:1,duration:.35,ease:"back.out(2)"}
+ )}
+ ,h.root.alpha=o?.72:1,h.stamp.label!==String(o)&&(h.stamp.label=String(o),h.stamp.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ))),o&&!h.stamp.children.length){
+ const t=(new ip).roundRect(-58,-20,116,40,8).stroke({
+ color:qIi,width:3}
+ ),i=rki("납품 완료",qIi,18);
+ i.pivot.set(i.width/2,i.height/2),h.stamp.addChild(t,i),h.stamp.position.set(yUi-90,58),h.stamp.rotation=-.18}
+ }
+ )}
+ renderRecords(){
+ var t,i;
+ const s=RIi.getInstance(),e=s.records(),n=this.records;
+ n.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),n.addChild(aki(yUi,128,BIi,null,12));
+ const h=e.heaviest?`${
+ kSi(e.heaviest.id).name}
+  ${
+ _Ti(e.heaviest.kg)}
+ `:"-",r=[...(null==(t=s.life)?void 0:t.cups)??[],...s.state.cups],o=[1,2,3].map(t=>r.filter(i=>i.rank===t).length),a=r.length?`금 ${
+ o[0]}
+  · 은 ${
+ o[1]}
+  · 동 ${
+ o[2]}
+ `:"-",c=new Set([...Object.keys((null==(i=s.life)?void 0:i.dex)??{
+ }
+ ),...Object.keys(s.state.dex)]).size,l=[["총 포획",`${
+ e.total.toLocaleString()}
+ 마리`],["도감",`${
+ e.kinds}
+ /192종`],["최고 별",e.topStar?`★${
+ e.topStar}
+ `:"-"],["왕 크기",`${
+ e.sCount}
+ 종`],["누적 판매",`${
+ s.state.sales.toLocaleString()}
+  G`],["가장 무거운 한 마리",h],["대회 컵 (전체)",a],["평생 도감",`${
+ c}
+ /192종`]],u=(yUi-28)/4;
+ l.forEach(([t,i],s)=>{
+ const e=rki(t,zIi,11,!1),h=rki(i,5===s?VIi:KIi,15),r=14+s%4*u,o=12+58*Math.floor(s/4);
+ e.position.set(r,o),h.position.set(r,o+17),oki(h,u-8),n.addChild(e,h)}
+ )}
+ renderGoals(){
+ const i=RIi.getInstance();
+ this.renderRecords(),this.goalList.setListHeight(CRi.contentHeight-56-128-10+t.LIFT,!1);
+ const s=i.milestoneRows(),e=Qt(t=>t.claimed?2:t.progress>=t.need?0:1,"order");
+ s.sort((t,i)=>e(t)-e(i)||i.progress/i.need-t.progress/t.need),this.goalList.dataProvider=s.map(t=>({
+ ...t,onClaim:Qt(async s=>{
+ const e=await i.claimMilestone(t.kind,t.idx);
+ e?vH.getInstance().showMessage(e):(vH.getInstance().showMessage(`진주 ${
+ t.pearl}
+ 개를 받았어요`),CRi.getInstance().flyCurrency("pearl",s.toGlobal({
+ x:55,y:20}
+ ),6),this.render())}
+ ,"onClaim")}
+ ))}
+ }
+ ;
+ Qt(kUi,"FishingQuestPage"),Zt(kUi,"instance"),Zt(kUi,"LIFT",48),Zt(kUi,"stampSpeed",1);
+ let RUi=kUi;
+ const xUi=Object.freeze(Object.defineProperty({
+ __proto__:null,FishingQuestPage:RUi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),PUi=CRi.CONTENT_W,NUi={
+ bait_fish:"shrimp",bait_shell:"shell",bait_aqua:"lure",bait_big:"bigbait"}
+ ,LUi=class t extends Ve{
+ constructor(t){
+ super(),Zt(this,"tabId","shop"),Zt(this,"view","items"),Zt(this,"banner",new Ve),Zt(this,"bannerBg",new ip),Zt(this,"bannerIcon",new Ve),Zt(this,"bannerTitle",rki("",KIi,14)),Zt(this,"bannerSub",rki("",zIi,12,!1)),Zt(this,"bannerBar",new ip),Zt(this,"rows",[]),Zt(this,"rewardIcons",Array.from({
+ length:4}
+ ,()=>new p4)),Zt(this,"qty",new Map),Zt(this,"locked",!1),Zt(this,"itemIcons",new Map),Zt(this,"bannerKey",""),Zt(this,"busy",!1),this.only=t,this.view=t,this.banner.y=0,this.bannerIcon.position.set(12,12),this.bannerTitle.position.set(66,12),this.bannerSub.position.set(66,36),this.bannerBar.eventMode="none",this.bannerSub.setWrapWidth(PUi-80),this.banner.addChild(this.bannerBg,this.bannerIcon,this.bannerTitle,this.bannerSub,this.bannerBar),this.banner.eventMode="none",this.addChild(this.banner);
+ for(let i=0;
+ i<Math.max(BTi.length,4);
+ i++){
+ const t=new Ve;
+ t.y=78+88*i;
+ const s=aki(PUi,80,GIi,null),e=(new ip).roundRect(12,12,56,56,12).fill(BIi);
+ e.eventMode="none";
+ const n=new Ve;
+ n.position.set(40,40);
+ const h=rki("",KIi,16),r=rki("",zIi,13,!1),o=new pki("",150,46,15),a=new Ve;
+ h.position.set(84,16),r.position.set(84,46),o.position.set(PUi-164,17),a.eventMode="none";
+ const c=[0,1,2].map(t=>{
+ const i=new dki("",64,30,13);
+ return i.position.set(84+70*t,42),i.visible=!1,i}
+ );
+ t.addChild(s,e,n,h,r,o,a,...c),this.addChild(t),this.rows.push({
+ root:t,tile:e,icon:n,name:h,desc:r,btn:o,cost:a,qtyChips:c}
+ )}
+ this.rewardIcons.forEach(t=>{
+ t.eventMode="none"}
+ )}
+ static getInstance(){
+ return this.instance??(this.instance=new t("exchange"))}
+ async guarded(t){
+ if(!this.busy){
+ this.busy=!0;
+ try{
+ return await t()}
+ finally{
+ this.busy=!1}
+ }
+ }
+ onShow(){
+ this.render()}
+ forceExchange(t){
+ this.locked=t,RIi.getInstance().ready&&this.render()}
+ onHide(){
+ }
+ update(){
+ this.renderBanner()}
+ focusItem(t){
+ var i;
+ this.render();
+ const s=BTi.findIndex(i=>i.id===t);
+ return s<0?null:(null==(i=this.rows[s])?void 0:i.btn)??null}
+ render(){
+ const t=RIi.getInstance(),i=t.state;
+ this.view=this.only,this.renderBanner(),"items"===this.view?this.rows.forEach((s,e)=>{
+ const n=BTi[e];
+ if(s.root.visible=!!n,s.qtyChips.forEach(t=>{
+ t.visible=!1}
+ ),s.desc.visible=!0,!n)return;
+ let h=this.itemIcons.get(n.id);
+ h||(h=yki(NUi[n.id]??"shrimp",40,KIi),h.pivot.set(20,20),this.itemIcons.set(n.id,h)),this.setIcon(s,h),s.name.text=n.name,s.desc.text=n.desc,oki(s.desc,PUi-260);
+ const r=n.pearl?i.pearl>=n.pearl:i.gold>=(n.gold??0);
+ this.setCost(s,n.pearl?"pearl":"gold",n.pearl??n.gold??0,r),s.btn.enabled=r,s.btn.onTap=async()=>{
+ const i=await this.guarded(()=>t.buy(n));
+ void 0!==i&&(i?vH.getInstance().showMessage(i):(vH.getInstance().showMessage(n.bait?`${
+ n.name}
+  사용 · 30분 동안 효과`:`${
+ n.name}
+ 을(를) 샀어요`),jG("light"),MR.fromTo(s.icon.scale,{
+ x:1.35,y:1.35}
+ ,{
+ x:1,y:1,duration:.4,ease:"back.out(3)"}
+ ),this.render()))}
+ }
+ ):this.rows.forEach((i,s)=>{
+ const e=t.shop[s];
+ if(i.root.visible=!!e,i.qtyChips.forEach(t=>{
+ t.visible=!!e}
+ ),!e)return;
+ i.desc.visible=!1;
+ const n=t.exchangeMax(e),h=Math.max(1,Math.min(this.qty.get(e.kindNum)??1,Math.max(1,n))),r=this.rewardIcons[s];
+ r.setData(e.reward.type,e.reward.amount,-1,-1,e.reward.subType??""),r.hideAmount(),r.scale.set(52/64),r.pivot.set(32,32),this.setIcon(i,r),i.name.text=h>1?`${
+ e.name}
+  × ${
+ h.toLocaleString()}
+ `:e.name,oki(i.name,PUi-260),this.setCost(i,"pearl",e.pearl*h,n>=h),i.btn.enabled=n>=h,i.btn.onTap=async()=>{
+ const s=await this.guarded(()=>t.exchange(e,h));
+ void 0!==s&&(s?vH.getInstance().showMessage(s):(vH.getInstance().showMessage(`${
+ e.name}
+ ${
+ h>1?` × ${
+ h.toLocaleString()}
+ `:""}
+ , 메인 게임 우편함으로 보냈어요`),jG("success"),MR.fromTo(i.icon.scale,{
+ x:1.3,y:1.3}
+ ,{
+ x:1,y:1,duration:.4,ease:"back.out(3)"}
+ ),this.render()))}
+ ;
+ const o=[1,10,Math.max(1,n)];
+ i.qtyChips.forEach((t,i)=>{
+ t.setText(2===i?"최대":String(o[i])),t.selected=h===o[i]&&(2!==i||n>10),t.enabled=0===i||n>=o[i],t.draw(),t.onTap=()=>{
+ this.qty.set(e.kindNum,o[i]),this.render()}
+ }
+ )}
+ )}
+ renderBanner(){
+ var t;
+ const i=RIi.getInstance(),s=i.state,e=i.baitLeftMs(),n="items"===this.view&&e>0&&!!s.bait;
+ this.bannerBar.clear();
+ const h=n?BTi.find(t=>t.bait===s.bait.kind):null,r="items"===this.view?(null==h?void 0:h.id)??"none":"pearl";
+ if(r!==this.bannerKey&&(this.bannerKey=r,this.bannerIcon.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ )),this.bannerIcon.addChild("pearl"===r?_ki("pearl",40):yki(h?NUi[h.id]:"hook",40,zIi))),"items"===this.view)this.bannerTitle.text=n?`사용 중 · ${
+ (null==h?void 0:h.name)??s.bait.kind}
+  · ${
+ Mki(e)}
+  남음`:"미끼 없음",this.bannerTitle.textColor=n?VIi:KIi,this.bannerSub.text=n?"미끼는 한 번에 하나만 효과가 있어요. 새로 사면 바뀌어요.":"미끼는 30분 동안 효과가 있어요",n&&vki(this.bannerBar,66,60,PUi-80,5,e/18e5,VIi);
+ else{
+ this.bannerTitle.text=`진주 ${
+ s.pearl.toLocaleString()}
+ 개`,this.bannerTitle.textColor=JIi;
+ const e=null==(t=i.season)?void 0:t.shopEndAt;
+ this.bannerSub.text="exchangeOnly"===i.phase()&&e?`회차가 끝났어요 · ${
+ bki(e)}
+ 까지 바꿀 수 있어요. 그 뒤 남은 진주는 사라져요.`:`대회·손님·업적으로 모아 메인 게임 재화로 바꿔요. ${
+ e?`${
+ bki(e)}
+ 까지`:"회차가 끝나고 며칠 안에"}
+  바꾸지 않은 진주는 사라져요.`}
+ oki(this.bannerSub,PUi-80),this.bannerBg.clear().roundRect(0,0,PUi,66,12).fill(n?2763288:BIi)}
+ setIcon(t,i){
+ t.icon.children[0]!==i&&(t.icon.removeChildren(),t.icon.addChild(i))}
+ setCost(t,i,s,e){
+ t.btn.setText(""),t.cost.removeChildren().forEach(t=>t.destroy({
+ children:!0}
+ ));
+ const n=_ki(i,20),h=rki(s.toLocaleString(),e?jIi:iki,16);
+ h.position.set(26,-1),n.alpha=e?1:.6,t.cost.addChild(n,h),t.cost.position.set(t.btn.x+(150-t.cost.width)/2,t.btn.y+13)}
+ }
+ ;
+ Qt(LUi,"FishingShopPage"),Zt(LUi,"instance");
+ let DUi=LUi;
+ const GUi=Object.freeze(Object.defineProperty({
+ __proto__:null,FishingShopPage:DUi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),BUi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"dim",new ip),Zt(this,"card",new ip),Zt(this,"title",rki("",VIi,24)),Zt(this,"lines",rki("",KIi,15,!1)),Zt(this,"note",rki("내 모습과 도감 기록·대회 컵은 그대로 남아요.\n골드·배·도구는 새로 시작해요.",zIi,13,!1)),Zt(this,"ok",new pki("출발!",220,50,17)),Zt(this,"view",null),this.dim.eventMode="static",this.card.eventMode="none",this.ok.onTap=()=>{
+ var t;
+ null==(t=this.parent)||t.removeChild(this)}
+ ,this.addChild(this.dim,this.card,this.title,this.lines,this.note,this.ok)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ closeOne(){
+ var t,i;
+ return null==(i=(t=this.ok).onTap)||i.call(t),!0}
+ show(t){
+ this.view=t,this.parent||CRi.getInstance().overlay.addChild(this),this.layout(),MR.fromTo(this,{
+ alpha:0}
+ ,{
+ alpha:1,duration:.25}
+ )}
+ layout(){
+ var t;
+ const i=this.view;
+ if(!i)return;
+ const s=CRi.CONTENT_W,e=CRi.contentHeight,n=CRi.OVERLAY_PAD;
+ this.dim.clear().rect(-n,0,s+2*n,e).fill({
+ color:0,alpha:.72}
+ ),this.dim.hitArea=new Ui(-n,0,s+2*n,e);
+ const h=Math.min(s-32,460),r=(s-h)/2,o=(e-280)/2;
+ this.card.clear().roundRect(r,o,h,280,18).fill(FIi);
+ const a=(null==(t=RIi.getInstance().season)?void 0:t.id)??i.prevId+1;
+ this.title.text=`${
+ a}
+ 회차 시작!`,this.lines.text=`지난 회차에 ${
+ i.prevDex}
+ 종을 잡았어요${
+ i.prevCups?` · 대회 컵 ${
+ i.prevCups}
+ 개`:""}
+ `,oki(this.lines,h-48),this.title.position.set(r+24,o+26),this.lines.position.set(r+24,o+76),this.note.position.set(r+24,o+118),this.ok.position.set(r+(h-220)/2,o+280-74)}
+ }
+ ;
+ Qt(BUi,"FishingSeasonCard"),Zt(BUi,"instance");
+ let UUi=BUi;
+ const FUi=class{
+ static async enter(){
+ var t;
+ await nAi.ensure(),await hRi();
+ const i=RIi.getInstance(),s=await i.load(),e=i.season;
+ if("closed"===(null==e?void 0:e.phase))throw new Error(e.nextStartAt?`다음 회차는 ${
+ bki(e.nextStartAt+1)}
+ 에 열려요`:"다음 회차를 준비하고 있어요");
+ if(!i.ready)throw new Error("exchangeOnly"===(null==e?void 0:e.phase)?"이번 회차는 끝났어요. 다음 회차를 기다려 주세요":s??"낚시왕 정보를 받지 못했어요");
+ i.loadLife();
+ const n=CRi.getInstance();
+ n.onNavigate=t=>this.openTab(t);
+ const h=qGi.getInstance(),r=hBi.getInstance();
+ if(h.onOpenMap=()=>n.present(r),r.onBack=()=>n.present(h),null==(t=this.unwatch)||t.call(this),this.unwatch=i.onSeasonChange(t=>this.onSeasonChange(t)),"exchangeOnly"===i.phase())return n.setExchangeOnly(!0),await this.openTab("shop"),void vH.getInstance().showMessage(`회차가 끝났어요 · ${
+ bki(e.shopEndAt)}
+ 까지 진주를 바꿀 수 있어요`);
+ n.setExchangeOnly(!1),await this.openTab("fish"),i.newSeason&&(UUi.getInstance().show(i.newSeason),i.newSeason=null),i.isLastDay()&&(null==e?void 0:e.shopEndAt)&&vH.getInstance().showMessage(`오늘 회차가 끝나요 · 진주는 ${
+ bki(e.shopEndAt)}
+ 까지 교환소에서 바꿀 수 있어요`)}
+ static onSeasonChange(t){
+ const i=CRi.getInstance();
+ i.parent&&("exchangeOnly"===t.phase?(i.setExchangeOnly(!0),this.openTab("shop"),t.shopEndAt&&vH.getInstance().showMessage(`회차가 끝났어요 · ${
+ bki(t.shopEndAt)}
+ 까지 진주를 바꿀 수 있어요`)):"closed"===t.phase?(i.closeForSeason(),vH.getInstance().showMessage("이번 회차의 교환소가 닫혔어요")):i.setExchangeOnly(!1))}
+ static async openTab(t){
+ const i=CRi.getInstance();
+ switch(t){
+ case"fish":i.present(qGi.getInstance());
+ break;
+ case"gear":i.present(cUi.getInstance());
+ break;
+ case"tank":i.present(fxi.getInstance());
+ break;
+ case"quest":i.present(RUi.getInstance());
+ break;
+ case"shop":i.present(DUi.getInstance())}
+ }
+ }
+ ;
+ Qt(FUi,"FishingFlow"),Zt(FUi,"unwatch",null);
+ let $Ui=FUi;
+ const HUi=Object.freeze(Object.defineProperty({
+ __proto__:null,FishingFlow:$Ui}
+ ,Symbol.toStringTag,{
+ value:"Module"}
EventHubPopup 2 hunks, 481 statements
+ super(),Zt(this,"btnMine",new iB(RB.getText("GAME_1203","화석 발굴"))),Zt(this,"btnAscent",new iB(RB.getText("GAME_1716","군단 도전"))),Zt(this,"btnFishing",new iB("낚시왕 (프로토타입)")),Zt(this,"opening",!1),this.width=t.POPUP_WIDTH;
+ for(const i of[this.btnMine,this.btnAscent,this.btnFishing])i.width=this.width-2*t.SIDE_PADDING,i.height=t.BUTTON_HEIGHT,i.color=iB.BROWN,this.contentContainer.addChild(i);
+ this.btnMine.onClick=()=>{
+ this.openMine()}
+ ,this.btnAscent.onClick=()=>{
+ this.openAscent()}
+ ,this.btnFishing.onClick=()=>{
+ this.openFishing()}
+ ,this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ onAdded(){
+ MXt.getInstance().registerHubMineButtonGetter(t=>"btnMine"===t&&this.btnMine.visible?{
+ parent:this.contentContainer,btn:{
+ x:this.btnMine.x,y:this.btnMine.y,width:this.btnMine.width,height:this.btnMine.height}
+ }
+ :null)}
+ onRemoved(){
+ const t=qqt.getInstance();
+ t.mineStep=2!=t.mineStep?0:t.mineStep,MXt.getInstance().unregisterHubMineButtonGetter()}
+ static isMineOpen(){
+ return EG.maxWave>=200&&GB.isValidEvent(BB.MINE_EVENT)}
+ static isAscentOpen(){
+ return GB.isValidEvent(BB.MINI_ASCENT_EVENT)}
+ static isAscentShopOpen(){
+ return!t.isAscentOpen()&&GB.isAscentShopOpen()}
+ show(){
+ this.title=RB.getText("GAME_1844","ko"===RB.language?"이벤트":"Event"),this.btnMine.text=RB.getText("GAME_1203","화석 발굴"),this.btnAscent.text=RB.getText("GAME_1716","군단 도전"),this.btnMine.activated=t.isMineOpen(),this.btnAscent.activated=(t.isAscentOpen()||t.isAscentShopOpen())&&!this.opening,this.btnFishing.visible=t.isFishingOpen();
+ const i=[this.btnMine,this.btnAscent,this.btnFishing].filter(t=>t.visible);
+ this.height=t.HEADER_HEIGHT+2*t.BODY_PADDING+t.BUTTON_HEIGHT*i.length+t.BUTTON_GAP*(i.length-1);
+ for(const[e,n]of i.entries())n.position.set(.5*(this.width-n.width),t.HEADER_HEIGHT+t.BODY_PADDING+e*(t.BUTTON_HEIGHT+t.BUTTON_GAP)),n.lbl.scale.set(1),n.lbl.scale.set(Math.min(1,(n.width-40)/Math.max(1,n.lbl.width))),n.lbl.position.set(.5*-n.lbl.width,.5*-n.lbl.height);
+ const s=qqt.getInstance();
+ s.mineStep=2!=s.mineStep?1:s.mineStep,this.outSideClickHide=!0,super.show()}
+ static isFishingOpen(){
+ return OG.getInstance().development}
+ async openFishing(){
+ if(!this.opening&&t.isFishingOpen()){
+ this.opening=!0;
+ try{
+ const{
+ FishingFlow:t}
+ =await ei(async()=>{
+ const{
+ FishingFlow:t}
+ =await Promise.resolve().then(()=>HUi);
+ return{
+ FishingFlow:t}
+ }
+ ,void 0);
+ this.hide(),await t.enter()}
+ catch(ort){
+ vH.getInstance().showMessage(ort.message)}
+ finally{
+ this.opening=!1}
+ }
+ }
+ async openMine(){
+ if(!t.isMineOpen())return;
+ this.hide();
+ const{
+ MinePopup:i}
+ =await ei(async()=>{
+ const{
+ MinePopup:t}
+ =await Promise.resolve().then(()=>v8t);
+ return{
+ MinePopup:t}
+ }
+ ,void 0);
+ await i.getInstance().show()}
+ async openAscent(){
+ const i=t.isAscentShopOpen();
+ if(!this.opening&&(t.isAscentOpen()||i)){
+ this.opening=!0,this.btnAscent.activated=!1;
+ try{
+ const{
+ MiniAscentAssets:t}
+ =await ei(async()=>{
+ const{
+ MiniAscentAssets:t}
+ =await Promise.resolve().then(()=>abi);
+ return{
+ MiniAscentAssets:t}
+ }
+ ,void 0);
+ await t.ensure();
+ const{
+ MiniAscentFlow:s}
+ =await ei(async()=>{
+ const{
+ MiniAscentFlow:t}
+ =await Promise.resolve().then(()=>ryi);
+ return{
+ MiniAscentFlow:t}
+ }
+ ,void 0);
+ this.hide(),await(i?s.enterShop():s.enter())}
+ catch{
+ const{
+ pveText:t}
+ =await ei(async()=>{
+ const{
+ pveText:t}
+ =await Promise.resolve().then(()=>bbi);
+ return{
+ pveText:t}
+ }
+ ,void 0);
+ vH.getInstance().showMessage(t("ASSET_ERROR"))}
+ finally{
+ this.opening=!1,this.btnAscent.activated=t.isAscentOpen()||t.isAscentShopOpen()}
+ }
+ }
+ async execOpenAscent(){
+ this.openAscent()}
+ }
+ ;
+ Qt(T_i,"EventHubPopup"),Zt(T_i,"_instance"),Zt(T_i,"POPUP_WIDTH",406),Zt(T_i,"HEADER_HEIGHT",53),Zt(T_i,"SIDE_PADDING",32),Zt(T_i,"BODY_PADDING",24),Zt(T_i,"BUTTON_HEIGHT",60),Zt(T_i,"BUTTON_GAP",14);
+ let C_i=T_i;
+ const O_i=Object.freeze(Object.defineProperty({
+ __proto__:null,EventHubPopup:C_i}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),I_i=class extends iB{
+ constructor(){
+ super(""),Zt(this,"icon"),Zt(this,"iconCompleted"),Zt(this,"index",-1),Zt(this,"_completed",!1),this.color=iB.LIGHT_GREEN,this.lbl.removeFromParent(),this.icon=new Ye(kS.getTexture("UI_Ekkorr","Icon_Receive")),this.icon.scale=.7,this.icon.x=.5*-this.icon.width,this.icon.y=.5*-this.icon.height,this.container.addChild(this.icon),this.iconCompleted=new Ye(kS.getTexture("UI_Ekkorr","Icon_Check")),this.iconCompleted.visible=!1,this.iconCompleted.alpha=.8,this.iconCompleted.scale=.8,this.iconCompleted.x=.5*-this.iconCompleted.width,this.iconCompleted.y=.5*-this.iconCompleted.height,this.container.addChild(this.iconCompleted),this.width=65,this.height=40}
+ get width(){
+ return this.bg.width}
+ set width(t){
+ super.width=t,this.icon&&(this.icon.x=.5*-this.icon.width)}
+ get height(){
+ return this.bg.height}
+ set height(t){
+ super.height=t,this.icon&&(this.icon.y=.5*-this.icon.height)}
+ get activated(){
+ return this._activated}
+ set activated(t){
+ super.activated=t,this.icon.alpha=t?1:.8}
+ onTap(t){
+ 0!=this._activated&&(qG.getInstance().playSFX(qG.SFX_NORMAL_CLICK),jG(),null!=this.onClick&&this.onClick(this.index))}
+ get completed(){
+ return this._completed}
+ set completed(t){
+ t!==this._completed&&(this._completed=t,this._completed?(this.icon.visible=!1,this.iconCompleted.visible=!0):(this.icon.visible=!0,this.iconCompleted.visible=!1))}
+ }
+ ;
+ Qt(I_i,"AttendEventRewardButton");
+ let k_i=I_i;
+ const R_i=class extends OR{
+ constructor(){
+ super(),Zt(this,"bg"),Zt(this,"items"),Zt(this,"lbl"),Zt(this,"btn"),this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.bg.alpha=.7,this.bg.width=395,this.bg.height=75,this.addChild(this.bg),this.items=[];
+ let t,i=13;
+ for(let e=0;
+ e<5;
+ ++e)t=new p4,t.x=i,t.y=11,t.scale=.8,this.addChild(t),this.items.push(t),i+=.8*t.width+9;
+ const s=sD.DEFAULT_FONT_OPTION_15;
+ s.fill=9666663,this.lbl=new QD("Day 1",s.fill,s),this.addChild(this.lbl),this.btn=new k_i,this.btn.x=i+5,this.btn.y=this.lbl.y+this.lbl.height,this.addChild(this.btn),this.btn.onClick=this.onBtnClick.bind(this),this.lbl.x=this.btn.x+.5*(this.btn.width-this.lbl.width)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(t){
+ const i=t.index,s=t.attendCount,e=t.attendedToday;
+ t.completed,this.lbl.text=`Day ${
+ i+1}
+ `;
+ const n=t.reward.length;
+ let h,r;
+ const o=this.items.length;
+ for(let c=0;
+ c<o;
+ ++c)h=t.reward[c],r=this.items[c],c<n?(r.visible=!0,r.setDataFrom(h),this.setItemEvent(r,!0)):(r.visible=!1,this.setItemEvent(r,!1));
+ const a=e?s-1:s;
+ i>a?(this.btn.activated=!1,this.btn.completed=!1):i<a||e?(this.btn.activated=!1,this.btn.completed=!0):(this.btn.activated=!0,this.btn.completed=!1)}
+ async onBtnClick(){
+ try{
+ const{
+ AttendEventPopup:t}
+ =await ei(async()=>{
+ const{
+ AttendEventPopup:t}
+ =await Promise.resolve().then(()=>U_i);
+ return{
+ AttendEventPopup:t}
+ }
+ ,void 0);
+ t.getInstance().attendEvent()}
+ catch(t){
+ }
+ }
+ setItemEvent(t,i){
+ t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
+ async onItemTap(t){
+ const i=t.target;
+ if(!i)return;
+ let s="";
+ if(i.type==d4.ticket&&i.subType==d4.heroGacha?s=RB.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i.type==d4.ticket&&i.subType==d4.heroSelect?s=RB.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i.type==d4.ticket&&i.subType==d4.treasureGacha?s=RB.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i.type==d4.ticket&&i.subType==d4.petSelect?s=RB.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다."):i.type!=d4.trans||i.subType!=d4.hero&&i.subType!=d4.treasure?i.type==d4.runeTicket&&(s=RB.getText("GAME_1502","레이드 상점에서 크리스탈을 랜덤하게 획득할 수 있습니다.")):s=RB.getText("GAME_1225","초월권을 사용하여 초월재료와 비용없이 초월시킬 수 있습니다."),s){
+ const{
+ ToolTip:t}
+ =await ei(async()=>{
+ const{
+ ToolTip:t}
+ =await Promise.resolve().then(()=>_4);
+ return{
+ ToolTip:t}
+ }
+ ,void 0);
+ t.getInstance().widthMax=390,t.getInstance().text=s;
+ let e=this.x+i.x-20;
+ e+t.getInstance().width+7>this.bg.x+this.bg.width&&(e=this.bg.x+this.bg.width-t.getInstance().width-7);
+ let n=i.y-i.height;
+ n<7&&(n=7),t.getInstance().show(this,e,n)}
+ }
+ }
+ ;
+ Qt(R_i,"AttendEventRewardMultiItemRenderer");
+ let x_i=R_i;
+ const P_i=class extends Ve{
+ constructor(){
+ super(),Zt(this,"list");
+ const t=this.width,i=this.height;
+ this.list=new b4(x_i,t,i,4),this.addChild(this.list)}
+ get width(){
+ return 395}
+ get height(){
+ return 180}
+ setData(t){
+ const i=t.attendCount,s=t.attendedToday,e=t.completed,n=t.rewards.map((t,n)=>({
+ index:n,reward:t,attendCount:i,attendedToday:s,completed:e}
+ ));
+ this.list.dataProvider=n,t.attendedToday||this.list.scrollTo(t.attendCount)}
+ }
+ ;
+ Qt(P_i,"AttendEventRewardMulti");
+ let N_i=P_i;
+ const L_i=class extends Ve{
+ constructor(){
+ super(),Zt(this,"bg"),Zt(this,"container"),Zt(this,"lbls"),Zt(this,"items"),Zt(this,"btns"),this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.bg.alpha=.7,this.bg.width=395,this.bg.height=180,this.addChild(this.bg),this.container=new Ve,this.addChild(this.container),this.lbls=[],this.items=[],this.btns=[];
+ const t=sD.DEFAULT_FONT_OPTION_15;
+ t.fill=9666663;
+ let i,s,e,n=0;
+ for(let h=0;
+ h<5;
+ ++h)i=new QD(`Day ${
+ h+1}
+ `,t.fill,t),this.container.addChild(i),this.lbls.push(i),s=new p4,this.container.addChild(s),this.items.push(s),e=new k_i,e.index=h,e.onClick=this.onBtnClick.bind(this),this.container.addChild(e),this.btns.push(e),s.x=n,i.x=s.x+.5*(s.width-i.width),e.x=s.x+.5*(s.width-e.width),s.y=i.y+i.height+3,e.y=s.y+s.height+8,n+=s.width+11}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ setData(t){
+ const i=t.attendCount,s=t.attendedToday;
+ t.completed;
+ const e=t.rewards.length;
+ let n,h,r;
+ for(let o=0;
+ o<5;
+ ++o)if(n=this.lbls[o],h=this.items[o],r=this.btns[o],o<e){
+ h.setDataFrom(t.rewards[o][0]),h.visible=!0,this.setItemEvent(h,!0),n.visible=!0,r.visible=!0;
+ const e=s?i-1:i;
+ o>e?(r.activated=!1,r.completed=!1):o<e||s?(r.activated=!1,r.completed=!0):(r.activated=!0,r.completed=!1)}
+ else h.visible=!1,this.setItemEvent(h,!1),n.visible=!1,r.visible=!1;
+ this.container.x=.5*(this.bg.width-this.container.width)+3,this.container.y=.5*(this.bg.height-this.container.height)-2}
+ async onBtnClick(t){
+ try{
+ const{
+ AttendEventPopup:t}
+ =await ei(async()=>{
+ const{
+ AttendEventPopup:t}
+ =await Promise.resolve().then(()=>U_i);
+ return{
+ AttendEventPopup:t}
+ }
+ ,void 0);
+ t.getInstance().attendEvent()}
+ catch(i){
+ }
+ }
+ setItemEvent(t,i){
+ t.eventMode="none",t.off("pointertap",this.onItemTap,this),i&&(t.eventMode="dynamic",t.on("pointertap",this.onItemTap,this))}
+ async onItemTap(t){
+ const i=t.target;
+ if(!i)return;
+ let s="";
+ if(i.type==d4.ticket&&i.subType==d4.heroGacha?s=RB.getText("GAME_765","5성 영웅을 랜덤하게 획득할 수 있습니다."):i.type==d4.ticket&&i.subType==d4.heroSelect?s=RB.getText("GAME_943","제공되는 목록에서 원하는 5성 영웅을 선택할 수 있습니다."):i.type==d4.ticket&&i.subType==d4.treasureGacha?s=RB.getValueReplace("GAME_776","##",6,"6등급 유물을 랜덤하게 획득할 수 있습니다."):i.type==d4.ticket&&i.subType==d4.petSelect?s=RB.getText("GAME_944","제공되는 목록에서 원하는 펫 조각을 선택할 수 있습니다."):i.type!=d4.trans||i.subType!=d4.hero&&i.subType!=d4.treasure?i.type==d4.runeTicket&&(s=RB.getText("GAME_1502","레이드 상점에서 크리스탈을 랜덤하게 획득할 수 있습니다.")):s=RB.getText("GAME_1225","초월권을 사용하여 초월재료와 비용없이 초월시킬 수 있습니다."),s){
+ const{
+ ToolTip:t}
+ =await ei(async()=>{
+ const{
+ ToolTip:t}
+ =await Promise.resolve().then(()=>_4);
+ return{
+ ToolTip:t}
+ }
+ ,void 0);
+ t.getInstance().widthMax=390,t.getInstance().text=s;
+ let e=this.x+i.x-20;
+ e+t.getInstance().width+7>this.bg.x+this.bg.width&&(e=this.bg.x+this.bg.width-t.getInstance().width-7);
+ let n=i.y-i.height;
+ n<7&&(n=7),t.getInstance().show(this,e,n)}
+ }
+ }
+ ;
+ Qt(L_i,"AttendEventRewardSingle");
+ let D_i=L_i;
+ const G_i=class t extends uB{
+ constructor(){
+ super(),Zt(this,"bgImage"),Zt(this,"lblMessage"),Zt(this,"lblNote"),Zt(this,"lblDuration"),Zt(this,"rewardSingle"),Zt(this,"rewardMulti"),Zt(this,"_width",-1),Zt(this,"_height",-1),Zt(this,"requestPending",!1),this.bg.removeFromParent(),this.contentContainer.removeFromParent(),this.txtTitle.removeFromParent(),this.btnClose.removeFromParent(),this.outSideClickHide=!0;
+ const t=sD.DEFAULT_FONT_OPTION_17;
+ t.fill=13878933,this.lblMessage=new QD("매일 출석하고, 선물 받아가세요!",t.fill,t),this.addChild(this.lblMessage),sD.setLabelWrapWidth(this.lblMessage,420),this.lblDuration=new SF("Icon_Time02","",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblDuration);
+ const i=sD.DEFAULT_FONT_OPTION_17;
+ i.fill=13421772,this.lblNote=new QD("빈 화면을 터치해 닫기",i.fill,i),this.addChild(this.lblNote),this.rewardSingle=new D_i,this.addChild(this.rewardSingle),this.rewardMulti=new N_i,this.addChild(this.rewardMulti)}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async setData(){
+ const t=GB.getActiveAttendEvent();
+ if(!t)return;
+ if(!this.bgImage){
+ const{
+ Assets:i}
+ =await ei(async()=>{
+ const{
+ Assets:t}
+ =await Promise.resolve().then(()=>oE);
+ return{
+ Assets:t}
+ }
+ ,void 0);
+ let s="https://cdn.endlessfrontier.io/ef2/img/";
+ const e=SG.getInstance().getClientData("EXTERNAL_IMAGE_PATH");
+ e&&e.startsWith("http")&&(s=e);
+ const n=`${
+ s}
+ ${
+ t.image}
+ `,h=await i.load(n);
+ this.bgImage=new Ye,this.bgImage.texture=h,this.bgImage.y=-50,this.addChildAt(this.bgImage,0)}
+ -1!==this._width&&-1!==this._height||(this._width=this.bgImage.width,this._height=this.bgImage.height,this.pivot.set(this._width/2,this._height/2),this.position.set(320,this.getPositionY()));
+ const i=this.bgImage.y+435;
+ this.lblMessage.text=t.message?t.message:RB.getText("GAME_1662","매일 출석하고, 선물 받아가세요!"),this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=i+.5*(70-this.lblMessage.height)+1,this.lblNote.text=RB.getText("COMMON_573","빈 화면을 터치해 닫기"),this.lblNote.eventMode="none",this.lblNote.x=.5*(this.width-this.lblNote.width),this.lblNote.y=this.bgImage.y+this.height+50,this.update();
+ const s=this.rewardMulti.visible?this.rewardMulti.y+this.rewardMulti.height+15:this.rewardSingle.y+this.rewardSingle.height+15,e=new Date(t.startTime),n=new Date(t.endTime);
+ this.lblDuration.text=i$.displayDate2(e,!0,".")+" ~ "+i$.displayDate2(n,!0,"."),this.lblDuration.x=.5*(this.width-this.lblDuration.width),this.lblDuration.y=s}
+ update(){
+ const t=GB.getActiveAttendEvent();
+ if(!t)return;
+ const i=this.bgImage.y+435;
+ this.rewardMulti.visible=!1,this.rewardSingle.visible=!1,t.rewards.some(t=>t.length>1)?(this.rewardMulti.x=.5*(this.width-this.rewardMulti.width),this.rewardMulti.y=i+70,this.rewardMulti.setData(t),this.rewardMulti.visible=!0):(this.rewardSingle.x=.5*(this.width-this.rewardSingle.width),this.rewardSingle.y=i+70,this.rewardSingle.setData(t),this.rewardSingle.visible=!0)}
+ get width(){
+ return this._width}
+ set width(t){
+ }
+ get height(){
+ return this._height}
+ set height(t){
+ }
+ async attendEvent(){
+ if(1==this.requestPending)return;
+ this.setRequestPending(!0);
+ const t=await ZL.getInstance().user.attendEvent(!0);
+ if(0==t.success){
+ this.setRequestPending(!1);
+ let i="";
+ return"ALREADY_ATTENDED"==t.error?i=RB.getText("COMMON_575","이미 오늘 보상을 받았습니다."):"EVENT_ATTEND_COMPLETED"==t.error&&(i=RB.getText("GAME_257","모든 보상을 수령했습니다.")),void(i?bB.getInstance().show(i):bB.getInstance().showError(t))}
+ GB.updateAttendEvent(t.body.attendEvent),this.update(),this.setRequestPending(!1),bB.getInstance().show(RB.getText("COMMON_120","메일함으로 발송되었습니다."));
+ const{
+ EventDispatcher:i}
+ =await ei(async()=>{
+ const{
+ EventDispatcher:t}
+ =await Promise.resolve().then(()=>RR);
+ return{
+ EventDispatcher:t}
+ }
+ ,void 0);
+ i.getInstance().dispatchCustomEvent("MailUpdate",{
+ forced:!0}
+ )}
+ setRequestPending(t){
+ this.requestPending=t}
+ hideImmediately(){
+ super.hideImmediately(),v4.getInstance().hide()}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Qt(G_i,"AttendEventPopup"),Zt(G_i,"_instance");
+ let B_i=G_i;
+ const U_i=Object.freeze(Object.defineProperty({
+ __proto__:null,AttendEventPopup:B_i}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),F_i=class t extends zU{
+ constructor(){
- super(),Xt(this,"btnMine",new IG(nB.getText("GAME_1203","화석 발굴"))),Xt(this,"btnAscent",new IG(nB.getText("GAME_1716","군단 도전"))),Xt(this,"opening",!1),this.width=t.POPUP_WIDTH,this.height=t.HEADER_HEIGHT+2*t.BODY_PADDING+2*t.BUTTON_HEIGHT+t.BUTTON_GAP;
- for(const i of[this.btnMine,this.btnAscent])i.width=this.width-2*t.SIDE_PADDING,i.height=t.BUTTON_HEIGHT,i.color=IG.BROWN,this.contentContainer.addChild(i);
- this.btnMine.onClick=()=>{
- this.openMine()}
- ,this.btnAscent.onClick=()=>{
- this.openAscent()}
- }
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- static isMineOpen(){
- return XD.maxWave>=200&&lB.isValidEvent(uB.MINE_EVENT)}
- static isAscentOpen(){
- return lB.isValidEvent(uB.MINI_ASCENT_EVENT)||iG.getInstance().development}
- show(){
- this.title=nB.getText("GAME_1844","ko"===nB.language?"이벤트":"Event"),this.btnMine.text=nB.getText("GAME_1203","화석 발굴"),this.btnAscent.text=nB.getText("GAME_1716","군단 도전"),this.btnMine.activated=t.isMineOpen(),this.btnAscent.activated=t.isAscentOpen()&&!this.opening;
- for(const[i,s]of[this.btnMine,this.btnAscent].entries())s.position.set(.5*(this.width-s.width),t.HEADER_HEIGHT+t.BODY_PADDING+i*(t.BUTTON_HEIGHT+t.BUTTON_GAP)),s.lbl.scale.set(1),s.lbl.scale.set(Math.min(1,(s.width-40)/Math.max(1,s.lbl.width))),s.lbl.position.set(.5*-s.lbl.width,.5*-s.lbl.height);
- this.outSideClickHide=!0,super.show()}
- async openMine(){
- if(!t.isMineOpen())return;
- this.hide();
- const{
- MinePopup:i}
- =await ti(async()=>{
- const{
- MinePopup:t}
- =await Promise.resolve().then(()=>s4t);
- return{
- MinePopup:t}
- }
- ,void 0);
- await i.getInstance().show()}
- async openAscent(){
- if(!this.opening&&t.isAscentOpen()){
- this.opening=!0,this.btnAscent.activated=!1;
- try{
- const{
- MiniAscentAssets:t}
- =await ti(async()=>{
- const{
- MiniAscentAssets:t}
- =await Promise.resolve().then(()=>Jvi);
- return{
- MiniAscentAssets:t}
- }
- ,void 0);
- await t.ensure();
- const{
- MiniAscentFlow:i}
- =await ti(async()=>{
- const{
- MiniAscentFlow:t}
- =await Promise.resolve().then(()=>q_i);
- return{
- MiniAscentFlow:t}
- }
- ,void 0);
- this.hide(),await i.enter()}
- catch{
- const{
- pveText:t}
- =await ti(async()=>{
- const{
- pveText:t}
- =await Promise.resolve().then(()=>l_i);
- return{
- pveText:t}
- }
- ,void 0);
- AH.getInstance().showMessage(t("ASSET_ERROR"))}
- finally{
- this.opening=!1,this.btnAscent.activated=t.isAscentOpen()}
- }
- }
- }
- ;
- qt(lEi,"EventHubPopup"),Xt(lEi,"_instance"),Xt(lEi,"POPUP_WIDTH",406),Xt(lEi,"HEADER_HEIGHT",53),Xt(lEi,"SIDE_PADDING",32),Xt(lEi,"BODY_PADDING",24),Xt(lEi,"BUTTON_HEIGHT",60),Xt(lEi,"BUTTON_GAP",14);
- let uEi=lEi;
- const dEi=Object.freeze(Object.defineProperty({
- __proto__:null,EventHubPopup:uEi}
- ,Symbol.toStringTag,{
- value:"Module"}
- )),fEi=class t extends BG{
- constructor(){
RankingDataManager 1 hunks, 451 statements
- )),nhi=class t extends EYt{
- constructor(){
- super(),Xt(this,"lblDesc"),Xt(this,"gemIcon"),Xt(this,"gemLabel"),Xt(this,"gemContainer"),Xt(this,"btnConfirm"),this.setTitle(nB.getText("GAME_139","친구 초대"));
- const t=OL.MENU_LABEL_OPTION;
- t.fill=14988422,t.fontSize=19,this.lblDesc=new SD("보상을 받았습니다.",t.fill,t),this.lblDesc.y=100,this.addChild(this.lblDesc),OL.setLabelWrapWidth(this.lblDesc,this.width-80),this.gemContainer=new He,this.addChild(this.gemContainer),this.gemIcon=new je(eS.getTexture("UI_Ekkorr","UI_SHOP_GEM")),this.gemIcon.scale=.85,this.gemContainer.addChild(this.gemIcon);
- const i=OL.MENU_LABEL_OPTION;
- i.fill=16777215,i.fontSize=20,this.gemLabel=new SD("100",i.fill,i),this.gemContainer.addChild(this.gemLabel),this.btnConfirm=new xG(nB.getText("COMMON_1","확인")),this.addChild(this.btnConfirm),this.btnConfirm.onClick=this.onConfirmBtnClick.bind(this),this.updateLayout()}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- updateLayout(){
- this.lblDesc.x=.5*(this.width-this.lblDesc.width),this.gemLabel.x=this.gemIcon.x+this.gemIcon.width+10,this.gemLabel.y=.5*(this.gemIcon.height-this.gemLabel.height),this.gemContainer.x=.5*(this.width-this.gemContainer.width),this.gemContainer.y=this.lblDesc.y+this.lblDesc.height+30,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=this.gemContainer.y+this.gemContainer.height+30,this.bg.height=this.btnConfirm.y+this.btnConfirm.height+40-this.bg.y,this.bottom.y=this.bg.y+this.bg.height-10}
- setData(t){
- this.setTitle(nB.getText("GAME_139","친구 초대")),this.lblDesc.text=nB.getText("COMMON_313","보상을 받았습니다."),this.btnConfirm.text=nB.getText("COMMON_1","확인"),this.gemLabel.text=String("totalGems"in t?t.totalGems:Azt.GEM_PER_FRIEND),this.updateLayout()}
- onConfirmBtnClick(){
- this.hide()}
- }
- ;
- qt(nhi,"FriendInviteRewardPopup"),Xt(nhi,"_instance");
- let hhi=nhi;
- const rhi=class extends NXt{
- constructor(){
- super(""),Xt(this,"bgOff"),Xt(this,"icon"),this.setTexture({
- texture:eS.getTexture("UI_Ekkorr","UI_ButtonBG0003"),leftWidth:25,topHeight:13,rightWidth:18,bottomHeight:21}
- ),this.bgOff=new kM({
- texture:eS.getTexture("UI_Ekkorr","UI_ButtonBG0007"),leftWidth:35,topHeight:28,rightWidth:35,bottomHeight:28}
- ),this.bgOff.width=this._width,this.bgOff.height=this._height,this.container.addChildAt(this.bgOff,0),this.icon=new je(eS.getTexture("UI_Ekkorr","Icon_Receive")),this.icon.eventMode="none",this.container.addChild(this.icon),this.updateLayout()}
- updateLayout(){
- super.updateLayout(),this.icon&&(this.icon.x=this.bg.x+.5*(this.bg.width-this.icon.width)-3,this.icon.y=this.bg.y+.5*(this.bg.height-15-this.icon.height))}
- onDown(t){
- this.container.scale=.9}
- onUp(t){
- this.container.scale=1}
- onTap(t){
- MG.getInstance().playSFX(MG.SFX_NORMAL_CLICK),this.onClick&&this.onClick()}
- get activated(){
- return this._activated}
- set activated(t){
- t!=this._activated&&(this._activated=t,this._activated?(this.bg.visible=!0,this.bgOff.visible=!1,this.icon.alpha=1):(this.bg.visible=!1,this.bgOff.visible=!0,this.icon.alpha=.7))}
- }
- ;
- qt(rhi,"FriendInviteRewardButton");
- let ohi=rhi;
- const ahi=class extends g6{
- constructor(){
- super(),Xt(this,"receivedIcon"),Xt(this,"activatedBg"),Xt(this,"_activated",!0),Xt(this,"_received",!1),this.activatedBg=new je(eS.getTexture("UI_Ekkorr","Frame_Reward_01_nor")),this.activatedBg.visible=!this._activated,this.addChild(this.activatedBg),this.receivedIcon=new je(eS.getTexture("UI_Ekkorr","Base_Check01")),this.receivedIcon.visible=this._received,this.addChild(this.receivedIcon)}
- updateLayout(){
- if(super.updateLayout(),!this.receivedIcon)return;
- const t=this.bg.width,i=this.bg.height;
- this.receivedIcon.x=.5*(t-this.receivedIcon.width),this.receivedIcon.y=.5*(i-this.receivedIcon.height)}
- get activated(){
- return this._activated}
- set activated(t){
- t!=this._activated&&(this._activated=t,this.activatedBg.visible=!this._activated)}
- get received(){
- return this._received}
- set received(t){
- t!=this._received&&(this._received=t,this.receivedIcon.visible=this._received)}
- }
- ;
- qt(ahi,"FriendInviteRewardItem");
- let chi=ahi;
- const lhi=class extends iR{
- constructor(){
- super(),Xt(this,"bg"),Xt(this,"lblInvite"),Xt(this,"lblNo"),Xt(this,"items"),Xt(this,"container"),Xt(this,"btnReward"),Xt(this,"_width",570),Xt(this,"_height",79),this.items=[],this.bg=new kM({
- texture:eS.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:135,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=this._width,this.addChild(this.bg);
- const t=OL.LABEL_OPTION_NO_DROP_SHADOW;
- t.fill=OL.COLOR_WHITE,t.fontSize=20,this.lblInvite=new SD("Invite",t.fill,t),this.lblInvite.x=15,this.addChild(this.lblInvite);
- const i=OL.LABEL_OPTION_NO_DROP_SHADOW;
- i.fill=OL.COLOR_WHITE,i.fontSize=30,this.lblNo=new SD("1",i.fill,i),this.addChild(this.lblNo),this.container=new He,this.container.x=178,this.container.y=7,this.addChild(this.container),this.btnReward=new ohi,this.btnReward.x=this.bg.width-this.btnReward.width-11,this.btnReward.y=.5*(this.bg.height-this.btnReward.height),this.addChild(this.btnReward),this.btnReward.onClick=this.onRewardBtnClick.bind(this),this.updateLayout()}
- get width(){
- return this._width}
- get height(){
- return this._height}
- updateLayout(){
- const t=this._height;
- this.lblInvite.y=.5*(t-this.lblInvite.height)-1,this.lblNo.x=this.lblInvite.x+this.lblInvite.width+10,this.lblNo.y=.5*(t-this.lblNo.height)-1}
- setData(t){
- this.data=t,this.lblInvite.text="Invite",this.lblNo.text=String(t.index+1);
- const i=this.isClaimed(),s=this.isActivated(),e=OL.COLOR_WHITE,n=10066329;
- s||i?(this.lblInvite.textColor=e,this.lblNo.textColor=e):(this.lblInvite.textColor=n,this.lblNo.textColor=n),this.btnReward.activated=s&&!i,this.container.removeChildren();
- let h,r=0;
- const o=t.rewards.length;
- for(let a=0;
- a<o;
- ++a)a<this.items.length?h=this.items[a]:(h=new chi,this.items.push(h)),h.setDataFrom(t.rewards[a]),h.received=i,h.activated=s,h.x=r,this.container.addChild(h),r+=h.width+10;
- this.updateLayout()}
- isClaimed(){
- return!(this.data.index+1>this.data.claimed)}
- isActivated(){
- return!(this.data.index+1>this.data.qualifiedReferrals||this.isClaimed())}
- onRewardBtnClick(){
- const t=this.isClaimed(),i=this.isActivated();
- if(1!=t){
- if(0==i){
- const t=nB.getValueReplaceMulti("GAME_145",["##","@@"],[Azt.FRIEND_LEVEL,this.data.index+1]);
- return void YG.getInstance().show(t)}
- fhi.getInstance().claimRewards(this.data.index+1)}
- }
- }
- ;
- qt(lhi,"FriendInviteItemRenderer");
- let uhi=lhi;
- const dhi=class t extends AYt{
- constructor(){
- super(),Xt(this,"banner"),Xt(this,"lblInvite"),Xt(this,"lblDesc"),Xt(this,"descBg"),Xt(this,"list"),Xt(this,"btnMyLink"),Xt(this,"onReferralStatusBind"),this.setTitle(nB.getText("COMMON_360","친구 초대")),this.top.removeFromParent(),this.txtTitle.textColor=16777215,this.addChild(this.txtTitle),this.btnClose.setTexture(eS.getTexture("UI_Ekkorr","Btn_Close_02")),this.addChild(this.btnClose),this.banner=new Bzt(596,114),this.banner.autoResize=!0,this.banner.x=this.bg.x+.5*(this.bg.width-this.banner.width),this.banner.y=this.top.y+this.top.height-5,this.addChild(this.banner),this.descBg=new kM({
- texture:eS.getTexture("UI_Ekkorr","Popup_Bg_02"),leftWidth:15,topHeight:10,rightWidth:15,bottomHeight:10}
- ),this.descBg.x=this.bg.x+10,this.descBg.y=this.banner.y+this.banner.height+1,this.descBg.width=600,this.descBg.height=100,this.addChild(this.descBg);
- const t=OL.LABEL_OPTION_NO_DROP_SHADOW;
- t.fill=OL.COLOR_WHITE,t.fontSize=29,this.lblInvite=new SD(`${
- nB.getText("COMMON_361","초대한 친구")}
-  : 0`,t.fill,t),this.lblInvite.y=this.descBg.y+15,this.addChild(this.lblInvite),OL.setLabelWrapWidth(this.lblInvite,this.bg.width-50);
- const i=OL.LABEL_OPTION_NO_DROP_SHADOW;
- i.fill=16178882,i.fontSize=19,this.lblDesc=new SD(nB.getValueReplace("COMMON_362","##",Azt.FRIEND_LEVEL,`${
- Azt.FRIEND_LEVEL}
- 레벨을 달성한 친구만 반영됩니다.`),i.fill,i),this.addChild(this.lblDesc),OL.setLabelWrapWidth(this.lblDesc,this.bg.width-50),this.btnMyLink=new sjt(nB.getText("COMMON_314","내 초대 링크")),this.addChild(this.btnMyLink),this.btnMyLink.onClick=this.onMyLinkBtnClick.bind(this),this.list=new Zk(uhi,570,500,6),this.list.x=this.bg.x+.5*(this.bg.width-570),this.addChild(this.list),this.updateLayout(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onAdded(){
- this.setReferralStatus(!0)}
- onRemoved(){
- this.setReferralStatus(!1)}
- updateLayout(){
- this.btnClose.x=this.top.x+this.top.width-this.btnClose.width-25,this.btnClose.y=this.txtTitle.y+.5*(this.txtTitle.height-this.btnClose.height)+3;
- const t=this.bg.x,i=this.bg.width;
- this.lblInvite.x=t+.5*(i-this.lblInvite.width),this.lblDesc.x=t+.5*(i-this.lblDesc.width),this.lblDesc.y=this.lblInvite.y+this.lblInvite.height+10,this.btnMyLink.x=t+.5*(i-this.btnMyLink.width),this.btnMyLink.y=this.bottom.y-this.btnMyLink.height-20,this.list.y=this.descBg.y+this.descBg.height+11;
- const s=this.btnMyLink.y-20-this.list.y;
- this.list.setListHeight(s)}
- async setData(){
- this.setTitle(nB.getText("COMMON_360","친구 초대")),this.btnMyLink.text=nB.getText("COMMON_314","내 초대 링크"),this.updateInfo(),this.updateList(),await this.banner.update("Popup_Banner_01"),this.updateLayout()}
- updateInfo(){
- let t=nB.getValueReplace("COMMON_362","##",Azt.FRIEND_LEVEL,`${
- Azt.FRIEND_LEVEL}
- 레벨을 달성한 친구만 반영됩니다.`);
- this.lblDesc.text=t,this.lblInvite.text=`${
- nB.getText("COMMON_361","초대한 친구")}
-  : ${
- Azt.qualifiedReferrals}
- `}
- updateList(){
- const t=[],i=Azt.claimed,s=Azt.totalReferrals,e=Azt.qualifiedReferrals,n=Azt.getRewardList();
- let h;
- const r=n.length;
- for(let o=0;
- o<r;
- ++o)h={
- index:o,rewards:n[o],claimed:i,totalReferrals:s,qualifiedReferrals:e}
- ,t.push(h);
- this.list.dataProvider=t,i>0&&this.list.scrollTo(i-1)}
- async onMyLinkBtnClick(){
- let t=await Azt.getMyReferralCode();
- if(t&&await N6t(t)){
- const t=nB.getText("GAME_144","초대 링크가 복사되었습니다.");
- R6t.getInstance().show(t,.5*Xy.stageHeight,16777215)}
- }
- async claimRewards(t){
- Azt.claimRewards(t)}
- setReferralStatus(t){
- mS.getInstance().removeEventListener("ReferralStatus",this.onReferralStatusBind),t&&(this.onReferralStatusBind=this.onReferralStatus.bind(this),mS.getInstance().addEventListener("ReferralStatus",this.onReferralStatusBind))}
- onReferralStatus(t){
- t&&t.detail&&this.showRewards(t.detail),Azt.opened?(this.updateInfo(),this.updateList(),this.list.executeShowingMotion()):this.hide()}
- showRewards(t){
- hhi.getInstance().setData(t),hhi.getInstance().show()}
- }
- ;
- qt(dhi,"FriendInvitePopup"),Xt(dhi,"instance");
- let fhi=dhi;
- const phi=class t extends BG{
- constructor(){
- super(),Xt(this,"lblMessage"),Xt(this,"btnConfirm",new xG("확인")),Xt(this,"onConfirm",null),this.title="",this.lblMessage=new rU("@",500,19,OL.COLOR_WHITE),this.lblMessage.x=90,this.lblMessage.y=80,this.addChild(this.lblMessage,this.btnConfirm),this.outSideClickHide=!0,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;
- let s=nB.getText("COMMON_1","확인");
- this.btnConfirm.text=s,this.updateLayout(),super.show()}
- hide(){
- super.hide(),this.title=""}
- updateLayout(){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=this.lblMessage.y+this.lblMessage.height+30,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
- }
- ;
- qt(phi,"HelpInfoPopup"),Xt(phi,"_instance");
- let ghi=phi;
- const mhi=class extends He{
- constructor(){
- super(),Xt(this,"bg"),Xt(this,"lblTitle"),Xt(this,"container"),Xt(this,"img"),Xt(this,"lblNum"),Xt(this,"_width",130),Xt(this,"_height",120),Xt(this,"data",null),Xt(this,"redDot"),this.bg=new kM({
- texture:eS.getTexture("UI_Ekkorr","Popup_Bg_11"),leftWidth:35,topHeight:40,rightWidth:35,bottomHeight:35}
- ),this.bg.width=this._width,this.bg.height=this._height,this.addChild(this.bg);
- const t=OL.LABEL_OPTION_NO_DROP_SHADOW;
- t.fill=OL.COLOR_WHITE,t.fontSize=17,this.lblTitle=new SD("PAYBACK",t.fill,t),this.addChild(this.lblTitle),this.container=new He,this.addChild(this.container),this.img=new je(eS.getTexture("UI_Ekkorr","Icon_SLX")),this.container.addChild(this.img);
- const i=OL.LABEL_OPTION_NO_DROP_SHADOW;
- i.fill=OL.COLOR_WHITE,i.fontSize=22,this.lblNum=new SD("0",i.fill,i),this.lblNum.x=this.img.width+7,this.lblNum.y=.5*(this.img.height-this.lblNum.height),this.container.addChild(this.lblNum),this.updateLayout()}
- get width(){
- return this._width}
- get height(){
- return this._height}
- updateLayout(){
- this.lblTitle.x=.5*(this._width-this.lblTitle.width),this.lblTitle.y=.5*(35-this.lblTitle.height),this.container.x=.5*(this._width-this.container.width),this.container.y=46+.5*(this._height-46-this.container.height)-5}
- setData(t){
- if(null==t)return;
- this.data=t,this.reset();
- const i=Dzt.isEventEnded(),s=Dzt.isPaybackEnded();
- this.img.texture=eS.getTexture("UI_Ekkorr","Icon_SLX"),this.lblNum.text=String(this.data.paybackValue);
- let e=!0;
- this.data.status==kzt.NOT_PURCHASE?(1==i||this.data.index>this.data.notPurchaseIndex)&&(e=!1):1==s||this.data.status==kzt.COMPLETED||this.data.status==kzt.PENDING?e=!1:this.showRedDot(),e?(this.setRewardEvent(!0),this.lblTitle.textColor=16777215,this.lblNum.textColor=16777215,this.img.texture=eS.getTexture("UI_Ekkorr","Icon_SLX")):(this.lblTitle.textColor=4603696,this.lblNum.textColor=10592673,this.img.texture=eS.getTexture("UI_Ekkorr","Icon_SLX_Gray")),this.updateLayout()}
- reset(){
- this.hideRedDot(),this.setRewardEvent(!1)}
- setRewardEvent(t){
- this.eventMode="none",this.off("pointertap",this.onRewardClick,this),t&&(this.eventMode="dynamic",this.on("pointertap",this.onRewardClick,this))}
- onRewardClick(t){
- if(MG.getInstance().playSFX(MG.SFX_NORMAL_CLICK),this.data&&this.data.status!=kzt.COMPLETED&&this.data.status!=kzt.PENDING){
- if(this.data.status==kzt.NOT_PURCHASE||this.data.paybackId<1){
- const t=nB.getText("COMMON_115","상품 구매 후 수령 가능합니다.");
- return void YG.getInstance().show(t)}
- if(this.data.index>this.data.rewardIndex){
- const t=nB.getText("COMMON_104","보상은 순서대로 받아주세요.");
- return void YG.getInstance().show(t)}
- Chi.getInstance().receive(this.data,this.img)}
- }
- showRedDot(){
- this.redDot||(this.redDot=new TG,this.addChild(this.redDot)),this.redDot.show(),this.redDot.x=this.bg.x+this.bg.width-this.redDot.width,this.redDot.y=this.bg.y-7}
- hideRedDot(){
- this.redDot&&this.redDot.hide()}
- }
- ;
- qt(mhi,"PaybackEventItemPayback");
- let whi=mhi;
- const vhi=class extends NXt{
- constructor(t){
- super(t),Xt(this,"bgOff"),Xt(this,"icon"),this.bgOff=new kM({
- texture:eS.getTexture("UI_Ekkorr","Btn_Gray"),leftWidth:40,topHeight:27,rightWidth:40,bottomHeight:29}
- ),this.bgOff.width=this._width,this.bgOff.height=this._height,this.container.addChildAt(this.bgOff,0),this.icon=new je(eS.getTexture("UI_Ekkorr","Icon_SLX")),this.icon.eventMode="none",this.container.addChild(this.icon),this.outlineText=!0,this.width=150,this.height=70,this.container.addChild(this.lbl)}
- updateLayout(){
- if(super.updateLayout(),!this.icon)return;
- this.icon.x=12,this.icon.y=.5*(this._height-this.icon.height);
- const t=this.icon.x+this.icon.width;
- this.lbl.x=t+.5*(this._width-t-this.lbl.width)-5,this.lbl.y=this.icon.y+.5*(this.icon.height-this.lbl.height)}
- get width(){
- return this._width}
- set width(t){
- super.width=t,this.bgOff&&(this.bgOff.width=this._width)}
- get height(){
- return this._height}
- set height(t){
- super.height=t,this.bgOff&&(this.bgOff.height=this._height)}
- get activated(){
- return this._activated}
- set activated(t){
- this._activated=t,this._activated?(this.bg.visible=!0,this.bgOff.visible=!1):(this.bg.visible=!1,this.bgOff.visible=!0)}
- }
- ;
- qt(vhi,"PaybackEventBuyButton");
- let _hi=vhi;
- const bhi=class extends g6{
- constructor(){
- super(),this.bg.texture=eS.getTexture("UI_Ekkorr","Frame_Reward_01")}
- }
- ;
- qt(bhi,"PaybackEventItemProductElement");
- let Ehi=bhi;
- const Mhi=class extends He{
- constructor(){
- super(),Xt(this,"bg"),Xt(this,"lblSeq"),Xt(this,"container"),Xt(this,"items"),Xt(this,"btnSLX"),Xt(this,"lblDesc"),Xt(this,"_width",380),Xt(this,"_height",120),Xt(this,"_numItem",1),Xt(this,"data",null),this.bg=new kM({
- texture:eS.getTexture("UI_Ekkorr","Popup_Bg_11"),leftWidth:35,topHeight:40,rightWidth:35,bottomHeight:35}
- ),this.bg.width=this._width,this.bg.height=this._height,this.addChild(this.bg);
- const t=OL.LABEL_OPTION_NO_DROP_SHADOW;
- t.fill=OL.COLOR_WHITE,t.fontSize=17,this.lblSeq=new SD("1",t.fill,t),this.addChild(this.lblSeq),this.container=new He,this.container.y=46,this.addChild(this.container),this.items=[],this.btnSLX=new _hi("0"),this.addChild(this.btnSLX),this.btnSLX.onClick=this.onBuyBtnClick.bind(this);
- const i=OL.LABEL_OPTION_NO_DROP_SHADOW;
- i.fill=OL.COLOR_WHITE,this.lblDesc=new SD("위 상품 구매 후 구매 가능",i.fill,i),this.addChild(this.lblDesc),this.updateLayout()}
- get width(){
- return this._width}
- get height(){
- return this._height}
- get numItem(){
- return this._numItem}
- updateLayout(){
- if(this.lblSeq.x=this.bg.x+.5*(this.bg.width-this.lblSeq.width),this.lblSeq.y=.5*(35-this.lblSeq.height),this.btnSLX.x=this.bg.x+this.bg.width-this.btnSLX.width-20,this.btnSLX.y=this.container.y+.5*(this.container.height-this.btnSLX.height),this.btnSLX.visible)this.container.x=10+.5*(this.btnSLX.x-10-this.container.width);
- else{
- this.container.x=20;
- const t=this.container.x+this.container.width,i=this._width-t-10;
- OL.setLabelWrapWidth(this.lblDesc,i),this.lblDesc.x=t+.5*(i-this.lblDesc.width),this.lblDesc.y=this.btnSLX.y+.5*(this.btnSLX.height-this.lblDesc.height)}
- }
- setData(t){
- if(null==t)return;
- this.data=t;
- const i=Dzt.isEventEnded(),s={
- price:100,rewards:[{
- type:"gem",amount:100,grade:-1}
- ]}
- ;
- this.lblSeq.text=`PRODUCT ${
- this.data.index+1}
- `,this.container.removeChildren();
- let e,n=0;
- const h=s.rewards.length;
- for(let r=0;
- r<h;
- ++r)r<this.items.length?e=this.items[r]:(e=new Ehi,this.items.push(e)),e.setData(s.rewards[r].type,s.rewards[r].amount,s.rewards[r].grade),e.x=n,this.container.addChild(e),n+=e.width+6;
- this.btnSLX.text=String(s.price),this.data.status==kzt.NOT_PURCHASE&&0==i?this.btnSLX.activated=!0:this.btnSLX.activated=!1,this.lblDesc.text=nB.getText("PAYBACK_1","위 상품 구매 후 구매 가능"),this.data.index>this.data.notPurchaseIndex?(this.btnSLX.visible=!1,this.lblDesc.visible=!0):(this.btnSLX.visible=!0,this.lblDesc.visible=!1),1==i&&this.data.status==kzt.NOT_PURCHASE&&(this.btnSLX.visible=!1,this.bg.texture=eS.getTexture("UI_Ekkorr","Popup_Bg_11_Gray"),this.lblDesc.text=nB.getText("COMMON_344","판매 종료"),this.lblDesc.visible=!0),this.updateLayout()}
- onBuyBtnClick(){
- if(!this.data)return;
- if(this.data.status!=kzt.NOT_PURCHASE)return;
- const t=Dzt.isEventEnded(),i=Dzt.paybackEvent;
- if(1==t){
- const{
- startTimeStr:t,endTimeStr:s,paybackEndTimeStr:e}
- =Dzt.getEventDurationStr(i);
- let n=nB.getText("PAYBACK_H1","이벤트 기간 동안 페이백 상품을 구매할 수 있습니다.");
- return n+=`\n(${
- t}
-  ~ ${
- s}
- )`,void YG.getInstance().show(n)}
- if(0!=this.btnSLX.activated){
- if(this.data.index>this.data.notPurchaseIndex+1){
- const t=nB.getText("COMMON_116","순서대로 구매 가능합니다.");
- return void YG.getInstance().show(t)}
- Chi.getInstance().buy(this.data,this.btnSLX)}
- }
- }
- ;
- qt(Mhi,"PaybackEventItemProduct");
- let Ahi=Mhi;
- const yhi=class extends iR{
- constructor(){
- super(),Xt(this,"bg"),Xt(this,"product"),Xt(this,"payback"),Xt(this,"arrow"),Xt(this,"_width",580),Xt(this,"_height",130),this.bg=new kM({
- texture:eS.getTexture("UI_Ekkorr","whiteRect"),leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10}
- ),this.bg.tint=1970226,this.bg.alpha=.1,this.bg.width=this._width,this.bg.height=this._height,this.addChild(this.bg),this.product=new Ahi,this.addChild(this.product),this.payback=new whi,this.payback.x=this._width-this.payback.width-1,this.payback.y=this.product.y,this.addChild(this.payback);
- const t=this.product.x+this.product.width;
- this.arrow=new je(eS.getTexture("UI_Ekkorr","Icon_Arrow")),this.arrow.x=t+.5*(this.payback.x-t-this.arrow.width),this.arrow.y=this.product.y+.5*(this.product.height-this.arrow.height)-1,this.addChild(this.arrow)}
- get width(){
- return this._width}
- get height(){
- return this._height}
- setData(t){
- this.product.setData(t),this.payback.setData(t)}
- }
- ;
- qt(yhi,"PaybackEventItemRenderer");
- let Shi=yhi;
- const Thi=class t extends AYt{
- constructor(){
- super(),Xt(this,"banner"),Xt(this,"lblDuration"),Xt(this,"bgPaybackEnd"),Xt(this,"lblPaybackEnd"),Xt(this,"btnHelp"),Xt(this,"list"),Xt(this,"dataList",[]),Xt(this,"requestPending1",!1),Xt(this,"requestPending2",!1),Xt(this,"count",0),Xt(this,"onPaybackEventBind"),Xt(this,"onPaymentSuccessBind"),this.setTitle(nB.getText("PAYBACK_T1","페이백 이벤트!")),this.top.removeFromParent(),this.banner=new Bzt(596,114),this.banner.autoResize=!0,this.banner.x=this.bg.x+.5*(this.bg.width-this.banner.width),this.banner.y=this.top.y+this.top.height-5,this.addChild(this.banner),this.txtTitle.textColor=16777215,this.addChild(this.txtTitle),this.btnClose.setTexture(eS.getTexture("UI_Ekkorr","Btn_Close_02")),this.addChild(this.btnClose);
- const t=OL.DEFAULT_OUTLINE_FONT_OPTION_18;
- t.fill=16777215,this.lblDuration=new SD("YYYY. MM. DD ~ YYYY. MM. DD",t.fill,t),this.lblDuration.x=this.banner.x+10,this.lblDuration.y=this.banner.y+this.banner.height-this.lblDuration.height-7,this.addChild(this.lblDuration),this.bgPaybackEnd=new kM({
- texture:eS.getTexture("UI_Ekkorr","Popup_Bg_02"),leftWidth:15,topHeight:10,rightWidth:15,bottomHeight:10}
- ),this.bgPaybackEnd.width=600,this.bgPaybackEnd.height=60,this.bgPaybackEnd.x=this.bg.x+10,this.bgPaybackEnd.y=this.banner.y+this.banner.height,this.addChild(this.bgPaybackEnd),this.btnHelp=new nU("UI_Ekkorr","Btn_help_p"),this.btnHelp.x=this.bgPaybackEnd.x+10,this.btnHelp.y=this.bgPaybackEnd.y+10,this.addChild(this.btnHelp),this.btnHelp.onClick=this.onHelpBtnClick.bind(this);
- const i=OL.LABEL_OPTION_NO_DROP_SHADOW;
- i.fill=16774108,this.lblPaybackEnd=new SD("보상 기간 :",i.fill,i),this.lblPaybackEnd.x=this.btnHelp.x+this.btnHelp.width,this.lblPaybackEnd.y=this.bgPaybackEnd.y+.5*(this.bgPaybackEnd.height-this.lblPaybackEnd.height),this.addChild(this.lblPaybackEnd);
- const s=this.bgPaybackEnd.y+this.bgPaybackEnd.height+15,e=this.bottom.y-s-10;
- this.list=new Zk(Shi,580,e,0),this.list.x=this.bg.x+20,this.list.y=s,this.addChild(this.list),this.updateLayout()}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- onAdded(){
- this.setEnterUpdate(!0),this.setPaybackEvent(!0),this.setPaymentSuccess(!0)}
- onRemoved(){
- this.setEnterUpdate(!1),this.setPaybackEvent(!1),this.setPaymentSuccess(!1)}
- updateLayout(){
- this.btnClose.x=this.top.x+this.top.width-this.btnClose.width-30,this.btnClose.y=this.txtTitle.y+.5*(this.txtTitle.height-this.btnClose.height)}
- async setData(){
- 0==Dzt.opened&&Dzt.getPaybackEvent(2),this.updateInfo(),this.updateList(),await this.banner.update("Popup_Banner_02"),this.updateLayout()}
- updateInfo(){
- const t=Dzt.paybackEvent,i=nB.getText(t.title,"Payback Event!");
- this.setTitle(i);
- const{
- startTimeStr:s,endTimeStr:e,paybackEndTimeStr:n}
- =Dzt.getEventDurationStr(t);
- this.lblDuration.text=`${
- s}
-  ~ ${
- e}
-  (UTC)`,this.lblPaybackEnd.text=nB.getText("COMMON_312","보상 기간 : YYYY-MM-DD (UTC)").replace("YYYY-MM-DD",n)}
- updateList(){
- const t=Dzt.paybackEvent,i=Dzt.paybacks;
- this.dataList.length=0;
- const s=i.findIndex(t=>t.status==kzt.NOT_PURCHASE),e=i.findIndex(t=>t.status==kzt.CREATED||t.status==kzt.FAILED);
- let n,h;
- const r=i.length;
- for(let o=0;
- o<r;
- ++o)n={
- index:o,eventId:t.id}
- ,h=i[o],n.paybackId=h.id,n.productId=h.productId,n.paybackType=h.paybackType,n.paybackValue=h.paybackValue,n.status=h.status,n.paidbackAt=h.paidbackAt,n.notPurchaseIndex=s,n.rewardIndex=e,this.dataList.push(n);
- this.list.dataProvider=this.dataList,this.list.executeShowingMotion()}
- onHelpBtnClick(){
- const t=QD.getInstance().getCsEmail();
- let i;
- const s=Dzt.paybackEvent;
- if(s.description.length>0){
- i=[];
- const e=s.description.length;
- for(let n=0;
- n<e;
- ++n){
- let e=nB.getValue(s.description[n]);
- "PAYBACK_H6"==s.description[n]&&(e+=` (${
- t}
- )`),i.push(e)}
- }
- else i=[nB.getText("PAYBACK_H1","이벤트 기간 동안 페이백 상품을 구매할 수 있습니다."),nB.getText("PAYBACK_H2","페이백 상품은 이벤트 기간 내에 1번만 구매할 수 있으며, 순서대로 구매 가능합니다."),nB.getText("PAYBACK_H3","페이백 상품을 구매하면 페이백 보상이 활성화되어 획득 가능합니다."),nB.getText("PAYBACK_H4","이벤트 기간이 종료되면 미수령한 페이백 보상은 소멸되어 획득이 불가합니다."),nB.getText("PAYBACK_H5","네트워크 상태에 따라 페이백 보상 지급에 일정 시간이 소요될 수 있습니다."),nB.getText("PAYBACK_H6","구매한 상품이 지급되지 않을 경우, 게임 ID와 결제 정보를 고객센터로 보내주세요.")],i[i.length-1]+=` (${
- t}
- )`;
- let e=.07*i.length;
- e>.4&&(e=.4),ghi.getInstance().setPositonRatioY(e),ghi.getInstance().title=nB.getText("COMMON_4","알림"),ghi.getInstance().show("\n@ "+i.join("\n@ "))}
- async buy(t,i){
- }
- async receive(t,i){
- if(1==this.requestPending2)return;
- let s;
- if(this.setRequestPending2(!0),s=t.status==kzt.PENDING?await TL.getInstance().payback.checkPending(t.eventId,t.paybackId,!0):await TL.getInstance().payback.receive(t.eventId,t.paybackId,!0),0==s.success){
- this.setRequestPending2(!1);
- let t="";
- const i=s.error;
- return"UNABLE_TO_PAYBACK"==i?t=nB.getText("COMMON_115","상품 구매 후 수령 가능합니다."):"COOL_TIME"==i?t=nB.getText("COMMON_82","잠시 후에 다시 시도해 주세요."):"PAYBACK_NOT_ELIGIBLE"==i&&(t=nB.getText("PAYBACK_2","페이백 보상 기간이 지났습니다.")),t?void YG.getInstance().show(t):void YG.getInstance().showError(s)}
- const e=nB.getText("COMMON_313","보상을 받았습니다.")+"\n"+t.paybackType.toUpperCase()+" : "+t.paybackValue;
- YG.getInstance().show(e),Dzt.setData(s.body),this.updateList(),this.displaySlxGathering(i,t.paybackValue),this.setRequestPending2(!1)}
- displaySlxGathering(t,i){
- if(!t)return;
- let s=t.getGlobalPosition(),e=Xy.stage.toLocal(s);
- B9t.getInstance().getSlx(e.x+.5*t.width-15,e.y+.5*t.height-20,i,Math.min(30,i),Fzt.getInstance())}
- setRequestPending1(t){
- this.requestPending1=t}
- setRequestPending2(t){
- this.requestPending2=t}
- setEnterUpdate(t){
- FM.getInstance().remove(this.onEnter,this),t&&FM.getInstance().add(this.onEnter,this)}
- onEnter(){
- ++this.count>60&&(this.count=0,this.onEnterUpdate())}
- onEnterUpdate(){
- 1==Dzt.isPaybackEnded()&&this.hide()}
- setPaybackEvent(t){
- mS.getInstance().removeEventListener("PaybackEvent",this.onPaybackEventBind),t&&(this.onPaybackEventBind=this.onPaybackEvent.bind(this),mS.getInstance().addEventListener("PaybackEvent",this.onPaybackEventBind))}
- onPaybackEvent(t){
- Dzt.opened?(this.updateInfo(),this.updateList()):this.hide()}
- setPaymentSuccess(t){
- mS.getInstance().removeEventListener("PaymentSuccess",this.onPaymentSuccessBind),t&&(this.onPaymentSuccessBind=this.onPaymentSuccess.bind(this),mS.getInstance().addEventListener("PaymentSuccess",this.onPaymentSuccessBind))}
- onPaymentSuccess(t){
- let i=-1;
- if(t&&t.detail&&"productId"in t.detail&&(i=t.detail.productId),-1==i)return;
- let s=c6.getInstance().getByProductId(i);
- s||(null==t?void 0:t.detail.productVo)&&(s=null==t?void 0:t.detail.productVo),s&&1==s.payback&&Dzt.getPaybackEvent(1)}
- }
- ;
- qt(Thi,"PaybackEventPopup"),Xt(Thi,"instance");
- let Chi=Thi;
- const Ihi=class t{
+ )),Yri=class t{
PvpHpGauge 1 hunks, 376 statements
- super(),Xt(this,"battleType",AF.PVP2),Xt(this,"BATTLEFIELD_WIDTH",640),Xt(this,"BATTLEFIELD_HEIGHT",640),Xt(this,"VIEWPORT_WIDTH",640),Xt(this,"GAME_ZOOM",1.3),Xt(this,"CAMERA_LERP",.08),Xt(this,"cameraX",0),Xt(this,"ALLY_CASTLE_X",126),Xt(this,"ALLY_CASTLE_Y",536),Xt(this,"ENEMY_CASTLE_X",1320),Xt(this,"ENEMY_CASTLE_Y",536),Xt(this,"ALLY_SPAWN_X",200),Xt(this,"ENEMY_SPAWN_X",1200),Xt(this,"Y_MIN",520),Xt(this,"Y_MAX",600),Xt(this,"ENEMY_COUNT",10),Xt(this,"CRANE_WING_ARC",20),Xt(this,"PVP_TIME_LIMIT_FRAMES",3600),Xt(this,"pvpStarted",!1),Xt(this,"speedHelper",new fZt("ef2.pvp2.battleSpeed")),Xt(this,"enemyCastle",null),Xt(this,"allyCastle",null),Xt(this,"timerText",null),Xt(this,"spawnedVOs",[]),Xt(this,"pvpTeamVOs",[]),Xt(this,"opTransPoints",null),Xt(this,"marchMode",!1),Xt(this,"allySpawnQueue",[]),Xt(this,"enemySpawnQueue",[]),Xt(this,"allySpawnTimer",0),Xt(this,"enemySpawnTimer",0),Xt(this,"MARCH_SPAWN_INTERVAL",56),Xt(this,"MARCH_ALLY_CASTLE_X",40),Xt(this,"MARCH_ALLY_CASTLE_Y",320),Xt(this,"MARCH_ENEMY_CASTLE_X",600),Xt(this,"MARCH_ENEMY_CASTLE_Y",320)}
+ super(),Zt(this,"allyG",new ip),Zt(this,"enemyG",new ip),Zt(this,"lblAlly"),Zt(this,"lblEnemy"),Zt(this,"ally",1),Zt(this,"enemy",1),Zt(this,"allyTrail",1),Zt(this,"enemyTrail",1),this.eventMode="none";
+ const t=new qg({
+ fontFamily:"Arial",fontSize:14,fontWeight:"bold",fill:16777215,stroke:{
+ color:0,width:3,join:"round"}
+ }
+ );
+ this.lblAlly=new dw({
+ text:"100%",style:t}
+ ),this.lblEnemy=new dw({
+ text:"100%",style:t.clone()}
+ ),this.lblAlly.anchor.set(1,.5),this.lblEnemy.anchor.set(0,.5),this.addChild(this.allyG,this.enemyG,this.lblAlly,this.lblEnemy),this.draw()}
+ get allyX(){
+ return 320-t.CENTER_GAP/2-t.BAR_W}
+ get enemyX(){
+ return 320+t.CENTER_GAP/2}
+ reset(){
+ this.ally=this.enemy=this.allyTrail=this.enemyTrail=1,this.draw()}
+ setRatios(i,s){
+ this.ally=Math.max(0,Math.min(1,i)),this.enemy=Math.max(0,Math.min(1,s)),this.allyTrail=Math.max(this.ally,this.allyTrail-t.TRAIL_SPEED*(this.allyTrail-this.ally+.02)),this.enemyTrail=Math.max(this.enemy,this.enemyTrail-t.TRAIL_SPEED*(this.enemyTrail-this.enemy+.02)),this.draw()}
+ draw(){
+ const i=t.BAR_W,s=t.BAR_H,e=s/2,n=this.allyX;
+ this.allyG.clear(),this.allyG.roundRect(n-2,-2,i+4,s+4,e+2).fill({
+ color:0,alpha:.6}
+ ),this.allyTrail>0&&this.allyG.roundRect(n,0,i*this.allyTrail,s,e).fill({
+ color:16777215,alpha:.75}
+ ),this.ally>0&&this.allyG.roundRect(n,0,i*this.ally,s,e).fill({
+ color:t.ALLY_COLOR}
+ ),this.allyG.roundRect(n,0,i,s/2,e).fill({
+ color:16777215,alpha:.12}
+ );
+ const h=this.enemyX;
+ this.enemyG.clear(),this.enemyG.roundRect(h-2,-2,i+4,s+4,e+2).fill({
+ color:0,alpha:.6}
+ ),this.enemyTrail>0&&this.enemyG.roundRect(h+i*(1-this.enemyTrail),0,i*this.enemyTrail,s,e).fill({
+ color:16777215,alpha:.75}
+ ),this.enemy>0&&this.enemyG.roundRect(h+i*(1-this.enemy),0,i*this.enemy,s,e).fill({
+ color:t.ENEMY_COLOR}
+ ),this.enemyG.roundRect(h,0,i,s/2,e).fill({
+ color:16777215,alpha:.12}
+ ),this.lblAlly.text=`${
+ Math.ceil(100*this.ally)}
+ %`,this.lblAlly.position.set(n+i-6,s/2),this.lblEnemy.text=`${
+ Math.ceil(100*this.enemy)}
+ %`,this.lblEnemy.position.set(h+6,s/2)}
+ }
+ ;
+ Qt(d7t,"PvpHpGauge"),Zt(d7t,"BAR_W",250),Zt(d7t,"BAR_H",18),Zt(d7t,"CENTER_GAP",116),Zt(d7t,"TRAIL_SPEED",.04),Zt(d7t,"ALLY_COLOR",4172287),Zt(d7t,"ENEMY_COLOR",16730698);
+ let f7t=d7t;
+ const p7t=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"band",new ip),Zt(this,"left",new Ve),Zt(this,"right",new Ve),Zt(this,"vs",new Ye(kS.getTexture("UI_Ekkorr","UI_VS"))),Zt(this,"fight"),Zt(this,"leftName"),Zt(this,"leftSub"),Zt(this,"rightName"),Zt(this,"rightSub"),Zt(this,"timeline",null),this.eventMode="none";
+ const i=t.CY,s=t.PANEL_H,e=t.PANEL_W,n=t.SLANT;
+ this.band.rect(0,i-s/2-18,640,s+36).fill({
+ color:0,alpha:.55}
+ );
+ const h=new qg({
+ fontFamily:"Arial",fontSize:26,fontWeight:"bold",fill:16777215,stroke:{
+ color:0,width:4,join:"round"}
+ }
+ ),r=new qg({
+ fontFamily:"Arial",fontSize:18,fontWeight:"bold",fill:16777215,stroke:{
+ color:0,width:3,join:"round"}
+ }
+ ),o=(new ip).poly([0,i-s/2,e,i-s/2,e-n,i+s/2,0,i+s/2]).fill({
+ color:t.ALLY_COLOR,alpha:.95}
+ ).poly([0,i-s/2,e,i-s/2,e-6,i-s/2+12,0,i-s/2+12]).fill({
+ color:16777215,alpha:.18}
+ );
+ this.leftName=new dw({
+ text:"",style:h}
+ ),this.leftSub=new dw({
+ text:"",style:r.clone()}
+ ),this.leftSub.style.fill=12575743,this.leftName.position.set(24,i-38),this.leftSub.position.set(26,i+6),this.left.addChild(o,this.leftName,this.leftSub);
+ const a=(new ip).poly([640-e+n,i-s/2,640,i-s/2,640,i+s/2,640-e,i+s/2]).fill({
+ color:t.ENEMY_COLOR,alpha:.95}
+ ).poly([640-e+n,i-s/2,640,i-s/2,640,i-s/2+12,640-e+n+6,i-s/2+12]).fill({
+ color:16777215,alpha:.18}
+ );
+ this.rightName=new dw({
+ text:"",style:h.clone()}
+ ),this.rightSub=new dw({
+ text:"",style:r.clone()}
+ ),this.rightSub.style.fill=16765132,this.rightName.anchor.set(1,0),this.rightSub.anchor.set(1,0),this.rightName.position.set(616,i-38),this.rightSub.position.set(614,i+6),this.right.addChild(a,this.rightName,this.rightSub),this.vs.anchor.set(.5),this.vs.position.set(320,i),this.fight=new dw({
+ text:"FIGHT!",style:new qg({
+ fontFamily:"Arial",fontSize:76,fontWeight:"bold",fill:16769354,stroke:{
+ color:3807744,width:9,join:"round"}
+ ,dropShadow:{
+ color:0,blur:10,angle:Math.PI/4,distance:5}
+ }
+ )}
+ ),this.fight.anchor.set(.5),this.fight.position.set(320,i),this.addChild(this.band,this.left,this.right,this.vs,this.fight),this.visible=!1}
+ play(t,i,s){
+ return this.stop(),t.addChild(this),this.setSide(this.leftName,this.leftSub,i),this.setSide(this.rightName,this.rightSub,s),this.visible=!0,this.band.alpha=0,this.left.x=-340,this.right.x=340,this.vs.alpha=0,this.vs.scale.set(2.6),this.vs.rotation=-.25,this.fight.alpha=0,this.fight.scale.set(.3),new Promise(t=>{
+ const i=MR.timeline({
+ onComplete:Qt(()=>this.stop(),"onComplete")}
+ );
+ this.timeline=i,i.to(this.band,{
+ alpha:1,duration:.2}
+ ,0).to(this.left,{
+ x:0,duration:.38,ease:"power3.out"}
+ ,0).to(this.right,{
+ x:0,duration:.38,ease:"power3.out"}
+ ,0).to(this.vs,{
+ alpha:1,rotation:0,duration:.3,ease:"back.out(2)"}
+ ,.3).to(this.vs.scale,{
+ x:1.15,y:1.15,duration:.3,ease:"back.out(2)"}
+ ,.3).to(this.left,{
+ x:-340,duration:.3,ease:"power2.in"}
+ ,1.75).to(this.right,{
+ x:340,duration:.3,ease:"power2.in"}
+ ,1.75).to(this.vs,{
+ alpha:0,duration:.2}
+ ,1.75).to(this.band,{
+ alpha:0,duration:.3}
+ ,1.8).set(this.fight,{
+ alpha:1}
+ ,1.95).to(this.fight.scale,{
+ x:1.15,y:1.15,duration:.22,ease:"back.out(2.5)"}
+ ,1.95).call(()=>{
+ qG.getInstance().playSFX(qG.SFX_WAVE_CALL),t()}
+ ,[],2).to(this.fight.scale,{
+ x:1.4,y:1.4,duration:.35,ease:"power1.in"}
+ ,2.45).to(this.fight,{
+ alpha:0,duration:.35,ease:"power1.in"}
+ ,2.45)}
+ )}
+ setSide(i,s,e){
+ i.scale.set(1),i.text=e.name,i.scale.set(Math.min(1,t.NAME_MAX_W/Math.max(1,i.width)));
+ const n=RB.getText("GAME_97","##위").replace("##",String(e.rank)),h=e.rank>0?`  ·  ${
+ n}
+ `:"";
+ s.text=`Lv.${
+ e.level}
+ ${
+ h}
+ `}
+ stop(){
+ var t,i;
+ null==(t=this.timeline)||t.kill(),this.timeline=null,this.visible=!1,null==(i=this.parent)||i.removeChild(this)}
+ }
+ ;
+ Qt(p7t,"PvpIntroBanner"),Zt(p7t,"CY",338),Zt(p7t,"PANEL_H",104),Zt(p7t,"PANEL_W",300),Zt(p7t,"SLANT",30),Zt(p7t,"NAME_MAX_W",240),Zt(p7t,"ALLY_COLOR",2060241),Zt(p7t,"ENEMY_COLOR",13185068);
+ let g7t=p7t;
+ const w7t=class t{
+ constructor(){
+ Zt(this,"placements",[]),Zt(this,"objects",[]),Zt(this,"currentSeason",eU.SPRING),Zt(this,"currentRealm",hU.FOREST),Zt(this,"requestedRealm",hU.FOREST),Zt(this,"fireObjects",[]),Zt(this,"hidden",!1)}
+ static preloadFireLand(){
+ return t.fireLoaded?Promise.resolve():(t.fireLoading||(t.fireLoading=Promise.all([kS.getSingleTexture(t.FIRE_GROUND),pF.preload()]).then(()=>{
+ t.fireLoaded=!0}
+ ).catch(i=>{
+ throw t.fireLoading=null,i}
+ )),t.fireLoading)}
+ static preloadRealm(i){
+ return i===hU.DEAD_LAND?t.preloadDeadLand():i===hU.FIRE_LAND?t.preloadFireLand():Promise.resolve()}
+ static isRealmLoaded(i){
+ return i===hU.DEAD_LAND?t.deadBackgroundsLoaded:i!==hU.FIRE_LAND||t.fireLoaded}
+ static preloadDeadLand(){
+ return t.deadBackgroundsLoaded?Promise.resolve():(t.deadLoading||(t.deadLoading=Promise.all(t.DEAD_SEASONS.map(i=>kS.getSingleTexture(`${
+ t.DEAD_DIR}
+ /bg${
+ i}
+ .png`))).then(()=>{
+ t.deadBackgroundsLoaded=!0}
+ ).catch(i=>{
+ throw t.deadLoading=null,i}
+ )),t.deadLoading)}
+ load(t,i=hU.FOREST){
+ this.clear(),this.placements=this.generatePlacements(),this.spawnObjects(),this.applySeason(t,!0,i)}
+ applySeason(i,s=!1,e=this.requestedRealm){
+ if(this.requestedRealm=e,this.currentSeason!==i||this.currentRealm!==e||s)return t.isRealmLoaded(e)?void this.applyLook(i,s,e):(this.applyLook(i,s,hU.FOREST),void t.preloadRealm(e).then(()=>{
+ this.requestedRealm===e&&this.applyLook(this.currentSeason,!0,e)}
+ ).catch(t=>{
+ }
+ ))}
+ applyLook(i,s,e){
+ this.currentSeason=i,this.currentRealm=e,mU.getInstance().setSingleBackground(e===hU.FIRE_LAND?t.FIRE_GROUND:e===hU.DEAD_LAND?`${
+ t.DEAD_DIR}
+ /bg${
+ i}
+ .png`:`images/bg/bg${
+ i}
+ .png`,640,640);
+ const n=e===hU.FIRE_LAND;
+ for(let h=0;
+ h<this.objects.length;
+ h++){
+ const s=this.placements[h];
+ this.objects[h].visible=!n&&!this.hidden,n||(e===hU.DEAD_LAND?this.objects[h].texture=this.getDeadTexture(s.type,h,i):this.objects[h].setTexture(t.GAME_SHEET,this.getTextureName(s.type,i)))}
+ n&&this.ensureFireObjects();
+ for(const t of this.fireObjects)t.visible=n&&!this.hidden;
+ pF.getInstance().setActive(n&&!this.hidden),oF.isNight?this.setNight(s):this.setDay(s)}
+ getSeason(){
+ return this.currentSeason}
+ getRealm(){
+ return this.requestedRealm}
+ getDeadTexture(i,s,e){
+ if(4===i)return kS.getTexture(t.GAME_SHEET,t.DEAD_SMALL[s%t.DEAD_SMALL.length]);
+ const n=(i+s)%2+1;
+ return kS.getTexture(t.GAME_SHEET,`deadTree${
+ e}
+ ${
+ n}
+ `)}
+ getTextureName(t,i){
+ return 4===t?`bush${
+ i}
+ `:`tree${
+ i}
+ ${
+ t}
+ `}
+ spawnObjects(){
+ const i=SU.getInstance(),s=this.currentSeason;
+ for(const e of this.placements){
+ const n=this.getTextureName(e.type,s),h=new d0t(t.GAME_SHEET,n);
+ h.x=e.x,h.y=e.y,h.scale.set(e.scale),e.flipX&&(h.scale.x=-Math.abs(h.scale.x)),this.objects.push(h),i.addChild(h)}
+ }
+ ensureFireObjects(){
+ if(this.fireObjects.length>0)return;
+ const i=SU.getInstance();
+ for(const[s,e,n]of aF){
+ const h=new d0t(t.GAME_SHEET,s);
+ h.x=e,h.y=n,h.tint=oF.isNight?t.NIGHT_TINT:t.DAY_TINT,this.fireObjects.push(h),i.addChild(h)}
+ }
+ generatePlacements(){
+ const i=[],s=t.FIELD_SIZE,e=t.EDGE_MARGIN,n=s/2,h=s/2,r=t.SAFE_RADIUS*t.SAFE_RADIUS,o=[2,3],a=Qt(()=>o[Math.floor(2*Math.random())],"randTree");
+ for(let t=0;
+ t<8;
+ t++){
+ const t=Math.random(),n=t<.5?t*t*2:1-(1-t)*(1-t)*2;
+ i.push({
+ type:a(),x:30+n*(s-60),y:20+Math.random()*(e-20),scale:1+.3*Math.random(),flipX:Math.random()>.5}
+ )}
+ for(let t=0;
+ t<8;
+ t++){
+ const t=Math.random(),e=t<.5?t*t*2:1-(1-t)*(1-t)*2;
+ i.push({
+ type:a(),x:30+e*(s-60),y:s-30+50*Math.random(),scale:1+.3*Math.random(),flipX:Math.random()>.5}
+ )}
+ for(let t=0;
+ t<6;
+ t++){
+ const t=60*Math.random()-10,o=Math.random(),c=e+(o<.5?o*o*2:1-(1-o)*(1-o)*2)*(s-2*e);
+ this.distSq(t,c,n,h)<r||i.push({
+ type:a(),x:t,y:c,scale:1+.3*Math.random(),flipX:Math.random()>.5}
+ )}
+ for(let t=0;
+ t<6;
+ t++){
+ const t=s-30+30*Math.random(),o=Math.random(),c=e+(o<.5?o*o*2:1-(1-o)*(1-o)*2)*(s-2*e);
+ this.distSq(t,c,n,h)<r||i.push({
+ type:a(),x:t,y:c,scale:1+.3*Math.random(),flipX:Math.random()>.5}
+ )}
+ for(let c=0;
+ c<4;
+ c++){
+ const e=Math.random()*Math.PI*2,r=t.SAFE_RADIUS+40+Math.random()*(s/2-t.SAFE_RADIUS-20),o=n+r*Math.cos(e),a=h+r*Math.sin(e);
+ o<10||o>s-10||a<10||a>s-10||i.push({
+ type:4,x:o,y:a,scale:1+.4*Math.random(),flipX:Math.random()>.5}
+ )}
+ return i}
+ distSq(t,i,s,e){
+ const n=t-s,h=i-e;
+ return n*n+h*h}
+ setNight(i=!1){
+ const s=t.NIGHT_TINT>>16&255,e=t.NIGHT_TINT>>8&255,n=255&t.NIGHT_TINT;
+ for(const h of[...this.objects,...this.fireObjects])if(i)h.tint=t.NIGHT_TINT;
+ else{
+ const t="number"==typeof h.tint?h.tint:16777215,i={
+ r:t>>16&255,g:t>>8&255,b:255&t}
+ ;
+ MR.to(i,{
+ r:s,g:e,b:n,duration:2,ease:"power2.inOut",onUpdate:Qt(()=>{
+ h.tint=i.r<<16|i.g<<8|i.b}
+ ,"onUpdate")}
+ )}
+ }
+ setDay(i=!1){
+ for(const s of[...this.objects,...this.fireObjects])if(i)s.tint=t.DAY_TINT;
+ else{
+ const t="number"==typeof s.tint?s.tint:16777215,i={
+ r:t>>16&255,g:t>>8&255,b:255&t}
+ ;
+ MR.to(i,{
+ r:255,g:255,b:255,duration:2,ease:"power2.inOut",onUpdate:Qt(()=>{
+ s.tint=i.r<<16|i.g<<8|i.b}
+ ,"onUpdate")}
+ )}
+ }
+ hide(){
+ this.hidden=!0;
+ for(const t of this.objects)t.visible=!1;
+ for(const t of this.fireObjects)t.visible=!1;
+ pF.getInstance().setActive(!1)}
+ show(){
+ this.hidden=!1;
+ const t=this.currentRealm===hU.FIRE_LAND;
+ for(const i of this.objects)i.visible=!t;
+ for(const i of this.fireObjects)i.visible=t;
+ pF.getInstance().setActive(t)}
+ clear(){
+ const t=SU.getInstance();
+ for(const i of this.objects)t.removeChild(i);
+ for(const i of this.fireObjects)t.removeChild(i),i.destroy();
+ this.objects.length=0,this.fireObjects.length=0,this.placements.length=0,pF.getInstance().setActive(!1)}
+ }
+ ;
+ Qt(w7t,"BaseMap"),Zt(w7t,"GAME_SHEET","Game"),Zt(w7t,"FIELD_SIZE",640),Zt(w7t,"EDGE_MARGIN",100),Zt(w7t,"SAFE_RADIUS",180),Zt(w7t,"NIGHT_TINT",7373467),Zt(w7t,"DAY_TINT",16777215),Zt(w7t,"DEAD_DIR","images/bg/deadland"),Zt(w7t,"DEAD_SEASONS",[eU.SPRING,eU.SUMMER,eU.AUTUMN,eU.WINTER]),Zt(w7t,"DEAD_SMALL",["grave1","grave2","bones1"]),Zt(w7t,"deadBackgroundsLoaded",!1),Zt(w7t,"deadLoading",null),Zt(w7t,"FIRE_GROUND","images/bg/fireland/ground.png"),Zt(w7t,"fireLoaded",!1),Zt(w7t,"fireLoading",null);
+ let m7t=w7t;
+ const v7t=class t{
+ constructor(){
+ Zt(this,"props",[])}
+ async show(i){
+ this.clear();
+ let s=t.THEMES[i]??t.THEMES[1];
+ if(s.realm===hU.DEAD_LAND)try{
+ await m7t.preloadDeadLand()}
+ catch(ort){
+ s=t.THEMES[1]}
+ const e=s.realm===hU.DEAD_LAND;
+ await mU.getInstance().setSingleBackground(e?`${
+ t.DEAD_DIR}
+ /bg${
+ s.season}
+ .png`:`images/bg/bg${
+ s.season}
+ .png`,640,640);
+ const n=s.phase===eF.NIGHT?t.NIGHT_TINT:16777215,h=SU.getInstance();
+ t.SPOTS.forEach((i,e)=>{
+ const r=new d0t(t.GAME_SHEET,this.textureName(i.big,e,s));
+ r.x=i.x,r.y=i.y,r.scale.set(i.scale),e%2==1&&(r.scale.x=-r.scale.x),r.tint=n,h.addChild(r),this.props.push(r)}
+ ),EF.getInstance().setFixedPhase(s.phase,s.realm)}
+ textureName(t,i,s){
+ return s.realm===hU.DEAD_LAND?t?`deadTree${
+ s.season}
+ ${
+ i%2+1}
+ `:["grave1","grave2","bones1"][i%3]:t?`tree${
+ s.season}
+ ${
+ i%2+2}
+ `:`bush${
+ s.season}
+ `}
+ clear(){
+ var t;
+ for(const i of this.props)null==(t=i.parent)||t.removeChild(i),i.destroy();
+ this.props.length=0}
+ }
+ ;
+ Qt(v7t,"PvpArena"),Zt(v7t,"GAME_SHEET","Game"),Zt(v7t,"DEAD_DIR","images/bg/deadland"),Zt(v7t,"NIGHT_TINT",7373467),Zt(v7t,"THEMES",{
+ 1:{
+ season:eU.SPRING,realm:hU.FOREST,phase:eF.DAY}
+ ,2:{
+ season:eU.SUMMER,realm:hU.FOREST,phase:eF.DAY}
+ ,3:{
+ season:eU.AUTUMN,realm:hU.FOREST,phase:eF.DUSK}
+ ,4:{
+ season:eU.WINTER,realm:hU.DEAD_LAND,phase:eF.NIGHT}
+ }
+ ),Zt(v7t,"SPOTS",[...[65,200,335,470,605].map((t,i)=>({
+ x:t,y:118+i%2*10,scale:1.2,big:!0}
+ )),...[30,100,165,235,300,370,440,505,575,630].map((t,i)=>({
+ x:t,y:160+i%3*9,scale:1+i%3*.1,big:!0}
+ )),...[20,95,170,240,320,395,465,540,610].map((t,i)=>({
+ x:t,y:628+i%2*14,scale:1.05+i%2*.15,big:!0}
+ )),...[90,255,410,560].map((t,i)=>({
+ x:t,y:206+i%2*8,scale:1,big:!1}
+ )),...[60,215,380,530].map((t,i)=>({
+ x:t,y:588+i%2*8,scale:1,big:!1}
+ ))]);
+ let _7t=v7t;
+ const M7t=class t extends M0t{
+ constructor(){
+ super(),Zt(this,"battleType",v$.PVP2),Zt(this,"PVP_TIME_LIMIT_FRAMES",3600),Zt(this,"pvpStarted",!1),Zt(this,"speedHelper",new y0t("ef2.pvp2.battleSpeed")),Zt(this,"timerText",null),Zt(this,"hpGauge",new f7t),Zt(this,"introBanner",new g7t),Zt(this,"arena",new _7t),Zt(this,"savedView",null),Zt(this,"allyRoster",[]),Zt(this,"enemyRoster",[]),Zt(this,"spawnedVOs",[]),Zt(this,"pvpTeamVOs",[]),Zt(this,"opTransPoints",null),this.unitScale=t.UNIT_SCALE}
FireRealmIntro 6 hunks, 352 statements
- constructor(){
- Xt(this,"placements",[]),Xt(this,"objects",[]),Xt(this,"currentSeason",kB.SPRING),Xt(this,"currentRealm",xB.FOREST),Xt(this,"requestedRealm",xB.FOREST)}
- static preloadDeadLand(){
- return t.deadBackgroundsLoaded?Promise.resolve():(t.deadLoading||(t.deadLoading=Promise.all(t.DEAD_SEASONS.map(i=>eS.getSingleTexture(`${
- t.DEAD_DIR}
- /bg${
- i}
- .png`))).then(()=>{
- t.deadBackgroundsLoaded=!0}
- ).catch(i=>{
- throw t.deadLoading=null,i}
- )),t.deadLoading)}
- load(t,i=xB.FOREST){
- this.clear(),this.placements=this.generatePlacements(),this.spawnObjects(),this.applySeason(t,!0,i)}
- applySeason(i,s=!1,e=this.requestedRealm){
- if(this.requestedRealm=e,this.currentSeason!==i||this.currentRealm!==e||s)return e!==xB.DEAD_LAND||t.deadBackgroundsLoaded?void this.applyLook(i,s,e):(this.applyLook(i,s,xB.FOREST),void t.preloadDeadLand().then(()=>{
- this.requestedRealm===xB.DEAD_LAND&&this.applyLook(this.currentSeason,!0,xB.DEAD_LAND)}
- ).catch(t=>{
+ static isPending(){
+ return!t.played&&EG.maxWave<rU&&!t.seenSaved()}
+ static seenKey(){
+ return t.SEEN_LS_PREFIX+EG.userId}
+ static seenSaved(){
+ try{
+ return"1"===localStorage.getItem(t.seenKey())}
+ catch{
+ return!1}
- ))}
- applyLook(i,s,e){
- this.currentSeason=i,this.currentRealm=e,DB.getInstance().setSingleBackground(e===xB.DEAD_LAND?`${
- t.DEAD_DIR}
- /bg${
- i}
- .png`:`images/bg/bg${
- i}
- .png`,640,640);
- for(let n=0;
- n<this.objects.length;
- n++){
- const s=this.placements[n];
- e===xB.DEAD_LAND?this.objects[n].texture=this.getDeadTexture(s.type,n,i):this.objects[n].setTexture(t.GAME_SHEET,this.getTextureName(s.type,i))}
- I0.isNight?this.setNight(s):this.setDay(s)}
- getSeason(){
- return this.currentSeason}
- getRealm(){
- return this.requestedRealm}
- getDeadTexture(i,s,e){
- if(4===i)return eS.getTexture(t.GAME_SHEET,t.DEAD_SMALL[s%t.DEAD_SMALL.length]);
- const n=(i+s)%2+1;
- return eS.getTexture(t.GAME_SHEET,`deadTree${
- e}
- ${
- n}
- `)}
- getTextureName(t,i){
- return 4===t?`bush${
- i}
- `:`tree${
- i}
- ${
- t}
- `}
- spawnObjects(){
- const i=VB.getInstance(),s=this.currentSeason;
- for(const e of this.placements){
- const n=this.getTextureName(e.type,s),h=new eZt(t.GAME_SHEET,n);
- h.x=e.x,h.y=e.y,h.scale.set(e.scale),e.flipX&&(h.scale.x=-Math.abs(h.scale.x)),this.objects.push(h),i.addChild(h)}
+ static saveSeen(){
+ try{
+ localStorage.setItem(t.seenKey(),"1")}
+ catch{
- setDay(i=!1){
- for(const s of this.objects)if(i)s.tint=t.DAY_TINT;
- else{
- const t="number"==typeof s.tint?s.tint:16777215,i={
- r:t>>16&255,g:t>>8&255,b:255&t}
- ;
- zk.to(i,{
- r:255,g:255,b:255,duration:2,ease:"power2.inOut",onUpdate:qt(()=>{
- s.tint=i.r<<16|i.g<<8|i.b}
- ,"onUpdate")}
- )}
+ static get isRunning(){
+ return t.running}
+ static async play(i){
+ var s;
+ if(t.running)return;
+ t.running=!0,t.played=!0;
+ let e,n=null;
+ try{
+ await Vdi.load(),await Hdi(()=>i.canShow()&&!xG.getInstance().hasPopup),n=new Vdi,n.open(),e=null==(s=i.hideActors)?void 0:s.call(i),await t.script(n,i),t.saveSeen()}
+ catch(ort){
- hide(){
- for(const t of this.objects)t.visible=!1}
- show(){
- for(const t of this.objects)t.visible=!0}
- clear(){
+ finally{
+ null==e||e(),await(null==n?void 0:n.close()),t.running=!1}
+ }
+ static async script(t,i){
+ var s;
+ const e=G8t,n=L8t,h=i.castle,r=Ndi();
+ t.shake(),await t.say(n.quake),await t.say(n.awaken),await t.focus(h,"circle",150),t.showLord(h),await t.say(n.lordBoast),t.hideLord(),t.focus(null),t.hideBox(),t.setPausedVisible(!1),await i.transform(),t.setPausedVisible(!0);
- for(const i of this.objects)t.removeChild(i);
- this.objects.length=0,this.placements.length=0}
+ o.popIn(),await t.banner(Uzt(e.realmName),Fzt(e.speedDebuff,Math.max(1,fU(EG.wave)))),await t.say(n.forestBurned),await t.say(n.lordIntro),$di(o)&&(await t.pressBorrowed(o,o.focusTarget,n.tapMark),await Hdi(()=>!xG.getInstance().hasPopup)),await t.focus(h,"circle",70),t.castleGlow(h,Pdi(r)),await t.say(n.castleGlow),await t.say(n.castleReact);
+ const a=u$.getInstance();
+ t.revealBorrowed(a)&&(await t.focus(a,"circle",6),t.showTribeTag(a,r),await t.say(n.tribeIcon),t.clearTags(),t.concealBorrowed(a)),await t.focus(h,"circle",70),t.castleGlow(h,Pdi(r),!0),await new Promise(t=>setTimeout(t,180)),null==(s=i.transformCastle)||s.call(i),t.showCastleTag(h,r),await t.say(n.castleTribe),t.clearTags(),t.focus(null),await t.say(n.fireRule),await t.resume(n.resolve)}
- qt(Zli,"BaseMap"),Xt(Zli,"GAME_SHEET","Game"),Xt(Zli,"FIELD_SIZE",640),Xt(Zli,"EDGE_MARGIN",100),Xt(Zli,"SAFE_RADIUS",180),Xt(Zli,"NIGHT_TINT",7373467),Xt(Zli,"DAY_TINT",16777215),Xt(Zli,"DEAD_DIR","images/bg/deadland"),Xt(Zli,"DEAD_SEASONS",[kB.SPRING,kB.SUMMER,kB.AUTUMN,kB.WINTER]),Xt(Zli,"DEAD_SMALL",["grave1","grave2","bones1"]),Xt(Zli,"deadBackgroundsLoaded",!1),Xt(Zli,"deadLoading",null);
+ Qt(Udi,"FireRealmIntro"),Zt(Udi,"played",!1),Zt(Udi,"running",!1),Zt(Udi,"SEEN_LS_PREFIX","ef2.fireIntroSeen."),Zt(Udi,"testOnNextWave",!1);
+ let Fdi=Udi;
+ function $di(t){
+ for(let i=t;
+ ;
+ i=i.parent){
+ if(!i.visible||i.alpha<=0||i.destroyed)return!1;
+ if(!i.parent)return i===ES.stage}
+ }
+ function Hdi(t){
+ return t()?Promise.resolve():new Promise(i=>{
+ const s=Qt(()=>{
+ t()&&(MR.ticker.remove(s),i())}
+ ,"check");
+ MR.ticker.add(s)}
+ )}
+ Qt($di,"isShown"),Qt(Hdi,"waitUntil");
+ const Wdi=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"bar",new Ve),Zt(this,"hud",new Ve),Zt(this,"spot",new Kzt(.6)),Zt(this,"fx",new Ve),Zt(this,"box",new Ve),Zt(this,"boxBg",new tG),Zt(this,"portrait",new Ye),Zt(this,"lblName",new QD("",16768324,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblMessage",new dw({
+ text:"",style:{
+ ...t.MESSAGE_STYLE,fill:sD.COLOR_WHITE,tagStyles:$zt}
+ }
+ )),Zt(this,"lblHint",new QD("",13350539,{
+ ...sD.DEFAULT_FONT_OPTION_18,fontSize:14,lineHeight:18}
+ )),Zt(this,"pausedChip",new Ve),Zt(this,"lblPaused",new QD("",16773848,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lord",null),Zt(this,"tags",[]),Zt(this,"hand",null),Zt(this,"hole",null),Zt(this,"hiddenLayers",[]),Zt(this,"borrowed",[]),Zt(this,"yieldToPopups",Qt(()=>{
+ const t=xG.getInstance().hasPopup;
+ this.visible=!t,this.eventMode=t?"none":"static"}
+ ,"yieldToPopups")),Zt(this,"lastBoxH",0),this.alpha=0,this.eventMode="static",this.hitArea=new Ui(-5e3,-5e3,1e4,1e4),this.spot.alpha=0,this.boxBg.setIndex(7),this.boxBg.alpha=.85,this.box.addChild(this.boxBg,this.portrait,this.lblName,this.lblMessage,this.lblHint),this.box.visible=!1,this.lblHint.text=Uzt(Bzt.tapToContinue)+" ▼",this.lblPaused.text=Uzt(G8t.paused),this.pausedChip.addChild((new ip).roundRect(0,0,this.lblPaused.width+28,this.lblPaused.height+10,14).fill({
+ color:0,alpha:.5}
+ ),this.lblPaused),this.lblPaused.position.set(14,5),this.addChild(this.bar,this.hud,this.spot,this.fx,this.pausedChip,this.box),MR.ticker.add(this.yieldToPopups)}
+ static async load(){
+ await Vzt.load(),t.lordTexture||(t.lordTexture=await kS.getSingleTexture(t.LORD_IMAGE).catch(()=>null))}
+ get barTop(){
+ return ES.SAFE_AREA_TOP+640}
+ get screenH(){
+ return ES.stageHeight||1136}
+ globalCenterOf(t){
+ const i=t.getBounds();
+ return this.toLocal(new yi(i.x+i.width/2,i.y+i.height/2))}
+ open(){
+ $ci.getInstance().addChild(this),this.enterCinema(),this.drawBar(),this.pausedChip.x=.5*(640-this.pausedChip.width),this.pausedChip.y=ES.SAFE_AREA_TOP+46,MR.to(this,{
+ alpha:1,duration:.25}
+ )}
+ close(){
+ return MR.ticker.remove(this.yieldToPopups),this.hideHand(),this.exitCinema(),new Promise(t=>{
+ MR.to(this,{
+ alpha:0,duration:.25,onComplete:Qt(()=>{
+ MR.killTweensOf(this.fx.children),this.removeFromParent(),this.destroy({
+ children:!0}
+ ),t()}
+ ,"onComplete")}
+ )}
+ )}
+ setPausedVisible(t){
+ MR.to(this.pausedChip,{
+ alpha:t?1:0,duration:.2}
+ )}
+ enterCinema(){
+ this.borrow($8t.getInstance(),!1),this.borrow(u$.getInstance(),!0);
+ const t=Qt(t=>{
+ t&&(this.hiddenLayers.push({
+ target:t,visible:t.visible}
+ ),t.visible=!1)}
+ ,"hide");
+ t(u7t.getInstance()),t(Pci.getInstance()),t(Yzt.getInstance()),t(Tci.getInstance()),t(b$.getInstance()),t(rci.getInstance()),t(XD.getInstance()),t(GF.getInstance())}
+ exitCinema(){
+ for(const t of this.hiddenLayers.reverse())t.target.visible=t.visible;
+ this.hiddenLayers=[];
+ for(const t of this.borrowed.reverse())t.target.destroyed||t.parent.destroyed||(t.parent.addChildAt(t.target,Math.min(t.index,t.parent.children.length)),t.target.position.set(t.x,t.y),t.target.scale.set(t.sx,t.sy),t.target.eventMode=t.eventMode,t.restoreVisible&&(t.target.visible=t.visible));
+ this.borrowed=[]}
+ borrow(t,i){
+ const s=t.parent;
+ if(!s)return;
+ const e=s.toGlobal(new yi(0,0)),n=s.toGlobal(new yi(1,1)),h=this.hud.toGlobal(new yi(0,0)),r=this.hud.toGlobal(new yi(1,1)),o=(n.x-e.x)/(r.x-h.x||1),a=(n.y-e.y)/(r.y-h.y||1),c=this.hud.toLocal(s.toGlobal(t.position));
+ this.borrowed.push({
+ target:t,parent:s,index:s.getChildIndex(t),x:t.x,y:t.y,sx:t.scale.x,sy:t.scale.y,eventMode:t.eventMode??"passive",visible:t.visible,restoreVisible:i}
+ ),this.hud.addChild(t),t.position.set(c.x,c.y),t.scale.set(t.scale.x*o,t.scale.y*a),t.eventMode="none",i&&(t.visible=!1)}
+ revealBorrowed(t){
+ const i=this.borrowed.find(i=>i.target===t);
+ return!(!i||!i.visible||(t.visible=!0,t.alpha=0,MR.to(t,{
+ alpha:1,duration:.25}
+ ),0))}
+ concealBorrowed(t){
+ MR.to(t,{
+ alpha:0,duration:.2,onComplete:Qt(()=>{
+ t.visible=!1,t.alpha=1}
+ ,"onComplete")}
+ )}
+ drawBar(){
+ const t=this.barTop,i=Math.max(0,this.screenH-t)+400,s=new ip;
+ for(let e=0;
+ e<36;
+ e+=2)s.rect(0,t-36+e,640,2).fill({
+ color:656901,alpha:e/36*.85}
+ );
+ s.rect(0,t,640,i).fill(656901),s.rect(0,t,640,2).fill({
+ color:16747066,alpha:.35}
+ ),this.bar.removeChildren(),this.bar.addChild(s)}
+ async focus(t,i="rect",s=8){
+ if(!t)return this.hole=null,void MR.to(this.spot,{
+ alpha:0,duration:.3,onComplete:Qt(()=>this.spot.reset(),"onComplete")}
+ );
+ const e=this.rectOf(t);
+ this.hole="circle"===i?Kzt.circleHole(e,s):Kzt.rectHole(e,s),MR.to(this.spot,{
+ alpha:1,duration:.25}
+ ),this.spot.focus(this.hole),await new Promise(t=>setTimeout(t,380))}
+ rectOf(t){
+ const i=t.getBounds(),s=this.toLocal(new yi(i.x,i.y)),e=this.toLocal(new yi(i.x+i.width,i.y+i.height));
+ return new Ui(s.x,s.y,e.x-s.x,e.y-s.y)}
+ async say(t){
+ this.showBox(t,!0),await this.waitTap()}
+ static resolve([t,i,s]){
+ const e=tYt.getInstance().list.find(i=>i.kindNum===t);
+ return{
+ code:(null==e?void 0:e.code)||i,text:RB.getText(`DIALOGUE_TEXT_${
+ t}
+ `,(null==e?void 0:e.text)||s)}
+ }
+ showBox(i,s){
+ const{
+ code:e,text:n}
+ =t.resolve(i),h=e.startsWith("FL")?t.lordTexture:kS.getTexture(t.DIALOGUE_SHEET,e);
+ this.portrait.texture=h??as.EMPTY;
+ const r=h&&h.height>0?t.PORTRAIT_H/h.height:1;
+ this.portrait.scale.set(r),this.lblName.text=t.nameOf(e),this.lblMessage.text=Hzt(n,t.MESSAGE_STYLE,t.MESSAGE_W),this.lblHint.visible=s;
+ const o=t.BOX_W,a=s?this.lblHint.height:0,c=this.lblMessage.height+16+16+a;
+ this.boxBg.width=o,this.boxBg.height=c,this.portrait.position.set(8,-this.portrait.height),this.lblName.position.set(this.portrait.x+this.portrait.width-6,-this.lblName.height-4),this.lblMessage.x=.5*(o-this.lblMessage.width),this.lblMessage.y=.5*(c-a-this.lblMessage.height),this.lblHint.position.set(o-8-4-this.lblHint.width,c-8-this.lblHint.height+2),this.box.x=.5*(640-o),this.box.y=this.boxY(c),this.lastBoxH=c,this.box.visible||(this.box.visible=!0,this.box.alpha=0),MR.to(this.box,{
+ alpha:1,duration:.18}
+ )}
+ boxY(i){
+ const s=this.barTop+t.PORTRAIT_H+16;
+ return Math.min(s,this.screenH-i-90)}
+ hideBox(){
+ MR.to(this.box,{
+ alpha:0,duration:.15,onComplete:Qt(()=>{
+ this.box.visible=!1}
+ ,"onComplete")}
+ )}
+ static nameOf(t){
+ return t.startsWith("FL")?Uzt(D8t):t.startsWith("S")?RB.getText("DIALOGUE_NPC_S","정령"):RB.getText("DIALOGUE_NPC_L","성주")}
+ waitTap(){
+ this.hitArea=new Ui(-5e3,-5e3,1e4,1e4);
+ const i=performance.now();
+ return new Promise(s=>{
+ const e=Qt(()=>{
+ performance.now()-i<t.TAP_DELAY_MS||(this.off("pointertap",e),s())}
+ ,"onTap");
+ this.on("pointertap",e)}
+ )}
+ async pressBorrowed(t,i,s){
+ await this.focus(i,"circle",10),this.showBox(s,!1);
+ const e=this.rectOf(i);
+ this.pointAt(e.x+e.width/2,e.y+e.height/2),t.eventMode="static",await Hdi(()=>xG.getInstance().hasPopup),t.eventMode="none",this.hideHand()}
+ pointAt(i,s){
+ if(!this.ensureHand()||!this.hand)return;
+ const e=this.hand,n=e.texture.orig,h=(t.HAND_TIP.x-e.anchor.x*n.width)*e.scale.x,r=(t.HAND_TIP.y-e.anchor.y*n.height)*e.scale.y;
+ e.position.set(i-h,s-r),this.addChild(e),e.play()}
+ ensureHand(){
+ if(this.hand)return!0;
+ try{
+ const t=kS.getTextures("ClickHand","ClickHand");
+ return!(!t||0===t.length||(this.hand=new fp(t),this.hand.animationSpeed=.65,this.hand.eventMode="none",0))}
+ catch{
+ return!1}
+ }
+ hideHand(){
+ this.hand&&(this.hand.stop(),this.hand.removeFromParent())}
+ async resume(t){
+ this.showBox(t,!1),this.hitArea=new Ui(-5e3,-5e3,1e4,1e4);
+ const i=new Bdi(Uzt(G8t.resume),220);
+ i.x=.5*(640-i.width),i.y=Math.min(this.box.y+this.lastBoxH+24,this.screenH-i.height-24),this.addChildAt(i,this.getChildIndex(this.box)+1),this.pointAt(i.x+.62*i.width,i.y+.5*i.height),await new Promise(t=>{
+ i.onClick=()=>{
+ i.onClick=void 0,t()}
+ }
+ ),this.hideHand()}
+ shake(){
+ const t=EF.getInstance(),i=t.x,s=t.y;
+ MR.to(t,{
+ duration:.06,repeat:9,yoyo:!0,x:i+4,y:s-2,ease:"sine.inOut",onComplete:Qt(()=>{
+ t.position.set(i,s)}
+ ,"onComplete")}
+ )}
+ showLord(i){
+ const s=t.lordTexture;
+ if(!s)return;
+ const e=this.hole?new yi(this.hole.x+this.hole.w/2,this.hole.y+this.hole.h/2):this.globalCenterOf(i),n=new Ve,h=(new ip).circle(0,0,120).fill({
+ color:16742944,alpha:.35}
+ );
+ h.blendMode="add";
+ const r=new Ye(s);
+ r.anchor.set(.5,.5),r.scale.set(250/s.height),n.addChild(h,r),n.position.set(e.x,e.y),n.alpha=0,n.scale.set(.8),this.fx.addChild(n),this.lord=n,MR.to(n,{
+ alpha:1,duration:.45,ease:"power2.out"}
+ ),MR.to(n.scale,{
+ x:1,y:1,duration:.6,ease:"back.out(1.8)"}
+ ),MR.to(h.scale,{
+ x:1.12,y:1.12,duration:.5,yoyo:!0,repeat:-1,ease:"sine.inOut"}
+ )}
+ hideLord(){
+ const t=this.lord;
+ t&&(this.lord=null,MR.to(t.scale,{
+ x:1.25,y:1.25,duration:.35,ease:"power2.in"}
+ ),MR.to(t,{
+ alpha:0,duration:.35,ease:"power2.in",onComplete:Qt(()=>{
+ MR.killTweensOf(t.children.map(t=>t.scale)),t.destroy({
+ children:!0}
+ )}
+ ,"onComplete")}
+ ))}
+ banner(t,i){
+ const s=new Ve,e=new QD(t,16757575,sD.DEFAULT_OUTLINE_FONT_OPTION_32),n=new QD(i,16773336,sD.DEFAULT_OUTLINE_FONT_OPTION_24);
+ return e.x=.5*-e.width,n.position.set(.5*-n.width,e.height+4),s.addChild(e,n),s.position.set(320,ES.SAFE_AREA_TOP+250),s.alpha=0,this.fx.addChild(s),new Promise(t=>{
+ MR.timeline({
+ onComplete:Qt(()=>{
+ s.destroy({
+ children:!0}
+ ),t()}
+ ,"onComplete")}
+ ).to(s,{
+ alpha:1,duration:.35}
+ ).fromTo(s.scale,{
+ x:1.2,y:1.2}
+ ,{
+ x:1,y:1,duration:.35,ease:"back.out(2)"}
+ ,"<").to(s,{
+ alpha:0,duration:.45}
+ ,"+=1.6")}
+ )}
+ castleGlow(i,s,e=!1){
+ const n=this.globalCenterOf(i),h=1.9*i.getBounds().height,r=new Ye(t.glowTexture());
+ if(r.anchor.set(.5),r.tint=s,r.blendMode="add",r.position.set(n.x,n.y+6),r.width=r.height=h,r.alpha=0,this.fx.addChild(r),MR.to(r,{
+ alpha:.85,duration:.35}
+ ),MR.to(r.scale,{
+ x:1.12*r.scale.x,y:1.12*r.scale.y,duration:.6,yoyo:!0,repeat:5,ease:"sine.inOut"}
+ ),MR.to(r,{
+ alpha:0,duration:.6,delay:3.4,onComplete:Qt(()=>r.destroy(),"onComplete")}
+ ),!e)return;
+ const o=(new ip).circle(0,0,40).stroke({
+ color:s,width:6,alpha:.9}
+ );
+ o.blendMode="add",o.position.set(n.x,n.y+6),this.fx.addChild(o),MR.to(o.scale,{
+ x:3,y:3,duration:.9,ease:"power2.out"}
+ ),MR.to(o,{
+ alpha:0,duration:.9,ease:"power2.in",onComplete:Qt(()=>o.destroy(),"onComplete")}
+ )}
+ static glowTexture(){
+ if(t.glow)return t.glow;
+ const i=document.createElement("canvas");
+ i.width=i.height=128;
+ const s=i.getContext("2d"),e=s.createRadialGradient(64,64,0,64,64,64);
+ return e.addColorStop(0,"rgba(255,255,255,0.75)"),e.addColorStop(.45,"rgba(255,255,255,0.35)"),e.addColorStop(1,"rgba(255,255,255,0)"),s.fillStyle=e,s.fillRect(0,0,128,128),t.glow=as.from(i),t.glow}
+ showTribeTag(t,i){
+ const s=this.rectOf(t),e=new Ve,n=new QD(Uzt(G8t.currentTribe),16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17),h=new QD(xdi(i),Pdi(i),sD.DEFAULT_OUTLINE_FONT_OPTION_32);
+ h.y=n.height,e.addChild(n,h),e.position.set(s.x+s.width+18,s.y+.5*(s.height-e.height)),this.addTag(e)}
+ showCastleTag(t,i){
+ const s=this.rectOf(t),e=Fzt(G8t.castleLabel,xdi(i)),n=new QD(e,Pdi(i),sD.DEFAULT_OUTLINE_FONT_OPTION_24);
+ n.position.set(s.x+.5*s.width-.5*n.width,s.y+s.height+14),this.addTag(n)}
+ addTag(t){
+ t.alpha=0,this.fx.addChild(t),this.tags.push(t),MR.to(t,{
+ alpha:1,duration:.3}
+ )}
+ clearTags(){
+ for(const t of this.tags)MR.to(t,{
+ alpha:0,duration:.2,onComplete:Qt(()=>t.destroy({
+ children:!0}
+ ),"onComplete")}
+ );
+ this.tags=[]}
+ }
+ ;
+ Qt(Wdi,"IntroOverlay"),Zt(Wdi,"TAP_DELAY_MS",350),Zt(Wdi,"DIALOGUE_SHEET","Dialogue"),Zt(Wdi,"LORD_IMAGE","images/dialogue/FL_SNE.png"),Zt(Wdi,"BOX_W",520),Zt(Wdi,"PORTRAIT_H",125),Zt(Wdi,"MESSAGE_STYLE",sD.DEFAULT_FONT_OPTION_18),Zt(Wdi,"HAND_TIP",{
+ x:29,y:41}
+ ),Zt(Wdi,"MESSAGE_W",480),Zt(Wdi,"lordTexture",null),Zt(Wdi,"glow",null);
BlurFilter 1 hunks, 271 statements
- \n",nf="\nin vec2 vTextureCoord;
+ \n";
+ const of={
+ 5:[.153388,.221461,.250301],7:[.071303,.131514,.189879,.214607],9:[.028532,.067234,.124009,.179044,.20236],11:[.0093,.028002,.065984,.121703,.175713,.198596],13:[.002406,.009255,.027867,.065666,.121117,.174868,.197641],15:[489e-6,.002403,.009246,.02784,.065602,.120999,.174697,.197448]}
+ ,af=["in vec2 vBlurTexCoords[%size%];
+ ","uniform sampler2D uTexture;
+ ","out vec4 finalColor;
+ ","void main(void)","{
+ ","    %blur%","}
+ "].join("\n");
+ function cf(t){
+ const i=of[t],s=i.length;
+ let e="";
+ for(let n=0;
+ n<t;
+ n++){
+ const h=n<s?n:t-n-1;
+ e+=`${
+ 0===n?"finalColor = ":"    + "}
+ ${
+ "texture(uTexture, vBlurTexCoords[%index%]) * %value%".replace("%index%",n.toString()).replace("%value%",i[h].toString())}
+ \n`}
+ return af.replace("%blur%",`${
+ e}
+ ;
+ `).replace("%size%",t.toString())}
+ function lf(t,i){
+ const s=Math.ceil(t/2);
+ let e,n="\n    in vec2 aPosition;
+ \n\n    uniform float uStrength;
+ \n\n    out vec2 vBlurTexCoords[%size%];
+ \n\n    uniform vec4 uInputSize;
+ \n    uniform vec4 uOutputFrame;
+ \n    uniform vec4 uOutputTexture;
+ \n\n    vec4 filterVertexPosition( void )\n{
+ \n    vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;
+ \n\n    position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;
+ \n    position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;
+ \n\n    return vec4(position, 0.0, 1.0);
+ \n}
+ \n\n    vec2 filterTextureCoord( void )\n    {
+ \n        return aPosition * (uOutputFrame.zw * uInputSize.zw);
+ \n    }
+ \n\n    void main(void)\n    {
+ \n        gl_Position = filterVertexPosition();
+ \n\n        float pixelStrength = uInputSize.%dimension% * uStrength;
+ \n\n        vec2 textureCoord = filterTextureCoord();
+ \n        %blur%\n    }
+ ",h="";
+ e=i?"vBlurTexCoords[%index%] =  textureCoord + vec2(%sampleIndex% * pixelStrength, 0.0);
+ ":"vBlurTexCoords[%index%] =  textureCoord + vec2(0.0, %sampleIndex% * pixelStrength);
+ ";
+ for(let r=0;
+ r<t;
+ r++){
+ let t=e.replace("%index%",r.toString());
+ t=t.replace("%sampleIndex%",r-(s-1)+".0"),h+=t,h+="\n"}
+ return n=n.replace("%blur%",h),n=n.replace("%size%",t.toString()),n=n.replace("%dimension%",i?"z":"w"),n}
+ function uf(t,i){
+ const s=lf(i,t),e=cf(i);
+ return Gh.from({
+ vertex:s,fragment:e,name:`blur-${
+ t?"horizontal":"vertical"}
+ -pass-filter`}
+ )}
+ Qt(cf,"generateBlurFragSource"),Qt(lf,"generateBlurVertSource"),Qt(uf,"generateBlurGlProgram");
+ var df="\n\nstruct GlobalFilterUniforms {
+ \n  uInputSize:vec4<f32>,\n  uInputPixel:vec4<f32>,\n  uInputClamp:vec4<f32>,\n  uOutputFrame:vec4<f32>,\n  uGlobalFrame:vec4<f32>,\n  uOutputTexture:vec4<f32>,\n}
+ ;
+ \n\nstruct BlurUniforms {
+ \n  uStrength:f32,\n}
+ ;
+ \n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
+ \n@group(0) @binding(1) var uTexture: texture_2d<f32>;
+ \n@group(0) @binding(2) var uSampler : sampler;
+ \n\n@group(1) @binding(0) var<uniform> blurUniforms : BlurUniforms;
+ \n\n\nstruct VSOutput {
+ \n    @builtin(position) position: vec4<f32>,\n    %blur-struct%\n  }
+ ;
+ \n\nfn filterVertexPosition(aPosition:vec2<f32>) -> vec4<f32>\n{
+ \n    var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;
+ \n\n    position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;
+ \n    position.y = position.y * (2.0*gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;
+ \n\n    return vec4(position, 0.0, 1.0);
+ \n}
+ \n\nfn filterTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{
+ \n    return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);
+ \n}
+ \n\nfn globalTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{
+ \n  return  (aPosition.xy / gfu.uGlobalFrame.zw) + (gfu.uGlobalFrame.xy / gfu.uGlobalFrame.zw);
+ \n}
+ \n\nfn getSize() -> vec2<f32>\n{
+ \n  return gfu.uGlobalFrame.zw;
+ \n}
+ \n\n\n@vertex\nfn mainVertex(\n  @location(0) aPosition : vec2<f32>,\n) -> VSOutput {
+ \n\n  let filteredCord = filterTextureCoord(aPosition);
+ \n\n  let pixelStrength = gfu.uInputSize.%dimension% * blurUniforms.uStrength;
+ \n\n  return VSOutput(\n   filterVertexPosition(aPosition),\n    %blur-vertex-out%\n  );
+ \n}
+ \n\n@fragment\nfn mainFragment(\n  @builtin(position) position: vec4<f32>,\n  %blur-fragment-in%\n) -> @location(0) vec4<f32> {
+ \n\n    var   finalColor = vec4(0.0);
+ \n\n    %blur-sampling%\n\n    return finalColor;
+ \n}
+ \n";
+ function ff(t,i){
+ const s=of[i],e=s.length,n=[],h=[],r=[];
+ for(let u=0;
+ u<i;
+ u++){
+ n[u]=`@location(${
+ u}
+ ) offset${
+ u}
+ : vec2<f32>,`,h[u]=t?`filteredCord + vec2(${
+ u-e+1}
+  * pixelStrength, 0.0),`:`filteredCord + vec2(0.0, ${
+ u-e+1}
+  * pixelStrength),`;
+ const o=s[u<e?u:i-u-1].toString();
+ r[u]=`finalColor += textureSample(uTexture, uSampler, offset${
+ u}
+ ) * ${
+ o}
+ ;
+ `}
+ const o=n.join("\n"),a=h.join("\n"),c=r.join("\n"),l=df.replace("%blur-struct%",o).replace("%blur-vertex-out%",a).replace("%blur-fragment-in%",o).replace("%blur-sampling%",c).replace("%dimension%",t?"z":"w");
+ return Qh.from({
+ vertex:{
+ source:l,entryPoint:"mainVertex"}
+ ,fragment:{
+ source:l,entryPoint:"mainFragment"}
+ }
+ )}
+ Qt(ff,"generateBlurProgram");
+ const pf=(Qt(T=class extends fr{
+ constructor(t){
+ super({
+ glProgram:uf((t={
+ ...T.defaultOptions,...t}
+ ).horizontal,t.kernelSize),gpuProgram:ff(t.horizontal,t.kernelSize),resources:{
+ blurUniforms:{
+ uStrength:{
+ value:0,type:"f32"}
+ }
+ }
+ ,...t}
+ ),this.horizontal=t.horizontal,this.legacy=t.legacy??!1,this._quality=0,this.quality=t.quality,this.blur=t.strength,this._blurUniforms=this.resources.blurUniforms,this._uniforms=this._blurUniforms.uniforms}
+ apply(t,i,s,e){
+ this.legacy?this._applyLegacy(t,i,s,e):this._applyOptimized(t,i,s,e)}
+ _applyLegacy(t,i,s,e){
+ if(this._uniforms.uStrength=this.strength/this.passes,1===this.passes)t.applyFilter(this,i,s,e);
+ else{
+ const n=De.getSameSizeTexture(i);
+ let h=i,r=n;
+ this._state.blend=!1;
+ const o=t.renderer.type===rr.WEBGPU;
+ for(let i=0;
+ i<this.passes-1;
+ i++){
+ t.applyFilter(this,h,r,0===i||o);
+ const s=r;
+ r=h,h=s}
+ this._state.blend=!0,t.applyFilter(this,h,s,e),De.returnTexture(n)}
+ }
+ _applyOptimized(t,i,s,e){
+ if(this._uniforms.uStrength=this._calculateInitialStrength(),1===this.passes)t.applyFilter(this,i,s,e);
+ else{
+ const n=De.getSameSizeTexture(i);
+ let h=i,r=n;
+ this._state.blend=!1;
+ const o=t.renderer,a=o.type===rr.WEBGPU,c=a?o.renderPipes.uniformBatch:null;
+ for(let i=0;
+ i<this.passes-1;
+ i++){
+ c&&this.groups[1].setResource(c.getUboResource(this._blurUniforms),0),t.applyFilter(this,h,r,a);
+ const i=r;
+ r=h,h=i,this._uniforms.uStrength*=.5}
+ c&&this.groups[1].setResource(c.getUboResource(this._blurUniforms),0),this._state.blend=!0,t.applyFilter(this,h,s,e),De.returnTexture(n)}
+ }
+ _calculateInitialStrength(){
+ let t=1,i=.5;
+ for(let s=1;
+ s<this.passes;
+ s++)t+=i*i,i*=.5;
+ return this.strength/Math.sqrt(t)}
+ get blur(){
+ return this.strength}
+ set blur(t){
+ this.padding=1+2*Math.abs(t),this.strength=t}
+ get quality(){
+ return this._quality}
+ set quality(t){
+ this._quality=t,this.passes=t}
+ }
+ ,"_BlurFilterPass"),T);
+ pf.defaultOptions={
+ strength:8,quality:4,kernelSize:5,legacy:!1}
+ ;
+ let gf=pf;
+ const wf=class extends fr{
+ constructor(...t){
+ let i=t[0]??{
+ }
+ ;
+ "number"==typeof i&&(Ki(Wi,"BlurFilter constructor params are now options object. See params: {
+  strength, quality, resolution, kernelSize }
+ "),i={
+ strength:i}
+ ,void 0!==t[1]&&(i.quality=t[1]),void 0!==t[2]&&(i.resolution=t[2]||"inherit"),void 0!==t[3]&&(i.kernelSize=t[3])),i={
+ ...gf.defaultOptions,...i}
+ ;
+ const{
+ strength:s,strengthX:e,strengthY:n,quality:h,...r}
+ =i;
+ super({
+ ...r,compatibleRenderers:rr.BOTH,resources:{
+ }
+ }
+ ),this._repeatEdgePixels=!1,this.blurXFilter=new gf({
+ horizontal:!0,...i}
+ ),this.blurYFilter=new gf({
+ horizontal:!1,...i}
+ ),this.quality=h,this.strengthX=e??s,this.strengthY=n??s,this.repeatEdgePixels=!1}
+ apply(t,i,s,e){
+ const n=Math.abs(this.blurXFilter.strength),h=Math.abs(this.blurYFilter.strength);
+ if(n&&h){
+ const n=De.getSameSizeTexture(i);
+ this.blurXFilter.blendMode="normal",this.blurXFilter.apply(t,i,n,!0),this.blurYFilter.blendMode=this.blendMode,this.blurYFilter.apply(t,n,s,e),De.returnTexture(n)}
+ else h?(this.blurYFilter.blendMode=this.blendMode,this.blurYFilter.apply(t,i,s,e)):(this.blurXFilter.blendMode=this.blendMode,this.blurXFilter.apply(t,i,s,e))}
+ updatePadding(){
+ this._repeatEdgePixels?this.padding=0:this.padding=2*Math.max(Math.abs(this.blurXFilter.blur),Math.abs(this.blurYFilter.blur))}
+ get strength(){
+ if(this.strengthX!==this.strengthY)throw new Error("BlurFilter's strengthX and strengthY are different");
+ return this.strengthX}
+ set strength(t){
+ this.blurXFilter.blur=this.blurYFilter.blur=t,this.updatePadding()}
+ get quality(){
+ return this.blurXFilter.quality}
+ set quality(t){
+ this.blurXFilter.quality=this.blurYFilter.quality=t}
+ get strengthX(){
+ return this.blurXFilter.blur}
+ set strengthX(t){
+ this.blurXFilter.blur=t,this.updatePadding()}
+ get strengthY(){
+ return this.blurYFilter.blur}
+ set strengthY(t){
+ this.blurYFilter.blur=t,this.updatePadding()}
+ get blur(){
+ return Ki("8.3.0","BlurFilter.blur is deprecated, please use BlurFilter.strength instead."),this.strength}
+ set blur(t){
+ Ki("8.3.0","BlurFilter.blur is deprecated, please use BlurFilter.strength instead."),this.strength=t}
+ get blurX(){
+ return Ki("8.3.0","BlurFilter.blurX is deprecated, please use BlurFilter.strengthX instead."),this.strengthX}
+ set blurX(t){
+ Ki("8.3.0","BlurFilter.blurX is deprecated, please use BlurFilter.strengthX instead."),this.strengthX=t}
+ get blurY(){
+ return Ki("8.3.0","BlurFilter.blurY is deprecated, please use BlurFilter.strengthY instead."),this.strengthY}
+ set blurY(t){
+ Ki("8.3.0","BlurFilter.blurY is deprecated, please use BlurFilter.strengthY instead."),this.strengthY=t}
+ get repeatEdgePixels(){
+ return this._repeatEdgePixels}
+ set repeatEdgePixels(t){
+ this._repeatEdgePixels=t,this.updatePadding()}
+ }
+ ;
+ Qt(wf,"BlurFilter");
+ let mf=wf;
+ mf.defaultOptions={
+ strength:8,quality:4,kernelSize:5,legacy:!1}
+ ;
+ var vf="\nin vec2 vTextureCoord;
EventScheduleDayCell 1 hunks, 242 statements
+ super(),Zt(this,"bg"),Zt(this,"bgOn"),Zt(this,"lineL"),Zt(this,"lineR"),this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","UI_Toast_Bg"),leftWidth:6,topHeight:6,rightWidth:6,bottomHeight:6}
+ ),this.bg.width=77,this.bg.height=65,this.addChild(this.bg),this.bgOn=new eE({
+ texture:kS.getTexture("UI_Ekkorr","whiteRect"),leftWidth:6,topHeight:6,rightWidth:6,bottomHeight:6}
+ ),this.bgOn.visible=!1,this.bgOn.tint=4075559,this.bgOn.x=1,this.bgOn.width=this.bg.width-2,this.bgOn.height=this.bg.height,this.addChild(this.bgOn),this.lineL=new Ye(kS.getTexture("UI_Ekkorr","whiteRect")),this.lineL.tint=3814965,this.lineL.width=1,this.lineL.height=55,this.lineL.y=10,this.addChild(this.lineL),this.lineR=new Ye(kS.getTexture("UI_Ekkorr","whiteRect")),this.lineR.visible=!1,this.lineR.tint=3814965,this.lineR.width=1,this.lineR.height=this.lineL.height,this.lineR.x=this.bg.width,this.lineR.y=this.lineL.y,this.addChild(this.lineR)}
+ get width(){
+ return this.bg.width}
+ get height(){
+ return this.bg.height}
+ showRightLine(){
+ this.lineR.visible=!0}
+ hideRightLine(){
+ this.lineR.visible=!1}
+ setHeaderLayout(){
+ this.bg.height=65,this.bgOn.height=this.bg.height+200,this.lineL.y=10,this.lineL.height=255,this.lineR.y=this.lineL.y,this.lineR.height=this.lineL.height}
+ setItemRenderLayout(){
+ this.bg.height=77,this.bgOn.height=this.bg.height,this.lineL.y=0,this.lineL.height=this.bg.height,this.lineR.y=this.lineL.y,this.lineR.height=this.lineL.height}
+ setToday(t){
+ this.bgOn.visible=t}
+ }
+ ;
+ Qt(Cii,"EventScheduleDayCell");
+ let Oii=Cii;
+ const Iii=class extends Ve{
+ constructor(){
+ super(),Zt(this,"dayTxts"),Zt(this,"dayLbls"),Zt(this,"dayBgs"),this.dayBgs=[],this.dayTxts=[],this.dayLbls=[];
+ const t=sD.DEFAULT_FONT_OPTION_17;
+ t.fill=13413260;
+ const i=sD.DEFAULT_FONT_OPTION_15;
+ let s,e,n;
+ i.fill=14988422;
+ for(let h=0;
+ h<7;
+ ++h)n=new Oii,n.setHeaderLayout(),n.x=h*n.width,this.addChild(n),this.dayBgs.push(n),s=new QD("월",t.fill,t),s.x=n.x+.5*(n.width-s.width)+1,s.y=8,this.addChild(s),this.dayTxts.push(s),e=new QD("00.00",i.fill,i),e.x=n.x+.5*(n.width-e.width)+1,e.y=s.y+s.height-1,this.addChild(e),this.dayLbls.push(e);
+ this.dayBgs[this.dayBgs.length-1].showRightLine()}
+ get height(){
+ return this.dayBgs[0].height}
+ setData(){
+ const t=new Date(DR.time),i=t.getUTCDay(),s=RB.getText("COMMON_576","Sun|Mon|Tue|Wed|Thu|Fri|Sat").split("|");
+ let e,n,h,r;
+ t.setUTCDate(t.getUTCDate()-2);
+ const o=this.dayBgs.length;
+ for(let a=0;
+ a<o;
+ ++a)e=t.getUTCDay(),r=this.dayBgs[a],e===i?r.setToday(!0):r.setToday(!1),n=this.dayTxts[a],n.text=s[e],n.x=r.x+.5*(r.width-n.width)+1,h=this.dayLbls[a],h.text=i$.displayDate2(t,!0,"."),h.x=r.x+.5*(r.width-h.width)+1,t.setUTCDate(t.getUTCDate()+1)}
+ }
+ ;
+ Qt(Iii,"EventScheduleHeader");
+ let kii=Iii;
+ const Rii=class t extends uB{
+ constructor(){
+ super(),Zt(this,"lblName"),Zt(this,"lblMessage"),Zt(this,"btnMove"),Zt(this,"btnConfirm"),Zt(this,"data"),this.width=540,this.outSideClickHide=!0,this.btnClose.removeFromParent();
+ const t=sD.DEFAULT_FONT_OPTION_18;
+ t.fill=13413260;
+ const i=sD.DEFAULT_FONT_OPTION_17;
+ i.fill=16777215,this.lblName=new QD("AAA",t.fill,t),this.addChild(this.lblName),sD.setLabelWrapWidth(this.lblName,this.width-80),this.lblMessage=new QD("00.00 ~ 00.00",i.fill,i),this.addChild(this.lblMessage),sD.setLabelWrapWidth(this.lblMessage,this.width-80),this.btnMove=new hB(RB.getText("COMMON_64","바로가기")),this.btnMove.visible=!1,this.addChild(this.btnMove),this.btnMove.onClick=this.onMoveBtnClick.bind(this),this.btnConfirm=new sKt(RB.getText("COMMON_1","확인")),this.btnConfirm.visible=!1,this.addChild(this.btnConfirm),this.btnConfirm.onClick=()=>{
+ this.hide()}
+ ,this.updateLayout()}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ updateLayout(){
+ this.lblName.x=.5*(this.width-this.lblName.width),this.lblName.y=90,this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=this.lblName.y+this.lblName.height+10;
+ let t=this.lblName.y+this.lblName.height+30;
+ this.lblMessage.visible&&(t=this.lblMessage.y+this.lblMessage.height+30),this.btnMove.x=.5*(this.width-this.btnMove.width),this.btnMove.y=t,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=this.btnMove.y,this.height=this.btnConfirm.y+this.btnConfirm.height+50}
+ setData(t){
+ this.data=t;
+ const i=this.data;
+ if(!i)return;
+ this.title=RB.getText("COMMON_4","알림"),this.lblName.text=i.displayName;
+ const s=new Date(DR.time);
+ s.setUTCHours(0,0,0,0);
+ let e=!1;
+ if(i.startTime&&i.endTime){
+ this.lblMessage.visible=!0;
+ const t=new Date(i.startTime),n=new Date(i.endTime);
+ t.getUTCMonth()===n.getUTCMonth()&&t.getUTCDate()===n.getUTCDate()?this.lblMessage.text=i$.displayDate2(t,!0,"."):this.lblMessage.text=i$.displayDate2(t,!0,".")+" ~ "+i$.displayDate2(n,!0,"."),(s.getTime()>=t.getTime()||J4t(s,t))&&(s.getTime()<n.getTime()||J4t(s,n))&&(e=!0)}
+ else{
+ const t=JSON.parse(i.action);
+ if("day"in t){
+ this.lblMessage.visible=!0;
+ const i=new Date(DR.time);
+ i.setUTCHours(0,0,0,0),i.setUTCDate(i.getUTCDate()-2);
+ const n=q4t(t.day.toUpperCase());
+ for(let t=0;
+ t<7&&i.getUTCDay()!==n;
+ ++t)i.setUTCDate(i.getUTCDate()+1);
+ this.lblMessage.text=i$.displayDate2(i,!0,"."),J4t(i,s)&&(e=!0)}
+ else this.lblMessage.visible=!1}
+ "LOGIN"!==i.type&&"MEDAL"!==i.type&&"GEM_SPEND"!==i.type||(e=!1),e?(this.btnMove.visible=!0,this.btnConfirm.visible=!1):(this.btnMove.visible=!1,this.btnConfirm.visible=!0),this.updateLayout()}
+ async onMoveBtnClick(){
+ if(!this.data)return;
+ if(this.hideImmediately(),"PAYMENT"===this.data.type&&EG.maxWave<10&&EG.wave<10)return void vH.getInstance().showMessage(RB.getValueReplace("GAME_34","##",10,"10 wave 이상에서 개방됩니다."));
+ let t=-1;
+ switch(this.data.type){
+ case"TOWER":t=50;
+ break;
+ case"MINE":t=200;
+ break;
+ case"PET_ASSISTANT":t=Zci.UNLOCK_MAX_WAVE}
+ if(-1!==t&&EG.maxWave<t){
+ const i=RB.getValueReplace("GAME_633","##",t,`최고 WAVE ${
+ t}
+  이상에서 환생 후 이용가능합니다.`);
+ return void vH.getInstance().showMessage(i)}
+ const{
+ EventSchedulePopup:i}
+ =await ei(async()=>{
+ const{
+ EventSchedulePopup:t}
+ =await Promise.resolve().then(()=>Uii);
+ return{
+ EventSchedulePopup:t}
+ }
+ ,void 0);
+ switch(i.getInstance().hideImmediately(),this.data.type){
+ case"PAYMENT":x4t.getInstance().goPaymentShop(0);
+ break;
+ case"TOWER":x4t.getInstance().goTower();
+ break;
+ case"HERORESET":x4t.getInstance().goHeroHire();
+ break;
+ case"PET_ASSISTANT":x4t.getInstance().goSecretaryGuide();
+ break;
+ case"MINE":x4t.getInstance().goMine();
+ break;
+ case"MINI_ASCENT":x4t.getInstance().goAscent();
+ break;
+ case"EVENT_ATTEND":x4t.getInstance().goAttendEvent();
+ break;
+ case"GUILDWAR_TOURNAMENT":x4t.getInstance().goGuildWarTournament()}
+ }
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Qt(Rii,"EventScheduleDetailPopup"),Zt(Rii,"instance");
+ let xii=Rii;
+ const Pii=class extends Ve{
+ constructor(){
+ super(),Zt(this,"bg"),Zt(this,"icon"),Zt(this,"lblName"),Zt(this,"lblDate"),Zt(this,"container"),Zt(this,"minWidth",77),Zt(this,"data"),this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.bg.width=77,this.addChild(this.bg),this.icon=new Ye(kS.getTexture("UI_Ekkorr","Icon_Event_Schedule")),this.icon.x=5,this.icon.y=.5*(this.bg.height-this.icon.height),this.addChild(this.icon),this.container=new Ve,this.addChild(this.container);
+ const t=sD.DEFAULT_FONT_OPTION_16;
+ t.fill=15060399,t.lineHeight=0;
+ const i=sD.DEFAULT_FONT_OPTION_15;
+ i.fill=16750899,i.fontSize=14,this.lblName=new QD("이벤트",t.fill,t),this.container.addChild(this.lblName),this.lblDate=new QD("00.00~00.00",i.fill,i),this.container.addChild(this.lblDate),this.updateLayout()}
+ updateLayout(){
+ if(this.icon.visible){
+ const t=this.icon.x+this.icon.width;
+ sD.setLabelWrapWidth(this.lblName,this.bg.width-t),this.container.x=t}
+ else sD.setLabelWrapWidth(this.lblName,this.bg.width),this.container.x=.5*(this.bg.width-this.container.width);
+ this.lblDate.visible&&(this.lblDate.y=this.lblName.y+this.lblName.height);
+ let t=.5*(this.bg.height-this.container.height);
+ t<0&&(t=0),this.container.y=t}
+ get width(){
+ return this.bg.width}
+ set width(t){
+ t<this.minWidth&&(t=this.minWidth),this.bg.width=t,t>this.minWidth?this.icon.visible=!0:this.icon.visible=!1,this.updateLayout()}
+ get height(){
+ return this.bg.height}
+ setData(t){
+ this.data=t;
+ const i=t;
+ if(this.lblName.text=i.displayName,i.startTime&&i.endTime){
+ this.lblDate.visible=!0;
+ const t=new Date(i.startTime),s=new Date(i.endTime);
+ t.getUTCMonth()===s.getUTCMonth()&&t.getUTCDate()===s.getUTCDate()?this.lblDate.text=i$.displayDate2(t,!0,"."):this.lblDate.text=i$.displayDate2(t,!0,".")+"~"+i$.displayDate2(s,!0,".")}
+ else this.lblDate.visible=!1;
+ this.updateLayout()}
+ getData(){
+ return this.data}
+ }
+ ;
+ Qt(Pii,"EventScheduleLabel");
+ let Nii=Pii;
+ const Lii=class extends OR{
+ constructor(){
+ let t;
+ super(),Zt(this,"dayBgs"),Zt(this,"eventLabel"),this.dayBgs=[];
+ for(let i=0;
+ i<7;
+ ++i)t=new Oii,t.setItemRenderLayout(),t.x=i*t.width,this.addChild(t),this.dayBgs.push(t);
+ this.dayBgs[this.dayBgs.length-1].showRightLine(),this.eventLabel=new Nii,this.addChild(this.eventLabel),this.eventLabel.eventMode="dynamic",this.eventLabel.on("pointertap",this.onEventLabelTap,this)}
+ get height(){
+ return 77}
+ setData(t){
+ const i=t,s=new Date(DR.time);
+ s.setUTCHours(0,0,0,0);
+ const e=s.getUTCDay();
+ let n;
+ s.setUTCDate(s.getUTCDate()-2);
+ const h=[];
+ let r;
+ const o=this.dayBgs.length;
+ for(let l=0;
+ l<o;
+ ++l)n=s.getUTCDay(),h.push(X4t(n)),r=this.dayBgs[l],n===e?r.setToday(!0):r.setToday(!1),s.setUTCDate(s.getUTCDate()+1);
+ let a=0;
+ if(i.startTime&&i.endTime){
+ const t=new Date(i.startTime),e=new Date(i.endTime);
+ s.setTime(DR.time),s.setUTCHours(0,0,0,0),s.setUTCDate(s.getUTCDate()-2);
+ const n=this.dayBgs.length;
+ for(let i=0;
+ i<n;
+ ++i)(s.getTime()>=t.getTime()||J4t(s,t))&&(s.getTime()<=e.getTime()||J4t(s,e))&&a++,J4t(s,t)&&(this.eventLabel.x=this.dayBgs[i].x),s.setUTCDate(s.getUTCDate()+1)}
+ else try{
+ const t=JSON.parse(i.action);
+ if("day"in t){
+ const i=h.indexOf(t.day.toUpperCase());
+ -1!==i&&(this.eventLabel.x=this.dayBgs[i].x)}
+ else a=this.dayBgs.length}
+ catch(c){
+ }
+ this.eventLabel.setData(i),this.eventLabel.width=this.dayBgs[0].width*a}
+ onEventLabelTap(t){
+ xii.getInstance().setData(this.eventLabel.getData()),xii.getInstance().show()}
+ }
+ ;
+ Qt(Lii,"EventScheduleItemRenderer");
+ let Dii=Lii;
+ const Gii=class t extends uB{
+ constructor(){
+ super(),Zt(this,"header"),Zt(this,"list"),Zt(this,"currentDate"),Zt(this,"currentDateValue",-1),Zt(this,"needToReload",!1),this.width=600,this.height=880,this.outSideClickHide=!0,this.title=RB.getText("GAME_1887","이벤트 일정"),this.header=new kii,this.header.x=.5*(this.width-this.header.width)+1,this.header.y=80,this.addChild(this.header),this.list=new b4(Dii,540,700,0),this.list.x=this.header.x,this.list.y=this.header.y+this.header.height,this.addChild(this.list)}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ async setData(){
+ let t=!1;
+ if(this.currentDate&&-1!=this.currentDateValue?this.currentDate.getUTCDate()!=this.currentDateValue&&(t=!0,this.currentDateValue=this.currentDate.getUTCDate()):(t=!0,this.currentDate||(this.currentDate=new Date(DR.time)),this.currentDateValue=this.currentDate.getUTCDate()),this.needToReload&&(t=!0),t){
+ const t=await ZL.getInstance().user.getEventSchedule();
+ if(0==t.success)return void bB.getInstance().showError(t);
+ GB.setEventScheduleData(t.body)}
+ this.title=RB.getText("GAME_1887","이벤트 일정"),this.header.setData(),this.list.dataProvider=[...GB.eventScheduled],t&&this.list.scrollTo(0)}
+ }
+ ;
+ Qt(Gii,"EventSchedulePopup"),Zt(Gii,"instance");
+ let Bii=Gii;
+ const Uii=Object.freeze(Object.defineProperty({
+ __proto__:null,EventSchedulePopup:Bii}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Fii=class extends Pqt{
+ constructor(){
ShortcutManager 6 hunks, 228 statements
- 0==zqt.getInstance().isHeroView()&&await qci.getInstance().onMenuClickByIndex(1),0==zqt.getInstance().isHeroSubView()&&(gJt.getInstance().updateLanguage(),wJt.getInstance().currentSubView=gJt.getInstance())}
+ if(0==UXt.getInstance().isHeroView()&&await Eui.getInstance().onMenuClickByIndex(1),0==UXt.getInstance().isHeroSubView()){
+ const{
+ HeroView:t}
+ =await ei(async()=>{
+ const{
+ HeroView:t}
+ =await Promise.resolve().then(()=>wQt);
+ return{
+ HeroView:t}
+ }
+ ,void 0),{
+ HeroSubView:i}
+ =await ei(async()=>{
+ const{
+ HeroSubView:t}
+ =await Promise.resolve().then(()=>fQt);
+ return{
+ HeroSubView:t}
+ }
+ ,void 0);
+ i.getInstance().updateLanguage(),t.getInstance().currentSubView=i.getInstance()}
+ }
- await this.goHero(),gJt.getInstance().setPresetBarVisible(!0)}
+ if(await this.goHero(),1==UXt.getInstance().isHeroSubView()){
+ const{
+ HeroSubView:t}
+ =await ei(async()=>{
+ const{
+ HeroSubView:t}
+ =await Promise.resolve().then(()=>fQt);
+ return{
+ HeroSubView:t}
+ }
+ ,void 0);
+ t.getInstance().setPresetBarVisible(!0)}
+ }
+ async goHeroHire(){
+ if(await this.goHero(),0==UXt.getInstance().isHeroHireSubView()){
+ const{
+ HeroView:t}
+ =await ei(async()=>{
+ const{
+ HeroView:t}
+ =await Promise.resolve().then(()=>wQt);
+ return{
+ HeroView:t}
+ }
+ ,void 0),{
+ HeroHireSubView:i}
+ =await ei(async()=>{
+ const{
+ HeroHireSubView:t}
+ =await Promise.resolve().then(()=>aQt);
+ return{
+ HeroHireSubView:t}
+ }
+ ,void 0);
+ i.getInstance().setData(),t.getInstance().currentSubView=i.getInstance()}
+ }
+ async goCastle(){
+ if(0==UXt.getInstance().isCastleView()&&await Eui.getInstance().onMenuClickByIndex(2),0==UXt.getInstance().isCastleSubView()){
+ const{
+ CastleView:t}
+ =await ei(async()=>{
+ const{
+ CastleView:t}
+ =await Promise.resolve().then(()=>Qli);
+ return{
+ CastleView:t}
+ }
+ ,void 0),{
+ CastleSubView:i}
+ =await ei(async()=>{
+ const{
+ CastleSubView:t}
+ =await Promise.resolve().then(()=>qli);
+ return{
+ CastleSubView:t}
+ }
+ ,void 0);
+ i.getInstance().setData(),t.getInstance().currentSubView=i.getInstance()}
+ }
+ async goSecretaryGuide(){
+ if(await this.goCastle(),0==UXt.getInstance().isCastleCitadelSubView()){
+ const{
+ CastleView:t}
+ =await ei(async()=>{
+ const{
+ CastleView:t}
+ =await Promise.resolve().then(()=>Qli);
+ return{
+ CastleView:t}
+ }
+ ,void 0),{
+ CitadelSubView:i}
+ =await ei(async()=>{
+ const{
+ CitadelSubView:t}
+ =await Promise.resolve().then(()=>Vli);
+ return{
+ CitadelSubView:t}
+ }
+ ,void 0);
+ i.getInstance().setData(),t.getInstance().currentSubView=i.getInstance()}
+ const{
+ SecretaryGuidePopup:t}
+ =await ei(async()=>{
+ const{
+ SecretaryGuidePopup:t}
+ =await Promise.resolve().then(()=>Gzt);
+ return{
+ SecretaryGuidePopup:t}
+ }
+ ,void 0);
+ t.getInstance().showGuide()}
- 0==zqt.getInstance().isTreasureView()&&await qci.getInstance().onMenuClickByIndex(3),0==zqt.getInstance().isTreasureSubView()&&(s7t.getInstance().updateLanguage(),UQt.getInstance().currentSubView=s7t.getInstance())}
+ if(0==UXt.getInstance().isTreasureView()&&await Eui.getInstance().onMenuClickByIndex(3),0==UXt.getInstance().isTreasureSubView()){
+ const{
+ TreasureView:t}
+ =await ei(async()=>{
+ const{
+ TreasureView:t}
+ =await Promise.resolve().then(()=>UZt);
+ return{
+ TreasureView:t}
+ }
+ ,void 0),{
+ TreasureSubView:i}
+ =await ei(async()=>{
+ const{
+ TreasureSubView:t}
+ =await Promise.resolve().then(()=>N9t);
+ return{
+ TreasureSubView:t}
+ }
+ ,void 0);
+ i.getInstance().updateLanguage(),t.getInstance().currentSubView=i.getInstance()}
+ }
- await this.goTreasure(),s7t.getInstance().setPresetBarVisible(!0)}
+ if(await this.goTreasure(),1==UXt.getInstance().isTreasureSubView()){
+ const{
+ TreasureSubView:t}
+ =await ei(async()=>{
+ const{
+ TreasureSubView:t}
+ =await Promise.resolve().then(()=>N9t);
+ return{
+ TreasureSubView:t}
+ }
+ ,void 0);
+ t.getInstance().setPresetBarVisible(!0)}
+ }
- goPetMenuAt(t){
- TF.getInstance().children.length>0&&(TF.getInstance().removeChildren(),GH.ensureMounted(LYt.getInstance())),zqt.getInstance().isPetPopup()||Qoi.getInstance().executeOnPetBtnClick2(),r6t.getInstance().onMenuClick(t)}
+ async goPetMenuAt(t){
+ if(b$.getInstance().children.length>0&&(b$.getInstance().removeChildren(),xH.ensureMounted(Cqt.getInstance())),!UXt.getInstance().isPetPopup()){
+ const{
+ RightMenu:t}
+ =await ei(async()=>{
+ const{
+ RightMenu:t}
+ =await Promise.resolve().then(()=>Aci);
+ return{
+ RightMenu:t}
+ }
+ ,void 0);
+ t.getInstance().executeOnPetBtnClick2()}
+ _4t.getInstance().onMenuClick(t)}
- goInventory(){
- TF.getInstance().children.length>0&&(TF.getInstance().removeChildren(),GH.ensureMounted(LYt.getInstance())),zqt.getInstance().isInventoryPopup()||Qoi.getInstance().executeOnInventoryBtnClick()}
+ async goInventory(){
+ if(b$.getInstance().children.length>0&&(b$.getInstance().removeChildren(),xH.ensureMounted(Cqt.getInstance())),UXt.getInstance().isInventoryPopup())return;
+ const{
+ RightMenu:t}
+ =await ei(async()=>{
+ const{
+ RightMenu:t}
+ =await Promise.resolve().then(()=>Aci);
+ return{
+ RightMenu:t}
+ }
+ ,void 0);
+ t.getInstance().executeOnInventoryBtnClick()}
+ async goGuildWarTournament(){
+ if(xG.getInstance().children.length>0&&(xG.getInstance().removeChildren(),xH.ensureMounted(Cqt.getInstance())),UXt.getInstance().isGuildWarTournamentPopup())return;
+ const{
+ RightMenu:t}
+ =await ei(async()=>{
+ const{
+ RightMenu:t}
+ =await Promise.resolve().then(()=>Aci);
+ return{
+ RightMenu:t}
+ }
+ ,void 0);
+ t.getInstance().executeOnTournamentBtnClick()}
+ async goMine(){
+ if(EG.maxWave<200){
+ const t=RB.getValueReplace("GAME_633","##",200,"최고 WAVE 200 이상에서 환생 후 이용가능합니다.");
+ return void vH.getInstance().showMessage(t)}
+ const{
+ MinePopup:t}
+ =await ei(async()=>{
+ const{
+ MinePopup:t}
+ =await Promise.resolve().then(()=>v8t);
+ return{
+ MinePopup:t}
+ }
+ ,void 0);
+ await t.getInstance().show()}
+ async goAscent(){
+ const{
+ EventHubPopup:t}
+ =await ei(async()=>{
+ const{
+ EventHubPopup:t}
+ =await Promise.resolve().then(()=>O_i);
+ return{
+ EventHubPopup:t}
+ }
+ ,void 0);
+ t.getInstance().execOpenAscent()}
+ async goAttendEvent(){
+ const{
+ AttendEventPopup:t}
+ =await ei(async()=>{
+ const{
+ AttendEventPopup:t}
+ =await Promise.resolve().then(()=>U_i);
+ return{
+ AttendEventPopup:t}
+ }
+ ,void 0);
+ await t.getInstance().setData(),t.getInstance().show()}
FireStormFx 1 hunks, 215 statements
- super(),Xt(this,"cracks",new Ff),Xt(this,"ring",new Ff),Xt(this,"flash",new Ff),Xt(this,"crackPaths",[]),Xt(this,"playing",!1),this.eventMode="none",this.visible=!1,this.cracks.blendMode="add",this.ring.blendMode="add",this.ring.circle(0,0,100).stroke({
- width:14,color:t.COLOR}
- ),this.ring.position.set(t.CENTER,t.CENTER),this.flash.rect(0,0,t.FIELD,t.FIELD).fill(15269872),this.addChild(this.cracks,this.ring,this.flash)}
- play(t){
- if(this.playing)return void t();
+ super(),this.eventMode="none"}
+ async play(i,s){
+ await pF.preload().catch(()=>{
+ }
+ );
+ let e=[];
+ try{
+ e=kS.getTextures(pF.SHEET,"fla_",!0)??[]}
+ catch{
+ e=[]}
+ const n=t.FIELD,h=t.C,r=t.glow(),o=new Ve;
+ this.addChild(o);
+ const a=new Ye(t.vignette());
+ a.width=a.height=n,a.alpha=0;
+ const c=new Ve,l=new Ve,u=this.buildSpots(e,r,c,l),d=new ip;
+ d.blendMode="add";
+ const f=new Ye(r);
+ f.anchor.set(.5),f.tint=16747056,f.blendMode="add",f.position.set(h,h+10),f.width=f.height=60,f.alpha=0;
+ const p=new Ve,g=new Ve,w=(new ip).rect(0,0,n,n).fill(16734736);
+ w.alpha=0;
+ const m=(new ip).rect(0,0,n,n).fill(16773848);
+ m.alpha=0;
+ const v=new Ve;
+ o.addChild(a,c,l,f,d,p,g,w,v,m);
+ const _=[this.buildRing(t.RING1,2.8,4.6,e,r,p,g),this.buildRing(t.RING2,2.2,3.6,e,r,p,g),this.buildRing(t.RING3,1.8,3,e,r,p,g)],M=[{
+ r:20,a:0}
+ ,{
+ r:0,a:0}
+ ,{
+ r:0,a:0}
+ ],b=Qt(()=>{
+ _.forEach((t,i)=>{
+ const s=M[i];
+ for(const e of t){
+ const t=s.r*e.radiusMul;
+ e.glow.position.set(h+Math.cos(e.angle)*t,h+Math.sin(e.angle)*t*.92+e.dy),e.flame.position.set(e.glow.x,e.glow.y+14),e.glow.alpha=.85*s.a,e.flame.alpha=s.a}
+ }
+ ),d.clear(),M[0].a>0&&d.circle(h,h,Math.max(1,.97*M[0].r)).stroke({
+ width:46,color:16738840,alpha:.45*M[0].a}
+ )}
+ ,"layoutRings");
+ b();
+ const y={
+ x:s.x,y:s.y}
+ ,E={
+ amp:0}
+ ,A=Qt(()=>{
+ s.x=y.x+2*(Math.random()-.5)*E.amp,s.y=y.y+2*(Math.random()-.5)*E.amp}
+ ,"onShake");
+ vn.shared.add(A);
+ const S={
+ t:0}
+ ,T=Qt(()=>{
+ for(const t of u){
+ const i=Math.max(0,Math.min(1,(S.t-t.at)/.22));
+ t.flame.scale.set(t.scale*i*t.flip,t.scale*i),t.glow.alpha=.75*i,t.glow.width=t.glow.height=70*t.scale*.6*(.6+.4*i)}
+ }
+ ,"layoutSpots");
+ T(),qG.getInstance().playSFX(qG.SFX_STONE_BREAK),await new Promise(t=>{
+ const i=MR.timeline({
+ onComplete:t}
+ );
+ i.to(S,{
+ t:1.3,duration:1.1,ease:"none",onUpdate:T}
+ ,0),i.to(a,{
+ alpha:.85,duration:1.2,ease:"power1.in"}
+ ,0),i.to(E,{
+ amp:3.5,duration:1,ease:"power1.in"}
+ ,0),i.to(f,{
+ alpha:1,width:230,height:230,duration:1,ease:"power2.in"}
+ ,0),i.call(()=>qG.getInstance().playSFX(qG.SFX_DOOM_BRINGER),[],.95),i.to(E,{
+ amp:9,duration:.3,ease:"power2.out"}
+ ,1),i.to(M[0],{
+ a:1,duration:.15}
+ ,1),i.to(M[0],{
+ r:470,duration:.75,ease:"power2.in",onUpdate:b}
+ ,1),i.to(M[1],{
+ a:1,duration:.15}
+ ,1.12),i.to(M[1],{
+ r:360,duration:.63,ease:"power2.in",onUpdate:b}
+ ,1.12),i.to(M[2],{
+ a:1,duration:.15}
+ ,1.24),i.to(M[2],{
+ r:230,duration:.51,ease:"power2.in",onUpdate:b}
+ ,1.24),i.to(w,{
+ alpha:.6,duration:.55,ease:"power1.in"}
+ ,1.15),i.to(m,{
+ alpha:1,duration:.2,ease:"power2.in"}
+ ,1.55)}
+ );
+ try{
+ await i()}
+ catch(ort){
+ }
+ c.visible=l.visible=!1,f.alpha=0;
+ const C=this.burstEmbers(v,r,56),O=Qt(t=>{
+ const i=t.deltaMS/1e3;
+ for(const s of C){
+ s.age+=i;
+ const t=Math.min(1,s.age/s.life);
+ s.sprite.x+=s.vx*i,s.sprite.y+=s.vy*i,s.vy-=40*i,s.sprite.alpha=.95*(1-t)}
+ }
+ ,"tickEmbers");
+ vn.shared.add(O),await new Promise(t=>{
+ const i=MR.timeline({
+ onComplete:t}
+ );
+ i.to(E,{
+ amp:0,duration:.6,ease:"power2.out"}
+ ,0),i.to(m,{
+ alpha:0,duration:1.1,ease:"power2.out"}
+ ,0),i.to(w,{
+ alpha:0,duration:.9,ease:"power2.out"}
+ ,0),i.to(a,{
+ alpha:0,duration:1.4,ease:"power1.out"}
+ ,0),i.to(M[0],{
+ r:640,a:0,duration:1,ease:"power1.out",onUpdate:b}
+ ,0),i.to(M[1],{
+ r:520,a:0,duration:.9,ease:"power1.out",onUpdate:b}
+ ,0),i.to(M[2],{
+ r:420,a:0,duration:.8,ease:"power1.out",onUpdate:b}
+ ,0),i.to({
+ }
+ ,{
+ duration:1.5}
+ ,0)}
+ ),vn.shared.remove(A),vn.shared.remove(O),s.position.set(y.x,y.y),MR.killTweensOf([S,E,...M]),o.destroy({
+ children:!0}
+ )}
+ buildRing(t,i,s,e,n,h,r){
+ const o=[],a=Math.random()*Math.PI*2;
+ for(let c=0;
+ c<t;
+ c++){
+ const l=a+c/t*Math.PI*2+.18*(Math.random()-.5),u=new Ye(n);
+ let d;
+ if(u.anchor.set(.5),u.tint=16738840,u.blendMode="add",u.width=u.height=120+50*Math.random(),h.addChild(u),e.length>0){
+ const t=new fp(e);
+ t.anchor.set(.5,.7),t.animationSpeed=.5,t.scale.set(i+Math.random()*(s-i)),c%2==1&&(t.scale.x*=-1),t.gotoAndPlay(Math.floor(Math.random()*e.length)),d=t}
+ else d=new Ve;
+ r.addChild(d),o.push({
+ angle:l,radiusMul:.82+.36*Math.random(),dy:22*(Math.random()-.5),glow:u,flame:d}
+ )}
+ return o}
+ burstEmbers(i,s,e){
+ const n=t.C,h=[];
+ for(let t=0;
+ t<e;
+ t++){
+ const e=new Ye(s);
+ e.anchor.set(.5),e.tint=t%3==0?16769184:16751168,e.blendMode="add",e.width=e.height=6+8*Math.random();
+ const r=Math.random()*Math.PI*2,o=40+280*Math.random();
+ e.position.set(n+Math.cos(r)*o,n+Math.sin(r)*o),i.addChild(e);
+ const a=30+90*Math.random();
+ h.push({
+ sprite:e,vx:Math.cos(r)*a,vy:Math.sin(r)*a-40,life:.8+.9*Math.random(),age:0}
+ )}
+ return h}
+ buildSpots(i,s,e,n){
+ const h=t.C,r=[];
+ for(let o=0;
+ o<t.SPOTS;
+ o++){
+ const t=Math.random()*Math.PI*2,o=70+270*Math.random(),a=Math.max(14,Math.min(626,h+Math.cos(t)*o)),c=Math.max(30,Math.min(632,h+Math.sin(t)*o)),l=new Ye(s);
+ let u;
+ if(l.anchor.set(.5),l.tint=16734736,l.blendMode="add",l.position.set(a,c-8),l.alpha=0,e.addChild(l),i.length>0){
+ const t=new fp(i);
+ t.anchor.set(.5,.7),t.animationSpeed=.45,t.gotoAndPlay(Math.floor(Math.random()*i.length)),u=t}
+ else u=new Ve;
+ u.position.set(a,c),u.scale.set(0),n.addChild(u);
+ const d=.05+(o-70)/270*.85+.12*Math.random();
+ r.push({
+ at:d,scale:1.6+1.2*Math.random(),flip:Math.random()<.5?-1:1,glow:l,flame:u}
+ )}
+ return r}
+ static glow(){
+ if(t.glowTex)return t.glowTex;
+ const i=document.createElement("canvas");
+ i.width=i.height=128;
+ const s=i.getContext("2d"),e=s.createRadialGradient(64,64,0,64,64,64);
+ return e.addColorStop(0,"rgba(255,255,255,1)"),e.addColorStop(.4,"rgba(255,255,255,0.45)"),e.addColorStop(1,"rgba(255,255,255,0)"),s.fillStyle=e,s.fillRect(0,0,128,128),t.glowTex=as.from(i),t.glowTex}
+ static vignette(){
+ if(t.vignetteTex)return t.vignetteTex;
+ const i=document.createElement("canvas");
+ i.width=i.height=256;
+ const s=i.getContext("2d"),e=128,n=s.createRadialGradient(e,e,46.08,e,e,184.32);
+ return n.addColorStop(0,"rgba(255,90,20,0)"),n.addColorStop(.55,"rgba(200,40,0,0.45)"),n.addColorStop(1,"rgba(70,8,0,0.95)"),s.fillStyle=n,s.fillRect(0,0,256,256),t.vignetteTex=as.from(i),t.vignetteTex}
+ }
+ ;
+ Qt(gF,"FireStormFx"),Zt(gF,"FIELD",640),Zt(gF,"C",320),Zt(gF,"RING1",48),Zt(gF,"RING2",36),Zt(gF,"RING3",24),Zt(gF,"SPOTS",34),Zt(gF,"glowTex",null),Zt(gF,"vignetteTex",null);
+ let wF=gF;
+ const mF={
+ [hU.FOREST]:{
+ line:12124064,flash:15794160}
+ ,[hU.DEAD_LAND]:{
+ line:12124120,flash:15269872}
+ ,[hU.FIRE_LAND]:{
+ line:16752704,flash:16770752}
+ }
+ ,vF=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"cracks",new ip),Zt(this,"ring",new ip),Zt(this,"flash",new ip),Zt(this,"crackPaths",[]),Zt(this,"playing",!1),Zt(this,"lineColor",12124120),Zt(this,"onFinished",null),Zt(this,"fireStorm",new wF),this.eventMode="none",this.visible=!1,this.cracks.blendMode="add",this.ring.blendMode="add",this.ring.position.set(t.CENTER,t.CENTER),this.addChild(this.cracks,this.ring,this.flash,this.fireStorm)}
+ play(i,s,e=!1){
+ if(this.playing)return Promise.resolve().then(i).catch(t=>{
+ }
+ );
+ if(e)return this.playSoft(i);
+ if(s===hU.FIRE_LAND)return this.playing=!0,this.visible=!0,this.fireStorm.play(i,this.parent??this).finally(()=>{
+ this.playing=!1,this.visible=!1}
+ );
+ const n=mF[s]??mF[hU.DEAD_LAND];
+ this.lineColor=n.line,this.ring.clear().circle(0,0,100).stroke({
+ width:14,color:n.line}
+ ),this.flash.clear().rect(0,0,t.FIELD,t.FIELD).fill(n.flash);
+ const h=new Promise(t=>this.onFinished=t);
MiniAscentShopItemRenderer 2 hunks, 214 statements
+ const i=Qt((t,i)=>RB.getText(t,i),"text");
+ switch(t.type){
+ case"gem":return i("COMMON_350","보석");
+ case"honorCoin":return i("GAME_88","명예코인");
+ case"runeTicket":return i("GAME_1500","크리스탈 뽑기권");
+ case"pet":return`${
+ i(`PET_NAME_${
+ t.kindNum}
+ `,"")}
+  ${
+ i("GAME_736","조각")}
+ `.trim();
+ case"trans":return"treasure"===t.subType?i("GAME_1224","유물 초월권"):i("GAME_1223","영웅 초월권");
+ case"ticket":return"heroGacha"===t.subType?i("GAME_764","5성 영웅 확정권"):"heroSelect"===t.subType?i("GAME_769","영웅 선택권"):"pet"===t.subType?i("GAME_772","정령의 고원 입장권"):t.subType??t.type;
+ default:return t.type}
+ }
+ Qt(NQi,"shopProductName");
+ const LQi=class t extends OR{
+ constructor(){
+ super(),Zt(this,"reward",new p4),Zt(this,"productName",new QD("",ybi.text,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"limit",new QD("",ybi.muted,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"sealIcon",new Ye(obi.texture("ui_challenge_seal"))),Zt(this,"price",new QD("",ybi.text,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"buy",new kQi(vbi("EVENT_SHOP_BUY")));
+ const{
+ W:i,H:s,BUTTON_W:e,BUTTON_H:n,TEXT_X:h}
+ =t,r=(new ip).roundRect(1,1,i-2,s-2,12).fill(ybi.surface).stroke({
+ color:ybi.border,width:1}
+ );
+ r.eventMode="none",this.reward.scale.set(1.2),this.productName.textSize=18,this.productName.position.set(h,20),this.limit.textSize=18,this.limit.position.set(h,20),this.sealIcon.width=this.sealIcon.height=22,this.sealIcon.position.set(h+2,54),this.price.textSize=18,this.price.position.set(h+32,52),this.buy.width=e,this.buy.height=n,this.buy.position.set(i-e-16,(s-n)/2),this.buy.onClick=()=>{
+ const t=this.data;
+ t&&this.buy.activated&&t.onBuy(t.item)}
+ ,this.addChild(r,this.reward,this.productName,this.limit,this.sealIcon,this.price,this.buy)}
+ get width(){
+ return t.W}
+ get height(){
+ return t.H}
+ setData(i){
+ const s=i;
+ if(!s)return;
+ this.data=s,this.reward.setDataFrom(s.item.reward);
+ const e=this.reward.frameBounds,n=this.reward.scale;
+ this.reward.position.set(16+(64*n.x-e.width*n.x)/2-e.x*n.x,(t.H-e.height*n.y)/2-e.y*n.y),this.limit.text=vbi("EVENT_SHOP_LIMIT",s.item.purchased,s.item.limit),this.productName.text=NQi(s.item.reward);
+ const h=t.TEXT_W-this.limit.width-8;
+ this.productName.scale.set(1),this.productName.scale.set(Math.min(1,h/Math.max(1,this.productName.width))),this.limit.x=this.productName.x+this.productName.width+8,this.price.text=String(s.item.price),this.buy.activated=!s.busy&&s.item.purchased<s.item.limit&&s.seals>=s.item.price}
+ }
+ ;
+ Qt(LQi,"MiniAscentShopItemRenderer"),Zt(LQi,"W",552),Zt(LQi,"H",96),Zt(LQi,"BUTTON_W",140),Zt(LQi,"BUTTON_H",58),Zt(LQi,"TEXT_X",116),Zt(LQi,"TEXT_W",LQi.W-LQi.BUTTON_W-32-LQi.TEXT_X);
+ let DQi=LQi;
+ const GQi=class t extends OQi{
+ constructor(){
+ super(),Zt(this,"tabId","shop"),Zt(this,"heading",new QD(vbi("SHOP"),ybi.text,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"hint",new QD(vbi("EVENT_SHOP_HINT"),ybi.text,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"message",new QD("",ybi.text,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"reload",new kQi(vbi("RELIC_RELOAD"))),Zt(this,"list",new TR(DQi,DQi.W,DQi.H,t.ROW_GAP)),Zt(this,"rows",[]),Zt(this,"data",null),Zt(this,"busy",!1),this.canCloseShell=()=>!this.busy,this.heading.textSize=26,this.hint.setWrapWidth(536),this.message.setWrapWidth(496),this.reload.width=260,this.reload.height=46,this.reload.onClick=()=>{
+ this.busy||this.load(!0)}
+ ,this.list.x=t.LIST_X,this.contentContainer.addChild(this.heading,this.hint,this.message,this.reload,this.list)}
+ static getInstance(){
+ return this.instance??(this.instance=new t)}
+ show(){
+ this.height=876,this.layout(),this.render(),super.show(),this.load()}
+ layout(){
+ this.heading.position.set((this.width-this.heading.width)/2,140),this.hint.position.set(40,188);
+ const t=this.hint.y+this.hint.height+24;
+ this.list.y=t,this.list.setListHeight(Math.max(DQi.H,this.height-t-12),!1),this.message.position.set(60,t+55),this.reload.position.set((this.width-this.reload.width)/2,t+150)}
+ setBusy(t){
+ this.busy=t,this.render(),this.parent&&Vbi.getInstance().refresh()}
+ async load(t=!1){
+ this.setBusy(!0);
+ try{
+ this.data=await Fbi.getInstance().fetchEventShop(t)}
+ catch(ort){
+ vH.getInstance().showMessage(ort.message)}
+ finally{
+ this.setBusy(!1)}
+ }
+ render(){
+ var t;
+ const i=(null==(t=this.data)?void 0:t.eventShop.items)??[],s=!i.length;
+ if(this.message.visible=this.reload.visible=s,this.list.visible=!s,s)return this.message.text=vbi(this.data?"EVENT_SHOP_EMPTY":"RELIC_LOADING"),void(this.reload.activated=!this.busy);
+ const e=this.data.season.seals??this.data.season.coin;
+ this.rows.length===i.length&&this.rows.every((t,s)=>t.item.kindNum===i[s].kindNum)?(this.rows.forEach((t,s)=>{
+ t.item=i[s],t.seals=e,t.busy=this.busy}
+ ),this.list.updateItemData()):(this.rows=i.map(t=>({
+ item:t,seals:e,busy:this.busy,onBuy:Qt(t=>{
+ this.buy(t)}
+ ,"onBuy")}
+ )),this.list.dataProvider=this.rows,this.list.showTopItem())}
+ async buy(t){
+ if(!this.busy&&this.data){
+ this.setBusy(!0);
+ try{
+ this.data=await Fbi.getInstance().buyEventShop(this.data.eventShop.revision,t),vH.getInstance().showMessage(vbi("EVENT_SHOP_DELIVERED"))}
+ catch(ort){
+ vH.getInstance().showMessage(ort.message);
+ try{
+ this.data=await Fbi.getInstance().fetchEventShop(!0)}
+ catch{
+ }
+ }
+ finally{
+ this.setBusy(!1)}
+ }
+ }
+ }
+ ;
+ Qt(GQi,"MiniAscentEventShopPage"),Zt(GQi,"instance"),Zt(GQi,"LIST_X",32),Zt(GQi,"ROW_GAP",6);
+ let BQi=GQi;
+ const UQi=Object.freeze(Object.defineProperty({
+ __proto__:null,MiniAscentEventShopPage:BQi}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ ));
+ function FQi(t){
- ));
- function bLi(t){
- const i=qt((t,i)=>nB.getText(t,i),"text");
- switch(t.type){
- case"gem":return i("COMMON_350","보석");
- case"honorCoin":return i("GAME_88","명예코인");
- case"runeTicket":return i("GAME_1500","크리스탈 뽑기권");
- case"pet":return`${
- i(`PET_NAME_${
- t.kindNum}
- `,"")}
-  ${
- i("GAME_736","조각")}
- `.trim();
- case"trans":return"treasure"===t.subType?i("GAME_1224","유물 초월권"):i("GAME_1223","영웅 초월권");
- case"ticket":return"heroGacha"===t.subType?i("GAME_764","5성 영웅 확정권"):"heroSelect"===t.subType?i("GAME_769","영웅 선택권"):"pet"===t.subType?i("GAME_772","정령의 고원 입장권"):t.subType??t.type;
- default:return t.type}
- }
- qt(bLi,"shopProductName");
- const ELi=class t extends iR{
- constructor(){
- super(),Xt(this,"reward",new g6),Xt(this,"productName",new SD("",u_i.text,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"limit",new SD("",u_i.muted,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"sealIcon",new je(Xvi.texture("ui_challenge_seal"))),Xt(this,"price",new SD("",u_i.text,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"buy",new INi(o_i("EVENT_SHOP_BUY")));
- const{
- W:i,H:s,BUTTON_W:e,BUTTON_H:n,TEXT_X:h}
- =t,r=(new Ff).roundRect(1,1,i-2,s-2,12).fill(u_i.surface).stroke({
- color:u_i.border,width:1}
- );
- r.eventMode="none",this.reward.scale.set(1.2),this.productName.textSize=18,this.productName.position.set(h,20),this.limit.textSize=18,this.limit.position.set(h,20),this.sealIcon.width=this.sealIcon.height=22,this.sealIcon.position.set(h+2,54),this.price.textSize=18,this.price.position.set(h+32,52),this.buy.width=e,this.buy.height=n,this.buy.position.set(i-e-16,(s-n)/2),this.buy.onClick=()=>{
- const t=this.data;
- t&&this.buy.activated&&t.onBuy(t.item)}
- ,this.addChild(r,this.reward,this.productName,this.limit,this.sealIcon,this.price,this.buy)}
- get width(){
- return t.W}
- get height(){
- return t.H}
- setData(i){
- const s=i;
- if(!s)return;
- this.data=s,this.reward.setDataFrom(s.item.reward);
- const e=this.reward.frameBounds,n=this.reward.scale;
- this.reward.position.set(16+(64*n.x-e.width*n.x)/2-e.x*n.x,(t.H-e.height*n.y)/2-e.y*n.y),this.limit.text=o_i("EVENT_SHOP_LIMIT",s.item.purchased,s.item.limit),this.productName.text=bLi(s.item.reward);
- const h=t.TEXT_W-this.limit.width-8;
- this.productName.scale.set(1),this.productName.scale.set(Math.min(1,h/Math.max(1,this.productName.width))),this.limit.x=this.productName.x+this.productName.width+8,this.price.text=String(s.item.price),this.buy.activated=!s.busy&&s.item.purchased<s.item.limit&&s.seals>=s.item.price}
- }
- ;
- qt(ELi,"MiniAscentShopItemRenderer"),Xt(ELi,"W",552),Xt(ELi,"H",96),Xt(ELi,"BUTTON_W",140),Xt(ELi,"BUTTON_H",58),Xt(ELi,"TEXT_X",116),Xt(ELi,"TEXT_W",ELi.W-ELi.BUTTON_W-32-ELi.TEXT_X);
- let MLi=ELi;
- const ALi=class t extends TNi{
- constructor(){
- super(),Xt(this,"tabId","shop"),Xt(this,"heading",new SD(o_i("SHOP"),u_i.text,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"hint",new SD(o_i("EVENT_SHOP_HINT"),u_i.text,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"message",new SD("",u_i.text,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"reload",new INi(o_i("RELIC_RELOAD"))),Xt(this,"list",new Zk(MLi,MLi.W,MLi.H,t.ROW_GAP)),Xt(this,"rows",[]),Xt(this,"data",null),Xt(this,"busy",!1),this.canCloseShell=()=>!this.busy,this.heading.textSize=26,this.hint.setWrapWidth(536),this.message.setWrapWidth(496),this.reload.width=260,this.reload.height=46,this.reload.onClick=()=>{
- this.busy||this.load(!0)}
- ,this.list.x=t.LIST_X,this.contentContainer.addChild(this.heading,this.hint,this.message,this.reload,this.list)}
- static getInstance(){
- return this.instance??(this.instance=new t)}
- show(){
- this.height=876,this.layout(),this.render(),super.show(),this.load()}
- layout(){
- this.heading.position.set((this.width-this.heading.width)/2,140),this.hint.position.set(40,188);
- const t=this.hint.y+this.hint.height+24;
- this.list.y=t,this.list.setListHeight(Math.max(MLi.H,this.height-t-12),!1),this.message.position.set(60,t+55),this.reload.position.set((this.width-this.reload.width)/2,t+150)}
- setBusy(t){
- this.busy=t,this.render(),this.parent&&P_i.getInstance().refresh()}
- async load(t=!1){
- this.setBusy(!0);
- try{
- this.data=await O_i.getInstance().fetchEventShop(t)}
- catch(oht){
- AH.getInstance().showMessage(oht.message)}
- finally{
- this.setBusy(!1)}
- }
- render(){
- var t;
- const i=(null==(t=this.data)?void 0:t.eventShop.items)??[],s=!i.length;
- if(this.message.visible=this.reload.visible=s,this.list.visible=!s,s)return this.message.text=o_i(this.data?"EVENT_SHOP_EMPTY":"RELIC_LOADING"),void(this.reload.activated=!this.busy);
- const e=this.data.season.seals??this.data.season.coin;
- this.rows.length===i.length&&this.rows.every((t,s)=>t.item.kindNum===i[s].kindNum)?(this.rows.forEach((t,s)=>{
- t.item=i[s],t.seals=e,t.busy=this.busy}
- ),this.list.updateItemData()):(this.rows=i.map(t=>({
- item:t,seals:e,busy:this.busy,onBuy:qt(t=>{
- this.buy(t)}
- ,"onBuy")}
- )),this.list.dataProvider=this.rows,this.list.showTopItem())}
- async buy(t){
- if(!this.busy&&this.data){
- this.setBusy(!0);
- try{
- this.data=await O_i.getInstance().buyEventShop(this.data.eventShop.revision,t),AH.getInstance().showMessage(o_i("EVENT_SHOP_DELIVERED"))}
- catch(oht){
- AH.getInstance().showMessage(oht.message);
- try{
- this.data=await O_i.getInstance().fetchEventShop(!0)}
- catch{
- }
- }
- finally{
- this.setBusy(!1)}
- }
- }
- }
- ;
- qt(ALi,"MiniAscentEventShopPage"),Xt(ALi,"instance"),Xt(ALi,"LIST_X",32),Xt(ALi,"ROW_GAP",6);
- let yLi=ALi;
- const SLi=Object.freeze(Object.defineProperty({
- __proto__:null,MiniAscentEventShopPage:yLi}
- ,Symbol.toStringTag,{
- value:"Module"}
TournamentRewardItemRenderer 2 hunks, 210 statements
- constructor(){
- super(),Xt(this,"bg"),Xt(this,"lblRound",new SD("",OL.COLOR_BRIGHT_ORANGE,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"line"),Xt(this,"lblWin",new SD("Win",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconGem"),Xt(this,"lblGem",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconHonor"),Xt(this,"lblHonor",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconGuild"),Xt(this,"lblGuild",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconGemLose"),Xt(this,"lblGemLose",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconHonorLose"),Xt(this,"lblHonorLose",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconGuildLose"),Xt(this,"lblGuildLose",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblLose",new SD("Lose",OL.COLOR_WHITE,OL.DEFAULT_OUTLINE_FONT_OPTION_16));
- const i=t.ITEM_WIDTH,s=t.ITEM_HEIGHT,e=t.ICON_SIZE,n=.5*(s-this.lblRound.height);
- this.bg=new kM({
- texture:eS.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=i,this.bg.height=s,this.addChild(this.bg),this.lblRound.align="center",this.lblRound.wordWrap=!0,this.lblRound.wordWrapWidth=100,this.lblRound.x=t.COL_SCORE_X,this.lblRound.y=n,this.addChild(this.lblRound),this.lblWin.align="center",this.lblWin.x=t.COL_WINLOSE_X,this.lblWin.y=.5*(.5*s-this.lblWin.height),this.addChild(this.lblWin),this.iconGem=new je(eS.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=e,this.iconGem.height=e,this.iconGem.x=t.COL_GEM_X,this.iconGem.y=.5*(.5*s-e),this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+e+t.LABEL_GAP,this.lblGem.y=this.lblWin.y,this.addChild(this.lblGem),this.iconHonor=new je(eS.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonor.width=e,this.iconHonor.height=e,this.iconHonor.x=t.COL_HONOR_X,this.iconHonor.y=this.iconGem.y,this.addChild(this.iconHonor),this.lblHonor.x=this.iconHonor.x+e+t.LABEL_GAP,this.lblHonor.y=this.lblWin.y,this.addChild(this.lblHonor),this.iconGuild=new je(eS.getTexture("UI_Ekkorr","GUILD_COIN")),this.iconGuild.width=e,this.iconGuild.height=e,this.iconGuild.x=t.COL_GUILD_X,this.iconGuild.y=this.iconGem.y,this.addChild(this.iconGuild),this.lblGuild.x=this.iconGuild.x+e+t.LABEL_GAP,this.lblGuild.y=this.lblWin.y,this.addChild(this.lblGuild),this.line=new je(eS.getTexture("UI","Popup_Line_01")),this.line.width=i-t.COL_WINLOSE_X+15,this.line.height=1.5,this.line.x=t.COL_WINLOSE_X-20,this.line.y=.5*s,this.addChild(this.line),this.lblLose.align="center",this.lblLose.x=t.COL_WINLOSE_X,this.lblLose.y=.5*s+.5*(.5*s-this.lblLose.height),this.addChild(this.lblLose),this.iconGemLose=new je(eS.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGemLose.width=e,this.iconGemLose.height=e,this.iconGemLose.x=t.COL_GEM_X,this.iconGemLose.y=.5*s+.5*(.5*s-e),this.addChild(this.iconGemLose),this.lblGemLose.x=this.iconGemLose.x+e+t.LABEL_GAP,this.lblGemLose.y=this.lblLose.y,this.addChild(this.lblGemLose),this.iconHonorLose=new je(eS.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonorLose.width=e,this.iconHonorLose.height=e,this.iconHonorLose.x=t.COL_HONOR_X,this.iconHonorLose.y=this.iconGemLose.y,this.addChild(this.iconHonorLose),this.lblHonorLose.x=this.iconHonorLose.x+e+t.LABEL_GAP,this.lblHonorLose.y=this.lblLose.y,this.addChild(this.lblHonorLose),this.iconGuildLose=new je(eS.getTexture("UI_Ekkorr","GUILD_COIN")),this.iconGuildLose.width=e,this.iconGuildLose.height=e,this.iconGuildLose.x=t.COL_GUILD_X,this.iconGuildLose.y=this.iconGemLose.y,this.addChild(this.iconGuildLose),this.lblGuildLose.x=this.iconGuildLose.x+e+t.LABEL_GAP,this.lblGuildLose.y=this.lblLose.y,this.addChild(this.lblGuildLose)}
- setData(i){
- if(this.data=i,!i)return;
- 3==i.kindNum||5==i.kindNum?(this.bg.texture=eS.getTexture("UI_Ekkorr","Popup_List_02_gray"),this.lblRound.textColor=OL.COLOR_DEEP_SKYBLUE):(this.bg.texture=eS.getTexture("UI_Ekkorr","Popup_List_02"),this.lblRound.textColor=OL.COLOR_BRIGHT_ORANGE),this.lblRound.text=this.getRoundLabel(i.round,i.kindNum),this.lblRound.x=.5*(120-this.lblRound.width),this.lblRound.y=.5*(t.ITEM_HEIGHT-this.lblRound.height);
- const s=i.winRewardValues.split("|").map(Number),e=i.loseRewardValues.split("|").map(Number);
- this.lblWin.text=nB.getText("GAME_1028","승리"),this.lblGem.text=String(s[0]),this.lblHonor.text=String(s[2]),this.lblGuild.text=String(s[1]),this.lblLose.text=nB.getText("GAME_1029","패배"),this.lblGemLose.text=String(e[0]),this.lblHonorLose.text=String(e[2]),this.lblGuildLose.text=String(e[1])}
- getRoundLabel(t,i){
- switch(t){
- case 1:return nB.getText("GWT_3","16강");
- case 2:return 3==i?`${
- nB.getText("GWT_20","서브 매치")}
-  1`:nB.getText("GWT_4","8강");
- case 3:return 5==i?`${
- nB.getText("GWT_20","서브 매치")}
-  2`:nB.getText("GWT_5","4강");
- case 4:return 7==i?nB.getText("GWT_7","결승전"):nB.getText("GWT_6","3/4위전");
- default:return""}
- }
- get height(){
- return t.ITEM_HEIGHT+2}
- static get scoreX(){
- return t.COL_SCORE_X}
- static get winLoseX(){
- return t.COL_WINLOSE_X}
- static get gemX(){
- return t.COL_GEM_X}
- static get honorX(){
- return t.COL_HONOR_X}
- static get guildX(){
- return t.COL_GUILD_X}
- }
- ;
- qt(Rni,"TournamentRewardItemRenderer"),Xt(Rni,"ITEM_WIDTH",520),Xt(Rni,"ITEM_HEIGHT",90),Xt(Rni,"COL_SCORE_X",20),Xt(Rni,"COL_WINLOSE_X",150),Xt(Rni,"COL_GEM_X",230),Xt(Rni,"COL_HONOR_X",330),Xt(Rni,"COL_GUILD_X",430),Xt(Rni,"ICON_SIZE",22),Xt(Rni,"LABEL_GAP",6);
- let xni=Rni;
- const Pni=class t extends iR{
- constructor(){
- super(),Xt(this,"bg"),Xt(this,"lblRound",new SD("",OL.COLOR_BRIGHT_ORANGE,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconMedal"),Xt(this,"lblMedal",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconGem"),Xt(this,"lblGem",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconHonor"),Xt(this,"lblHonor",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"iconGuild"),Xt(this,"lblGuild",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16));
- const i=t.ITEM_WIDTH,s=t.ITEM_HEIGHT,e=t.ICON_SIZE,n=.5*(s-this.lblRound.height),h=.5*(s-e);
- this.bg=new kM({
- texture:eS.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=i,this.bg.height=s,this.addChild(this.bg),this.lblRound.align="center",this.lblRound.wordWrap=!0,this.lblRound.wordWrapWidth=100,this.lblRound.x=t.COL_SCORE_X,this.lblRound.y=n,this.addChild(this.lblRound),this.iconMedal=new je(eS.getTexture("UI_Ekkorr","UI_STAR_ICON")),this.iconMedal.width=e,this.iconMedal.height=1.35*e,this.iconMedal.x=t.COL_MEDAL_X,this.iconMedal.y=.5*(s-this.iconMedal.height),this.addChild(this.iconMedal),this.lblMedal.x=this.iconMedal.x+e+t.LABEL_GAP,this.lblMedal.y=n,this.addChild(this.lblMedal),this.iconGem=new je(eS.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=e,this.iconGem.height=e,this.iconGem.x=t.COL_GEM_X,this.iconGem.y=h,this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+e+t.LABEL_GAP,this.lblGem.y=this.lblMedal.y,this.addChild(this.lblGem),this.iconHonor=new je(eS.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonor.width=e,this.iconHonor.height=e,this.iconHonor.x=t.COL_HONOR_X,this.iconHonor.y=this.iconGem.y,this.addChild(this.iconHonor),this.lblHonor.x=this.iconHonor.x+e+t.LABEL_GAP,this.lblHonor.y=this.lblMedal.y,this.addChild(this.lblHonor),this.iconGuild=new je(eS.getTexture("UI_Ekkorr","GUILD_COIN")),this.iconGuild.width=e,this.iconGuild.height=e,this.iconGuild.x=t.COL_GUILD_X,this.iconGuild.y=this.iconGem.y,this.addChild(this.iconGuild),this.lblGuild.x=this.iconGuild.x+e+t.LABEL_GAP,this.lblGuild.y=this.lblMedal.y,this.addChild(this.lblGuild)}
- setData(i){
- if(this.data=i,!i)return;
- let s,e=i.medalBuffs.split("|").map(Number);
- i.winRewardValues?(this.lblRound.text=nB.getText("GWT_12","우승 길드 서버"),s=i.winRewardValues.split("|").map(Number),this.lblMedal.text=String(e[0])+"%"):(this.lblRound.text=nB.getText("GWT_13","그 외 서버"),s=i.loseRewardValues.split("|").map(Number),this.lblMedal.text=String(e[1])+"%"),this.lblRound.x=.5*(120-this.lblRound.width),this.lblRound.y=.5*(t.ITEM_HEIGHT-this.lblRound.height),this.lblGem.text=String(s[0]),this.lblHonor.text=String(s[2]),this.lblGuild.text=String(s[1])}
- get height(){
- return t.ITEM_HEIGHT+2}
- static get scoreX(){
- return t.COL_SCORE_X}
- static get medalX(){
- return t.COL_MEDAL_X}
- static get gemX(){
- return t.COL_GEM_X}
- static get honorX(){
- return t.COL_HONOR_X}
- static get guildX(){
- return t.COL_GUILD_X}
- }
- ;
- qt(Pni,"TournamentRewardServerItemRenderer"),Xt(Pni,"ITEM_WIDTH",520),Xt(Pni,"ITEM_HEIGHT",90),Xt(Pni,"COL_SCORE_X",20),Xt(Pni,"COL_MEDAL_X",135),Xt(Pni,"COL_GEM_X",230),Xt(Pni,"COL_HONOR_X",330),Xt(Pni,"COL_GUILD_X",430),Xt(Pni,"ICON_SIZE",22),Xt(Pni,"LABEL_GAP",6);
- let Nni=Pni;
- const Lni=class t extends dU{
- constructor(){
- super(),Xt(this,"tapDesc"),Xt(this,"tapReward"),Xt(this,"battleContainer"),Xt(this,"lblHdrRound"),Xt(this,"lblHdrWinLose"),Xt(this,"lblHdrGem"),Xt(this,"lblHdrHonor"),Xt(this,"lblHdrGuild"),Xt(this,"rewardBattleList"),Xt(this,"serverContainer"),Xt(this,"lblHdrRoundServer"),Xt(this,"lblHdrMedalServer"),Xt(this,"lblHdrGemServer"),Xt(this,"lblHdrHonorServer"),Xt(this,"lblHdrGuildServer"),Xt(this,"rewardServerList"),this.height=t.POPUP_HEIGHT,this.tapDesc=new UYt(nB.getText("GWT_9","라운드별 전투 보상"),260),this.tapDesc.x=28,this.tapDesc.y=t.TAB_Y,this.tapDesc.selected=!0,this.tapDesc.onClick=this.onDescTap.bind(this),this.contentContainer.addChild(this.tapDesc),this.tapReward=new UYt(nB.getText("GWT_11","서버 보상"),260),this.tapReward.x=this.tapDesc.x+this.tapDesc.width+4,this.tapReward.y=this.tapDesc.y,this.tapReward.onClick=this.onRewardTap.bind(this),this.contentContainer.addChild(this.tapReward),this.battleContainer=new He,this.contentContainer.addChild(this.battleContainer);
- const i=OL.DEFAULT_OUTLINE_FONT_OPTION_16;
- this.lblHdrRound=new SD("",8947848,i),this.lblHdrWinLose=new SD("",8947848,i),this.lblHdrGem=new SD("",8947848,i),this.lblHdrHonor=new SD("",8947848,i),this.lblHdrGuild=new SD("",8947848,i),this.battleContainer.addChild(this.lblHdrRound),this.battleContainer.addChild(this.lblHdrWinLose),this.battleContainer.addChild(this.lblHdrGem),this.battleContainer.addChild(this.lblHdrHonor),this.battleContainer.addChild(this.lblHdrGuild),this.rewardBattleList=new Zk(xni,xni.ITEM_WIDTH,t.LIST_HEIGHT,2),this.rewardBattleList.x=t.REWARD_LIST_X,this.battleContainer.addChild(this.rewardBattleList),this.serverContainer=new He,this.serverContainer.visible=!1,this.contentContainer.addChild(this.serverContainer),this.lblHdrRoundServer=new SD("",8947848,i),this.lblHdrMedalServer=new SD("",8947848,i),this.lblHdrGemServer=new SD("",8947848,i),this.lblHdrHonorServer=new SD("",8947848,i),this.lblHdrGuildServer=new SD("",8947848,i),this.lblHdrMedalServer.align="center",this.serverContainer.addChild(this.lblHdrRoundServer),this.serverContainer.addChild(this.lblHdrMedalServer),this.serverContainer.addChild(this.lblHdrGemServer),this.serverContainer.addChild(this.lblHdrHonorServer),this.serverContainer.addChild(this.lblHdrGuildServer),this.rewardServerList=new Zk(Nni,Nni.ITEM_WIDTH,t.LIST_HEIGHT,2),this.rewardServerList.x=t.REWARD_LIST_X,this.serverContainer.addChild(this.rewardServerList),this.outSideClickHide=!0}
- static getInstance(){
- return this._instance||(this._instance=new t),this._instance}
- async showGuide(){
- const t=QL.getTournamentSchedule();
- if(null==t)return;
- let i=nB.getText("GWT_1","서버 대항전"),s=1==t.split?"Mid":"Final";
- i+=` (Season ${
- t.season}
-  - ${
- s}
- )`,this.title=i,this.tapDesc.text=nB.getText("GWT_9","라운드별 전투 보상"),this.tapReward.text=nB.getText("GWT_11","서버 보상"),this.refreshRewardHeaders();
- let e=[...QL.rewardBattleList.sort((t,i)=>i.kindNum-t.kindNum)].concat([...QL.rewardBattleLostList.sort((t,i)=>i.kindNum-t.kindNum)]);
- this.rewardBattleList.dataProvider=e,this.rewardBattleList.scrollTo(0),this.rewardServerList.dataProvider=QL.rewardServerList,this.rewardServerList.scrollTo(0),this.tapDesc.selected=!0,this.tapReward.selected=!1,this.battleContainer.visible=!0,this.serverContainer.visible=!1,await this.loadImage(),super.show()}
- refreshRewardHeaders(){
- this.lblHdrRound.text=nB.getText("GWT_10","라운드"),this.lblHdrWinLose.text=nB.getText("GAME_116","승패"),this.lblHdrGem.text=nB.getText("COMMON_350","보석"),this.lblHdrHonor.text=nB.getText("GAME_88","명예코인"),this.lblHdrGuild.text=nB.getText("GAME_812","길드코인"),this.lblHdrRoundServer.text=nB.getText("GAME_116","승패");
- const i=Math.floor(QL.rewardServerList[0].medalBuffTime/60/24);
- this.lblHdrMedalServer.text=nB.getText("CASTLE_SPECIAL_NAME_6","훈장버프")+`\n(${
- i}
-  Days)`,this.lblHdrGemServer.text=nB.getText("COMMON_350","보석"),this.lblHdrHonorServer.text=nB.getText("GAME_88","명예코인"),this.lblHdrGuildServer.text=nB.getText("GAME_812","길드코인");
- const s=t.REWARD_LIST_X,e=t.CONTENT_Y;
- this.lblHdrRound.x=s+.5*(120-this.lblHdrRound.width),this.lblHdrWinLose.x=s+xni.winLoseX,this.lblHdrGem.x=s+xni.gemX+10,this.lblHdrHonor.x=s+xni.honorX,this.lblHdrGuild.x=s+xni.guildX,this.lblHdrRound.y=e,this.lblHdrWinLose.y=e,this.lblHdrGem.y=e,this.lblHdrHonor.y=e,this.lblHdrGuild.y=e,this.lblHdrRoundServer.x=s+.5*(120-this.lblHdrRound.width),this.lblHdrMedalServer.x=s+Nni.medalX,this.lblHdrGemServer.x=s+Nni.gemX+10,this.lblHdrHonorServer.x=s+Nni.honorX,this.lblHdrGuildServer.x=s+Nni.guildX,this.lblHdrRoundServer.y=e,this.lblHdrMedalServer.y=e-.5*this.lblHdrGemServer.height,this.lblHdrGemServer.y=e,this.lblHdrHonorServer.y=e,this.lblHdrGuildServer.y=e,this.rewardBattleList.y=e+this.lblHdrRound.height+12,this.rewardServerList.y=this.lblHdrMedalServer.y+this.lblHdrMedalServer.height+12}
- onDescTap(){
- this.tapDesc.selected=!0,this.tapReward.selected=!1,this.battleContainer.visible=!0,this.serverContainer.visible=!1}
- onRewardTap(){
- this.tapDesc.selected=!1,this.tapReward.selected=!0,this.battleContainer.visible=!1,this.serverContainer.visible=!0}
- getDefaultPositionY(){
- return.5*Xy.stageHeight}
- onBackButton(){
- return this.hide(),!0}
- }
- ;
- qt(Lni,"GuildWarTournamentRewardGuidePopup"),Xt(Lni,"_instance"),Xt(Lni,"POPUP_HEIGHT",720),Xt(Lni,"TAB_Y",80),Xt(Lni,"CONTENT_Y",145),Xt(Lni,"LIST_HEIGHT",520),Xt(Lni,"REWARD_LIST_X",30);
- let Dni=Lni;
- const Gni=class t extends He{
+ const Sri=class t extends OR{
+ constructor(){
+ super(),Zt(this,"bg"),Zt(this,"lblRound",new QD("",sD.COLOR_BRIGHT_ORANGE,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"line"),Zt(this,"lblWin",new QD("Win",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconGem"),Zt(this,"lblGem",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconHonor"),Zt(this,"lblHonor",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconGuild"),Zt(this,"lblGuild",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconGemLose"),Zt(this,"lblGemLose",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconHonorLose"),Zt(this,"lblHonorLose",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconGuildLose"),Zt(this,"lblGuildLose",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblLose",new QD("Lose",sD.COLOR_WHITE,sD.DEFAULT_OUTLINE_FONT_OPTION_16));
+ const i=t.ITEM_WIDTH,s=t.ITEM_HEIGHT,e=t.ICON_SIZE,n=.5*(s-this.lblRound.height);
+ this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=i,this.bg.height=s,this.addChild(this.bg),this.lblRound.align="center",this.lblRound.wordWrap=!0,this.lblRound.wordWrapWidth=100,this.lblRound.x=t.COL_SCORE_X,this.lblRound.y=n,this.addChild(this.lblRound),this.lblWin.align="center",this.lblWin.x=t.COL_WINLOSE_X,this.lblWin.y=.5*(.5*s-this.lblWin.height),this.addChild(this.lblWin),this.iconGem=new Ye(kS.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=e,this.iconGem.height=e,this.iconGem.x=t.COL_GEM_X,this.iconGem.y=.5*(.5*s-e),this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+e+t.LABEL_GAP,this.lblGem.y=this.lblWin.y,this.addChild(this.lblGem),this.iconHonor=new Ye(kS.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonor.width=e,this.iconHonor.height=e,this.iconHonor.x=t.COL_HONOR_X,this.iconHonor.y=this.iconGem.y,this.addChild(this.iconHonor),this.lblHonor.x=this.iconHonor.x+e+t.LABEL_GAP,this.lblHonor.y=this.lblWin.y,this.addChild(this.lblHonor),this.iconGuild=new Ye(kS.getTexture("UI_Ekkorr","GUILD_COIN")),this.iconGuild.width=e,this.iconGuild.height=e,this.iconGuild.x=t.COL_GUILD_X,this.iconGuild.y=this.iconGem.y,this.addChild(this.iconGuild),this.lblGuild.x=this.iconGuild.x+e+t.LABEL_GAP,this.lblGuild.y=this.lblWin.y,this.addChild(this.lblGuild),this.line=new Ye(kS.getTexture("UI","Popup_Line_01")),this.line.width=i-t.COL_WINLOSE_X+15,this.line.height=1.5,this.line.x=t.COL_WINLOSE_X-20,this.line.y=.5*s,this.addChild(this.line),this.lblLose.align="center",this.lblLose.x=t.COL_WINLOSE_X,this.lblLose.y=.5*s+.5*(.5*s-this.lblLose.height),this.addChild(this.lblLose),this.iconGemLose=new Ye(kS.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGemLose.width=e,this.iconGemLose.height=e,this.iconGemLose.x=t.COL_GEM_X,this.iconGemLose.y=.5*s+.5*(.5*s-e),this.addChild(this.iconGemLose),this.lblGemLose.x=this.iconGemLose.x+e+t.LABEL_GAP,this.lblGemLose.y=this.lblLose.y,this.addChild(this.lblGemLose),this.iconHonorLose=new Ye(kS.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonorLose.width=e,this.iconHonorLose.height=e,this.iconHonorLose.x=t.COL_HONOR_X,this.iconHonorLose.y=this.iconGemLose.y,this.addChild(this.iconHonorLose),this.lblHonorLose.x=this.iconHonorLose.x+e+t.LABEL_GAP,this.lblHonorLose.y=this.lblLose.y,this.addChild(this.lblHonorLose),this.iconGuildLose=new Ye(kS.getTexture("UI_Ekkorr","GUILD_COIN")),this.iconGuildLose.width=e,this.iconGuildLose.height=e,this.iconGuildLose.x=t.COL_GUILD_X,this.iconGuildLose.y=this.iconGemLose.y,this.addChild(this.iconGuildLose),this.lblGuildLose.x=this.iconGuildLose.x+e+t.LABEL_GAP,this.lblGuildLose.y=this.lblLose.y,this.addChild(this.lblGuildLose)}
+ setData(i){
+ if(this.data=i,!i)return;
+ 3==i.kindNum||5==i.kindNum?(this.bg.texture=kS.getTexture("UI_Ekkorr","Popup_List_02_gray"),this.lblRound.textColor=sD.COLOR_DEEP_SKYBLUE):(this.bg.texture=kS.getTexture("UI_Ekkorr","Popup_List_02"),this.lblRound.textColor=sD.COLOR_BRIGHT_ORANGE),this.lblRound.text=this.getRoundLabel(i.round,i.kindNum),this.lblRound.x=.5*(120-this.lblRound.width),this.lblRound.y=.5*(t.ITEM_HEIGHT-this.lblRound.height);
+ const s=i.winRewardValues.split("|").map(Number),e=i.loseRewardValues.split("|").map(Number);
+ this.lblWin.text=RB.getText("GAME_1028","승리"),this.lblGem.text=String(s[0]),this.lblHonor.text=String(s[2]),this.lblGuild.text=String(s[1]),this.lblLose.text=RB.getText("GAME_1029","패배"),this.lblGemLose.text=String(e[0]),this.lblHonorLose.text=String(e[2]),this.lblGuildLose.text=String(e[1])}
+ getRoundLabel(t,i){
+ switch(t){
+ case 1:return RB.getText("GWT_3","16강");
+ case 2:return 3==i?`${
+ RB.getText("GWT_20","서브 매치")}
+  1`:RB.getText("GWT_4","8강");
+ case 3:return 5==i?`${
+ RB.getText("GWT_20","서브 매치")}
+  2`:RB.getText("GWT_5","4강");
+ case 4:return 7==i?RB.getText("GWT_7","결승전"):RB.getText("GWT_6","3/4위전");
+ default:return""}
+ }
+ get height(){
+ return t.ITEM_HEIGHT+2}
+ static get scoreX(){
+ return t.COL_SCORE_X}
+ static get winLoseX(){
+ return t.COL_WINLOSE_X}
+ static get gemX(){
+ return t.COL_GEM_X}
+ static get honorX(){
+ return t.COL_HONOR_X}
+ static get guildX(){
+ return t.COL_GUILD_X}
+ }
+ ;
+ Qt(Sri,"TournamentRewardItemRenderer"),Zt(Sri,"ITEM_WIDTH",520),Zt(Sri,"ITEM_HEIGHT",90),Zt(Sri,"COL_SCORE_X",20),Zt(Sri,"COL_WINLOSE_X",150),Zt(Sri,"COL_GEM_X",230),Zt(Sri,"COL_HONOR_X",330),Zt(Sri,"COL_GUILD_X",430),Zt(Sri,"ICON_SIZE",22),Zt(Sri,"LABEL_GAP",6);
+ let Tri=Sri;
+ const Cri=class t extends OR{
+ constructor(){
+ super(),Zt(this,"bg"),Zt(this,"lblRound",new QD("",sD.COLOR_BRIGHT_ORANGE,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconMedal"),Zt(this,"lblMedal",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconGem"),Zt(this,"lblGem",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconHonor"),Zt(this,"lblHonor",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconGuild"),Zt(this,"lblGuild",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16));
+ const i=t.ITEM_WIDTH,s=t.ITEM_HEIGHT,e=t.ICON_SIZE,n=.5*(s-this.lblRound.height),h=.5*(s-e);
+ this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=i,this.bg.height=s,this.addChild(this.bg),this.lblRound.align="center",this.lblRound.wordWrap=!0,this.lblRound.wordWrapWidth=100,this.lblRound.x=t.COL_SCORE_X,this.lblRound.y=n,this.addChild(this.lblRound),this.iconMedal=new Ye(kS.getTexture("UI_Ekkorr","UI_STAR_ICON")),this.iconMedal.width=e,this.iconMedal.height=1.35*e,this.iconMedal.x=t.COL_MEDAL_X,this.iconMedal.y=.5*(s-this.iconMedal.height),this.addChild(this.iconMedal),this.lblMedal.x=this.iconMedal.x+e+t.LABEL_GAP,this.lblMedal.y=n,this.addChild(this.lblMedal),this.iconGem=new Ye(kS.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=e,this.iconGem.height=e,this.iconGem.x=t.COL_GEM_X,this.iconGem.y=h,this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+e+t.LABEL_GAP,this.lblGem.y=this.lblMedal.y,this.addChild(this.lblGem),this.iconHonor=new Ye(kS.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonor.width=e,this.iconHonor.height=e,this.iconHonor.x=t.COL_HONOR_X,this.iconHonor.y=this.iconGem.y,this.addChild(this.iconHonor),this.lblHonor.x=this.iconHonor.x+e+t.LABEL_GAP,this.lblHonor.y=this.lblMedal.y,this.addChild(this.lblHonor),this.iconGuild=new Ye(kS.getTexture("UI_Ekkorr","GUILD_COIN")),this.iconGuild.width=e,this.iconGuild.height=e,this.iconGuild.x=t.COL_GUILD_X,this.iconGuild.y=this.iconGem.y,this.addChild(this.iconGuild),this.lblGuild.x=this.iconGuild.x+e+t.LABEL_GAP,this.lblGuild.y=this.lblMedal.y,this.addChild(this.lblGuild)}
+ setData(i){
+ if(this.data=i,!i)return;
+ let s,e=i.medalBuffs.split("|").map(Number);
+ i.winRewardValues?(this.lblRound.text=RB.getText("GWT_12","우승 길드 서버"),s=i.winRewardValues.split("|").map(Number),this.lblMedal.text=String(e[0])+"%"):(this.lblRound.text=RB.getText("GWT_13","그 외 서버"),s=i.loseRewardValues.split("|").map(Number),this.lblMedal.text=String(e[1])+"%"),this.lblRound.x=.5*(120-this.lblRound.width),this.lblRound.y=.5*(t.ITEM_HEIGHT-this.lblRound.height),this.lblGem.text=String(s[0]),this.lblHonor.text=String(s[2]),this.lblGuild.text=String(s[1])}
+ get height(){
+ return t.ITEM_HEIGHT+2}
+ static get scoreX(){
+ return t.COL_SCORE_X}
+ static get medalX(){
+ return t.COL_MEDAL_X}
+ static get gemX(){
+ return t.COL_GEM_X}
+ static get honorX(){
+ return t.COL_HONOR_X}
+ static get guildX(){
+ return t.COL_GUILD_X}
+ }
+ ;
+ Qt(Cri,"TournamentRewardServerItemRenderer"),Zt(Cri,"ITEM_WIDTH",520),Zt(Cri,"ITEM_HEIGHT",90),Zt(Cri,"COL_SCORE_X",20),Zt(Cri,"COL_MEDAL_X",135),Zt(Cri,"COL_GEM_X",230),Zt(Cri,"COL_HONOR_X",330),Zt(Cri,"COL_GUILD_X",430),Zt(Cri,"ICON_SIZE",22),Zt(Cri,"LABEL_GAP",6);
+ let Ori=Cri;
+ const Iri=class t extends zU{
+ constructor(){
+ super(),Zt(this,"tapDesc"),Zt(this,"tapReward"),Zt(this,"battleContainer"),Zt(this,"lblHdrRound"),Zt(this,"lblHdrWinLose"),Zt(this,"lblHdrGem"),Zt(this,"lblHdrHonor"),Zt(this,"lblHdrGuild"),Zt(this,"rewardBattleList"),Zt(this,"serverContainer"),Zt(this,"lblHdrRoundServer"),Zt(this,"lblHdrMedalServer"),Zt(this,"lblHdrGemServer"),Zt(this,"lblHdrHonorServer"),Zt(this,"lblHdrGuildServer"),Zt(this,"rewardServerList"),this.height=t.POPUP_HEIGHT,this.tapDesc=new Rqt(RB.getText("GWT_9","라운드별 전투 보상"),260),this.tapDesc.x=28,this.tapDesc.y=t.TAB_Y,this.tapDesc.selected=!0,this.tapDesc.onClick=this.onDescTap.bind(this),this.contentContainer.addChild(this.tapDesc),this.tapReward=new Rqt(RB.getText("GWT_11","서버 보상"),260),this.tapReward.x=this.tapDesc.x+this.tapDesc.width+4,this.tapReward.y=this.tapDesc.y,this.tapReward.onClick=this.onRewardTap.bind(this),this.contentContainer.addChild(this.tapReward),this.battleContainer=new Ve,this.contentContainer.addChild(this.battleContainer);
+ const i=sD.DEFAULT_OUTLINE_FONT_OPTION_16;
+ this.lblHdrRound=new QD("",8947848,i),this.lblHdrWinLose=new QD("",8947848,i),this.lblHdrGem=new QD("",8947848,i),this.lblHdrHonor=new QD("",8947848,i),this.lblHdrGuild=new QD("",8947848,i),this.battleContainer.addChild(this.lblHdrRound),this.battleContainer.addChild(this.lblHdrWinLose),this.battleContainer.addChild(this.lblHdrGem),this.battleContainer.addChild(this.lblHdrHonor),this.battleContainer.addChild(this.lblHdrGuild),this.rewardBattleList=new TR(Tri,Tri.ITEM_WIDTH,t.LIST_HEIGHT,2),this.rewardBattleList.x=t.REWARD_LIST_X,this.battleContainer.addChild(this.rewardBattleList),this.serverContainer=new Ve,this.serverContainer.visible=!1,this.contentContainer.addChild(this.serverContainer),this.lblHdrRoundServer=new QD("",8947848,i),this.lblHdrMedalServer=new QD("",8947848,i),this.lblHdrGemServer=new QD("",8947848,i),this.lblHdrHonorServer=new QD("",8947848,i),this.lblHdrGuildServer=new QD("",8947848,i),this.lblHdrMedalServer.align="center",this.serverContainer.addChild(this.lblHdrRoundServer),this.serverContainer.addChild(this.lblHdrMedalServer),this.serverContainer.addChild(this.lblHdrGemServer),this.serverContainer.addChild(this.lblHdrHonorServer),this.serverContainer.addChild(this.lblHdrGuildServer),this.rewardServerList=new TR(Ori,Ori.ITEM_WIDTH,t.LIST_HEIGHT,2),this.rewardServerList.x=t.REWARD_LIST_X,this.serverContainer.addChild(this.rewardServerList),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ const t=SD.getTournamentSchedule();
+ if(null==t)return;
+ let i=RB.getText("GWT_1","서버 대항전"),s=1==t.split?"Mid":"Final";
+ i+=` (Season ${
+ t.season}
+  - ${
+ s}
+ )`,this.title=i,this.tapDesc.text=RB.getText("GWT_9","라운드별 전투 보상"),this.tapReward.text=RB.getText("GWT_11","서버 보상"),this.refreshRewardHeaders();
+ let e=[...SD.rewardBattleList.sort((t,i)=>i.kindNum-t.kindNum)].concat([...SD.rewardBattleLostList.sort((t,i)=>i.kindNum-t.kindNum)]);
+ this.rewardBattleList.dataProvider=e,this.rewardBattleList.scrollTo(0),this.rewardServerList.dataProvider=SD.rewardServerList,this.rewardServerList.scrollTo(0),this.tapDesc.selected=!0,this.tapReward.selected=!1,this.battleContainer.visible=!0,this.serverContainer.visible=!1,await this.loadImage(),super.show()}
+ refreshRewardHeaders(){
+ this.lblHdrRound.text=RB.getText("GWT_10","라운드"),this.lblHdrWinLose.text=RB.getText("GAME_116","승패"),this.lblHdrGem.text=RB.getText("COMMON_350","보석"),this.lblHdrHonor.text=RB.getText("GAME_88","명예코인"),this.lblHdrGuild.text=RB.getText("GAME_812","길드코인"),this.lblHdrRoundServer.text=RB.getText("GAME_116","승패");
+ const i=Math.floor(SD.rewardServerList[0].medalBuffTime/60/24);
+ this.lblHdrMedalServer.text=RB.getText("CASTLE_SPECIAL_NAME_6","훈장버프")+`\n(${
+ i}
+  Days)`,this.lblHdrGemServer.text=RB.getText("COMMON_350","보석"),this.lblHdrHonorServer.text=RB.getText("GAME_88","명예코인"),this.lblHdrGuildServer.text=RB.getText("GAME_812","길드코인");
+ const s=t.REWARD_LIST_X,e=t.CONTENT_Y;
+ this.lblHdrRound.x=s+.5*(120-this.lblHdrRound.width),this.lblHdrWinLose.x=s+Tri.winLoseX,this.lblHdrGem.x=s+Tri.gemX+10,this.lblHdrHonor.x=s+Tri.honorX,this.lblHdrGuild.x=s+Tri.guildX,this.lblHdrRound.y=e,this.lblHdrWinLose.y=e,this.lblHdrGem.y=e,this.lblHdrHonor.y=e,this.lblHdrGuild.y=e,this.lblHdrRoundServer.x=s+.5*(120-this.lblHdrRound.width),this.lblHdrMedalServer.x=s+Ori.medalX,this.lblHdrGemServer.x=s+Ori.gemX+10,this.lblHdrHonorServer.x=s+Ori.honorX,this.lblHdrGuildServer.x=s+Ori.guildX,this.lblHdrRoundServer.y=e,this.lblHdrMedalServer.y=e-.5*this.lblHdrGemServer.height,this.lblHdrGemServer.y=e,this.lblHdrHonorServer.y=e,this.lblHdrGuildServer.y=e,this.rewardBattleList.y=e+this.lblHdrRound.height+12,this.rewardServerList.y=this.lblHdrMedalServer.y+this.lblHdrMedalServer.height+12}
+ onDescTap(){
+ this.tapDesc.selected=!0,this.tapReward.selected=!1,this.battleContainer.visible=!0,this.serverContainer.visible=!1}
+ onRewardTap(){
+ this.tapDesc.selected=!1,this.tapReward.selected=!0,this.battleContainer.visible=!1,this.serverContainer.visible=!0}
+ getDefaultPositionY(){
+ return.5*ES.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Qt(Iri,"GuildWarTournamentRewardGuidePopup"),Zt(Iri,"_instance"),Zt(Iri,"POPUP_HEIGHT",720),Zt(Iri,"TAB_Y",80),Zt(Iri,"CONTENT_Y",145),Zt(Iri,"LIST_HEIGHT",520),Zt(Iri,"REWARD_LIST_X",30);
+ let kri=Iri;
SoundOptionButton 3 hunks, 210 statements
- const $hi=class t extends AYt{
- constructor(){
- super(),Xt(this,"topBg"),Xt(this,"divider1"),Xt(this,"divider2"),Xt(this,"lblMaxWave",new SD(Lhi()[0].label,14988422)),Xt(this,"lblAccWave",new SD(Lhi()[1].label,6710886)),Xt(this,"lblAccMedal",new SD(Lhi()[2].label,6710886)),Xt(this,"maxWaveArea",new $Vt),Xt(this,"accWaveArea",new $Vt),Xt(this,"accMedalArea",new $Vt),Xt(this,"list"),Xt(this,"line"),Xt(this,"myRanking"),this.initialize()}
- static getInstance(){
- return null==this.instance&&(this.instance=new t),this.instance}
- initialize(){
- this.setTitle(nB.getText("COMMON_20","랭킹")),this.topBg=new je(eS.getTexture("UI","Popup_Bg_01")),this.topBg.width=550,this.topBg.x=34,this.topBg.y=90,this.addChild(this.topBg),this.divider1=new je(eS.getTexture("UI","Popup_Base_01")),this.divider1.x=this.topBg.x+.33*this.topBg.width,this.divider1.y=this.topBg.y+.5*(this.topBg.height-this.divider1.height),this.addChild(this.divider1),this.divider2=new je(eS.getTexture("UI","Popup_Base_01")),this.divider2.x=this.topBg.x+.67*this.topBg.width,this.divider2.y=this.divider1.y,this.addChild(this.divider2),this.lblMaxWave.wordWrap=!0,this.lblMaxWave.wordWrapWidth=150,this.lblMaxWave.lineHeight=14,this.lblMaxWave.align="center",this.lblMaxWave.x=this.topBg.x+.5*(.33*this.topBg.width-this.lblMaxWave.width),this.lblMaxWave.y=this.topBg.y+.5*(this.topBg.height-this.lblMaxWave.height),this.addChild(this.lblMaxWave),this.lblAccWave.wordWrap=!0,this.lblAccWave.wordWrapWidth=150,this.lblAccWave.lineHeight=14,this.lblAccWave.align="center",this.lblAccWave.x=this.divider1.x+.5*(.34*this.topBg.width-this.lblAccWave.width),this.lblAccWave.y=this.topBg.y+.5*(this.topBg.height-this.lblAccWave.height),this.addChild(this.lblAccWave),this.lblAccMedal.wordWrap=!0,this.lblAccMedal.wordWrapWidth=150,this.lblAccMedal.lineHeight=14,this.lblAccMedal.align="center",this.lblAccMedal.x=this.divider2.x+.5*(.33*this.topBg.width-this.lblAccMedal.width),this.lblAccMedal.y=this.topBg.y+.5*(this.topBg.height-this.lblAccMedal.height),this.addChild(this.lblAccMedal),this.maxWaveArea.width=.33*this.topBg.width,this.maxWaveArea.height=this.topBg.height,this.accWaveArea.width=.33*this.topBg.width,this.accWaveArea.height=this.topBg.height,this.accMedalArea.width=.33*this.topBg.width,this.accMedalArea.height=this.topBg.height,this.accWaveArea.x=this.divider1.x+this.divider1.width,this.accMedalArea.x=this.divider2.x+this.divider2.width,this.maxWaveArea.alpha=0,this.accWaveArea.alpha=0,this.accMedalArea.alpha=0,this.maxWaveArea.y=this.topBg.y,this.accWaveArea.y=this.topBg.y,this.accMedalArea.y=this.topBg.y,this.maxWaveArea.eventMode="dynamic",this.maxWaveArea.on("pointertap",this.onMaxWaveClick,this),this.accWaveArea.eventMode="dynamic",this.accWaveArea.on("pointertap",this.onAccWaveClick,this),this.accMedalArea.eventMode="dynamic",this.accMedalArea.on("pointertap",this.onAccMedalClick,this),this.addChild(this.maxWaveArea),this.addChild(this.accWaveArea),this.addChild(this.accMedalArea),this.list=new E6(Hhi,570,500,2),this.list.x=this.bg.x+.5*(this.bg.width-570),this.addChild(this.list),this.line=new je(eS.getTexture("UI","Popup_Line_01")),this.line.width=547,this.line.x=this.bg.x+.5*(this.bg.width-this.line.width),this.line.y=this.list.y+this.list.height+10,this.addChild(this.line),this.myRanking=new Hhi,this.myRanking.x=this.list.x,this.myRanking.y=this.line.y+this.line.height+10,this.addChild(this.myRanking),this.myRanking.eventMode="static",this.myRanking.on("pointertap",()=>this.myRanking.onClick(0,0)),this.outSideClickHide=!0}
- async setData(){
- this.setTitle(nB.getText("COMMON_20","랭킹")),this.txtTitle.x=this.topBg.x+.5*(this.topBg.width-this.txtTitle.width);
- const t=Lhi();
- this.lblMaxWave.text=t[0].label,this.lblAccWave.text=t[1].label,this.lblAccMedal.text=t[2].label,await Ohi.getInstance().loadRanking(),this.list.dataProvider=Ohi.getInstance().getRankingList(),this.myRanking.setData(Ohi.getInstance().getMyRanking()),this.updateLayout()}
- onMaxWaveClick(){
- Ohi.getInstance().selectedIndex=Lhi()[0].index,this.lblMaxWave.textColor=14988422,this.lblAccWave.textColor=6710886,this.lblAccMedal.textColor=6710886,this.setData()}
- onAccWaveClick(){
- Ohi.getInstance().selectedIndex=Lhi()[1].index,this.lblMaxWave.textColor=6710886,this.lblAccWave.textColor=14988422,this.lblAccMedal.textColor=6710886,this.setData()}
- onAccMedalClick(){
- Ohi.getInstance().selectedIndex=Lhi()[2].index,this.lblMaxWave.textColor=6710886,this.lblAccWave.textColor=6710886,this.lblAccMedal.textColor=14988422,this.setData()}
- updateLayout(){
- this.list.y=this.topBg.y+this.topBg.height+17;
- const t=this.bottom.y-20-this.list.y-this.myRanking.height-20;
- this.list.setListHeight(t),this.line.y=this.list.y+this.list.height+10,this.myRanking.y=this.line.y+this.line.height+10}
+ const aoi=class extends TJt{
+ constructor(t){
+ super(t),Zt(this,"_enabled",!0),this.outlineText=!0}
+ get enabled(){
+ return this._enabled}
+ set enabled(t){
+ t!=this._enabled&&(this._enabled=t,this._enabled?(this.text="ON",this.color=TJt.COLOR_SAND_BROWN):(this.text="OFF",this.color=TJt.COLOR_GRAY))}
- qt($hi,"RankingPopup"),Xt($hi,"instance",null);
+ Qt(aoi,"SoundOptionButton");
+ let coi=aoi;
+ const loi=class t extends Ve{
+ constructor(i=570,s=58){
+ super(),Zt(this,"barW"),Zt(this,"barH"),Zt(this,"segW"),Zt(this,"track",new ip),Zt(this,"selectedBg",new ip),Zt(this,"icons",[]),Zt(this,"labels",[]),Zt(this,"selected",0),Zt(this,"onSelect",Qt(()=>{
+ }
+ ,"onSelect")),this.barW=i,this.barH=s;
+ const{
+ PAD:e,GAP:n}
+ =t;
+ this.segW=(i-2*e-2*n)/3,this.track.roundRect(0,0,i,s,.5*s).fill(2300949),this.track.eventMode="none",this.addChild(this.track),this.selectedBg.eventMode="none",this.addChild(this.selectedBg);
+ for(let h=0;
+ h<3;
+ h++){
+ const i=new Ye(kS.getTexture("UI_Ekkorr",noi[h]));
+ i.scale.set(26/i.texture.height),i.eventMode="none",this.addChild(i),this.icons.push(i);
+ const r=new QD("",t.OFF_TEXT,sD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ r.eventMode="none",this.addChild(r),this.labels.push(r);
+ const o=new Ve;
+ o.hitArea=new Ui(e+h*(this.segW+n),0,this.segW,s),o.eventMode="static",o.cursor="pointer",o.on("pointertap",()=>this.onSelect(h)),this.addChild(o)}
+ }
+ setLabels(t){
+ for(let i=0;
+ i<3;
+ i++)this.labels[i].text=t[i]??"";
+ this.layoutSegments()}
+ setSelected(i){
+ this.selected=i;
+ const{
+ PAD:s,GAP:e}
+ =t,n=this.barH-2*s;
+ this.selectedBg.clear().roundRect(s+i*(this.segW+e),s,this.segW,n,.5*n).fill(8018480);
+ for(let h=0;
+ h<3;
+ h++)this.labels[h].textColor=h===i?t.ON_TEXT:t.OFF_TEXT}
+ get selectedIndex(){
+ return this.selected}
+ layoutSegments(){
+ const{
+ PAD:i,GAP:s}
+ =t;
+ for(let t=0;
+ t<3;
+ t++){
+ const e=this.icons[t],n=this.labels[t];
+ n.scale.set(1);
+ const h=this.segW-e.width-8-20;
+ n.width>h&&n.scale.set(h/n.width);
+ const r=e.width+8+n.width,o=i+t*(this.segW+s)+.5*(this.segW-r);
+ e.x=o,e.y=.5*(this.barH-e.height),n.x=o+e.width+8,n.y=.5*(this.barH-n.height)}
+ }
+ get barWidth(){
+ return this.barW}
+ }
+ ;
+ Qt(loi,"RankingTabBar"),Zt(loi,"PAD",5),Zt(loi,"GAP",4),Zt(loi,"ON_TEXT",16774365),Zt(loi,"OFF_TEXT",10193523);
+ let uoi=loi;
+ const doi=class t extends Ve{
+ constructor(i,s,e,n,h){
+ super(),Zt(this,"badge"),Zt(this,"lblName"),Zt(this,"lblLv"),Zt(this,"pedestal",new ip),Zt(this,"pedIcon"),Zt(this,"pedValue"),Zt(this,"userName",""),this.place=i,this.badgeSize=s,this.pedH=e,this.pedColor=n,this.panelH=h,this.badge=new Ye(kS.getTexture("UI_Ekkorr",`Icon_RankBadge_0${
+ i}
+ `)),this.badge.width=s,this.badge.height=s,this.addChild(this.badge),this.lblName=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblName),this.lblLv=new QD("",13216120),this.lblLv.textSize=13,this.addChild(this.lblLv),this.addChild(this.pedestal),this.pedIcon=new Ye(kS.getTexture("UI_Ekkorr",noi[0])),this.addChild(this.pedIcon),this.pedValue=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_20),this.addChild(this.pedValue);
+ for(const t of[this.badge,this.lblName,this.lblLv,this.pedestal,this.pedIcon,this.pedValue])t.eventMode="none";
+ this.hitArea=new Ui(0,0,t.W,h),this.eventMode="static",this.cursor="pointer",this.on("pointertap",()=>{
+ this.userName&&eoi.getInstance().open(this.userName)}
+ )}
+ setData(i){
+ if(this.visible=void 0!==i,!i)return;
+ const s=t.W;
+ this.userName=String(i.name??"");
+ const e=this.panelH-this.pedH;
+ this.pedestal.clear().roundRect(.5*(s-156),e,156,this.pedH+14,12).fill(this.pedColor);
+ const n=qri.getInstance().selectedIndex;
+ this.pedIcon.texture=kS.getTexture("UI_Ekkorr",noi[n]??noi[0]),this.pedIcon.scale.set(22/this.pedIcon.texture.height),this.pedValue.text=hoi(i);
+ const h=this.pedIcon.width+6+this.pedValue.width;
+ this.pedIcon.x=.5*(s-h),this.pedIcon.y=e+.5*(this.pedH-this.pedIcon.height),this.pedValue.x=this.pedIcon.x+this.pedIcon.width+6,this.pedValue.y=e+.5*(this.pedH-this.pedValue.height),this.lblLv.text=`Lv.${
+ Math.floor(Number(i.maxWave??0)/100)}
+ `,this.lblLv.x=.5*(s-this.lblLv.width),this.lblLv.y=e-8-this.lblLv.height,this.lblName.text=this.userName,this.lblName.textColor=this.userName===EG.name?16767370:16777215,this.lblName.scale.set(1);
+ const r=s-8;
+ this.lblName.width>r&&this.lblName.scale.set(r/this.lblName.width),this.lblName.x=.5*(s-this.lblName.width),this.lblName.y=this.lblLv.y-2-this.lblName.height,this.badge.x=.5*(s-this.badgeSize),this.badge.y=this.lblName.y-2-this.badgeSize}
+ }
+ ;
+ Qt(doi,"PodiumColumn"),Zt(doi,"W",176);
+ let foi=doi;
+ const poi=class t extends Ve{
+ constructor(i=570){
+ super(),Zt(this,"columns");
+ const s=t.H,e=(new ip).roundRect(0,0,i,s,18).fill(2300949);
+ e.eventMode="none",this.addChild(e);
+ const n=new Ve,h=(new ip).roundRect(0,0,i,s,18).fill(16777215);
+ h.eventMode="none",this.addChild(h),n.mask=h,this.addChild(n),this.columns=[new foi(2,100,52,8093060,s),new foi(1,124,64,11106869,s),new foi(3,100,42,9132599,s)];
+ const r=3*foi.W+20;
+ this.columns.forEach((t,s)=>{
+ t.x=.5*(i-r)+s*(foi.W+10),n.addChild(t)}
+ )}
+ setData(t){
+ this.columns[0].setData(t[1]),this.columns[1].setData(t[0]),this.columns[2].setData(t[2])}
+ }
+ ;
+ Qt(poi,"RankingPodium"),Zt(poi,"H",250);
+ let goi=poi;
+ function woi(t,i,s){
+ if(!(t>1)||0===s.length)return null;
+ const e=s.find(i=>i.rank===t-1),n=s[s.length-1],h=e??(t>n.rank?n:null);
+ return h?{
+ rank:h.rank,gap:Math.max(0,h.value-i)}
+ :null}
+ Qt(woi,"rankGap");
+ const moi=class t extends gqt{
+ constructor(){
+ super(),Zt(this,"tabs",new uoi(t.W,58)),Zt(this,"podium",new goi(t.W)),Zt(this,"list"),Zt(this,"lblMyTitle",new QD("",13216120)),Zt(this,"myCard",new Ve),Zt(this,"myBadge",new i0t(66)),Zt(this,"myName"),Zt(this,"myLv",new QD("",16769704)),Zt(this,"myValueIcon"),Zt(this,"myValue"),Zt(this,"myGap",new QD("",16767370)),Zt(this,"lblHideTeam",new QD("",12298639)),Zt(this,"hideTeamButton",new coi("ON")),Zt(this,"savingPrivacy",!1),this.myName=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_20),this.myValueIcon=new Ye(kS.getTexture("UI_Ekkorr",noi[0])),this.myValue=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_20),this.initialize()}
+ static getInstance(){
+ return null==this.instance&&(this.instance=new t),this.instance}
+ get contentX(){
+ return this.bg.x+.5*(this.bg.width-t.W)}
+ initialize(){
+ this.setTitle(RB.getText("COMMON_20","랭킹")),this.tabs.onSelect=t=>this.onTabSelect(t),this.addChild(this.tabs),this.addChild(this.podium),this.list=new b4(ooi,t.W,400,6),this.addChild(this.list),this.lblMyTitle.textSize=15,this.addChild(this.lblMyTitle);
+ const i=(new ip).roundRect(0,0,t.W,t.CARD_H,16).fill(5916464);
+ this.myCard.addChild(i),this.myBadge.x=8,this.myBadge.y=.5*(t.CARD_H-66),this.myCard.addChild(this.myBadge),this.myName.x=86,this.myName.y=14,this.myCard.addChild(this.myName),this.myLv.textSize=14,this.myLv.x=87,this.myLv.y=46,this.myCard.addChild(this.myLv),this.myCard.addChild(this.myValueIcon),this.myValue.textSize=22,this.myCard.addChild(this.myValue),this.myGap.textSize=15,this.myCard.addChild(this.myGap),this.addChild(this.myCard),i.eventMode="static",i.cursor="pointer",i.on("pointertap",()=>{
+ const t=qri.getInstance().getMyRanking();
+ (null==t?void 0:t.name)&&eoi.getInstance().open(t.name)}
+ ),this.lblHideTeam.textSize=16,this.lblHideTeam.setWrapWidth(400),this.addChild(this.lblHideTeam),this.hideTeamButton.scale.set(.75),this.hideTeamButton.enabled=!1,this.hideTeamButton.on("pointertap",()=>{
+ this.onHideTeamClick()}
+ ),this.addChild(this.hideTeamButton),this.outSideClickHide=!0}
+ async setData(){
+ this.setTitle(RB.getText("COMMON_20","랭킹")),this.txtTitle.x=this.top.x+.5*(this.top.width-this.txtTitle.width);
+ const t=qri.getInstance();
+ this.tabs.setLabels(ioi().map(t=>t.label)),this.tabs.setSelected(t.selectedIndex),this.lblMyTitle.text=RB.getText("COMMON_374","내 순위"),this.lblHideTeam.text=RB.getText("RANKING_HIDE_TEAM","내 팀 편성 숨기기"),this.hideTeamButton.enabled=EG.hideRankingTeam,this.updateLayout(),await t.loadRanking();
+ const i=t.getRankingList();
+ this.podium.setData(i.slice(0,3)),this.list.dataProvider=i.slice(3),this.setMyCard(),this.updateLayout()}
+ setMyCard(){
+ const i=qri.getInstance(),s=i.getMyRanking(),e=i.selectedIndex;
+ this.myBadge.setRank(Number((null==s?void 0:s.rank)??0)),this.myName.text=String((null==s?void 0:s.name)||EG.name||""),this.myLv.text=`Lv.${
+ Math.floor(Number((null==s?void 0:s.maxWave)??0)/100)}
+ `,this.myValueIcon.texture=kS.getTexture("UI_Ekkorr",noi[e]??noi[0]),this.myValueIcon.scale.set(24/this.myValueIcon.texture.height),this.myValue.text=s?hoi(s):"0";
+ const n=Qt(t=>0===e?t.maxWave:1===e?t.accuWave:t.accuMedal,"valueOf"),h=s?woi(Number(s.rank??0),Number(n(s)??0),i.getRankingList().map(t=>({
+ rank:t.rank,value:Number(n(t)??0)}
+ ))):null;
+ if(this.myGap.visible=null!==h,h){
+ const t=2===e?KD.displayLargeNumberAsAlphabet(h.gap):String(h.gap);
+ this.myGap.text=RB.getText("GAME_1918","{
+ 0}
+ 위까지 {
+ 1}
+ ").replace(/\{
+ 0\}
+ /g,String(h.rank)).replace(/\{
+ 1\}
+ /g,t)}
+ const r=t.W-18,o=t.CARD_H,a=h?12:.5*(o-this.myValue.height);
+ this.myValue.x=r-this.myValue.width,this.myValue.y=a,this.myValueIcon.x=this.myValue.x-this.myValueIcon.width-6,this.myValueIcon.y=a+.5*(this.myValue.height-this.myValueIcon.height),this.myGap.x=r-this.myGap.width,this.myGap.y=50;
+ const c=Math.min(this.myValueIcon.x,this.myGap.visible?this.myGap.x:r)-12-this.myName.x;
+ this.myName.scale.set(1),this.myName.width>c&&this.myName.scale.set(c/this.myName.width)}
+ onTabSelect(t){
+ const i=ioi()[t];
+ i&&(qri.getInstance().selectedIndex=i.index,this.tabs.setSelected(t),this.setData())}
+ async onHideTeamClick(){
+ var t;
+ if(!this.savingPrivacy){
+ this.savingPrivacy=!0,this.hideTeamButton.eventMode="none",this.hideTeamButton.alpha=.5;
+ try{
+ const i=await ZL.getInstance().user.updateHideRankingTeam(!EG.hideRankingTeam,!0);
+ if(!0!==(null==i?void 0:i.success)||"boolean"!=typeof(null==(t=i.body)?void 0:t.hideRankingTeam))throw new Error("Could not save ranking team privacy");
+ EG.hideRankingTeam=i.body.hideRankingTeam,this.hideTeamButton.enabled=EG.hideRankingTeam}
+ catch(A0i){
+ bB.getInstance().show(RB.getText("RANKING_PRIVACY_SAVE_FAILED","팀 편성 공개 설정을 저장하지 못했습니다. 다시 시도해 주세요."))}
+ finally{
+ this.savingPrivacy=!1,this.hideTeamButton.eventMode="static",this.hideTeamButton.alpha=1}
+ }
+ }
+ updateLayout(){
+ const i=this.contentX;
+ this.tabs.x=i,this.tabs.y=90,this.podium.x=i,this.podium.y=this.tabs.y+58+12;
+ const s=this.bottom.y-20,e=this.hideTeamButton.height,n=Math.max(e,this.lblHideTeam.height),h=s-n;
+ this.lblHideTeam.x=i+8,this.lblHideTeam.y=h+.5*(n-this.lblHideTeam.height),this.hideTeamButton.x=i+t.W-this.hideTeamButton.width-4,this.hideTeamButton.y=h+.5*(n-e),this.myCard.x=i,this.myCard.y=h-8-t.CARD_H,this.lblMyTitle.x=i+6,this.lblMyTitle.y=this.myCard.y-6-this.lblMyTitle.height,this.list.x=i,this.list.y=this.podium.y+goi.H+12,this.list.setListHeight(Math.max(0,this.lblMyTitle.y-10-this.list.y))}
+ }
+ ;
+ Qt(moi,"RankingPopup"),Zt(moi,"instance",null),Zt(moi,"W",570),Zt(moi,"CARD_H",84);
- constructor(t){
- super(t),Xt(this,"_enabled",!0),this.outlineText=!0}
- get enabled(){
- return this._enabled}
- set enabled(t){
- t!=this._enabled&&(this._enabled=t,this._enabled?(this.text="ON",this.color=NXt.COLOR_SAND_BROWN):(this.text="OFF",this.color=NXt.COLOR_GRAY))}
- }
- ;
- qt(Goi,"SoundOptionButton");
- let Boi=Goi;
- const Uoi=class extends He{
PVP2BattleController 22 hunks, 182 statements
- async startBattle(t=10){
+ async startBattle(...t){
+ return this.startMarchBattle(...t)}
+ async startMarchBattle(t,i,s,e,n=10,h=null,r=null){
- await this.startBattleImpl(t)}
+ await this.startMarchBattleImpl(t,i,s,e,n,h,r)}
- async startBattleImpl(t=10){
- this.cleanup(),eP.getInstance().setBattleContext(Wx.Pvp),IU.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- for(const e of this.pvpTeamVOs)null==e||e.remove();
- this.pvpTeamVOs.length=0;
- const i=TR.getInstance().list,s=Math.min(i.length,10);
- for(let e=0;
- e<s;
- e++){
- const s=i[e];
- if(s.kindNum>=1e4)continue;
- const n=IR.getVO();
- n.id=-1,n.kindNum=s.kindNum,n.trans=s.trans,n.level=t,n.enhance=0,this.pvpTeamVOs.push(n)}
- await DB.getInstance().setSingleBackground("images/bg/pvp.png",this.BATTLEFIELD_WIDTH,this.BATTLEFIELD_HEIGHT),nui.zoomEnabled=!1,this.cameraX=0,this.applyCameraPosition(),await this.setupEnemies(t),await this.setupHeroTeam(),await this.setupCastles(t),this.setupEnemyLists(),this.createTimerUI(),eli.getInstance().switchToBattle(this),nui.zoomEnabled=!1,this.applyCameraPosition(),IB.getInstance().remove(this.execute,this),await new Promise(t=>setTimeout(t,3e3)),this.pvpStarted=!0,IB.getInstance().add(this.execute,this)}
- async startMarchBattle(t,i,s,e,n=10,h=null){
- try{
- await this.startMarchBattleImpl(t,i,s,e,n,h)}
- catch(oht){
- throw eP.getInstance().setBattleContext(Wx.Normal),oht}
- }
- async startMarchBattleImpl(t,i,s,e,n=10,h=null){
- this.cleanup(),this.marchMode=!0,this.opTransPoints=h,eP.getInstance().setBattleContext(Wx.Pvp),IU.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- for(const r of this.pvpTeamVOs)null==r||r.remove();
- this.pvpTeamVOs.length=0;
+ async startMarchBattleImpl(t,i,s,e,n,h,r){
+ this.cleanup(),this.opTransPoints=h,kP.getInstance().setBattleContext(wP.Pvp),EF.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0;
- await this.setupMarchAllies(),await this.setupMarchEnemies(s,e,n),this.setupEnemyLists(),this.createTimerUI(),eli.getInstance().switchToBattle(this),DB.getInstance().setBackground(NB.PVP2),nui.zoomEnabled=!1,IB.getInstance().remove(this.execute,this),await KB.getInstance().play(),this.pvpStarted=!0,IB.getInstance().add(this.execute,this)}
- async setupMarchCastles(t){
- const i=await X3.getInstance().getUnit(gR.ElfTown5);
- 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),VB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
- const s=await X3.getInstance().getUnit(gR.ElfTown5);
- s.battleController=this,s.totalDamageDealt=0,this.initializeUnitByKindNum(s,10001,t),s.detectRange=1400,s.detectRange2=s.detectRange*s.detectRange,s.atkRange=250,s.atkRange2=s.atkRange*s.atkRange,s.numShot=1,s.x=s.xDefault=this.MARCH_ALLY_CASTLE_X,s.y=s.yDefault=this.MARCH_ALLY_CASTLE_Y,s.healthBar.setHealthColor(!0),VB.getInstance().addChild(s),this.friendList.push(s),this.allyCastle=s}
- async setupMarchAllies(){
- const i=this.pvpTeamVOs;
- if(i&&0!==i.length)for(let s=0;
- s<i.length;
+ await this.setupAllies(),await this.setupEnemies(s,e,n),this.setupEnemyLists(),this.createTimerUI(),Rui.getInstance().switchToBattle(this),Ydi.zoomEnabled=!1,this.applyZoom(),iU.getInstance().remove(this.execute,this),await this.arena.show((null==r?void 0:r.grade)??1),r?await this.introBanner.play(u7t.getInstance(),r.ally,r.enemy):await CU.getInstance().play(),this.pvpStarted=!0,iU.getInstance().add(this.execute,this)}
+ async setupAllies(){
+ for(let i=0;
+ i<this.pvpTeamVOs.length;
- const e=i[s];
+ const s=this.pvpTeamVOs[i];
- n.x=h.x,n.y=h.y,n.xDefault=h.x+320,n.yDefault=h.y,n.lookAt(1),n.totalDamageDealt=0,n.healthBar.setHealthColor(!0),n.isAir&&n.onFlyEnter(!0),VB.getInstance().addChild(n),this.friendList.push(n)}
+ e.x=n.x,e.y=n.y,e.xDefault=n.x+320,e.yDefault=n.y,e.lookAt(1),e.totalDamageDealt=0,e.healthBar.setHealthColor(!0),e.isAir&&e.onFlyEnter(!0),SU.getInstance().addChild(e),this.friendList.push(e),this.allyRoster.push(this.toRosterEntry(e,s.kindNum,s.trans))}
- async setupMarchEnemies(i,s,e){
+ async setupEnemies(i,s,e){
- o.x=a.x,o.y=a.y,o.xDefault=a.x-320,o.yDefault=a.y,o.lookAt(-1),o.totalDamageDealt=0,o.healthBar.setHealthColor(!1),VB.getInstance().addChild(o),this.enemyList.push(o)}
+ o.x=a.x,o.y=a.y,o.xDefault=a.x-320,o.yDefault=a.y,o.lookAt(-1),o.totalDamageDealt=0,o.healthBar.setHealthColor(!1),SU.getInstance().addChild(o),this.enemyList.push(o),this.enemyRoster.push(this.toRosterEntry(o,h,s[n]))}
- async spawnMarchAlly(t){
- const i=await X3.getInstance().getUnit(t.className);
- 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),VB.getInstance().addChild(i),this.friendList.push(i)}
- async spawnMarchEnemy(t,i){
- const s=TR.getInstance().getBookVO(t);
- if(!s)return;
- const e=await X3.getInstance().getUnit(s.className);
- 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,VB.getInstance().addChild(e),this.enemyList.push(e)}
- updateCamera(){
- let t=0,i=0;
- for(const r of this.friendList)r!==this.allyCastle&&r.isAlive&&(t+=r.x,i++);
- const s=i>0?t/i:this.ALLY_CASTLE_X,e=this.VIEWPORT_WIDTH/2-s*this.GAME_ZOOM,n=-(this.BATTLEFIELD_WIDTH*this.GAME_ZOOM-this.VIEWPORT_WIDTH),h=Math.max(n,Math.min(0,e));
- this.cameraX+=(h-this.cameraX)*this.CAMERA_LERP,this.applyCameraPosition()}
- applyCameraPosition(){
+ applyZoom(){
+ const i=t.ZOOM,s=EF.getInstance();
+ this.savedView||(this.savedView={
+ scale:s.scale.x,x:s.x,y:s.y}
+ ),s.scale.set(i),s.x=320-320*i,s.y=ES.SAFE_AREA_TOP+640*(1-i)}
+ restoreZoom(){
+ if(!this.savedView)return;
- t.scale.set(this.GAME_ZOOM),t.x=this.cameraX,t.y=Xy.SAFE_AREA_TOP+this.VIEWPORT_WIDTH*(1-this.GAME_ZOOM)}
+ t.scale.set(this.savedView.scale),t.x=this.savedView.x,t.y=this.savedView.y,this.savedView=null}
+ toRosterEntry(t,i,s){
+ return{
+ unit:t,kindNum:i,trans:s,maxHp:t.maxHp,damage:0}
+ }
+ setupEnemyLists(){
+ for(const t of this.friendList)t.enemyList=this.enemyList,t.allyList=this.friendList;
+ for(const t of this.enemyList)t.enemyList=this.friendList,t.allyList=this.enemyList}
+ initializeUnitByKindNum(t,i,s=1,e=0,n=!1){
+ const h=ix.getVO();
+ 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=ZR.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)}
+ }
+ isRosterAlive(t,i){
+ const s=t.unit;
+ return s.isAlive&&!s.isSummoned&&s.kindNum===t.kindNum&&i.includes(s)}
+ hpEntries(t,i){
+ return t.map(t=>({
+ hp:t.unit.hp,maxHp:t.maxHp,alive:this.isRosterAlive(t,i)}
+ ))}
+ get allyHpRatio(){
+ return h0t(this.hpEntries(this.allyRoster,this.friendList))}
+ get enemyHpRatio(){
+ return h0t(this.hpEntries(this.enemyRoster,this.enemyList))}
+ isRosterWiped(t,i){
+ return t.every(t=>!this.isRosterAlive(t,i))}
+ trackDamage(){
+ for(const t of this.allyRoster)this.isRosterAlive(t,this.friendList)&&(t.damage=Math.max(t.damage,t.unit.totalDamageDealt))}
+ getMvp(){
+ this.trackDamage();
+ let t=null,i=0;
+ for(const s of this.allyRoster)i+=s.damage,(!t||s.damage>t.damage)&&(t=s);
+ return!t||t.damage<=0?null:{
+ kindNum:t.kindNum,trans:t.trans,damage:t.damage,share:t.damage/i}
+ }
- this.removeTimerUI(),this.timerText=new jg({
+ this.removeTimerUI();
+ const i=u7t.getInstance();
+ this.hpGauge.reset(),this.hpGauge.y=14,i.addChild(this.hpGauge),this.timerText=new dw({
- ),this.timerText.anchor.set(.5,0),this.timerText.x=320,this.timerText.y=8,$4t.getInstance().addChild(this.timerText),this.speedHelper.enter(),this.speedHelper.attachButton($4t.getInstance(),380,6)}
+ ),this.timerText.anchor.set(.5,0),this.timerText.x=320,this.timerText.y=8,i.addChild(this.timerText),this.speedHelper.enter(),this.speedHelper.attachButton(i,562,44)}
- this.timerText&&(this.timerText.parent&&this.timerText.parent.removeChild(this.timerText),this.timerText.destroy(),this.timerText=null)}
+ var t;
+ null==(t=this.hpGauge.parent)||t.removeChild(this.hpGauge),this.timerText&&(this.timerText.parent&&this.timerText.parent.removeChild(this.timerText),this.timerText.destroy(),this.timerText=null)}
- async setupEnemies(t){
- const i=TR.getInstance().bookList.filter(t=>t.kindNum<1e4);
- if(0===i.length)return;
- const s=[];
- for(let h=0;
- h<this.ENEMY_COUNT;
- h++){
- const t=i[this.random.nextInt(i.length)];
- s.push(t.kindNum)}
- const e=(this.Y_MAX-this.Y_MIN)/(this.ENEMY_COUNT-1),n=(this.ENEMY_COUNT-1)/2;
- for(let h=0;
- h<this.ENEMY_COUNT;
- h++){
- const i=s[h],r=TR.getInstance().getBookVO(i);
- if(!r)continue;
- const o=await X3.getInstance().getUnit(r.className);
- o.battleController=this,o.totalDamageDealt=0,this.initializeUnitByKindNum(o,i,t,0,!0),o.detectRange=1400,o.detectRange2=o.detectRange*o.detectRange;
- const a=this.Y_MIN+h*e,c=Math.abs(h-n),l=this.ENEMY_SPAWN_X+c*this.CRANE_WING_ARC;
- o.x=l,o.y=a,o.xDefault=this.ALLY_CASTLE_X,o.yDefault=a,o.healthBar.setHealthColor(!1),VB.getInstance().addChild(o),this.enemyList.push(o)}
- }
- async setupHeroTeam(){
- const t=this.pvpTeamVOs;
- if(!t||0===t.length)return;
- const i=t.length,s=i>1?(this.Y_MAX-this.Y_MIN)/(i-1):0,e=(i-1)/2;
- for(let n=0;
- n<i;
- n++){
- const h=t[n],r=h.kindNum,o=TR.getInstance().getBookVO(r);
- if(!o)continue;
- const a=await X3.getInstance().getUnit(o.className);
- 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;
- const c=1===i?(this.Y_MIN+this.Y_MAX)/2:this.Y_MIN+n*s,l=Math.abs(n-e),u=this.ALLY_SPAWN_X-l*this.CRANE_WING_ARC;
- a.x=u,a.y=c,a.xDefault=this.ENEMY_CASTLE_X,a.yDefault=c,a.healthBar.setHealthColor(!0),VB.getInstance().addChild(a),this.friendList.push(a)}
- }
- async setupCastles(t){
- const i=await X3.getInstance().getUnit(gR.ElfTown5);
- 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),VB.getInstance().addChild(i),this.enemyList.push(i),this.enemyCastle=i;
- const s=await X3.getInstance().getUnit(gR.ElfTown5);
- s.battleController=this,s.totalDamageDealt=0,this.initializeUnitByKindNum(s,10001,t),s.detectRange=1400,s.detectRange2=s.detectRange*s.detectRange,s.atkRange=250,s.atkRange2=s.atkRange*s.atkRange,s.numShot=1,s.x=s.xDefault=this.ALLY_CASTLE_X,s.y=s.yDefault=this.ALLY_CASTLE_Y,s.healthBar.setHealthColor(!0),VB.getInstance().addChild(s),this.friendList.push(s),this.allyCastle=s}
- setupEnemyLists(){
- for(const t of this.friendList)t.enemyList=this.enemyList,t.allyList=this.friendList;
- for(const t of this.enemyList)t.enemyList=this.friendList,t.allyList=this.enemyList}
- initializeUnitByKindNum(t,i,s=1,e=0,n=!1){
- const h=IR.getVO();
- 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=TR.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)}
- }
- if(this.marchMode||this.updateCamera(),this.marchMode){
- if(this.allySpawnQueue.length>0&&(this.allySpawnTimer++,this.allySpawnTimer>=this.MARCH_SPAWN_INTERVAL)){
- this.allySpawnTimer=0;
- const t=this.allySpawnQueue.shift();
- this.spawnMarchAlly(t)}
- if(this.enemySpawnQueue.length>0&&(this.enemySpawnTimer++,this.enemySpawnTimer>=this.MARCH_SPAWN_INTERVAL)){
- this.enemySpawnTimer=0;
- const t=this.enemySpawnQueue.shift(),i=Math.floor(XD.maxWave/100);
- this.spawnMarchEnemy(t.kindNum,i)}
- }
- if(this.timerText&&!this.battleEnded){
+ if(this.battleEnded||(this.trackDamage(),this.hpGauge.setRatios(this.allyHpRatio,this.enemyHpRatio)),this.timerText&&!this.battleEnded){
- eP.getInstance().setBattleContext(Wx.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;
+ kP.getInstance().setBattleContext(wP.Normal),this.speedHelper.detachButton(),this.speedHelper.exit(),this.removeTimerUI(),this.introBanner.stop(),this.arena.clear(),this.pvpStarted=!1,this.opTransPoints=null,this.allyRoster.length=0,this.enemyRoster.length=0;
- nui.zoomEnabled=!0,super.cleanup()}
+ this.restoreZoom(),Ydi.zoomEnabled=!0,super.cleanup()}
- if(this.marchMode){
- if(0===this.enemySpawnQueue.length&&this.enemyList.every(t=>!t.isAlive))return!0;
- if(this.isTimeExpired()){
- const t=this.friendList.filter(t=>t.isAlive).length,i=this.enemyList.filter(t=>t.isAlive).length;
- return t>i}
- return!1}
- return!(!this.enemyCastle||this.enemyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp>this.enemyCastle.hp/this.enemyCastle.maxHp}
+ return!!this.isRosterWiped(this.enemyRoster,this.enemyList)||!!this.isTimeExpired()&&r0t(this.allyHpRatio,this.enemyHpRatio)}
- if(this.marchMode){
- if(0===this.allySpawnQueue.length&&this.friendList.every(t=>!t.isAlive||t.isSummoned))return!0;
- if(this.isTimeExpired()){
- const t=this.friendList.filter(t=>t.isAlive).length,i=this.enemyList.filter(t=>t.isAlive).length;
- return t<=i}
- return!1}
- return!(!this.allyCastle||this.allyCastle.isAlive)||!!(this.isTimeExpired()&&this.enemyCastle&&this.allyCastle)&&this.allyCastle.hp/this.allyCastle.maxHp<=this.enemyCastle.hp/this.enemyCastle.maxHp}
+ return!!this.isRosterWiped(this.allyRoster,this.friendList)||!!this.isTimeExpired()&&!r0t(this.allyHpRatio,this.enemyHpRatio)}
- A8t.getInstance().endBattle(!0),setTimeout(()=>{
- IB.getInstance().remove(this.execute,this),wZt.getInstance().showVictory()}
- ,2e3)}
+ this.finishBattle(!0)}
- A8t.getInstance().endBattle(!1),setTimeout(()=>{
- IB.getInstance().remove(this.execute,this),wZt.getInstance().showDefeat()}
+ this.finishBattle(!1)}
+ finishBattle(t){
+ this.hpGauge.setRatios(this.allyHpRatio,this.enemyHpRatio);
+ const i=this.getMvp(),s=t9t.getInstance().endBattle(t);
+ setTimeout(async()=>{
+ iU.getInstance().remove(this.execute,this),T0t.getInstance().showResult(t,await s,i)}
- this.onDefeatCallback()}
+ this.battleEnded=!0,this.onDefeatCallback()}
HeroMassiveBuyResultPopup 1 hunks, 176 statements
- super(),Xt(this,"infoBg"),Xt(this,"lblMessage1"),Xt(this,"lblMessage2"),Xt(this,"lblMessage3"),this.title=nB.getText("GAME_258","영웅 영입 지원 이벤트"),this.width=580,this.outSideClickHide=!0,this.infoBg=new aU,this.infoBg.setIndex(2),this.infoBg.width=this.width-46,this.infoBg.x=23,this.contentContainer.addChild(this.infoBg),this.lblMessage1=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage1),this.lblMessage2=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage2),this.lblMessage3=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage3)}
+ super(),Zt(this,"slotMsg"),Zt(this,"slotMsgBg"),Zt(this,"slotContainer"),Zt(this,"slotHeroIcons"),Zt(this,"slotHeroContainer"),Zt(this,"barrackMsg"),Zt(this,"barrackMsgBg"),Zt(this,"barrackContainer"),Zt(this,"barrackHeroIcons"),Zt(this,"barrackHeroContainer"),Zt(this,"btnHistory"),Zt(this,"btnConfirm"),Zt(this,"historyDescription",""),Zt(this,"slotKindnums",[]),Zt(this,"barrackKindnums",[]),this.btnClose.removeFromParent(),this.slotContainer=new Ve,this.addChild(this.slotContainer),this.slotMsgBg=new WU,this.slotMsgBg.setIndex(2),this.slotMsgBg.width=this.width-60,this.slotContainer.addChild(this.slotMsgBg);
+ const t=sD.LABEL_OPTION_NO_DROP_SHADOW;
+ t.fill=sD.DEFAULT_COLOR,this.slotMsg=new QD("",t.fill,t),this.slotMsg.y=15,this.slotContainer.addChild(this.slotMsg),sD.setLabelWrapWidth(this.slotMsg,this.slotMsgBg.width-40),this.slotHeroIcons=[],this.slotHeroContainer=new Ve,this.slotContainer.addChild(this.slotHeroContainer),this.barrackContainer=new Ve,this.addChild(this.barrackContainer),this.barrackMsgBg=new WU,this.barrackMsgBg.setIndex(2),this.barrackMsgBg.width=this.width-60,this.barrackContainer.addChild(this.barrackMsgBg),this.barrackMsg=new QD("",t.fill,t),this.barrackMsg.y=this.slotMsg.y,this.barrackContainer.addChild(this.barrackMsg),sD.setLabelWrapWidth(this.barrackMsg,this.barrackMsgBg.width-40),this.barrackHeroIcons=[],this.barrackHeroContainer=new Ve,this.barrackContainer.addChild(this.barrackHeroContainer),this.btnHistory=new sKt(""),this.addChild(this.btnHistory),this.btnHistory.onClick=this.onHistoryBtnClick.bind(this),this.btnConfirm=new hB(""),this.addChild(this.btnConfirm),this.btnConfirm.onClick=this.onConfirmBtnClick.bind(this),this.updateLanguage()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLanguage(){
+ this.title=RB.getText("GAME_1892","대량 구매"),this.slotMsg.text=RB.getText("GAME_274","병사가 슬롯에 추가되었습니다."),this.barrackMsg.text=RB.getText("GAME_209","병사가 [병영]으로 이동했습니다."),this.btnHistory.text=RB.getText("GAME_1893","구매내역"),this.btnConfirm.text=RB.getText("COMMON_1","확인"),this.historyDescription=RB.getText("GAME_1894","대량 구매에서 획득한 내역입니다."),this.updateLayout()}
+ updateLayout(){
+ let t=90;
+ this.slotContainer.visible&&(this.slotContainer.x=.5*(this.width-this.slotMsgBg.width),this.slotContainer.y=t,t+=this.slotContainer.height+50,this.slotMsg.x=.5*(this.slotMsgBg.width-this.slotMsg.width),this.slotHeroContainer.x=this.slotMsgBg.x+.5*(this.slotMsgBg.width-this.slotHeroContainer.width)),this.barrackContainer.visible&&(this.barrackContainer.x=.5*(this.width-this.barrackMsgBg.width),this.barrackContainer.y=t,t+=this.barrackContainer.height+50,this.barrackMsg.x=.5*(this.barrackMsgBg.width-this.barrackMsg.width),this.barrackHeroContainer.x=this.barrackMsgBg.x+.5*(this.barrackMsgBg.width-this.barrackHeroContainer.width)),this.btnHistory.x=.5*(this.width-this.btnHistory.width-this.btnConfirm.width-20),this.btnConfirm.x=this.btnHistory.x+this.btnHistory.width+20,this.btnHistory.y=t,this.btnConfirm.y=this.btnHistory.y,this.height=this.btnConfirm.y+this.btnConfirm.height+50}
+ setData(t,i,s,e){
+ if(this.slotKindnums.length=0,this.barrackKindnums.length=0,e.length==s.length)NR.softCopy(t,this.barrackKindnums);
+ else if(e.length-s.length==t.length){
+ NR.softCopy(t,this.slotKindnums);
+ for(let t=s.length;
+ t<e.length;
+ ++t){
+ const i=ZR.getInstance().getVOWithId(e[t]);
+ i&&Ydi.getInstance().hireHero(i)}
+ }
+ else{
+ for(let t=s.length;
+ t<e.length;
+ ++t){
+ const i=ZR.getInstance().getVOWithId(e[t]);
+ i&&(this.slotKindnums.push(i.kindNum),Ydi.getInstance().hireHero(i))}
+ for(let i=this.slotKindnums.length;
+ i<t.length;
+ ++i)this.barrackKindnums.push(t[i])}
+ this.slotContainer.visible=this.slotKindnums.length>0,this.barrackContainer.visible=this.barrackKindnums.length>0,this.updateLanguage();
+ let n=0;
+ if(this.slotContainer.visible){
+ UXt.getInstance().isHeroSubView()&&dQt.getInstance().setData(),this.slotMsgBg.height=this.slotMsg.height+2*this.slotMsg.y,this.slotHeroContainer.removeChildren(),this.slotHeroContainer.y=this.slotMsgBg.y+this.slotMsgBg.height+20;
+ const t=this.setGrouping(this.slotKindnums);
+ this.setResult(t.kindnums,t.values,this.slotHeroIcons,this.slotHeroContainer,this.slotMsgBg),this.slotHeroContainer.children.forEach((t,i)=>{
+ t.alpha=0,MR.killTweensOf(t),MR.to(t,{
+ alpha:1,duration:.4,delay:n+(10+10*i)/60,ease:"power2.out",onComplete:Qt(()=>{
+ t.alpha=1}
+ ,"onComplete")}
+ )}
+ ),n=(10+10*(this.slotHeroContainer.children.length-1))/60}
+ if(this.barrackContainer.visible){
+ UXt.getInstance().isHeroRosterView()&&DQt.getInstance().setData(),this.barrackMsgBg.height=this.barrackMsg.height+2*this.barrackMsg.y,this.barrackHeroContainer.removeChildren(),this.barrackHeroContainer.y=this.barrackMsgBg.y+this.barrackMsgBg.height+20;
+ const t=this.setGrouping(this.barrackKindnums);
+ this.setResult(t.kindnums,t.values,this.barrackHeroIcons,this.barrackHeroContainer,this.barrackMsgBg),this.barrackHeroContainer.children.forEach((t,i)=>{
+ t.alpha=0,MR.killTweensOf(t),MR.to(t,{
+ alpha:1,duration:.4,delay:n+(10+10*i)/60,ease:"power2.out",onComplete:Qt(()=>{
+ t.alpha=1}
+ ,"onComplete")}
+ )}
+ ),n+=(10+10*(this.barrackHeroContainer.children.length-1))/60}
+ this.updateLayout(),this.btnHistory.activated=!1,this.btnConfirm.activated=!1,setTimeout(()=>{
+ this.btnHistory.activated=!0,this.btnConfirm.activated=!0}
+ ,1e3*n+300)}
+ setGrouping(t){
+ const i={
+ }
+ ;
+ for(const s of t)i[s]?i[s]=i[s]+1:i[s]=1;
+ return{
+ kindnums:NR.convertToNumber(Object.keys(i)),values:NR.convertToNumber(Object.values(i))}
+ }
+ setResult(t,i,s,e,n){
+ let h,r,o=0,a=0,c=0;
+ for(let l=0;
+ l<t.length;
+ ++l)r=ZR.getInstance().getBookVO(t[l]),r&&(c<s.length?h=s[c]:(h=new e4,h.scale=.8,s.push(h)),h.setDataWithKindNum(r.kindNum),h.setCountText(`x${
+ i[l]}
+ `),h.x=o,h.y=a,e.addChild(h),c++,c%5==0?(o=0,a+=h.height):o+=h.width+1)}
+ onConfirmBtnClick(){
+ this.hide()}
+ onHistoryBtnClick(){
+ const t=this.setGrouping([...this.slotKindnums,...this.barrackKindnums]);
+ let i=this.getHistoryString(t.kindnums,t.values);
+ const s=u4.getInstance();
+ s.title=RB.getText("COMMON_4","알림"),s.setPositonRatioY(.45),s.show(`${
+ this.historyDescription}
+ \n\n${
+ i}
+ `)}
+ getHistoryString(t,i){
+ const s=[];
+ let e;
+ for(let n=0;
+ n<t.length;
+ ++n)e=ZR.getInstance().getBookVO(t[n]),e&&s.push(` - ${
+ RB.getText(e.getNameKey(),e.name)}
+  (x${
+ i[n]}
+ )`);
+ return s.join("\n")}
+ test(t){
+ let i=[67],s=[],e=[6777,6789],n=[6777,6787,6788];
+ 1==t?(i=[63,65,57,63,63],s=[],e=[6789,6790,6791,6792],n=[6789,6790,6791,6792,6793,6794]):2==t?(i=[63,65,57,63,63],s=[],e=[6789,6790,6791,6792],n=[6789,6790,6791,6792]):3==t&&(i=[53,51,68,51,57,64,61,67,25,59,61,79,79,51,79,59,55,65,68,64,25,53,62,59,66,57,55,69,66,64],s=[],e=[6804,6807,7032],n=[6804,6807,7032,7033,7034,7035]),this.setData(i,s,e,n),this.show()}
+ }
+ ;
+ Qt(QJt,"HeroMassiveBuyResultPopup"),Zt(QJt,"_instance");
+ let ZJt=QJt;
+ const tQt=class t extends uB{
+ constructor(){
+ super(),Zt(this,"lblDescription"),Zt(this,"requestPending",!1),Zt(this,"btnMedal",new m$("UI_GEM","10000","",.8,200,70)),Zt(this,"btnTicket",new m$("Ticket_UnitBuy","0/1","",.8,210,70)),Zt(this,"btnCancel",new Djt("취소",120)),Zt(this,"refreshCost",100),Zt(this,"massiveBuyCost",8e3),Zt(this,"massiveBuySize",100),this.width=620,this.height=350,this.btnClose.visible=!0,this.btnClose.onClick=this.hide.bind(this);
+ const t={
+ ...sD.DEFAULT_FONT_OPTION_17}
+ ;
+ t.align="center",t.lineHeight=28,this.lblDescription=new QD("",sD.DEFAULT_COLOR,t),this.lblDescription.y=90,this.btnMedal.color=m$.GREEN,this.btnTicket.color=m$.GREEN,this.btnCancel.height=70,this.contentContainer.addChild(this.lblDescription,this.btnMedal,this.btnTicket,this.btnCancel),this.btnMedal.onClick=this.onMedalClick.bind(this),this.btnTicket.onClick=this.onTicketClick.bind(this),this.btnCancel.onClick=this.hide.bind(this),this.updateLanguage()}
+ static getInstance(){
+ return this.instance||(this.instance=new t),this.instance}
+ udpateMassiveBuyCost(){
+ const t=parseInt(SG.getInstance().getClientData("HERO_PAID_REFRESH_COST"));
+ this.refreshCost=isNaN(t)?100:t;
+ const i=parseInt(SG.getInstance().getClientData("HERO_MASSIVE_BUY_GEM_COST"));
+ this.massiveBuyCost=isNaN(i)?this.massiveBuyCost:i;
+ const s=parseInt(SG.getInstance().getClientData("HERO_MASSIVE_SIZE"));
+ this.massiveBuySize=isNaN(s)?this.massiveBuySize:s}
+ showPopup(){
+ this.udpateMassiveBuyCost(),this.updateLanguage();
+ const t=UYt.getInstance().getMassiveTransTicket();
+ this.btnMedal.activated=EG.gem>=this.massiveBuyCost,this.btnMedal.iconLabel.text=`${
+ this.massiveBuyCost}
+ `,this.btnTicket.iconText=`${
+ t}
+ /1`,this.btnTicket.activated=t>=1,super.show()}
+ updateLanguage(){
+ var t;
+ this.title=RB.getText("GAME_1888","영웅 대량 구매");
+ const i=RB.getText("GAME_1892","대량 구매"),s=RB.getText("GAME_559","티켓");
+ this.btnMedal.text=i,this.btnTicket.text=`${
+ i}
+  (${
+ s}
+ )`,this.btnTicket.width=Math.max(210,this.btnTicket.textLabel.width+20),this.btnCancel.text=RB.getText("COMMON_2","취소");
+ const e=GB.isValidEvent(BB.HERO_RESET_EVENT)?Number(null==(t=GB.currentHeroResetEvent)?void 0:t.divide):1,n=(Number.isFinite(e)&&e>0?e:1)*Math.floor(this.massiveBuyCost/this.refreshCost),h=5*n,r=RB.getValueReplaceMulti("GAME_1889",["##","@@"],[n,h],`영웅 목록을 ${
+ n}
+ 회 새로고침하여, 영웅 총 ${
+ h}
+ 명을 훈장으로 한 번에 구매합니다.`),o=RB.getText("GAME_1890","구매한 영웅은 병영에 추가됩니다."),a=RB.getText("GAME_1891","영웅 대량 구매 하시겠습니까?");
+ this.lblDescription.text=`${
+ r}
+ \n${
+ o}
+ \n\n${
+ a}
+ `,sD.setLabelWrapWidth(this.lblDescription,this.width-70),this.lblDescription.x=.5*(this.width-this.lblDescription.width);
+ const c=this.btnMedal.width+this.btnTicket.width+this.btnCancel.width+20;
+ let l=.5*(this.width-c);
+ const u=this.height-this.btnMedal.height-24;
+ this.btnMedal.position.set(l,u),l+=this.btnMedal.width+10,this.btnTicket.position.set(l,u),l+=this.btnTicket.width+10,this.btnCancel.position.set(l,u)}
+ onMedalClick(){
+ this.buy(!1)}
+ onTicketClick(){
+ this.buy(!0)}
+ async buy(t){
+ if(!this.requestPending){
+ this.requestPending=!0,this.btnMedal.activated=!1,this.btnTicket.activated=!1;
+ try{
+ const i=await ZL.getInstance().hero.buyMassiveHeroes(t);
+ if(!1===(null==i?void 0:i.success)||!(null==i?void 0:i.body))return void bB.getInstance().showError(i);
+ const s=i.body;
+ EG.setUserInfo(s),void 0!==s.transTicket&&UYt.getInstance().setData(s.transTicket),xH.getInstance().updateAll(),oQt.getInstance().setData(),this.hide();
+ const e=(s.purchased??[]).flatMap(({
+ kindNum:t,count:i}
+ )=>Array(Math.max(0,Number(i)||0)).fill(Number(t))),n=ZR.getInstance().getTeamIds(),h=ZJt.getInstance();
+ h.setData(e,[],n,n),h.show()}
+ finally{
+ this.requestPending=!1;
+ const t=UYt.getInstance().getMassiveTransTicket();
+ this.btnMedal.activated=EG.gem>=this.massiveBuyCost,this.btnTicket.activated=t>=1}
+ }
+ }
+ }
+ ;
+ Qt(tQt,"HeroMassiveBuyPopup"),Zt(tQt,"instance");
+ let iQt=tQt;
+ const sQt=class t extends uB{
+ constructor(){
+ super(),Zt(this,"infoBg"),Zt(this,"lblMessage1"),Zt(this,"lblMessage2"),Zt(this,"lblMessage3"),Zt(this,"refreshCost",100),this.title=RB.getText("GAME_258","영웅 영입 지원 이벤트"),this.width=580,this.outSideClickHide=!0,this.infoBg=new WU,this.infoBg.setIndex(2),this.infoBg.width=this.width-46,this.infoBg.x=23,this.contentContainer.addChild(this.infoBg),this.lblMessage1=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage1),this.lblMessage2=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage2),this.lblMessage3=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.contentContainer.addChild(this.lblMessage3)}
RealmTransitionFx 5 hunks, 174 statements
- s.to(i,{
+ return o.to(r,{
+ ),h}
+ playSoft(i){
+ return this.playing=!0,this.visible=!0,this.cracks.clear(),this.ring.alpha=0,this.flash.clear().rect(0,0,t.FIELD,t.FIELD).fill(0),this.flash.alpha=0,new Promise(t=>{
+ this.onFinished=t,MR.to(this.flash,{
+ alpha:.9,duration:.25,ease:"power1.in",onComplete:Qt(()=>{
+ Promise.resolve().then(i).catch(t=>{
+ }
+ ).finally(()=>{
+ MR.to(this.flash,{
+ alpha:0,duration:.45,ease:"power1.out",onComplete:Qt(()=>this.finish(),"onComplete")}
+ )}
+ )}
+ ,"onComplete")}
+ )}
- this.cracks.clear(),this.visible=!1,this.playing=!1}
+ this.cracks.clear(),this.visible=!1,this.playing=!1;
+ const t=this.onFinished;
+ this.onFinished=null,null==t||t()}
- width:3+3*i,color:t.COLOR,alpha:.9}
+ width:3+3*t,color:this.lineColor,alpha:.9}
- qt(SU,"RealmTransitionFx"),Xt(SU,"FIELD",640),Xt(SU,"CENTER",320),Xt(SU,"COLOR",12124120);
+ Qt(vF,"RealmTransitionFx"),Zt(vF,"FIELD",640),Zt(vF,"CENTER",320);
+ let _F=vF;
+ const MF=class t{
+ constructor(){
+ Zt(this,"underRoot",new Ve),Zt(this,"overRoot",new Ve),Zt(this,"glowRoot",new Ve),Zt(this,"fogRoot",new Ve),Zt(this,"sparkRoot",new Ve),Zt(this,"runes",[]),Zt(this,"emblem",null),Zt(this,"fogs",[]),Zt(this,"fireflies",[]),Zt(this,"motes",[]),Zt(this,"runeSource",null),Zt(this,"haloTexture",t.buildGlowTexture(t.GLOW_TEX,"120,230,255")),Zt(this,"ticking",!1),Zt(this,"elapsed",0);
+ const i=t.FIELD;
+ this.underRoot.eventMode="none",this.overRoot.eventMode="none";
+ const s=new Ye(t.buildGradeTexture());
+ s.width=i,s.height=i,s.blendMode="multiply";
+ const e=new Ye(t.buildGlowTexture(t.GLOW_TEX,"255,190,210"));
+ e.anchor.set(.5),e.position.set(470,40),e.width=760,e.height=360,e.alpha=.32,e.blendMode="add",this.glowRoot.addChild(e);
+ const n=t.buildFogTexture();
+ for(const[a,c,l]of t.FOG_BANDS){
+ const s=new Ye(n);
+ s.anchor.set(.5),s.width=t.FOG_W*l*1.6,s.height=t.FOG_H*l*.8,s.position.set(Math.random()*i,a),s.alpha=t.FOG_BAND_ALPHA,this.fogRoot.addChild(s),this.fogs.push({
+ sprite:s,speed:c}
+ )}
+ this.underRoot.addChild(s,this.glowRoot,this.fogRoot);
+ const h=new Ye(n);
+ h.anchor.set(.5),h.position.set(320,i),h.width=900,h.height=210,h.alpha=t.FRONT_FOG_ALPHA;
+ const r=t.buildGlowTexture(t.GLOW_TEX,"190,255,235"),o=t.buildGlowTexture(t.GLOW_TEX,"255,236,170");
+ for(let a=0;
+ a<t.FIREFLY_COUNT;
+ a++){
+ const t=new Ye(a%3==0?o:r);
+ t.anchor.set(.5),t.blendMode="add",t.width=t.height=10+8*Math.random();
+ const i=a%2==0,s=i?20+600*Math.random():Math.random()<.5?20+120*Math.random():500+120*Math.random(),e=i?150+150*Math.random():300+320*Math.random();
+ this.sparkRoot.addChild(t),this.fireflies.push({
+ sprite:t,baseX:s,baseY:e,phase:Math.random()*Math.PI*2,speed:.35+.5*Math.random(),radius:14+22*Math.random()}
+ )}
+ for(let a=0;
+ a<t.MOTE_COUNT;
+ a++){
+ const i=new Ye(r);
+ i.anchor.set(.5),i.blendMode="add",i.width=i.height=5,this.sparkRoot.addChild(i);
+ const s={
+ sprite:i,x:0,y:0,age:0,life:1}
+ ;
+ t.respawnMote(s,a),s.age=Math.random()*s.life,this.motes.push(s)}
+ this.overRoot.addChild(h,this.sparkRoot),this.underRoot.visible=!1,this.overRoot.visible=!1}
+ prepare(t){
+ this.ensureRuneGlows(t)}
+ show(t){
+ this.ensureRuneGlows(t),this.underRoot.visible=!0,this.overRoot.visible=!0,this.ticking||(vn.shared.add(this.tick,this),this.ticking=!0)}
+ hide(){
+ this.underRoot.visible=!1,this.overRoot.visible=!1,this.ticking&&(vn.shared.remove(this.tick,this),this.ticking=!1)}
+ tick(i){
+ const s=i.deltaMS/1e3,e=this.elapsed+=s,n=t.FIELD;
+ for(const t of this.runes){
+ const i=.5+.5*Math.sin(1.1*e+t.phase);
+ t.sprite.alpha=.45+.55*i,t.halo&&(t.halo.alpha=.06+.12*i)}
+ this.emblem&&(this.emblem.alpha=.14+.06*Math.sin(.7*e));
+ for(const t of this.fogs){
+ const i=t.sprite;
+ i.x+=t.speed*s;
+ const e=i.width/2;
+ i.x>n+e?i.x=-e:i.x<-e&&(i.x=n+e)}
+ for(const t of this.fireflies){
+ const i=e*t.speed+t.phase;
+ t.sprite.x=t.baseX+Math.sin(i)*t.radius,t.sprite.y=t.baseY+Math.sin(1.7*i+1.3)*t.radius*.6,t.sprite.alpha=.2+.8*Math.max(0,Math.sin(e*(1.1+t.speed)+3*t.phase))}
+ for(let h=0;
+ h<this.motes.length;
+ h++){
+ const i=this.motes[h];
+ i.age+=s,i.age>=i.life&&t.respawnMote(i,h+Math.floor(e));
+ const n=i.age/i.life;
+ i.sprite.x=i.x+4*Math.sin(2*i.age+h),i.sprite.y=i.y-45*n,i.sprite.alpha=.9*Math.sin(Math.PI*n)}
+ }
+ static respawnMote(i,s){
+ const[e,n,h,r]=t.RUNES[s%t.RUNES.length];
+ i.x=e+(Math.random()-.5)*h,i.y=n+(Math.random()-.2)*r*.6,i.age=0,i.life=2.5+2*Math.random()}
+ ensureRuneGlows(i){
+ var s,e,n;
+ if(this.runeSource===i&&this.runes.length>0)return;
+ for(const t of this.runes)t.sprite.texture.destroy(!0),t.sprite.destroy(),null==(s=t.halo)||s.destroy();
+ let h;
+ null==(e=this.emblem)||e.texture.destroy(!0),null==(n=this.emblem)||n.destroy(),this.runes=[],this.emblem=null,this.runeSource=i;
+ try{
+ const s=new Ye(i),e=BS.app.renderer.extract.pixels({
+ target:s,resolution:1}
+ );
+ s.destroy(),h={
+ pixels:e.pixels,width:e.width,scale:e.width/t.FIELD}
+ }
+ catch(ort){
+ return}
+ t.RUNES.forEach(([i,s,e,n],r)=>{
+ const o=t.extractGlow(h,i,s,e,n,"rune",1);
+ if(!o)return;
+ const a=new Ye(this.haloTexture);
+ a.anchor.set(.5),a.position.set(i,s),a.width=1.9*e,a.height=1.35*n,a.blendMode="add",this.glowRoot.addChild(o,a),this.runes.push({
+ sprite:o,halo:a,phase:1.3*r}
+ )}
+ );
+ const[r,o,a,c]=t.EMBLEM;
+ this.emblem=t.extractGlow(h,r,o,a,c,"emblem",t.SOFT_RES),this.emblem&&this.glowRoot.addChild(this.emblem)}
+ static strokeAlpha(t,i,s,e){
+ if(s<140)return 0;
+ const n="rune"===e?(i-t-40)/30:(s-t-25)/25;
+ return Math.max(0,Math.min(1,n))}
+ static extractGlow(i,s,e,n,h,r,o){
+ const a=t.FIELD,c=t.GLOW_PAD,l=Math.max(0,s-n/2-c),u=Math.max(0,e-h/2-c),d=Math.min(a,s+n/2+c),f=Math.min(a,e+h/2+c),p=i.scale,g=Math.round(l*p),w=Math.round(u*p),m=Math.round((d-l)*p),v=Math.round((f-u)*p);
+ if(m<=0||v<=0)return null;
+ const _=document.createElement("canvas");
+ _.width=m,_.height=v;
+ const M=_.getContext("2d"),b=M.createImageData(m,v),y=i.pixels;
+ for(let k=0;
+ k<v;
+ k++)for(let s=0;
+ s<m;
+ s++){
+ const e=4*((w+k)*i.width+(g+s)),n=4*(k*m+s);
+ b.data[n]=150,b.data[n+1]=240,b.data[n+2]=255,b.data[n+3]=Math.round(255*t.strokeAlpha(y[e],y[e+1],y[e+2],r))}
+ M.putImageData(b,0,0);
+ const E=document.createElement("canvas");
+ E.width=Math.max(1,Math.round(m/6)),E.height=Math.max(1,Math.round(v/6));
+ const A=E.getContext("2d");
+ A.imageSmoothingEnabled=!0,A.drawImage(_,0,0,E.width,E.height);
+ const S=Math.max(1,Math.round(m*o)),T=Math.max(1,Math.round(v*o)),C=document.createElement("canvas");
+ C.width=S,C.height=T;
+ const O=C.getContext("2d");
+ O.imageSmoothingEnabled=!0,O.drawImage(E,0,0,S,T),O.drawImage(E,0,0,S,T),O.drawImage(_,0,0,S,T);
+ const I=new Ye(as.from(C));
+ return I.position.set(l,u),I.width=d-l,I.height=f-u,I.blendMode="add",I}
+ static buildGradeTexture(){
+ const t=document.createElement("canvas");
+ t.width=2,t.height=128;
+ const i=t.getContext("2d"),s=i.createLinearGradient(0,0,0,128);
+ return s.addColorStop(0,"rgb(150,160,215)"),s.addColorStop(.45,"rgb(175,185,225)"),s.addColorStop(1,"rgb(165,190,205)"),i.fillStyle=s,i.fillRect(0,0,2,128),as.from(t)}
+ static buildFogTexture(){
+ const i=t.SOFT_RES,s=t.FOG_W*i,e=t.FOG_H*i,n=document.createElement("canvas");
+ n.width=s,n.height=e;
+ const h=n.getContext("2d");
+ for(let r=0;
+ r<90;
+ r++){
+ const s=(30+Math.random()*(t.FOG_W-60))*i,n=.5*e+(Math.random()-.5)*e*.35,r=(16+34*Math.random())*i,o=h.createRadialGradient(s,n,0,s,n,r);
+ o.addColorStop(0,`rgba(228,236,255,${
+ t.FOG_PUFF_ALPHA}
+ )`),o.addColorStop(1,"rgba(228,236,255,0)"),h.fillStyle=o,h.fillRect(s-r,n-r,2*r,2*r)}
+ return as.from(n)}
+ static buildGlowTexture(t,i){
+ const s=document.createElement("canvas");
+ s.width=t,s.height=t;
+ const e=s.getContext("2d"),n=t/2,h=e.createRadialGradient(n,n,0,n,n,n);
+ return h.addColorStop(0,`rgba(${
+ i}
+ ,1)`),h.addColorStop(.35,`rgba(${
+ i}
+ ,0.45)`),h.addColorStop(1,`rgba(${
+ i}
+ ,0)`),e.fillStyle=h,e.fillRect(0,0,t,t),as.from(s)}
+ }
+ ;
+ Qt(MF,"HighlandAmbienceFx"),Zt(MF,"FIELD",640),Zt(MF,"RUNES",[[22,228,44,110],[158,190,50,110],[320,178,50,115],[483,192,50,115],[615,228,44,110]]),Zt(MF,"EMBLEM",[320,380,440,190]),Zt(MF,"GLOW_PAD",12),Zt(MF,"FIREFLY_COUNT",30),Zt(MF,"MOTE_COUNT",18),Zt(MF,"FOG_BANDS",[[285,4.4,.85],[355,-3.2,.9],[410,3,.95],[470,4,1],[560,-2.8,1.1],[620,3.6,1.2]]),Zt(MF,"SOFT_RES",.5),Zt(MF,"FOG_W",512),Zt(MF,"FOG_H",128),Zt(MF,"GLOW_TEX",32),Zt(MF,"FOG_PUFF_ALPHA",.22),Zt(MF,"FOG_BAND_ALPHA",1),Zt(MF,"FRONT_FOG_ALPHA",.75);
MeshGpuData 1 hunks, 138 statements
+ const rp=class{
+ destroy(){
+ }
+ }
+ ;
+ Qt(rp,"MeshGpuData");
+ let op=rp;
+ const ap=class{
+ constructor(t,i){
+ this.localUniforms=new er({
+ uTransformMatrix:{
+ value:new Si,type:"mat3x3<f32>"}
+ ,uColor:{
+ value:new Float32Array([1,1,1,1]),type:"vec4<f32>"}
+ ,uRound:{
+ value:0,type:"f32"}
+ }
+ ),this.localUniformsBindGroup=new hr({
+ 0:this.localUniforms}
+ ),this.renderer=t,this._adaptor=i,this._adaptor.init()}
+ validateRenderable(t){
+ const i=this._getMeshData(t),s=i.batched,e=t.batched;
+ if(i.batched=e,s!==e)return!0;
+ if(e){
+ const s=t._geometry;
+ if(s.indices.length!==i.indexSize||s.positions.length!==i.vertexSize)return i.indexSize=s.indices.length,i.vertexSize=s.positions.length,!0;
+ const e=this._getBatchableMesh(t);
+ return e.texture.uid!==t._texture.uid&&(e._textureMatrixUpdateId=-1),!e._batcher.checkAndUpdateTexture(e,t._texture)}
+ return!1}
+ addRenderable(t,i){
+ var s,e;
+ const n=this.renderer.renderPipes.batch,h=this._getMeshData(t);
+ if(t.didViewUpdate&&(h.indexSize=null==(s=t._geometry.indices)?void 0:s.length,h.vertexSize=null==(e=t._geometry.positions)?void 0:e.length),h.batched){
+ const s=this._getBatchableMesh(t);
+ s.setTexture(t._texture),s.geometry=t._geometry,n.addToBatch(s,i)}
+ else n.break(i),i.add(t)}
+ updateRenderable(t){
+ if(t.batched){
+ const i=this._getBatchableMesh(t);
+ i.setTexture(t._texture),i.geometry=t._geometry,i._batcher.updateElement(i)}
+ }
+ execute(t){
+ if(!t.isRenderable)return;
+ t.state.blendMode=Ca(t.groupBlendMode,t.texture._source);
+ const i=this.localUniforms;
+ i.uniforms.uTransformMatrix=t.groupTransform,i.uniforms.uRound=this.renderer._roundPixels|t._roundPixels,i.update(),qf(t.groupColorAlpha,i.uniforms.uColor,0),this._adaptor.execute(this,t)}
+ _getMeshData(t){
+ var i,s;
+ return(i=t._gpuData)[s=this.renderer.uid]||(i[s]=new op),t._gpuData[this.renderer.uid].meshData||this._initMeshData(t)}
+ _initMeshData(t){
+ return t._gpuData[this.renderer.uid].meshData={
+ batched:t.batched,indexSize:0,vertexSize:0}
+ ,t._gpuData[this.renderer.uid].meshData}
+ _getBatchableMesh(t){
+ var i,s;
+ return(i=t._gpuData)[s=this.renderer.uid]||(i[s]=new op),t._gpuData[this.renderer.uid].batchableMesh||this._initBatchableMesh(t)}
+ _initBatchableMesh(t){
+ const i=new hp;
+ return i.renderable=t,i.setTexture(t._texture),i.transform=t.groupTransform,i.roundPixels=this.renderer._roundPixels|t._roundPixels,t._gpuData[this.renderer.uid].batchableMesh=i,i}
+ destroy(){
+ this.localUniforms=null,this.localUniformsBindGroup=null,this._adaptor.destroy(),this._adaptor=null,this.renderer=null}
+ }
+ ;
+ Qt(ap,"MeshPipe");
+ let cp=ap;
+ cp.extension={
+ type:[ni.WebGLPipes,ni.WebGPUPipes],name:"mesh"}
+ ,oi.add(cp);
+ const lp=class extends Ke{
+ constructor(...t){
+ let i=t[0];
+ i instanceof Xa&&(Ki(Wi,"Mesh: use new Mesh({
+  geometry, shader }
+ ) instead"),i={
+ geometry:i,shader:t[1]}
+ ,t[3]&&(Ki(Wi,"Mesh: drawMode argument has been removed, use geometry.topology instead"),i.geometry.topology=t[3]));
+ const{
+ geometry:s,shader:e,texture:n,roundPixels:h,state:r,...o}
+ =i;
+ super({
+ label:"Mesh",...o}
+ ),this.renderPipeId="mesh",this._shader=null,this.allowChildren=!1,this.shader=e??null,this.texture=n??(null==e?void 0:e.texture)??as.WHITE,this.state=r??ur.for2d(),this._geometry=s,this._geometry.on("update",this.onViewUpdate,this),this.roundPixels=h??!1}
+ get material(){
+ return Ki(Wi,"mesh.material property has been removed, use mesh.shader instead"),this._shader}
+ set shader(t){
+ this._shader!==t&&(this._shader=t,this.onViewUpdate())}
+ get shader(){
+ return this._shader}
+ set geometry(t){
+ var i;
+ this._geometry!==t&&(null==(i=this._geometry)||i.off("update",this.onViewUpdate,this),t.on("update",this.onViewUpdate,this),this._geometry=t,this.onViewUpdate())}
+ get geometry(){
+ return this._geometry}
+ set texture(t){
+ t||(t=as.EMPTY);
+ const i=this._texture;
+ i!==t&&(i&&i.dynamic&&i.off("update",this.onViewUpdate,this),t.dynamic&&t.on("update",this.onViewUpdate,this),this.shader&&(this.shader.texture=t),this._texture=t,this.onViewUpdate())}
+ get texture(){
+ return this._texture}
+ get batched(){
+ return!this._shader&&!(12&this.state.data)&&this._geometry instanceof ep&&("auto"===this._geometry.batchMode?this._geometry.positions.length/2<=100:"batch"===this._geometry.batchMode)}
+ get bounds(){
+ return this._geometry.bounds}
+ updateBounds(){
+ this._bounds=this._geometry.bounds}
+ containsPoint(t){
+ const{
+ x:i,y:s}
+ =t;
+ if(!this.bounds.containsPoint(i,s))return!1;
+ const e=this.geometry.getBuffer("aPosition").data,n="triangle-strip"===this.geometry.topology?3:1;
+ if(this.geometry.getIndex()){
+ const t=this.geometry.getIndex().data,h=t.length;
+ for(let r=0;
+ r+2<h;
+ r+=n){
+ const n=2*t[r],h=2*t[r+1],o=2*t[r+2];
+ if(Of(i,s,e[n],e[n+1],e[h],e[h+1],e[o],e[o+1]))return!0}
+ }
+ else{
+ const t=e.length/2;
+ for(let h=0;
+ h+2<t;
+ h+=n){
+ const t=2*h,n=2*(h+1),r=2*(h+2);
+ if(Of(i,s,e[t],e[t+1],e[n],e[n+1],e[r],e[r+1]))return!0}
+ }
+ return!1}
+ destroy(t){
+ var i;
+ if(super.destroy(t),"boolean"==typeof t?t:null==t?void 0:t.texture){
+ const i="boolean"==typeof t?t:null==t?void 0:t.textureSource;
+ this._texture.destroy(i)}
+ null==(i=this._geometry)||i.off("update",this.onViewUpdate,this),this._texture=null,this._geometry=null,this._shader=null}
+ }
+ ;
+ Qt(lp,"Mesh");
+ let up=lp;
TimeOfDayManager 2 hunks, 138 statements
+ ,[hU.FIRE_LAND]:{
+ 0:{
+ overlayAlpha:.22,overlayTint:16763040,unitTint:16773346}
+ ,1:{
+ overlayAlpha:.6,overlayTint:16740416,unitTint:16762020}
+ ,2:{
+ overlayAlpha:1,overlayTint:16754824,unitTint:14203056}
+ ,3:{
+ overlayAlpha:.45,overlayTint:16752752,unitTint:16768200}
+ }
+ const rF=class t{
+ static setDay(i){
+ t.isNight=(i-1)%10>=5}
+ }
+ ;
+ Qt(rF,"TimeOfDayManager"),Zt(rF,"isNight",!0);
+ let oF=rF;
+ const aF=[["FireLandPart01",69,121],["FireLandPart02",205.5,44],["FireLandPart03",296.5,23],["FireLandPart04",424.5,56],["FireLandPart05",550.5,53],["FireLandPart06",607.5,126],["FireLandPart07",199.5,45],["FireLandPart08",288,64],["FireLandPart09",213,55],["FireLandPart10",430.5,58],["FireLandPart11",57,77],["FireLandPart12",530,91],["FireLandPart13",149,98],["FireLandPart14",556.5,108],["FireLandPart15",584,160],["FireLandPart16",26.5,207],["FireLandPart17",101.5,156],["FireLandPart18",595,286],["FireLandPart19",38,264],["FireLandPart20",86,272],["FireLandPart21",22,336],["FireLandPart22",606.5,387],["FireLandPart23",46.5,419],["FireLandPart24",86.5,392],["FireLandPart25",615,422],["FireLandPart26",46.5,499],["FireLandPart27",545,435],["FireLandPart28",110,434],["FireLandPart29",621,489],["FireLandPart30",595.5,481],["FireLandPart31",112.5,519],["FireLandPart32",559.5,625],["FireLandPart33",16.5,542],["FireLandPart34",105,638],["FireLandPart35",465.5,640],["FireLandPart36",140,565],["FireLandPart37",274.5,639],["FireLandPart38",370,597]],cF=[[21.4,108.7],[116.9,62.8],[478.2,21.9],[586.9,119.9],[558.9,503.7],[163.8,592.5],[65.8,383.8],[51,238.9]],lF=[[400,306.7],[144.2,73.3],[232.5,80],[143.3,452.5],[513.3,545.8],[315,479.2],[215.8,560],[75,124.2],[450,228.3],[88.3,228.3],[442.5,558.3],[536.7,340],[207.5,316.7],[215.8,200.8],[566.7,275],[416.7,108.3],[536.7,479.2],[260,391.7],[290,137.5]],uF={
+ x:.5,y:.7}
+ ,dF={
+ x:.5,y:.75}
+ ,fF=class t{
+ constructor(){
+ Zt(this,"underRoot",new Ve),Zt(this,"overRoot",new Ve),Zt(this,"built",!1),Zt(this,"active",!1),Zt(this,"ticking",!1),Zt(this,"elapsed",0),Zt(this,"pulse",null),Zt(this,"glows",[]),Zt(this,"flames",[]),Zt(this,"embers",[]),Zt(this,"eruptGlow",null),Zt(this,"eruptFlames",[]),Zt(this,"eruptDrops",[]),Zt(this,"eruptTimer",1),Zt(this,"eruptAge",-1),Zt(this,"lastErupt",-1),this.underRoot.eventMode="none",this.overRoot.eventMode="none",this.underRoot.visible=!1,this.overRoot.visible=!1}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ static preload(){
+ return this.loading||(this.loading=Promise.all([kS.generateTexture(t.SHEET,!1).then(i=>{
+ if(!i)throw new Error(`[FireLandFx] ${
+ t.SHEET}
+  로드 실패`)}
+ ),kS.getSingleTexture(t.PULSE_IMAGE).then(i=>{
+ t.pulseTexture=i}
+ )]).then(()=>{
+ }
+ ).catch(t=>{
+ throw this.loading=null,t}
+ )),this.loading}
+ setActive(t){
+ if(t!==this.active)if(this.active=t,t){
+ this.built||this.build(),this.underRoot.visible=!0,this.overRoot.visible=!0;
+ for(const t of this.flames)t.play();
+ this.ticking||(vn.shared.add(this.tick,this),this.ticking=!0)}
+ else{
+ this.underRoot.visible=!1,this.overRoot.visible=!1;
+ for(const t of this.flames)t.stop();
+ this.stopEruption(),this.ticking&&(vn.shared.remove(this.tick,this),this.ticking=!1)}
+ }
+ build(){
+ this.built=!0;
+ const i=t.buildGlowTexture(64,"255,138,40"),s=t.buildGlowTexture(16,"255,176,80");
+ t.pulseTexture&&(this.pulse=new Ye(t.pulseTexture),this.pulse.width=this.pulse.height=640,this.pulse.blendMode="add",this.pulse.alpha=0,this.underRoot.addChild(this.pulse)),this.eruptGlow=new Ye(i),this.eruptGlow.anchor.set(.5),this.eruptGlow.blendMode="add",this.eruptGlow.visible=!1,this.underRoot.addChild(this.eruptGlow);
+ for(const t of["efa_","efb_"]){
+ const i=this.makeAnim(t,dF,!1);
+ this.eruptFlames.push(i),this.underRoot.addChild(i)}
+ for(const t of["eda_","edb_"]){
+ const i=this.makeAnim(t,dF,!1);
+ i.blendMode="add",this.eruptDrops.push(i),this.underRoot.addChild(i)}
+ const e=new Ve,n=new Ve;
+ this.overRoot.addChild(e,n),cF.forEach(([t,s],h)=>{
+ const r=new Ye(i);
+ r.anchor.set(.5),r.position.set(t,s-6),r.blendMode="add";
+ const o=62+h%3*8;
+ r.width=r.height=o,n.addChild(r),this.glows.push({
+ sprite:r,base:o,phase:Math.random()*Math.PI*2}
+ );
+ const a=this.makeAnim(h%2==0?"fla_":"flb_",uF,!0);
+ a.position.set(t,s),a.scale.set(1.05*(h%3==1?-1:1),1.05),a.gotoAndPlay(Math.floor(Math.random()*a.totalFrames)),e.addChild(a),this.flames.push(a);
+ const c=this.makeAnim("spk_",uF,!0);
+ c.position.set(t,s),c.blendMode="add",c.gotoAndPlay(Math.floor(Math.random()*c.totalFrames)),n.addChild(c),this.flames.push(c)}
+ );
+ for(let h=0;
+ h<t.EMBER_COUNT;
+ h++){
+ const i=new Ye(s);
+ i.anchor.set(.5),i.blendMode="add";
+ const e=3+3*Math.random();
+ i.width=i.height=e,n.addChild(i);
+ const h={
+ sprite:i,x:0,y:0,vy:0,age:0,life:1,phase:0}
+ ;
+ t.respawnEmber(h),h.age=Math.random()*h.life,this.embers.push(h)}
+ }
+ makeAnim(i,s,e){
+ const n=new fp(kS.getTextures(t.SHEET,i,!0));
+ return n.anchor.set(s.x,s.y),n.animationSpeed=t.FPS_SPEED,n.loop=e,n.eventMode="none",e||(n.visible=!1),n}
+ tick(i){
+ const s=i.deltaMS/1e3;
+ this.elapsed+=s;
+ const e=this.elapsed,n=oF.isNight?1.25:1;
+ if(this.pulse){
+ const t=.5+.5*Math.sin(e/8*Math.PI*2),i=.5+.5*Math.sin(2.3*e);
+ this.pulse.alpha=Math.min(1,(.12+.38*t+.08*i)*n)}
+ for(const t of this.glows){
+ const i=.55+.25*Math.sin(5.1*e+t.phase)+.12*Math.sin(11.7*e+2*t.phase);
+ t.sprite.alpha=Math.min(1,.75*i*n);
+ const s=t.base*(.94+.08*Math.sin(3.3*e+t.phase));
+ t.sprite.width=t.sprite.height=s}
+ for(const h of this.embers){
+ h.age+=s,h.age>=h.life&&t.respawnEmber(h);
+ const i=h.age/h.life;
+ h.y-=h.vy*s,h.sprite.x=h.x+7*Math.sin(2.2*h.age+h.phase),h.sprite.y=h.y,h.sprite.alpha=.95*Math.sin(Math.PI*i)}
+ this.updateEruption(s)}
+ updateEruption(i){
+ if(this.eruptAge>=0){
+ this.eruptAge+=i;
+ const t=this.eruptAge/1.08;
+ this.eruptGlow&&(this.eruptGlow.alpha=t<1?.85*Math.sin(Math.PI*Math.min(1,t)):0),t>=1&&this.stopEruption()}
+ if(this.eruptTimer-=i,this.eruptTimer>0)return;
+ this.eruptTimer=t.ERUPT_INTERVAL;
+ const s=lF.length;
+ let e=Math.floor(Math.random()*s);
+ e===this.lastErupt&&(e=(e+1)%s),this.lastErupt=e;
+ const[n,h]=lF[e],r=e%2;
+ this.stopEruption();
+ for(const t of[this.eruptFlames[r],this.eruptDrops[r]])t&&(t.position.set(n,h),t.visible=!0,t.onComplete=()=>t.visible=!1,t.gotoAndPlay(0));
+ this.eruptGlow&&(this.eruptGlow.position.set(n,h-6),this.eruptGlow.width=this.eruptGlow.height=90,this.eruptGlow.alpha=0,this.eruptGlow.visible=!0),this.eruptAge=0}
+ stopEruption(){
+ this.eruptAge=-1;
+ for(const t of[...this.eruptFlames,...this.eruptDrops])t.stop(),t.visible=!1;
+ this.eruptGlow&&(this.eruptGlow.visible=!1)}
+ static respawnEmber(t){
+ t.x=8+624*Math.random(),t.y=60+580*Math.random(),t.vy=16+26*Math.random(),t.age=0,t.life=2+3*Math.random(),t.phase=Math.random()*Math.PI*2}
+ static buildGlowTexture(t,i){
+ const s=document.createElement("canvas");
+ s.width=t,s.height=t;
+ const e=s.getContext("2d"),n=t/2,h=e.createRadialGradient(n,n,0,n,n,n);
+ return h.addColorStop(0,`rgba(${
+ i}
+ ,1)`),h.addColorStop(.35,`rgba(${
+ i}
+ ,0.5)`),h.addColorStop(1,`rgba(${
+ i}
+ ,0)`),e.fillStyle=h,e.fillRect(0,0,t,t),as.from(s)}
+ }
+ ;
+ Qt(fF,"FireLandFx"),Zt(fF,"_instance",null),Zt(fF,"SHEET","bg/fireland/FireLand"),Zt(fF,"PULSE_IMAGE","images/bg/fireland/pulse.png"),Zt(fF,"FPS_SPEED",.4),Zt(fF,"ERUPT_INTERVAL",3),Zt(fF,"EMBER_COUNT",26),Zt(fF,"pulseTexture",null),Zt(fF,"loading",null);
+ let pF=fF;
BannerImage 1 hunks, 118 statements
- ));
- var kzt=(t=>(t.NOT_PURCHASE="NOT_PURCHASE",t.CREATED="CREATED",t.PENDING="PENDING",t.COMPLETED="COMPLETED",t.FAILED="FAILED",t))(kzt||{
- }
- );
- const Rzt=class{
- constructor(){
- Xt(this,"id",-1),Xt(this,"productId",-1),Xt(this,"paybackType",""),Xt(this,"paybackValue",-1),Xt(this,"status",""),Xt(this,"paidbackAt",null)}
- }
- ;
- qt(Rzt,"PaybackEventUserVO");
- let xzt=Rzt;
- const Pzt=class{
- constructor(){
- Xt(this,"id",-1),Xt(this,"title",""),Xt(this,"description",[]),Xt(this,"startTime",null),Xt(this,"endTime",null),Xt(this,"paybackEndTime",null)}
- }
- ;
- qt(Pzt,"PaybackEventVO");
- let Nzt=Pzt;
- const Lzt=class{
- static get opened(){
- return!1}
- static async getPaybackEvent(t,i=!1){
- let s=await TL.getInstance().payback.getPaybackEvent(t,i);
- s=this.getTestData(),0!=s.success?(this.setData(s.body),mS.getInstance().dispatchCustomEvent("PaybackEvent")):mS.getInstance().dispatchCustomEvent("PaybackEvent")}
- static setData(t){
- this.setPaybackEventData(t),this.setPaybackUserData(t)}
- static setPaybackEventData(t){
- if(!t||!t.paybackEvent)return void(this.paybackEvent.id=0);
- const i=t.paybackEvent;
- this.paybackEvent.id=Number(i.id),this.paybackEvent.title=String(i.title),this.paybackEvent.description=String(i.description).split("|"),this.paybackEvent.startTime=new Date(i.startTime),this.paybackEvent.endTime=new Date(i.endTime),this.paybackEvent.paybackEndTime=new Date(i.paybackEndTime)}
- static getEventDurationStr(t){
- const i={
- startTimeStr:"",endTimeStr:"",paybackEndTimeStr:""}
- ,s="YYYY-MM-DD";
- let e="00:00:00";
- if(t.startTime){
- const n=t.startTime,h=s.replace("YYYY",String(n.getUTCFullYear())).replace("MM",rF.digit(n.getUTCMonth()+1)).replace("DD",rF.digit(n.getUTCDate()));
- e=`${
- rF.digit(n.getUTCHours())}
- :${
- rF.digit(n.getUTCMinutes())}
- :${
- rF.digit(n.getUTCSeconds())}
- `,i.startTimeStr=h}
- let n="23:59:59";
- if(t.endTime){
- const e=t.endTime,h=s.replace("YYYY",String(e.getUTCFullYear())).replace("MM",rF.digit(e.getUTCMonth()+1)).replace("DD",rF.digit(e.getUTCDate()));
- n=`${
- rF.digit(e.getUTCHours())}
- :${
- rF.digit(e.getUTCMinutes())}
- :${
- rF.digit(e.getUTCSeconds())}
- `,i.endTimeStr=h}
- let h="23:59:59";
- if(t.paybackEndTime){
- const e=t.paybackEndTime,n=s.replace("YYYY",String(e.getUTCFullYear())).replace("MM",rF.digit(e.getUTCMonth()+1)).replace("DD",rF.digit(e.getUTCDate()));
- h=`${
- rF.digit(e.getUTCHours())}
- :${
- rF.digit(e.getUTCMinutes())}
- :${
- rF.digit(e.getUTCSeconds())}
- `,i.paybackEndTimeStr=n}
- return"00:00:00"==e&&"23:59:59"==n&&"23:59:59"==h||(i.startTimeStr+=" "+e,i.endTimeStr+=" "+n,i.paybackEndTimeStr+=" "+h),i}
- static setPaybackUserData(t){
- if(!t||!t.paybacks)return;
- const i=t.paybacks,s=i.length;
- if(0==this.paybacks.length)for(let h=0;
- h<s;
- ++h)this.paybacks.push(new xzt);
- let e,n;
- for(let h=0;
- h<s;
- ++h)e=i[h],n=this.paybacks[h],n.id=Number(e.id),n.productId=Number(e.productId),n.paybackType=String(e.paybackType),n.paybackValue=Number(e.paybackValue),n.status=String(e.status),n.paidbackAt=new Date(String(e.paidbackAt))}
- static isEventEnded(){
- const t=this.paybackEvent;
- return t.id<0||!t.endTime||!(TP.serverTime<t.endTime.getTime())}
- static isPaybackEnded(){
- const t=this.paybackEvent;
- return t.id<0||!t.paybackEndTime||!(TP.serverTime<t.paybackEndTime.getTime())}
- static hasReward(){
- if(1==this.isPaybackEnded())return!1;
- let t;
- const i=this.paybacks.length;
- for(let s=0;
- s<i;
- ++s)if(t=this.paybacks[s],t.status==kzt.CREATED||t.status==kzt.FAILED)return!0;
- return!1}
- static getTestData(){
- return{
- header:{
- sts:1771417950938}
- ,body:{
- paybackEvent:{
- id:7,gameId:"smith",active:1,subId:3,title:"PAYBACK_T1",description:"PAYBACK_H1|PAYBACK_H2|PAYBACK_H3|PAYBACK_H4|PAYBACK_H5|PAYBACK_H6",startTime:"2026-02-17T00:00:00.000Z",endTime:"2026-02-20T21:59:59.000Z",paybackEndTime:"2026-02-20T23:59:59.000Z"}
- ,paybacks:[{
- id:21,gameId:"smith",subId:3,step:1,productId:111,reqProductId:0,paybackType:"slx",paybackValue:299,status:"COMPLETED",paidbackAt:null}
- ,{
- id:22,gameId:"smith",subId:3,step:2,productId:112,reqProductId:111,paybackType:"slx",paybackValue:998,status:"CREATED",paidbackAt:null}
- ,{
- id:23,gameId:"smith",subId:3,step:3,productId:113,reqProductId:112,paybackType:"slx",paybackValue:4995,status:"NOT_PURCHASE",paidbackAt:null}
- ,{
- id:24,gameId:"smith",subId:3,step:4,productId:114,reqProductId:113,paybackType:"slx",paybackValue:9990,status:"NOT_PURCHASE",paidbackAt:null}
- ,{
- id:25,gameId:"smith",subId:3,step:5,productId:115,reqProductId:114,paybackType:"slx",paybackValue:19980,status:"NOT_PURCHASE",paidbackAt:null}
- ,{
- id:26,gameId:"smith",subId:3,step:6,productId:116,reqProductId:115,paybackType:"slx",paybackValue:49950,status:"NOT_PURCHASE",paidbackAt:null}
- ,{
- id:27,gameId:"smith",subId:3,step:7,productId:117,reqProductId:116,paybackType:"slx",paybackValue:99900,status:"NOT_PURCHASE",paidbackAt:null}
- ]}
- ,_success_:!0,_ok_:!0,_status_:201}
- }
- }
- ;
- qt(Lzt,"PaybackEventManager"),Xt(Lzt,"paybackEvent",new Nzt),Xt(Lzt,"paybacks",[]);
- let Dzt=Lzt;
- const Gzt=class extends He{
+ )),IYt=class extends Ve{
MeshPlane 2 hunks, 109 statements
- ...j.defaultOptions,...t}
+ ...K.defaultOptions,...t}
+ const Hy=class extends up{
+ constructor(t){
+ const{
+ texture:i,verticesX:s,verticesY:e,...n}
+ =t,h=new $y(Xi({
+ width:i.width,height:i.height,verticesX:s,verticesY:e}
+ ));
+ super(Xi({
+ ...n,geometry:h,texture:i}
+ )),this.texture=i,this.autoResize=!0}
+ textureUpdated(){
+ const t=this.geometry,{
+ width:i,height:s}
+ =this.texture;
+ !this.autoResize||t.width===i&&t.height===s||(t.width=i,t.height=s,t.build({
+ }
+ ))}
+ set texture(t){
+ var i;
+ null==(i=this._texture)||i.off("update",this.textureUpdated,this),super.texture=t,t.on("update",this.textureUpdated,this),this.textureUpdated()}
+ get texture(){
+ return this._texture}
+ destroy(t){
+ this.texture.off("update",this.textureUpdated,this),super.destroy(t)}
+ }
+ ;
+ Qt(Hy,"MeshPlane");
+ let Wy=Hy;
+ const Vy=(Qt(z=class extends ep{
+ constructor(t){
+ const{
+ width:i,points:s,textureScale:e}
+ ={
+ ...z.defaultOptions,...t}
+ ;
+ super({
+ positions:new Float32Array(4*s.length),uvs:new Float32Array(4*s.length),indices:new Uint32Array(6*(s.length-1))}
+ ),this.points=s,this._width=i,this.textureScale=e,this._build()}
+ get width(){
+ return this._width}
+ _build(){
+ const t=this.points;
+ if(!t)return;
+ const i=this.getBuffer("aPosition"),s=this.getBuffer("aUV"),e=this.getIndex();
+ if(t.length<1)return;
+ i.data.length/4!==t.length&&(i.data=new Float32Array(4*t.length),s.data=new Float32Array(4*t.length),e.data=new Uint16Array(6*(t.length-1)));
+ const n=s.data,h=e.data;
+ n[0]=0,n[1]=0,n[2]=0,n[3]=1;
+ let r=0,o=t[0];
+ const a=this._width*this.textureScale,c=t.length;
+ for(let u=0;
+ u<c;
+ u++){
+ const i=4*u;
+ if(this.textureScale>0){
+ const i=o.x-t[u].x,s=o.y-t[u].y,e=Math.sqrt(i*i+s*s);
+ o=t[u],r+=e/a}
+ else r=u/(c-1);
+ n[i]=r,n[i+1]=0,n[i+2]=r,n[i+3]=1}
+ let l=0;
+ for(let u=0;
+ u<c-1;
+ u++){
+ const t=2*u;
+ h[l++]=t,h[l++]=t+1,h[l++]=t+2,h[l++]=t+2,h[l++]=t+1,h[l++]=t+3}
+ s.update(),e.update(),this.updateVertices()}
+ updateVertices(){
+ const t=this.points;
+ if(t.length<1)return;
+ let i,s=t[0],e=0,n=0;
+ const h=this.buffers[0].data,r=t.length,o=this.textureScale>0?this.textureScale*this._width/2:this._width/2;
+ for(let a=0;
+ a<r;
+ a++){
+ const r=t[a],c=4*a;
+ i=a<t.length-1?t[a+1]:r,n=-(i.x-s.x),e=i.y-s.y;
+ const l=Math.sqrt(e*e+n*n);
+ l<1e-6?(e=0,n=0):(e/=l,n/=l,e*=o,n*=o),h[c]=r.x+e,h[c+1]=r.y+n,h[c+2]=r.x-e,h[c+3]=r.y-n,s=r}
+ this.buffers[0].update()}
+ update(){
+ this.textureScale>0?this._build():this.updateVertices()}
+ }
+ ,"_RopeGeometry"),z);
+ Vy.defaultOptions={
+ width:200,points:[],textureScale:0}
+ ;
+ let jy=Vy;
+ const Ky=(Qt(Y=class extends up{
+ constructor(t){
+ const{
+ texture:i,points:s,textureScale:e,...n}
+ ={
+ ...Y.defaultOptions,...t}
+ ,h=new jy(Xi({
+ width:i.height,points:s,textureScale:e}
+ ));
+ e>0&&(i.source.style.addressMode="repeat"),super(Xi({
+ ...n,texture:i,geometry:h}
+ )),this.autoUpdate=!0,this.onRender=this._render}
+ _render(){
+ const t=this.geometry;
+ (this.autoUpdate||t._width!==this.texture.height)&&(t._width=this.texture.height,t.update())}
+ }
+ ,"_MeshRope"),Y);
+ Ky.defaultOptions={
+ textureScale:0}
+ ;
+ let zy=Ky;
PVPResultPopup 5 hunks, 91 statements
- super(),Xt(this,"reward"),Xt(this,"lblMessage",new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17)),Xt(this,"btnConfirm",new MF("","","확인",.8,200,70)),Xt(this,"onConfirm",null),Xt(this,"autoReturnTimer",null),this.title=nB.getText("GAME_76","무한 랭킹전"),this.reward=new gZt,this.reward.x=.5*(this.width-this.reward.width),this.lblMessage.align="center",this.lblMessage.y=85,this.contentContainer.addChild(this.reward,this.lblMessage,this.btnConfirm),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.text=nB.getText("COMMON_1","확인"),this.btnConfirm.color=MF.GREEN,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!1}
+ super(),Zt(this,"reward"),Zt(this,"lblResult",new QD("",t.COLOR_WIN,sD.DEFAULT_OUTLINE_FONT_OPTION_32)),Zt(this,"statBox",new ip),Zt(this,"rowPoint"),Zt(this,"rowRank"),Zt(this,"rowStreak"),Zt(this,"mvpBox",new Ve),Zt(this,"mvpIcon",new e4),Zt(this,"mvpVO",null),Zt(this,"lblMvpTag",new QD("MVP",sD.COLOR_BRIGHT_ORANGE,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"lblMvpName",new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblMvpDmg",new QD("",13421772,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"btnConfirm",new m$("","","확인",.8,200,70)),Zt(this,"pointTween",null),Zt(this,"autoReturnTimer",null),this.title=RB.getText("GAME_76","무한 랭킹전"),this.reward=new A0t,this.statBox.eventMode="none",this.rowPoint=this.createRow(),this.rowRank=this.createRow(),this.rowStreak=this.createRow(),this.mvpIcon.setMode(i4.BOOK),this.mvpIcon.scale.set(.5),this.mvpBox.eventMode="none",this.mvpBox.addChild(this.mvpIcon,this.lblMvpTag,this.lblMvpName,this.lblMvpDmg),this.contentContainer.addChild(this.lblResult,this.statBox,this.rowPoint.root,this.rowRank.root,this.rowStreak.root,this.mvpBox,this.reward,this.btnConfirm),this.btnConfirm.showIconLabel=!1,this.btnConfirm.showTextLabel=!0,this.btnConfirm.onClick=this.onConfirmClick.bind(this),this.btnClose.visible=!1,this.outSideClickHide=!1}
- onConfirmClick(){
- this.clearAutoReturnTimer(),eli.getInstance().returnToIdleBattle(),this.hide(),LYt.getInstance().addChild(GH.getInstance()),A8t.getInstance().show(),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)}
- showVictory(t=null){
- this.onConfirm=t,this.title=nB.getText("GAME_76","무한 랭킹전"),this.lblMessage.text=nB.getText("COMMON_386","전투에 승리하였습니다."),this.lblMessage.textColor=65280,this.btnConfirm.color=MF.GREEN,this.btnConfirm.text=nB.getText("COMMON_1","확인");
- const i=Number(QD.getInstance().getClientData("PVP_WIN_REWARD_GEM"));
- this.reward.setData("gem",i,-1),setTimeout(()=>{
- this.displayGemGathering(this.reward,i)}
- ,200),this.updateLayout(!0),super.show(),this.startAutoReturnTimer()}
+ createRow(){
+ const i=new Ve;
+ i.eventMode="none";
+ const s=new QD("",12303291,sD.DEFAULT_OUTLINE_FONT_OPTION_17),e=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_18),n=new QD("",t.COLOR_UP,sD.DEFAULT_OUTLINE_FONT_OPTION_18);
+ return i.addChild(s,e,n),{
+ root:i,lblName:s,lblValue:e,lblDelta:n}
+ }
+ showResult(i,s,e){
+ this.title=RB.getText("GAME_76","무한 랭킹전"),this.lblResult.text=i?RB.getText("COMMON_380","승리"):RB.getText("COMMON_381","패배"),this.lblResult.textColor=i?t.COLOR_WIN:t.COLOR_LOSE,this.btnConfirm.color=i?m$.GREEN:m$.RED,this.setStats(s,i),this.setMvp(e);
+ const n=i?Number(SG.getInstance().getClientData("PVP_WIN_REWARD_GEM")):0;
+ this.reward.visible=n>0,n>0&&this.reward.setData("gem",n,-1),this.updateLayout(),super.show(),this.startAutoReturnTimer(),s&&this.playPointCount(s),n>0&&setTimeout(()=>this.displayGemGathering(this.reward,n),200)}
+ setStats(t,i){
+ const s=null!=t;
+ if(this.statBox.visible=s,this.rowPoint.root.visible=s,this.rowRank.root.visible=s,this.rowStreak.root.visible=null!=t&&i&&t.winStreak>=2,!t)return;
+ const e=t.newPoint-t.oldPoint;
+ this.rowPoint.lblName.text=RB.getText("COMMON_37","점수"),this.rowPoint.lblValue.text=this.arrowText(t.oldPoint.toLocaleString(),t.oldPoint.toLocaleString()),this.setDelta(this.rowPoint.lblDelta,e,`${
+ e>=0?"+":""}
+ ${
+ e}
+ `);
+ const n=Qt(t=>RB.getText("GAME_97","##위").replace("##",String(t)),"rankText"),h=t.oldRank-t.newRank;
+ this.rowRank.lblName.text=RB.getText("COMMON_373","순위"),this.rowRank.lblValue.text=this.arrowText(n(t.oldRank),n(t.newRank)),this.setDelta(this.rowRank.lblDelta,h,h>0?`▲${
+ h}
+ `:h<0?"▼"+-h:"-"),this.rowStreak.lblName.text="",this.rowStreak.lblValue.text=RB.getText("GAME_1888","##연승").replace("##",String(t.winStreak)),this.rowStreak.lblValue.textColor=sD.COLOR_BRIGHT_ORANGE,this.rowStreak.lblDelta.text=""}
+ arrowText(t,i){
+ return`${
+ t}
+   →  ${
+ i}
+ `}
+ setDelta(i,s,e){
+ i.text=e,i.textColor=s>0?t.COLOR_UP:s<0?t.COLOR_DOWN:11184810}
+ playPointCount(t){
+ var i;
+ null==(i=this.pointTween)||i.kill();
+ const s=t.oldPoint.toLocaleString(),e={
+ v:t.oldPoint}
+ ;
+ this.pointTween=MR.to(e,{
+ v:t.newPoint,duration:.8,delay:.35,ease:"power2.out",onUpdate:Qt(()=>{
+ this.rowPoint.lblValue.text=this.arrowText(s,Math.round(e.v).toLocaleString())}
+ ,"onUpdate")}
+ )}
+ setMvp(t){
+ var i;
+ if(this.mvpBox.visible=null!=t,null==(i=this.mvpVO)||i.remove(),this.mvpVO=null,!t)return;
+ const s=ix.getVO();
+ s.kindNum=t.kindNum,s.trans=t.trans,this.mvpVO=s,this.mvpIcon.setData(s);
+ const e=ZR.getInstance().getBookVO(t.kindNum);
+ this.lblMvpName.text=e?RB.getText(e.getNameKey(),e.name):"",this.lblMvpDmg.text=`${
+ KD.displayLargeNumberAsAlphabet(Math.floor(t.damage))}
+   (${
+ Math.round(100*t.share)}
+ %)`}
+ updateLayout(){
+ const i=this.width,s=t.BOX_X,e=t.BOX_W,n=t.ROW_H;
+ this.lblResult.x=.5*(i-this.lblResult.width),this.lblResult.y=66;
+ let h=this.lblResult.y+this.lblResult.height+14;
+ if(this.statBox.visible){
+ const t=[this.rowPoint,this.rowRank,this.rowStreak].filter(t=>t.root.visible),r=t.length*n+12;
+ this.statBox.clear(),this.statBox.roundRect(s,h,e,r,12).fill({
+ color:0,alpha:.35}
+ );
+ let o=h+6;
+ for(const i of t)i.root.y=o,i.lblName.x=s+24,i.lblName.y=.5*(n-i.lblName.height),i.lblValue.x=s+150,i.lblValue.y=.5*(n-i.lblValue.height),i.lblDelta.x=s+e-24-i.lblDelta.width,i.lblDelta.y=.5*(n-i.lblDelta.height),o+=n;
+ this.rowStreak.root.visible&&(this.rowStreak.lblValue.x=.5*(i-this.rowStreak.lblValue.width)),h+=r+14}
+ if(this.mvpBox.visible){
+ this.mvpBox.y=h,this.mvpIcon.x=s+16,this.mvpIcon.y=0;
+ const t=this.mvpIcon.height;
+ this.lblMvpTag.x=this.mvpIcon.x+this.mvpIcon.width+14,this.lblMvpTag.y=.5*(t-this.lblMvpTag.height),this.lblMvpName.x=this.lblMvpTag.x+this.lblMvpTag.width+10,this.lblMvpName.y=.5*(t-this.lblMvpName.height),this.lblMvpDmg.x=s+e-24-this.lblMvpDmg.width,this.lblMvpDmg.y=.5*(t-this.lblMvpDmg.height),h+=t+18}
+ this.reward.visible&&(this.reward.x=.5*(i-this.reward.width),this.reward.y=h,h+=this.reward.height+22),this.btnConfirm.x=.5*(i-this.btnConfirm.width),this.btnConfirm.y=h,this.height=this.btnConfirm.y+this.btnConfirm.height+40}
- let s=t.getGlobalPosition(),e=Xy.stage.toLocal(s);
+ const s=t.getGlobalPosition(),e=ES.stage.toLocal(s);
- showDefeat(t=null){
- this.onConfirm=t,this.title=nB.getText("GAME_76","무한 랭킹전"),this.lblMessage.text=nB.getText("COMMON_387","전투에 패배하였습니다."),this.lblMessage.textColor=16711680,this.btnConfirm.color=MF.RED,this.btnConfirm.text=nB.getText("COMMON_1","확인"),this.updateLayout(!1),super.show(),this.startAutoReturnTimer()}
- updateLayout(t){
- this.lblMessage.x=.5*(this.width-this.lblMessage.width),this.lblMessage.y=85,this.reward.y=this.lblMessage.y+this.lblMessage.height+40,t?(this.reward.visible=!0,this.btnConfirm.y=this.reward.y+this.reward.height+40):(this.reward.visible=!1,this.btnConfirm.y=this.lblMessage.y+this.lblMessage.height+40),this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.height=this.btnConfirm.y+this.btnConfirm.height+60}
+ onConfirmClick(){
+ var t;
+ this.clearAutoReturnTimer(),null==(t=this.pointTween)||t.kill(),this.pointTween=null,Rui.getInstance().returnToIdleBattle(),this.hide(),Cqt.getInstance().addChild(xH.getInstance()),t9t.getInstance().show()}
+ startAutoReturnTimer(){
+ this.clearAutoReturnTimer();
+ let i=t.AUTO_RETURN_SEC;
+ this.updateConfirmText(i),this.autoReturnTimer=setInterval(()=>{
+ i--,i<=0?this.onConfirmClick():this.updateConfirmText(i)}
+ ,1e3)}
+ updateConfirmText(t){
+ this.btnConfirm.text=`${
+ RB.getText("COMMON_1","확인")}
+  (${
+ t}
+ )`}
+ clearAutoReturnTimer(){
+ this.autoReturnTimer&&(clearInterval(this.autoReturnTimer),this.autoReturnTimer=null)}
- qt(mZt,"PVPResultPopup"),Xt(mZt,"_instance"),Xt(mZt,"AUTO_RETURN_DELAY",5e3);
+ Qt(S0t,"PVPResultPopup"),Zt(S0t,"_instance"),Zt(S0t,"AUTO_RETURN_SEC",8),Zt(S0t,"BOX_X",40),Zt(S0t,"BOX_W",500),Zt(S0t,"ROW_H",40),Zt(S0t,"COLOR_UP",6742138),Zt(S0t,"COLOR_DOWN",16738922),Zt(S0t,"COLOR_WIN",16765514),Zt(S0t,"COLOR_LOSE",16734810);
BattleController 15 hunks, 78 statements
+ if(this.realmIntroHold)return;
- ,"execute")),Xt(this,"zoom",1),Xt(this,"zooming",!1),FU.getInstance().initialize()}
+ ,"execute")),Zt(this,"zoom",1),Zt(this,"zooming",!1),Zt(this,"realmIntroHold",!1),LF.getInstance().initialize()}
- this.isFirstWave=!0,this.initRandom(),y0.reset(),this.map.load(RB(XD.wave),PB(XD.wave)),sU.getInstance().updateSeason(this.map.getSeason(),!0),IU.getInstance().setTimeOfDay(XD.wave,!0),this.reviveGoldBuff=Math.max(1,Math.min(3,1+.2*XD.numRevive)),this.player=await X3.getInstance().getUnit(Cx.getInstance().castleVO.className),this.player.battleController=this,this.player.id=0,this.player.numShot=1,Cx.getInstance().castleVO.extraLevel=Fx.getCitadelOwnershipTotalWithAwakening(GR.CastleLevelUp),this.player.setData(Cx.getInstance().castleVO),this.player.numBlock=0;
+ this.isFirstWave=!0,this.initRandom(),_1.reset(),this.map.load(nU(EG.wave),this.startRealmFor(EG.wave)),GU.getInstance().updateSeason(this.map.getSeason(),!0),EF.getInstance().setTimeOfDay(EG.wave,!0,this.map.getRealm()),this.refreshRealmHud(),this.reviveGoldBuff=Math.max(1,Math.min(3,1+.2*EG.numRevive)),this.player=await q6.getInstance().getUnit(tP.getInstance().castleVO.className),this.player.battleController=this,this.player.id=0,this.player.numShot=1,tP.getInstance().castleVO.extraLevel=fP.getCitadelOwnershipTotalWithAwakening(lx.CastleLevelUp),this.player.setData(tP.getInstance().castleVO),this.player.numBlock=0;
- 1!==h&&(this.player.baseMaxHp*=h,this.player.orgMaxHp=this.player.maxHp=this.player.baseMaxHp,this.player.hp=this.player.maxHp),this.player.setPlayerAtkRange((null==(t=Cx.getInstance().getBookDataByKindNum(2))?void 0:t.value)??0),this.player.setPlayerAtkDuration((null==(i=Cx.getInstance().getBookDataByKindNum(3))?void 0:i.value)??0),this.player.setPlayerNumShot((null==(s=Cx.getInstance().getBookDataByKindNum(4))?void 0:s.value)??0),this.player.setPlayerNumBounce((null==(e=Cx.getInstance().getBookDataByKindNum(5))?void 0:e.value)??0),this.player.x=this.player.xDefault=320,this.player.y=this.player.yDefault=320,this.player.initDelay=5,this.player.hasTextEffect=!1,this.friendList.push(this.player),this.player.enemyList=this.enemyList,this.player.allyList=this.friendList,VB.getInstance().addChild(this.player),this.currentWave=XD.wave||1,this.waveTimer=0,this.waveDuration=600,this.rushTime=420,sui.releaseAll(this.spawnSchedule),this.spawnScheduleIndex=0,this.allEnemiesSpawned=!1,this.totalEnemiesInWave=0,this.bossSpawned=!1,this.isGameOverFlag=!1,this.shownDialogueWaves.clear(),xli.getInstance().updateDay(XD.wave),ND.getInstance().startUpdate(),this.updateReviveGoldBuff(),this.startNewWave();
+ 1!==h&&(this.player.baseMaxHp*=h,this.player.orgMaxHp=this.player.maxHp=this.player.baseMaxHp,this.player.hp=this.player.maxHp),this.player.setPlayerAtkRange((null==(t=tP.getInstance().getBookDataByKindNum(2))?void 0:t.value)??0),this.player.setPlayerAtkDuration((null==(i=tP.getInstance().getBookDataByKindNum(3))?void 0:i.value)??0),this.player.setPlayerNumShot((null==(s=tP.getInstance().getBookDataByKindNum(4))?void 0:s.value)??0),this.player.setPlayerNumBounce((null==(e=tP.getInstance().getBookDataByKindNum(5))?void 0:e.value)??0),this.player.x=this.player.xDefault=320,this.player.y=this.player.yDefault=320,this.player.initDelay=5,this.player.hasTextEffect=!1,this.friendList.push(this.player),this.player.enemyList=this.enemyList,this.player.allyList=this.friendList,SU.getInstance().addChild(this.player),this.applyCastleSkin(this.map.getRealm()),this.currentWave=EG.wave||1,this.waveTimer=0,this.waveDuration=600,this.rushTime=420,Kdi.releaseAll(this.spawnSchedule),this.spawnScheduleIndex=0,this.allEnemiesSpawned=!1,this.totalEnemiesInWave=0,this.bossSpawned=!1,this.isGameOverFlag=!1,this.shownDialogueWaves.clear(),cdi.getInstance().updateDay(EG.wave),oG.getInstance().startUpdate(),this.updateReviveGoldBuff(),this.startNewWave();
- super.show(),this.map.show(),I0.setDay(XD.wave),this.map.applySeason(this.map.getSeason(),!0),sU.getInstance().updateSeason(this.map.getSeason()),IU.getInstance().setTimeOfDay(XD.wave,!0),this.player.restoreAttackRangeCircle()}
+ super.show(),this.map.show(),oF.setDay(EG.wave),this.map.applySeason(this.map.getSeason(),!0),GU.getInstance().updateSeason(this.map.getSeason()),EF.getInstance().setTimeOfDay(EG.wave,!0,this.map.getRealm()),this.player.restoreAttackRangeCircle()}
- return e>0&&!s&&(this.skippedWaves=Bli(t,e,eP.getInstance().getGameplayTotal(GR.AncientForestLegend)),this.skippedWaves.length>0&&(i+=this.skippedWaves.length,Gli.getInstance().show(t,i))),this.isFirstWave=!1,XD.wave=i,xli.getInstance().updateDay(XD.wave),this.skippedWaves.length>0&&xli.getInstance().showWaveSkipBonus(this.skippedWaves.length),_ai.getInstance().isRunning&&_ai.getInstance().tutorialIndex===_ai.TUTORIAL_INDEX_WAVE0&&0==_ai.getInstance().savedIndex&&(i=1,XD.wave=i,xli.getInstance().updateDay(XD.wave),_ai.getInstance().endTutorialWave0()),i}
+ if(e>0&&!s){
+ this.skippedWaves=gdi(t,e,kP.getInstance().getGameplayTotal(lx.AncientForestLegend));
+ const s=uU(t,i+this.skippedWaves.length);
+ this.skippedWaves=this.skippedWaves.slice(0,Math.max(0,s-i)),this.skippedWaves.length>0&&(i+=this.skippedWaves.length,pdi.getInstance().show(t,i))}
+ return this.isFirstWave=!1,EG.wave=i,cdi.getInstance().updateDay(EG.wave),this.skippedWaves.length>0&&cdi.getInstance().showWaveSkipBonus(this.skippedWaves.length),jci.getInstance().isRunning&&jci.getInstance().tutorialIndex===jci.TUTORIAL_INDEX_WAVE0&&0==jci.getInstance().savedIndex&&(i=1,EG.wave=i,cdi.getInstance().updateDay(EG.wave),jci.getInstance().endTutorialWave0()),i}
- gJt.getInstance().setData(),xli.getInstance().updateDay(XD.wave),J1t.getInstance().updateInfo(this.player.hp,this.player.maxHp),ND.getInstance().startUpdate(),this.lastSavedWave=XD.wave,this.lastSavedGold=XD.gold,this.startAutoSaveTimer(),XD.wave>1&&$li.getInstance().show(XD.wave),this.startNewWave(),this.updateZoom()}
+ dQt.getInstance().setData(),cdi.getInstance().updateDay(EG.wave),r5t.getInstance().updateInfo(this.player.hp,this.player.maxHp),oG.getInstance().startUpdate(),this.lastSavedWave=EG.wave,this.lastSavedGold=EG.gold,this.startAutoSaveTimer(),EG.wave>1&&_di.getInstance().show(EG.wave),this.startNewWave(),cU(EG.wave)===this.map.getRealm()&&this.applyCastleSkin(this.map.getRealm()),this.updateZoom()}
- const i=(this.activeWaveNumbers.length>0?Math.max(...this.activeWaveNumbers)+1:XD.wave+1)+Math.max(0,t-1);
+ const i=this.activeWaveNumbers.length>0?Math.max(...this.activeWaveNumbers)+1:EG.wave+1;
+ if(!this.canCallNextWave())return this.realmIntroHold||vH.getInstance().showMessage(Uzt(G8t.waveCallBlocked)),!1;
+ const s=Math.min(i+Math.max(0,t-1),this.realmStartAbove(EG.wave)-1);
- return this.spawnSchedule.splice(0,this.spawnScheduleIndex),this.spawnScheduleIndex=0,this.spawnSchedule.push(...r),this.spawnSchedule.sort((t,i)=>t.spawnTime-i.spawnTime),this.activeWaveNumbers.push(i),this.waveSpawnStatus.set(i,!1),this.totalEnemiesInWave+=h,this.allEnemiesSpawned=!1,xli.getInstance().updateWaves(this.activeWaveNumbers),!0}
+ return this.spawnSchedule.splice(0,this.spawnScheduleIndex),this.spawnScheduleIndex=0,this.spawnSchedule.push(...o),this.spawnSchedule.sort((t,i)=>t.spawnTime-i.spawnTime),this.activeWaveNumbers.push(s),this.waveSpawnStatus.set(s,!1),this.totalEnemiesInWave+=r,this.allEnemiesSpawned=!1,cdi.getInstance().updateWaves(this.activeWaveNumbers),!0}
- return Z1t.isWithinMaxWave(i)?QU.getInstance().getScenarioForWave(this.currentScenarioId,i)?(XD.wave=i,this.currentWave=i,xli.getInstance().updateDay(XD.wave),this.startNewWave(),"ok"):"blocked":"maxWave"}
+ return a5t.isWithinMaxWave(i)?this.realmIntroHold||this.crossesRealmStart(t,i)?"blocked":zF.getInstance().getScenarioForWave(this.currentScenarioId,i)?(EG.wave=i,this.currentWave=i,cdi.getInstance().updateDay(EG.wave),this.startNewWave(),"ok"):"blocked":"maxWave"}
- return QU.getInstance().getScenarioForWave(this.currentScenarioId,t)?(XD.wave=t,this.currentWave=t,xli.getInstance().updateDay(XD.wave),this.startNewWave(),"ok"):"blocked"}
+ return this.realmIntroHold?"blocked":zF.getInstance().getScenarioForWave(this.currentScenarioId,t)?(EG.wave=t,this.currentWave=t,cdi.getInstance().updateDay(EG.wave),this.startNewWave(),"ok"):"blocked"}
- for(const i of this.skippedWaves)this.shownDialogueWaves.has(i)||(t.push(...ZKt.getInstance().getByWave(i)),this.shownDialogueWaves.add(i));
- this.shownDialogueWaves.has(XD.wave)||(t.push(...ZKt.getInstance().getByWave(XD.wave)),this.shownDialogueWaves.add(XD.wave)),t.length>0&&eai.getInstance().showDialogues(t)}
- IU.getInstance().setTimeOfDay(XD.wave),I0.setDay(XD.wave),I0.isNight?this.map.setNight():this.map.setDay();
+ for(const i of this.skippedWaves)this.shownDialogueWaves.has(i)||(t.push(...tYt.getInstance().getByWave(i)),this.shownDialogueWaves.add(i));
+ this.shownDialogueWaves.has(EG.wave)||(t.push(...tYt.getInstance().getByWave(EG.wave)),this.shownDialogueWaves.add(EG.wave)),t.length>0&&Ici.getInstance().showDialogues(t)}
+ EF.getInstance().setTimeOfDay(EG.wave,!1,this.map.getRealm()),oF.setDay(EG.wave),oF.isNight?this.map.setNight():this.map.setDay();
- const s=RB(XD.wave),e=PB(XD.wave);
- XD.wave>=9950&&tui.preloadDeadLand().catch(t=>{
+ const s=nU(EG.wave),e=cU(EG.wave),n=this.realmStartAbove(EG.wave);
+ EG.wave>=n-50&&m7t.preloadRealm(cU(n)).catch(t=>{
- ),e!==this.map.getRealm()?IU.getInstance().playRealmTransition(async()=>{
- await tui.preloadDeadLand().catch(()=>{
- }
- ),this.map.applySeason(s,!0,e),IU.getInstance().setTimeOfDay(XD.wave,!0),sU.getInstance().updateSeason(this.map.getSeason(),!0)}
- ):(this.map.applySeason(s),sU.getInstance().updateSeason(this.map.getSeason()));
+ ),e!==this.map.getRealm()?this.changeRealm(s,e):(this.map.applySeason(s),GU.getInstance().updateSeason(this.map.getSeason()));
- this.waveDuration=i.duration,this.rushTime=Math.floor(i.duration*i.rushRatio),this.totalEnemiesInWave=QU.getInstance().getTotalEnemyCount(n),sui.releaseAll(this.spawnSchedule),this.spawnSchedule=this.generateSpawnSchedule(h,r,XD.wave),this.injectBossesToSchedule(this.spawnSchedule,XD.wave),this.spawnScheduleIndex=0,this.allEnemiesSpawned=!1,this.bossSpawned=!1,this.waveTimer=0,this.castleDestroyHandled=!1,this.resetActiveWaves(),this.activeWaveNumbers.push(XD.wave),this.waveSpawnStatus.set(XD.wave,!1),this.checkGodBlessAcrossWaveJump()}
+ this.waveDuration=i.duration,this.rushTime=Math.floor(i.duration*i.rushRatio),this.totalEnemiesInWave=zF.getInstance().getTotalEnemyCount(h),Kdi.releaseAll(this.spawnSchedule),this.spawnSchedule=this.generateSpawnSchedule(r,o,EG.wave),this.injectBossesToSchedule(this.spawnSchedule,EG.wave),this.spawnScheduleIndex=0,this.allEnemiesSpawned=!1,this.bossSpawned=!1,this.waveTimer=0,this.castleDestroyHandled=!1,this.resetActiveWaves(),this.activeWaveNumbers.push(EG.wave),this.waveSpawnStatus.set(EG.wave,!1),this.checkGodBlessAcrossWaveJump(),this.refreshRealmHud()}
+ get isRealmIntroHolding(){
+ return this.realmIntroHold}
+ realmStartAbove(t){
+ return aU.find(i=>i>t)??1/0}
+ crossesRealmStart(t,i){
+ return uU(t,i)!==i}
+ canCallNextWave(){
+ return!this.realmIntroHold&&(this.activeWaveNumbers.length>0?Math.max(...this.activeWaveNumbers)+1:EG.wave+1)<this.realmStartAbove(EG.wave)}
+ startRealmFor(t){
+ const i=cU(t);
+ return i===hU.FIRE_LAND&&Fdi.isPending()?hU.FOREST:i}
+ refreshRealmHud(){
+ $8t.getInstance().refresh(EG.wave,this.map.getRealm())}
+ replayFireIntroForTest(){
+ var t,i;
+ if(this.realmIntroHold||Fdi.isRunning)return;
+ null==(i=null==(t=this.player)?void 0:t.setSkin)||i.call(t,null);
+ const s=nU(EG.wave);
+ this.map.applySeason(s,!0,hU.FOREST),EF.getInstance().setTimeOfDay(EG.wave,!0,hU.FOREST),GU.getInstance().updateSeason(this.map.getSeason(),!0),this.refreshRealmHud(),this.changeRealm(s,hU.FIRE_LAND,!0)}
+ changeRealm(t,i,s=!1){
+ const e=this.map.getRealm(),n=i===hU.FIRE_LAND&&e===hU.FOREST&&(s||Fdi.isPending()),h=Qt(async()=>{
+ await m7t.preloadRealm(i).catch(()=>{
+ }
+ ),this.map.applySeason(t,!0,i),EF.getInstance().setTimeOfDay(EG.wave,!0),GU.getInstance().updateSeason(this.map.getSeason(),!0),this.refreshRealmHud(),n||this.applyCastleSkin(i)}
+ ,"switchMap");
+ if(n)return this.realmIntroHold=!0,void Fdi.play({
+ castle:this.player,transform:Qt(()=>EF.getInstance().playRealmTransition(h,i),"transform"),canShow:Qt(()=>{
+ var t;
+ return!0===(null==(t=this.player)?void 0:t.visible)}
+ ,"canShow"),hideActors:Qt(()=>this.hideFieldActors(),"hideActors"),transformCastle:Qt(()=>this.applyCastleSkin(i),"transformCastle")}
+ ).finally(()=>{
+ this.map.getRealm()!==i&&h(),this.applyCastleSkin(i),this.realmIntroHold=!1}
+ );
+ const r=lU(i)<lU(e);
+ i!==hU.FIRE_LAND||r?EF.getInstance().playRealmTransition(h,i,r):h()}
+ applyCastleSkin(t){
+ const i=this.player;
+ if(!i||"function"!=typeof i.setSkin)return;
+ const s=lU(hU.FIRE_LAND),e=EG.maxWave>=s||lU(t)>=s;
+ i.setSkin(e?Ddi(Ndi()):null)}
+ hideFieldActors(){
+ const t=[],i=Qt(i=>{
+ i&&(t.push({
+ c:i,v:i.visible}
+ ),i.visible=!1)}
+ ,"hide"),s=[...this.friendList.filter(t=>t!==this.player),...this.enemyList,...this.goldGoblinList,...this.adsGoblinList];
+ for(const e of s)i(e),i(e.shadowSprite);
+ return i(PU.getInstance()),i(bU.getInstance()),()=>{
+ for(const i of t)i.c.visible=i.v}
+ }
EventDataManager 6 hunks, 77 statements
+ static isAscentShopOpen(){
+ var t;
+ const i=Date.parse((null==(t=this.miniAscentShop)?void 0:t.endTime)??""),s=DR.time>=0?DR.time:Date.now();
+ return Number.isFinite(i)&&s<i}
+ if(this.miniAscentShop=t.body.miniAscentShop??null,t.body.attendEvent){
+ const i=t.body.attendEvent,s=new FB;
+ s.type=6,s.id=i.id,s.startTime=i.startTime,s.endTime=i.endTime,s.message=i.message,s.image=i.image,s.rewards=i.rewards,s.attendCount=i.attendCount,s.attendedToday=i.attendedToday,s.completed=i.completed,this.objList[s.type]||(this.objList[s.type]=[]),this.objList[s.type].push(s)}
+ if(t.body.towerEvent){
+ const i=t.body.towerEvent,s=new FB;
+ s.type=7,s.id=i.id,s.rewards=i.rewards,s.startTime=i.seasonStartTime,s.endTime=i.seasonEndTime,s.seasonId=i.seasonNumber,s.floors=i.floors,s.claimedFloor=i.claimedFloor,this.objList[s.type]||(this.objList[s.type]=[]),this.objList[s.type].push(s),this.isValidEvent(7)}
- if(null==i||0==i.length)return 1==t?this.currentHeroResetEvent=null:2==t?this.currentMedalEvent=null:3==t?(this.currentPaymentSpecialEvent=null,this.currentPaymentMonthEvent=null):4==t&&(this.currentMineEvent=null),!1;
+ if(null==i||0==i.length)return 1==t?this.currentHeroResetEvent=null:2==t?this.currentMedalEvent=null:3==t?(this.currentPaymentSpecialEvent=null,this.currentPaymentMonthEvent=null):4==t?this.currentMineEvent=null:7==t&&(this.currentTowerEvent=null),!1;
- const t=new Date;
+ const t=new Date(DR.time>=0?DR.time:Date.now());
+ if(6==t){
+ const t=new Date(DR.time);
+ return i.some(i=>this.isMineEventActive(i,t))}
+ if(7==t){
+ for(let t of i){
+ const i=new Date;
+ if(this.isMineEventActive(t,i))return this.currentTowerEvent=t,!0}
+ this.currentTowerEvent=null}
+ static getActiveAttendEvent(){
+ const t=this.getVOWithType(6);
+ return null==t||0==t.length?null:t[0]}
+ static hasTodayAttendReward(){
+ const t=this.getActiveAttendEvent();
+ return!!t&&!t.attendedToday}
+ static updateAttendEvent(t){
+ if(!t||!t.id)return;
+ const i=this.getVOWithType(6);
+ if(null==i||0==i.length)return;
+ const s=i.find(i=>i.id===t.id);
+ s&&(s.attendCount=t.attendCount,s.attendedToday=t.attendedToday,s.completed=t.completed)}
+ static setEventScheduleData(t){
+ if(!t)return;
+ const i=new Date;
+ i.setUTCHours(0,0,0,0),i.setUTCDate(i.getUTCDate()-2);
+ const s=new Date;
+ s.setUTCHours(0,0,0,0),s.setUTCDate(i.getUTCDate()+7);
+ let e=null;
+ t.ascentScheduled&&(e="string"==typeof t.ascentScheduled?JSON.parse(t.ascentScheduled):t.ascentScheduled);
+ let n=null;
+ n="string"==typeof t.guildWarScheduled?JSON.parse(t.guildWarScheduled):t.guildWarScheduled;
+ const h=t.eventScheduled;
+ e&&(e.type="MINI_ASCENT",h.push(e));
+ const r={
+ MEDAL:-1,PAYMENT:1,PET_ASSISTANT:2,LOGIN:3}
+ ;
+ if(h.sort((t,i)=>(r[t.type]??0)-(r[i.type]??0)),n){
+ const t=new Date(n.firstMatchingTime.replace(" ","T")+"Z"),e=new Date(n.endTime.replace(" ","T")+"Z");
+ t.getTime()<s.getTime()&&e.getTime()>=i.getTime()&&(n.type="GUILDWAR_TOURNAMENT",n.startTime=t.toISOString(),n.endTime=e.toISOString(),h.unshift(n))}
+ h.forEach(t=>{
+ if(t.displayName)t.displayName=t.displayName;
+ else{
+ let i="Event";
+ switch(t.type){
+ case"MEDAL":i=RB.getText("GAME_541","추가 훈장 이벤트");
+ break;
+ case"HERORESET":i=RB.getText("GAME_546","영입 지원 이벤트");
+ break;
+ case"PAYMENT":i=RB.getText("GAME_945","결제 이벤트");
+ break;
+ case"PET_ASSISTANT":i=RB.getText("GAME_1919","비서 이벤트 (펫)");
+ break;
+ case"MINE":i=RB.getText("GAME_1203","화석 발굴");
+ break;
+ case"GEM_SPEND":i=RB.getText("GAME_1920","보석 소비 이벤트");
+ break;
+ case"EVENT_ATTEND":i=RB.getText("GAME_1921","출석 이벤트");
+ break;
+ case"TOWER":i=RB.getText("GAME_1922","도전의 탑 클리어 이벤트");
+ break;
+ case"MINI_ASCENT":i=RB.getText("GAME_1716","군단 도전");
+ break;
+ case"GUILDWAR_TOURNAMENT":i=RB.getText("GWT_1","서버 대항전")}
+ t.displayName=i}
+ }
+ ),this.eventScheduled=h}
MailVO 1 hunks, 72 statements
- )),Mzt=class t{
- static get opened(){
- return!1}
- static async getMyReferralCode(){
- if(this._referralCode)return this._referralCode;
- if(this.requestPending1)return this._referralCode;
- this.requestPending1=!0;
- const t=await TL.getInstance().referral.getMyReferralCode();
- try{
- const i=new URL(t);
- Array.from(i.searchParams.keys()).length>0&&(this._referralCode=t)}
- catch(i){
- }
- return this.requestPending1=!1,this._referralCode}
- static async getMyReferralStatus(t,i=!1){
- this.requestPending2||(this.requestPending2=!0,this.setStatusData({
- totalReferrals:10,qualifiedReferrals:7,claimed:2,milestoneRewards:[{
- milestone:10,weaponGrade:3}
- ,{
- milestone:20,weaponGrade:3}
- ,{
- milestone:30,weaponGrade:3}
- ,{
- milestone:40,weaponGrade:4}
- ,{
- milestone:50,weaponGrade:4}
- ]}
- ),this.requestPending2=!1,mS.getInstance().dispatchCustomEvent("ReferralStatus"))}
- static setStatusData(t){
- this._totalReferrals=Number(t.totalReferrals),this._qualifiedReferrals=Number(t.qualifiedReferrals),this._claimed=Number(t.claimed);
- const i=t.milestoneRewards;
- if(0==this.rewardList.length&&"length"in i){
- const t=i[i.length-1].milestone;
- for(let i=0;
- i<t;
- ++i)this.rewardList.push([{
- type:"gem",amount:this.GEM_PER_FRIEND}
- ]);
- const s=i.length;
- for(let e=0;
- e<s;
- ++e){
- const t=Number(i[e].milestone),s=Number(i[e].weaponGrade);
- this.rewardList[t-1].push({
- type:"weapon",amount:1,grade:s}
- )}
- }
- }
- static get totalReferrals(){
- return this._totalReferrals}
- static get qualifiedReferrals(){
- return this._qualifiedReferrals}
- static get claimed(){
- return this._claimed}
- static getRewardList(){
- return this.rewardList}
- static async claimRewards(i){
- if(this.requestPending3)return;
- this.requestPending3=!0;
- const s=await TL.getInstance().referral.claimReward(i,!0);
- if(0==s.success){
- this.requestPending3=!1,mS.getInstance().dispatchCustomEvent("ReferralStatus");
- let e=s.errorMessage;
- const n=s.error;
- return"INSUFFICIENT_REFERRAL"==n?e=nB.getValueReplaceMulti("GAME_145",["##","@@"],[t.FRIEND_LEVEL,i]):"ALREADY_CLAIMED"==n&&(e=nB.getText("COMMON_276","이미 보상을 받았습니다.")),void YG.getInstance().show(e)}
- "status"in s.body&&this.setStatusData(s.body.status),this.requestPending3=!1,mS.getInstance().dispatchCustomEvent("ReferralStatus",s)}
- static hasReward(){
- return this.claimed<this.qualifiedReferrals}
- }
- ;
- qt(Mzt,"FriendInviteManager"),Xt(Mzt,"FRIEND_LEVEL",50),Xt(Mzt,"GEM_PER_FRIEND",100),Xt(Mzt,"_referralCode",""),Xt(Mzt,"requestPending1",!1),Xt(Mzt,"requestPending2",!1),Xt(Mzt,"_totalReferrals",0),Xt(Mzt,"_qualifiedReferrals",0),Xt(Mzt,"_claimed",0),Xt(Mzt,"rewardList",[]),Xt(Mzt,"requestPending3",!1);
- let Azt=Mzt;
+ ));
ShopProductResultPopup 1 hunks, 71 statements
+ )),e_i=class t extends uB{
+ constructor(){
+ super(),Zt(this,"items"),Zt(this,"container"),Zt(this,"btnConfirm"),this.title=RB.getText("GAME_347","상품이 지급되었습니다."),this.items=[],this.container=new Ve,this.addChild(this.container),this.btnConfirm=new hB("확인"),this.addChild(this.btnConfirm),this.btnConfirm.onClick=()=>{
+ this.hide()}
+ ,this.updateLayout()}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ updateLayout(){
+ let t=80;
+ this.container.x=.5*(this.width-this.container.width),this.container.y=t,t+=this.container.height+20,this.btnConfirm.x=.5*(this.width-this.btnConfirm.width),this.btnConfirm.y=t,this.height=this.btnConfirm.y+this.btnConfirm.height+30}
+ setData(t){
+ if(!t||!t.rewards)return;
+ let i,s,e;
+ this.title=RB.getText("GAME_347","상품이 지급되었습니다.");
+ let n=[],h=[],r=[],o=[],a=[],c=[],l=[];
+ const u=t.rewards.length;
+ for(let m=0;
+ m<u;
+ ++m)if(e=t.rewards[m],i=e.type,s=e.subType,i==d4.buff)switch(s){
+ case d4.ads:r.push(e);
+ break;
+ case d4.speed:o.push(e);
+ break;
+ case d4.assistant:a.push(e);
+ break;
+ case d4.bless:l.push(e)}
+ else i==d4.instant?h.push(e):i==d4.ticket?n.push(e):i==d4.pass?c.push(e):n.push(e);
+ this.container.removeChildren();
+ const d=[],f=[];
+ n.length>0&&(d.push(n),f.push(RB.getText("COMMON_120","메일함으로 발송되었습니다."))),h.length>0&&(d.push(h),f.push(RB.getText("COMMON_119","즉시 지급되었습니다."))),r.length>0&&(d.push(r),f.push(RB.getText("GAME_348","광고 제거 상품이 적용되었습니다."))),o.length>0&&(d.push(o),f.push(RB.getText("GAME_349","2배속 상품이 적용되었습니다."))),a.length>0&&(d.push(a),f.push(RB.getText("GAME_1242","전문비서가 고용되었습니다."))),c.length>0&&(d.push(c),f.push(RB.getText("GAME_350","WAVE 패스가 활성화되었습니다."))),l.length>0&&(d.push(l),f.push(RB.getText("COMMON_574","즉시 적용되었습니다.")));
+ let p,g=0;
+ const w=d.length;
+ for(let m=0;
+ m<w;
+ ++m){
+ m<this.items.length?p=this.items[m]:(p=new r_i,this.items.push(p));
+ const t=d[m]!=l;
+ p.setData(d[m],f[m],t),p.y=g,this.container.addChild(p),g+=p.height+15}
+ this.updateLayout()}
+ }
+ ;
+ Qt(e_i,"ShopProductResultPopup"),Zt(e_i,"_instance");
+ let n_i=e_i;
+ const h_i=class extends Ve{
+ constructor(){
+ super(),Zt(this,"icon"),Zt(this,"lbl"),Zt(this,"bg"),Zt(this,"container"),Zt(this,"rewardItems"),this.icon=new Ye(kS.getTexture("UI_Ekkorr","Icon_alarm_check_brown")),this.addChild(this.icon);
+ const t=sD.DEFAULT_FONT_OPTION_18;
+ t.fill=sD.COLOR_WHITE,t.fontWeight="normal",this.lbl=new QD("메일함으로 발송되었습니다.",t.fill,t),this.lbl.x=this.icon.x+this.icon.width+5,this.lbl.y=this.icon.y,this.addChild(this.lbl),sD.setLabelWrapWidth(this.lbl,this.width-60),this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","Popup_Bg_03"),leftWidth:30,topHeight:30,rightWidth:30,bottomHeight:30}
+ ),this.bg.alpha=.7,this.bg.width=this.width,this.bg.height=120,this.addChild(this.bg),this.container=new Ve,this.addChild(this.container),this.rewardItems=[]}
+ get width(){
+ return 530}
+ get height(){
+ return this.bg.visible?this.bg.y+this.bg.height:this.lbl.y+this.lbl.height}
+ setData(t,i,s=!0){
+ if(this.lbl.text=i,0==s)return this.bg.visible=!1,void(this.container.visible=!1);
+ this.container.removeChildren();
+ let e,n=0;
+ const h=t.length;
+ for(let r=0;
+ r<h;
+ ++r)r<this.rewardItems.length?e=this.rewardItems[r]:(e=new p4,this.rewardItems.push(e)),e.setDataFrom(t[r]),e.type==d4.speed||e.subType==d4.speed||e.type==d4.assistant||e.subType==d4.assistant||e.type==d4.ads||e.subType==d4.ads?e.hideAmount():e.showAmount(),e.x=n,this.container.addChild(e),n+=e.width+10;
+ this.bg.y=this.lbl.y+this.lbl.height+7,this.bg.height=this.container.height+15+10,this.container.x=.5*(this.width-n),this.container.y=this.bg.y+15,this.bg.visible=!0,this.container.visible=!0}
+ }
+ ;
+ Qt(h_i,"ShopProductResultItem");
+ let r_i=h_i;
+ const o_i=Object.freeze(Object.defineProperty({
+ __proto__:null,ShopProductResultItem:r_i,ShopProductResultPopup:n_i}
+ ,Symbol.toStringTag,{
+ value:"Module"}
TowerEventRewardItemRenderer 1 hunks, 63 statements
- super(),Xt(this,"lblTicket",new SD("티켓 : 5/5",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17)),Xt(this,"lblTimer",new kU("Icon_Time02","00:00",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17)),Xt(this,"btnGuide",new nU("UI_Ekkorr","UI_Alarm")),Xt(this,"lblSeasonRemaining",new SD("",16768358,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"refreshCooldown",0),this.lblTitle.setStyle(OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.updateTitle(),this.lblTitle.y=5,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
+ super(),Zt(this,"bg"),Zt(this,"lblScore",new QD("",sD.COLOR_BRIGHT_ORANGE,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconGem"),Zt(this,"lblGem",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"iconHonor"),Zt(this,"lblHonor",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16));
+ const i=t.ITEM_WIDTH,s=t.ITEM_HEIGHT,e=t.ICON_SIZE,n=.5*(s-this.lblScore.height),h=.5*(s-e);
+ this.bg=new eE({
+ texture:kS.getTexture("UI_Ekkorr","Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
+ ),this.bg.width=i,this.bg.height=s,this.addChild(this.bg),this.lblScore.x=t.COL_SCORE_X,this.lblScore.y=n,this.addChild(this.lblScore),this.iconGem=new Ye(kS.getTexture("UI_Ekkorr","UI_GEM_ICON")),this.iconGem.width=e,this.iconGem.height=e,this.iconGem.x=t.COL_GEM_X,this.iconGem.y=h,this.addChild(this.iconGem),this.lblGem.x=this.iconGem.x+e+t.LABEL_GAP,this.lblGem.y=n,this.addChild(this.lblGem),this.iconHonor=new Ye(kS.getTexture("UI_Ekkorr","PVP_COIN_ON")),this.iconHonor.width=e,this.iconHonor.height=e,this.iconHonor.x=t.COL_HONOR_X,this.iconHonor.y=h,this.addChild(this.iconHonor),this.lblHonor.x=this.iconHonor.x+e+t.LABEL_GAP,this.lblHonor.y=n,this.addChild(this.lblHonor)}
+ setData(t){
+ this.data=t,t&&(this.lblScore.text=t.floorLabel,this.lblGem.text=String(t.gem),this.lblHonor.text=String(t.honor),this.iconGem.visible=this.lblGem.visible=t.gem>0,this.iconHonor.visible=this.lblHonor.visible=t.honor>0)}
+ get height(){
+ return t.ITEM_HEIGHT+2}
+ static get scoreX(){
+ return t.COL_SCORE_X}
+ static get gemX(){
+ return t.COL_GEM_X}
+ static get honorX(){
+ return t.COL_HONOR_X}
+ }
+ ;
+ Qt(f3t,"TowerEventRewardItemRenderer"),Zt(f3t,"ITEM_WIDTH",520),Zt(f3t,"ITEM_HEIGHT",48),Zt(f3t,"COL_SCORE_X",20),Zt(f3t,"COL_GEM_X",175),Zt(f3t,"COL_HONOR_X",350),Zt(f3t,"ICON_SIZE",22),Zt(f3t,"LABEL_GAP",6);
+ let p3t=f3t;
+ const g3t=class t extends zU{
+ constructor(){
+ super(),Zt(this,"lblHdrScore"),Zt(this,"lblHdrGem"),Zt(this,"lblHdrHonor"),Zt(this,"rewardList"),this.height=t.POPUP_HEIGHT;
+ const i=sD.DEFAULT_OUTLINE_FONT_OPTION_16;
+ this.lblHdrScore=new QD("",8947848,i),this.lblHdrGem=new QD("",8947848,i),this.lblHdrHonor=new QD("",8947848,i),this.contentContainer.addChild(this.lblHdrScore),this.contentContainer.addChild(this.lblHdrGem),this.contentContainer.addChild(this.lblHdrHonor),this.rewardList=new TR(p3t,p3t.ITEM_WIDTH,t.LIST_HEIGHT,2),this.rewardList.x=t.REWARD_LIST_X,this.contentContainer.addChild(this.rewardList),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ async showGuide(){
+ if(!GB.isValidEvent(BB.TOWER_EVENT))return;
+ const i=GB.currentTowerEvent;
+ if(!i)return;
+ const s=i.floors.reverse(),e=i.rewards.reverse(),n=[];
+ s.forEach(t=>{
+ const i=`${
+ t}
+ F`,h=s.indexOf(t),r=e[h];
+ let o=0,a=0;
+ r.forEach(t=>{
+ "gem"===t.type&&(o+=t.amount),"honorCoin"===t.type&&(a+=t.amount)}
+ ),n.push({
+ floorLabel:i,gem:o,honor:a}
+ )}
+ ),this.title=`${
+ RB.getText("GAME_80","도전의 탑")}
+  ${
+ RB.getText("GAME_1844","이벤트")}
+ `,this.refreshRewardHeaders(),this.rewardList.dataProvider=n,this.rewardList.scrollTo(0);
+ const h=Math.min(t.LIST_HEIGHT,p3t.ITEM_HEIGHT*n.length+20);
+ this.rewardList.setListHeight(h),this.height=this.rewardList.y+this.rewardList.height+20,await this.loadImage(),super.show()}
+ refreshRewardHeaders(){
+ this.lblHdrScore.text=RB.getText("F","F"),this.lblHdrGem.text=RB.getText("COMMON_350","보석"),this.lblHdrHonor.text=RB.getText("GAME_88","명예코인");
+ const i=t.REWARD_LIST_X,s=t.CONTENT_Y;
+ this.lblHdrScore.x=i+p3t.scoreX,this.lblHdrGem.x=i+p3t.gemX,this.lblHdrHonor.x=i+p3t.honorX,this.lblHdrScore.y=s,this.lblHdrGem.y=s,this.lblHdrHonor.y=s,this.rewardList.y=s+this.lblHdrScore.height+12}
+ getDefaultPositionY(){
+ return.5*ES.stageHeight}
+ onBackButton(){
+ return this.hide(),!0}
+ }
+ ;
+ Qt(g3t,"TowerEventGuidePopup"),Zt(g3t,"_instance"),Zt(g3t,"POPUP_HEIGHT",320),Zt(g3t,"CONTENT_Y",80),Zt(g3t,"LIST_HEIGHT",520),Zt(g3t,"REWARD_LIST_X",30);
+ let w3t=g3t;
+ const m3t=class t extends Pqt{
+ constructor(){
+ super(),Zt(this,"lblTicket",new QD("티켓 : 5/5",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblTimer",new SF("Icon_Time02","00:00",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"btnGuide",new UU("UI_Ekkorr","UI_Alarm")),Zt(this,"lblSeasonRemaining",new QD("",16768358,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"refreshCooldown",0),Zt(this,"eventTag"),Zt(this,"btnEventGuide"),this.lblTitle.setStyle(sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.updateTitle(),this.lblTitle.y=5,this.addChild(this.btnGuide),this.btnGuide.on("pointertap",()=>{
RankBadge 2 hunks, 59 statements
+ function QZt(t){
+ if(!(t>0))return{
+ frame:"Icon_RankBadge_11",label:"-"}
+ ;
+ const i=Math.floor(t);
+ return i<=5?{
+ frame:`Icon_RankBadge_0${
+ i}
+ `,label:null}
+ :i<=10?{
+ frame:"Icon_RankBadge_06",label:String(i)}
+ :{
+ frame:"Icon_RankBadge_11",label:String(i)}
+ }
+ function ZZt(t,i){
+ const s=t.length<=2?.3:3===t.length?.26:.2;
+ return Math.round(i*s)}
+ Qt(QZt,"rankBadgeFrame"),Qt(ZZt,"rankLabelFontSize");
+ constructor(t=58){
+ super(),Zt(this,"size"),Zt(this,"icon"),Zt(this,"lbl"),this.size=t,this.eventMode="none",this.icon=new Ye(kS.getTexture("UI_Ekkorr","Icon_RankBadge_11")),this.icon.width=t,this.icon.height=t,this.addChild(this.icon);
+ const i=sD.DEFAULT_OUTLINE_FONT_OPTION_20;
+ i.stroke={
+ color:1971212,width:4,join:"round"}
+ ,this.lbl=new QD("",16777215,i),this.lbl.visible=!1,this.addChild(this.lbl)}
+ setRank(t){
+ const{
+ frame:i,label:s}
+ =QZt(t);
+ this.icon.texture=kS.getTexture("UI_Ekkorr",i),this.icon.width=this.size,this.icon.height=this.size,this.lbl.visible=null!==s,null!==s&&(this.lbl.textSize=ZZt(s,this.size),this.lbl.text=s,this.lbl.x=.5*(this.size-this.lbl.width),this.lbl.y=.51171875*this.size-.5*this.lbl.height)}
+ }
+ ;
+ Qt(t0t,"RankBadge");
+ let i0t=t0t;
+ function s0t(t){
+ const i=t?t.split("|"):[],s=[];
+ for(let e=0;
+ e<10;
+ e++){
+ const[t,n]=(i[e]??"0-0").split("-").map(Number),h=t>0?t:0;
+ s.push({
+ kindNum:h,trans:h>0&&n||0}
+ )}
+ return s}
+ function e0t(t,i,s){
+ const e=1/(1+Math.pow(10,(i-t)/400));
+ return Math.round(32*(s-e))}
+ function n0t(t,i,s){
+ const e=1e3+(s||0)+1,n=Qt(s=>Math.max(e,t+e0t(t,i,s))-t,"after");
+ return{
+ win:n(1),lose:n(0)}
+ }
+ function h0t(t){
+ let i=0,s=0;
+ for(const e of t)s+=e.maxHp,e.alive&&(i+=Math.max(0,Math.min(e.hp,e.maxHp)));
+ return s>0?i/s:0}
+ function r0t(t,i){
+ return t>i}
+ Qt(s0t,"parsePvpTeam"),Qt(e0t,"eloDelta"),Qt(n0t,"pvpExpectedPoints"),Qt(h0t,"pvpTeamHpRatio"),Qt(r0t,"pvpTimeoutAllyWins");
+ const o0t=class t extends OR{
BaseMap 1 hunks, 53 statements
- generatePlacements(){
- const i=[],s=t.FIELD_SIZE,e=t.EDGE_MARGIN,n=s/2,h=s/2,r=t.SAFE_RADIUS*t.SAFE_RADIUS,o=[2,3],a=qt(()=>o[Math.floor(2*Math.random())],"randTree");
- for(let t=0;
- t<8;
- t++){
- const t=Math.random(),n=t<.5?t*t*2:1-(1-t)*(1-t)*2;
- i.push({
- type:a(),x:30+n*(s-60),y:20+Math.random()*(e-20),scale:1+.3*Math.random(),flipX:Math.random()>.5}
- )}
- for(let t=0;
- t<8;
- t++){
- const t=Math.random(),e=t<.5?t*t*2:1-(1-t)*(1-t)*2;
- i.push({
- type:a(),x:30+e*(s-60),y:s-30+50*Math.random(),scale:1+.3*Math.random(),flipX:Math.random()>.5}
- )}
- for(let t=0;
- t<6;
- t++){
- const t=60*Math.random()-10,o=Math.random(),c=e+(o<.5?o*o*2:1-(1-o)*(1-o)*2)*(s-2*e);
- this.distSq(t,c,n,h)<r||i.push({
- type:a(),x:t,y:c,scale:1+.3*Math.random(),flipX:Math.random()>.5}
- )}
- for(let t=0;
- t<6;
- t++){
- const t=s-30+30*Math.random(),o=Math.random(),c=e+(o<.5?o*o*2:1-(1-o)*(1-o)*2)*(s-2*e);
- this.distSq(t,c,n,h)<r||i.push({
- type:a(),x:t,y:c,scale:1+.3*Math.random(),flipX:Math.random()>.5}
- )}
- for(let c=0;
- c<4;
- c++){
- const e=Math.random()*Math.PI*2,r=t.SAFE_RADIUS+40+Math.random()*(s/2-t.SAFE_RADIUS-20),o=n+r*Math.cos(e),a=h+r*Math.sin(e);
- o<10||o>s-10||a<10||a>s-10||i.push({
- type:4,x:o,y:a,scale:1+.4*Math.random(),flipX:Math.random()>.5}
- )}
- return i}
- distSq(t,i,s,e){
- const n=t-s,h=i-e;
- return n*n+h*h}
- setNight(i=!1){
- const s=t.NIGHT_TINT>>16&255,e=t.NIGHT_TINT>>8&255,n=255&t.NIGHT_TINT;
- for(const h of this.objects)if(i)h.tint=t.NIGHT_TINT;
- else{
- const t="number"==typeof h.tint?h.tint:16777215,i={
- r:t>>16&255,g:t>>8&255,b:255&t}
- ;
- zk.to(i,{
- r:s,g:e,b:n,duration:2,ease:"power2.inOut",onUpdate:qt(()=>{
- h.tint=i.r<<16|i.g<<8|i.b}
- ,"onUpdate")}
- )}
FireDebuffIcon 1 hunks, 43 statements
- super(),Xt(this,"btnDungeon",new nU("UI_Ekkorr","HeroGrade6")),Xt(this,"btnIdle",new nU("UI_Ekkorr","HeroGrade4")),Xt(this,"btnMap3",new nU("UI_Ekkorr","HeroGrade2")),Xt(this,"btnMap4",new nU("UI_Ekkorr","HeroGrade16")),Xt(this,"btnRaidBosses",[]),Xt(this,"btnBuff",new nU("UI_Ekkorr","HeroGrade10")),Xt(this,"btnMine",new nU("UI_Ekkorr","HeroGrade12")),Xt(this,"btnCardEvent",new nU("UI_Ekkorr","HeroGrade14")),Xt(this,"btnConquest",new nU("UI_Ekkorr","HeroGrade8")),Xt(this,"btnMiniAscent",new nU("UI_Ekkorr","HeroGrade10")),Xt(this,"btnPowerSave",new nU("UI_Ekkorr","PowerOff")),Xt(this,"healthOrb",J1t.getInstance()),Xt(this,"waveCallInfo",e2t.getInstance()),Xt(this,"timeShiftGauge",new i2t),Xt(this,"btnWaveSetting",new nU("UI_Ekkorr","smallSetting")),Xt(this,"btnAllPreset",new nU("UI_Ekkorr","AllPreset")),Xt(this,"waveSettingFrameCnt",0),Xt(this,"openingMiniAscent",!1),Xt(this,"onReviveBind"),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.waveSettingX(),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,FM.getInstance().add(this.onWaveSettingFrame,this),uqt.getInstance().x=0,uqt.getInstance().y=-13,this.addChild(uqt.getInstance()),uqt.getInstance().onVisibilityChanged=t=>{
+ super(),Zt(this,"body",new Ve),Zt(this,"disc",new ip),Zt(this,"flame",null),Zt(this,"lblLevel",new QD("Lv.1",sD.COLOR_BRIGHT_ORANGE,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"wave",0),Zt(this,"shouldShow",!1);
+ const i=t.SIZE,s=i/2;
+ this.disc.circle(s,s,s).fill(12613678),this.disc.circle(s,s,s-3).fill(3805702),this.disc.circle(s,s+6,s-10).fill({
+ color:16742942,alpha:.28}
+ ),this.body.pivot.set(s,s),this.body.position.set(s,s),this.body.addChild(this.disc,this.lblLevel),this.addChild(this.body),this.visible=!1,this.eventMode="static",this.cursor="pointer",this.hitArea=new Ui(-6,-6,i+12,i+30),this.on("pointertap",()=>{
+ jG(),U8t.getInstance().open(this.wave)}
+ )}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ refresh(i,s){
+ var e;
+ if(this.wave=i,this.shouldShow=s===hU.FIRE_LAND,this.lblLevel.text=`-${
+ Math.max(1,fU(i))}
+ %`,this.lblLevel.x=.5*(t.SIZE-this.lblLevel.width),this.lblLevel.y=t.SIZE-6,!this.shouldShow)return this.visible=!1,void(null==(e=this.flame)||e.stop());
+ pF.preload().then(()=>{
+ var t;
+ this.shouldShow&&(this.ensureFlame(),this.visible=!0,null==(t=this.flame)||t.play())}
+ ).catch(t=>{
+ }
+ )}
+ get focusTarget(){
+ return this.disc}
+ popIn(){
+ MR.killTweensOf(this.body.scale),MR.fromTo(this.body.scale,{
+ x:.2,y:.2}
+ ,{
+ x:1,y:1,duration:.45,ease:"back.out(2.4)"}
+ )}
+ ensureFlame(){
+ if(this.flame)return;
+ const i=kS.getTextures(pF.SHEET,"fla_",!0);
+ if(!i||0===i.length)return;
+ const s=new fp(i);
+ s.anchor.set(.5,.7),s.animationSpeed=.4,s.scale.set(1.35),s.position.set(t.SIZE/2,t.SIZE/2+12),s.eventMode="none",this.body.addChildAt(s,1),this.flame=s}
+ }
+ ;
+ Qt(F8t,"FireDebuffIcon"),Zt(F8t,"_instance",null),Zt(F8t,"SIZE",54);
+ let $8t=F8t;
+ const H8t=class t extends Ve{
+ constructor(){
+ super(),Zt(this,"btnDungeon",new UU("UI_Ekkorr","HeroGrade6")),Zt(this,"btnIdle",new UU("UI_Ekkorr","HeroGrade4")),Zt(this,"btnMap3",new UU("UI_Ekkorr","HeroGrade2")),Zt(this,"btnMap4",new UU("UI_Ekkorr","HeroGrade16")),Zt(this,"btnRaidBosses",[]),Zt(this,"btnBuff",new UU("UI_Ekkorr","HeroGrade10")),Zt(this,"btnMine",new UU("UI_Ekkorr","HeroGrade12")),Zt(this,"btnCardEvent",new UU("UI_Ekkorr","HeroGrade14")),Zt(this,"btnConquest",new UU("UI_Ekkorr","HeroGrade8")),Zt(this,"btnMiniAscent",new UU("UI_Ekkorr","HeroGrade10")),Zt(this,"btnPowerSave",new UU("UI_Ekkorr","PowerOff")),Zt(this,"healthOrb",r5t.getInstance()),Zt(this,"waveCallInfo",d5t.getInstance()),Zt(this,"timeShiftGauge",new l5t),Zt(this,"btnWaveSetting",new UU("UI_Ekkorr","smallSetting")),Zt(this,"btnAllPreset",new UU("UI_Ekkorr","AllPreset")),Zt(this,"waveSettingFrameCnt",0),Zt(this,"openingMiniAscent",!1),Zt(this,"onReviveBind"),this.healthOrb.x=640-.5*this.healthOrb.width-3,this.healthOrb.y=13,this.addChild(this.healthOrb);
+ const i=$8t.getInstance();
+ i.x=this.healthOrb.x-5-.5*$8t.SIZE,i.y=this.healthOrb.y-.5*this.healthOrb.height-$8t.SIZE-18,this.addChild(i),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.waveSettingX(),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,fE.getInstance().add(this.onWaveSettingFrame,this),eXt.getInstance().x=0,eXt.getInstance().y=-13,this.addChild(eXt.getInstance()),eXt.getInstance().onVisibilityChanged=t=>{
TowerBattleController 5 hunks, 42 statements
- super(),Xt(this,"battleType",AF.TOWER),Xt(this,"towerTeamVOs",[]),Xt(this,"towerSlotIndices",[]),Xt(this,"spawnedVOs",[]),Xt(this,"floor",0),Xt(this,"battleVO",null),Xt(this,"wasClearedBefore",!1),Xt(this,"initialEnemyCount",0),Xt(this,"isSimulation",!1),Xt(this,"onSimulationEnd",null),Xt(this,"speedHelper",new fZt("ef2.tower.battleSpeed")),Xt(this,"teamKindNums",[]),Xt(this,"teamTransList",[])}
+ super(),Zt(this,"battleType",v$.TOWER),Zt(this,"towerTeamVOs",[]),Zt(this,"towerSlotIndices",[]),Zt(this,"spawnedVOs",[]),Zt(this,"floor",0),Zt(this,"battleVO",null),Zt(this,"wasClearedBefore",!1),Zt(this,"initialEnemyCount",0),Zt(this,"isSimulation",!1),Zt(this,"onSimulationEnd",null),Zt(this,"allyFlowField",null),Zt(this,"enemyFlowField",null),Zt(this,"speedHelper",new y0t("ef2.tower.battleSpeed")),Zt(this,"teamKindNums",[]),Zt(this,"teamTransList",[]),this.hitFlash=!0,this.attackSfxChance=.35,this.dieSfxChance=1}
+ static wallBase(t){
+ const i=(t-320)/320;
+ return 292+45*i*i*i*i}
- await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),eli.getInstance().switchToBattle(this),this.updateZIndexSorting(),IB.getInstance().remove(this.execute,this),await KB.getInstance().play(),q2t.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),IB.getInstance().add(this.execute,this)}
+ await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),this.setupTerrain(),Rui.getInstance().switchToBattle(this),this.updateZIndexSorting(),iU.getInstance().remove(this.execute,this),await CU.getInstance().play(),n3t.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),iU.getInstance().add(this.execute,this)}
+ setupTerrain(){
+ const i=t.FIELD,s=t.EDGE,e=L1.CELL_SIZE,n=[{
+ x:0,y:0,w:s,h:i}
+ ,{
+ x:i-s,y:0,w:s,h:i}
+ ,{
+ x:0,y:t.BOTTOM,w:i,h:i-t.BOTTOM}
+ ];
+ for(let h=0;
+ h<i;
+ h+=e)n.push({
+ x:h,y:0,w:e,h:t.wallBase(h+e/2)}
+ );
+ L1.loadRects(i,i,n),L1.enabled=!0,this.allyFlowField=new L0t,this.allyFlowField.build(i,i,{
+ x:i-s-60,y:0,w:60,h:i}
+ ),this.enemyFlowField=new L0t,this.enemyFlowField.build(i,i,{
+ x:s,y:0,w:60,h:i}
+ );
+ for(const t of this.friendList)t.flowField=this.allyFlowField;
+ for(const t of this.enemyList)t.flowField=this.enemyFlowField}
+ teardownTerrain(){
+ var t,i;
+ null==(t=this.allyFlowField)||t.dispose(),this.allyFlowField=null,null==(i=this.enemyFlowField)||i.dispose(),this.enemyFlowField=null,L1.unload()}
+ clampAirUnits(){
+ const i=t.EDGE,s=t.FIELD-i,e=Qt(e=>{
+ if(!e.isAir||!e.isAlive)return;
+ e.x<i?e.x=i:e.x>s&&(e.x=s);
+ const n=t.wallBase(e.x)-40;
+ e.y<n?e.y=n:e.y>t.BOTTOM&&(e.y=t.BOTTOM)}
+ ,"clamp");
+ for(const t of this.friendList)e(t);
+ for(const t of this.enemyList)e(t)}
+ checkProgress(){
+ this.clampAirUnits(),super.checkProgress()}
- for(const t of this.enemyList)t.disablePatrol();
- for(const t of this.friendList)t.disablePatrol();
- super.cleanup()}
+ for(const t of this.enemyList)t.disablePatrol(),t.flowField=null;
+ for(const t of this.friendList)t.disablePatrol(),t.flowField=null;
+ this.teardownTerrain(),super.cleanup()}
PVPOpponentItemRenderer 7 hunks, 40 statements
- super(),Xt(this,"bg"),Xt(this,"lblRankTitle",new SD("rank",11184810,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblRankNum",new SD("",OL.DEFAULT_COLOR,OL.ORANGE_OUTLINE_FONT_OPTION_28)),Xt(this,"lblNameInfo",new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17)),Xt(this,"lblDetail",new SD("",11184810,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"btnFight",new IG("전투")),Xt(this,"onFight"),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"lblRankTitle",new QD("",11184810,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"rankBadge",new i0t(58)),Zt(this,"lblNameInfo",new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblDetail",new QD("",11184810,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblWin",new QD("",6742138,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblLose",new QD("",16738922,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"icons",[]),Zt(this,"iconVOs",[]),Zt(this,"btnFight",new iB("전투")),Zt(this,"onFight"),this.bg=new eE({
- ),this.bg.width=615,this.bg.height=80,this.bg.x=5,this.addChild(this.bg),this.lblRankTitle.x=25,this.lblRankTitle.y=6,this.addChild(this.lblRankTitle),this.lblRankNum.x=50,this.lblRankNum.y=24,this.addChild(this.lblRankNum),this.lblNameInfo.x=140,this.lblNameInfo.y=12,this.addChild(this.lblNameInfo),this.lblDetail.x=140,this.lblDetail.y=42,this.addChild(this.lblDetail),this.btnFight.color=IG.RED,this.btnFight.width=120,this.btnFight.height=55,this.btnFight.x=this.bg.width-this.btnFight.width-10,this.btnFight.y=.5*(this.bg.height-this.btnFight.height),this.btnFight.onClick=()=>{
+ ),this.bg.width=615,this.bg.height=t.BG_H,this.bg.x=5,this.bg.eventMode="none",this.addChild(this.bg),this.lblRankTitle.x=25,this.lblRankTitle.y=10,this.addChild(this.lblRankTitle),this.rankBadge.x=36,this.rankBadge.y=34,this.addChild(this.rankBadge),this.lblNameInfo.x=140,this.lblNameInfo.y=8,this.addChild(this.lblNameInfo),this.lblDetail.x=140,this.lblDetail.y=36,this.addChild(this.lblDetail),this.lblWin.y=36,this.lblLose.y=36,this.addChild(this.lblWin,this.lblLose);
+ const i=t.ICON_SCALE;
+ for(let s=0;
+ s<10;
+ s++){
+ const e=new e4;
+ e.setMode(i4.BOOK),e.scale.set(i),e.eventMode="none",e.x=t.ICON_X+s*(e.width+t.ICON_GAP),e.y=t.ICON_Y,this.addChild(e),this.icons.push(e),this.iconVOs.push(ix.getVO())}
+ this.btnFight.color=iB.RED,this.btnFight.width=120,this.btnFight.height=52,this.btnFight.x=this.bg.x+this.bg.width-this.btnFight.width-10,this.btnFight.y=8,this.btnFight.onClick=()=>{
- this.data=t,this.lblRankNum.text=`${
- t.rank}
- `,this.lblRankNum.x=15+.5*(100-this.lblRankNum.width);
- const i=Number(t.maxWave)||0,s=Math.floor(i/100);
+ this.data=t,this.lblRankTitle.text=RB.getText("COMMON_373","순위"),this.lblRankTitle.x=15+.5*(100-this.lblRankTitle.width),this.rankBadge.setRank(Number(t.rank)||0);
+ const i=Math.floor((Number(t.maxWave)||0)/100);
- const e=Number(t.total)||0,n=Number(t.win)||0,h=e-n;
+ const s=Number(t.total)||0,e=Number(t.win)||0;
- t.point.toLocaleString()}
- `+nB.getText("COMMON_37","점수").charAt(0)+`  ( ${
+ Number(t.point).toLocaleString()}
+ `+RB.getText("COMMON_37","점수").charAt(0)+` ( ${
- h}
-  )`,this.btnFight.text=nB.getText("GAME_70","전투")}
+ s-e}
+  )`,this.setPreview(t.preview),this.setTeam(t.team),this.btnFight.text=RB.getText("GAME_70","전투")}
+ setPreview(i){
+ const s=t.RIGHT_X;
+ this.lblWin.visible=this.lblLose.visible=null!=i,i&&(this.lblWin.text=`${
+ i.win>=0?"+":""}
+ ${
+ i.win}
+ `,this.lblLose.text=` / ${
+ i.lose>=0?"+":""}
+ ${
+ i.lose}
+ `,this.lblLose.x=s-this.lblLose.width,this.lblWin.x=this.lblLose.x-this.lblWin.width)}
+ setTeam(t){
+ const i=s0t(t);
+ for(let s=0;
+ s<10;
+ s++){
+ const t=this.icons[s],e=i[s];
+ if(t.visible=e.kindNum>0,!t.visible)continue;
+ const n=this.iconVOs[s];
+ n.kindNum=e.kindNum,n.trans=e.trans,t.setData(n)}
+ }
- qt(QQt,"PVPOpponentItemRenderer");
+ Qt(o0t,"PVPOpponentItemRenderer"),Zt(o0t,"BG_H",108),Zt(o0t,"ICON_SCALE",.34),Zt(o0t,"ICON_X",140),Zt(o0t,"ICON_Y",68),Zt(o0t,"ICON_GAP",2),Zt(o0t,"RIGHT_X",476);
PVP2ReadyPopup 16 hunks, 40 statements
- )),Xt(W4t,"ALLY_FORMATION",[{
- x:180,y:440}
+ )),Zt(M7t,"ZOOM",1.1),Zt(M7t,"UNIT_SCALE",.85),Zt(M7t,"ALLY_FORMATION",[{
+ x:200,y:290}
- x:180,y:490}
+ x:200,y:340}
- x:180,y:540}
+ x:200,y:390}
- x:180,y:590}
+ x:200,y:440}
- x:80,y:460}
+ x:120,y:310}
- x:80,y:520}
+ x:120,y:370}
- x:80,y:580}
+ x:120,y:430}
- x:10,y:460}
+ x:50,y:310}
- x:10,y:520}
+ x:50,y:370}
- x:10,y:580}
+ x:50,y:430}
- super(),Xt(this,"vsImage",new je(eS.getTexture("UI_Ekkorr","UI_VS"))),Xt(this,"allyBtns",[]),Xt(this,"enemyBtns",[]),Xt(this,"battleContainer",new He),Xt(this,"btnStart",new IG("전투")),Xt(this,"lblMyName",new SD("",OL.COLOR_BRIGHT_GREEN,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"lblMyStats",new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"lblOpName",new SD("",OL.COLOR_BRIGHT_GREEN,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"lblOpStats",new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"heroList"),Xt(this,"selectedSlot",-1),Xt(this,"lblHeroList",new SD("영웅 선택",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"teamKindNums",[]),Xt(this,"teamTrans",[]),Xt(this,"originalTeam",""),Xt(this,"heroVOs",[]),Xt(this,"pvpInfo"),Xt(this,"userPvp"),Xt(this,"opInfo"),Xt(this,"opKindNums",[]),Xt(this,"opTrans",[]),Xt(this,"requestPending",!1),this.y-=100,this.bg.height+=100,this.lblMyName.x=15,this.lblMyName.y=45,this.addChild(this.lblMyName),this.lblMyStats.x=15,this.lblMyStats.y=this.lblMyName.y+this.lblMyName.height+2,this.addChild(this.lblMyStats),this.lblOpName.y=this.lblMyName.y,this.addChild(this.lblOpName),this.lblOpStats.y=this.lblMyStats.y,this.addChild(this.lblOpStats);
+ super(),Zt(this,"vsImage",new Ye(kS.getTexture("UI_Ekkorr","UI_VS"))),Zt(this,"allyBtns",[]),Zt(this,"enemyBtns",[]),Zt(this,"battleContainer",new Ve),Zt(this,"btnStart",new iB("전투")),Zt(this,"lblMyName",new QD("",sD.COLOR_BRIGHT_GREEN,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblMyStats",new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblOpName",new QD("",sD.COLOR_BRIGHT_GREEN,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblOpStats",new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblWin",new QD("",6742138,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblLose",new QD("",16738922,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"heroList"),Zt(this,"selectedSlot",-1),Zt(this,"lblHeroList",new QD("영웅 선택",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"teamKindNums",[]),Zt(this,"teamTrans",[]),Zt(this,"originalTeam",""),Zt(this,"heroVOs",[]),Zt(this,"pvpInfo"),Zt(this,"userPvp"),Zt(this,"opInfo"),Zt(this,"opKindNums",[]),Zt(this,"opTrans",[]),Zt(this,"requestPending",!1),this.y-=100,this.bg.height+=100,this.lblMyName.x=15,this.lblMyName.y=45,this.addChild(this.lblMyName),this.lblMyStats.x=15,this.lblMyStats.y=this.lblMyName.y+this.lblMyName.height+2,this.addChild(this.lblMyStats),this.lblOpName.y=this.lblMyName.y,this.addChild(this.lblOpName),this.lblOpStats.y=this.lblMyStats.y,this.addChild(this.lblOpStats),this.lblWin.y=this.lblMyStats.y,this.lblLose.y=this.lblMyStats.y,this.addChild(this.lblWin,this.lblLose);
- this.pvpInfo=t,this.userPvp=i,this.opInfo=s,this.lblHeroList.text=nB.getText("GAME_563","영웅 선택"),this.btnStart.text=nB.getText("GAME_70","전투"),this.lblMyName.text=`Rank.${
- i.rank}
+ this.pvpInfo=t,this.userPvp=i,this.opInfo=s,this.lblHeroList.text=RB.getText("GAME_563","영웅 선택"),this.btnStart.text=RB.getText("GAME_70","전투"),this.lblMyName.text=`${
+ this.rankText(i.rank)}
-  )`,this.lblOpName.text=`Rank.${
- s.rank}
+  )`,this.lblOpName.text=`${
+ this.rankText(s.rank)}
-  )`,this.lblOpStats.x=this.bg.width-this.lblOpStats.width-15,this.opKindNums=[],this.opTrans=[],this.parseTeamData(this.opInfo.team,this.opKindNums,this.opTrans),this.initTeam(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),CXt.onHeroClick=this.onClickHeroFromList.bind(this),this.updateHeroList()}
+  )`,this.lblOpStats.x=this.bg.width-this.lblOpStats.width-15,this.opKindNums=[],this.opTrans=[],this.parseTeamData(this.opInfo.team,this.opKindNums,this.opTrans);
+ const n=n0t(Number(i.point)||0,Number(s.point)||0,Number(i.attackGame)||0);
+ this.lblWin.text=`${
+ n.win>=0?"+":""}
+ ${
+ n.win}
+ `,this.lblLose.text=` / ${
+ n.lose>=0?"+":""}
+ ${
+ n.lose}
+ `;
+ const h=this.lblWin.width+this.lblLose.width;
+ this.lblWin.x=.5*(this.bg.width-h),this.lblLose.x=this.lblWin.x+this.lblWin.width,this.initTeam(),this.selectedSlot=-1,this.updateAllyButtons(),this.updateEnemyButtons(),_Jt.onHeroClick=this.onClickHeroFromList.bind(this),this.updateHeroList()}
+ rankText(t){
+ return RB.getText("GAME_97","##위").replace("##",String(t??"-"))}
- ),V4t.getInstance().startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,Math.floor(this.opInfo.maxWave/100),this.opInfo.transPoints??null)}
+ );
+ const t=Math.floor(this.opInfo.maxWave/100);
+ b7t.getInstance().startMarchBattle([...this.teamKindNums],[...this.teamTrans],this.opKindNums,this.opTrans,t,this.opInfo.transPoints??null,{
+ grade:Number(this.userPvp.grade)||1,ally:{
+ name:EG.name,level:Math.floor(EG.maxWave/100),rank:Number(this.userPvp.rank)||0}
+ ,enemy:{
+ name:this.opInfo.name,level:t,rank:Number(this.opInfo.rank)||0}
+ }
+ )}
CoachOverlay 14 hunks, 37 statements
- super(),Xt(this,"spot",new jKt(.6)),Xt(this,"fx",new He),Xt(this,"bubble",new WKt),Xt(this,"hand",null),this.alpha=0,this.eventMode="static",this.addChild(this.spot,this.fx,this.bubble)}
+ super(),Zt(this,"spot",new Kzt(.6)),Zt(this,"fx",new Ve),Zt(this,"bubble",new Vzt),Zt(this,"hand",null),Zt(this,"pressRect",null),this.alpha=0,this.eventMode="static",this.addChild(this.spot,this.fx,this.bubble)}
- let i=null;
+ let i=null,s=null;
- const e=this.rectOf(s);
- i="circle"===t.shape?jKt.circleHole(e,t.pad??8):jKt.rectHole(e,t.pad??8)}
+ s=this.rectOf(e),i=this.holeOf(s,t)}
- this.spot.focus(i),this.bubble.show(t.text,t.face??"S_SMI",i?jKt.toRect(i):null,this.screen,!s),i&&t.onShow&&t.onShow(this,jKt.toRect(i)),s?(this.showHand(i),await this.waitPress(t),this.hideHand()):await this.waitTap()}
+ this.spot.focus(i),this.bubble.show(t.text,t.face??"S_SMI",i?Kzt.toRect(i):null,this.screen,!e),i&&t.onShow&&t.onShow(this,Kzt.toRect(i)),e?(this.pressRect=s,this.showHand(i),await this.waitPress(t),this.hideHand(),this.pressRect=null):await this.waitTap()}
+ holeOf(t,i){
+ return"circle"===i.shape?Kzt.circleHole(t,i.pad??8):Kzt.rectHole(t,i.pad??8)}
+ static isMoving(t){
+ const i=Array.isArray(t)?t:[t];
+ for(const s of i)for(let t=s;
+ t;
+ t=t.parent){
+ if(MR.getTweensOf(t.scale).length>0||MR.getTweensOf(t.position).length>0)return!0;
+ for(const i of MR.getTweensOf(t)){
+ const t=i.vars;
+ if("x"in t||"y"in t||"scale"in t||"scaleX"in t||"scaleY"in t||"rotation"in t)return!0}
+ }
+ return!1}
+ this.hitArea=new Ui(-5e3,-5e3,1e4,1e4);
- const i=s();
- if(t.isShown(i)){
+ const i=s(),h=t.isShown(i);
+ if(h&&!t.isMoving(i)){
- if(performance.now()>e)return t.isShown(i)?i:null;
+ const r=performance.now();
+ if(r>e&&(!h||r>e+t.SETTLE_GRACE_MS))return h?i:null;
- const s=this.spot;
+ const s=Qt((t,i)=>!!this.pressRect&&this.pressRect.contains(t,i),"pressContains");
- contains:qt((t,i)=>!s.holeContains(t,i),"contains")}
+ contains:Qt((t,i)=>!s(t,i),"contains")}
- s.holeContains(i.x,i.y)&&setTimeout(r,0)}
+ s(i.x,i.y)&&setTimeout(o,0)}
- h=t.isShown(e())?0:h+1,h>30&&r()}
+ const s=e();
+ t.isShown(s)?(r=0,t.isMoving(s)||this.follow(s,i)):++r>30&&o()}
+ follow(t,i){
+ var s;
+ const e=this.pressRect;
+ if(!e)return;
+ const n=this.rectOf(t);
+ if(Math.max(Math.abs(n.x-e.x),Math.abs(n.y-e.y),Math.abs(n.width-e.width),Math.abs(n.height-e.height))<=4)return;
+ const h=this.holeOf(n,i);
+ this.pressRect=n,this.spot.focus(h),this.bubble.show(i.text,i.face??"S_SMI",Kzt.toRect(h),this.screen,!1),null==(s=this.hand)||s.position.set(h.x+h.w/2,h.y+h.h/2)}
- qt(mai,"CoachOverlay"),Xt(mai,"TAP_DELAY_MS",350),Xt(mai,"DEFAULT_WAIT_MS",800),Xt(mai,"active",null);
+ Qt(Hci,"CoachOverlay"),Zt(Hci,"TAP_DELAY_MS",350),Zt(Hci,"DEFAULT_WAIT_MS",800),Zt(Hci,"SETTLE_GRACE_MS",1e3),Zt(Hci,"active",null);
FireDebuffPopup 1 hunks, 36 statements
+ const L8t={
+ quake:[84,"L_SUR","잠깐... 땅이 울리고 있어. 이 열기는 뭐지?"],awaken:[85,"S_SHU","성주님, 심연의 마력이 솟구치고 있습니다! 무언가가 깨어났어요!"],lordBoast:[86,"FL_SNE","심연도 나를 영원히 가둘 수는 없지. 이제 이 땅은 내 불길을 기억하리라!"],forestBurned:[87,"L_SHU","숲이... 순식간에 타버렸어! 저 불길이 성 안까지 스며들고 있잖아!"],lordIntro:[88,"S_NEU","심연에서 풀려난 불의 군주입니다. 그 불의 기운이 시간마저 늦추고 있어요."],tapMark:[89,"S_NEU","화염 표식을 눌러, 지금 받고 있는 영향을 확인해 보세요."],castleGlow:[90,"L_SUR","그런데... 성도 빛나고 있어. 불길에 반응하는 건가?"],castleReact:[91,"S_SUR","성이 마력에 반응하고 있습니다! 성주님과 이어진 종족의 힘이 모습을 드러내려 해요."],tribeIcon:[92,"S_NEU","성주님의 환생 종족은 이 아이콘으로 확인할 수 있어요. 성도 같은 종족의 힘을 따릅니다."],castleTribe:[93,"S_SMI","이제 성은 성주님이 환생한 종족의 모습을 띱니다."],fireRule:[94,"S_NEU","불의 기운은 깊이 들어갈수록 강해져요. 100층마다 게임 배속이 1%씩 줄어들어요. 화염 표식에서 언제든 확인하실 수 있어요."],resolve:[95,"L_NEU","땅이 바뀌었다고 물러설 수는 없지. 우리 힘을 제대로 알고 맞서겠어."]}
+ ,D8t=["DIALOGUE_NPC_FL","불의 군주"],G8t={
+ realmName:["GAME_1902","불대지"],popupTitle:["GAME_1904","불대지 · 화염 디버프"],currentWave:["GAME_1905","현재 웨이브 {
+ 0}
+ "],paused:["GAME_1913","전투 일시정지"],resume:["GAME_1914","전투 계속"],currentTribe:["GAME_1915","현재 환생 종족"],castleLabel:["GAME_1916","{
+ 0}
+ 성"],waveCallBlocked:["GAME_1917","새로운 땅 앞에서는 웨이브를 부를 수 없습니다."],fireAura:["GAME_1923","불의 기운"],speedDebuff:["GAME_1924","게임 배속 -{
+ 0}
+ %"],speedDebuffDesc:["GAME_1925","불의 기운으로 {
+ 0}
+ 층마다 게임 배속이 {
+ 1}
+ %씩 줄어듭니다."],nextDebuff:["GAME_1926","{
+ 0}
+ 층부터 -{
+ 1}
+ %"]}
+ ,B8t=class t extends uB{
+ constructor(){
+ super(),Zt(this,"box",new ip),Zt(this,"lblAura",new QD("",t.FIRE,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblSpeed",new QD("",t.FIRE,sD.DEFAULT_OUTLINE_FONT_OPTION_32)),Zt(this,"lblDesc",new QD("",sD.COLOR_WHITE,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblWave",new QD("",sD.COLOR_GRAY,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblNext",new QD("",sD.COLOR_GRAY,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"btnConfirm",new hB("확인")),this.width=t.W,this.lblDesc.setWrapWidth(t.W-120),this.contentContainer.addChild(this.box,this.lblAura,this.lblSpeed,this.lblDesc,this.lblWave,this.lblNext,this.btnConfirm),this.btnConfirm.onClick=()=>this.hide(),this.outSideClickHide=!0}
+ static getInstance(){
+ return this._instance||(this._instance=new t),this._instance}
+ open(t){
+ const i=Math.max(1,fU(t)),s=Math.max(1,dU(t)),e=rU+100*s;
+ this.title=Uzt(G8t.popupTitle),this.lblAura.text=Uzt(G8t.fireAura),this.lblSpeed.text=Fzt(G8t.speedDebuff,i),this.lblDesc.text=Fzt(G8t.speedDebuffDesc,100,1),this.lblWave.text=Fzt(G8t.currentWave,t.toLocaleString("en-US")),this.lblNext.text=Fzt(G8t.nextDebuff,e.toLocaleString("en-US"),i+1),this.btnConfirm.text=RB.getText("COMMON_1","확인"),this.layout(),super.show()}
+ layout(){
+ const i=t.W,s=i-46,e=Qt(t=>t.x=.5*(i-t.width),"centerX");
+ let n=94;
+ e(this.lblAura),this.lblAura.y=n,n+=this.lblAura.height+6,e(this.lblSpeed),this.lblSpeed.y=n,n+=this.lblSpeed.height+10,e(this.lblDesc),this.lblDesc.y=n,n+=this.lblDesc.height+18,this.box.clear().roundRect(36,78,s-46+20,n-78,10).fill({
+ color:0,alpha:.28}
+ ),n+=12,this.lblWave.position.set(46,n),this.lblNext.position.set(s-this.lblNext.width,n),n+=Math.max(this.lblWave.height,this.lblNext.height),this.btnConfirm.x=.5*(i-this.btnConfirm.width),this.btnConfirm.y=n+22,this.height=this.btnConfirm.y+this.btnConfirm.height+36}
+ }
+ ;
+ Qt(B8t,"FireDebuffPopup"),Zt(B8t,"_instance"),Zt(B8t,"W",560),Zt(B8t,"FIRE",16743002);
+ let U8t=B8t;
TopMenu 8 hunks, 36 statements
- super(),Xt(this,"bg",new CD),Xt(this,"lblDay",new SD("Wave 1",65433,OL.DEFAULT_OUTLINE_FONT_OPTION_20)),Xt(this,"waveBar",new kli),Xt(this,"lblWaveSkip",null),Xt(this,"btnRevive",new nU("UI_Ekkorr","UI_REVIVE_ICON")),Xt(this,"lblMedalEvent",new SD("+00%\n3/3",65433,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"btnMedalEvent",new nU("UI_Ekkorr","UI_Question",1)),Xt(this,"lblSpeed",new kU("UI_SPEED_ICON2")),Xt(this,"heartInfo",Gai.getInstance()),Xt(this,"profile",mF.getInstance()),Xt(this,"btnHeroPresent",new nU("UI_Ekkorr","Hero55",.9)),Xt(this,"btnStampCalendar",new nU("UI_Ekkorr","stamp30")),Xt(this,"heroPresentBaseH",0),Xt(this,"stampBaseH",0),Xt(this,"count",0),Xt(this,"stampUtcDay",-1),Xt(this,"speedActive",!1),Xt(this,"userSpeedMode",null),Xt(this,"_height",40),this.bg.setIndex(6),this.bg.width=640,this.bg.height=40,this.bg.alpha=.1,this.lblDay.textColor=43622,this.lblDay.x=.5*(this.bg.width-this.lblDay.width),this.lblDay.y=.5*(this.bg.height-this.lblDay.height),this.addChild(this.lblDay),this.lblDay.text="Wave 1",this.waveBar.x=.5*(640-this.waveBar.width),this.waveBar.y=35,this.addChild(this.waveBar),this.waveBar.x=.5*(640-this.waveBar.width),this.waveBar.y=35,this.addChild(this.waveBar),this.profile.x=4,this.profile.y=4,this.addChild(this.profile),this.btnRevive.x=1,this.btnRevive.y=this.profile.y+this.profile.height-10,this.addChild(this.btnRevive),this.btnRevive.on("pointerdown",()=>{
+ super(),Zt(this,"bg",new tG),Zt(this,"lblDay",new QD("Wave 1",65433,sD.DEFAULT_OUTLINE_FONT_OPTION_20)),Zt(this,"waveBar",new odi),Zt(this,"lblWaveSkip",null),Zt(this,"btnRevive",new UU("UI_Ekkorr","UI_REVIVE_ICON")),Zt(this,"lblMedalEvent",new QD("+00%\n3/3",65433,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"btnMedalEvent",new UU("UI_Ekkorr","UI_Question",1)),Zt(this,"lblSpeed",new SF("UI_SPEED_ICON2")),Zt(this,"heartInfo",cli.getInstance()),Zt(this,"profile",u$.getInstance()),Zt(this,"btnHeroPresent",new UU("UI_Ekkorr","Hero55",.9)),Zt(this,"btnStampCalendar",new UU("UI_Ekkorr","stamp30")),Zt(this,"btnAttendEvent",new UU("UI_Ekkorr","Shortcut_Attend")),Zt(this,"heroPresentBaseH",0),Zt(this,"stampBaseH",0),Zt(this,"count",0),Zt(this,"stampUtcDay",-1),Zt(this,"speedActive",!1),Zt(this,"userSpeedMode",null),Zt(this,"_height",40),this.bg.setIndex(6),this.bg.width=640,this.bg.height=40,this.bg.alpha=.1,this.lblDay.textColor=43622,this.lblDay.x=.5*(this.bg.width-this.lblDay.width),this.lblDay.y=.5*(this.bg.height-this.lblDay.height),this.addChild(this.lblDay),this.lblDay.text="Wave 1",this.waveBar.x=.5*(640-this.waveBar.width),this.waveBar.y=35,this.addChild(this.waveBar),this.waveBar.x=.5*(640-this.waveBar.width),this.waveBar.y=35,this.addChild(this.waveBar),this.profile.x=4,this.profile.y=4,this.addChild(this.profile),this.btnRevive.x=1,this.btnRevive.y=this.profile.y+this.profile.height-10,this.addChild(this.btnRevive),this.btnRevive.on("pointerdown",()=>{
- ),this.lblMedalEvent.text="+00%\n3/3",this.lblMedalEvent.textColor=6801914,this.lblMedalEvent.align="center",this.lblMedalEvent.lineHeight=17,this.lblMedalEvent.x=this.btnRevive.x+.5*(this.btnRevive.width-this.lblMedalEvent.width),this.lblMedalEvent.y=this.btnRevive.y+this.btnRevive.height-.5*this.lblMedalEvent.height,this.addChild(this.lblMedalEvent),this.btnMedalEvent.x=this.lblMedalEvent.x+this.lblMedalEvent.width,this.btnMedalEvent.y=this.lblMedalEvent.y+.5*(this.lblMedalEvent.height-this.btnMedalEvent.height),this.btnMedalEvent.onClick=this.onMedalEventClick.bind(this),this.addChild(this.btnMedalEvent),this.lblSpeed.textOffsetY=2,this.lblSpeed.textOffsetX=2,this.lblSpeed.iconScale=.7,this.lblSpeed.textSize=13,this.lblSpeed.x=this.btnRevive.x+this.btnRevive.width+9,this.lblSpeed.y=30,this.lblSpeed.eventMode="static",this.lblSpeed.cursor="pointer",this.lblSpeed.hitArea=new Di(0,0,120,30),this.lblSpeed.on("pointerdown",this.onSpeedClick,this),this.addChild(this.lblSpeed),this.btnHeroPresent.visible=!1,this.btnHeroPresent.x=100,this.btnHeroPresent.y=this.btnRevive.y+86+8,this.btnHeroPresent.onClick=this.onHeroPresentClick.bind(this),this.addChild(this.btnHeroPresent),this.btnStampCalendar.visible=!1,this.btnStampCalendar.onClick=this.onStampCalendarClick.bind(this),this.stampBaseH=this.btnStampCalendar.height,this.addChild(this.btnStampCalendar),this.heartInfo.x=this.btnRevive.x+this.btnRevive.width+9,this.heartInfo.y=5,this.addChild(this.heartInfo),this.addChild(mF.getInstance()),this.addChild(ezt.getInstance()),this._height=Math.max(this.bg.height,this.waveBar.y+this.waveBar.height),this.profile.on("pointerdown",this.onProfileClick,this),Iqt.getInstance().registerReviveButtonGetter(t=>"btnRevive"===t&&this.btnRevive.visible?{
+ ),this.lblMedalEvent.text="+00%\n3/3",this.lblMedalEvent.textColor=6801914,this.lblMedalEvent.align="center",this.lblMedalEvent.lineHeight=17,this.lblMedalEvent.x=this.btnRevive.x+.5*(this.btnRevive.width-this.lblMedalEvent.width),this.lblMedalEvent.y=this.btnRevive.y+this.btnRevive.height-.5*this.lblMedalEvent.height,this.addChild(this.lblMedalEvent),this.btnMedalEvent.x=this.lblMedalEvent.x+this.lblMedalEvent.width,this.btnMedalEvent.y=this.lblMedalEvent.y+.5*(this.lblMedalEvent.height-this.btnMedalEvent.height),this.btnMedalEvent.onClick=this.onMedalEventClick.bind(this),this.addChild(this.btnMedalEvent),this.lblSpeed.textOffsetY=2,this.lblSpeed.textOffsetX=2,this.lblSpeed.iconScale=.7,this.lblSpeed.textSize=13,this.lblSpeed.x=this.btnRevive.x+this.btnRevive.width+9,this.lblSpeed.y=30,this.lblSpeed.eventMode="static",this.lblSpeed.cursor="pointer",this.lblSpeed.hitArea=new Ui(0,0,120,30),this.lblSpeed.on("pointerdown",this.onSpeedClick,this),this.addChild(this.lblSpeed),this.btnHeroPresent.visible=!1,this.btnHeroPresent.x=100,this.btnHeroPresent.y=this.btnRevive.y+86+8,this.btnHeroPresent.onClick=this.onHeroPresentClick.bind(this),this.addChild(this.btnHeroPresent),this.btnStampCalendar.visible=!1,this.btnStampCalendar.onClick=this.onStampCalendarClick.bind(this),this.stampBaseH=this.btnStampCalendar.height,this.addChild(this.btnStampCalendar),this.heartInfo.x=this.btnRevive.x+this.btnRevive.width+9,this.heartInfo.y=5,this.addChild(this.heartInfo),this.addChild(u$.getInstance()),this.addChild(nYt.getInstance()),this.btnAttendEvent.visible=!1,this.btnAttendEvent.x=7,this.btnAttendEvent.onClick=this.onAttendEventClick.bind(this),this.addChild(this.btnAttendEvent),this._height=Math.max(this.bg.height,this.waveBar.y+this.waveBar.height),this.profile.on("pointerdown",this.onProfileClick,this),MXt.getInstance().registerReviveButtonGetter(t=>"btnRevive"===t&&this.btnRevive.visible?{
- s.x=3,this.btnStampCalendar.visible?s.y=this.btnStampCalendar.y+i-3:this.btnHeroPresent.visible?s.y=this.btnHeroPresent.y+t-3:s.y=this.btnHeroPresent.y}
+ s.x=3,this.btnStampCalendar.visible?s.y=this.btnStampCalendar.y+i-3:this.btnHeroPresent.visible?s.y=this.btnHeroPresent.y+t-3:s.y=this.btnHeroPresent.y,this.btnAttendEvent.visible&&(this.profile.visible&&s.height>0?(this.btnAttendEvent.x=s.x+s.width,this.btnAttendEvent.y=s.y+5):(this.btnAttendEvent.x=7,this.btnAttendEvent.y=s.y+s.height+5))}
- this.count-- >0||(this.count=20,this.updateGameSpeed(),this.updateMedalEvent(),this.updateHeroPresent(),this.updateStampCalendar())}
+ this.count-- >0||(this.count=20,this.updateGameSpeed(),this.updateMedalEvent(),this.updateHeroPresent(),this.updateStampCalendar(),this.updateAttendEvent())}
- this.btnStampCalendar.visible!==i&&(this.btnStampCalendar.visible=i,this.applySpeedLabelPosition()),i&&t.hasReward()?this.btnStampCalendar.showRedDot():this.btnStampCalendar.hideRedDot()}
+ this.btnStampCalendar.visible!==i&&(this.btnStampCalendar.visible=i,this.applySpeedLabelPosition()),i&&t.hasReward()?this.btnStampCalendar.showRedDot(0,9):this.btnStampCalendar.hideRedDot()}
- const t=cR.time,i=.001*(XD.speed15EndTime-t);
- let s,e=i>0?2:1;
- null!==this.userSpeedMode&&this.userSpeedMode<e?s=this.userSpeedMode:(s=e,this.userSpeedMode=null);
- const n=.001*(XD.godBlessEndTime-t),h=s+(n>0?3:0)+.01*(eP.getInstance().getGameplayTotal(GR.GameSpeed)+Fx.getBarracksGameSpeedContribution())+(.001*(XD.skillSpeedEndTime-t)>0?1:0);
- wD.speedMode=h,IB.getInstance().setSpeed(h),GH.getInstance().updateSpeed(h),n>0?(this.speedActive=!0,this.lblSpeed.textColor=16763904,this.lblSpeed.text=rF.displayTime(n),this.lblSpeed.texture=eS.getTexture("UI_Ekkorr","UI_SPEED_ICON4")):2===s&&i>0?(this.speedActive=!0,this.lblSpeed.textColor=16711680,this.lblSpeed.text=rF.displayTimeAsDayTime(i),this.lblSpeed.texture=eS.getTexture("UI_Ekkorr","UI_SPEED_ICON2")):1.5===s&&i>0?(this.speedActive=!0,this.lblSpeed.textColor=16711680,this.lblSpeed.text=rF.displayTimeAsDayTime(i),this.lblSpeed.texture=eS.getTexture("UI_Ekkorr","UI_SPEED_ICON15")):(this.speedActive=!1,this.lblSpeed.textColor=11184810,i>0?(this.lblSpeed.text=rF.displayTimeAsDayTime(i),this.lblSpeed.texture=eS.getTexture("UI_Ekkorr","UI_SPEED_ICON2_OFF")):this.lblSpeed.text="00:00")}
+ const t=DR.time,i=.001*(EG.speed15EndTime-t),s=i>0?2:1,e=.001*(EG.godBlessEndTime-t),n=ndi({
+ userSpeedMode:this.userSpeedMode,godBlessOff:VD.godBlessOff}
+ ,s,e>0),h=n.baseSpeed,r=n.godBlessSpeed;
+ this.userSpeedMode=n.userSpeedMode;
+ const o=pU(h+r+.01*(kP.getInstance().getGameplayTotal(lx.GameSpeed)+fP.getBarracksGameSpeedContribution())+(.001*(EG.skillSpeedEndTime-t)>0?1:0),EG.wave);
+ VD.speedMode=o,iU.getInstance().setSpeed(o),xH.getInstance().updateSpeed(o),r>0?(this.speedActive=!0,this.lblSpeed.textColor=16763904,this.lblSpeed.text=i$.displayTime(e),this.lblSpeed.texture=kS.getTexture("UI_Ekkorr","UI_SPEED_ICON4")):e>0?(this.speedActive=!0,this.lblSpeed.textColor=11184810,this.lblSpeed.text=i$.displayTime(e),this.lblSpeed.texture=kS.getTexture("UI_Ekkorr",2===h?"UI_SPEED_ICON2":1.5===h?"UI_SPEED_ICON15":"UI_SPEED_ICON4_OFF")):2===h&&i>0?(this.speedActive=!0,this.lblSpeed.textColor=16711680,this.lblSpeed.text=i$.displayTimeAsDayTime(i),this.lblSpeed.texture=kS.getTexture("UI_Ekkorr","UI_SPEED_ICON2")):1.5===h&&i>0?(this.speedActive=!0,this.lblSpeed.textColor=16711680,this.lblSpeed.text=i$.displayTimeAsDayTime(i),this.lblSpeed.texture=kS.getTexture("UI_Ekkorr","UI_SPEED_ICON15")):(this.speedActive=!1,this.lblSpeed.textColor=11184810,i>0?(this.lblSpeed.text=i$.displayTimeAsDayTime(i),this.lblSpeed.texture=kS.getTexture("UI_Ekkorr","UI_SPEED_ICON2_OFF")):this.lblSpeed.text="00:00")}
- const t=cR.time;
- if(!(XD.speed15EndTime-t>0))return void Eli.getInstance().showPopup();
- const i=this.userSpeedMode??2;
- let s;
- s=2===i?1:1===i?1.5:2,this.userSpeedMode=s,this.updateGameSpeed()}
+ const t=DR.time,i=EG.speed15EndTime-t>0,s=EG.godBlessEndTime-t>0;
+ if(!i&&!s)return void qui.getInstance().showPopup();
+ const e=hdi({
+ userSpeedMode:this.userSpeedMode,godBlessOff:VD.godBlessOff}
+ ,i?2:1,s);
+ this.userSpeedMode=e.userSpeedMode,VD.godBlessOff=e.godBlessOff,this.updateGameSpeed()}
+ updateAttendEvent(){
+ const t=GB.isValidEvent(BB.ATTEND_EVENT);
+ this.btnAttendEvent.visible!=t&&(this.btnAttendEvent.visible=t),t&&GB.hasTodayAttendReward()?this.btnAttendEvent.showRedDot(5,5):this.btnAttendEvent.hideRedDot()}
+ async onAttendEventClick(){
+ try{
+ const{
+ AttendEventPopup:t}
+ =await ei(async()=>{
+ const{
+ AttendEventPopup:t}
+ =await Promise.resolve().then(()=>U_i);
+ return{
+ AttendEventPopup:t}
+ }
+ ,void 0);
+ await t.getInstance().setData(),t.getInstance().show()}
+ catch(t){
+ }
+ }
MiniAscentFlow 12 hunks, 35 statements
+ if(this.seasonEndNotified=!1,Fbi.getInstance().leaveShopOnly(),Fbi.getInstance().isSeasonOver())return this.leaveEnded();
+ static async enterShop(){
+ this.seasonEndNotified=!1;
+ const t=Fbi.getInstance();
+ if(t.enterShopOnly(),t.isSeasonOver())return this.leaveEnded();
+ this.navigationRevision++,this.stopAutoBattle(),await obi.ensure(),this.configureShell(),await t.discardPendingResult();
+ const{
+ MiniAscentEventShopPage:i}
+ =await ei(async()=>{
+ const{
+ MiniAscentEventShopPage:t}
+ =await Promise.resolve().then(()=>UQi);
+ return{
+ MiniAscentEventShopPage:t}
+ }
+ ,void 0);
+ i.getInstance().show()}
- P_i.getInstance().onNavigate=t=>this.openTab(t),P_i.getInstance().onExit=()=>{
+ this.shellReady=!0,Vbi.getInstance().onSeasonEnded=()=>{
+ this.leaveEnded()}
+ ,Fbi.getInstance().onSeasonEnded=()=>{
+ this.leaveEnded()}
+ ,Vbi.getInstance().onNavigate=t=>this.openTab(t),Vbi.getInstance().onExit=()=>{
+ if(!Fbi.getInstance().shopOnly||"shop"===t){
+ }
- this.configureShell();
- if(!s.run)return this.showLobby();
+ if(s.isSeasonOver())return this.leaveEnded();
+ if(this.configureShell(),!s.run)return this.showLobby();
+ if(this.autoBattleInFlight=!1,h.isSeasonOver())return this.leaveEnded();
- this.autoBattleInFlight=!1;
- return AH.getInstance().showMessage(nB.getText("","결과 전송 실패 — 로비에서 다시 전송합니다")),void(await t.backToLobby())}
+ return h.isSeasonOver()?this.leaveEnded():(vH.getInstance().showMessage(RB.getText("","결과 전송 실패 — 로비에서 다시 전송합니다")),void(await t.backToLobby()))}
+ static async leaveEnded(){
+ this.navigationRevision++,this.stopAutoBattle(),this.autoBattleInFlight=!1;
+ const t=Rui.getInstance();
+ t.isIdleBattleActive()||t.returnToIdleBattle(),this.shellReady&&Vbi.getInstance().hideImmediately(),await Fbi.getInstance().discardPendingResult(),this.seasonEndNotified||(this.seasonEndNotified=!0,vH.getInstance().showMessage(RB.getText("COMMON_169","이벤트가 종료되었습니다.")))}
+ if(Fbi.getInstance().isSeasonOver())return this.leaveEnded();
RightMenu 14 hunks, 34 statements
- super(),Xt(this,"btnSetting"),Xt(this,"btnMail"),Xt(this,"btnHelp"),Xt(this,"indicator"),Xt(this,"indicatorArea"),Xt(this,"bg"),Xt(this,"container"),Xt(this,"btnRanking"),Xt(this,"btnAchieve"),Xt(this,"btnPass"),Xt(this,"btnGuild"),Xt(this,"btnPet"),Xt(this,"btnInventory"),Xt(this,"btnDaily"),Xt(this,"btnMine"),Xt(this,"btnInvite"),Xt(this,"btnPayback"),Xt(this,"btnTournament"),Xt(this,"_opened",!1),Xt(this,"count",0),Xt(this,"onPetDataChangeBind"),Xt(this,"countUtc0",0),Xt(this,"onReviveBind"),Xt(this,"onMailChangeBind"),Xt(this,"onReferralStatusBind"),Xt(this,"onPaybackEventBind"),Xt(this,"onPaymentSuccessBind"),Xt(this,"onAchieveStatusBind"),Xt(this,"onPassStatusBind"),Xt(this,"onGuildInfoUpdateBind"),Xt(this,"petPoint",new _i),Xt(this,"petPointInitialized",!1),Xt(this,"guildPoint",new _i),Xt(this,"guildPointInitialized",!1),Xt(this,"indicatorRedDot"),this.btnHelp=new nU("UI","Btn_help_p"),this.btnHelp.y=-50,this.btnHelp.onClick=this.onHelpBtnClick.bind(this),this.btnHelp.visible=iG.getInstance().development;
- const t=this.btnHelp.y+this.btnHelp.height+4;
- this.btnSetting=new nU("UI_Ekkorr","Btn_Setting"),this.btnSetting.x=-this.btnSetting.width-10,this.btnSetting.y=t,this.addChild(this.btnSetting),this.btnMail=new nU("UI_Ekkorr","Btn_Mailbox"),this.btnMail.x=this.btnSetting.x-this.btnMail.width,this.btnMail.y=t,this.addChild(this.btnMail),this.btnSetting.onClick=this.onSettingBtnClick.bind(this),this.btnMail.onClick=this.onMailBtnClick.bind(this);
- const i=.5*(this.btnMail.x+(this.btnSetting.x+this.btnSetting.width));
- this.btnHelp.x=i-.5*this.btnHelp.width,this.container=new He,this.container.x=-40,this.container.y=this.btnSetting.y+this.btnSetting.height-5,this.addChild(this.container),this.bg=new kM({
+ super(),Zt(this,"btnSetting"),Zt(this,"btnMail"),Zt(this,"btnEventSchedule"),Zt(this,"indicator"),Zt(this,"indicatorArea"),Zt(this,"bg"),Zt(this,"container"),Zt(this,"btnRanking"),Zt(this,"btnAchieve"),Zt(this,"btnPass"),Zt(this,"btnGuild"),Zt(this,"btnPet"),Zt(this,"btnInventory"),Zt(this,"btnDaily"),Zt(this,"btnMine"),Zt(this,"btnTournament"),Zt(this,"menuXoffset",2),Zt(this,"_opened",!1),Zt(this,"count",0),Zt(this,"onPetDataChangeBind"),Zt(this,"countUtc0",0),Zt(this,"onReviveBind"),Zt(this,"onMailChangeBind"),Zt(this,"onPaymentSuccessBind"),Zt(this,"onAchieveStatusBind"),Zt(this,"onPassStatusBind"),Zt(this,"onGuildInfoUpdateBind"),Zt(this,"petPoint",new yi),Zt(this,"petPointInitialized",!1),Zt(this,"guildPoint",new yi),Zt(this,"guildPointInitialized",!1),Zt(this,"indicatorRedDot"),this.btnSetting=new UU("UI_Ekkorr","Btn_Setting"),this.btnSetting.x=-this.btnSetting.width-10+this.menuXoffset,this.btnSetting.y=-13,this.addChild(this.btnSetting),this.btnMail=new UU("UI_Ekkorr","Btn_Mailbox"),this.btnMail.x=this.btnSetting.x-this.btnMail.width+this.menuXoffset,this.btnMail.y=-13,this.addChild(this.btnMail),this.btnEventSchedule=new UU("UI_Ekkorr","Btn_EventSchedule"),this.btnEventSchedule.x=this.btnMail.x-this.btnEventSchedule.width+this.menuXoffset,this.btnEventSchedule.y=-13,this.addChild(this.btnEventSchedule),this.btnSetting.onClick=this.onSettingBtnClick.bind(this),this.btnMail.onClick=this.onMailBtnClick.bind(this),this.btnEventSchedule.onClick=this.onEventScheduleBtnClick.bind(this),this.container=new Ve,this.container.x=-40,this.container.y=this.btnSetting.y+this.btnSetting.height-5,this.addChild(this.container),this.bg=new eE({
- ),this.container.addChild(this.bg),this.indicator=new je(eS.getTexture("UI_Ekkorr","UI_Menu_Open")),this.indicator.x=this.bg.x+15,this.indicator.y=this.bg.y+21,this.container.addChild(this.indicator),this.indicatorArea=new je(eS.getTexture("UI_Ekkorr","whiteRect")),this.indicatorArea.alpha=.01,this.indicatorArea.width=this.indicator.width+30,this.indicatorArea.height=this.indicator.height+20,this.indicatorArea.x=this.indicator.x-15,this.indicatorArea.y=this.indicator.y-10,this.container.addChild(this.indicatorArea),this.indicatorArea.eventMode="dynamic",this.indicatorArea.on("pointertap",this.onIndicatorTap,this),this.btnRanking=new nU("UI_Ekkorr","Icon_Ranking"),this.btnAchieve=new nU("UI_Ekkorr","Btn_Achieve"),this.btnPass=new nU("UI_Ekkorr","Btn_Pass"),this.btnGuild=new nU("UI_Ekkorr","Btn_Guild"),this.btnPet=new nU("UI_Ekkorr","Icon_Pet"),this.btnInventory=new nU("UI_Ekkorr","Icon_Inventory"),this.btnDaily=new nU("UI_Ekkorr","Icon_Daily"),this.btnMine=new nU("UI_Ekkorr","Btn_Event"),this.btnInvite=new nU("UI_Ekkorr","Btn_Friend"),this.btnPayback=new nU("UI_Ekkorr","Btn_Payback"),this.btnTournament=new nU("UI_Ekkorr","Icon_Tournament"),this.btnRanking.onClick=this.onRankingBtnClick.bind(this),this.btnAchieve.onClick=this.onAchieveBtnClick.bind(this),this.btnPass.onClick=this.onPassBtnClick.bind(this),this.btnGuild.onClick=this.onGuildBtnClick.bind(this),this.btnPet.onClick=this.onPetBtnClick.bind(this),this.btnInventory.onClick=this.onInventoryBtnClick.bind(this),this.btnDaily.onClick=this.onDailyBtnClick.bind(this),this.btnMine.onClick=this.onMineBtnClick.bind(this),this.btnInvite.onClick=this.onInviteBtnClick.bind(this),this.btnPayback.onClick=this.onPaybackBtnClick.bind(this),this.btnTournament.onClick=this.onTournamentBtnClick.bind(this),this.update(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this),Iqt.getInstance().registerRightMenuIndicatorButtonGetter(t=>"indicatorArea"===t&&this.indicatorArea.visible?{
+ ),this.container.addChild(this.bg),this.indicator=new Ye(kS.getTexture("UI_Ekkorr","UI_Menu_Open")),this.indicator.x=this.bg.x+15,this.indicator.y=this.bg.y+21,this.container.addChild(this.indicator),this.indicatorArea=new Ye(kS.getTexture("UI_Ekkorr","whiteRect")),this.indicatorArea.alpha=.01,this.indicatorArea.width=this.indicator.width+30,this.indicatorArea.height=this.indicator.height+20,this.indicatorArea.x=this.indicator.x-15,this.indicatorArea.y=this.indicator.y-10,this.container.addChild(this.indicatorArea),this.indicatorArea.eventMode="dynamic",this.indicatorArea.on("pointertap",this.onIndicatorTap,this),this.btnRanking=new UU("UI_Ekkorr","Icon_Ranking"),this.btnAchieve=new UU("UI_Ekkorr","Btn_Achieve"),this.btnPass=new UU("UI_Ekkorr","Btn_Pass"),this.btnGuild=new UU("UI_Ekkorr","Btn_Guild"),this.btnPet=new UU("UI_Ekkorr","Icon_Pet"),this.btnInventory=new UU("UI_Ekkorr","Icon_Inventory"),this.btnDaily=new UU("UI_Ekkorr","Icon_Daily"),this.btnMine=new UU("UI_Ekkorr","Btn_Event"),this.btnTournament=new UU("UI_Ekkorr","Icon_Tournament"),this.btnRanking.onClick=this.onRankingBtnClick.bind(this),this.btnAchieve.onClick=this.onAchieveBtnClick.bind(this),this.btnPass.onClick=this.onPassBtnClick.bind(this),this.btnGuild.onClick=this.onGuildBtnClick.bind(this),this.btnPet.onClick=this.onPetBtnClick.bind(this),this.btnInventory.onClick=this.onInventoryBtnClick.bind(this),this.btnDaily.onClick=this.onDailyBtnClick.bind(this),this.btnMine.onClick=this.onMineBtnClick.bind(this),this.btnTournament.onClick=this.onTournamentBtnClick.bind(this),this.update(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this),MXt.getInstance().registerRightMenuIndicatorButtonGetter(t=>"indicatorArea"===t&&this.indicatorArea.visible?{
- this.setRevive(!0),this.setMailChange(!0),this.setAchieveStatus(!0),this.setPassStatus(!0),this.setReferralStatus(!0),this.setPaybackEvent(!0),this.setPaymentSuccess(!0),this.setGuildInfoUpdate(!0),this.setPetDataChange(!0)}
+ this.setRevive(!0),this.setMailChange(!0),this.setAchieveStatus(!0),this.setPassStatus(!0),this.setPaymentSuccess(!0),this.setGuildInfoUpdate(!0),this.setPetDataChange(!0)}
- this.setRevive(!1),this.setMailChange(!1),this.setAchieveStatus(!1),this.setPassStatus(!1),this.setReferralStatus(!1),this.setPaybackEvent(!1),this.setPaymentSuccess(!1),this.setGuildInfoUpdate(!1),this.setPetDataChange(!1)}
+ this.setRevive(!1),this.setMailChange(!1),this.setAchieveStatus(!1),this.setPassStatus(!1),this.setPaymentSuccess(!1),this.setGuildInfoUpdate(!1),this.setPetDataChange(!1)}
- const t=-this.bg.width;
+ const t=-this.bg.width+this.menuXoffset;
- e.push(this.btnInventory),null!=QL.getTournamentSchedule()&&e.push(this.btnTournament);
- const n=[];
- Azt.opened&&n.push(this.btnInvite),Dzt.opened&&n.push(this.btnPayback),this.container.removeChildren(),this.container.addChild(this.bg),this.container.addChild(this.indicator),this.container.addChild(this.indicatorArea);
- const h=[i,e,n].filter(t=>t.length>0);
- let r=this.bg.x+50,o=0,a=null;
+ e.push(this.btnInventory),null!=SD.getTournamentSchedule()&&e.push(this.btnTournament),this.container.removeChildren(),this.container.addChild(this.bg),this.container.addChild(this.indicator),this.container.addChild(this.indicatorArea);
+ const n=[i,e,[]].filter(t=>t.length>0);
+ let h=this.bg.x+50+this.menuXoffset,r=0,o=null;
- s>o&&(o=s),r+=t[0].width,a||(a=t[0])}
+ s>r&&(r=s),h+=t[0].width-this.menuXoffset,o||(o=t[0])}
- this.onMailChange(null),this.onAchieveStatus(null),this.onPassStatus(null),this.onReferralStatus(null),this.onPaybackEvent(null),this.onGuildInfoUpdate(null)}
+ this.onMailChange(null),this.onAchieveStatus(null),this.onPassStatus(null),this.onGuildInfoUpdate(null)}
- onHelpBtnClick(){
- RYt.getInstance().show()}
+ async onEventScheduleBtnClick(){
+ await Bii.getInstance().setData(),Bii.getInstance().show()}
- async onInviteBtnClick(){
- await fhi.getInstance().setData(),fhi.getInstance().show()}
- async onPaybackBtnClick(){
- await Chi.getInstance().setData(),Chi.getInstance().show()}
- return XD.maxWave>=200&&lB.isValidEvent(uB.MINE_EVENT)||lB.isValidEvent(uB.MINI_ASCENT_EVENT)}
+ return EG.maxWave>=200&&GB.isValidEvent(BB.MINE_EVENT)||GB.isValidEvent(BB.MINI_ASCENT_EVENT)||GB.isAscentShopOpen()||OG.getInstance().development}
+ async executeOnTournamentBtnClick(){
+ this.onTournamentBtnClick()}
- setReferralStatus(t){
- mS.getInstance().removeEventListener("ReferralStatus",this.onReferralStatusBind),t&&(this.onReferralStatusBind=this.onReferralStatus.bind(this),mS.getInstance().addEventListener("ReferralStatus",this.onReferralStatusBind))}
- onReferralStatus(t){
- Azt.hasReward()?this.btnInvite.showRedDot():this.btnInvite.hideRedDot()}
- setPaybackEvent(t){
- mS.getInstance().removeEventListener("PaybackEvent",this.onPaybackEventBind),t&&(this.onPaybackEventBind=this.onPaybackEvent.bind(this),mS.getInstance().addEventListener("PaybackEvent",this.onPaybackEventBind))}
- onPaybackEvent(t){
- Dzt.opened&&(this.btnPayback.parent||this.update(),Dzt.hasReward()?this.btnPayback.showRedDot():this.btnPayback.hideRedDot())}
- XD.maxWave>=vR.getInstance().unlockWave&&(t=vR.getInstance().hasAnyEvolvable(),t)||QL.opened&&QL.unlocked&&(t=await QL.checkRedDot(),t)||Dzt.opened&&(t=Dzt.hasReward(),t)||Azt.opened&&(t=Azt.hasReward(),t)?this.showIndicatorRedDot():this.hideIndicatorRedDot()}
+ EG.maxWave>=jR.getInstance().unlockWave&&(t=jR.getInstance().hasAnyEvolvable(),t)||SD.opened&&SD.unlocked&&(t=await SD.checkRedDot(),t)?this.showIndicatorRedDot():this.hideIndicatorRedDot()}
IntroProgressBar 1 hunks, 34 statements
+ const wfi=class extends Ve{
+ constructor(t=400){
+ super(),Zt(this,"bar",new ip),Zt(this,"lbl"),Zt(this,"fill",new gl({
+ start:{
+ x:0,y:0}
+ ,end:{
+ x:0,y:1}
+ ,colorStops:[{
+ offset:0,color:16772270}
+ ,{
+ offset:.45,color:16760661}
+ ,{
+ offset:1,color:14052133}
+ ]}
+ )),this.barWidth=t,this.eventMode="none";
+ const i=(new ip).roundRect(0,0,t,28,8).fill(1444619).roundRect(1,1,t-2,26,7).stroke({
+ color:13012041,width:1.5}
+ ).roundRect(4,4,t-8,20,4).fill(3481626);
+ this.addChild(i,this.bar);
+ const s=sD.DEFAULT_OUTLINE_FONT_OPTION_17;
+ s.fill=16773333,s.stroke={
+ color:2166284,width:3,join:"round"}
+ ,this.lbl=new QD("",s.fill,s),this.addChild(this.lbl),this.update(0,11)}
+ update(t,i){
+ const s=i>0?Math.max(0,Math.min(1,t/i)):0,e=(this.barWidth-10)*s;
+ this.bar.clear(),e>0&&this.bar.roundRect(5,5,e,18,Math.min(3,e/2)).fill(this.fill),this.lbl.text=`${
+ t}
+  / ${
+ i}
+ `,this.lbl.x=.5*(this.barWidth-this.lbl.width),this.lbl.y=.5*(28-this.lbl.height)}
+ }
+ ;
+ Qt(wfi,"IntroProgressBar");
+ let mfi=wfi;
EmberRat1 1 hunks, 33 statements
+ const B3=class extends U1{
+ constructor(){
+ super()}
+ initializeData(){
+ super.initializeData(),this.className=HR.EmberRat1,this.hitHeight=18,this.hitWidth=15,this.radius=12,this.idleFrames=new DH(0,19),this.moveFrames=new DH(20,30),this.attackFrames=new DH(31,60),this.skillFrames=new DH(31,60),this.dieFrames=new DH(61,68),this.objAtk={
+ 45:1}
+ ,this.setSize(.9)}
+ }
+ ;
+ Qt(B3,"EmberRat1");
+ let U3=B3;
+ const F3=class extends U1{
+ constructor(){
+ super()}
+ initializeData(){
+ super.initializeData(),this.className=HR.LavaBeetle1,this.hitHeight=20,this.hitWidth=16,this.radius=13,this.idleFrames=new DH(0,19),this.moveFrames=new DH(20,29),this.attackFrames=new DH(30,53),this.skillFrames=new DH(30,53),this.dieFrames=new DH(54,61),this.objAtk={
+ 45:1}
+ ,this.setSize(.9)}
+ }
+ ;
+ Qt(F3,"LavaBeetle1");
+ let $3=F3;
+ const H3=class extends U1{
+ constructor(){
+ super()}
+ initializeData(){
+ super.initializeData(),this.className=HR.CharcoalWolf1,this.hitHeight=24,this.hitWidth=18,this.radius=15,this.idleFrames=new DH(0,19),this.moveFrames=new DH(20,28),this.attackFrames=new DH(29,51),this.skillFrames=new DH(29,51),this.dieFrames=new DH(52,59),this.objAtk={
+ 42:1}
+ ,this.setSize(.9),this.startSound=qG.SFX_BATTLE_WOLF_START,this.attackSound=qG.SFX_BATTLE_WOLF_ATTACK,this.dieSound=qG.SFX_BATTLE_WOLF_DIE}
+ }
+ ;
+ Qt(H3,"CharcoalWolf1");
+ let W3=H3;
InAppPurchaseManager 5 hunks, 31 statements
+ try{
+ const{
+ ShopProductResultPopup:t}
+ =await ei(async()=>{
+ const{
+ ShopProductResultPopup:t}
+ =await Promise.resolve().then(()=>o_i);
+ return{
+ ShopProductResultPopup:t}
+ }
+ ,void 0);
+ t.getInstance().setData(l),t.getInstance().show()}
+ catch(r){
- YG.getInstance().show(u),mS.getInstance().dispatchCustomEvent("PaymentSuccess",{
+ bB.getInstance().show(t)}
+ WS.getInstance().dispatchCustomEvent("PaymentSuccess",{
- onBuyProductComplete(t,i){
+ async onBuyProductComplete(t,i){
+ try{
+ const{
+ ShopProductResultPopup:t}
+ =await ei(async()=>{
+ const{
+ ShopProductResultPopup:t}
+ =await Promise.resolve().then(()=>o_i);
+ return{
+ ShopProductResultPopup:t}
+ }
+ ,void 0);
+ t.getInstance().setData(r),t.getInstance().show()}
+ catch(e){
- YG.getInstance().show(o),mS.getInstance().dispatchCustomEvent("PaymentSuccess",{
+ bB.getInstance().show(t)}
+ WS.getInstance().dispatchCustomEvent("PaymentSuccess",{
BottomMenu 12 hunks, 31 statements
- const Kci=class extends He{
+ const Mui=class t extends Ve{
- super(),Xt(this,"bg"),Xt(this,"icon"),Xt(this,"line"),Xt(this,"index",0),Xt(this,"arrNormalNames",["menu_icon_01_on","menu_icon_03_on","menu_icon_02_on","menu_icon_04_on","menu_icon_05_on","menu_icon_06_on"]),Xt(this,"lblTitle",new SD("SHOP",16777215,OL.BOTTOM_MENU_FONT_OPTION)),Xt(this,"container",new He),Xt(this,"_selected",!1),Xt(this,"onClick",qt(()=>{
+ super(),Zt(this,"bg"),Zt(this,"icon"),Zt(this,"index",0),Zt(this,"arrNormalNames",["menu_icon_01_on","menu_icon_03_on","menu_icon_02_on","menu_icon_04_on","menu_icon_05_on","menu_icon_06_on"]),Zt(this,"lblTitle",new QD("SHOP",t.LABEL_NORMAL,sD.BOTTOM_MENU_FONT_OPTION)),Zt(this,"_selected",!1),Zt(this,"onClick",Qt(()=>{
- ,"onClick")),Xt(this,"orgScale",1),Xt(this,"onMotionComplete",null),Xt(this,"eventTag"),Xt(this,"lockIcon"),Xt(this,"redDot"),this.index=t,this.createUI()}
+ ,"onClick")),Zt(this,"orgScale",1),Zt(this,"onMotionComplete",null),Zt(this,"eventTag"),Zt(this,"eventTagOn",!1),Zt(this,"lockBadge",null),Zt(this,"_locked",!1),Zt(this,"redDot"),this.index=i,this.createUI()}
- ),this.addChild(this.bg),this.bg.width=640/6,this.icon=new je(eS.getTexture("UI_Ekkorr",this.arrNormalNames[this.index])),this.addChild(this.icon),this.icon.x=.5*(this.bg.width-this.icon.width),this.icon.y=.5*(this.bg.height-10-this.icon.height),this.lblTitle.x=.5*(this.bg.width-this.lblTitle.width),this.lblTitle.y=40,this.bg.eventMode="static",this.bg.hitArea=new Di(0,0,this.bg.width,this.bg.height),this.bg.on("pointerdown",this.onLobbyClick,this),this.addChild(this.bg),this.addChild(this.icon),this.addChild(this.lblTitle),this.icon.eventMode="none",this.lblTitle.eventMode="none"}
+ ),this.addChild(this.bg),this.bg.width=640/6,this.bg.height=70,this.icon=new Ye(kS.getTexture("UI_Ekkorr",this.arrNormalNames[this.index])),this.addChild(this.icon),this.orgScale=Math.min(1,38/this.icon.height,52/this.icon.width),this.icon.scale.set(this.orgScale),this.icon.anchor.set(.5),this.icon.position.set(.5*this.bg.width,23),this.lblTitle.x=.5*(this.bg.width-this.lblTitle.width),this.lblTitle.y=44,this.bg.eventMode="static",this.bg.hitArea=new Ui(0,0,this.bg.width,this.bg.height),this.bg.on("pointerdown",this.onLobbyClick,this),this.addChild(this.bg),this.addChild(this.icon),this.addChild(this.lblTitle),this.icon.eventMode="none",this.lblTitle.eventMode="none",this.selected=!1}
- this.lblTitle.text=t,this.lblTitle.x=.5*(this.bg.width-this.lblTitle.width)}
+ this.lblTitle.scale.set(1),this.lblTitle.text=t;
+ const i=Math.min(1,(this.bg.width-8)/Math.max(1,this.lblTitle.width));
+ this.lblTitle.scale.set(i),this.lblTitle.x=.5*(this.bg.width-this.lblTitle.width)}
- this._selected=t,t?(this.bg.texture=eS.getTexture("UI_Ekkorr","UI_MAIN_MENU_BG_ON"),this.icon.tint=16777215,this.lblTitle.tint=16777215,this.up()):(this.bg.texture=eS.getTexture("UI_Ekkorr","UI_MAIN_MENU_BG_OFF"),this.icon.tint=6710886,this.lblTitle.tint=4473924,this.down()),this.updateEventTagState()}
+ this._selected=t,this.bg.texture=kS.getTexture("UI_Ekkorr",t?"UI_MAIN_MENU_BG_ON":"UI_MAIN_MENU_BG_OFF"),this.applyLook(),t?this.up():this.down(),this.updateEventTagState()}
+ applyLook(){
+ this._locked?(this.icon.tint=t.ICON_LOCKED_TINT,this.lblTitle.textColor=t.LABEL_LOCKED):this._selected?(this.icon.tint=16777215,this.lblTitle.textColor=t.LABEL_SELECTED):(this.icon.tint=15066597,this.lblTitle.textColor=t.LABEL_NORMAL)}
- this.eventTag||(this.eventTag=new je(eS.getTexture("UI_Ekkorr","UI_Event")),this.addChild(this.eventTag)),this.eventTag.visible=!0,this.updateEventTag(t,i)}
+ this.eventTag||(this.eventTag=new Ye(kS.getTexture("UI_Ekkorr","UI_Event")),this.addChild(this.eventTag)),this.eventTagOn=!0,this.eventTag.visible=!this._locked,this.updateEventTag(t,i)}
- this.eventTag&&(this.eventTag.visible=!1)}
+ this.eventTagOn=!1,this.eventTag&&(this.eventTag.visible=!1)}
- this.eventTag&&0!=this.eventTag.visible&&(this._selected?this.eventTag.tint=16777215:this.eventTag.tint=6710886)}
+ this.eventTag&&0!=this.eventTag.visible&&(this.eventTag.tint=16777215)}
- showLockIcon(t=0,i=0){
- this.lockIcon||(this.lockIcon=new je(eS.getTexture("UI_Ekkorr","Icon_Lock")),this.addChild(this.lockIcon)),this.lockIcon.visible=!0,this.updateLockIcon(t,i)}
- hideLockIcon(){
- this.lockIcon&&(this.lockIcon.visible=!1)}
- updateLockIcon(t,i){
- this.lockIcon&&(this.lockIcon.x=this.width-this.lockIcon.width+t,this.lockIcon.y=this.y+i,this.updateLockIconState())}
- updateLockIconState(){
- this.lockIcon&&0!=this.lockIcon.visible&&(this.lockIcon.tint=16777215)}
- getLockIconVisible(){
- return!!this.lockIcon&&this.lockIcon.visible}
+ get locked(){
+ return this._locked}
+ set locked(i){
+ var s;
+ this._locked!==i&&(this._locked=i,i?(this.lockBadge||(this.lockBadge=this.createLockBadge()),this.addChild(this.lockBadge)):null==(s=this.lockBadge)||s.removeFromParent(),this.icon.filters=i?[t.getLockFilter()]:null,this.applyLook(),this.eventTag&&(this.eventTag.visible=this.eventTagOn&&!i),this.redDot&&(this.redDot.visible=!i))}
+ static getLockFilter(){
+ return t.lockFilter||(t.lockFilter=new bf({
+ resolution:"inherit"}
+ ),t.lockFilter.desaturate()),t.lockFilter}
+ createLockBadge(){
+ const i=t.LOCK_BADGE_R,s=new Ve;
+ s.addChild((new ip).circle(0,0,i+2).fill(3812898).circle(0,0,i).fill(1775121));
+ const e=new Ye(kS.getTexture("UI_Ekkorr","Icon_Lock"));
+ e.anchor.set(.5),e.scale.set(.55),s.addChild(e);
+ const n=this.icon.texture.width*this.orgScale;
+ return s.position.set(.5*this.bg.width+Math.min(22,.5*n+4),31),s.eventMode="none",s}
- this.redDot||(this.redDot=new je(eS.getTexture("UI_Ekkorr","red_dot_ani_30f_0001"))),this.updateRedDot(),this.addChild(this.redDot)}
+ this.redDot||(this.redDot=new Ye(kS.getTexture("UI_Ekkorr","red_dot_ani_30f_0001"))),this.updateRedDot(),this.redDot.visible=!this._locked,this.addChild(this.redDot)}
- qt(Kci,"BottomMenu");
+ Qt(Mui,"BottomMenu"),Zt(Mui,"LABEL_NORMAL",14008992),Zt(Mui,"LABEL_SELECTED",16773320),Zt(Mui,"LABEL_LOCKED",7300695),Zt(Mui,"ICON_LOCKED_TINT",8026746),Zt(Mui,"LOCK_BADGE_R",11),Zt(Mui,"lockFilter",null);
FavoritePetCell 8 hunks, 29 statements
- let E3t=b3t,M3t=(qt(Gt=class extends iR{
+ let N6t=P6t;
+ let L6t=(Qt(Ft=class extends OR{
- this.petKindNum=t;
+ this.petKindNum=i,t.cellByPet.set(i,this);
- var i,s,e,n,h,r;
+ var i,s,e,n,h,r,o,a;
- let d=0,f=!1;
+ let p=0,g=0,w=!1;
- d+=(null==(r=null==(h=a.body)?void 0:h.reward)?void 0:r.totalAmount)??c*(t.reward||0),u-=c,0!==c&&(f=!0)}
+ p+=(null==(r=null==(h=l.body)?void 0:h.reward)?void 0:r.totalAmount)??u*(t.reward||0),g+=(null==(a=null==(o=l.body)?void 0:o.reward)?void 0:a.bonusAmount)??0,f-=u,0!==u&&(w=!0)}
- f&&bzt.getInstance().markDirty(),T3t.getInstance().setData(),AH.getInstance().showMessage(nB.getValueReplace("GAME_1189","##",d,`펫 조각 ${
+ w&&bYt.getInstance().markDirty(),U6t.getInstance().setData();
+ const m=g>0?RB.getValueReplace("GAME_1709","##",g,`정령의 친화: 펫 조각 +${
- 개를 획득했습니다.`))}
+ `):"";
+ let v=RB.getValueReplace("GAME_1189","##",p,`펫 조각 ${
+ p}
+ 개를 획득했습니다.`);
+ m&&(v+="\n"+m);
+ const _=vH.getInstance();
+ _.textAlignCenter=g>0,_.showMessage(v),m&&(t.cellByPet.get(this.petKindNum)??this).playBonusFloat(m)}
+ playBonusFloat(i){
+ const s=U6t.getInstance(),e=new QD(i,t.BONUS_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16);
+ e.textColor=t.BONUS_COLOR,e.eventMode="none";
+ const n=s.toLocal(this.toGlobal(new yi(this.lblPiece.x,this.lblPiece.y-4))),h=s.toLocal(this.toGlobal(new yi(305,0))).x;
+ e.x=Math.min(n.x,h-e.width),e.y=n.y,e.alpha=0,s.addChild(e),MR.timeline({
+ onComplete:Qt(()=>e.destroy(),"onComplete")}
+ ).to(e,{
+ alpha:1,duration:.15}
+ ).to(e,{
+ y:e.y-34,duration:1.1,ease:"power1.out"}
+ ,0).to(e,{
+ alpha:0,duration:.35}
+ ,.85)}
- qt(A3t,"FavoritePetCell"),Xt(A3t,"isPrompting",!1);
+ Qt(D6t,"FavoritePetCell"),Zt(D6t,"isPrompting",!1),Zt(D6t,"BONUS_COLOR",16765786),Zt(D6t,"cellByPet",new Map);
RankingItemRenderer 3 hunks, 28 statements
- const Fhi=class extends iR{
- constructor(){
- super(),Xt(this,"bg"),Xt(this,"iconRanking"),Xt(this,"lblName"),Xt(this,"lblLevel"),Xt(this,"sheetName","UI_Ekkorr"),Xt(this,"userName",""),this.bg=new kM({
- texture:eS.getTexture(this.sheetName,"Popup_List_02"),leftWidth:140,topHeight:30,rightWidth:20,bottomHeight:30}
- ),this.bg.width=570,this.addChild(this.bg),this.iconRanking=new Ghi,this.iconRanking.x=15,this.iconRanking.y=.5*(this.bg.height-this.iconRanking.height),this.addChild(this.iconRanking),this.lblName=new SD("Item Name",16777215),this.lblName.text="Item Name",this.lblName.x=148,this.lblName.y=.5*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.lblLevel=new SD("Item Level",16777215),this.lblLevel.text="Item Level",this.lblLevel.x=this.bg.width-100,this.lblLevel.y=.5*(this.bg.height-this.lblLevel.height),this.addChild(this.lblLevel)}
- setData(t){
- this.iconRanking.setRanking(t.rank),this.lblName.text=t.name,this.userName=String(t.name??"");
+ const noi=["Icon_Startwave_01","BTN_WAVE","Icon_medal_1st"];
+ function hoi(t){
- this.lblLevel.text=0==i?t.maxWave:1==i?t.accuWave:_D.displayLargeNumberAsAlphabet(t.accuMedal),this.lblLevel.x=this.bg.width-80+.5*(50-this.lblLevel.width),t.name==XD.name?this.bg.texture=eS.getTexture(this.sheetName,"Popup_List_03"):this.bg.texture=eS.getTexture(this.sheetName,"Popup_List_02")}
+ return 0===i?String(t.maxWave??0):1===i?String(t.accuWave??0):KD.displayLargeNumberAsAlphabet(t.accuMedal??0)}
+ Qt(hoi,"rankingValueText");
+ const roi=class t extends OR{
+ constructor(){
+ super(),Zt(this,"bg",new ip),Zt(this,"badge",new i0t(56)),Zt(this,"lblName"),Zt(this,"lblLv"),Zt(this,"valueIcon"),Zt(this,"lblValue"),Zt(this,"chevron",new ip),Zt(this,"userName","");
+ const i=t.W,s=t.H;
+ this.drawBg(t.BG),this.addChild(this.bg),this.badge.x=6,this.badge.y=.5*(s-56),this.addChild(this.badge),this.lblName=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_20),this.lblName.x=76,this.lblName.y=8,this.addChild(this.lblName),this.lblLv=new QD("",13216120),this.lblLv.textSize=14,this.lblLv.x=77,this.lblLv.y=36,this.addChild(this.lblLv),this.valueIcon=new Ye(kS.getTexture("UI_Ekkorr",noi[0])),this.addChild(this.valueIcon),this.lblValue=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_20),this.lblValue.textSize=22,this.addChild(this.lblValue),this.chevron.poly([0,0,3,0,9,8,3,16,0,16,6,8]).fill(9074528),this.chevron.x=i-22,this.chevron.y=.5*(s-16),this.addChild(this.chevron);
+ for(const t of[this.bg,this.lblName,this.lblLv,this.valueIcon,this.lblValue,this.chevron])t.eventMode="none"}
+ drawBg(i){
+ this.bg.clear().roundRect(0,0,t.W,t.H,14).fill(i)}
+ setData(i){
+ this.userName=String((null==i?void 0:i.name)??""),this.badge.setRank(Number((null==i?void 0:i.rank)??0)),this.drawBg(""!==this.userName&&this.userName===EG.name?t.BG_ME:t.BG),this.lblName.text=this.userName,this.lblLv.text=`Lv.${
+ Math.floor(Number((null==i?void 0:i.maxWave)??0)/100)}
+ `;
+ const s=qri.getInstance().selectedIndex;
+ this.valueIcon.texture=kS.getTexture("UI_Ekkorr",noi[s]??noi[0]),this.valueIcon.scale.set(24/this.valueIcon.texture.height),this.lblValue.text=hoi(i);
+ const e=t.W-34;
+ this.lblValue.x=e-this.lblValue.width,this.lblValue.y=.5*(t.H-this.lblValue.height),this.valueIcon.x=this.lblValue.x-this.valueIcon.width-6,this.valueIcon.y=.5*(t.H-this.valueIcon.height);
+ const n=this.valueIcon.x-12-this.lblName.x;
+ this.lblName.scale.set(this.lblName.width/this.lblName.scale.x>n?n/(this.lblName.width/this.lblName.scale.x):1)}
- qt(Fhi,"RankingItemRenderer");
+ Qt(roi,"RankingItemRenderer"),Zt(roi,"W",570),Zt(roi,"H",62),Zt(roi,"BG",2892828),Zt(roi,"BG_ME",5916464);
CommonOrangeButton 1 hunks, 27 statements
+ const kdi={
+ [FR.HUMAN]:"인간",[FR.ELF]:"엘프",[FR.UNDEAD]:"언데드",[FR.ORC]:"오크"}
+ ,Rdi={
+ [FR.HUMAN]:8369407,[FR.ELF]:9429114,[FR.UNDEAD]:13147391,[FR.ORC]:3975360}
+ ;
+ function xdi(t){
+ return RB.getText(`TRIBE_${
+ t}
+ `,kdi[t]??"")}
+ function Pdi(t){
+ return Rdi[t]??16766826}
+ function Ndi(){
+ return EG.tribe>0?EG.tribe:FR.HUMAN}
+ Qt(xdi,"tribeName"),Qt(Pdi,"tribeColor"),Qt(Ndi,"castleTribe");
+ const Ldi={
+ [FR.HUMAN]:"CastleHuman",[FR.ELF]:"CastleElf",[FR.UNDEAD]:"CastleUndead",[FR.ORC]:"CastleOrc"}
+ ;
+ function Ddi(t){
+ return Ldi[t]??null}
+ Qt(Ddi,"tribeCastleSkin");
+ const Gdi=class extends eB{
+ constructor(t,i=150,s=30){
+ super(t,i,s),this.color=iB.ORANGE}
+ }
+ ;
+ Qt(Gdi,"CommonOrangeButton");
+ let Bdi=Gdi;
ViewUtil 4 hunks, 26 statements
+ isCastleCitadelSubView(){
+ var t,i;
+ return 0!=this.isCastleView()&&"CitadelSubView"==(null==(i=null==(t=Cqt.getInstance().currentView)?void 0:t.currentSubView)?void 0:i.className)}
- return this.isDetailPopupView("PVPBattlePopup")}
+ return this.isAddedToDetailPopupLayer("PVPBattlePopup")}
- isDetailPopupView(t){
+ isPetPopup(){
+ return this.isAddedToDetailPopupLayer("PetPopup")}
+ isGuildPopup(){
+ return this.isAddedToDetailPopupLayer("Guild2Popup")}
+ isGuildWarTournamentPopup(){
+ return this.isAddedToPopupLayer("GuildWarTournament2Popup")}
+ isInventoryPopup(){
+ return this.isAddedToDetailPopupLayer("InventoryPopup")}
+ isAddedToPopupLayer(t){
+ const i=xG.getInstance(),s=i.children.length;
+ let e;
+ for(let n=0;
+ n<s;
+ ++n)if(e=i.getChildAt(n),"string"==typeof e.className&&e.className==t)return!0;
+ return!1}
+ isAddedToDetailPopupLayer(t){
- isPetPopup(){
- return this.isDetailPopupView("PetPopup")}
- isGuildPopup(){
- return this.isDetailPopupView("Guild2Popup")}
- isInventoryPopup(){
- return this.isDetailPopupView("InventoryPopup")}
IntroView 6 hunks, 26 statements
- super(),Xt(this,"bg",null),Xt(this,"bgEx",null),Xt(this,"lbl"),Xt(this,"lblVersion"),Xt(this,"progress"),Xt(this,"onClick",null),Xt(this,"onSafeAreaBottomContentBind");
+ super(),Zt(this,"bg",null),Zt(this,"bgEx",null),Zt(this,"lbl"),Zt(this,"lblVersion"),Zt(this,"progress"),Zt(this,"footerShade",new ip),Zt(this,"footerGradient",new gl({
+ start:{
+ x:0,y:0}
+ ,end:{
+ x:0,y:1}
+ ,colorStops:[{
+ offset:0,color:"rgba(18, 8, 10, 0)"}
+ ,{
+ offset:.45,color:"rgba(18, 8, 10, 0.6)"}
+ ,{
+ offset:1,color:"rgba(18, 8, 10, 0.85)"}
+ ]}
+ )),Zt(this,"onClick",null),Zt(this,"onSafeAreaBottomContentBind"),this.footerShade.eventMode="none",this.addChild(this.footerShade);
- t.fontSize=22,t.fill=16777215,t.lineHeight=40,t.align="center",t.stroke={
- color:"#236386",width:5,join:"round"}
+ t.fontSize=22,t.fill=16773333,t.lineHeight=32,t.align="center",t.stroke={
+ color:2166284,width:5,join:"round"}
- i.fill=13495798,this.lblVersion=new SD("ver",i.fill,i),this.addChild(this.lblVersion),this.updateLayout(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
+ i.fill=14006944,i.stroke={
+ color:2166284,width:4,join:"round"}
+ ,this.lblVersion=new QD("ver",i.fill,i),this.addChild(this.lblVersion),this.updateLayout(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this)}
- let t=640;
- this.bg&&(t=this.bg.width);
- let i=1140,s=0;
- this.bg&&(i=this.bg.height,s=this.bg.y),this.lbl.x=.5*(t-this.lbl.width),this.lbl.y=s+.5*i-this.lbl.height+120,this.progress.x=.5*(t-this.progress.width),this.lblVersion.x=.5*(t-this.lblVersion.width);
- let e=s+i-this.lblVersion.height-20;
- s<0?(this.progress.y=s+.73*i,e=Xy.stageHeight-this.lblVersion.height-20):this.progress.y=s+.81*i,e-=Xy.SAFE_AREA_BOTTOM,this.lblVersion.y=e}
+ var t;
+ const i=(null==(t=this.bg)?void 0:t.width)||ES.stageWidth||640,s=(ES.stageHeight||1140)-ES.SAFE_AREA_TOP,e=s-ES.SAFE_AREA_BOTTOM;
+ this.progress.x=.5*(i-this.progress.width),this.progress.y=e-120,this.lbl.setWrapWidth(i-64),this.lbl.x=.5*(i-this.lbl.width),this.lbl.y=this.progress.y-this.lbl.height-18,this.lblVersion.x=.5*(i-this.lblVersion.width),this.lblVersion.y=e-this.lblVersion.height-20;
+ const n=Math.max(0,this.lbl.y-60);
+ this.footerShade.clear().rect(0,n,i,s-n).fill(this.footerGradient)}
- this.bg=new je(e),this.bg.width=Xy.stageWidth,this.bg.scale.y=this.bg.scale.x,this.bg.y=0,Xy.stageHeight>1140&&(this.bg.y=.5*(Xy.stageHeight-this.bg.height)),this.addChildAt(this.bg,0),Xy.stageHeight>this.bg.height&&(this.bgEx=new je(eS.getTexture("UI_Ekkorr","whiteRect")),this.bgEx.tint=141887,this.bgEx.width=Xy.stageWidth,this.bgEx.scale.y=this.bgEx.scale.x,this.addChildAt(this.bgEx,0)),this.eventMode="none",this.on("pointertap",this.onPointerTap.bind(this))}
+ this.bg=new Ye(e),this.bg.width=ES.stageWidth,this.bg.scale.y=this.bg.scale.x,this.bg.y=0,ES.stageHeight>1140&&(this.bg.y=Math.max(0,.5*(ES.stageHeight-this.bg.height))),this.addChildAt(this.bg,0),ES.stageHeight>this.bg.height&&(this.bgEx=new Ye(kS.getTexture("UI_Ekkorr","whiteRect")),this.bgEx.tint=1181706,this.bgEx.width=ES.stageWidth,this.bgEx.height=ES.stageHeight,this.addChildAt(this.bgEx,0)),this.eventMode="none",this.on("pointertap",this.onPointerTap.bind(this))}
- this.progress.update(t,11),this.showProgress(),this.progress.showBar(),this.progress.showText()}
+ this.progress.update(t,11),this.showProgress()}
BackgroundLayer 8 hunks, 24 statements
- var xB=(t=>(t[t.FOREST=1]="FOREST",t[t.DEAD_LAND=2]="DEAD_LAND",t))(xB||{
+ var hU=(t=>(t[t.FOREST=1]="FOREST",t[t.DEAD_LAND=2]="DEAD_LAND",t[t.FIRE_LAND=3]="FIRE_LAND",t))(hU||{
+ const rU=1e4,oU=15e3,aU=[rU,oU];
- return t>=1e4?2:1}
- qt(PB,"getRealmForWave");
+ return t>=oU?2:t>=rU?3:1}
+ function lU(t){
+ return 2===t?oU:3===t?rU:0}
+ function uU(t,i){
+ for(const s of aU)if(t<s&&i>s)return s;
+ return i}
+ function dU(t){
+ return 3!==cU(t)?0:Math.floor((t-rU)/100)+1}
+ function fU(t){
+ return 1*dU(t)}
+ function pU(t,i){
+ return Math.max(.1,t-fU(i)/100)}
+ Qt(cU,"getRealmForWave"),Qt(lU,"getRealmStartWave"),Qt(uU,"clampToRealmStart"),Qt(dU,"getFireDebuffLevel"),Qt(fU,"getFireSpeedDebuffPercent"),Qt(pU,"applyFireSpeedDebuff");
- super(),Xt(this,"bg"),Xt(this,"backgroundRequestId",0),Xt(this,"fogOverlay",null),Xt(this,"fogFilter",null),this.eventMode="none",this.bg=new je(eS.getTexture("BG","BG1")),this.addChild(this.bg),this.bg.width=640,this.bg.height=640}
+ super(),Zt(this,"bg"),Zt(this,"backgroundRequestId",0),this.eventMode="none",this.bg=new Ye(kS.getTexture("BG","BG1")),this.addChild(this.bg),this.bg.width=640,this.bg.height=640}
- this.backgroundRequestId++,this.bg.texture=eS.getTexture("BG",t),this.bg.width=640,this.bg.height=640,this.applyFogEffect("Highland"===t)}
+ this.backgroundRequestId++,this.bg.texture=kS.getTexture("BG",t),this.bg.width=640,this.bg.height=640}
- this.bg.texture=n,this.bg.width=s??n.width,this.bg.height=e??n.height,this.applyFogEffect(!1)}
- applyFogEffect(t){
- t?(this.fogFilter||(this.fogFilter=new of,this.fogFilter.saturate(-.35,!1),this.fogFilter.brightness(.92,!0)),this.bg.filters=[this.fogFilter],this.fogOverlay?(this.addChild(this.fogOverlay),this.fogOverlay.visible=!0):(this.fogOverlay=(new Ff).rect(0,0,640,640).fill({
- color:14674674,alpha:.18}
- ),this.addChild(this.fogOverlay))):(this.bg.filters=[],this.fogOverlay&&(this.fogOverlay.visible=!1))}
+ this.bg.texture=n,this.bg.width=s??n.width,this.bg.height=e??n.height}
- e===this.backgroundRequestId&&(this.bg.texture=n,this.bg.width=i,this.bg.height=s,this.applyFogEffect(!1))}
+ e===this.backgroundRequestId&&(this.bg.texture=n,this.bg.width=i,this.bg.height=s)}
- `),this.applyFogEffect(!1)}
+ `)}
FireBird1 3 hunks, 21 statements
- const c1=class extends K0{
+ const s2=class t extends U1{
+ execute(){
+ super.execute(),this.applySwoopOffset()}
+ applySwoopOffset(){
+ if(!this.sp)return;
+ const i=t.SWOOP_POSES,s=t.SWOOP_KEYS,e=this.currentFrame,n=Math.floor(e);
+ if(n<i[0][0]||n>=s[s.length-1][0])return void this.sp.position.set(0,0);
+ let h=i.length-1;
+ for(;
+ h>0&&n<i[h][0];
+ )h--;
+ let r=s[0][1],o=s[0][2];
+ for(let t=0;
+ t<s.length-1;
+ t++){
+ const[i,n,h]=s[t],[a,c,l]=s[t+1];
+ if(e<i)break;
+ const u=Math.min(1,(e-i)/(a-i));
+ r=n+(c-n)*u,o=h+(l-h)*u}
+ this.sp.position.set(r-i[h][1],o-i[h][2])}
- qt(c1,"FireBird1");
+ Qt(s2,"FireBird1"),Zt(s2,"SWOOP_POSES",[[23,0,0],[27,-7.8,-8.2],[31,-11,-11.7],[35,5.2,11.2],[39,3.9,4.6],[43,1.6,1.8]]),Zt(s2,"SWOOP_HOLD",4),Zt(s2,"SWOOP_KEYS",[...s2.SWOOP_POSES.map(([t,i,s])=>[t+(s2.SWOOP_HOLD-1)/2,i,s]),[s2.SWOOP_POSES[s2.SWOOP_POSES.length-1][0]+s2.SWOOP_HOLD,0,0]]);
HeroHireSubMenu 9 hunks, 21 statements
- super(),Xt(this,"lblTime",new SD("04:00",16711680,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"lblCost",new kU("UI_GEM","100",16711680,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"btnRefresh",new sjt("새로고침",110)),Xt(this,"btnClose",new SYt),Xt(this,"btnMedalBuy",new sjt("훈장구매",110)),Xt(this,"btnResetEvent",new nU("UI_Ekkorr","UI_Question",1)),Xt(this,"cnt",0),Xt(this,"duration",3600),Xt(this,"lastUpdateTime",0),Xt(this,"divide",1),Xt(this,"requestPending",!1),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.addChild(this.btnClose),this.btnRefresh.width=110,this.btnRefresh.height=45,this.btnRefresh.y=.5*(this.bg.height-this.btnRefresh.height),this.addChild(this.btnRefresh),this.btnMedalBuy.width=140,this.btnMedalBuy.height=45,this.btnMedalBuy.y=.5*(this.bg.height-this.btnMedalBuy.height),this.btnMedalBuy.on("pointertap",this.onMedalBuy,this),this.addChild(this.btnMedalBuy),this.btnMedalBuy.visible=!1,this.lblTitle.y=2,this.lblTime.y=this.btnRefresh.y,this.addChild(this.lblTime),this.lblCost.iconScale=.8,this.lblCost.textOffsetX=1,this.lblCost.y=this.lblTime.y+25,this.addChild(this.lblCost),this.btnRefresh.on("pointertap",this.onRefresh,this),this.btnClose.onClick=()=>{
+ super(),Zt(this,"lblTime",new QD("04:00",16711680,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"lblCost",new SF("UI_GEM","100",16711680,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"btnRefresh",new sKt("새로고침",110,20)),Zt(this,"btnMassiveBuy",new sKt("대량 구매",70)),Zt(this,"massiveBuyLabel","대량 구매"),Zt(this,"btnClose",new mqt),Zt(this,"btnMedalBuy",new sKt("훈장구매",110,20)),Zt(this,"btnResetEvent",new UU("UI_Ekkorr","UI_Question",1)),Zt(this,"cnt",0),Zt(this,"duration",3600),Zt(this,"lastUpdateTime",0),Zt(this,"refreshCost",100),Zt(this,"divide",1),Zt(this,"requestPending",!1),this.btnClose.x=640-this.btnClose.width-10,this.btnClose.y=.5*(this.bg.height-this.btnClose.height),this.addChild(this.btnClose),this.btnRefresh.width=110,this.btnRefresh.height=45,this.btnRefresh.y=.5*(this.bg.height-this.btnRefresh.height),this.addChild(this.btnRefresh),this.btnMassiveBuy.width=110,this.btnMassiveBuy.height=45,this.btnMassiveBuy.x=150,this.btnMassiveBuy.y=.5*(this.bg.height-this.btnMassiveBuy.height),this.btnMassiveBuy.on("pointertap",this.onMassiveBuy,this),this.addChild(this.btnMassiveBuy),this.btnMassiveBuy.visible=!1,this.btnMedalBuy.width=140,this.btnMedalBuy.height=45,this.btnMedalBuy.y=.5*(this.bg.height-this.btnMedalBuy.height),this.btnMedalBuy.on("pointertap",this.onMedalBuy,this),this.addChild(this.btnMedalBuy),this.btnMedalBuy.visible=!1,this.lblTitle.y=2,this.lblTime.y=this.btnRefresh.y,this.addChild(this.lblTime),this.lblCost.iconScale=.8,this.lblCost.textOffsetX=1,this.lblCost.y=this.lblTime.y+25,this.addChild(this.lblCost),this.btnRefresh.on("pointertap",this.onRefresh,this),this.btnClose.onClick=()=>{
- ,this.btnResetEvent.x=this.lblCost.x-this.btnResetEvent.width-5,this.btnResetEvent.y=this.btnRefresh.y+.5*(this.btnRefresh.height-this.btnResetEvent.height),this.btnResetEvent.onClick=this.onResetEventClick.bind(this),this.addChild(this.btnResetEvent),this.btnResetEvent.visible=!1,this.lastUpdateTime=Date.now(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this),this.updateLanguage()}
+ ,this.btnResetEvent.x=this.lblCost.x-this.btnResetEvent.width-5,this.btnResetEvent.y=this.btnRefresh.y+.5*(.5*this.btnRefresh.height-this.btnResetEvent.height),this.btnResetEvent.onClick=this.onResetEventClick.bind(this),this.addChild(this.btnResetEvent),this.btnResetEvent.visible=!1,this.lastUpdateTime=Date.now(),this.on("added",this.onAdded,this),this.on("removed",this.onRemoved,this),this.updateLanguage()}
+ onMassiveBuy(){
+ iQt.getInstance().showPopup()}
- this.btnMedalBuy.visible=XD.maxWave>=500,this.btnMedalBuy.visible?(this.btnMedalBuy.x=this.btnClose.x-this.btnMedalBuy.width-5,this.btnRefresh.x=this.btnMedalBuy.x-this.btnRefresh.width-5):this.btnRefresh.x=this.btnClose.x-this.btnRefresh.width-5,this.lblTime.x=this.btnRefresh.x-60,this.lblCost.x=this.btnRefresh.x-this.lblCost.width-10,this.btnResetEvent.x=this.lblCost.x-this.btnResetEvent.width-5}
+ this.btnMedalBuy.visible=EG.maxWave>=500,this.btnMassiveBuy.visible=OG.getInstance().development&&EG.maxWave>=500,this.btnMedalBuy.visible?(this.btnMedalBuy.x=this.btnClose.x-this.btnMedalBuy.width-5,this.btnRefresh.x=this.btnMedalBuy.x-this.btnRefresh.width-5):this.btnRefresh.x=this.btnClose.x-this.btnRefresh.width-5,this.lblTime.x=this.btnRefresh.x-60,this.lblCost.x=this.btnRefresh.x-this.lblCost.width-10,this.btnResetEvent.x=this.lblTime.x-this.btnResetEvent.width;
+ const t=this.lblTime.x-(this.btnResetEvent.visible?20:0)-18,i=t-(this.lblTitle.x+this.lblTitle.width+10),s=Math.max(70,Math.min(110,i)),e=s-20;
+ let n=17;
+ const h=this.btnMassiveBuy.lbl.getStyle();
+ for(;
+ !(sD.wrapTextCJK(this.massiveBuyLabel,{
+ ...h,fontSize:n}
+ ,e).split("\n").length<=2||n<=10);
+ )n--;
+ this.btnMassiveBuy.width===s&&this.btnMassiveBuy.lbl.getWrapWidth()===e&&this.btnMassiveBuy.text===this.massiveBuyLabel&&this.btnMassiveBuy.lbl.textSize===n||(this.btnMassiveBuy.lbl.textSize=n,this.btnMassiveBuy.lbl.align="center",this.btnMassiveBuy.lbl.setWrapWidth(e),this.btnMassiveBuy.text=this.massiveBuyLabel,this.btnMassiveBuy.width=s),this.btnMassiveBuy.x=t-s}
+ udpateRefreshCost(){
+ const t=parseInt(SG.getInstance().getClientData("HERO_PAID_REFRESH_COST"));
+ this.refreshCost=isNaN(t)?100:t}
- if(t>0)this.lblCost.text=String(100/this.divide),this.lblCost.textColor=OL.DEFAULT_COLOR,this.btnRefresh.hideRedDot();
+ if(t>0)this.lblCost.text=String(this.refreshCost/this.divide),this.lblCost.textColor=sD.DEFAULT_COLOR,this.btnRefresh.hideRedDot();
- if(this.duration-.001*(cR.time-this.lastUpdateTime)>0)return Ijt.getInstance().show(nB.getValueReplace("GAME_53","##",100/this.divide,"보석 100개를 사용하고, 영웅목록을 새로 갱신하겠습니다.")+"\n("+nB.getValueReplace("GAME_54","##",Math.floor(60/this.divide),"60분마다 무료로 목록을 갱신할 수 있습니다.")+")",()=>this.onRefleshHeroes(!0)),void(Ijt.getInstance().y=480);
+ if(this.duration-.001*(DR.time-this.lastUpdateTime)>0)return OKt.getInstance().show(RB.getValueReplace("GAME_53","##",this.refreshCost/this.divide,"보석 100개를 사용하고, 영웅목록을 새로 갱신하겠습니다.")+"\n("+RB.getValueReplace("GAME_54","##",Math.floor(60/this.divide),"60분마다 무료로 목록을 갱신할 수 있습니다.")+")",()=>this.onRefleshHeroes(!0)),void(OKt.getInstance().y=480);
- this.updateLanguage(),this.updateMedalBuyBtn()}
+ this.udpateRefreshCost(),this.updateLanguage(),this.updateMedalBuyBtn()}
- this.setTitle(nB.getText("GAME_13","영웅 고용")),this.btnRefresh.text=nB.getText("COMMON_60","새로고침"),this.btnMedalBuy.text=nB.getText("GAME_1197","훈장구매"),this.updateLayout()}
+ this.setTitle(RB.getText("GAME_13","영웅 고용")),this.btnRefresh.text=RB.getText("COMMON_60","새로고침"),this.btnMedalBuy.text=RB.getText("GAME_1197","훈장구매"),this.btnMassiveBuy.lbl.align="center",this.massiveBuyLabel=RB.getText("GAME_1892","대량 구매"),this.updateLayout()}
BaseCastle 4 hunks, 20 statements
- super(),Xt(this,"isCastle",!0),Xt(this,"numShot",1),Xt(this,"hpRegenPerSec",.001),Xt(this,"REGEN_INTERVAL",450),Xt(this,"regenTimer",0),Xt(this,"castleFireList"),Xt(this,"damageFireList"),Xt(this,"currentFireLevel",0),Xt(this,"rangeVisible",!1),Xt(this,"healthBarShowTimer",0),this.eventMode="dynamic",this.on("pointerdown",this.onPointerDown,this)}
+ super(),Zt(this,"isCastle",!0),Zt(this,"numShot",1),Zt(this,"hpRegenPerSec",.001),Zt(this,"REGEN_INTERVAL",450),Zt(this,"regenTimer",0),Zt(this,"castleFireList"),Zt(this,"damageFireList"),Zt(this,"currentFireLevel",0),Zt(this,"rangeVisible",!1),Zt(this,"healthBarShowTimer",0),Zt(this,"defaultSkin",""),this.eventMode="dynamic",this.on("pointerdown",this.onPointerDown,this)}
+ setSkin(t){
+ if(!this.sp||!this.textures)return;
+ this.defaultSkin||(this.defaultSkin=this.textureName||this.className);
+ const i=t||this.defaultSkin;
+ if(i===this.textureName)return;
+ const s=kS.getTextures(this.sheetName,i);
+ if(!s||0===s.length)return;
+ this.textureName=i,this.textures=s;
+ const e=s[0];
+ e.defaultAnchor&&this.sp.anchor.copyFrom(e.defaultAnchor),this.sp.texture=this.textures[Math.min(this.textures.length-1,Math.floor(this.currentFrame))],this.fitHealthBarToSkin(e),this.currentFireLevel>0&&this.applyDamageFires(this.currentFireLevel)}
+ fitHealthBarToSkin(t){
+ var i,s;
+ this.setHealthBarPosition();
+ const e=(null==(i=t.defaultAnchor)?void 0:i.y)??this.sp.anchor.y,n=t.trim?t.trim.y:0,h=(e*t.orig.height-n)*((null==(s=this.sp.parent)?void 0:s.scale.y)??1);
+ this.healthBar.y=Math.min(this.healthBar.y,-h-6)}
- const e=t.FIRE_POSITIONS[i],n=t.FIRE_TYPES[i],h=this.showEffect(n,99999,e),r=Math.random()<.5?-1:1;
+ const e=(t.FIRE_POSITIONS_BY_SKIN[this.textureName]??t.FIRE_POSITIONS)[i],n=t.FIRE_TYPES[i],h=this.showEffect(n,99999,e),r=Math.random()<.5?-1:1;
- qt(q0,"BaseCastle"),Xt(q0,"FIRE_POSITIONS",[new _i(10,-15),new _i(-15,-8),new _i(3,-4),new _i(-15,-28),new _i(5,-35)]),Xt(q0,"FIRE_TYPES",[$H.CastleFire2,$H.CastleFire1,$H.CastleFire2,$H.CastleFire1,$H.CastleFire1]);
+ Qt(H1,"BaseCastle"),Zt(H1,"FIRE_POSITIONS",[new yi(10,-15),new yi(-15,-8),new yi(3,-4),new yi(-15,-28),new yi(5,-35)]),Zt(H1,"FIRE_POSITIONS_BY_SKIN",{
+ CastleHuman:[new yi(18,-14),new yi(-20,-10),new yi(2,-4),new yi(-22,-40),new yi(20,-48)],CastleOrc:[new yi(12,-18),new yi(-14,-12),new yi(2,-4),new yi(-16,-34),new yi(10,-46)],CastleUndead:[new yi(20,-16),new yi(-20,-12),new yi(2,-4),new yi(-18,-38),new yi(12,-50)],CastleElf:[new yi(22,-14),new yi(-22,-12),new yi(2,-10),new yi(-22,-48),new yi(20,-54)]}
+ ),Zt(H1,"FIRE_TYPES",[GH.CastleFire2,GH.CastleFire1,GH.CastleFire2,GH.CastleFire1,GH.CastleFire1]);
TowerItemRenderer 6 hunks, 20 statements
- super(),Xt(this,"bg"),Xt(this,"lblFloor",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_17)),Xt(this,"lblCondition",new SD("",11184810,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblGem",new kU("UI_GEM","0",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblHonor",new kU("PVP_COIN_ON","0",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"btnChallenge",new sjt("도전",110)),Xt(this,"btnSimulate",new sjt("시뮬",80)),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"lblFloor",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblCondition",new QD("",11184810,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblGem",new SF("UI_GEM","0",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblHonor",new SF("PVP_COIN_ON","0",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblPlusEvent",new QD("+",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblGemEvent",new SF("UI_GEM","0",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblHonorEvent",new SF("PVP_COIN_ON","0",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"btnChallenge",new sKt("도전",110)),Zt(this,"btnSimulate",new sKt("시뮬",80)),Zt(this,"gemEvent",0),Zt(this,"honorCoinEvent",0),this.bg=new eE({
- ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.lblFloor.x=15,this.lblFloor.y=.5*(this.bg.height-this.lblFloor.height),this.addChild(this.lblFloor),this.lblCondition.x=135,this.addChild(this.lblCondition),this.lblGem.iconScale=.9,this.addChild(this.lblGem),this.lblHonor.iconScale=.9,this.addChild(this.lblHonor),this.btnChallenge.width=110,this.btnChallenge.height=62,this.btnChallenge.x=this.bg.width-110-10,this.btnChallenge.y=.5*(this.bg.height-62),this.addChild(this.btnChallenge),this.btnChallenge.on("pointertap",this.onChallenge,this),this.btnSimulate.width=80,this.btnSimulate.height=62,this.btnSimulate.x=this.btnChallenge.x-this.btnSimulate.width-6,this.btnSimulate.y=this.btnChallenge.y,this.addChild(this.btnSimulate),this.btnSimulate.on("pointertap",this.onSimulate,this),iG.getInstance().development?this.btnSimulate.visible=!0:this.btnSimulate.visible=!1}
+ ),this.bg.width=630,this.bg.height=80,this.addChild(this.bg),this.lblFloor.x=15,this.lblFloor.y=.5*(this.bg.height-this.lblFloor.height),this.addChild(this.lblFloor),this.lblCondition.x=135,this.addChild(this.lblCondition);
+ const t=.9;
+ this.lblGem.iconScale=t,this.addChild(this.lblGem),this.lblHonor.iconScale=t,this.addChild(this.lblHonor),this.addChild(this.lblPlusEvent),this.lblGemEvent.iconScale=t,this.addChild(this.lblGemEvent),this.lblHonorEvent.iconScale=t,this.addChild(this.lblHonorEvent),this.lblGemEvent.visible=this.lblHonorEvent.visible=!1,this.btnChallenge.width=110,this.btnChallenge.height=62,this.btnChallenge.x=this.bg.width-110-10,this.btnChallenge.y=.5*(this.bg.height-62),this.addChild(this.btnChallenge),this.btnChallenge.on("pointertap",this.onChallenge,this),this.btnSimulate.width=80,this.btnSimulate.height=62,this.btnSimulate.x=this.btnChallenge.x-this.btnSimulate.width-6,this.btnSimulate.y=this.btnChallenge.y,this.addChild(this.btnSimulate),this.btnSimulate.on("pointertap",this.onSimulate,this),OG.getInstance().development?this.btnSimulate.visible=!0:this.btnSimulate.visible=!1}
- i&&(this.lblGem.text=`${
+ if(i&&(this.lblGem.text=`${
- `)}
+ `,this.lblPlusEvent.visible=this.lblGemEvent.visible=this.lblHonorEvent.visible=!1,GB.isValidEvent(BB.TOWER_EVENT))){
+ const i=GB.currentTowerEvent,s=i?i.floors.indexOf(t.floor):-1;
+ if(s>-1){
+ const t=i?i.rewards[s]:[];
+ this.gemEvent=0,this.honorCoinEvent=0,t.forEach(t=>{
+ "gem"===t.type&&(this.gemEvent+=t.amount),"honorCoin"===t.type&&(this.honorCoinEvent+=t.amount)}
+ ),this.lblPlusEvent.visible=!0,this.gemEvent>0&&(this.lblGemEvent.text=`${
+ this.gemEvent}
+ `,this.lblGemEvent.visible=!0),this.honorCoinEvent>0&&(this.lblHonorEvent.text=`${
+ this.honorCoinEvent}
+ `,this.lblHonorEvent.visible=!0)}
+ }
+ }
- this.lblGem.x=i,this.lblGem.y=t,i+=this.lblGem.width+5,this.lblHonor.x=i,this.lblHonor.y=t+2}
+ this.lblGem.x=i,this.lblGem.y=t,i+=this.lblGem.width+5,this.lblHonor.x=i,this.lblHonor.y=t+2,this.lblGemEvent.y=this.lblGem.y,this.lblHonorEvent.y=this.lblHonor.y,this.lblPlusEvent.y=this.lblGem.y+.5*(this.lblGem.height-this.lblPlusEvent.height),i+=this.lblHonor.width+5+20,this.lblPlusEvent.x=i,i+=this.lblPlusEvent.width+5,this.gemEvent>0&&(this.lblGemEvent.x=i,i+=this.lblGemEvent.width+5),this.lblHonorEvent.x=i}
- this.lblFloor.textColor=i,this.lblCondition.textColor=s,this.lblGem.textColor=t?8947848:OL.DEFAULT_COLOR,this.lblHonor.textColor=t?8947848:OL.DEFAULT_COLOR,this.lblGem.iconColor=t?6710886:16777215,this.lblHonor.iconColor=t?6710886:16777215}
+ this.lblFloor.textColor=i,this.lblCondition.textColor=s,this.lblGem.textColor=t?8947848:sD.DEFAULT_COLOR,this.lblHonor.textColor=t?8947848:sD.DEFAULT_COLOR,this.lblGem.iconColor=t?6710886:16777215,this.lblHonor.iconColor=t?6710886:16777215,this.lblPlusEvent.textColor=t?8947848:sD.COLOR_YELLOW,this.lblGemEvent.textColor=t?8947848:sD.COLOR_YELLOW,this.lblHonorEvent.textColor=t?8947848:sD.COLOR_YELLOW,this.lblGemEvent.iconColor=t?6710886:16777215,this.lblHonorEvent.iconColor=t?6710886:16777215}
CastleDetailPopup 5 hunks, 19 statements
- super(),Xt(this,"lblHp",new kU("UI_HEART","0",16711680,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"btnEnhance",new MF("UI_STAR_ICON","1000","강화",.8,160,70)),Xt(this,"btnReset",new MF("UI_GEM","100","강화초기화",.8,160,70)),Xt(this,"enhanceRapidClickCount",0),Xt(this,"lastEnhanceRapidClickTime",0),Xt(this,"btn10Enhance",new MF("UI_STAR_ICON","10000","+10",.8,160,70)),Xt(this,"btn100Enhance",new MF("UI_STAR_ICON","100000","+100",.8,160,70)),Xt(this,"lblDesc",new SD("훈장으로 강화를 하면, ",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblName",new SD("발키온 성",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblCastleBonus",new SD("",4495871,OL.WHITE_OUTLINE_FONT_OPTION_16)),Xt(this,"multiEnhanceContainer",new He),Xt(this,"enhanceTimer",null),Xt(this,"enhanceStartValue",-1),Xt(this,"enhanceStartMedal",-1),Xt(this,"syncInFlight",!1),Xt(this,"syncQueued",!1),Xt(this,"vo"),Xt(this,"castleIcon",new xai),Xt(this,"lblMedal",new kU("UI_STAR_ICON","0",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),this.title=nB.getText("GAME_86","성 정보"),this.castleIcon.x=25,this.castleIcon.y=65,this.contentContainer.addChild(this.castleIcon),this.contentContainer.addChild(this.lblMedal),this.lblName.text=nB.getText("GAME_530","발키온 성"),this.lblName.x=this.castleIcon.x+this.castleIcon.width+25,this.lblName.y=this.castleIcon.y+10,this.contentContainer.addChild(this.lblName),this.lblCastleBonus.visible=!1,this.contentContainer.addChild(this.lblCastleBonus),this.lblHp.x=this.lblName.x,this.lblHp.y=this.lblName.y+this.lblName.height+10,this.contentContainer.addChild(this.lblHp),this.btnEnhance.text=nB.getText("GAME_66","강화"),this.btnEnhance.showIconLabel=!0,this.btnEnhance.showTextLabel=!0,this.btnEnhance.color=MF.LIGHT_GREEN,this.btnEnhance.onClick=()=>this.onEnhanceClick(1),this.btn10Enhance.labelOrder=MF.TEXT_FIRST,this.btn10Enhance.textLabel.textSize=15,this.btn10Enhance.textAlign="left",this.btn10Enhance.iconScale=.7,this.btn10Enhance.color=MF.LIGHT_GREEN,this.btn10Enhance.showIconLabel=!0,this.btn10Enhance.showTextLabel=!0,this.btn10Enhance.onClick=()=>{
+ super(),Zt(this,"lblHp",new SF("UI_HEART","0",16711680,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"btnEnhance",new m$("UI_STAR_ICON","1000","강화",.8,160,70)),Zt(this,"btnReset",new m$("UI_GEM","100","강화초기화",.8,160,70)),Zt(this,"enhanceRapidClickCount",0),Zt(this,"lastEnhanceRapidClickTime",0),Zt(this,"btn10Enhance",new m$("UI_STAR_ICON","10000","+10",.8,160,70)),Zt(this,"btn100Enhance",new m$("UI_STAR_ICON","100000","+100",.8,160,70)),Zt(this,"btnMaxEnhance",new m$("UI_STAR_ICON","0","Max",.8,160,70)),Zt(this,"lblDesc",new QD("훈장으로 강화를 하면, ",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblName",new QD("발키온 성",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblCastleBonus",new QD("",4495871,sD.WHITE_OUTLINE_FONT_OPTION_16)),Zt(this,"multiEnhanceContainer",new Ve),Zt(this,"enhanceTimer",null),Zt(this,"enhanceStartValue",-1),Zt(this,"enhanceStartMedal",-1),Zt(this,"syncInFlight",!1),Zt(this,"syncQueued",!1),Zt(this,"vo"),Zt(this,"castleIcon",new nli),Zt(this,"lblMedal",new SF("UI_STAR_ICON","0",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.title=RB.getText("GAME_86","성 정보"),this.castleIcon.x=25,this.castleIcon.y=65,this.contentContainer.addChild(this.castleIcon),this.contentContainer.addChild(this.lblMedal),this.lblName.text=RB.getText("GAME_530","발키온 성"),this.lblName.x=this.castleIcon.x+this.castleIcon.width+25,this.lblName.y=this.castleIcon.y+10,this.contentContainer.addChild(this.lblName),this.lblCastleBonus.visible=!1,this.contentContainer.addChild(this.lblCastleBonus),this.lblHp.x=this.lblName.x,this.lblHp.y=this.lblName.y+this.lblName.height+10,this.contentContainer.addChild(this.lblHp),this.btnEnhance.text=RB.getText("GAME_66","강화"),this.btnEnhance.showIconLabel=!0,this.btnEnhance.showTextLabel=!0,this.btnEnhance.color=m$.LIGHT_GREEN,this.btnEnhance.onClick=()=>this.onEnhanceClick(1),this.btn10Enhance.labelOrder=m$.TEXT_FIRST,this.btn10Enhance.textLabel.textSize=15,this.btn10Enhance.textAlign="left",this.btn10Enhance.iconScale=.7,this.btn10Enhance.color=m$.LIGHT_GREEN,this.btn10Enhance.showIconLabel=!0,this.btn10Enhance.showTextLabel=!0,this.btn10Enhance.onClick=()=>{
- ,this.multiEnhanceContainer.addChild(this.btn100Enhance),this.multiEnhanceContainer.visible=!1,this.contentContainer.addChild(this.multiEnhanceContainer),this.btnReset.text=nB.getText("COMMON_368","초기화"),this.btnReset.showIconLabel=!0,this.btnReset.showTextLabel=!0,this.btnReset.color=MF.RED,this.btnReset.onClick=this.onResetClick.bind(this),this.contentContainer.addChild(this.btnEnhance,this.btnReset),this.outSideClickHide=!0,this.updateLayout()}
+ ,this.multiEnhanceContainer.addChild(this.btn100Enhance),this.btnMaxEnhance.labelOrder=m$.TEXT_FIRST,this.btnMaxEnhance.textLabel.textSize=15,this.btnMaxEnhance.textAlign="left",this.btnMaxEnhance.iconScale=.7,this.btnMaxEnhance.color=m$.LIGHT_GREEN,this.btnMaxEnhance.showIconLabel=!0,this.btnMaxEnhance.showTextLabel=!0,this.btnMaxEnhance.onClick=()=>{
+ const t=this.getMaxIncrement();
+ t>0?this.onEnhanceClick(t):vH.getInstance().showMessage(RB.getText("GAME_48","훈장이 부족합니다."))}
+ ,this.multiEnhanceContainer.addChild(this.btnMaxEnhance),this.multiEnhanceContainer.visible=!1,this.contentContainer.addChild(this.multiEnhanceContainer),this.btnReset.text=RB.getText("COMMON_368","초기화"),this.btnReset.showIconLabel=!0,this.btnReset.showTextLabel=!0,this.btnReset.color=m$.RED,this.btnReset.onClick=this.onResetClick.bind(this),this.contentContainer.addChild(this.btnEnhance,this.btnReset),this.outSideClickHide=!0,this.updateLayout()}
+ getMaxIncrement(){
+ const t=QXt.getInstance().getMaxAffordableLevel(this.vo.enhance,EG.medal);
+ return Math.max(0,Math.min(t,ZR.CASTLE_MAX_ENHANCE)-this.vo.enhance)}
+ if(this.vo.enhance+1>s)this.btnMaxEnhance.visible=!1;
+ else{
+ const t=this.getMaxIncrement(),i=QXt.getInstance(),s=RB.getText("GAME_1192","Max");
+ this.btnMaxEnhance.text=t>0?`${
+ s}
+  +${
+ t}
+ `:s,this.btnMaxEnhance.iconText=KD.displayLargeNumberAsAlphabet(t>0?i.getTotalCost(this.vo.enhance,this.vo.enhance+t):i.getCost(this.vo.enhance+1)),this.btnMaxEnhance.activated=t>0,this.btnMaxEnhance.visible=!0}
- if(this.btnEnhance.x=i,this.btnEnhance.y=250,this.btnReset.x=this.btnEnhance.x+this.btnEnhance.width+20,this.btnReset.y=250,this.multiEnhanceContainer.visible)this.lblMedal.x=this.btnReset.x,this.lblMedal.y=210;
+ if(this.btnEnhance.x=i,this.btnEnhance.y=250,this.btnReset.x=this.btnEnhance.x+this.btnEnhance.width+20,this.btnReset.y=250,this.multiEnhanceContainer.visible){
+ const t=5;
+ this.btnMaxEnhance.x=this.btnReset.x,this.btnMaxEnhance.y=this.btnReset.y-this.btnMaxEnhance.height-t,this.lblMedal.x=this.btnReset.x,this.lblMedal.y=this.btnMaxEnhance.visible?this.btnMaxEnhance.y-35:210}
WaveBar 1 hunks, 19 statements
+ function edi(t){
+ return[1,1.5,2].filter(i=>i<=t)}
+ function ndi(t,i,s){
+ const e=null!==t.userSpeedMode&&t.userSpeedMode<i;
+ return{
+ baseSpeed:e?t.userSpeedMode:i,godBlessSpeed:s&&!t.godBlessOff?3:0,userSpeedMode:e?t.userSpeedMode:null}
+ }
+ function hdi(t,i,s){
+ const e=edi(i),n=ndi(t,i,s).baseSpeed,h=e.indexOf(n);
+ return s?t.godBlessOff?h<0||h===e.length-1?{
+ userSpeedMode:null,godBlessOff:!1}
+ :{
+ userSpeedMode:e[h+1],godBlessOff:!0}
+ :{
+ userSpeedMode:e[0],godBlessOff:!0}
+ :{
+ userSpeedMode:e[(h+1)%e.length],godBlessOff:t.godBlessOff}
+ }
+ Qt(edi,"speedOptions"),Qt(ndi,"resolveSpeed"),Qt(hdi,"nextSpeedChoice");
MiniAscentDataManager 6 hunks, 19 statements
- Xt(this,"season",null),Xt(this,"run",null),Xt(this,"relics",null),Xt(this,"crystals",null),Xt(this,"lastDefeat",null),Xt(this,"lastClear",null),Xt(this,"eventActive",!1),Xt(this,"stateError",null),Xt(this,"viewRevision",0),Xt(this,"viewCache",new Map),Xt(this,"viewRequests",new Map)}
+ Zt(this,"season",null),Zt(this,"run",null),Zt(this,"relics",null),Zt(this,"crystals",null),Zt(this,"lastDefeat",null),Zt(this,"lastClear",null),Zt(this,"eventActive",!1),Zt(this,"stateError",null),Zt(this,"seasonEndedByServer",!1),Zt(this,"onSeasonEnded",null),Zt(this,"shopOnly",!1),Zt(this,"viewRevision",0),Zt(this,"viewCache",new Map),Zt(this,"viewRequests",new Map)}
+ isSeasonOver(){
+ var t,i;
+ if(this.seasonEndedByServer)return!0;
+ if(this.shopOnly?!GB.isAscentShopOpen():!GB.isValidEvent(BB.MINI_ASCENT_EVENT))return!0;
+ const s=Date.parse((this.shopOnly?null==(t=this.season)?void 0:t.shopEndTime:null==(i=this.season)?void 0:i.endTime)??""),e=DR.time>=0?DR.time:Date.now();
+ return Number.isFinite(s)&&e>=s}
+ enterShopOnly(){
+ this.shopOnly=!0,this.seasonEndedByServer=!1,this.run=null,this.relics=null,this.crystals=null,this.lastDefeat=null,this.invalidateViews()}
+ leaveShopOnly(){
+ this.shopOnly=!1}
+ async discardPendingResult(){
+ await MS.removeData(MS.KEY_MINI_ASCENT_PENDING)}
+ var i;
- if(!1===t.success)throw new C_i(t.errorMessageFromServer??t.errorMessage??"rejected");
+ if(!1===t.success){
+ const s=t.errorMessageFromServer??t.errorMessage??"rejected";
+ throw"SEASON_NOT_FOUND"!==s||this.seasonEndedByServer||(this.seasonEndedByServer=!0,null==(i=this.onSeasonEnded)||i.call(this)),new Bbi(s)}
- t&&((t.season&&(null==(i=this.season)?void 0:i.seasonId)!==t.season.seasonId||t.crystals&&t.crystals.revision!==(null==(s=this.crystals)?void 0:s.revision)||void 0!==t.run&&JSON.stringify(this.run)!==JSON.stringify(t.run))&&this.invalidateViews(),t.season&&((null==(e=this.season)?void 0:e.seasonId)!==t.season.seasonId&&(this.lastDefeat=null,this.relics=null,this.crystals=null),this.season=t.season),void 0!==t.lastDefeat&&(this.lastDefeat=t.lastDefeat),t.crystals&&(this.crystals=t.crystals),t.relics&&(this.relics=t.relics),void 0!==t.run&&(this.run=t.run,this.lastDefeat&&this.run&&this.run.floor>this.lastDefeat.floor&&(this.lastDefeat=null)),Array.isArray(t.rows)&&void 0!==t.currentNode&&this.viewCache.set("route",t),void 0!==t.shop&&this.viewCache.set("shop",t),t.eventShop&&this.viewCache.set("eventShop",t),t.crystals&&this.viewCache.set("crystals",t),t.relics&&this.viewCache.set("relics",t))}
+ t&&((t.season&&(null==(i=this.season)?void 0:i.seasonId)!==t.season.seasonId||t.crystals&&t.crystals.revision!==(null==(s=this.crystals)?void 0:s.revision)||void 0!==t.run&&JSON.stringify(this.run)!==JSON.stringify(t.run))&&this.invalidateViews(),t.season&&(this.seasonEndedByServer=!1,(null==(e=this.season)?void 0:e.seasonId)!==t.season.seasonId&&(this.lastDefeat=null,this.relics=null,this.crystals=null),this.season=t.season),void 0!==t.lastDefeat&&(this.lastDefeat=t.lastDefeat),t.crystals&&(this.crystals=t.crystals),t.relics&&(this.relics=t.relics),void 0!==t.run&&(this.run=t.run,this.lastDefeat&&this.run&&this.run.floor>this.lastDefeat.floor&&(this.lastDefeat=null)),Array.isArray(t.rows)&&void 0!==t.currentNode&&this.viewCache.set("route",t),void 0!==t.shop&&this.viewCache.set("shop",t),t.eventShop&&this.viewCache.set("eventShop",t),t.crystals&&this.viewCache.set("crystals",t),t.relics&&this.viewCache.set("relics",t))}
+ if(this.isSeasonOver())return await this.discardPendingResult(),null;
BaseUnit 11 hunks, 18 statements
- ),Xt(this,"numHitted",0),Xt(this,"numStun",0),Xt(this,"numFreeze",0),Xt(this,"numSlow",0),Xt(this,"numAtkSlow",0),Xt(this,"numChillTint",0),Xt(this,"numBurn",0),Xt(this,"numPoison",0),Xt(this,"numBleed",0),Xt(this,"numCurse",0),Xt(this,"numSilence",0),Xt(this,"numKnockBack",0),Xt(this,"numPowerShield",0),Xt(this,"numMagicalShield",0),Xt(this,"numPhysicalShield",0),Xt(this,"numTransparent",0),Xt(this,"knockBackVx",0),Xt(this,"knockBackVy",0),Xt(this,"numPriestShield",0),Xt(this,"priestShieldHits",0),Xt(this,"numBlow",0),Xt(this,"blowVx",0),Xt(this,"blowVy",0),Xt(this,"blowVh",0),Xt(this,"blowGravity",.3),Xt(this,"blowHeight",0),Xt(this,"numBinding",0),Xt(this,"numShock",0),Xt(this,"knockImmune",!1),Xt(this,"blowImmune",!1),Xt(this,"stunImmune",!1),Xt(this,"freezeImmune",!1),Xt(this,"poisonImmune",!1),Xt(this,"stunResistPct",0),Xt(this,"knockResistPct",0),Xt(this,"blowResistPct",0),Xt(this,"freezeResistPct",0),Xt(this,"currentSize",1.05),Xt(this,"_baseSize",0),Xt(this,"_baseHitHeight",0),Xt(this,"_baseHitWidth",0),Xt(this,"_baseRadius",0),Xt(this,"sizeScale",1),Xt(this,"direction",1),Xt(this,"hideHealthBarTimer",0),Xt(this,"maxRevive",0),Xt(this,"numRevive",0),Xt(this,"reviveCount",0),Xt(this,"reviveInterval",40),Xt(this,"immediateReviveDelay",60),Xt(this,"removed",!1),Xt(this,"stayAfterDeath",!1),Xt(this,"reviveHealthPercent",.6),Xt(this,"numShot",1),Xt(this,"numBounce",0),Xt(this,"multiShotDelay",0),Xt(this,"_poolReturned",!1),Xt(this,"targetAlpha",1),Xt(this,"t",0),Xt(this,"evolEffect",null),Xt(this,"evolStar",null),Xt(this,"numLove",0),Xt(this,"numLoveShield",0),Xt(this,"__airHeight",0),Xt(this,"_airHeight",0),Xt(this,"numAirToGround",-30),this.addChild(this.container),this.idleLookInterval=60,this.initializeData(),this.initialize(),this.generateSprite(),this.startFrame=this.idleFrames.start,this.endFrame=this.idleFrames.end,this.currentFrame=this.startFrame,this.loop=!0,this.eventMode="none"}
+ ),Zt(this,"numHitted",0),Zt(this,"numStun",0),Zt(this,"numFreeze",0),Zt(this,"numSlow",0),Zt(this,"numAtkSlow",0),Zt(this,"numChillTint",0),Zt(this,"numBurn",0),Zt(this,"numPoison",0),Zt(this,"numBleed",0),Zt(this,"numCurse",0),Zt(this,"numSilence",0),Zt(this,"numKnockBack",0),Zt(this,"numPowerShield",0),Zt(this,"numMagicalShield",0),Zt(this,"numPhysicalShield",0),Zt(this,"numTransparent",0),Zt(this,"knockBackVx",0),Zt(this,"knockBackVy",0),Zt(this,"numPriestShield",0),Zt(this,"priestShieldHits",0),Zt(this,"numBlow",0),Zt(this,"blowVx",0),Zt(this,"blowVy",0),Zt(this,"blowVh",0),Zt(this,"blowGravity",.3),Zt(this,"blowHeight",0),Zt(this,"numBinding",0),Zt(this,"numShock",0),Zt(this,"knockImmune",!1),Zt(this,"blowImmune",!1),Zt(this,"stunImmune",!1),Zt(this,"freezeImmune",!1),Zt(this,"poisonImmune",!1),Zt(this,"stunResistPct",0),Zt(this,"knockResistPct",0),Zt(this,"blowResistPct",0),Zt(this,"freezeResistPct",0),Zt(this,"currentSize",1.05),Zt(this,"_baseSize",0),Zt(this,"_baseHitHeight",0),Zt(this,"_baseHitWidth",0),Zt(this,"_baseRadius",0),Zt(this,"sizeScale",1),Zt(this,"direction",1),Zt(this,"hideHealthBarTimer",0),Zt(this,"maxRevive",0),Zt(this,"numRevive",0),Zt(this,"reviveCount",0),Zt(this,"reviveInterval",40),Zt(this,"immediateReviveDelay",60),Zt(this,"removed",!1),Zt(this,"stayAfterDeath",!1),Zt(this,"reviveHealthPercent",.6),Zt(this,"numShot",1),Zt(this,"numBounce",0),Zt(this,"multiShotDelay",0),Zt(this,"_poolReturned",!1),Zt(this,"numHitTint",0),Zt(this,"targetAlpha",1),Zt(this,"t",0),Zt(this,"evolEffect",null),Zt(this,"evolStar",null),Zt(this,"numLove",0),Zt(this,"numLoveShield",0),Zt(this,"__airHeight",0),Zt(this,"_airHeight",0),Zt(this,"numAirToGround",-30),this.addChild(this.container),this.idleLookInterval=60,this.initializeData(),this.initialize(),this.generateSprite(),this.startFrame=this.idleFrames.start,this.endFrame=this.idleFrames.end,this.currentFrame=this.startFrame,this.loop=!0,this.eventMode="none"}
+ get shadowSprite(){
+ return this.shadow??null}
- if(this.visible=!0,this.renderable=!0,this.alpha=1,this.sp&&(this.sp.visible=!0),this.isAlive=!0,this.kindNum=i.kindNum,this.grade=i.grade,this.sex=i.sex,this.name=i.name,this.base=i.base,this.lastPercentHp=s,this.lastPercentAtkDmg=e,this.lastPercentDef=n,this.baseMaxHp=i.maxHp*s,this.baseAtkDmg=i.atkDmg*e,this.baseDef=i.def*n,this.baseMoveSpd=i.moveSpd,this.baseAtkDuration=1e4/i.atkSpd,this.baseAtkRange=i.atkRange,this.level=i.level,this.enhance=i.enhance,this.isEnemySide=i.isEnemy,this.numBlock=i.numBlock,this.orgAtkDuration=this.atkDuration=1e4/i.atkSpd,this.orgAtkSpd=i.atkSpd,this.orgAtkRange=this.atkRange=i.atkRange,this.orgMoveSpd=this.moveSpd=i.moveSpd,this.orgDef=this.def=i.def*n,this.orgPhyDef=this.phyDef=i.phyDef*n,this.orgMagDef=this.magDef=i.magDef*n,this.orgMaxHp=this.maxHp=i.maxHp*s,this.hp=this.maxHp,this.orgAtkDmg=this.atkDmg=i.atkDmg*e,this.orgRangeEvadeChange=this.rangeEvadeChange=0,this.orgCritDmg=this.critDmg=this.baseCritDmg,this.orgCritChance=this.critChance=this.baseCritChance,this.atkRange2=this.atkRange*this.atkRange,this.detectRange2=this.detectRange*this.detectRange,this.unitType=i.unitType,this.tribe=i.tribe,this.isAir=i.isAir,this.maxRevive=i.numRevive,this.reviveInterval=i.reviveTime,this.dmgType=i.dmgType,this.recovery=i.recovery,this.evolStage=i.evolStage,this.weight=i.weight,this.cloaking=i.cloaking,this.canDetect=i.detect,this.knockImmune=i.knockImmune,this.blowImmune=i.blowImmune,this.stunImmune=i.stunImmune,this.freezeImmune=i.freezeImmune,this.poisonImmune=!1,this.stunResistPct=0,this.knockResistPct=0,this.blowResistPct=0,this.freezeResistPct=0,this.evolStage>=1?(this.showEvolEffect(),this.setSize(this.evolSize)):this.setSize(this.normalSize),this.mana=0,this.miniAscentDamageReduction=0,this.miniAscentManaRegen=0,this.raidIncomingDamageMult=1,this.raidPassiveIncomingMult=1,this.currentFrame=0,this.frame=0,this.clearAttackEffects(),this.incFrame=1,this.initDelay=0,this.rallyMoveTimer=0,this.farFromCastleFrames=0,this.attackCoolDown=0,this.recoveryCoolDown=0,this.numStun=0,this.numFreeze=0,this.numPoison=0,this.numCurse=0,this.numBinding=0,this.numShock=0,this.idleLookInterval=40+this.random.nextInt(60),this.idleLookTimer=0,this.retargetCheckTimer=this.random.nextInt(t.RETARGET_CHECK_INTERVAL),this.aggressiveRetarget=!1,this.battleController&&void 0!==this.battleController.unitScale){
+ if(this.visible=!0,this.renderable=!0,this.alpha=1,this.sp&&(this.sp.visible=!0),this.isAlive=!0,this.kindNum=i.kindNum,this.grade=i.grade,this.sex=i.sex,this.name=i.name,this.base=i.base,this.lastPercentHp=s,this.lastPercentAtkDmg=e,this.lastPercentDef=n,this.baseMaxHp=i.maxHp*s,this.baseAtkDmg=i.atkDmg*e,this.baseDef=i.def*n,this.baseMoveSpd=i.moveSpd,this.baseAtkDuration=1e4/i.atkSpd,this.baseAtkRange=i.atkRange,this.level=i.level,this.enhance=i.enhance,this.isEnemySide=i.isEnemy,this.numBlock=i.numBlock,this.orgAtkDuration=this.atkDuration=1e4/i.atkSpd,this.orgAtkSpd=i.atkSpd,this.orgAtkRange=this.atkRange=i.atkRange,this.orgMoveSpd=this.moveSpd=i.moveSpd,this.orgDef=this.def=i.def*n,this.orgPhyDef=this.phyDef=i.phyDef*n,this.orgMagDef=this.magDef=i.magDef*n,this.orgMaxHp=this.maxHp=i.maxHp*s,this.hp=this.maxHp,this.orgAtkDmg=this.atkDmg=i.atkDmg*e,this.orgRangeEvadeChange=this.rangeEvadeChange=0,this.orgCritDmg=this.critDmg=this.baseCritDmg,this.orgCritChance=this.critChance=this.baseCritChance,this.atkRange2=this.atkRange*this.atkRange,this.detectRange2=this.detectRange*this.detectRange,this.unitType=i.unitType,this.tribe=i.tribe,this.isAir=i.isAir,this.maxRevive=i.numRevive,this.reviveInterval=i.reviveTime,this.dmgType=i.dmgType,this.recovery=i.recovery,this.evolStage=i.evolStage,this.weight=i.weight,this.cloaking=i.cloaking,this.canDetect=i.detect,this.knockImmune=i.knockImmune,this.blowImmune=i.blowImmune,this.stunImmune=i.stunImmune,this.freezeImmune=i.freezeImmune,this.poisonImmune=!1,this.stunResistPct=0,this.knockResistPct=0,this.blowResistPct=0,this.freezeResistPct=0,this.evolStage>=1?(this.showEvolEffect(),this.setSize(this.evolSize)):this.setSize(this.normalSize),this.mana=0,this.miniAscentDamageReduction=0,this.miniAscentManaRegen=0,this.raidIncomingDamageMult=1,this.raidPassiveIncomingMult=1,this.currentFrame=0,this.frame=0,this.clearAttackEffects(),this.incFrame=1,this.initDelay=0,this.rallyMoveTimer=0,this.farFromCastleFrames=0,this.attackCoolDown=0,this.recoveryCoolDown=0,this.numStun=0,this.numFreeze=0,this.numPoison=0,this.numCurse=0,this.numBinding=0,this.numShock=0,this.resetMotionPose(),this.idleLookInterval=40+this.random.nextInt(60),this.idleLookTimer=0,this.retargetCheckTimer=this.random.nextInt(t.RETARGET_CHECK_INTERVAL),this.aggressiveRetarget=!1,this.battleController&&void 0!==this.battleController.unitScale){
- if(this.numStun--,this.numFreeze--,this.numBurn--,this.numPoison--,this.numBleed--,this.numCurse--,this.numSilence--,this.numKnockBack--,this.numPowerShield--,this.numMagicalShield--,this.numPhysicalShield--,this.numBinding--,this.numShock--,this.numPriestShield--,this.numTransparent--,this.numLoveShield--,this.numLove--,this.numAirToGround--,this.numTransparent>=0&&(0==this.numTransparent?(this.alpha=1,this.targetAlpha=1):Math.abs(this.targetAlpha-this.alpha)<.04?this.alpha=this.targetAlpha:this.alpha>this.targetAlpha?this.alpha-=.03:this.alpha<this.targetAlpha&&(this.alpha+=.03)),!this.isAlive&&this.numKnockBack<=0&&this.numBlow<=0)return!1;
+ if(this.numStun--,this.numFreeze--,this.numBurn--,this.numPoison--,this.numBleed--,this.numCurse--,this.numSilence--,this.numKnockBack--,this.numPowerShield--,this.numMagicalShield--,this.numPhysicalShield--,this.numBinding--,this.numShock--,this.numPriestShield--,this.numTransparent--,this.numLoveShield--,this.numLove--,this.numAirToGround--,this.numTransparent>=0&&(0==this.numTransparent?(this.alpha=1,this.targetAlpha=1):Math.abs(this.targetAlpha-this.alpha)<.04?this.alpha=this.targetAlpha:this.alpha>this.targetAlpha?this.alpha-=.03:this.alpha<this.targetAlpha&&(this.alpha+=.03)),this.updateHitTint(),!this.isAlive&&this.numKnockBack<=0&&this.numBlow<=0)return!1;
+ resetMotionPose(){
+ this.numHitted=0,this.numKnockBack=0,this.knockBackVx=0,this.knockBackVy=0,this.numBlow=0,this.blowVx=0,this.blowVy=0,this.blowVh=0,this.blowHeight=0,this.sp&&(this.sp.rotation=0),this.numHitTint>0&&this.sp&&(this.sp.tint=16777215),this.numHitTint=0}
- if(this.visible=!0,this.renderable=!0,this.isAlive=!0,this.gameStarted=!1,this.alpha=1,this.sp&&(this.sp.visible=!0),this.removed=!1,this._poolReturned=!1,this.hasDroppedGold=!1,this.disablePatrol(),this.rallyMoveTimer=0,this.farFromCastleFrames=0,this.needsReposition=!1,this.healthBar.visible=!1,this.hideHealthBarTimer=0,this.bossType=0,this.totalDamageDealt=0,this.currentFrame=0,this.frame=0,this.incFrame=1,this.initDelay=0,this.rallyMoveTimer=0,this.attackCoolDown=0,this.recoveryCoolDown=0,this.numStun=0,this.numFreeze=0,this.numPoison=0,this.numCurse=0,this.numBinding=0,this.numShock=0,this.dotDamager.reset(),this.dotHeal.reset(),this.clearActiveBuffs(),this.effectList&&this.effectList.length>0){
+ if(this.visible=!0,this.renderable=!0,this.isAlive=!0,this.gameStarted=!1,this.alpha=1,this.sp&&(this.sp.visible=!0),this.removed=!1,this._poolReturned=!1,this.hasDroppedGold=!1,this.disablePatrol(),this.rallyMoveTimer=0,this.farFromCastleFrames=0,this.needsReposition=!1,this.healthBar.visible=!1,this.hideHealthBarTimer=0,this.bossType=0,this.totalDamageDealt=0,this.currentFrame=0,this.frame=0,this.incFrame=1,this.initDelay=0,this.rallyMoveTimer=0,this.attackCoolDown=0,this.recoveryCoolDown=0,this.numStun=0,this.numFreeze=0,this.numPoison=0,this.numCurse=0,this.numBinding=0,this.numShock=0,this.resetMotionPose(),this.dotDamager.reset(),this.dotHeal.reset(),this.clearActiveBuffs(),this.effectList&&this.effectList.length>0){
+ var t;
- ""!=this.attackSound&&Math.random()<.1&&MG.getInstance().playSFX(this.attackSound)}
+ ""!=this.attackSound&&Math.random()<((null==(t=this.battleController)?void 0:t.attackSfxChance)??.1)&&qG.getInstance().playSFX(this.attackSound)}
- if(i.health-=u,this.lifeSteal>0&&u>0&&this.isAlive&&(this.health+=u*this.lifeSteal,this.health>this.maxHp&&(this.health=this.maxHp)),f&&!i.isAlive&&this.onKillEnemy(i),i.onHitted(),t.raidDamageHook&&t.raidDamageHook(this,i,u),this.bossType>0&&i.isAlive&&!i.isImmovable&&!i.knockImmune){
+ if(i.health-=u,this.lifeSteal>0&&u>0&&this.isAlive&&(this.health+=u*this.lifeSteal,this.health>this.maxHp&&(this.health=this.maxHp)),f&&!i.isAlive&&this.onKillEnemy(i),i.onHitted(),i.startHitTint(),t.raidDamageHook&&t.raidDamageHook(this,i,u),this.bossType>0&&i.isAlive&&!i.isImmovable&&!i.knockImmune){
- 0!=this.isAlive&&(this.isAlive=!1,this.target&&(this.target.removeBlockedEnemy(this),this.target=null),this.clearBlockedEnemies(),this.xDeath=this.x,this.yDeath=this.y,this.numRevive>=this.maxRevive&&this.showTombstone&&(this.sp.visible=!1,this.imgTombStone&&(this.imgTombStone.visible=!0),this.txtReviveTimer&&(this.txtReviveTimer.visible=!0),this.reviveCount=this.reviveInterval,this.isAir&&(super.y=this.ground)),this.shadow&&(this.shadow.visible=!1),this.gotoDieState(),Math.random()<.1&&this.playSFX(this.dieSound),this.removeAllEffect(),this.onDie())}
+ var t;
+ 0!=this.isAlive&&(this.isAlive=!1,this.target&&(this.target.removeBlockedEnemy(this),this.target=null),this.clearBlockedEnemies(),this.xDeath=this.x,this.yDeath=this.y,this.numRevive>=this.maxRevive&&this.showTombstone&&(this.sp.visible=!1,this.imgTombStone&&(this.imgTombStone.visible=!0),this.txtReviveTimer&&(this.txtReviveTimer.visible=!0),this.reviveCount=this.reviveInterval,this.isAir&&(super.y=this.ground)),this.shadow&&(this.shadow.visible=!1),this.gotoDieState(),Math.random()<((null==(t=this.battleController)?void 0:t.dieSfxChance)??.1)&&this.playSFX(this.dieSound),this.removeAllEffect(),this.onDie())}
+ startHitTint(){
+ var i;
+ this.sp&&(null==(i=this.battleController)?void 0:i.hitFlash)&&(this.numHitTint=t.HIT_TINT_FRAMES,this.sp.tint=t.HIT_TINT_COLOR)}
+ updateHitTint(){
+ this.numHitTint<=0||--this.numHitTint>0||this.sp&&(this.sp.tint=this.numChillTint>0?t.CHILL_TINT:16777215)}
WingKnight1 2 hunks, 17 statements
+ async generateSprite(){
+ await super.generateSprite(),this.textures=t.fillFrameGaps(this.sheetName,this.textureName,this.textures)}
+ static fillFrameGaps(i,s,e){
+ if(t.numberedTextures)return t.numberedTextures;
+ const n=kS.getSheet(i).textures,h=[];
+ for(const t of Object.keys(n).filter(t=>t.includes(s)).sort()){
+ const i=/(\d{
+ 4}
+ )(?:\.png)?$/.exec(t);
+ if(!i)return e;
+ const s=Number(i[1])-1;
+ for(;
+ h.length<s;
+ )h.push(h.length>0?h[h.length-1]:n[t]);
+ h.push(n[t])}
+ return t.numberedTextures=h,h}
- qt(Z5,"WingKnight1"),Xt(Z5,"ATK_DMG",[.7,.8,1]),Xt(Z5,"KILL_THRESHOLD",6),Xt(Z5,"FLASH_BUFF_DUR",480),Xt(Z5,"FLASH_DETECT_RANGE",1200),Xt(Z5,"FLASH_ATKDMG",.5),Xt(Z5,"FLASH_ATKDMG_ALT",.3),Xt(Z5,"FLASH_MOVSPD",1.5),Xt(Z5,"FLASH_ATKSPD",.5),Xt(Z5,"SURVIVE_HP_THRESHOLD",.2),Xt(Z5,"SURVIVE_SHIELD_DUR",180),Xt(Z5,"SURVIVE_BERSERK_DUR",600),Xt(Z5,"SURVIVE_SKILL_COOLDOWN",3600),Xt(Z5,"SURVIVE_ATKSPD",1),Xt(Z5,"SURVIVE_ATKDMG",1),Xt(Z5,"SURVIVE_ATKDMG_ALT",.4),Xt(Z5,"COMBO_KB_VX",3),Xt(Z5,"COMBO_KB_VX_E",4),Xt(Z5,"COMBO_KB_VY",-2),Xt(Z5,"COMBO_KB_DUR",30),Xt(Z5,"COMBO_KB_DUR_E",40),Xt(Z5,"COMBO_SPLASH_RANGE",60),Xt(Z5,"DASH_STUN_DUR",30),Xt(Z5,"DASH_STUN_DUR_E",45),Xt(Z5,"DASH_STUN_RANGE",60),Xt(Z5,"SKILL_TARGET_RANGE",500),Xt(Z5,"SKILL_SLAM_RANGE",110),Xt(Z5,"SKILL_SLAM_RANGE_E",150),Xt(Z5,"SKILL_SLAM_DMG",2.5),Xt(Z5,"SKILL_SLAM_DMG_E",3);
+ Qt(Q3,"WingKnight1"),Zt(Q3,"ATK_DMG",[.7,.8,1]),Zt(Q3,"KILL_THRESHOLD",6),Zt(Q3,"FLASH_BUFF_DUR",480),Zt(Q3,"FLASH_DETECT_RANGE",1200),Zt(Q3,"FLASH_ATKDMG",.5),Zt(Q3,"FLASH_ATKDMG_ALT",.3),Zt(Q3,"FLASH_MOVSPD",1.5),Zt(Q3,"FLASH_ATKSPD",.5),Zt(Q3,"SURVIVE_HP_THRESHOLD",.2),Zt(Q3,"SURVIVE_SHIELD_DUR",180),Zt(Q3,"SURVIVE_BERSERK_DUR",600),Zt(Q3,"SURVIVE_SKILL_COOLDOWN",3600),Zt(Q3,"SURVIVE_ATKSPD",1),Zt(Q3,"SURVIVE_ATKDMG",1),Zt(Q3,"SURVIVE_ATKDMG_ALT",.4),Zt(Q3,"COMBO_KB_VX",3),Zt(Q3,"COMBO_KB_VX_E",4),Zt(Q3,"COMBO_KB_VY",-2),Zt(Q3,"COMBO_KB_DUR",30),Zt(Q3,"COMBO_KB_DUR_E",40),Zt(Q3,"COMBO_SPLASH_RANGE",60),Zt(Q3,"DASH_STUN_DUR",30),Zt(Q3,"DASH_STUN_DUR_E",45),Zt(Q3,"DASH_STUN_RANGE",60),Zt(Q3,"SKILL_TARGET_RANGE",500),Zt(Q3,"SKILL_SLAM_RANGE",110),Zt(Q3,"SKILL_SLAM_RANGE_E",150),Zt(Q3,"SKILL_SLAM_DMG",2.5),Zt(Q3,"SKILL_SLAM_DMG_E",3),Zt(Q3,"numberedTextures",null);
PVPBattleSubView 6 hunks, 17 statements
- this.registerMissionGuild(),t.sort((t,i)=>(Number(t.rank)||999)-(Number(i.rank)||999)),this.opponentList.dataProvider=t;
+ this.registerMissionGuild(),t.sort((t,i)=>(Number(t.rank)||999)-(Number(i.rank)||999)),this.attachPreviews(t),this.opponentList.dataProvider=t;
+ attachPreviews(t){
+ var i,s;
+ const e=Number((null==(i=this.userPvp)?void 0:i.point)??0),n=Number((null==(s=this.userPvp)?void 0:s.attackGame)??0);
+ for(const h of t){
+ const t=n0t(e,Number(h.point)||0,n);
+ h.preview=t}
+ }
- if(this.battleId<=0)return;
- if(1==this.requestPending)return;
+ var i,s,e,n;
+ if(this.battleId<=0)return null;
+ if(1==this.requestPending)return null;
- const i=await TL.getInstance().pvp.endBattle(this.battleId,t,!0);
- if(!1===i.success)return this.setRequestPending(!1),void YG.getInstance().showError(i);
+ const h=Number((null==(i=this.userPvp)?void 0:i.point)??0),r=Number((null==(s=this.userPvp)?void 0:s.rank)??0),o=await ZL.getInstance().pvp.endBattle(this.battleId,t,!0);
+ if(!1===o.success)return this.setRequestPending(!1),bB.getInstance().showError(o),null;
- this.userPvp&&(this.userPvp.point=e),this.battleId=0,this.updateInfoLabels(),this.setRequestPending(!1),this.loadInfo(),t&&mzt.getInstance().getStatus()}
+ return this.userPvp&&(this.userPvp.point=c),this.battleId=0,this.updateInfoLabels(),this.setRequestPending(!1),t&&mYt.getInstance().getStatus(),await this.loadInfo(),{
+ oldPoint:h,newPoint:Number(c),oldRank:r,newRank:Number((null==(e=this.userPvp)?void 0:e.rank)??r),winStreak:Number((null==(n=this.userPvp)?void 0:n.winStreak)??0)}
+ }
- let s=nB.getText("","##보석을 소모하여 무한 랭킹전 티켓을 @@장 구매하시겠습니까?");
+ let s=RB.getText("GAME_1890","##보석을 소모하여 무한 랭킹전 티켓을 @@장 구매하시겠습니까?");
URLManager 4 hunks, 16 statements
- /user/updateLanguage`,INCREASE_GEM:`${
+ /user/updateLanguage`,UPDATE_HIDE_RANKING_TEAM:`${
+ t.baseURL}
+ /user/updateHideRankingTeam`,INCREASE_GEM:`${
- /user/useInventory`,GET_EVENTS:`${
- t.baseURL}
- /user/getEvents`,SELL_TRANS_TICKET:`${
+ /user/useInventory`,SELL_TRANS_TICKET:`${
- /user/updateUserData`}
+ /user/updateUserData`,GET_EVENTS:`${
+ t.baseURL}
+ /user/getEvents`,ATTEND_EVENT:`${
+ t.baseURL}
+ /user/attendEvent`,GET_EVENT_SCHEDULE:`${
+ t.baseURL}
+ /user/getEventSchedule`}
- /hero/buyHeroAllByMedal`,ADD_TO_TEAM:`${
+ /hero/buyHeroAllByMedal`,BUY_MASSIVE_HEROES:`${
+ t.baseURL}
+ /hero/buyMassiveHeroes`,ADD_TO_TEAM:`${
MissionGuideController 4 hunks, 15 statements
- Xt(this,"active",!1),Xt(this,"checking",!1),Xt(this,"frameSkip",0),Xt(this,"currentSteps",[]),Xt(this,"cachedCondition",null),Xt(this,"pointingDelayTimer",null),Xt(this,"pointingDelayed",!1),Xt(this,"listItemsGetter",null),Xt(this,"bottomMenuGetter",null),Xt(this,"popupButtonGetter",null),Xt(this,"subMenuButtonGetter",null),Xt(this,"currentSubViewName",""),Xt(this,"reviveButtonGetter",null),Xt(this,"rightMenuIndicatorButtonGetter",null),Xt(this,"dailyQuestButtonGetter",null),Xt(this,"petButtonGetter",null),Xt(this,"mineButtonGetter",null),Xt(this,"guildButtonGetter",null),Xt(this,"pendingParent",null),Xt(this,"pendingBtn",null)}
+ Zt(this,"active",!1),Zt(this,"checking",!1),Zt(this,"frameSkip",0),Zt(this,"currentSteps",[]),Zt(this,"cachedCondition",null),Zt(this,"pointingDelayTimer",null),Zt(this,"pointingDelayed",!1),Zt(this,"listItemsGetter",null),Zt(this,"bottomMenuGetter",null),Zt(this,"popupButtonGetter",null),Zt(this,"subMenuButtonGetter",null),Zt(this,"currentSubViewName",""),Zt(this,"reviveButtonGetter",null),Zt(this,"rightMenuIndicatorButtonGetter",null),Zt(this,"dailyQuestButtonGetter",null),Zt(this,"petButtonGetter",null),Zt(this,"mineButtonGetter",null),Zt(this,"hubMineButtonGetter",null),Zt(this,"guildButtonGetter",null),Zt(this,"pendingParent",null),Zt(this,"pendingBtn",null)}
+ registerHubMineButtonGetter(t){
+ this.hubMineButtonGetter=t,this.updatePointing()}
+ unregisterHubMineButtonGetter(){
+ this.hubMineButtonGetter=null}
+ if(2==t.mineStep)return i.hideFromTarget(),void this.cancelPointingDelay();
+ if(0==t.mineStep){
+ }
+ else if(1==t.mineStep){
+ if(!this.hubMineButtonGetter)return;
+ const t=s.param;
+ if(t&&"-1"!==t){
+ const i=this.hubMineButtonGetter(t);
+ i&&this.showWithDelay(i.parent,i.btn)}
+ }
RankingProfile 1 hunks, 15 statements
- const Dhi=class extends He{
- constructor(){
- super(),Xt(this,"icon"),Xt(this,"lblRanking"),this.icon=new je(eS.getTexture("UI_Ekkorr","Icon_Rank_05")),this.addChild(this.icon),this.lblRanking=new SD("1",SD.WHITE),this.lblRanking.x=.5*(this.icon.width-this.lblRanking.width),this.lblRanking.y=30,this.addChild(this.lblRanking)}
- setRanking(t){
- switch(t){
- case 1:case 2:case 3:case 4:case 5:this.icon.texture=eS.getTexture("UI_Ekkorr",`Icon_Rank_0${
- t}
- `),this.icon.visible=!0;
- break;
- default:this.icon.visible=!1}
- t>0&&t<6?(this.icon.visible=!0,this.lblRanking.y=30):(this.icon.visible=!1,this.lblRanking.y=25),this.lblRanking.text=t<=0?"-":t.toString(),this.lblRanking.x=.5*(this.icon.width-this.lblRanking.width)}
- }
- ;
- qt(Dhi,"RankingProfile");
- let Ghi=Dhi;
StringUtils 1 hunks, 14 statements
+ static displayDate2(t,i=!1,s="-"){
+ return i?`${
+ this.digit(t.getUTCMonth()+1)}
+ ${
+ s}
+ ${
+ this.digit(t.getUTCDate())}
+ `:`${
+ this.digit(t.getMonth()+1)}
+ ${
+ s}
+ ${
+ this.digit(t.getDate())}
+ `}
SpriteQuitPopup 14 hunks, 14 statements
- x:180,y:370}
+ x:195,y:370}
- x:180,y:420}
+ x:195,y:420}
- x:180,y:470}
+ x:195,y:470}
- x:180,y:520}
+ x:195,y:520}
- x:95,y:370}
+ x:120,y:370}
- x:95,y:420}
+ x:120,y:420}
- x:95,y:470}
+ x:120,y:470}
- x:95,y:520}
+ x:120,y:520}
- x:10,y:370}
+ x:45,y:370}
- x:10,y:420}
+ x:45,y:420}
- x:10,y:470}
+ x:45,y:470}
- x:10,y:520}
+ x:45,y:520}
- const t=[380,445,510,575,640],i=[370,420,470,520],s=[];
+ const t=[385,435,485,535,585],i=[370,420,470,520],s=[];
- )());
+ )()),Zt(x3t,"FIELD",640),Zt(x3t,"EDGE",24),Zt(x3t,"BOTTOM",624);
SUN 1 hunks, 13 statements
- qt(N6t,"copyToClipboard"),qt(L6t,"formatDecimal");
+ function q4t(t){
+ const i=new Map;
+ i.set("SUN",0),i.set("MON",1),i.set("TUE",2),i.set("WED",3),i.set("THU",4),i.set("FRI",5),i.set("SAT",6);
+ const s=i.get(t.toUpperCase());
+ return void 0!==s?s:-1}
+ function X4t(t){
+ const i=new Map;
+ i.set(0,"SUN"),i.set(1,"MON"),i.set(2,"TUE"),i.set(3,"WED"),i.set(4,"THU"),i.set(5,"FRI"),i.set(6,"SAT");
+ const s=i.get(t);
+ return void 0!==s?s:""}
+ function J4t(t,i){
+ return t.getUTCFullYear()===i.getUTCFullYear()&&t.getUTCMonth()===i.getUTCMonth()&&t.getUTCDate()===i.getUTCDate()}
+ Qt(z4t,"copyToClipboard"),Qt(Y4t,"formatDecimal"),Qt(q4t,"getDayIndex"),Qt(X4t,"getDayShortName"),Qt(J4t,"isSameDay");
AttendanceReceiveButton 1 hunks, 13 statements
- const Ori=class extends NXt{
- constructor(t){
- super(t),this.setTexture({
- texture:eS.getTexture("UI_Ekkorr","Btn_Bg_01"),leftWidth:80,topHeight:35,rightWidth:90,bottomHeight:27}
- ),this.width=256,this.height=67,this.outlineText=!0}
- setClaimEnabled(t){
- this.activated=t,this.bg.tint=t?16777215:9079434}
- updateLayout(){
- super.updateLayout(),this.lbl.y=.5*(this._height-11-this.lbl.height)}
- }
- ;
- qt(Ori,"AttendanceReceiveButton");
- let kri=Ori;
LanguageChangePopup 1 hunks, 13 statements
- onLangPackLoad(t){
- mS.getInstance().dispatchCustomEvent("LanguageChange"),this.count=0,FM.getInstance().add(this.checkHide,this)}
+ async onLangPackLoad(t){
+ WS.getInstance().dispatchCustomEvent("LanguageChange");
+ const{
+ EventSchedulePopup:i}
+ =await ei(async()=>{
+ const{
+ EventSchedulePopup:t}
+ =await Promise.resolve().then(()=>Uii);
+ return{
+ EventSchedulePopup:t}
+ }
+ ,void 0);
+ i.getInstance().needToReload=!0,this.count=0,fE.getInstance().add(this.checkHide,this)}
UserService 2 hunks, 12 statements
+ async updateHideRankingTeam(t,i=!1){
+ return this.post(LP.USER.UPDATE_HIDE_RANKING_TEAM,{
+ hideRankingTeam:t}
+ ,i)}
+ async attendEvent(t=!1){
+ return this.post(LP.USER.ATTEND_EVENT,{
+ }
+ ,t)}
+ async getEventSchedule(t=!1){
+ return this.post(LP.USER.GET_EVENT_SCHEDULE,{
+ }
+ ,t)}
HeroResetEventPopup 3 hunks, 12 statements
- this.updateLayout(),super.show()}
+ this.udpateRefreshCost(),this.updateLayout(),super.show()}
+ udpateRefreshCost(){
+ const t=parseInt(SG.getInstance().getClientData("HERO_PAID_REFRESH_COST"));
+ this.refreshCost=isNaN(t)?100:t}
- this.lblMessage1.text=nB.getText("GAME_547","유료 갱신 비용 감소")+" : 100 ➜ "+100/t.divide,this.lblMessage2.text=nB.getText("GAME_548","무료 충전 시간 감소 (분)")+" : 60 ➜ "+60/t.divide;
+ this.lblMessage1.text=RB.getText("GAME_547","유료 갱신 비용 감소")+` : ${
+ this.refreshCost}
+  ➜ ${
+ this.refreshCost/t.divide}
+ `,this.lblMessage2.text=RB.getText("GAME_548","무료 충전 시간 감소 (분)")+" : 60 ➜ "+60/t.divide;
- this.lblMessage1.x=this.lblMessage2.x=this.lblMessage3.x=50,this.infoBg.y=70,this.lblMessage1.y=this.infoBg.y+20,this.lblMessage2.y=this.lblMessage1.y+this.lblMessage1.height+20,this.lblMessage3.y=this.lblMessage2.y+this.lblMessage2.height+20,this.infoBg.height=this.lblMessage3.y-this.infoBg.y+this.lblMessage3.height+17,this.height=this.infoBg.y+this.infoBg.height+25}
+ const i=this.infoBg.x+15,s=this.infoBg.width-40;
+ for(const e of[this.lblMessage1,this.lblMessage2,this.lblMessage3])e.setWrapWidth(s),e.x=i;
+ this.infoBg.y=70,this.lblMessage1.y=this.infoBg.y+20,this.lblMessage2.y=this.lblMessage1.y+this.lblMessage1.height+20,this.lblMessage3.y=this.lblMessage2.y+this.lblMessage2.height+20,this.infoBg.height=this.lblMessage3.y-this.infoBg.y+this.lblMessage3.height+17,this.height=this.infoBg.y+this.infoBg.height+25}
CardEventRankingItemRenderer 6 hunks, 12 statements
- super(),Xt(this,"bg"),Xt(this,"highlightBg"),Xt(this,"lblRank"),Xt(this,"lblName"),Xt(this,"lblScore"),Xt(this,"lblRound");
+ super(),Zt(this,"bg"),Zt(this,"highlightBg"),Zt(this,"rankBadge",new i0t(44)),Zt(this,"lblName"),Zt(this,"lblScore"),Zt(this,"lblRound");
- e.fill=OL.COLOR_WHITE,this.lblRank=new SD("1",e.fill,e),this.addChild(this.lblRank),this.lblName=new SD("",e.fill,e),this.addChild(this.lblName),this.lblScore=new SD("0",e.fill,e),this.addChild(this.lblScore),this.lblRound=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_FONT_OPTION_15),this.lblRound.textSize=13,this.addChild(this.lblRound)}
+ e.fill=sD.COLOR_WHITE,this.addChild(this.rankBadge),this.lblName=new QD("",e.fill,e),this.addChild(this.lblName),this.lblScore=new QD("0",e.fill,e),this.addChild(this.lblScore),this.lblRound=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_FONT_OPTION_15),this.lblRound.textSize=13,this.addChild(this.lblRound)}
- this.lblRank.text=`${
- i.rank}
- `,this.lblName.text=i.name,this.lblScore.text=_D.displayLargeNumberAsAlphabet(i.bestScore),this.lblRound.text=`${
+ this.rankBadge.setRank(t.rank),this.lblName.text=t.name,this.lblScore.text=KD.displayLargeNumberAsAlphabet(t.bestScore),this.lblRound.text=`${
- const s=t.RANK_COLORS[i.rank]??16777215;
- this.lblRank.textColor=s;
- const i=t.ITEM_WIDTH,s=.5*(t.ITEM_HEIGHT-this.lblRank.height);
- this.lblRank.x=20,this.lblRank.y=s,this.lblName.x=80,this.lblName.y=s,this.lblScore.x=i-20-this.lblScore.width,this.lblScore.y=5,this.lblRound.x=i-20-this.lblRound.width,this.lblRound.y=28}
+ const i=t.ITEM_WIDTH,s=t.ITEM_HEIGHT,e=.5*(s-this.lblName.height);
+ this.rankBadge.x=16,this.rankBadge.y=.5*(s-44),this.lblName.x=80,this.lblName.y=e,this.lblScore.x=i-20-this.lblScore.width,this.lblScore.y=5,this.lblRound.x=i-20-this.lblRound.width,this.lblRound.y=28}
- qt(Dwi,"CardEventRankingItemRenderer"),Xt(Dwi,"ITEM_WIDTH",520),Xt(Dwi,"ITEM_HEIGHT",50),Xt(Dwi,"RANK_COLORS",{
- 1:16766720,2:12632256,3:13467442}
- );
+ Qt(z_i,"CardEventRankingItemRenderer"),Zt(z_i,"ITEM_WIDTH",520),Zt(z_i,"ITEM_HEIGHT",50);
MiniAscentShell 7 hunks, 12 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:26,lineHeight:32}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:26,lineHeight:32}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:18}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:18}
- ),Xt(this,"headerTweens",[]),Xt(this,"activePage",null),Xt(this,"onExit",null),Xt(this,"onNavigate",null),this.width=616,this.bg.visible=this.txtTitle.visible=this.btnClose.visible=!1,this.paper.tint=u_i.paperTint,this.paper.eventMode="static",this.paper.mask=this.clip,this.pages.mask=this.contentClip,this.clip.eventMode=this.contentClip.eventMode=this.chrome.eventMode="none",this.addChild(this.paper,this.clip,this.pages,this.contentClip,this.chrome,this.header,this.coin,this.coinText,this.seal,this.sealText,this.energy,this.energyText,this.progress,this.remaining,this.navigation,this.closeControl,this.fxLayer),this.fxLayer.eventMode="none",this.coin.anchor.set(.5),this.energy.anchor.set(.5);
+ ),Zt(this,"headerTweens",[]),Zt(this,"activePage",null),Zt(this,"onExit",null),Zt(this,"onSeasonEnded",null),Zt(this,"onNavigate",null),this.width=616,this.bg.visible=this.txtTitle.visible=this.btnClose.visible=!1,this.paper.tint=ybi.paperTint,this.paper.eventMode="static",this.paper.mask=this.clip,this.pages.mask=this.contentClip,this.clip.eventMode=this.contentClip.eventMode=this.chrome.eventMode="none",this.addChild(this.paper,this.clip,this.pages,this.contentClip,this.chrome,this.header,this.coin,this.coinText,this.seal,this.sealText,this.energy,this.energyText,this.progress,this.remaining,this.navigation,this.closeControl,this.fxLayer),this.fxLayer.eventMode="none",this.coin.anchor.set(.5),this.energy.anchor.set(.5);
- var t,i,s,e,n,h;
+ var t,i,s,e,n,h,r,o;
- this.coinText.text=String(r.run&&!r.run.battleOnly&&(null==(t=this.activePage)?void 0:t.usesRunWallet)?r.run.wallet:this.shown.gold??(null==(i=r.season)?void 0:i.gold)??0),this.coinText.scale.set(1),this.coinText.scale.set(Math.min(1,48/Math.max(1,this.coinText.width))),this.coinText.position.set(62,78),this.sealText.text=String((null==(s=r.season)?void 0:s.coin)??0),this.sealText.scale.set(1),this.sealText.scale.set(Math.min(1,48/Math.max(1,this.sealText.width))),this.sealText.position.set(156,78),this.progress.text=r.run?o_i("DEPTH",r.run.floor):o_i("BEST",(null==(e=r.season)?void 0:e.bestFloor)??0),this.progress.scale.set(1),this.progress.scale.set(Math.min(1,130/Math.max(1,this.progress.width))),this.progress.position.set((this.width-this.progress.width)/2,78);
- const o=null==(n=r.season)?void 0:n.energy;
+ if(this.parent&&a.isSeasonOver())return void(null==(t=this.onSeasonEnded)||t.call(this));
+ this.coinText.text=String(a.run&&!a.run.battleOnly&&(null==(i=this.activePage)?void 0:i.usesRunWallet)?a.run.wallet:this.shown.gold??(null==(s=a.season)?void 0:s.gold)??0),this.coinText.scale.set(1),this.coinText.scale.set(Math.min(1,48/Math.max(1,this.coinText.width))),this.coinText.position.set(62,78),this.sealText.text=String((null==(e=a.season)?void 0:e.coin)??0),this.sealText.scale.set(1),this.sealText.scale.set(Math.min(1,48/Math.max(1,this.sealText.width))),this.sealText.position.set(156,78),this.progress.visible=!a.shopOnly,this.progress.text=a.run?vbi("DEPTH",a.run.floor):vbi("BEST",(null==(n=a.season)?void 0:n.bestFloor)??0),this.progress.scale.set(1),this.progress.scale.set(Math.min(1,130/Math.max(1,this.progress.width))),this.progress.position.set((this.width-this.progress.width)/2,78);
+ const c=a.shopOnly||null==(h=a.season)?void 0:h.energy;
- `,this.energyText.scale.set(1),this.energyText.scale.set(Math.min(1,72/Math.max(1,this.energyText.width))),this.energyText.position.set(this.width-28-this.energyText.width,78),this.energy.position.set(this.energyText.x-34+13,89)),this.remaining.text=k_i(null==(h=r.season)?void 0:h.endTime,cR.time>=0?cR.time:Date.now()),this.remaining.scale.set(1),this.remaining.scale.set(Math.min(1,120/Math.max(1,this.remaining.width))),this.remaining.position.set(28,29);
+ `,this.energyText.scale.set(1),this.energyText.scale.set(Math.min(1,72/Math.max(1,this.energyText.width))),this.energyText.position.set(this.width-28-this.energyText.width,78),this.energy.position.set(this.energyText.x-34+13,89)),this.remaining.text=$bi(a.shopOnly?null==(r=a.season)?void 0:r.shopEndTime:null==(o=a.season)?void 0:o.endTime,DR.time>=0?DR.time:Date.now()),this.remaining.scale.set(1),this.remaining.scale.set(Math.min(1,120/Math.max(1,this.remaining.width))),this.remaining.position.set(28,29);
- const n=(this.width-32-5*(this.tabButtons.length-1))/this.tabButtons.length;
- this.tabButtons.forEach(({
+ const n=Fbi.getInstance().shopOnly,h=this.tabButtons.filter(({
+ id:t,root:i}
+ )=>i.visible=!n||"shop"===t),r=(this.width-32-5*(h.length-1))/h.length;
+ h.forEach(({
MiniGameRankingItemRenderer 6 hunks, 12 statements
- super(),Xt(this,"bg"),Xt(this,"highlightBg"),Xt(this,"lblRank"),Xt(this,"lblName"),Xt(this,"lblScore");
+ super(),Zt(this,"bg"),Zt(this,"highlightBg"),Zt(this,"rankBadge",new i0t(44)),Zt(this,"lblName"),Zt(this,"lblScore");
- e.fill=OL.COLOR_WHITE,this.lblRank=new SD("1",e.fill,e),this.addChild(this.lblRank),this.lblName=new SD("",e.fill,e),this.addChild(this.lblName),this.lblScore=new SD("0",e.fill,e),this.addChild(this.lblScore)}
+ e.fill=sD.COLOR_WHITE,this.addChild(this.rankBadge),this.lblName=new QD("",e.fill,e),this.addChild(this.lblName),this.lblScore=new QD("0",e.fill,e),this.addChild(this.lblScore)}
- this.lblRank.text=`${
- i.rank}
- `,this.lblName.text=i.name,this.lblScore.text=`${
+ this.rankBadge.setRank(t.rank),this.lblName.text=t.name,this.lblScore.text=`${
- const s=t.RANK_COLORS[i.rank]??16777215;
- this.lblRank.textColor=s;
- const i=t.ITEM_WIDTH,s=.5*(t.ITEM_HEIGHT-this.lblRank.height);
- this.lblRank.x=20,this.lblRank.y=s,this.lblScore.x=i-20-this.lblScore.width,this.lblScore.y=s,this.lblName.x=80,this.lblName.y=s}
+ const i=t.ITEM_WIDTH,s=t.ITEM_HEIGHT,e=.5*(s-this.lblName.height);
+ this.rankBadge.x=16,this.rankBadge.y=.5*(s-44),this.lblScore.x=i-20-this.lblScore.width,this.lblScore.y=e,this.lblName.x=80,this.lblName.y=e}
- qt(Xbi,"MiniGameRankingItemRenderer"),Xt(Xbi,"ITEM_WIDTH",520),Xt(Xbi,"ITEM_HEIGHT",50),Xt(Xbi,"RANK_COLORS",{
- 1:16766720,2:12632256,3:13467442}
- );
+ Qt(oEi,"MiniGameRankingItemRenderer"),Zt(oEi,"ITEM_WIDTH",520),Zt(oEi,"ITEM_HEIGHT",50);
GameSpeedBuffPopup 5 hunks, 11 statements
- super(),Xt(this,"lblTotal",new SD("",16763904,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"lblProduct",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblTreasure",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblHero",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblGodBless",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblPet",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"heroIconContainer",new He),this.contentContainer.addChild(this.lblTotal,this.lblProduct,this.lblGodBless,this.lblTreasure,this.lblHero,this.heroIconContainer,this.lblPet),this.outSideClickHide=!0}
+ super(),Zt(this,"lblTotal",new QD("",16763904,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"lblFire",new QD("",16743002,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblProduct",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblTreasure",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblHero",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblGodBless",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblPet",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"heroIconContainer",new Ve),this.contentContainer.addChild(this.lblTotal,this.lblFire,this.lblProduct,this.lblGodBless,this.lblTreasure,this.lblHero,this.heroIconContainer,this.lblPet),this.outSideClickHide=!0}
- const n=.001*(XD.godBlessEndTime-t)>0?300:0,h=eP.getInstance().treasure.getGameplayBuff($x.GameSpeed),r=UR.getInstance().getTotal(GR.GameSpeed)+Fx.getBarracksGameSpeedContribution(),o=Math.round(100*eP.getInstance().pet.getGameplayBuff($x.GameSpeed))/100,a=e+n+h+r+o;
+ const n=.001*(EG.godBlessEndTime-t)>0&&!VD.godBlessOff?300:0,h=kP.getInstance().treasure.getGameplayBuff(gP.GameSpeed),r=dx.getInstance().getTotal(lx.GameSpeed)+fP.getBarracksGameSpeedContribution(),o=Math.round(100*kP.getInstance().pet.getGameplayBuff(gP.GameSpeed))/100,a=fU(EG.wave),c=e+n+h+r+o-a;
-  : +${
+  : ${
+ c>=0?"+":""}
+ ${
- %`,this.lblTotal.x=l,this.lblTotal.y=c,c+=this.lblTotal.height+15,this.lblProduct.text=`${
+ %`,this.lblTotal.x=u,this.lblTotal.y=l,l+=this.lblTotal.height+8,this.lblFire.visible=a>0,a>0&&(this.lblFire.text=`${
+ Uzt(G8t.fireAura)}
+  : -${
+ a}
+ %`,this.lblFire.x=u,this.lblFire.y=l,l+=this.lblFire.height+8),l+=7,this.lblProduct.text=`${
- const t=TR.getInstance(),i=[...d].sort((t,i)=>{
+ const t=ZR.getInstance(),i=[...f].sort((t,i)=>{
PVPBattleStatus 3 hunks, 10 statements
- super(),Xt(this,"_showed",!1),Xt(this,"_frameCounter",0),Xt(this,"_allySnap",new Map),Xt(this,"_enemySnap",new Map),Xt(this,"_lblLeague"),Xt(this,"_lblMyName"),Xt(this,"_lblEnemyName"),Xt(this,"_lblMyScore"),Xt(this,"_lblEnemyScore"),Xt(this,"_lblMyRecord"),Xt(this,"_lblEnemyRecord"),Xt(this,"_lblAlly"),Xt(this,"_lblEnemy"),Xt(this,"allyRows",[]),Xt(this,"enemyRows",[]),Xt(this,"_allyBarsG",new Ff),Xt(this,"_enemyBarsG",new Ff),Xt(this,"bg",new CD),Xt(this,"btnClose",new NG),this.bg.setIndex(6),this.addChild(this.bg),this.bg.width=640,this.bg.height=Xy.stageHeight-640-454,this.bg.y=Xy.safeHeight-640-this.bg.height,this._buildMatchHeader(),this._buildDamageHeaders(),this._buildAllRows(),this._buildDivider(),this.addChild(this._allyBarsG),this.addChild(this._enemyBarsG),this.btnClose.x=640-this.btnClose.width,this.btnClose.y=5-this.btnClose.height,this.btnClose.onClick=this.onClickGiveUp.bind(this),this.addChild(this.btnClose)}
+ super(),Zt(this,"_showed",!1),Zt(this,"_frameCounter",0),Zt(this,"_allySnap",new Map),Zt(this,"_enemySnap",new Map),Zt(this,"_lblLeague"),Zt(this,"_lblMyName"),Zt(this,"_lblEnemyName"),Zt(this,"_lblMyScore"),Zt(this,"_lblEnemyScore"),Zt(this,"_lblMyRecord"),Zt(this,"_lblEnemyRecord"),Zt(this,"_lblAlly"),Zt(this,"_lblEnemy"),Zt(this,"_lblMeter"),Zt(this,"allyRows",[]),Zt(this,"enemyRows",[]),Zt(this,"_allyBarsG",new ip),Zt(this,"_enemyBarsG",new ip),Zt(this,"bg",new tG),Zt(this,"btnClose",new oB),this.bg.setIndex(6),this.addChild(this.bg),this.bg.width=640,this.bg.height=ES.stageHeight-640-454,this.bg.y=ES.safeHeight-640-this.bg.height,this._buildMatchHeader(),this._buildDamageHeaders(),this._buildAllRows(),this._buildDivider(),this.addChild(this._allyBarsG),this.addChild(this._enemyBarsG),this.btnClose.x=640-this.btnClose.width,this.btnClose.y=5-this.btnClose.height,this.btnClose.onClick=this.onClickGiveUp.bind(this),this.addChild(this.btnClose)}
- ),this.addChild(t);
- const i=new jg({
- text:"⚔ PVP DAMAGE METER",style:x4t}
- );
- i.x=(M4t-i.width)/2,i.y=108+(26-i.height)/2,this.addChild(i);
+ ),this.addChild(t),this._lblMeter=new dw({
+ text:this._meterTitle(),style:i7t}
+ ),this._lblMeter.x=(j8t-this._lblMeter.width)/2,this._lblMeter.y=108+(26-this._lblMeter.height)/2,this.addChild(this._lblMeter);
+ `,this._lblMeter.text=this._meterTitle(),this._lblMeter.x=(j8t-this._lblMeter.width)/2}
+ _meterTitle(){
+ return`⚔ ${
+ RB.getText("GAME_1889","피해량 순위")}
Un 8 hunks, 9 statements
- =i,c=ost<<BigInt(8*o)-rst,l=s.create,u=(0,sst.Field)(i.n,i.nBitLength),d=i.uvRatio||((t,i)=>{
+ =i,c=oet<<BigInt(8*o)-ret,l=s.create,u=(0,set.Field)(i.n,i.nBitLength),d=i.uvRatio||((t,i)=>{
- return(0,sst.mod)(t,e)}
+ return(0,set.mod)(t,e)}
- const ist=oit,sst=ait,est=cit,nst=cit,hst=BigInt(0),rst=BigInt(1),ost=BigInt(2),ast=BigInt(8),cst={
+ const iet=ost,set=ast,eet=cst,net=cst,het=BigInt(0),ret=BigInt(1),oet=BigInt(2),aet=BigInt(8),cet={
- function pst(t,i){
+ function get(t,i){
- const o=(0,dst.concatBytes)(i,pst(i.length,1)),a=pst(0,h),c=pst(s,2),l=new Array(r),u=e((0,dst.concatBytes)(a,t,c,pst(0,1),o));
- l[0]=e((0,dst.concatBytes)(u,pst(1,1),o));
+ const o=(0,fet.concatBytes)(i,get(i.length,1)),a=get(0,h),c=get(s,2),l=new Array(r),u=e((0,fet.concatBytes)(a,t,c,get(0,1),o));
+ l[0]=e((0,fet.concatBytes)(u,get(1,1),o));
- const t=[gst(u,l[d-1]),pst(d+1,1),o];
+ const t=[wet(u,l[d-1]),get(d+1,1),o];
- ).update(t).update(pst(s,2)).update(i).update(pst(i.length,1)).digest()}
+ ).update(t).update(get(s,2)).update(i).update(get(i.length,1)).digest()}
- qt(pst,"jn"),qt(gst,"Un"),qt(mst,"Hn"),qt(wst,"Fn"),qt(vst,"zn"),qt(_st,"qn");
+ Qt(get,"jn"),Qt(wet,"Un"),Qt(met,"Hn"),Qt(vet,"Fn"),Qt(_et,"zn"),Qt(Met,"qn");
TowerSubMenu 2 hunks, 9 statements
- this.lblTicket.x=t-this.lblTicket.width,this.lblTimer.x=t-this.lblTimer.width}
+ this.lblTicket.x=t-this.lblTicket.width,this.lblTimer.x=t-this.lblTimer.width,GB.isValidEvent(BB.TOWER_EVENT)?this.showEventTag():this.hideEventTag()}
+ showEventTag(t=0,i=0){
+ this.eventTag||(this.eventTag=new Ye(kS.getTexture("UI_Ekkorr","UI_Event")),this.addChild(this.eventTag),this.btnEventGuide=new UU("UI_Ekkorr","UI_Alarm"),this.addChild(this.btnEventGuide),this.btnEventGuide.on("pointertap",()=>{
+ w3t.getInstance().showGuide()}
+ )),this.eventTag.visible=!0,this.updateEventTag(t,i)}
+ hideEventTag(){
+ this.eventTag&&(this.eventTag.visible=!1,this.btnEventGuide.visible=!1)}
+ updateEventTag(t,i){
+ this.eventTag&&(this.eventTag.x=this.btnGuide.x+this.btnGuide.width+20+t,this.eventTag.y=this.btnGuide.y+.5*(this.btnGuide.height-this.eventTag.height)-1+i,this.btnEventGuide.x=this.eventTag.x+this.eventTag.width+5,this.btnEventGuide.y=this.btnGuide.y)}
GameLayer 4 hunks, 8 statements
- super(),Xt(this,"titleBackground",null),Xt(this,"dayNight",new yU),Xt(this,"realmTransition",new TU),Xt(this,"colorFilter",new of),t._instance=this,window.gameFx={
+ super(),Zt(this,"titleBackground",null),Zt(this,"dayNight",new hF),Zt(this,"realmTransition",new _F),Zt(this,"highland",new bF),Zt(this,"colorFilter",new bf),t._instance=this,window.gameFx={
- ,this.addChild(DB.getInstance()),this.addChild($B.getInstance()),this.addChild(this.dayNight.overlayRoot),this.addChild(BB.getInstance()),this.addChild(VB.getInstance()),this.addChild(QB.getInstance()),this.addChild(this.dayNight.airRoot),this.addChild(FB.getInstance()),this.addChild(XB.getInstance()),this.addChild(bU.getInstance()),this.addChild(KB.getInstance()),this.addChild(this.realmTransition)}
+ ,this.addChild(mU.getInstance()),this.addChild(EU.getInstance()),this.addChild(this.dayNight.overlayRoot),this.addChild(this.highland.underRoot),this.addChild(pF.getInstance().underRoot),this.addChild(_U.getInstance()),this.addChild(SU.getInstance()),this.addChild(PU.getInstance()),this.addChild(this.dayNight.airRoot),this.addChild(this.highland.overRoot),this.addChild(pF.getInstance().overRoot),this.addChild(bU.getInstance()),this.addChild(RU.getInstance()),this.addChild(iF.getInstance()),this.addChild(CU.getInstance()),this.addChild(this.realmTransition)}
- setTimeOfDay(t,i=!1){
- const s=yU.phaseOf(t),e=PB(t);
+ setFixedPhase(t,i){
+ this.dayNight.apply(t,i,!0)}
+ setTimeOfDay(t,i=!1,s=cU(t)){
+ const e=hF.phaseOf(t);
- playRealmTransition(t){
- this.realmTransition.play(t)}
+ playRealmTransition(t,i,s=!1){
+ return this.realmTransition.play(t,i,s)}
HealthBar 1 hunks, 8 statements
- const S0="CriticalEffect",T0="MissEffect",C0=class t{
- static setDay(i){
- t.isNight=(i-1)%10>=5}
- }
- ;
- qt(C0,"TimeOfDayManager"),Xt(C0,"isNight",!0);
- let I0=C0;
- const O0=class extends He{
+ const M1="CriticalEffect",b1="MissEffect",y1=class extends Ve{
PVPRankItemRenderer 4 hunks, 8 statements
- super(),Xt(this,"bg"),Xt(this,"lblRank",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"lblName",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblRecord",new SD("",11184810,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblPoint",new SD("",OL.COLOR_BRIGHT_ORANGE,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"rankBadge",new i0t(46)),Zt(this,"lblName",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblRecord",new QD("",11184810,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblPoint",new QD("",sD.COLOR_BRIGHT_ORANGE,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new eE({
- ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg),this.lblRank.x=50,this.lblRank.y=.5*(this.bg.height-this.lblRank.height),this.addChild(this.lblRank),this.lblName.x=112,this.lblName.y=.5*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.lblRecord.x=400,this.lblRecord.y=.5*(this.bg.height-this.lblRecord.height),this.addChild(this.lblRecord),this.lblPoint.x=this.bg.width-80,this.lblPoint.y=.5*(this.bg.height-this.lblPoint.height),this.addChild(this.lblPoint)}
+ ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg),this.rankBadge.x=30,this.rankBadge.y=.5*(this.bg.height-46),this.addChild(this.rankBadge),this.lblName.x=112,this.lblName.y=.5*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.lblRecord.x=400,this.lblRecord.y=.5*(this.bg.height-this.lblRecord.height),this.addChild(this.lblRecord),this.lblPoint.x=this.bg.width-80,this.lblPoint.y=.5*(this.bg.height-this.lblPoint.height),this.addChild(this.lblPoint)}
- this.data=t,this.lblRank.text=t.rank?`${
- t.rank}
- `:"-",this.lblName.text=t.name,this.lblRecord.text=`${
+ this.data=t,this.rankBadge.setRank(Number(t.rank)||0),this.lblName.text=t.name,this.lblRecord.text=`${
- `,this.lblRecord.x=427.5-.5*this.lblRecord.width,this.lblPoint.x=this.bg.width-47.5-.5*this.lblPoint.width,t.name===XD.name?(this.lblName.textColor=OL.COLOR_YELLOW,this.lblRank.textColor=OL.COLOR_YELLOW):(this.lblName.textColor=16777215,this.lblRank.textColor=16777215)}
+ `,this.lblRecord.x=427.5-.5*this.lblRecord.width,this.lblPoint.x=this.bg.width-47.5-.5*this.lblPoint.width;
+ const i=t.name===EG.name;
+ this.lblName.textColor=i?sD.COLOR_YELLOW:16777215}
BattleItemRenderer 3 hunks, 8 statements
- super(),Xt(this,"bg"),Xt(this,"lblTitle",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"lblDesc",new SD("",11184810,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"icon"),Xt(this,"lastTitle",""),Xt(this,"lastDesc",""),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"lblTitle",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"lblDesc",new QD("",11184810,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"icon"),Zt(this,"lastTitle",""),Zt(this,"lastDesc",""),Zt(this,"eventTag"),this.bg=new eE({
- `)}
+ `),this.data&&4===this.data.type&&GB.isValidEvent(BB.TOWER_EVENT)?this.showEventTag():this.hideEventTag()}
+ showEventTag(t=0,i=0){
+ this.eventTag||(this.eventTag=new Ye(kS.getTexture("UI_Ekkorr","UI_Event")),this.addChild(this.eventTag)),this.eventTag.visible=!0,this.updateEventTag(t,i)}
+ hideEventTag(){
+ this.eventTag&&(this.eventTag.visible=!1)}
+ updateEventTag(t,i){
+ this.eventTag&&(this.eventTag.x=this.bg.x+this.bg.width-this.eventTag.width+t,this.eventTag.y=this.bg.y+i)}
GuildWarRankingItemRenderer 5 hunks, 8 statements
- super(),Xt(this,"bg"),Xt(this,"emblem"),Xt(this,"lblName"),Xt(this,"lblElo"),Xt(this,"lblRecord"),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"rankBadge",new i0t(t.BADGE_SIZE)),Zt(this,"emblem"),Zt(this,"lblName"),Zt(this,"lblElo"),Zt(this,"lblRecord"),this.bg=new eE({
- ),this.bg.width=t.ROW_W,this.bg.height=t.ROW_H,this.addChild(this.bg),this.emblem=new tii,this.emblem.scale.set(t.EMBLEM_SCALE),this.emblem.x=(t.EMBLEM_AREA_W-this.emblem.width)/2,this.emblem.y=(t.ROW_H-this.emblem.height)/2,this.addChild(this.emblem),this.lblName=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.textColor=OL.DEFAULT_COLOR,this.addChild(this.lblName),this.lblElo=new SD("",16750899,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblElo.textColor=16750899,this.addChild(this.lblElo),this.lblRecord=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblRecord.textColor=OL.DEFAULT_COLOR,this.addChild(this.lblRecord)}
+ ),this.bg.width=t.ROW_W,this.bg.height=t.ROW_H,this.addChild(this.bg);
+ const i=t.BADGE_SIZE;
+ this.rankBadge.x=6,this.rankBadge.y=(t.ROW_H-i)/2,this.addChild(this.rankBadge),this.emblem=new Vsi,this.emblem.scale.set(t.EMBLEM_SCALE),this.emblem.x=this.rankBadge.x+i+(t.EMBLEM_AREA_W-this.rankBadge.x-i-this.emblem.width)/2,this.emblem.y=(t.ROW_H-this.emblem.height)/2,this.addChild(this.emblem),this.lblName=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.textColor=sD.DEFAULT_COLOR,this.addChild(this.lblName),this.lblElo=new QD("",16750899,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblElo.textColor=16750899,this.addChild(this.lblElo),this.lblRecord=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblRecord.textColor=sD.DEFAULT_COLOR,this.addChild(this.lblRecord)}
- this.data=i,this.emblem.setData(i.guildEmblem||"101|0");
+ this.data=i,this.emblem.setData(i.guildEmblem||"101|0"),this.rankBadge.setRank(i.rank);
- i.rank}
- . ${
- qt(_ni,"GuildWarRankingItemRenderer"),Xt(_ni,"ROW_W",620),Xt(_ni,"ROW_H",80),Xt(_ni,"EMBLEM_AREA_W",130),Xt(_ni,"EMBLEM_SCALE",.7),Xt(_ni,"NAME_X",135),Xt(_ni,"ELO_X",435),Xt(_ni,"RECORD_X",535);
+ Qt(cri,"GuildWarRankingItemRenderer"),Zt(cri,"ROW_W",620),Zt(cri,"ROW_H",80),Zt(cri,"EMBLEM_AREA_W",130),Zt(cri,"EMBLEM_SCALE",.55),Zt(cri,"BADGE_SIZE",56),Zt(cri,"NAME_X",135),Zt(cri,"ELO_X",435),Zt(cri,"RECORD_X",535);
GameOverPopup 7 hunks, 8 statements
- super(),Xt(this,"lblMessage1",new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_FONT_OPTION_18)),Xt(this,"lblMessage2",new SD("",OL.COLOR_GRAY,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"lblMedalReward",new kU("UI_STAR_ICON","0",16750848,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"lblEventBonus",new SD("",4500223,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"rewardCardBg"),Xt(this,"lblTabCurrentArrow"),Xt(this,"lblTabCurrent",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_17)),Xt(this,"lblTabCenter",new SD("",8947848,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblTabReviveArrow"),Xt(this,"lblTabRevive",new SD("",8947848,OL.DEFAULT_OUTLINE_FONT_OPTION_17)),Xt(this,"lblStartWave",new SD("",13421772,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"lblLastRevive",new SD("",10066329,OL.DEFAULT_FONT_OPTION_16)),Xt(this,"btnMedalBuffGuide",new nU("UI_Ekkorr","UI_Alarm",.85)),Xt(this,"btnRebirth",new MF("","","환생",.8,135,70)),Xt(this,"btnRebirthBonus",new MF("UI_GEM","500","환생 (훈장 x 2)",.8,240,70)),Xt(this,"btnContinue",new MF("Icon_Heart2","1","이어하기",.8,140,70)),Xt(this,"reviveTeamBanner"),Xt(this,"reviveTreasureBanner"),Xt(this,"revivePetBanner"),Xt(this,"bannerSeparator"),Xt(this,"useReviveTeam",!1),Xt(this,"hasReviveTeam",!1),Xt(this,"reviveTeamKindNums",[]),Xt(this,"reviveTeamTrans",[]),Xt(this,"currentWave",1),Xt(this,"baseMedalCache",0),Xt(this,"normalMedalCache",0),Xt(this,"reviveTeamMedalCache",0),Xt(this,"eventMultiCache",1),Xt(this,"currentBuffMultiplier",1),Xt(this,"reviveBuffMultiplier",1),Xt(this,"onContinue",null),Xt(this,"onRebirth",null),Xt(this,"onRebirthBonus",null),Xt(this,"requestPending",!1),Xt(this,"isGameOverMode",!1),Xt(this,"pendingGameOver",null),Xt(this,"gameOverWave",0),mS.getInstance().addEventListener("BattleSwitch",this.onBattleSwitchEvent.bind(this)),this.title=nB.getText("GAME_6","환생하기"),this.lblMessage1.y=85,this.lblMessage2.align="center",this.btnRebirth.showIconLabel=!1,this.btnRebirth.showTextLabel=!0,this.btnRebirth.text=nB.getText("GAME_5","환생"),this.btnRebirth.color=MF.GREEN,this.btnRebirthBonus.showIconLabel=!0,this.btnRebirthBonus.showTextLabel=!0,this.btnRebirthBonus.iconText="500",this.btnRebirthBonus.text=`${
+ super(),Zt(this,"lblMessage1",new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_FONT_OPTION_18)),Zt(this,"lblMessage2",new QD("",sD.COLOR_GRAY,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblMedalReward",new SF("UI_STAR_ICON","0",16750848,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"lblEventBonus",new QD("",4500223,sD.DEFAULT_OUTLINE_FONT_OPTION_18)),Zt(this,"rewardCardBg"),Zt(this,"lblTabCurrentArrow"),Zt(this,"lblTabCurrent",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblTabCenter",new QD("",8947848,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblTabReviveArrow"),Zt(this,"lblTabRevive",new QD("",8947848,sD.DEFAULT_OUTLINE_FONT_OPTION_17)),Zt(this,"lblStartWave",new QD("",13421772,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"lblLastRevive",new QD("",10066329,sD.DEFAULT_FONT_OPTION_16)),Zt(this,"btnMedalBuffGuide",new UU("UI_Ekkorr","UI_Alarm",.85)),Zt(this,"btnRebirth",new m$("","","환생",.8,135,70)),Zt(this,"btnRebirthBonus",new m$("UI_GEM","500","환생 (훈장 x 2)",.8,240,70)),Zt(this,"btnContinue",new m$("Icon_Heart2","1","이어하기",.8,140,70)),Zt(this,"reviveTeamBanner"),Zt(this,"reviveTreasureBanner"),Zt(this,"revivePetBanner"),Zt(this,"bannerSeparator"),Zt(this,"useReviveTeam",!1),Zt(this,"hasReviveTeam",!1),Zt(this,"reviveTeamKindNums",[]),Zt(this,"reviveTeamTrans",[]),Zt(this,"currentWave",1),Zt(this,"baseMedalCache",0),Zt(this,"normalMedalCache",0),Zt(this,"reviveTeamMedalCache",0),Zt(this,"eventMultiCache",1),Zt(this,"currentBuffMultiplier",1),Zt(this,"reviveBuffMultiplier",1),Zt(this,"onContinue",null),Zt(this,"onRebirth",null),Zt(this,"onRebirthBonus",null),Zt(this,"requestPending",!1),Zt(this,"isGameOverMode",!1),Zt(this,"pendingGameOver",null),Zt(this,"gameOverWave",0),Zt(this,"gameOverShownAt",0),WS.getInstance().addEventListener("BattleSwitch",this.onBattleSwitchEvent.bind(this)),this.title=RB.getText("GAME_6","환생하기"),this.lblMessage1.y=85,this.lblMessage2.align="center",this.btnRebirth.showIconLabel=!1,this.btnRebirth.showTextLabel=!0,this.btnRebirth.text=RB.getText("GAME_5","환생"),this.btnRebirth.color=m$.GREEN,this.btnRebirthBonus.showIconLabel=!0,this.btnRebirthBonus.showTextLabel=!0,this.btnRebirthBonus.iconText="500",this.btnRebirthBonus.text=`${
+ get isInputGuarded(){
+ return this.isGameOverMode&&!nXt.active&&performance.now()-this.gameOverShownAt<t.GAME_OVER_INPUT_GUARD_MS}
- return this.updateLayout(),IB.getInstance().stop(),ND.getInstance().stopUpdate(),this.btnClose.visible=!1,this.outSideClickHide=!1,super.show(),await this.loadAndUpdateReviveTeam(h,r),!0}
+ return this.updateLayout(),iU.getInstance().stop(),oG.getInstance().stopUpdate(),this.btnClose.visible=!1,this.outSideClickHide=!1,this.gameOverShownAt=performance.now(),super.show(),await this.loadAndUpdateReviveTeam(h,r),!0}
- if(this.requestPending)return;
+ if(this.isInputGuarded||this.requestPending)return;
- if(this.requestPending)return;
+ if(this.isInputGuarded||this.requestPending)return;
+ if(this.isInputGuarded)return;
- qt(gli,"GameOverPopup"),Xt(gli,"_instance");
+ Qt(Wui,"GameOverPopup"),Zt(Wui,"_instance"),Zt(Wui,"GAME_OVER_INPUT_GUARD_MS",1e3);
MiniAscentRelicsPage 8 hunks, 8 statements
- const t=new of({
+ const t=new bf({
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:e,lineHeight:e+5}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:e,lineHeight:e+5}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:18}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:18}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:20,lineHeight:22,fontWeight:"900",stroke:{
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:20,lineHeight:22,fontWeight:"900",stroke:{
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:16,lineHeight:19,fontWeight:"900",stroke:{
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:16,lineHeight:19,fontWeight:"900",stroke:{
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:17,lineHeight:20,fontWeight:"900",stroke:{
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:17,lineHeight:20,fontWeight:"900",stroke:{
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:s,lineHeight:s+5}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:s,lineHeight:s+5}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:23}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:23}
MiniAscentCardPickPopup 8 hunks, 8 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:32,lineHeight:38}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:32,lineHeight:38}
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:12,lineHeight:16}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:12,lineHeight:16}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:18,lineHeight:24}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:18,lineHeight:24}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:28,lineHeight:34}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:28,lineHeight:34}
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:13,lineHeight:18}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:13,lineHeight:18}
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:14}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:20,lineHeight:22,fontWeight:"900",stroke:{
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:20,lineHeight:22,fontWeight:"900",stroke:{
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:12,lineHeight:16}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:12,lineHeight:16}
RankingUserTeamPopup 5 hunks, 7 statements
- super(),Xt(this,"bgTop"),Xt(this,"lblUserName"),Xt(this,"teamContainer",new He),Xt(this,"teamIcons",[]),this.outSideClickHide=!0,this.width=580,this.height=310,this.title="",this.bgTop=new aU,this.bgTop.setIndex(2),this.bgTop.width=this.width-50,this.bgTop.height=40,this.bgTop.x=25,this.bgTop.y=70,this.contentContainer.addChild(this.bgTop),this.lblUserName=new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblUserName.textColor=16777215,this.lblUserName.x=45,this.lblUserName.y=this.bgTop.y+.5*(this.bgTop.height-24),this.contentContainer.addChild(this.lblUserName),this.teamContainer.x=45,this.teamContainer.y=this.bgTop.y+this.bgTop.height+20,this.contentContainer.addChild(this.teamContainer);
+ super(),Zt(this,"bgTop"),Zt(this,"lblUserName"),Zt(this,"teamContainer",new Ve),Zt(this,"teamIcons",[]),Zt(this,"lblHidden"),this.outSideClickHide=!0,this.width=580,this.height=310,this.title="",this.bgTop=new WU,this.bgTop.setIndex(2),this.bgTop.width=this.width-50,this.bgTop.height=40,this.bgTop.x=25,this.bgTop.y=70,this.contentContainer.addChild(this.bgTop),this.lblUserName=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblUserName.textColor=16777215,this.lblUserName.x=45,this.lblUserName.y=this.bgTop.y+.5*(this.bgTop.height-24),this.contentContainer.addChild(this.lblUserName),this.teamContainer.x=45,this.teamContainer.y=this.bgTop.y+this.bgTop.height+20,this.contentContainer.addChild(this.teamContainer);
- }
+ this.lblHidden=new QD("",14988422),this.lblHidden.textSize=18,this.lblHidden.align="center",this.lblHidden.setWrapWidth(this.width-100),this.lblHidden.visible=!1,this.contentContainer.addChild(this.lblHidden)}
- if(!i||!0!==i.success||!i.body)return void YG.getInstance().show((null==i?void 0:i.error)||"팀 정보를 불러오지 못했습니다.");
+ if(!i||!0!==i.success||!i.body)return void bB.getInstance().show(RB.getText("RANKING_TEAM_LOAD_FAILED","팀 정보를 불러오지 못했습니다."));
- YG.getInstance().show("팀 정보를 불러오지 못했습니다.")}
+ bB.getInstance().show(RB.getText("RANKING_TEAM_LOAD_FAILED","팀 정보를 불러오지 못했습니다."))}
- const n=Array.isArray(null==t?void 0:t.team)?t.team:[];
+ const n=!0===(null==t?void 0:t.hidden);
+ this.teamContainer.visible=!n,this.lblHidden.visible=n,this.lblHidden.text=RB.getText("RANKING_TEAM_HIDDEN","팀 편성을 비공개로 설정한 유저입니다."),this.lblHidden.x=.5*(this.width-this.lblHidden.width),this.lblHidden.y=this.teamContainer.y+.5*(130-this.lblHidden.height);
+ const h=!n&&Array.isArray(null==t?void 0:t.team)?t.team:[];
GuideBubble 2 hunks, 6 statements
- const GKt={
+ const Gzt=Object.freeze(Object.defineProperty({
+ __proto__:null,SecretaryGuidePopup:Dzt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Bzt={
- ...OL.DEFAULT_FONT_OPTION_18,fontSize:15,lineHeight:20}
+ ...sD.DEFAULT_FONT_OPTION_18,fontSize:15,lineHeight:20}
GuildWarMainView 6 hunks, 6 statements
- super(),Xt(this,"topCardBg"),Xt(this,"topEmblem"),Xt(this,"lblGuildLv"),Xt(this,"bgGuildName"),Xt(this,"lblGuildName"),Xt(this,"iconMedal"),Xt(this,"lblRankLine"),Xt(this,"lblRank"),Xt(this,"iconMembers"),Xt(this,"lblMembers"),Xt(this,"lblScoreHeader"),Xt(this,"lblScore"),Xt(this,"btnDetails"),Xt(this,"lblActiveSection"),Xt(this,"lblActiveCount"),Xt(this,"lblActiveEmpty"),Xt(this,"activeRows",[]),Xt(this,"lblHistorySection"),Xt(this,"lblHistoryEmpty"),Xt(this,"historyList"),Xt(this,"myGuildId",""),Xt(this,"frameCnt",0),this.topCardBg=new aU,this.topCardBg.setIndex(2),this.topCardBg.width=t.TOP_CARD_W,this.topCardBg.height=t.TOP_CARD_H,this.topCardBg.x=10,this.topCardBg.y=0,this.container.addChild(this.topCardBg),this.topEmblem=new tii,this.topEmblem.scale.set(1.2),this.topEmblem.x=20,this.topEmblem.y=8,this.container.addChild(this.topEmblem),this.lblGuildLv=new SD("Lv.1",14531464,OL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblGuildLv.y=this.topEmblem.y+this.topEmblem.height-6,this.lblGuildLv.x=this.topEmblem.x+(this.topEmblem.width-this.lblGuildLv.width)/2,this.container.addChild(this.lblGuildLv),this.bgGuildName=(new Ff).roundRect(115,14,340,30,15).fill({
+ super(),Zt(this,"topCardBg"),Zt(this,"topEmblem"),Zt(this,"lblGuildLv"),Zt(this,"bgGuildName"),Zt(this,"lblGuildName"),Zt(this,"rankBadge",new i0t(52)),Zt(this,"lblRankLine"),Zt(this,"lblRank"),Zt(this,"iconMembers"),Zt(this,"lblMembers"),Zt(this,"lblScoreHeader"),Zt(this,"lblScore"),Zt(this,"btnDetails"),Zt(this,"lblActiveSection"),Zt(this,"lblActiveCount"),Zt(this,"lblActiveEmpty"),Zt(this,"activeRows",[]),Zt(this,"lblHistorySection"),Zt(this,"lblHistoryEmpty"),Zt(this,"historyList"),Zt(this,"myGuildId",""),Zt(this,"frameCnt",0),this.topCardBg=new WU,this.topCardBg.setIndex(2),this.topCardBg.width=t.TOP_CARD_W,this.topCardBg.height=t.TOP_CARD_H,this.topCardBg.x=10,this.topCardBg.y=0,this.container.addChild(this.topCardBg),this.topEmblem=new Vsi,this.topEmblem.scale.set(1.2),this.topEmblem.x=20,this.topEmblem.y=8,this.container.addChild(this.topEmblem),this.lblGuildLv=new QD("Lv.1",14531464,sD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblGuildLv.y=this.topEmblem.y+this.topEmblem.height-6,this.lblGuildLv.x=this.topEmblem.x+(this.topEmblem.width-this.lblGuildLv.width)/2,this.container.addChild(this.lblGuildLv),this.bgGuildName=(new ip).roundRect(115,14,340,30,15).fill({
- ),this.container.addChild(this.bgGuildName),this.lblGuildName=new SD("길드",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_20),this.lblGuildName.x=133,this.lblGuildName.y=14+(30-this.lblGuildName.height)/2,this.container.addChild(this.lblGuildName),this.iconMedal=new je(eS.getTexture("UI_Ekkorr","Icon_medal_1st")),this.iconMedal.x=130,this.iconMedal.y=48,this.container.addChild(this.iconMedal),this.lblRankLine=new SD(`${
+ ),this.container.addChild(this.bgGuildName),this.lblGuildName=new QD("길드",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_20),this.lblGuildName.x=133,this.lblGuildName.y=14+(30-this.lblGuildName.height)/2,this.container.addChild(this.lblGuildName),this.rankBadge.x=130,this.rankBadge.y=48,this.rankBadge.setRank(0),this.container.addChild(this.rankBadge),this.lblRankLine=new QD(`${
-  ( - )`,16764006,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblRankLine.x=this.iconMedal.x+this.iconMedal.width+4,this.lblRankLine.y=this.iconMedal.y+2,this.container.addChild(this.lblRankLine),this.lblRank=new SD("-",16763904,OL.ORANGE_OUTLINE_FONT_OPTION_28),this.lblRank.x=this.iconMedal.x+this.iconMedal.width+35,this.lblRank.y=this.iconMedal.y+this.iconMedal.height-26,this.container.addChild(this.lblRank),this.iconMembers=new je(eS.getTexture("UI_Guild","Icon_Guild_CrewNum")),this.lblMembers=new SD("0 / 0",15658734,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.container.addChild(this.iconMembers),this.container.addChild(this.lblMembers),this.lblScoreHeader=new SD(nB.getText("GAME_1024","점수"),14531464,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblScoreHeader.y=50,this.container.addChild(this.lblScoreHeader),this.lblScore=new SD("-",14548838,OL.ORANGE_OUTLINE_FONT_OPTION_28),this.lblScore.y=this.lblRank.y,this.container.addChild(this.lblScore),this.layoutRightSide(),this.btnDetails=new IG(nB.getText("GAME_1037","상세")),this.btnDetails.color=IG.BROWN,this.btnDetails.width=80,this.btnDetails.height=30,this.btnDetails.x=t.TOP_CARD_W+10-this.btnDetails.width-12,this.btnDetails.y=t.TOP_CARD_H-this.btnDetails.height-12,this.btnDetails.onClick=()=>this.onDetailsClick(),this.btnDetails.visible=!1,this.container.addChild(this.btnDetails);
+  ( - )`,16764006,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblRankLine.x=this.rankBadge.x+52+6,this.lblRankLine.y=this.rankBadge.y+(52-this.lblRankLine.height)/2,this.container.addChild(this.lblRankLine),this.lblRank=new QD("-",16763904,sD.ORANGE_OUTLINE_FONT_OPTION_28),this.lblRank.x=this.rankBadge.x+52+35,this.lblRank.y=73,this.lblRank.visible=!1,this.container.addChild(this.lblRank),this.iconMembers=new Ye(kS.getTexture("UI_Guild","Icon_Guild_CrewNum")),this.lblMembers=new QD("0 / 0",15658734,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.container.addChild(this.iconMembers),this.container.addChild(this.lblMembers),this.lblScoreHeader=new QD(RB.getText("GAME_1024","점수"),14531464,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblScoreHeader.y=50,this.container.addChild(this.lblScoreHeader),this.lblScore=new QD("-",14548838,sD.ORANGE_OUTLINE_FONT_OPTION_28),this.lblScore.y=this.lblRank.y,this.container.addChild(this.lblScore),this.layoutRightSide(),this.btnDetails=new iB(RB.getText("GAME_1037","상세")),this.btnDetails.color=iB.BROWN,this.btnDetails.width=80,this.btnDetails.height=30,this.btnDetails.x=t.TOP_CARD_W+10-this.btnDetails.width-12,this.btnDetails.y=t.TOP_CARD_H-this.btnDetails.height-12,this.btnDetails.onClick=()=>this.onDetailsClick(),this.btnDetails.visible=!1,this.container.addChild(this.btnDetails);
-  ( - )`,this.lblRank.text="-",this.lblScore.text="-",this.layoutRightSide()}
+  ( - )`,this.lblRank.text="-",this.rankBadge.setRank(0),this.lblScore.text="-",this.layoutRightSide()}
- `:"-";
+ `:"-",this.rankBadge.setRank(Number((null==t?void 0:t.myRank)??0));
- `,this.lblRank.text="",this.lblScore.text="",this.lblScoreHeader.visible=!1,this.lblActiveSection.text=`[ ${
+ `,this.lblRank.text="",this.rankBadge.setRank(Number(t.rank??0)),this.lblScore.text="",this.lblScoreHeader.visible=!1,this.lblActiveSection.text=`[ ${
GuildWarBattlePopupV3 6 hunks, 6 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:11}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:11}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:9}
GpuGraphicsContext 3 hunks, 5 statements
- ...Xc,extension:{
- ...Xc.extension,name:"ellipse"}
+ ...Zc,extension:{
+ ...Zc.extension,name:"ellipse"}
- ...Xc,extension:{
- ...Xc.extension,name:"roundedRectangle"}
+ ...Zc,extension:{
+ ...Zc.extension,name:"roundedRectangle"}
- ..."radial"===i.type?b.defaultRadialOptions:b.defaultLinearOptions,...zi(i)}
+ ..."radial"===i.type?M.defaultRadialOptions:M.defaultLinearOptions,...Xi(i)}
BatchableSprite 5 hunks, 5 statements
- ...k.defaultTextStyle,...t}
+ ...R.defaultTextStyle,...t}
- ...k.defaultDropShadow,...t}
+ ...R.defaultDropShadow,...t}
- ...k.defaultDropShadow}
+ ...R.defaultDropShadow}
- ...Nu.defaultFillStyle,...t}
+ ...Gu.defaultFillStyle,...t}
- ...Nu.defaultStrokeStyle,...t}
+ ...Gu.defaultStrokeStyle,...t}
ListOld 1 hunks, 5 statements
- const b6=class extends He{
+ const _4=Object.freeze(Object.defineProperty({
+ __proto__:null,ToolTip:v4}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),M4=class extends Ve{
HeroSubMenu 1 hunks, 5 statements
- const dJt=class t extends HYt{
+ const aQt=Object.freeze(Object.defineProperty({
+ __proto__:null,HeroHireSubView:oQt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),cQt=class t extends Pqt{
HeroView 1 hunks, 5 statements
- const mJt=class t extends GYt{
+ const fQt=Object.freeze(Object.defineProperty({
+ __proto__:null,HeroSubView:dQt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),pQt=class t extends Iqt{
HeroBookItemRenderer 1 hunks, 5 statements
- const vJt=class extends iR{
+ const wQt=Object.freeze(Object.defineProperty({
+ __proto__:null,HeroView:gQt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),mQt=class extends OR{
TreasureInventorySubMenu 1 hunks, 5 statements
- const FQt=class t extends HYt{
+ const UZt=Object.freeze(Object.defineProperty({
+ __proto__:null,TreasureView:BZt}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),FZt=class t extends Pqt{
DailyRankingItemRenderer 3 hunks, 5 statements
- super(),Xt(this,"bg"),Xt(this,"lblRank",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_18)),Xt(this,"lblName",new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblScore",new SD("",OL.COLOR_BRIGHT_ORANGE,OL.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"rankBadge",new i0t(46)),Zt(this,"lblName",new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),Zt(this,"lblScore",new QD("",sD.COLOR_BRIGHT_ORANGE,sD.DEFAULT_OUTLINE_FONT_OPTION_16)),this.bg=new eE({
- ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg),this.lblRank.x=45,this.lblRank.y=.5*(this.bg.height-this.lblRank.height),this.addChild(this.lblRank),this.lblName.x=115,this.lblName.y=.5*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.lblScore.x=this.bg.width-100,this.lblScore.y=.5*(this.bg.height-this.lblScore.height),this.addChild(this.lblScore)}
+ ),this.bg.width=610,this.bg.height=50,this.bg.x=5,this.addChild(this.bg),this.rankBadge.x=27,this.rankBadge.y=.5*(this.bg.height-46),this.addChild(this.rankBadge),this.lblName.x=115,this.lblName.y=.5*(this.bg.height-this.lblName.height),this.addChild(this.lblName),this.lblScore.x=this.bg.width-100,this.lblScore.y=.5*(this.bg.height-this.lblScore.height),this.addChild(this.lblScore)}
- this.data=t,this.lblRank.text=`${
- t.rank}
- `,this.lblName.text=t.name,this.lblScore.text=t.score.toLocaleString(),t.name===XD.name?(this.lblName.textColor=OL.COLOR_YELLOW,this.lblRank.textColor=OL.COLOR_YELLOW):(this.lblName.textColor=16777215,this.lblRank.textColor=16777215)}
+ this.data=t,this.rankBadge.setRank(Number(t.rank)),this.lblName.text=t.name,this.lblScore.text=t.score.toLocaleString();
+ const i=t.name===EG.name;
+ this.lblName.textColor=i?sD.COLOR_YELLOW:16777215}
DialogueLayer 1 hunks, 5 statements
- const Zoi=class extends pS{
+ const Aci=Object.freeze(Object.defineProperty({
+ __proto__:null,RightMenu:Eci}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Sci=class extends $S{
CastleSubMenu 1 hunks, 5 statements
- const vci=class t extends HYt{
+ const Vli=Object.freeze(Object.defineProperty({
+ __proto__:null,CitadelSubView:Wli}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),jli=class t extends Pqt{
QuestProgress 1 hunks, 5 statements
- const Sci=class extends He{
+ const Qli=Object.freeze(Object.defineProperty({
+ __proto__:null,CastleView:Jli}
+ ,Symbol.toStringTag,{
+ value:"Module"}
+ )),Zli=class extends Ve{
Circle 4 hunks, 4 statements
- ,test:qt(()=>Promise.resolve(!0),"test"),add:qt(async t=>[...t,...ko],"add"),remove:qt(async t=>t.filter(t=>!ko.includes(t)),"remove")}
+ ,test:Qt(()=>Promise.resolve(!0),"test"),add:Qt(async t=>[...t,...Po],"add"),remove:Qt(async t=>t.filter(t=>!Po.includes(t)),"remove")}
- ...m.defaultOptions}
+ ...w.defaultOptions}
- ...m.defaultOptions,...this.loadOptions,onProgress:i}
+ ...w.defaultOptions,...this.loadOptions,onProgress:i}
- ...m.defaultOptions,...this.loadOptions,...i||{
+ ...w.defaultOptions,...this.loadOptions,...i||{
WorkerManagerClass 4 hunks, 4 statements
- ...M.defaultFillStyle}
+ ...y.defaultFillStyle}
- ...M.defaultStrokeStyle}
+ ...y.defaultStrokeStyle}
- parseAsGraphicsContext:m,...w}
+ parseAsGraphicsContext:w,...m}
- resource:p,alphaMode:"premultiply-alpha-on-upload",resolution:u,...w}
+ resource:p,alphaMode:"premultiply-alpha-on-upload",resolution:u,...m}
FilterData 2 hunks, 4 statements
+ function Of(t,i,s,e,n,h,r,o){
+ const a=r-s,c=o-e,l=n-s,u=h-e,d=t-s,f=i-e,p=a*a+c*c,g=a*l+c*u,w=a*d+c*f,m=l*l+u*u,v=l*d+u*f,_=1/(p*m-g*g),M=(m*w-g*v)*_,b=(p*v-g*w)*_;
+ return M>=0&&b>=0&&M+b<1}
- ;
+ ,Qt(Of,"pointInTriangle");
HeroService 1 hunks, 4 statements
+ async buyMassiveHeroes(t=!1,i=!1){
+ return this.post(LP.HERO.BUY_MASSIVE_HEROES,{
+ useTicket:t}
+ ,i)}
IconOnlyButton 2 hunks, 4 statements
- showRedDot(){
- this.redDot||(this.redDot=new TG,this.redDot.scale.set(this.iconScale),this.addChild(this.redDot)),this.redDot.show(),this.updateRedDot()}
+ showRedDot(t=0,i=0){
+ this.redDot||(this.redDot=new ZG,this.redDot.scale.set(this.iconScale),this.addChild(this.redDot)),this.redDot.show(),this.updateRedDot(t,i)}
- updateRedDot(){
- this.redDot&&(this.redDot.x=this.bg.x+.5*this.bg.width-this.redDot.width-5,this.redDot.y=-2)}
+ updateRedDot(t=0,i=0){
+ this.redDot&&(this.redDot.x=this.bg.x+.5*this.bg.width-this.redDot.width-5+t,this.redDot.y=-2+i)}
GuildRaidMemberDailyItemRenderer 4 hunks, 4 statements
- super(),Xt(this,"bg"),Xt(this,"lblRank"),Xt(this,"lblName"),Xt(this,"lblRaidTitle"),Xt(this,"lblRaidCount"),Xt(this,"lblWarTitle"),Xt(this,"lblWarCount"),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"rankBadge",new i0t(44)),Zt(this,"lblName"),Zt(this,"lblRaidTitle"),Zt(this,"lblRaidCount"),Zt(this,"lblWarTitle"),Zt(this,"lblWarCount"),this.bg=new eE({
- ),this.bg.width=630,this.bg.height=48,this.addChild(this.bg),this.lblRank=new SD("",11768152,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.addChild(this.lblRank),this.lblName=new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=145,this.addChild(this.lblName),this.lblRaidTitle=new SD(nB.getText("GAME_630","길드레이드"),10129539,OL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblRaidTitle.textSize=13,this.addChild(this.lblRaidTitle),this.lblRaidCount=new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblRaidCount),this.lblWarTitle=new SD(nB.getText("GAME_502","길드전"),10129539,OL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblWarTitle.textSize=13,this.addChild(this.lblWarTitle),this.lblWarCount=new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblWarCount)}
+ ),this.bg.width=630,this.bg.height=48,this.addChild(this.bg),this.rankBadge.x=45.5,this.rankBadge.y=.5*(this.bg.height-44),this.addChild(this.rankBadge),this.lblName=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=145,this.addChild(this.lblName),this.lblRaidTitle=new QD(RB.getText("GAME_630","길드레이드"),10129539,sD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblRaidTitle.textSize=13,this.addChild(this.lblRaidTitle),this.lblRaidCount=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblRaidCount),this.lblWarTitle=new QD(RB.getText("GAME_502","길드전"),10129539,sD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblWarTitle.textSize=13,this.addChild(this.lblWarTitle),this.lblWarCount=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.addChild(this.lblWarCount)}
- this.data=t,this.lblRank.text=t.isNoShow?"-":String(t.rank),this.lblRank.textColor=!t.isNoShow&&t.rank<=3?16765033:11768152,this.lblRank.x=.5*(135-this.lblRank.width),this.lblRank.y=.5*(this.bg.height-this.lblRank.height),this.lblName.text=t.name,this.lblName.y=.5*(this.bg.height-this.lblName.height);
+ this.data=t,this.rankBadge.setRank(t.isNoShow?0:t.rank),this.lblName.text=t.name,this.lblName.y=.5*(this.bg.height-this.lblName.height);
- this.bg.alpha=t.isNoShow?.55:1,this.lblRank.alpha=s,this.lblName.alpha=s,this.lblRaidTitle.alpha=s,this.lblRaidCount.alpha=s,this.lblWarTitle.alpha=s,this.lblWarCount.alpha=s}
+ this.bg.alpha=t.isNoShow?.55:1,this.rankBadge.alpha=s,this.lblName.alpha=s,this.lblRaidTitle.alpha=s,this.lblRaidCount.alpha=s,this.lblWarTitle.alpha=s,this.lblWarCount.alpha=s}
GuildRaidRecordUserItemRenderer 4 hunks, 4 statements
- super(),Xt(this,"bg"),Xt(this,"lblRank"),Xt(this,"lblName"),Xt(this,"lblDamage"),Xt(this,"detailIcons",[]),Xt(this,"detailLabels",[]),this.bg=new kM({
+ super(),Zt(this,"bg"),Zt(this,"rankBadge",new i0t(56)),Zt(this,"lblName"),Zt(this,"lblDamage"),Zt(this,"detailIcons",[]),Zt(this,"detailLabels",[]),this.bg=new eE({
- ),this.bg.width=630,this.bg.height=72,this.addChild(this.bg),this.lblRank=new SD("",11768152,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblRank.y=12,this.addChild(this.lblRank),this.lblName=new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=145,this.lblName.y=10,this.addChild(this.lblName),this.lblDamage=new SD("",16777215,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblDamage.y=10,this.addChild(this.lblDamage);
+ ),this.bg.width=630,this.bg.height=72,this.addChild(this.bg),this.rankBadge.x=39.5,this.rankBadge.y=.5*(this.bg.height-56),this.addChild(this.rankBadge),this.lblName=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblName.x=145,this.lblName.y=10,this.addChild(this.lblName),this.lblDamage=new QD("",16777215,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblDamage.y=10,this.addChild(this.lblDamage);
- this.data=t,this.lblRank.text=t.isNoShow?"-":String(t.rank),this.lblRank.textColor=!t.isNoShow&&t.rank<=3?16765033:11768152,this.lblRank.x=.5*(135-this.lblRank.width),this.lblRank.y=.5*(this.bg.height-this.lblRank.height),this.lblName.text=t.name,this.lblDamage.text=t.damageText,this.lblDamage.x=this.bg.width-16-this.lblDamage.width;
+ this.data=t,this.rankBadge.setRank(t.isNoShow?0:t.rank),this.lblName.text=t.name,this.lblDamage.text=t.damageText,this.lblDamage.x=this.bg.width-16-this.lblDamage.width;
- this.bg.alpha=t.isNoShow?.55:1,this.lblRank.alpha=i,this.lblName.alpha=i,this.lblDamage.alpha=i}
+ this.bg.alpha=t.isNoShow?.55:1,this.rankBadge.alpha=i,this.lblName.alpha=i,this.lblDamage.alpha=i}
Archery2GameScene 4 hunks, 4 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16777215}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16777215}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16766720}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16766720}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16737792}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fill:16737792}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16777215}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_20,fill:16777215}
MiniAscentResultPopup 4 hunks, 4 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:30}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:30}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:30}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:30}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:32,lineHeight:38}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:32,lineHeight:38}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:30,lineHeight:36}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:30,lineHeight:36}
MiniAscentLobbyPopup 4 hunks, 4 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:32}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:32}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:18,lineHeight:24}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:18,lineHeight:24}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:42,lineHeight:50}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:42,lineHeight:50}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:18,lineHeight:24}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:18,lineHeight:24}
PassRewardManager 1 hunks, 3 statements
- fontFamily:"Arial",fill:IL.COLOR_WHITE,stroke:{
- color:"#222222",width:6,join:"round"}
- ,fontSize:21,fontWeight:"bolder"}
+ fontFamily:"Arial",fill:14008992,stroke:{
+ color:"#382b1c",width:1.5,join:"round"}
+ ,fontSize:20,fontWeight:"bold"}
NiceSliceBtnBgs 1 hunks, 3 statements
- assets/ekkorr/sounds/effect/StoneBreak.mp3`),Xt(EG,"SFX_INTRO",`${
+ assets/ekkorr/sounds/effect/StoneBreak.mp3`),Zt(YG,"SFX_WOOD_MALLET",`${
+ CS.getBase()}
+ assets/sounds/fishing/wood_mallet.mp3`),Zt(YG,"SFX_INTRO",`${
EventVO 3 hunks, 3 statements
- ),Xt(cB,"currentHeroResetEvent"),Xt(cB,"currentMedalEvent"),Xt(cB,"currentPaymentSpecialEvent"),Xt(cB,"currentPaymentMonthEvent"),Xt(cB,"currentMineEvent"),Xt(cB,"requestPending",!1);
+ ),Zt(DB,"miniAscentShop",null),Zt(DB,"currentHeroResetEvent"),Zt(DB,"currentMedalEvent"),Zt(DB,"currentPaymentSpecialEvent"),Zt(DB,"currentPaymentMonthEvent"),Zt(DB,"currentMineEvent"),Zt(DB,"currentTowerEvent"),Zt(DB,"requestPending",!1),Zt(DB,"eventScheduled",[]);
- var uB=(t=>(t[t.LOGIN_EVENT=0]="LOGIN_EVENT",t[t.HERO_RESET_EVENT=1]="HERO_RESET_EVENT",t[t.MEDAL_EVENT=2]="MEDAL_EVENT",t[t.PAYMENT_EVENT=3]="PAYMENT_EVENT",t[t.MINE_EVENT=4]="MINE_EVENT",t[t.MINI_ASCENT_EVENT=5]="MINI_ASCENT_EVENT",t))(uB||{
+ var BB=(t=>(t[t.LOGIN_EVENT=0]="LOGIN_EVENT",t[t.HERO_RESET_EVENT=1]="HERO_RESET_EVENT",t[t.MEDAL_EVENT=2]="MEDAL_EVENT",t[t.PAYMENT_EVENT=3]="PAYMENT_EVENT",t[t.MINE_EVENT=4]="MINE_EVENT",t[t.MINI_ASCENT_EVENT=5]="MINI_ASCENT_EVENT",t[t.ATTEND_EVENT=6]="ATTEND_EVENT",t[t.TOWER_EVENT=7]="TOWER_EVENT",t))(BB||{
- Xt(this,"type",-1),Xt(this,"id",0),Xt(this,"startTime",""),Xt(this,"endTime",""),Xt(this,"day",""),Xt(this,"divide",1),Xt(this,"startHour",0),Xt(this,"endHour",0),Xt(this,"max",0),Xt(this,"multi",0),Xt(this,"userCount",0),Xt(this,"rewards",[]),Xt(this,"date",0),Xt(this,"amounts",[]),Xt(this,"rewardType",""),Xt(this,"userAmount",0),Xt(this,"subType",""),Xt(this,"seasonId",0),Xt(this,"petKindNums",[]),Xt(this,"priestessKindNums",[])}
+ Zt(this,"type",-1),Zt(this,"id",0),Zt(this,"startTime",""),Zt(this,"endTime",""),Zt(this,"day",""),Zt(this,"divide",1),Zt(this,"startHour",0),Zt(this,"endHour",0),Zt(this,"max",0),Zt(this,"multi",0),Zt(this,"userCount",0),Zt(this,"rewards",[]),Zt(this,"date",0),Zt(this,"amounts",[]),Zt(this,"rewardType",""),Zt(this,"userAmount",0),Zt(this,"subType",""),Zt(this,"seasonId",0),Zt(this,"petKindNums",[]),Zt(this,"priestessKindNums",[]),Zt(this,"message",""),Zt(this,"image",""),Zt(this,"attendCount",0),Zt(this,"attendedToday",!1),Zt(this,"completed",!1),Zt(this,"claimedFloor",0),Zt(this,"floors",[])}
ActiveSkillMain 3 hunks, 3 statements
- t.x=63*i,this.list.push(t),this.addChild(t),t.durationFrames=60*(30+15*i),t.id=i,t.onClick=()=>{
+ t.x=60*i,this.list.push(t),this.addChild(t),t.durationFrames=60*(30+15*i),t.id=i,t.onClick=()=>{
- -1===n?(r.visible=!1,r.enabled=!1):(r.visible=!0,r.enabled=!0,r.setSkillIcon(n),r.durationFrames=60*Math.max(30,Math.floor((30+15*h)*(1-.01*t))),s=r.x+68,e++)}
+ -1===n?(r.visible=!1,r.enabled=!1):(r.visible=!0,r.enabled=!0,r.setSkillIcon(n),r.durationFrames=60*Math.max(30,Math.floor((30+15*h)*(1-.01*t))),s=r.x+60,e++)}
- e<this.skillMaxNum?(this.btnAdd.visible=!0,this.btnAdd.x=n+.5*this.btnAdd.width,this.btnAdd.y=.5*this.btnAdd.height,n+=this.btnAdd.width+5):this.btnAdd.visible=!1,this.btnChange.visible=e>0,this.btnChange.x=n+.5*this.btnChange.width,this.btnChange.y=.5*this.btnChange.height+2,n+=this.btnChange.width,this.x=.5*(640-n),this.refreshAutoToggle()}
+ e<this.skillMaxNum?(this.btnAdd.visible=!0,this.btnAdd.x=n+.5*this.btnAdd.width,this.btnAdd.y=.5*this.btnAdd.height,n+=this.btnAdd.width+5):this.btnAdd.visible=!1,this.btnChange.visible=e>0,this.btnChange.x=n+.5*this.btnChange.width,this.btnChange.y=.5*this.btnChange.height+2,n+=this.btnChange.width,this.x=.5*(640-n)-10,this.refreshAutoToggle()}
Client 3 hunks, 3 statements
- ,parseAs:m="json",querySerializer:w,bodySerializer:v=h??t4,body:_,...b}
+ ,parseAs:w="json",querySerializer:m,bodySerializer:v=h??t8,body:_,...M}
- ,...w}
+ ,...m}
- redirect:"follow",...a,...b,body:A,headers:y}
+ redirect:"follow",...a,...M,body:E,headers:A}
Or 3 hunks, 3 statements
- ,set={
+ ,nnt={
- Object.defineProperty(set,"__esModule",{
+ Object.defineProperty(nnt,"__esModule",{
- ),set.polyval=set.ghash=void 0,set._toGHASHKey=cet;
+ ),nnt.polyval=nnt.ghash=void 0,nnt._toGHASHKey=unt;
SHA256 3 hunks, 3 statements
- ...Xgt,...Qgt,...tmt,...smt,...hmt,...gmt,...vmt,...Emt,...Tmt}
+ ...Xwt,...Qwt,...tmt,...smt,...hmt,...gmt,...vmt,...bmt,...Tmt}
- ...cwt,...uwt}
+ ...cvt,...uvt}
- utf8:$wt,"utf-8":$wt,hex:Dwt.base16,latin1:Wwt,ascii:Wwt,binary:Wwt,...Dwt}
+ utf8:Hvt,"utf-8":Hvt,hex:Dvt.base16,latin1:Wvt,ascii:Wvt,binary:Wvt,...Dvt}
SuiProvider 3 hunks, 3 statements
- namespace:PTt.NameSpaceKeyAptos,addresses:s,methods:[...LTt.AptosMethods],extra:h}
+ namespace:PCt.NameSpaceKeyAptos,addresses:s,methods:[...LCt.AptosMethods],extra:h}
- namespace:$Tt.NameSpaceKeyTON,addresses:o,methods:[...jTt.TONMethods],extra:a,data:{
+ namespace:HCt.NameSpaceKeyTON,addresses:o,methods:[...jCt.TONMethods],extra:a,data:{
- namespace:qTt.NameSpaceKeySui,addresses:i,methods:[...QTt.SuiMethods],extra:s}
+ namespace:qCt.NameSpaceKeySui,addresses:i,methods:[...QCt.SuiMethods],extra:s}
WalletPopup 3 hunks, 3 statements
- ...OL.ERROR_POPUP_LABEL_OPTION,fontSize:24,fontWeight:"bold"}
+ ...sD.ERROR_POPUP_LABEL_OPTION,fontSize:24,fontWeight:"bold"}
- ...OL.ERROR_POPUP_LABEL_OPTION,fontSize:16}
+ ...sD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
- ...OL.ERROR_POPUP_LABEL_OPTION,fontSize:16}
+ ...sD.ERROR_POPUP_LABEL_OPTION,fontSize:16}
TransTicketManager 2 hunks, 3 statements
- hero5:0,hero7:0,treasure5:0,treasure6:0,treasure7:0,treasure8:0,treasure9:0}
+ hero5:0,hero7:0,treasure5:0,treasure6:0,treasure7:0,treasure8:0,treasure9:0,massive:0}
+ getMassiveTransTicket(){
+ return this.data.massive}
SpriteBattleController 3 hunks, 3 statements
- this.cleanup(),IU.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.stageKindNum=t,this.stageVO=i,await eS.generateTexture("Highland","ktx2",!1);
+ this.cleanup(),EF.getInstance().setDay(),this.battleEnded=!1,this.battleResult=null,this.battleTime=0,this.killCount=0,this.stageKindNum=t,this.stageVO=i,await kS.generateTexture("Highland","ktx2",!1),EF.getInstance().highland.prepare(kS.getTexture("BG",gU.HIGHLAND));
- await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),eli.getInstance().switchToBattle(this),DB.getInstance().setBackground(NB.HIGHLAND),this.updateZIndexSorting(),IB.getInstance().remove(this.execute,this),await KB.getInstance().play(),q2t.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),IB.getInstance().add(this.execute,this)}
+ await this.setupAllies(),await this.setupEnemies(),this.setupEnemyLists(),Rui.getInstance().switchToBattle(this),mU.getInstance().setBackground(gU.HIGHLAND),EF.getInstance().highland.show(kS.getTexture("BG",gU.HIGHLAND)),this.updateZIndexSorting(),iU.getInstance().remove(this.execute,this),await CU.getInstance().play(),n3t.getInstance().setTimeProvider(()=>this.getRemainingTimeSeconds()),iU.getInstance().add(this.execute,this)}
- eP.getInstance().setBattleContext(Wx.Normal),this.speedHelper.detachButton(),this.speedHelper.exit();
+ kP.getInstance().setBattleContext(wP.Normal),EF.getInstance().highland.hide(),this.speedHelper.detachButton(),this.speedHelper.exit();
BottomMenus 2 hunks, 3 statements
- lB.isValidEvent(uB.HERO_RESET_EVENT)?this.getMenu(1).showEventTag(-3,2):this.getMenu(1).hideEventTag(),lB.isValidEvent(uB.PAYMENT_EVENT)&&lB.currentPaymentSpecialEvent?this.getMenu(5).showEventTag(-3,2):this.getMenu(5).hideEventTag(),await this.updateSecretaryClaimable()}
+ GB.isValidEvent(BB.HERO_RESET_EVENT)?this.getMenu(1).showEventTag(-3,2):this.getMenu(1).hideEventTag(),GB.isValidEvent(BB.PAYMENT_EVENT)&&GB.currentPaymentSpecialEvent?this.getMenu(5).showEventTag(-3,2):this.getMenu(5).hideEventTag(),GB.isValidEvent(BB.TOWER_EVENT)?this.getMenu(4).showEventTag(-3,2):this.getMenu(4).hideEventTag(),await this.updateSecretaryClaimable()}
- this.menus.forEach(t=>t.showLockIcon(-10)),t.forEach(t=>{
- this.getMenu(t).hideLockIcon()}
+ this.menus.forEach(i=>{
+ i.locked=-1==t.indexOf(i.index)}
MiniAscentAssets 3 hunks, 3 statements
- return[Uvi,...Bvi[t]??["ui_challenge_seal"],Fvi]}
+ return[XMi,...qMi[t]??["ui_challenge_seal"],JMi]}
- ,Yvi=[Vvi,"crystal_effect_plate",...jvi,...Kvi,...Object.values(zvi)],qvi=class{
+ ,hbi=[ibi,"crystal_effect_plate",...sbi,...ebi,...Object.values(nbi)],rbi=class{
- for(const h of["background_map","chapter_journey","encounter_battle","encounter_elite","encounter_boss","encounter_event","encounter_shop","encounter_gambling","ui_arrow_up","ui_button_lobby_blank","ui_close","ui_coin","ui_energy","ui_challenge_seal","ui_divider","UI_VS","UI_Check1","UI_Check2",...Hvi,...Yvi])if(!n.textures[h])throw new Error(`UI_MINI: missing ${
+ for(const h of["background_map","chapter_journey","encounter_battle","encounter_elite","encounter_boss","encounter_event","encounter_shop","encounter_gambling","ui_arrow_up","ui_button_lobby_blank","ui_close","ui_coin","ui_energy","ui_challenge_seal","ui_divider","UI_VS","UI_Check1","UI_Check2",...QMi,...hbi])if(!n.textures[h])throw new Error(`UI_MINI: missing ${
MiniAscentDeployPopup 3 hunks, 3 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:30}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:24,lineHeight:30}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:16,lineHeight:20}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:16,lineHeight:20}
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:12,lineHeight:16}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:12,lineHeight:16}
TilingSpriteShader 1 hunks, 2 statements
- ...np,vertex:{
- ...np.vertex,header:np.vertex.header.replace("group(1)","group(2)")}
+ ...Sp,vertex:{
+ ...Sp.vertex,header:Sp.vertex.header.replace("group(1)","group(2)")}
RenderTargetSystem 2 hunks, 2 statements
- ...B.defaultOptions,...t}
+ ...U.defaultOptions,...t}
- ...F.defaultOptions,...t}
+ ...$.defaultOptions,...t}
CanvasRenderer 1 hunks, 2 statements
- const Fv=[...Iv,dw,pw,Uv,Gv],Hv=[Dw,Wm,Pw,_w,Xm,hw,Qm,mw],$v=[Dm,Rw],Wv=[],Vv=[],jv=[];
- ni.handleByNamedList(ii.CanvasSystem,Wv),ni.handleByNamedList(ii.CanvasPipes,Vv),ni.handleByNamedList(ii.CanvasPipesAdaptor,jv),ni.add(...Fv,...Hv,...$v);
+ const o_=[...qv,Pm,Lm,r_,n_],a_=[ev,lm,tv,Fm,mm,Tm,_m,Gm],c_=[em,Qm],l_=[],u_=[],d_=[];
+ oi.handleByNamedList(ni.CanvasSystem,l_),oi.handleByNamedList(ni.CanvasPipes,u_),oi.handleByNamedList(ni.CanvasPipesAdaptor,d_),oi.add(...o_,...a_,...c_);
WebGLRenderer 1 hunks, 2 statements
- const Yb=[...Iv,F_,m_,i_,M_,Zv,Wb,V_,f_,wb,db,b_,bb,C_,v_],qb=[...Ov],Xb=[Bm,zb,jb],Jb=[],Qb=[],Zb=[];
- ni.handleByNamedList(ii.WebGLSystem,Jb),ni.handleByNamedList(ii.WebGLPipes,Qb),ni.handleByNamedList(ii.WebGLPipesAdaptor,Zb),ni.add(...Yb,...qb,...Xb);
+ const gb=[...qv,oM,G_,y_,W_,M_,lb,uM,N_,BM,PM,$_,$M,Y_,U_],wb=[...Xv],mb=[hm,pb,db],vb=[],_b=[],Mb=[];
+ oi.handleByNamedList(ni.WebGLSystem,vb),oi.handleByNamedList(ni.WebGLPipes,_b),oi.handleByNamedList(ni.WebGLPipesAdaptor,Mb),oi.add(...gb,...wb,...mb);
WebGPURenderer 1 hunks, 2 statements
- const lM=[...Iv,TE,mE,pE,vE,aE,hM,FE,$E,jE,NE,dE,bE,nE],uM=[...Ov,OE],dM=[Hm,cM,oM],fM=[],pM=[],gM=[];
- ni.handleByNamedList(ii.WebGPUSystem,fM),ni.handleByNamedList(ii.WebGPUPipes,pM),ni.handleByNamedList(ii.WebGPUPipesAdaptor,gM),ni.add(...lM,...uM,...dM);
+ const Ry=[...qv,zb,Gb,Lb,Ub,Ib,Ty,oy,cy,dy,iy,Pb,$b,Sb],xy=[...Xv,Xb],Py=[am,ky,Oy],Ny=[],Ly=[],Dy=[];
+ oi.handleByNamedList(ni.WebGPUSystem,Ny),oi.handleByNamedList(ni.WebGPUPipes,Ly),oi.handleByNamedList(ni.WebGPUPipesAdaptor,Dy),oi.add(...Ry,...xy,...Py);
UnitDataManager 2 hunks, 2 statements
- )()),Xt(this,"bookList",[]),Xt(this,"objBookList",new Map),Xt(this,"list",[]),Xt(this,"objList",new Map),Xt(this,"ownedUnitList",[]),Xt(this,"objOwnedUnitList",new Map),Xt(this,"totalTransPoint",0),Xt(this,"heroTransPointCache",new Map),Xt(this,"buyableUnitList",[NR.getVO(),NR.getVO(),NR.getVO(),NR.getVO(),NR.getVO()]),Xt(this,"lastBuyRefreshTime",0),Xt(this,"heroPresets",[]),Xt(this,"honorNumberMax",0),Xt(this,"_lastAppliedHeroPresetSlot",-1)}
+ )()),Zt(this,"bookList",[]),Zt(this,"objBookList",new Map),Zt(this,"list",[]),Zt(this,"objList",new Map),Zt(this,"ownedUnitList",[]),Zt(this,"objOwnedUnitList",new Map),Zt(this,"totalTransPoint",0),Zt(this,"heroTransPointCache",new Map),Zt(this,"buyableUnitList",[ox.getVO(),ox.getVO(),ox.getVO(),ox.getVO(),ox.getVO(),ox.getVO()]),Zt(this,"lastBuyRefreshTime",0),Zt(this,"heroPresets",[]),Zt(this,"honorNumberMax",0),Zt(this,"_lastAppliedHeroPresetSlot",-1)}
- s<5;
+ s<6;
ConfigManager 2 hunks, 2 statements
- this.userId=i.userId,this.name=i.name,this.uid=i.uid,this.userType=i.userType,this.language=i.language,this.timezone=Number(i.timezone),this.lastLoginTime=i.lastLoginTime||"",this.lastGoldUpdateTime=i.lastGoldUpdateTime||"",s&&BD.setTrusted(t.safeNum(i.gold,this.gold)),this.goldPerSec=Number(i.goldPerSec)||100,this.gem=t.safeNum(i.gem,this.gem),this.redGem=t.safeNum(i.redGem,this.redGem),this.medal=t.safeNum(i.medal,this.medal),this.honorCoin=t.safeNum(i.honorCoin,this.honorCoin);
+ this.userId!==i.userId&&(this.hideRankingTeam=!1),"boolean"==typeof i.hideRankingTeam&&(this.hideRankingTeam=i.hideRankingTeam),this.userId=i.userId,this.name=i.name,this.uid=i.uid,this.userType=i.userType,this.language=i.language,this.timezone=Number(i.timezone),this.lastLoginTime=i.lastLoginTime||"",this.lastGoldUpdateTime=i.lastGoldUpdateTime||"",s&&uG.setTrusted(t.safeNum(i.gold,this.gold)),this.goldPerSec=Number(i.goldPerSec)||100,this.gem=t.safeNum(i.gem,this.gem),this.redGem=t.safeNum(i.redGem,this.redGem),this.medal=t.safeNum(i.medal,this.medal),this.honorCoin=t.safeNum(i.honorCoin,this.honorCoin);
- Xt(qD,"accountId",""),Xt(qD,"currentServer",0),Xt(qD,"platform",""),Xt(qD,"platformId",""),Xt(qD,"regTime",""),Xt(qD,"agreeTime",""),Xt(qD,"optOut",!1),Xt(qD,"withdrawYn",""),Xt(qD,"withdrawTime",""),Xt(qD,"email",""),Xt(qD,"userId",""),Xt(qD,"name",""),Xt(qD,"uid",""),Xt(qD,"userType",0),Xt(qD,"language","en"),Xt(qD,"timezone",0),Xt(qD,"lastLoginTime",""),Xt(qD,"lastGoldUpdateTime",""),Xt(qD,"goldPerSec",100),Xt(qD,"walletType",""),Xt(qD,"walletAddress",""),Xt(qD,"createdJustNow",!1),Xt(qD,"tribe",0),Xt(qD,"reviveQuestGoldBuff",0),Xt(qD,"reviveQuestDurationBuff",0),Xt(qD,"reviveQuestOpenCostBuff",0),Xt(qD,"maxWave",1),Xt(qD,"gem",0),Xt(qD,"redGem",0),Xt(qD,"accuMedal",0),Xt(qD,"accuWave",0),Xt(qD,"medalBuyCount",0),Xt(qD,"needRevive",!1),Xt(qD,"medal",0),Xt(qD,"honorCoin",0),Xt(qD,"_speed15",gD(gP.SP15_SENTINEL)),Xt(qD,"_speed20",gD(gP.SP20_SENTINEL)),Xt(qD,"medalBuffLevel",0),Xt(qD,"goldBuffLevel",0),Xt(qD,"daySkipLevel",0),Xt(qD,"lastReviveTime",0),Xt(qD,"numRevive",0),Xt(qD,"numRevive30",0),Xt(qD,"numReviveHoldActive",!1),Xt(qD,"pendingNumRevive",-1),Xt(qD,"numReviveHoldTimer",null),Xt(qD,"heart",0),Xt(qD,"adsEndTime",0),Xt(qD,"assistantEndTime",0),Xt(qD,"assistantPassEndTime",0),Xt(qD,"soulRestStartAt",0),Xt(qD,"soulRestEndAt",0),Xt(qD,"bestMedalPerMin",0),Xt(qD,"bestMedalPerMinAt",0),Xt(qD,"soulRestNextStartAt",0),Xt(qD,"soulRestSkipCount",0),Xt(qD,"castleKindNum",10001),Xt(qD,"castleLevel",0),Xt(qD,"castleEnhance",0),Xt(qD,"castleGoldLevels",[0,0,0,0,0,0,0,0,0,0]),Xt(qD,"castleMedalLevels",[0,0,0,0,0,0,0,0,0,0]),Xt(qD,"questsLevels",[0,0,0,0,0,0,0,0,0,0]),Xt(qD,"maxTeamSlots",5),Xt(qD,"unitsSlotIds",[]),Xt(qD,"unitsSlotKindNums",[]),Xt(qD,"unitsSlotLevels",[]),Xt(qD,"unitsSlotEnhances",[]),Xt(qD,"ownedUnitKindNums",[]),Xt(qD,"ownedUnitCounts",[]),Xt(qD,"treasuresMaxSlots",5),Xt(qD,"treasuresKindNums",[]),Xt(qD,"treasuresLevels",[]),Xt(qD,"treasuresOwned",[]),Xt(qD,"skillsKindNums",[]),Xt(qD,"activeSkills",[1,-1,-1]),Xt(qD,"_godBless",gD(gP.GODBLESS_SENTINEL)),Xt(qD,"_skillSpeed",gD(gP.SKILLSPEED_SENTINEL));
+ Zt(yG,"accountId",""),Zt(yG,"currentServer",0),Zt(yG,"platform",""),Zt(yG,"platformId",""),Zt(yG,"regTime",""),Zt(yG,"agreeTime",""),Zt(yG,"optOut",!1),Zt(yG,"withdrawYn",""),Zt(yG,"withdrawTime",""),Zt(yG,"email",""),Zt(yG,"userId",""),Zt(yG,"name",""),Zt(yG,"uid",""),Zt(yG,"userType",0),Zt(yG,"hideRankingTeam",!1),Zt(yG,"language","en"),Zt(yG,"timezone",0),Zt(yG,"lastLoginTime",""),Zt(yG,"lastGoldUpdateTime",""),Zt(yG,"goldPerSec",100),Zt(yG,"walletType",""),Zt(yG,"walletAddress",""),Zt(yG,"createdJustNow",!1),Zt(yG,"tribe",0),Zt(yG,"reviveQuestGoldBuff",0),Zt(yG,"reviveQuestDurationBuff",0),Zt(yG,"reviveQuestOpenCostBuff",0),Zt(yG,"maxWave",1),Zt(yG,"gem",0),Zt(yG,"redGem",0),Zt(yG,"accuMedal",0),Zt(yG,"accuWave",0),Zt(yG,"medalBuyCount",0),Zt(yG,"needRevive",!1),Zt(yG,"medal",0),Zt(yG,"honorCoin",0),Zt(yG,"_speed15",HD(HP.SP15_SENTINEL)),Zt(yG,"_speed20",HD(HP.SP20_SENTINEL)),Zt(yG,"medalBuffLevel",0),Zt(yG,"goldBuffLevel",0),Zt(yG,"daySkipLevel",0),Zt(yG,"lastReviveTime",0),Zt(yG,"numRevive",0),Zt(yG,"numRevive30",0),Zt(yG,"numReviveHoldActive",!1),Zt(yG,"pendingNumRevive",-1),Zt(yG,"numReviveHoldTimer",null),Zt(yG,"heart",0),Zt(yG,"adsEndTime",0),Zt(yG,"assistantEndTime",0),Zt(yG,"assistantPassEndTime",0),Zt(yG,"soulRestStartAt",0),Zt(yG,"soulRestEndAt",0),Zt(yG,"bestMedalPerMin",0),Zt(yG,"bestMedalPerMinAt",0),Zt(yG,"soulRestNextStartAt",0),Zt(yG,"soulRestSkipCount",0),Zt(yG,"castleKindNum",10001),Zt(yG,"castleLevel",0),Zt(yG,"castleEnhance",0),Zt(yG,"castleGoldLevels",[0,0,0,0,0,0,0,0,0,0]),Zt(yG,"castleMedalLevels",[0,0,0,0,0,0,0,0,0,0]),Zt(yG,"questsLevels",[0,0,0,0,0,0,0,0,0,0]),Zt(yG,"maxTeamSlots",5),Zt(yG,"unitsSlotIds",[]),Zt(yG,"unitsSlotKindNums",[]),Zt(yG,"unitsSlotLevels",[]),Zt(yG,"unitsSlotEnhances",[]),Zt(yG,"ownedUnitKindNums",[]),Zt(yG,"ownedUnitCounts",[]),Zt(yG,"treasuresMaxSlots",5),Zt(yG,"treasuresKindNums",[]),Zt(yG,"treasuresLevels",[]),Zt(yG,"treasuresOwned",[]),Zt(yG,"skillsKindNums",[]),Zt(yG,"activeSkills",[1,-1,-1]),Zt(yG,"_godBless",HD(HP.GODBLESS_SENTINEL)),Zt(yG,"_skillSpeed",HD(HP.SKILLSPEED_SENTINEL));
BasePopup 1 hunks, 2 statements
+ get className(){
+ return""}
BasePopup2 1 hunks, 2 statements
+ get className(){
+ return""}
SafeAreaTopContent 2 hunks, 2 statements
- s=this.realm===xB.DEAD_LAND?this.isNight?t.DEAD_LAND_NIGHT_COLOR:t.DEAD_LAND_DAY_COLOR:(this.isNight?this.seasonNightColor:this.seasonDayColor)[this.currentSeason-1],i?(zk.killTweensOf(this._rgb),this.bg.tint=s,this._rgb.r=s>>16&255,this._rgb.g=s>>8&255,this._rgb.b=255&s):this.tweenToColor(s)}
+ s=this.realm===hU.DEAD_LAND?this.isNight?t.DEAD_LAND_NIGHT_COLOR:t.DEAD_LAND_DAY_COLOR:this.realm===hU.FIRE_LAND?this.isNight?t.FIRE_LAND_NIGHT_COLOR:t.FIRE_LAND_DAY_COLOR:(this.isNight?this.seasonNightColor:this.seasonDayColor)[this.currentSeason-1],i?(MR.killTweensOf(this._rgb),this.bg.tint=s,this._rgb.r=s>>16&255,this._rgb.g=s>>8&255,this._rgb.b=255&s):this.tweenToColor(s)}
- qt(iU,"SafeAreaTopContent"),Xt(iU,"instance"),Xt(iU,"DEAD_LAND_DAY_COLOR",3023936),Xt(iU,"DEAD_LAND_NIGHT_COLOR",1182748),Xt(iU,"DUNGEON_COLORS",{
+ Qt(DU,"SafeAreaTopContent"),Zt(DU,"instance"),Zt(DU,"DEAD_LAND_DAY_COLOR",3023936),Zt(DU,"DEAD_LAND_NIGHT_COLOR",1182748),Zt(DU,"FIRE_LAND_DAY_COLOR",4856846),Zt(DU,"FIRE_LAND_NIGHT_COLOR",1837062),Zt(DU,"DUNGEON_COLORS",{
DayNightFx 1 hunks, 2 statements
- const a=s===xB.DEAD_LAND;
- this.fireflyRoot.visible=!a,this.soulRoot.visible=a,this.setAmbient(a?h?1:.65:h?1:0,e)}
+ const a=s===hU.DEAD_LAND,c=s===hU.FIRE_LAND;
+ this.fireflyRoot.visible=!a&&!c,this.soulRoot.visible=a,this.setAmbient(c?0:a?h?1:.65:h?1:0,e)}
GreenEagle1 2 hunks, 2 statements
- )()),Xt(j0,"attackableListPool",[]),Xt(j0,"BURN_EFFECT_OFFSET_Y",2);
+ )()),Zt(B1,"attackableListPool",[]),Zt(B1,"BURN_EFFECT_OFFSET_Y",2),Zt(B1,"HIT_TINT_FRAMES",4),Zt(B1,"HIT_TINT_COLOR",16743034);
- super.initializeData(),this.className=gR.GreenEagle1,this.hitHeight=25,this.radius=7,this.unitType=lR.RANGE,this.weaponClass=Bj.GreenEagleBall1,this.idleFrames=new HH(0,19),this.moveFrames=new HH(20,37),this.attackFrames=new HH(38,67),this.skillFrames=new HH(38,67),this.dieFrames=new HH(68,100),this.objAtk={
+ super.initializeData(),this.className=HR.GreenEagle1,this.hitHeight=25,this.radius=7,this.unitType=GR.RANGE,this.weaponClass=PK.GreenEagleBall1,this.idleFrames=new DH(0,18),this.moveFrames=new DH(19,34),this.attackFrames=new DH(35,63),this.skillFrames=new DH(35,63),this.dieFrames=new DH(64,76),this.objAtk={
FireSpirit1 2 hunks, 2 statements
- l.owner=this,l.target=null,l.setBattleController(c),l.setData(n),l.initializeData(),l.initOrb(i,s,e,t.ORB_SPEED,n,h,this.orbThrowSign,r,r?t.ORB_SCALE_CHILD:t.ORB_SCALE_MAIN,o,t.ORB_HOME_DIST,n,a),l.play(),this.orbThrowSign=-this.orbThrowSign}
+ l.owner=this,l.target=null,l.setBattleController(c),l.setData(n),l.initializeData(),l.initOrb(i,s,e,t.ORB_SPEED,n,h,this.orbThrowSign,r,r?t.ORB_SCALE_CHILD:t.ORB_SCALE_MAIN,o,t.ORB_HOME_DIST,n*t.ORB_PATH_RATIO,a),l.play(),this.orbThrowSign=-this.orbThrowSign}
- qt(u1,"FireSpirit1"),Xt(u1,"SKILL_MODE",6),Xt(u1,"BASIC_MODE",4),Xt(u1,"BASIC_SHOTS",3),Xt(u1,"BASIC_SHOT_DELAY",3),Xt(u1,"WHIRL_COUNT",3),Xt(u1,"WHIRL_COUNT_E",4),Xt(u1,"WHIRL_SPREAD",.34),Xt(u1,"WHIRL_SPEED",3.4),Xt(u1,"WHIRL_RANGE",210),Xt(u1,"WHIRL_DPS",.5),Xt(u1,"WHIRL_SCALE",.45),Xt(u1,"WHIRL_HIT_R",26),Xt(u1,"WHIRL_STAGGER_BACK",16),Xt(u1,"WHIRL_JITTER",.05),Xt(u1,"STORM_COUNT",10),Xt(u1,"STORM_COUNT_E",12),Xt(u1,"STORM_SPEED",3),Xt(u1,"STORM_RANGE",330),Xt(u1,"STORM_SCALE",.85),Xt(u1,"STORM_SCALE_Y",1.45),Xt(u1,"STORM_HIT_R",42),Xt(u1,"STORM_DPS",.7),Xt(u1,"STORM_JITTER",.1),Xt(u1,"STORM_TRAIL_STEP",62),Xt(u1,"TRAIL_LIFE",150),Xt(u1,"TRAIL_RADIUS",34),Xt(u1,"TRAIL_TICK",30),Xt(u1,"TRAIL_DMG",.12),Xt(u1,"TRAIL_MAX",60),Xt(u1,"TRAIL_SCALE",.75),Xt(u1,"RUSH_MORPH_FRAMES",12),Xt(u1,"RUSH_SPEED",5.2),Xt(u1,"RUSH_MAX_FRAMES",70),Xt(u1,"RUSH_STAY_FRAMES",40),Xt(u1,"RUSH_BACK_SPEED",6.5),Xt(u1,"RUSH_BACK_MAX",70),Xt(u1,"RUSH_RANGE",300),Xt(u1,"RUSH_ARRIVE_DIST",14),Xt(u1,"RUSH_HIT_RADIUS",52),Xt(u1,"RUSH_TICK",12),Xt(u1,"RUSH_TICK_DMG",.45),Xt(u1,"RUSH_PILLAR_SCALE",1),Xt(u1,"RUSH_BURN_TICK",.1),Xt(u1,"RUSH_BURN_DURATION",180),Xt(u1,"RUSH_BURN_INTERVAL",30),Xt(u1,"RUSH_BURN_DOT_ID",72),Xt(u1,"SUPER_COUNT",5),Xt(u1,"SUPER_COUNT_E",7),Xt(u1,"SUPER_OUTER_R",150),Xt(u1,"SUPER_INNER_R",20),Xt(u1,"SUPER_SPIN",.075),Xt(u1,"SUPER_LIFE",180),Xt(u1,"SUPER_ARRIVE",.9),Xt(u1,"SUPER_DPS",1.4),Xt(u1,"SUPER_RANGE",260),Xt(u1,"TORNADO_COUNT",3),Xt(u1,"TORNADO_COUNT_E",4),Xt(u1,"SPREAD_RADIUS",140),Xt(u1,"GATHER_START_RADIUS",120),Xt(u1,"INNER_RADIUS",12),Xt(u1,"GATHER_END_RADIUS",60),Xt(u1,"SCATTER_SPIN",.07),Xt(u1,"GATHER_SPIN",.08),Xt(u1,"SCATTER_FRAMES",190),Xt(u1,"GAP_FRAMES",90),Xt(u1,"GATHER_FRAMES",180),Xt(u1,"GATHER_DIST",260),Xt(u1,"MIN_GATHER_DIST",120),Xt(u1,"TORNADO_DPS",1),Xt(u1,"ORBIT_COUNT",3),Xt(u1,"ORBIT_COUNT_E",4),Xt(u1,"ORBIT_RX",42),Xt(u1,"ORBIT_RY",14),Xt(u1,"ORBIT_H",-26),Xt(u1,"ORBIT_SPIN",.032),Xt(u1,"ORBIT_BOB",5),Xt(u1,"ORBIT_BOB_SPEED",.07),Xt(u1,"ORBIT_RAD_MIN",.72),Xt(u1,"ORBIT_RAD_MAX",1.32),Xt(u1,"ORBIT_SPIN_MIN",.82),Xt(u1,"ORBIT_SPIN_MAX",1.22),Xt(u1,"ORBIT_H_VAR",13),Xt(u1,"ORBIT_RUSH_SPIN",.9),Xt(u1,"ORBIT_RUSH_TIGHT",.2),Xt(u1,"JOIN_BLEND",20),Xt(u1,"CATCH_SETTLE",.3),Xt(u1,"CATCH_SETTLE_EASE",.94),Xt(u1,"CATCH_SPARK_SCALE",.3),Xt(u1,"CATCH_SPARK_LIFE",30),Xt(u1,"ORBIT_LAG",.14),Xt(u1,"ORBIT_LAG_MAX",130),Xt(u1,"DEATH_SCATTER_SPD",3.4),Xt(u1,"DEATH_SCATTER_LIFE",26),Xt(u1,"ORBIT_SCALE",.42),Xt(u1,"ORBIT_DEPTH",.04),Xt(u1,"BOOM_SPEED",5.6),Xt(u1,"BOOM_CURVE",.6),Xt(u1,"BOOM_OVERSHOOT",80),Xt(u1,"BOOM_MIN_TRAVEL",300),Xt(u1,"BOOM_SCALE",.44),Xt(u1,"BOOM_SCALE_Y",1.2),Xt(u1,"BOOM_GROW",9),Xt(u1,"BOOM_HIT_R",34),Xt(u1,"BOOM_DPS",.75),Xt(u1,"BOOM_MAX_TARGETS",6),Xt(u1,"SKILL_MAX_TARGETS",8),Xt(u1,"BOOM_TIMEOUT",1320),Xt(u1,"EMPTY_RETRY",8),Xt(u1,"JUGGLE_MAX",5),Xt(u1,"JUGGLE_PER",.15),Xt(u1,"OVERHEAT_HOLD",180),Xt(u1,"JUGGLE_BUFF_DUR",3600),Xt(u1,"JUGGLE_FREEZE",90),Xt(u1,"SKILL_BOOM_SPEED",4.8),Xt(u1,"SKILL_BOOM_CURVE",.7),Xt(u1,"SKILL_BOOM_SCALE",.54),Xt(u1,"SKILL_BOOM_SCALE_Y",1.4),Xt(u1,"SKILL_BOOM_HIT_R",48),Xt(u1,"SKILL_BOOM_DPS",.8),Xt(u1,"SKILL_BOOM_HOPS",3),Xt(u1,"SKILL_EXP_DMG",1),Xt(u1,"SKILL_EXP_RADIUS",92),Xt(u1,"SKILL_EXP_BURN",.15),Xt(u1,"SKILL_EXP_SCALE",1.1),Xt(u1,"SKILL_ARM_FRAMES",22),Xt(u1,"SKILL_MAX_TRAVEL",330),Xt(u1,"RELIGHT_DELAY",34),Xt(u1,"BLOOM_FRAMES",24),Xt(u1,"BLOOM_STAGGER",8),Xt(u1,"BLOOM_SPIN",2.4),Xt(u1,"BLOOM_START_RAD",.12),Xt(u1,"BLOOM_START_SCL",.2),Xt(u1,"SKILL_OVERSHOOT",70),Xt(u1,"SKILL_MIN_TRAVEL",120),Xt(u1,"SKILL_BOOM_GROW",12),Xt(u1,"SKILL_HOP_RANGE",180),Xt(u1,"SKILL_SECTOR_PAD",1.25),Xt(u1,"ORB_SPEED",15.5),Xt(u1,"ORB_SHOTS",2),Xt(u1,"ORB_DMG",.45),Xt(u1,"ORB_CHILD_DMG",.35),Xt(u1,"ORB_CHILD_REPEAT",.22),Xt(u1,"ORB_SPLIT",4),Xt(u1,"ORB_SPLIT_E",5),Xt(u1,"ORB_CHILD_RANGE",380),Xt(u1,"ORB_SCALE_MAIN",.78),Xt(u1,"ORB_SCALE_CHILD",.46),Xt(u1,"ORB_SPREAD_ARC",1.5),Xt(u1,"ORB_SPREAD_KICK",.3),Xt(u1,"ORB_H",-26),Xt(u1,"ORB_HOME_DIST",54),Xt(u1,"ORB_SCATTER",8),Xt(u1,"ORB_SCATTER_E",11),Xt(u1,"ORB_FUSE",30),Xt(u1,"ORB_SC_ARM",8),Xt(u1,"ORB_SC_SPD_MIN",5),Xt(u1,"ORB_SC_SPD_MAX",15),Xt(u1,"ORB_SC_JITTER",.16),Xt(u1,"ORB_SC_AIM_R",450),Xt(u1,"ORB_SC_AIM_JIT",.25),Xt(u1,"ORB_SC_SCALE",.7),Xt(u1,"ORB_BLAST_R",78),Xt(u1,"ORB_BLAST_DMG",1.15),Xt(u1,"ORB_BLAST_BURN",.12),Xt(u1,"ORB_BURN_DUR",180),Xt(u1,"ORB_BURN_INT",30),Xt(u1,"ORB_BURN_ID",74);
+ Qt(n2,"FireSpirit1"),Zt(n2,"SKILL_MODE",6),Zt(n2,"BASIC_MODE",4),Zt(n2,"BASIC_SHOTS",3),Zt(n2,"BASIC_SHOT_DELAY",3),Zt(n2,"WHIRL_COUNT",3),Zt(n2,"WHIRL_COUNT_E",4),Zt(n2,"WHIRL_SPREAD",.34),Zt(n2,"WHIRL_SPEED",3.4),Zt(n2,"WHIRL_RANGE",210),Zt(n2,"WHIRL_DPS",.5),Zt(n2,"WHIRL_SCALE",.45),Zt(n2,"WHIRL_HIT_R",26),Zt(n2,"WHIRL_STAGGER_BACK",16),Zt(n2,"WHIRL_JITTER",.05),Zt(n2,"STORM_COUNT",10),Zt(n2,"STORM_COUNT_E",12),Zt(n2,"STORM_SPEED",3),Zt(n2,"STORM_RANGE",330),Zt(n2,"STORM_SCALE",.85),Zt(n2,"STORM_SCALE_Y",1.45),Zt(n2,"STORM_HIT_R",42),Zt(n2,"STORM_DPS",.7),Zt(n2,"STORM_JITTER",.1),Zt(n2,"STORM_TRAIL_STEP",62),Zt(n2,"TRAIL_LIFE",150),Zt(n2,"TRAIL_RADIUS",34),Zt(n2,"TRAIL_TICK",30),Zt(n2,"TRAIL_DMG",.12),Zt(n2,"TRAIL_MAX",60),Zt(n2,"TRAIL_SCALE",.75),Zt(n2,"RUSH_MORPH_FRAMES",12),Zt(n2,"RUSH_SPEED",5.2),Zt(n2,"RUSH_MAX_FRAMES",70),Zt(n2,"RUSH_STAY_FRAMES",40),Zt(n2,"RUSH_BACK_SPEED",6.5),Zt(n2,"RUSH_BACK_MAX",70),Zt(n2,"RUSH_RANGE",300),Zt(n2,"RUSH_ARRIVE_DIST",14),Zt(n2,"RUSH_HIT_RADIUS",52),Zt(n2,"RUSH_TICK",12),Zt(n2,"RUSH_TICK_DMG",.45),Zt(n2,"RUSH_PILLAR_SCALE",1),Zt(n2,"RUSH_BURN_TICK",.1),Zt(n2,"RUSH_BURN_DURATION",180),Zt(n2,"RUSH_BURN_INTERVAL",30),Zt(n2,"RUSH_BURN_DOT_ID",72),Zt(n2,"SUPER_COUNT",5),Zt(n2,"SUPER_COUNT_E",7),Zt(n2,"SUPER_OUTER_R",150),Zt(n2,"SUPER_INNER_R",20),Zt(n2,"SUPER_SPIN",.075),Zt(n2,"SUPER_LIFE",180),Zt(n2,"SUPER_ARRIVE",.9),Zt(n2,"SUPER_DPS",1.4),Zt(n2,"SUPER_RANGE",260),Zt(n2,"TORNADO_COUNT",3),Zt(n2,"TORNADO_COUNT_E",4),Zt(n2,"SPREAD_RADIUS",140),Zt(n2,"GATHER_START_RADIUS",120),Zt(n2,"INNER_RADIUS",12),Zt(n2,"GATHER_END_RADIUS",60),Zt(n2,"SCATTER_SPIN",.07),Zt(n2,"GATHER_SPIN",.08),Zt(n2,"SCATTER_FRAMES",190),Zt(n2,"GAP_FRAMES",90),Zt(n2,"GATHER_FRAMES",180),Zt(n2,"GATHER_DIST",260),Zt(n2,"MIN_GATHER_DIST",120),Zt(n2,"TORNADO_DPS",1),Zt(n2,"ORBIT_COUNT",3),Zt(n2,"ORBIT_COUNT_E",4),Zt(n2,"ORBIT_RX",42),Zt(n2,"ORBIT_RY",14),Zt(n2,"ORBIT_H",-26),Zt(n2,"ORBIT_SPIN",.032),Zt(n2,"ORBIT_BOB",5),Zt(n2,"ORBIT_BOB_SPEED",.07),Zt(n2,"ORBIT_RAD_MIN",.72),Zt(n2,"ORBIT_RAD_MAX",1.32),Zt(n2,"ORBIT_SPIN_MIN",.82),Zt(n2,"ORBIT_SPIN_MAX",1.22),Zt(n2,"ORBIT_H_VAR",13),Zt(n2,"ORBIT_RUSH_SPIN",.9),Zt(n2,"ORBIT_RUSH_TIGHT",.2),Zt(n2,"JOIN_BLEND",20),Zt(n2,"CATCH_SETTLE",.3),Zt(n2,"CATCH_SETTLE_EASE",.94),Zt(n2,"CATCH_SPARK_SCALE",.3),Zt(n2,"CATCH_SPARK_LIFE",30),Zt(n2,"ORBIT_LAG",.14),Zt(n2,"ORBIT_LAG_MAX",130),Zt(n2,"DEATH_SCATTER_SPD",3.4),Zt(n2,"DEATH_SCATTER_LIFE",26),Zt(n2,"ORBIT_SCALE",.42),Zt(n2,"ORBIT_DEPTH",.04),Zt(n2,"BOOM_SPEED",5.6),Zt(n2,"BOOM_CURVE",.6),Zt(n2,"BOOM_OVERSHOOT",80),Zt(n2,"BOOM_MIN_TRAVEL",300),Zt(n2,"BOOM_SCALE",.44),Zt(n2,"BOOM_SCALE_Y",1.2),Zt(n2,"BOOM_GROW",9),Zt(n2,"BOOM_HIT_R",34),Zt(n2,"BOOM_DPS",.75),Zt(n2,"BOOM_MAX_TARGETS",6),Zt(n2,"SKILL_MAX_TARGETS",8),Zt(n2,"BOOM_TIMEOUT",1320),Zt(n2,"EMPTY_RETRY",8),Zt(n2,"JUGGLE_MAX",5),Zt(n2,"JUGGLE_PER",.15),Zt(n2,"OVERHEAT_HOLD",180),Zt(n2,"JUGGLE_BUFF_DUR",3600),Zt(n2,"JUGGLE_FREEZE",90),Zt(n2,"SKILL_BOOM_SPEED",4.8),Zt(n2,"SKILL_BOOM_CURVE",.7),Zt(n2,"SKILL_BOOM_SCALE",.54),Zt(n2,"SKILL_BOOM_SCALE_Y",1.4),Zt(n2,"SKILL_BOOM_HIT_R",48),Zt(n2,"SKILL_BOOM_DPS",.8),Zt(n2,"SKILL_BOOM_HOPS",3),Zt(n2,"SKILL_EXP_DMG",1),Zt(n2,"SKILL_EXP_RADIUS",92),Zt(n2,"SKILL_EXP_BURN",.15),Zt(n2,"SKILL_EXP_SCALE",1.1),Zt(n2,"SKILL_ARM_FRAMES",22),Zt(n2,"SKILL_MAX_TRAVEL",330),Zt(n2,"RELIGHT_DELAY",34),Zt(n2,"BLOOM_FRAMES",24),Zt(n2,"BLOOM_STAGGER",8),Zt(n2,"BLOOM_SPIN",2.4),Zt(n2,"BLOOM_START_RAD",.12),Zt(n2,"BLOOM_START_SCL",.2),Zt(n2,"SKILL_OVERSHOOT",70),Zt(n2,"SKILL_MIN_TRAVEL",120),Zt(n2,"SKILL_BOOM_GROW",12),Zt(n2,"SKILL_HOP_RANGE",180),Zt(n2,"SKILL_SECTOR_PAD",1.25),Zt(n2,"ORB_SPEED",15.5),Zt(n2,"ORB_SHOTS",2),Zt(n2,"ORB_DMG",.45),Zt(n2,"ORB_CHILD_DMG",.35),Zt(n2,"ORB_CHILD_REPEAT",.22),Zt(n2,"ORB_PATH_RATIO",.5),Zt(n2,"ORB_SPLIT",4),Zt(n2,"ORB_SPLIT_E",5),Zt(n2,"ORB_CHILD_RANGE",380),Zt(n2,"ORB_SCALE_MAIN",.78),Zt(n2,"ORB_SCALE_CHILD",.46),Zt(n2,"ORB_SPREAD_ARC",1.5),Zt(n2,"ORB_SPREAD_KICK",.3),Zt(n2,"ORB_H",-26),Zt(n2,"ORB_HOME_DIST",54),Zt(n2,"ORB_SCATTER",8),Zt(n2,"ORB_SCATTER_E",11),Zt(n2,"ORB_FUSE",30),Zt(n2,"ORB_SC_ARM",8),Zt(n2,"ORB_SC_SPD_MIN",5),Zt(n2,"ORB_SC_SPD_MAX",15),Zt(n2,"ORB_SC_JITTER",.16),Zt(n2,"ORB_SC_AIM_R",450),Zt(n2,"ORB_SC_AIM_JIT",.25),Zt(n2,"ORB_SC_SCALE",.7),Zt(n2,"ORB_BLAST_R",78),Zt(n2,"ORB_BLAST_DMG",1.15),Zt(n2,"ORB_BLAST_BURN",.12),Zt(n2,"ORB_BURN_DUR",180),Zt(n2,"ORB_BURN_INT",30),Zt(n2,"ORB_BURN_ID",74);
RewardItem 2 hunks, 2 statements
- var f6=(t=>(t.gem="gem",t.redGem="redGem",t.gold="gold",t.medal="medal",t.honorCoin="honorCoin",t.guildPoint="guildPoint",t.guildCoin="guildCoin",t.raidCoin="raidCoin",t.runeTicket="runeTicket",t.hammer="hammer",t.hero="hero",t.instant="instant",t.ticket="ticket",t.trans="trans",t.pet="pet",t.petTicket="petTicket",t.petSelect="petSelect",t.heroGacha="heroGacha",t.heroSelect="heroSelect",t.heroTrans="heroTrans",t.treasure="treasure",t.treasureGacha="treasureGacha",t.treasureTrans="treasureTrans",t.ads="ads",t.speed="speed",t.assistant="assistant",t.dungeonTicket="dungeonTicket",t.miniAscentEnergy="miniAscentEnergy",t))(f6||{
+ var d4=(t=>(t.gem="gem",t.redGem="redGem",t.gold="gold",t.medal="medal",t.honorCoin="honorCoin",t.guildPoint="guildPoint",t.guildCoin="guildCoin",t.raidCoin="raidCoin",t.runeTicket="runeTicket",t.hammer="hammer",t.hero="hero",t.trans="trans",t.massive="massive",t.pet="pet",t.petTicket="petTicket",t.petSelect="petSelect",t.heroGacha="heroGacha",t.heroSelect="heroSelect",t.heroTrans="heroTrans",t.treasure="treasure",t.treasureGacha="treasureGacha",t.treasureTrans="treasureTrans",t.buff="buff",t.instant="instant",t.ticket="ticket",t.pass="pass",t.ads="ads",t.speed="speed",t.assistant="assistant",t.dungeonTicket="dungeonTicket",t.miniAscentEnergy="miniAscentEnergy",t.bless="bless",t))(d4||{
- t==f6.gem?(r="UI_SHOP_GEM",h=.85):t==f6.redGem?(r="UI_SHOP_RED_GEM",h=.83):t==f6.gold?(r="m_gold",h=.7):t==f6.honorCoin?(r="UI_COIN_Big",h=.8):t==f6.hammer?(r="Icon_Hammer",h=1.5):t==f6.dungeonTicket?(r="DungeonTick",h=.8):t==f6.miniAscentEnergy||n==f6.miniAscentEnergy?(r="ui_energy",h=56/30):t==f6.hero?(this.heroIcon.setDataWithKindNum(e),this.heroIcon.visible=!0):t==f6.ticket&&n==f6.heroGacha?r="Ticket_HeroGacha":t==f6.ticket&&n==f6.heroSelect?(r="Ticket_HeroSelect",h=.85):t==f6.trans&&n==f6.hero?r=9==this._grade?"Ticket_HeroTrans2":"Ticket_HeroTrans":t==f6.pet?(this.petIcon.setPet(e,1),this.petIcon.visible=!0):t==f6.petTicket||n==f6.petTicket||t==f6.ticket&&n==f6.pet?(r="PetTick",h=.9):t==f6.petSelect||n==f6.petSelect||t==f6.ticket&&n==f6.petSelect?(r="Ticket_PetSelect",h=.9):t==f6.ticket&&n==f6.treasureGacha?(r="Ticket_TreasureGacha",h=.95):t==f6.trans&&n==f6.treasure?r=7===this._grade?"Ticket_TreasureTrans7":"Ticket_TreasureTrans6":t==f6.ads?(r="AdsRemove",h=.7):t==f6.speed?(r="UI_SHOP_SPEED2",h=.8):t==f6.assistant?(r="Package_Secretary",h=.7):t==f6.guildCoin||t==f6.guildPoint?(r="GUILD_COIN",h=1.6):t==f6.raidCoin?(r="RaidCoin_on",h=1.5):t==f6.runeTicket&&(r="RuneTicket",h=1.2),r&&(this.img.scale=h,this.img.texture=eS.getTexture("UI_Ekkorr",r),this.img.visible=!0,this.bg.visible=!0),t==f6.ads||t==f6.speed||t==f6.assistant?this.lblNum.text=`${
+ t==d4.gem?(r="UI_SHOP_GEM",h=.85):t==d4.redGem?(r="UI_SHOP_RED_GEM",h=.83):t==d4.gold?(r="m_gold",h=.7):t==d4.honorCoin?(r="UI_COIN_Big",h=.8):t==d4.hammer?(r="Icon_Hammer",h=1.5):t==d4.dungeonTicket||n==d4.dungeonTicket?(r="DungeonTick",h=.8):t==d4.miniAscentEnergy||n==d4.miniAscentEnergy?(r="ui_energy",h=56/30):t==d4.hero?(this.heroIcon.setDataWithKindNum(e),this.heroIcon.visible=!0):t==d4.ticket&&n==d4.heroGacha?r="Ticket_HeroGacha":t==d4.ticket&&n==d4.heroSelect?(r="Ticket_HeroSelect",h=.85):t==d4.trans&&n==d4.hero?r=9==this._grade?"Ticket_HeroTrans2":"Ticket_HeroTrans":t==d4.trans&&n==d4.massive?r="Ticket_UnitBuy":t==d4.pet?(this.petIcon.setPet(e,1),this.petIcon.visible=!0):t==d4.petTicket||n==d4.petTicket||t==d4.ticket&&n==d4.pet?(r="PetTick",h=.9):t==d4.petSelect||n==d4.petSelect||t==d4.ticket&&n==d4.petSelect?(r="Ticket_PetSelect",h=.9):t==d4.ticket&&n==d4.treasureGacha?(r="Ticket_TreasureGacha",h=.95):t==d4.trans&&n==d4.treasure?r=7===this._grade?"Ticket_TreasureTrans7":"Ticket_TreasureTrans6":t==d4.ads||n==d4.ads?(r="AdsRemove",h=.7):t==d4.speed||n==d4.speed?(r="UI_SHOP_SPEED2",h=.8):t==d4.assistant||n==d4.assistant?(r="Package_Secretary",h=.7):t==d4.guildCoin||t==d4.guildPoint?(r="GUILD_COIN",h=1.6):t==d4.raidCoin?(r="RaidCoin_on",h=1.5):t==d4.runeTicket&&(r="RuneTicket",h=1.2),r&&(this.img.scale=h,this.img.texture=kS.getTexture("UI_Ekkorr",r),this.img.visible=!0,this.bg.visible=!0),t==d4.ads||t==d4.speed||t==d4.assistant?this.lblNum.text=`${
Err 2 hunks, 2 statements
- ...b,domain:E}
+ ...M,domain:b}
- const y=n.concatBytes(...A),T=_;
+ const A=n.concatBytes(...E),T=_;
Dr 2 hunks, 2 statements
- function get(t){
+ function wnt(t){
- qt(get,"Dr"),set.ghash=get((t,i)=>new det(t,i)),set.polyval=get((t,i)=>new pet(t,i)),Object.defineProperty(iet,"__esModule",{
+ Qt(wnt,"Dr"),nnt.ghash=wnt((t,i)=>new fnt(t,i)),nnt.polyval=wnt((t,i)=>new gnt(t,i)),Object.defineProperty(ent,"__esModule",{
BasePopup3 1 hunks, 2 statements
+ get className(){
+ return""}
HelpDetailPopup 2 hunks, 2 statements
- ...OL.DEFAULT_FONT_OPTION_18,fontSize:32,lineHeight:40}
+ ...sD.DEFAULT_FONT_OPTION_18,fontSize:32,lineHeight:40}
- ...OL.DEFAULT_FONT_OPTION_18,fontSize:24,lineHeight:34}
+ ...sD.DEFAULT_FONT_OPTION_18,fontSize:24,lineHeight:34}
HeroHireSubView 2 hunks, 2 statements
- t<5;
+ t<6;
- e<5;
+ e<6;
PVPBattleController 2 hunks, 2 statements
- IB.getInstance().remove(this.execute,this),wZt.getInstance().showVictory()}
+ iU.getInstance().remove(this.execute,this),T0t.getInstance().showResult(!0,null,null)}
- IB.getInstance().remove(this.execute,this),wZt.getInstance().showDefeat()}
+ iU.getInstance().remove(this.execute,this),T0t.getInstance().showResult(!1,null,null)}
GuildRaidBookVO 2 hunks, 2 statements
- ...Lt.DEFAULT_OPTIONS,...t}
+ ...Bt.DEFAULT_OPTIONS,...t}
- ...Dt.DEFAULT_OPTIONS,...i}
+ ...Ut.DEFAULT_OPTIONS,...i}
PVPBattlePopup 1 hunks, 2 statements
- async endBattle(t){
- Y4t.getInstance().endBattle(t)}
+ endBattle(t){
+ return S7t.getInstance().endBattle(t)}
MailDetailPopup 2 hunks, 2 statements
- var t;
+ var t,i;
- if(this.currentMail.receivedAt=new Date,XD.setUserInfo(i.body),Vzt.getInstance().setData(i.body),AB.getInstance().setStatusData(null==(t=i.body)?void 0:t.mineStatus),zzt.getInstance().setData(i.body.transTicket),mS.getInstance().dispatchCustomEvent("MailUpdate"),"inventory"in i.body){
+ if(this.currentMail.receivedAt=new Date,EG.setUserInfo(s.body),DYt.getInstance().setData(s.body),XB.getInstance().setStatusData(null==(t=s.body)?void 0:t.mineStatus),UYt.getInstance().setData(null==(i=s.body)?void 0:i.transTicket),WS.getInstance().dispatchCustomEvent("MailUpdate"),"inventory"in s.body){
MailPopup 2 hunks, 2 statements
- var t;
+ var t,i;
- XD.setUserInfo(i.body),Vzt.getInstance().setData(i.body),AB.getInstance().setStatusData(null==(t=i.body)?void 0:t.mineStatus),zzt.getInstance().setData(i.body.transTicket),this.setRequestPending3(!1);
+ EG.setUserInfo(s.body),DYt.getInstance().setData(s.body),XB.getInstance().setStatusData(null==(t=s.body)?void 0:t.mineStatus),UYt.getInstance().setData(null==(i=s.body)?void 0:i.transTicket),this.setRequestPending3(!1);
GuildWarTournament2Popup 1 hunks, 2 statements
+ get className(){
+ return"GuildWarTournament2Popup"}
AttendancePopup 2 hunks, 2 statements
- ,this.lblMsg=new SD("",t.fill,t),this.addChild(this.lblMsg),this.rowA=new Tri,this.rowA.onToggle=t=>this.onRowToggle(t),this.contentContainer.addChild(this.rowA),this.rowB=new Tri,this.rowB.onToggle=t=>this.onRowToggle(t),this.contentContainer.addChild(this.rowB),this.grid=new Mri,this.contentContainer.addChild(this.grid),this.btnClaimAll=new kri("받기"),this.btnClaimAll.onClick=()=>{
+ ,this.lblMsg=new QD("",t.fill,t),this.addChild(this.lblMsg),this.rowA=new iai,this.rowA.onToggle=t=>this.onRowToggle(t),this.contentContainer.addChild(this.rowA),this.rowB=new iai,this.rowB.onToggle=t=>this.onRowToggle(t),this.contentContainer.addChild(this.rowB),this.grid=new Joi,this.contentContainer.addChild(this.grid),this.btnClaimAll=new Rqt("받기"),this.btnClaimAll.autoResize=!1,this.btnClaimAll.width=300,this.btnClaimAll.height=60,this.btnClaimAll.onClick=()=>{
- this.btnClaimAll.setClaimEnabled(e),this.btnClaimAll.text=s>0?`${
+ this.btnClaimAll.activated=e,this.btnClaimAll.text=s>0?`${
GuildBarrackRowItemRenderer 2 hunks, 2 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
GuildWarBattleReadyPopup 2 hunks, 2 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GuildWarSquadsPopup 2 hunks, 2 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:14}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GuildWarTierAssignPopup 2 hunks, 2 statements
- const i=[...QL.memberList??[]].sort((t,i)=>i.roleLevel!==t.roleLevel?i.roleLevel-t.roleLevel:(i.wave??0)-(t.wave??0));
+ const i=[...SD.memberList??[]].sort((t,i)=>i.roleLevel!==t.roleLevel?i.roleLevel-t.roleLevel:(i.wave??0)-(t.wave??0));
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
MiniAscentBattleController 2 hunks, 2 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:18}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:18}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:18}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:18}
MiniAscentCorpsPanel 2 hunks, 2 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:i,lineHeight:i+4}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:i,lineHeight:i+4}
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:16,lineHeight:20}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:16,lineHeight:20}
MiniAscentCorpsPage 2 hunks, 2 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:22,lineHeight:28}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:22,lineHeight:28}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:19}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:14,lineHeight:19}
MiniAscentRoutePopup 2 hunks, 2 statements
- const t=new of;
+ const t=new bf;
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:f,lineHeight:f+2}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:f,lineHeight:f+2}
MiniAscentChapterRewardItem 2 hunks, 2 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:14}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:14}
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:15}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:15}
ObservablePoint 1 hunks, 1 statements
- var t,i,s,e,n,h,r,o,a,c,l,u,d,f,p,g,m,w,v,_,b,E,M,A,y,S,T,C,I,O,k,R,x,P,N,L,D,G,B,U,F,H,$,W,V,j,K,z,Y,q,X,J,Q,Z,tt,it,st,et,nt,ht,rt,ot,at,ct,lt,ut,dt,ft,pt,gt,mt,wt,vt,_t,bt,Et,Mt,At,yt,St,Tt,Ct,It,Ot,kt,Rt,xt,Pt,Nt,Lt,Dt,Gt,Bt,Ut,Ft,Ht,$t,Wt,Vt,jt,Kt,zt,Yt=Object.defineProperty,qt=(t,i)=>Yt(t,"name",{
+ var t,i,s,e,n,h,r,o,a,c,l,u,d,f,p,g,w,m,v,_,M,b,y,E,A,S,T,C,O,I,k,R,x,P,N,L,D,G,B,U,F,$,H,W,V,j,K,z,Y,q,X,J,Q,Z,tt,it,st,et,nt,ht,rt,ot,at,ct,lt,ut,dt,ft,pt,gt,wt,mt,vt,_t,Mt,bt,yt,Et,At,St,Tt,Ct,Ot,It,kt,Rt,xt,Pt,Nt,Lt,Dt,Gt,Bt,Ut,Ft,$t,Ht,Wt,Vt,jt,Kt,zt,Yt,qt,Xt,Jt=Object.defineProperty,Qt=(t,i)=>Jt(t,"name",{
CacheClass 1 hunks, 1 statements
- ...Zi.defaultOptions,autoLoad:!0,autoPlay:!0,updateFPS:0,crossorigin:!0,loop:!1,muted:!0,playsinline:!0,preload:!1}
+ ...ss.defaultOptions,autoLoad:!0,autoPlay:!0,updateFPS:0,crossorigin:!0,loop:!1,muted:!0,playsinline:!0,preload:!1}
SystemRunner 1 hunks, 1 statements
- ni.handleByNamedList(ii.Environment,ur),qt(dr,"loadEnvironmentExtensions"),qt(pr,"unsafeEvalSupported"),qt(gr,"earcut$1"),qt(mr,"linkedList"),qt(wr,"filterPoints"),qt(vr,"earcutLinked"),qt(_r,"isEar"),qt(br,"isEarHashed"),qt(Er,"cureLocalIntersections"),qt(Mr,"splitEarcut"),qt(Ar,"eliminateHoles"),qt(yr,"compareXYSlope"),qt(Sr,"eliminateHole"),qt(Tr,"findHoleBridge"),qt(Cr,"sectorContainsSector"),qt(Ir,"indexCurve"),qt(Or,"sortLinked"),qt(kr,"zOrder"),qt(Rr,"getLeftmost"),qt(xr,"pointInTriangle"),qt(Pr,"pointInTriangleExceptFirst"),qt(Nr,"isValidDiagonal"),qt(Lr,"area"),qt(Dr,"equals$2"),qt(Gr,"intersects"),qt(Br,"onSegment"),qt(Ur,"sign"),qt(Fr,"intersectsPolygon"),qt(Hr,"locallyInside"),qt($r,"middleInside"),qt(Wr,"splitPolygon"),qt(Vr,"insertNode"),qt(jr,"removeNode"),qt(Kr,"createNode"),qt(zr,"signedArea");
+ oi.handleByNamedList(ni.Environment,pr),Qt(gr,"loadEnvironmentExtensions"),Qt(mr,"unsafeEvalSupported"),Qt(vr,"earcut$1"),Qt(_r,"linkedList"),Qt(Mr,"filterPoints"),Qt(br,"earcutLinked"),Qt(yr,"isEar"),Qt(Er,"isEarHashed"),Qt(Ar,"cureLocalIntersections"),Qt(Sr,"splitEarcut"),Qt(Tr,"eliminateHoles"),Qt(Cr,"compareXYSlope"),Qt(Or,"eliminateHole"),Qt(Ir,"findHoleBridge"),Qt(kr,"sectorContainsSector"),Qt(Rr,"indexCurve"),Qt(xr,"sortLinked"),Qt(Pr,"zOrder"),Qt(Nr,"getLeftmost"),Qt(Lr,"pointInTriangle$1"),Qt(Dr,"pointInTriangleExceptFirst"),Qt(Gr,"isValidDiagonal"),Qt(Br,"area$1"),Qt(Ur,"equals$2"),Qt(Fr,"intersects"),Qt($r,"onSegment"),Qt(Hr,"sign"),Qt(Wr,"intersectsPolygon"),Qt(Vr,"locallyInside"),Qt(jr,"middleInside"),Qt(Kr,"splitPolygon"),Qt(zr,"insertNode"),Qt(Yr,"removeNode"),Qt(qr,"createNode"),Qt(Xr,"signedArea");
ApplicationInitHook 1 hunks, 1 statements
- const i=[...Qr,...this.config.runners??[]];
+ const i=[...io,...this.config.runners??[]];
Geometry 1 hunks, 1 statements
- ...w.defaultOptions,...t}
+ ...m.defaultOptions,...t}
DefaultShader 1 hunks, 1 statements
- name:i,...dc({
+ name:i,...gc({
AssetsClass 1 hunks, 1 statements
- ...vn.defaultOptions,resolution:(null==(e=i.data)?void 0:e.resolution)||Lu(t),alphaMode:(null==(n=i.data)?void 0:n.alphaMode)||await mn(),...i.data}
+ ...bn.defaultOptions,resolution:(null==(e=i.data)?void 0:e.resolution)||Bu(t),alphaMode:(null==(n=i.data)?void 0:n.alphaMode)||await _n(),...i.data}
WorkerInstance 1 hunks, 1 statements
- return Ed=[...bd,...t],Ed}
+ return Ad=[...Ed,...t],Ad}
DOMPipe 1 hunks, 1 statements
- return Ld=Gd(i),[...Ld,...t]}
+ return Bd=Fd(i),[...Bd,...t]}
PassthroughFilter 1 hunks, 1 statements
- let of=rf;
+ let bf=Mf;
BatchableMesh 1 hunks, 1 statements
- ...C.defaultOptions,...i}
+ ...O.defaultOptions,...i}
BitmapFontManagerClass 1 hunks, 1 statements
- ...x.defaultOptions,...t}
+ ...P.defaultOptions,...t}
HTMLTextStyle 1 hunks, 1 statements
- ...Ig.defaultDropShadow,...t}
+ ...qg.defaultDropShadow,...t}
RenderTexture 1 hunks, 1 statements
- ...L.defaultOptions,...t}
+ ...D.defaultOptions,...t}
GlobalUniformSystem 1 hunks, 1 statements
- ...G.defaultOptions,...t}
+ ...B.defaultOptions,...t}
GlGeometryGpuData 1 hunks, 1 statements
- ...$.defaultOptions,...t}
+ ...W.defaultOptions,...t}
GlColorMaskSystem 1 hunks, 1 statements
- ...W.defaultOptions,...t}
+ ...V.defaultOptions,...t}
GlUboSystem 1 hunks, 1 statements
- ...L_,"mat2x2<f32>":"\n        data[offset] = v[0];
+ ...sM,"mat2x2<f32>":"\n        data[offset] = v[0];
NineSliceSpriteGpuData 1 hunks, 1 statements
- ...K.defaultOptions,...t}
+ ...q.defaultOptions,...t}
FrameLoopManager 1 hunks, 1 statements
- __proto__:null,AbstractBitmapFont:zg,AbstractRenderer:so,AbstractText:Tp,AbstractTextSystem:Fg,AccessibilitySystem:gh,AlphaMask:Je,AlphaMaskPipe:Xm,AnimatedSprite:Kf,Application:vo,ApplicationInitHook:co,Assets:ld,AssetsClass:cd,BLEND_TO_NPM:Ma,BREAKING_SPACES:Kp,BREAKING_SPACES_SET:zp,BREAK_AFTER_CHARS:Xp,BREAK_AFTER_CHARS_SET:Jp,BUFFER_TYPE:qv,BackgroundLoader:To,BackgroundSystem:Yw,Batch:Pa,BatchGeometry:Ja,BatchTextureArray:Ra,BatchableGraphics:qc,BatchableHTMLText:_m,BatchableMesh:Vf,BatchableSprite:xg,BatchableText:Ng,Batcher:Fa,BatcherPipe:Wm,BigPool:qs,BindGroup:sr,BindGroupSystem:nE,BitmapFont:xM,BitmapFontManager:em,BlendModePipe:Dw,Bounds:cs,BrowserAdapter:en,Buffer:$a,BufferImageSource:is,BufferResource:K_,BufferUsage:Ha,CLEAR:qr,COLLAPSIBLE_SPACES:Yp,COLLAPSIBLE_SPACES_SET:qp,Cache:En,CanvasBatchAdaptor:Dm,CanvasColorMaskPipe:Qm,CanvasContextSystem:dw,CanvasGraphicsAdaptor:Rw,CanvasGraphicsContextSystem:Rf,CanvasGraphicsPipe:Pf,CanvasLimitsSystem:pw,CanvasNineSliceSpritePipe:MM,CanvasObserver:Kn,CanvasPool:kp,CanvasPoolClass:Op,CanvasRenderTargetAdaptor:Lv,CanvasRenderTargetSystem:Gv,CanvasRenderer:zv,CanvasRendererTextSystem:$g,CanvasSource:on,CanvasStencilMaskPipe:hw,CanvasTextGenerator:Tg,CanvasTextMetrics:vg,CanvasTextPipe:Dg,CanvasTextSystem:Vg,CanvasTextureSystem:Uv,CanvasTilingSpritePipe:ep,Circle:oa,Color:Hs,ColorMask:Ze,ColorMaskPipe:tw,ColorMatrixFilter:of,CompressedSource:md,Container:He,CustomRenderPipe:mw,DEG_TO_RAD:wi,DOMAdapter:hn,DOMPipe:Ud,DefaultBatcher:Hc,DefaultShader:Bc,DynamicBitmapFont:qg,Ellipse:ca,EventBoundary:Jd,EventEmitter:fi,EventSystem:tf,EventsTicker:Hd,ExtensionType:ii,ExtractSystem:Jw,FederatedContainer:sf,FederatedEvent:Yn,FederatedMouseEvent:Wd,FederatedPointerEvent:jd,FederatedWheelEvent:zd,FillGradient:dl,FillPattern:vu,Filter:lr,FilterEffect:ie,FilterPipe:ff,FilterSystem:bf,FontStylePromiseCache:Tm,GCManagedHash:Wc,GCSystem:av,GL_FORMATS:n_,GL_TARGETS:h_,GL_TYPES:r_,GPUTextureGpuData:eM,GenerateTextureSystem:nv,Geometry:za,GlBackBufferSystem:m_,GlBatchAdaptor:Bm,GlBuffer:Jv,GlBufferSystem:Zv,GlColorMaskSystem:v_,GlContextSystem:i_,GlEncoderSystem:b_,GlGeometryGpuData:u_,GlGeometrySystem:f_,GlGraphicsAdaptor:jb,GlLimitsSystem:M_,GlMeshAdaptor:zb,GlProgram:Nh,GlProgramData:q_,GlRenderTarget:y_,GlRenderTargetAdaptor:$_,GlRenderTargetSystem:V_,GlShaderSystem:db,GlStateSystem:bb,GlStencilSystem:C_,GlTexture:Mb,GlTextureSystem:Wb,GlUboSystem:F_,GlUniformGroupSystem:wb,GlobalResourceRegistry:js,GlobalUniformSystem:lv,GpuBatchAdaptor:Hm,GpuBlendModesToPixi:WE,GpuBufferData:rE,GpuBufferSystem:aE,GpuColorMaskSystem:dE,GpuDeviceSystem:pE,GpuEncoderSystem:mE,GpuGraphicsAdaptor:oM,GpuGraphicsContext:Cl,GpuLimitsSystem:vE,GpuMeshAdapter:cM,GpuMipmapGenerator:iM,GpuProgram:qh,GpuRenderTarget:DE,GpuRenderTargetAdaptor:BE,GpuRenderTargetSystem:FE,GpuShaderSystem:$E,GpuStateSystem:jE,GpuStencilModesToPixi:S_,GpuStencilSystem:bE,GpuTextureSystem:hM,GpuUboSystem:TE,GpuUniformBatchPipe:OE,Graphics:Ff,GraphicsContext:Nu,GraphicsContextRenderData:Ol,GraphicsContextSystem:Rl,GraphicsGpuData:Df,GraphicsPath:tu,GraphicsPipe:Bf,HTMLText:Nm,HTMLTextPipe:Em,HTMLTextRenderData:mm,HTMLTextStyle:um,HTMLTextSystem:xm,HelloSystem:wv,ImageSource:cn,InstructionSet:Oe,Loader:Uo,LoaderParserPriority:Tn,MaskEffectManager:ne,MaskEffectManagerClass:ee,MaskFilter:Sf,Matrix:Mi,MeshGeometry:$f,NEWLINES:Vp,NEWLINES_SET:jp,NEWLINE_MATCH_REGEX:Zp,NEWLINE_SPLIT_REGEX:Qp,NOOP:Vi,NineSliceGeometry:yM,NineSliceSprite:kM,NineSliceSpriteGpuData:TM,NineSliceSpritePipe:IM,ObservablePoint:ai,PI_2:gi,PassthroughFilter:uf,PipelineSystem:NE,PlaneGeometry:bM,Point:_i,Polygon:da,Pool:Ks,PoolGroupClass:Ys,QuadGeometry:pp,RAD_TO_DEG:mi,Rectangle:Di,RenderGroup:Le,RenderGroupPipe:_w,RenderGroupSystem:Kw,RenderTarget:Av,RenderTargetSystem:Pv,RenderTexture:Zw,RenderableGCSystem:_v,RendererInitHook:uo,RendererType:er,ResizePlugin:po,Resolver:Gn,RoundedRectangle:ga,STENCIL_MODES:Aa,SVGParser:pu,SchedulerSystem:fv,Shader:hr,ShaderStage:Wh,ShapePath:Ql,SharedRenderPipes:Ov,SharedSystems:Iv,Sprite:je,SpritePipe:Pw,Spritesheet:Hn,State:ar,StencilMask:sn,StencilMaskPipe:ow,SystemRunner:Jr,Text:jg,TextStyle:Ig,Texture:hs,TextureGCSystem:Ev,TextureMatrix:ns,TexturePool:Pe,TexturePoolClass:xe,TextureSource:Zi,TextureStyle:Ji,Ticker:gn,TickerListener:dn,TickerPlugin:mo,TilingSprite:yp,TilingSpriteGpuData:bp,TilingSpritePipe:Mp,TilingSpriteShader:dp,Transform:qf,UNIFORM_TO_ARRAY_SETTERS:pb,UNIFORM_TO_SINGLE_SETTERS:fb,UNIFORM_TYPES_MAP:Jh,UNIFORM_TYPES_VALUES:Xh,UPDATE_BLEND:2,UPDATE_COLOR:1,UPDATE_PRIORITY:ln,UPDATE_VISIBLE:4,UboBatch:lE,UboSystem:O_,UniformGroup:tr,VERSION:oo,VideoSource:vn,ViewContainer:We,ViewSystem:Cv,ViewableBuffer:ba,WGSL_ALIGN_SIZE_DATA:EE,WGSL_TO_STD40_SIZE:k_,WebGLRenderer:iE,WebGPURenderer:wM,WorkerManager:zu,accessibilityTarget:mh,addBits:Qa,addMaskBounds:ze,addMaskLocalBounds:Ye,addProgramDefines:yh,appendSVGPath:fu,applyMatrix:mp,applyStyleParams:Gb,assignWithIgnore:De,autoDetectRenderer:ro,bgr2rgb:we,bitmapFontCachePlugin:Ao,bitmapFontTextParser:_o,bitmapFontXMLParser:bo,bitmapFontXMLStringParser:Eo,blockDataMap:zE,boundsPool:ae,browserExt:hi,buildAdaptiveBezier:Pl,buildAdaptiveQuadratic:Dl,buildArc:Ul,buildArcTo:Fl,buildArcToSvg:zl,buildCircle:Xc,buildContextBatches:Ml,buildEllipse:Jc,buildLine:el,buildPixelLine:nl,buildPolygon:ol,buildRectangle:al,buildRoundedRectangle:Qc,buildSimpleUvs:jc,buildTriangle:cl,buildUvs:Vc,cacheAsTextureMixin:Xs,cacheTextureArray:Co,calculatePathArea:du,calculateProjection:kv,canUseNewCanvasBlendModes:Jf,canvasUtils:Qf,checkChildrenDidChange:Ee,checkDataUrl:Fo,checkExtension:Ho,checkForNestedPattern:lu,checkMaxIfStatementsInShader:Ca,childrenHelperMixin:Qs,cleanArray:rv,cleanHash:hv,clearList:Gw,closePointEps:Zc,collapseNewlines:hg,collapseSpaces:ng,collectRenderablesMixin:Zs,color32BitToUniform:Nf,colorBit:yc,colorBitGl:Sc,colorMatrixFilterFrag:nf,colorMatrixFilterWgsl:hf,compareModeToGlCompare:Db,compileHighShader:uc,compileHighShaderGl:dc,compileHighShaderGlProgram:Ac,compileHighShaderGpuProgram:Mc,compileHooks:tc,compileInputs:sc,compileOutputs:rc,compileShader:X_,convertToList:_n,copySearchParams:Un,createGlUploadCubeTextureResource:Cb,createGpuUploadCubeTextureResource:JE,createIdFromString:_h,createStringVariations:Nn,createTexture:Du,createUboElementsSTD40:R_,createUboElementsWGSL:ME,createUboSyncFunction:P_,createUboSyncFunctionSTD40:B_,createUboSyncFunctionWGSL:yE,crossOrigin:id,cullingMixin:$s,curveEps:1e-4,defaultFilterVert:ef,defaultValue:Q_,definedProps:zi,deprecation:Wi,detectAvif:Oo,detectCompressed:Dd,detectDefaults:Ro,detectMp4:No,detectOgv:Lo,detectVideoAlphaMode:mn,detectWebm:Do,detectWebp:Go,determineCrossOrigin:ed,earcut:Yr,effectsMixin:he,ensureAttributes:s_,ensureIsBuffer:Wa,ensurePrecision:Sh,ensureTextOptions:Cp,executeInstructions:ww,extensions:ni,extractAttributesFromGlProgram:nb,extractAttributesFromGpuProgram:Hh,extractFontFamilies:Am,extractStructAndGroups:$h,extractSubpaths:uu,extractSvgUrlId:ru,fastCopy:Ea,findMixin:re,fontStringFromTextStyle:bg,fragmentGPUTemplate:wc,fragmentGlTemplate:_c,generateArraySyncSTD40:G_,generateArraySyncWGSL:AE,generateGpuLayoutGroups:Vh,generateLayoutHash:jh,generateProgram:cb,generateShaderSyncCode:z_,generateTextureBatchBit:Oc,generateTextureBatchBitGl:xc,generateTextureMatrix:vl,generateUniformsSync:gb,getAdjustedBlendModeBlend:ya,getAttributeInfoFromFormat:Dh,getBatchSamplersUniformGroup:Dc,getBitmapTextLayout:Xg,getCanvasBoundingBox:Dp,getCanvasFillStyle:Mg,getCanvasTexture:Sv,getCharacterGroups:ag,getDefaultUniformValue:Qh,getFastGlobalBoundsMixin:le,getFontCss:Cm,getFontFamilyName:Yo,getGeometryBounds:Va,getGlTypeFromFormat:a_,getGlobalBounds:ue,getGlobalMixin:ve,getGlobalRenderableBounds:gf,getLocalBounds:_e,getMaxFragmentPrecision:Ah,getMaxMiterRatio:ku,getMaxTexturesPerBatch:Oa,getOrientationOfPoints:tl,getPo2TextureFromSource:Bg,getResolutionOfUrl:Lu,getSVGUrl:Im,getSupportedCompressedTextureFormats:_d,getSupportedGPUCompressedTextureFormats:vd,getSupportedGlCompressedTextureFormats:wd,getSupportedTextureFormats:Md,getTemporaryCanvasFromImage:Om,getTestContext:Mh,getTextureBatchBindGroup:wa,getUboData:hb,getUniformData:rb,getUrlExtension:Bn,glUploadBufferImageResource:Ab,glUploadCompressedTextureResource:Sb,glUploadImageResource:Ib,glUploadVideoResource:xb,globalUniformsBit:bc,globalUniformsBitGl:Ec,gpuUploadBufferImageResource:KE,gpuUploadCompressedTextureResource:qE,gpuUploadImageResource:QE,gpuUploadVideoResource:ZE,groupD8:Pi,hasTagMarkup:Hp,hasTagStyles:Fp,injectBits:oc,insertVersion:Th,isBreakAfterChar:eg,isBreakingSpace:ig,isCollapsibleSpace:sg,isMobile:fh,isNewline:tg,isPow2:Ki,isRenderingToScreen:Rv,isSafari:Mm,isSingleItem:Ln,isWebGLSupported:eo,isWebGPUSupported:no,ktxTranscoderUrls:Td,loadBitmapFont:yo,loadEnvironmentExtensions:dr,loadFontAsBase64:ym,loadFontCSS:Sm,loadImageBitmap:Xu,loadJson:$o,loadKTX2:xd,loadKTX2onWorker:Rd,loadSVGImage:km,loadSvg:Gu,loadTextures:Ju,loadTxt:Wo,loadVideoTextures:hd,loadWebFont:Jo,localUniformBit:np,localUniformBitGl:rp,localUniformBitGroup2:hp,logProgramError:ab,mapCanvasBlendModesToPixi:cw,mapFormatToGlFormat:Bb,mapFormatToGlInternalFormat:Ub,mapFormatToGlType:Fb,mapGlToVertexFormat:eb,mapType:sb,mapViewDimensionToGlTarget:Hb,mapWebGLBlendModesToPixi:vb,maskFrag:Ef,maskVert:Mf,maskWgsl:Af,matrixPool:oe,measureHtmlText:wm,measureMixin:Ae,measureTaggedText:lg,mipmapScaleModeToGlFilter:Nb,multiplyColors:me,multiplyHexColors:pe,nextPow2:ji,nonCompressedFormats:bd,normalizeExtensionPriority:ei,onRenderMixin:ye,parseSVGDefinitions:eu,parseSVGFloatAttribute:su,parseSVGPath:ha,parseSVGStyle:au,parseTaggedText:Wp,passthroughFrag:af,passthroughWgsl:cf,path:xn,preloadVideo:sd,removeItems:Js,removeStructAndGroupDuplicates:Kh,resolveCharacters:tm,resolveCompressedTextureUrl:Nd,resolveJsonUrl:od,resolveTextureUrl:rd,resourceToTexture:yn,roundPixelsBit:Pc,roundPixelsBitGl:Nc,roundedShapeArc:Yl,roundedShapeQuadraticCurve:ql,sayHello:gv,scaleModeToGlFilter:Pb,setPositions:gp,setProgramName:Oh,setUvs:wp,shapeBuilders:_l,sortMixin:Se,spritesheetAsset:Vn,squaredDistanceToLineSegment:la,stripVersion:kh,styleAttributes:ou,testImageFormat:Io,testVideoFormat:Po,textStyleToCSS:nm,textureBit:Vm,textureBitGl:jm,textureFrom:Sn,tilingBit:op,tilingBitGl:ap,toFillStyle:Iu,toLocalGlobalMixin:Ce,toStrokeStyle:Ou,tokenize:og,tokenizeTaggedRuns:dg,transformVertices:Kc,triangulateWithHoles:hl,trimRight:rg,uboSyncFunctionsSTD40:L_,uboSyncFunctionsWGSL:D_,uid:Bi,uniformParsers:x_,unsafeEvalSupported:pr,updateQuadBounds:rs,updateRenderGroupTransform:Fw,updateRenderGroupTransforms:Uw,updateTextBounds:kg,updateTransformAndChildren:Hw,updateTransformBackwards:fe,v8_0_0:Fi,v8_3_4:Hi,validFormats:Pd,validateRenderables:Ww,vertexGPUTemplate:mc,vertexGlTemplate:vc,warn:Vs,webworkerExt:ri,wordWrap:gg,wordWrapTaggedLines:ug,wrapModeToGlAddress:Lb}
+ __proto__:null,AbstractBitmapFont:pw,AbstractRenderer:ho,AbstractText:zp,AbstractTextSystem:ow,AccessibilitySystem:vh,AlphaMask:tn,AlphaMaskPipe:mm,AnimatedSprite:fp,Application:bo,ApplicationInitHook:fo,Assets:fd,AssetsClass:dd,BLEND_TO_NPM:Sa,BREAKING_SPACES:fg,BREAKING_SPACES_SET:pg,BREAK_AFTER_CHARS:mg,BREAK_AFTER_CHARS_SET:vg,BUFFER_TYPE:w_,BackgroundLoader:Io,BackgroundSystem:gv,Batch:Da,BatchGeometry:tc,BatchTextureArray:Na,BatchableGraphics:Qc,BatchableHTMLText:Fw,BatchableMesh:hp,BatchableSprite:Zg,BatchableText:iw,Batcher:Wa,BatcherPipe:lm,BigPool:Qs,BindGroup:hr,BindGroupSystem:Sb,BitmapFont:hE,BitmapFontManager:Aw,BlendModePipe:ev,BlurFilter:mf,BlurFilterPass:gf,Bounds:ds,BrowserAdapter:rn,Buffer:ja,BufferImageSource:ns,BufferResource:fM,BufferUsage:Va,CLEAR:Qr,COLLAPSIBLE_SPACES:gg,COLLAPSIBLE_SPACES_SET:wg,Cache:An,CanvasBatchAdaptor:em,CanvasColorMaskPipe:_m,CanvasContextSystem:Pm,CanvasGraphicsAdaptor:Qm,CanvasGraphicsContextSystem:Kf,CanvasGraphicsPipe:Yf,CanvasLimitsSystem:Lm,CanvasNineSliceSpritePipe:qy,CanvasObserver:qn,CanvasPool:Jp,CanvasPoolClass:Xp,CanvasRenderTargetAdaptor:s_,CanvasRenderTargetSystem:n_,CanvasRenderer:p_,CanvasRendererTextSystem:cw,CanvasSource:ln,CanvasStencilMaskPipe:Tm,CanvasTextGenerator:zg,CanvasTextMetrics:Ug,CanvasTextPipe:ew,CanvasTextSystem:uw,CanvasTextureSystem:r_,CanvasTilingSpritePipe:Ap,Circle:la,Color:Vs,ColorMask:en,ColorMaskPipe:bm,ColorMatrixFilter:bf,CompressedSource:_d,Container:Ve,CustomRenderPipe:Gm,DEG_TO_RAD:Mi,DOMAdapter:an,DOMPipe:Hd,DefaultBatcher:Vc,DefaultShader:$c,DynamicBitmapFont:ww,Ellipse:da,EventBoundary:tf,EventEmitter:wi,EventSystem:nf,EventsTicker:Vd,ExtensionType:ni,ExtractSystem:vv,FederatedContainer:hf,FederatedEvent:Jn,FederatedMouseEvent:Kd,FederatedPointerEvent:Yd,FederatedWheelEvent:Xd,FillGradient:gl,FillPattern:bu,Filter:fr,FilterEffect:ne,FilterPipe:Cf,FilterSystem:Lf,FontStylePromiseCache:zw,GAUSSIAN_VALUES:of,GCManagedHash:Kc,GCSystem:Iv,GL_FORMATS:S_,GL_TARGETS:T_,GL_TYPES:C_,GPUTextureGpuData:Ay,GenerateTextureSystem:Sv,Geometry:Xa,GlBackBufferSystem:G_,GlBatchAdaptor:hm,GlBuffer:v_,GlBufferSystem:M_,GlColorMaskSystem:U_,GlContextSystem:y_,GlEncoderSystem:$_,GlGeometryGpuData:x_,GlGeometrySystem:N_,GlGraphicsAdaptor:db,GlLimitsSystem:W_,GlMeshAdaptor:pb,GlProgram:Gh,GlProgramData:wM,GlRenderTarget:j_,GlRenderTargetAdaptor:cM,GlRenderTargetSystem:uM,GlShaderSystem:PM,GlStateSystem:$M,GlStencilSystem:Y_,GlTexture:WM,GlTextureSystem:lb,GlUboSystem:oM,GlUniformGroupSystem:BM,GlobalResourceRegistry:Ys,GlobalUniformSystem:Rv,GpuBatchAdaptor:am,GpuBlendModesToPixi:ly,GpuBufferData:Cb,GpuBufferSystem:Ib,GpuColorMaskSystem:Pb,GpuDeviceSystem:Lb,GpuEncoderSystem:Gb,GpuGraphicsAdaptor:Oy,GpuGraphicsContext:kl,GpuLimitsSystem:Ub,GpuMeshAdapter:ky,GpuMipmapGenerator:yy,GpuProgram:Qh,GpuRenderTarget:ey,GpuRenderTargetAdaptor:hy,GpuRenderTargetSystem:oy,GpuShaderSystem:cy,GpuStateSystem:dy,GpuStencilModesToPixi:K_,GpuStencilSystem:$b,GpuTextureSystem:Ty,GpuUboSystem:zb,GpuUniformBatchPipe:Xb,Graphics:ip,GraphicsContext:Gu,GraphicsContextRenderData:xl,GraphicsContextSystem:Nl,GraphicsGpuData:Jf,GraphicsPath:eu,GraphicsPipe:Zf,HTMLText:im,HTMLTextPipe:Hw,HTMLTextRenderData:Gw,HTMLTextStyle:xw,HTMLTextSystem:Zw,HelloSystem:Bv,ImageSource:dn,InstructionSet:xe,Loader:Ho,LoaderParserPriority:In,MaskEffectManager:oe,MaskEffectManagerClass:re,MaskFilter:Ff,Matrix:Si,Mesh:up,MeshGeometry:ep,MeshGpuData:op,MeshPipe:cp,MeshPlane:Wy,MeshRope:zy,NEWLINES:ug,NEWLINES_SET:dg,NEWLINE_MATCH_REGEX:Mg,NEWLINE_SPLIT_REGEX:_g,NOOP:zi,NineSliceGeometry:Jy,NineSliceSprite:eE,NineSliceSpriteGpuData:Zy,NineSliceSpritePipe:iE,ObservablePoint:ui,PI_2:vi,PassthroughFilter:Sf,PipelineSystem:iy,PlaneGeometry:$y,Point:yi,Polygon:ga,Pool:qs,PoolGroupClass:Js,QuadGeometry:Lp,RAD_TO_DEG:_i,Rectangle:Ui,RenderGroup:Be,RenderGroupPipe:Fm,RenderGroupSystem:fv,RenderTarget:Vv,RenderTargetSystem:t_,RenderTexture:Mv,RenderableGCSystem:Fv,RendererInitHook:go,RendererType:rr,ResizePlugin:mo,Resolver:Fn,RopeGeometry:jy,RoundedRectangle:va,STENCIL_MODES:Ta,SVGParser:mu,SchedulerSystem:Nv,Shader:ar,ShaderStage:Kh,ShapePath:iu,SharedRenderPipes:Xv,SharedSystems:qv,Sprite:Ye,SpritePipe:tv,Spritesheet:Vn,State:ur,StencilMask:hn,StencilMaskPipe:Om,SystemRunner:to,Text:dw,TextStyle:qg,Texture:as,TextureGCSystem:Hv,TextureMatrix:os,TexturePool:De,TexturePoolClass:Le,TextureSource:ss,TextureStyle:ts,Ticker:vn,TickerListener:gn,TickerPlugin:_o,TilingSprite:jp,TilingSpriteGpuData:$p,TilingSpritePipe:Wp,TilingSpriteShader:Pp,Transform:wp,UNIFORM_TO_ARRAY_SETTERS:LM,UNIFORM_TO_SINGLE_SETTERS:NM,UNIFORM_TYPES_MAP:tr,UNIFORM_TYPES_VALUES:Zh,UPDATE_BLEND:2,UPDATE_COLOR:1,UPDATE_PRIORITY:fn,UPDATE_VISIBLE:4,UboBatch:Rb,UboSystem:X_,UniformGroup:er,VERSION:lo,VideoSource:bn,ViewContainer:Ke,ViewSystem:Yv,ViewableBuffer:Ea,WGSL_ALIGN_SIZE_DATA:Hb,WGSL_TO_STD40_SIZE:J_,WebGLRenderer:yb,WebGPURenderer:By,WorkerManager:Xu,accessibilityTarget:_h,addBits:ic,addMaskBounds:Xe,addMaskLocalBounds:Je,addProgramDefines:Ch,appendSVGPath:wu,applyMatrix:Gp,applyStyleParams:nb,assignWithIgnore:Ue,autoDetectRenderer:co,bgr2rgb:Me,bitmapFontCachePlugin:To,bitmapFontTextParser:yo,bitmapFontXMLParser:Eo,bitmapFontXMLStringParser:Ao,blockDataMap:py,blurTemplateWgsl:df,boundsPool:ue,browserExt:ai,buildAdaptiveBezier:Dl,buildAdaptiveQuadratic:Ul,buildArc:Hl,buildArcTo:Wl,buildArcToSvg:Xl,buildCircle:Zc,buildContextBatches:Sl,buildEllipse:tl,buildLine:rl,buildPixelLine:ol,buildPolygon:ll,buildRectangle:ul,buildRoundedRectangle:il,buildSimpleUvs:Yc,buildTriangle:dl,buildUvs:zc,cacheAsTextureMixin:Zs,cacheTextureArray:ko,calculatePathArea:gu,calculateProjection:Jv,canUseNewCanvasBlendModes:vp,canvasUtils:_p,checkChildrenDidChange:Ae,checkDataUrl:Wo,checkExtension:Vo,checkForNestedPattern:fu,checkMaxIfStatementsInShader:ka,childrenHelperMixin:ie,cleanArray:Cv,cleanHash:Tv,clearList:nv,closePointEps:sl,collapseNewlines:Tg,collapseSpaces:Sg,collectRenderablesMixin:se,color32BitToUniform:qf,colorBit:Cc,colorBitGl:Oc,colorMatrixFilterFrag:vf,colorMatrixFilterWgsl:_f,compareModeToGlCompare:eb,compileHighShader:pc,compileHighShaderGl:gc,compileHighShaderGlProgram:Tc,compileHighShaderGpuProgram:Sc,compileHooks:ec,compileInputs:hc,compileOutputs:cc,compileShader:mM,convertToList:yn,copySearchParams:Hn,createGlUploadCubeTextureResource:YM,createGpuUploadCubeTextureResource:vy,createIdFromString:yh,createStringVariations:Gn,createTexture:Uu,createUboElementsSTD40:Q_,createUboElementsWGSL:Wb,createUboSyncFunction:tM,createUboSyncFunctionSTD40:hM,createUboSyncFunctionWGSL:jb,crossOrigin:nd,cullingMixin:js,curveEps:1e-4,defaultFilterVert:rf,defaultValue:_M,definedProps:Xi,deprecation:Ki,detectAvif:xo,detectCompressed:Ud,detectDefaults:No,detectMp4:Go,detectOgv:Bo,detectVideoAlphaMode:_n,detectWebm:Uo,detectWebp:Fo,determineCrossOrigin:rd,earcut:Jr,effectsMixin:ae,ensureAttributes:E_,ensureIsBuffer:Ka,ensurePrecision:Oh,ensureTextOptions:Yp,executeInstructions:Bm,extensions:oi,extractAttributesFromGlProgram:SM,extractAttributesFromGpuProgram:Vh,extractFontFamilies:Vw,extractStructAndGroups:jh,extractSubpaths:pu,extractSvgUrlId:cu,fastCopy:Aa,findMixin:ce,fontStringFromTextStyle:$g,fragmentGPUTemplate:Mc,fragmentGlTemplate:yc,generateArraySyncSTD40:nM,generateArraySyncWGSL:Vb,generateBlurFragSource:cf,generateBlurGlProgram:uf,generateBlurProgram:ff,generateBlurVertSource:lf,generateGpuLayoutGroups:zh,generateLayoutHash:Yh,generateProgram:kM,generateShaderSyncCode:pM,generateTextureBatchBit:xc,generateTextureBatchBitGl:Lc,generateTextureMatrix:bl,generateUniformsSync:DM,getAdjustedBlendModeBlend:Ca,getAttributeInfoFromFormat:Uh,getBatchSamplersUniformGroup:Uc,getBitmapTextLayout:mw,getCanvasBoundingBox:eg,getCanvasFillStyle:Wg,getCanvasTexture:Kv,getCharacterGroups:Ig,getDefaultUniformValue:ir,getFastGlobalBoundsMixin:fe,getFontCss:Yw,getFontFamilyName:Jo,getGeometryBounds:za,getGlTypeFromFormat:I_,getGlobalBounds:pe,getGlobalMixin:be,getGlobalRenderableBounds:kf,getLocalBounds:ye,getMaxFragmentPrecision:Th,getMaxMiterRatio:Pu,getMaxTexturesPerBatch:xa,getOrientationOfPoints:el,getPo2TextureFromSource:hw,getResolutionOfUrl:Bu,getSVGUrl:qw,getSupportedCompressedTextureFormats:yd,getSupportedGPUCompressedTextureFormats:bd,getSupportedGlCompressedTextureFormats:Md,getSupportedTextureFormats:Sd,getTemporaryCanvasFromImage:Xw,getTestContext:Sh,getTextureBatchBindGroup:Ma,getUboData:TM,getUniformData:CM,getUrlExtension:$n,glUploadBufferImageResource:VM,glUploadCompressedTextureResource:KM,glUploadImageResource:qM,glUploadVideoResource:ZM,globalUniformsBit:Ec,globalUniformsBitGl:Ac,gpuUploadBufferImageResource:fy,gpuUploadCompressedTextureResource:wy,gpuUploadImageResource:_y,gpuUploadVideoResource:My,groupD8:Di,hasTagMarkup:ag,hasTagStyles:og,injectBits:lc,insertVersion:Ih,isBreakAfterChar:Ag,isBreakingSpace:yg,isCollapsibleSpace:Eg,isMobile:wh,isNewline:bg,isPow2:qi,isRenderingToScreen:Qv,isSafari:Ww,isSingleItem:Bn,isWebGLSupported:ro,isWebGPUSupported:oo,ktxTranscoderUrls:Id,loadBitmapFont:Co,loadEnvironmentExtensions:gr,loadFontAsBase64:jw,loadFontCSS:Kw,loadImageBitmap:Zu,loadJson:jo,loadKTX2:Ld,loadKTX2onWorker:Nd,loadSVGImage:Jw,loadSvg:Fu,loadTextures:td,loadTxt:Ko,loadVideoTextures:ad,loadWebFont:ta,localUniformBit:Sp,localUniformBitGl:Cp,localUniformBitGroup2:Tp,logProgramError:IM,mapCanvasBlendModesToPixi:km,mapFormatToGlFormat:hb,mapFormatToGlInternalFormat:rb,mapFormatToGlType:ob,mapGlToVertexFormat:AM,mapType:EM,mapViewDimensionToGlTarget:ab,mapWebGLBlendModesToPixi:UM,maskFrag:Df,maskVert:Gf,maskWgsl:Bf,matrixPool:le,measureHtmlText:Bw,measureMixin:Te,measureTaggedText:Rg,mipmapScaleModeToGlFilter:ib,multiplyColors:_e,multiplyHexColors:me,nextPow2:Yi,nonCompressedFormats:Ed,normalizeExtensionPriority:ri,onRenderMixin:Ce,parseSVGDefinitions:ru,parseSVGFloatAttribute:hu,parseSVGPath:aa,parseSVGStyle:uu,parseTaggedText:lg,passthroughFrag:yf,passthroughWgsl:Ef,path:Ln,pointInTriangle:Of,preloadVideo:hd,removeItems:te,removeStructAndGroupDuplicates:qh,resolveCharacters:bw,resolveCompressedTextureUrl:Gd,resolveJsonUrl:ld,resolveTextureUrl:cd,resourceToTexture:Cn,roundPixelsBit:Dc,roundPixelsBitGl:Gc,roundedShapeArc:Jl,roundedShapeQuadraticCurve:Ql,sayHello:Dv,scaleModeToGlFilter:tb,setPositions:Dp,setProgramName:xh,setUvs:Bp,shapeBuilders:yl,sortMixin:Oe,spritesheetAsset:zn,squaredDistanceToLineSegment:fa,stripVersion:Ph,styleAttributes:lu,testImageFormat:Ro,testVideoFormat:Do,textStyleToCSS:Sw,textureBit:um,textureBitGl:dm,textureFrom:On,tilingBit:Op,tilingBitGl:Ip,toFillStyle:Ru,toLocalGlobalMixin:ke,toStrokeStyle:xu,tokenize:Og,tokenizeTaggedRuns:Pg,transformVertices:qc,triangulateWithHoles:al,trimRight:Cg,uboSyncFunctionsSTD40:sM,uboSyncFunctionsWGSL:eM,uid:$i,uniformParsers:Z_,unsafeEvalSupported:mr,updateQuadBounds:cs,updateRenderGroupTransform:ov,updateRenderGroupTransforms:rv,updateTextBounds:Jg,updateTransformAndChildren:av,updateTransformBackwards:we,v8_0_0:Wi,v8_3_4:Vi,validFormats:Dd,validateRenderables:lv,vertexGPUTemplate:_c,vertexGlTemplate:bc,warn:zs,webworkerExt:ci,wordWrap:Dg,wordWrapTaggedLines:xg,wrapModeToGlAddress:sb}
VersionManager 1 hunks, 1 statements
- qt(Jy,"VersionManager"),Xt(Jy,"gameId","ef2"),Xt(Jy,"appVersion","1.14.97");
+ Qt(AS,"VersionManager"),Zt(AS,"gameId","ef2"),Zt(AS,"appVersion","1.15.30");
PetDataManager 1 hunks, 1 statements
- ),gR=(t=>(t.ElfTown5="ElfTown5",t.NWolf="NWolf",t.HorseKnight1="HorseKnight1",t.SkeletonX1="SkeletonX1",t.SkeletonMan1="SkeletonMan1",t.SkeletonMan2="SkeletonMan2",t.SkeletonWarrior1="SkeletonWarrior1",t.GreatHammer1="GreatHammer1",t.ElfArcher1="ElfArcher1",t.HighArcher1="HighArcher1",t.FootMan1="FootMan1",t.Gunner1="Gunner1",t.ElfWarrior1="ElfWarrior1",t.ElfSwordMan1="ElfSwordMan1",t.OrcFighter1="OrcFighter1",t.OrcSpearMan1="OrcSpearMan1",t.OrcHammer1="OrcHammer1",t.OrcHunter1="OrcHunter1",t.OrcIceMage1="OrcIceMage1",t.HeavyWarrior1="HeavyWarrior1",t.HammerKnight1="HammerKnight1",t.PoisonArcher1="PoisonArcher1",t.FireBird1="FireBird1",t.GreenEagle1="GreenEagle1",t.WindMage1="WindMage1",t.OrcFlower="OrcFlower",t.BlackMage1="BlackMage1",t.DarkMage1="DarkMage1",t.Priest1="Priest1",t.Fairy1="Fairy1",t.Ghost1="Ghost1",t.DarkArcher1="DarkArcher1",t.OrcWing1="OrcWing1",t.OrcAxe1="OrcAxe1",t.BigDrumer1="BigDrumer1",t.OrcWolfRider1="OrcWolfRider1",t.OrcBigFoot1="OrcBigFoot1",t.OrcBlizzardMage1="OrcBlizzardMage1",t.FlowerSoldier1="FlowerSoldier1",t.FlowerSoldier2="FlowerSoldier2",t.KingSlime="KingSlime",t.SlimeBlue="SlimeBlue",t.SlimeRed="SlimeRed",t.SlimeYellow="SlimeYellow",t.HammerMole="HammerMole",t.MoleSoldier1="MoleSoldier1",t.MoleSoldier2="MoleSoldier2",t.DarkHermit="DarkHermit",t.Crab="Crab",t.StarFish="StarFish",t.Unicorn1="Unicorn1",t.IceWolf="IceWolf",t.GoldGoblin="GoldGoblin",t.AdsGoblin="AdsGoblin",t.DeathKnight1="DeathKnight1",t.Golem1="Golem1",t.GreatMage1="GreatMage1",t.Ant1="Ant1",t.WolfWarrior1="WolfWarrior1",t.Artillery1="Artillery1",t.Bomber1="Bomber1",t.DeathHand1="DeathHand1",t.SSlime1="SSlime1",t.SSlime2="SSlime2",t.SSlime3="SSlime3",t.OrcIcePhantom1="OrcIcePhantom1",t.Pilot1="Pilot1",t.Spider1="Spider1",t.Spider2="Spider2",t.Boar1="Boar1",t.Boar2="Boar2",t.RoboBomb1="RoboBomb1",t.RoboBomb2="RoboBomb2",t.Frog1="Frog1",t.Frog2="Frog2",t.OrcRapterRider1="OrcRapterRider1",t.WyvernRider1="WyvernRider1",t.DarkNinja1="DarkNinja1",t.Succubus1="Succubus1",t.Druid1="Druid1",t.TigerRider1="TigerRider1",t.GriffinRider1="GriffinRider1",t.SteamPunk1="SteamPunk1",t.Castle0="Castle0",t.Castle1="Castle1",t.Castle2="Castle2",t.WingKnight1="WingKnight1",t.Abyss1="Abyss1",t.Sylphid1="Sylphid1",t.Aladin1="Aladin1",t.Druid2="Druid2",t.BladeMaster1="BladeMaster1",t.CrowKnight1="CrowKnight1",t.Succubus2="Succubus2",t.FireSpirit1="FireSpirit1",t.Naga1="Naga1",t.Medusa1="Medusa1",t.Hippogriff1="Hippogriff1",t.ScorpionKing="ScorpionKing",t.HarpyKing="HarpyKing",t.GolemKing="GolemKing",t.BerialKing="BerialKing",t.DragonKnight="DragonKnight",t))(gR||{
+ ),HR=(t=>(t.ElfTown5="ElfTown5",t.NWolf="NWolf",t.HorseKnight1="HorseKnight1",t.SkeletonX1="SkeletonX1",t.SkeletonMan1="SkeletonMan1",t.SkeletonMan2="SkeletonMan2",t.SkeletonWarrior1="SkeletonWarrior1",t.GreatHammer1="GreatHammer1",t.ElfArcher1="ElfArcher1",t.HighArcher1="HighArcher1",t.FootMan1="FootMan1",t.Gunner1="Gunner1",t.ElfWarrior1="ElfWarrior1",t.ElfSwordMan1="ElfSwordMan1",t.OrcFighter1="OrcFighter1",t.OrcSpearMan1="OrcSpearMan1",t.OrcHammer1="OrcHammer1",t.OrcHunter1="OrcHunter1",t.OrcIceMage1="OrcIceMage1",t.HeavyWarrior1="HeavyWarrior1",t.HammerKnight1="HammerKnight1",t.PoisonArcher1="PoisonArcher1",t.FireBird1="FireBird1",t.GreenEagle1="GreenEagle1",t.WindMage1="WindMage1",t.OrcFlower="OrcFlower",t.BlackMage1="BlackMage1",t.DarkMage1="DarkMage1",t.Priest1="Priest1",t.Fairy1="Fairy1",t.Ghost1="Ghost1",t.DarkArcher1="DarkArcher1",t.OrcWing1="OrcWing1",t.OrcAxe1="OrcAxe1",t.BigDrumer1="BigDrumer1",t.OrcWolfRider1="OrcWolfRider1",t.OrcBigFoot1="OrcBigFoot1",t.OrcBlizzardMage1="OrcBlizzardMage1",t.FlowerSoldier1="FlowerSoldier1",t.FlowerSoldier2="FlowerSoldier2",t.KingSlime="KingSlime",t.SlimeBlue="SlimeBlue",t.SlimeRed="SlimeRed",t.SlimeYellow="SlimeYellow",t.HammerMole="HammerMole",t.MoleSoldier1="MoleSoldier1",t.MoleSoldier2="MoleSoldier2",t.DarkHermit="DarkHermit",t.Crab="Crab",t.StarFish="StarFish",t.Unicorn1="Unicorn1",t.IceWolf="IceWolf",t.GoldGoblin="GoldGoblin",t.AdsGoblin="AdsGoblin",t.DeathKnight1="DeathKnight1",t.Golem1="Golem1",t.GreatMage1="GreatMage1",t.Ant1="Ant1",t.WolfWarrior1="WolfWarrior1",t.Artillery1="Artillery1",t.Bomber1="Bomber1",t.DeathHand1="DeathHand1",t.SSlime1="SSlime1",t.SSlime2="SSlime2",t.SSlime3="SSlime3",t.OrcIcePhantom1="OrcIcePhantom1",t.Pilot1="Pilot1",t.Spider1="Spider1",t.Spider2="Spider2",t.Boar1="Boar1",t.Boar2="Boar2",t.RoboBomb1="RoboBomb1",t.RoboBomb2="RoboBomb2",t.Frog1="Frog1",t.Frog2="Frog2",t.EmberRat1="EmberRat1",t.LavaBeetle1="LavaBeetle1",t.CharcoalWolf1="CharcoalWolf1",t.OrcRapterRider1="OrcRapterRider1",t.WyvernRider1="WyvernRider1",t.DarkNinja1="DarkNinja1",t.Succubus1="Succubus1",t.Druid1="Druid1",t.TigerRider1="TigerRider1",t.GriffinRider1="GriffinRider1",t.SteamPunk1="SteamPunk1",t.Castle0="Castle0",t.Castle1="Castle1",t.Castle2="Castle2",t.WingKnight1="WingKnight1",t.Abyss1="Abyss1",t.Sylphid1="Sylphid1",t.Aladin1="Aladin1",t.Druid2="Druid2",t.BladeMaster1="BladeMaster1",t.CrowKnight1="CrowKnight1",t.Succubus2="Succubus2",t.FireSpirit1="FireSpirit1",t.Naga1="Naga1",t.Medusa1="Medusa1",t.Hippogriff1="Hippogriff1",t.ScorpionKing="ScorpionKing",t.HarpyKing="HarpyKing",t.GolemKing="GolemKing",t.BerialKing="BerialKing",t.DragonKnight="DragonKnight",t))(HR||{
RequestManager 1 hunks, 1 statements
- const s=mP.O();
+ const s=WP.U();
GameSpeedMode 1 hunks, 1 statements
- qt(mD,"GameSpeedMode"),Xt(mD,"SCALE",1e3),Xt(mD,"_speed",gD(gP.SPEEDMODE_SENTINEL,1e3)),Xt(mD,"guildWarSpeed",null),Xt(mD,"subBattleSpeed",null);
+ Qt(WD,"GameSpeedMode"),Zt(WD,"SCALE",1e3),Zt(WD,"_speed",HD(HP.SPEEDMODE_SENTINEL,1e3)),Zt(WD,"guildWarSpeed",null),Zt(WD,"subBattleSpeed",null),Zt(WD,"godBlessOff",!1);
AutoTogglePill 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:t.FONT_SIZE,lineHeight:t.PILL_H}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:t.FONT_SIZE,lineHeight:t.PILL_H}
BattleAutoController 1 hunks, 1 statements
+ if(Ydi.getInstance().isRealmIntroHolding)return;
UnitFactory 1 hunks, 1 statements
- [gR.NWolf]:k1,[gR.BlackMage1]:$1,[gR.SkeletonX1]:Q1,[gR.SkeletonMan1]:K1,[gR.SkeletonMan2]:Y1,[gR.SkeletonWarrior1]:X1,[gR.GreatHammer1]:V1,[gR.Ghost1]:l2,[gR.DarkMage1]:n2,[gR.DarkArcher1]:d2,[gR.Bomber1]:m5,[gR.DeathHand1]:v5,[gR.DarkNinja1]:X5,[gR.Succubus1]:a3,[gR.Abyss1]:m3,[gR.CrowKnight1]:T3,[gR.Succubus2]:I3,[gR.FireSpirit1]:d1,[gR.Naga1]:p1,[gR.Medusa1]:m1,[gR.Hippogriff1]:v1,[gR.FootMan1]:b1,[gR.Gunner1]:M1,[gR.HeavyWarrior1]:T1,[gR.HammerKnight1]:y1,[gR.HorseKnight1]:I1,[gR.FireBird1]:l1,[gR.Priest1]:r2,[gR.GriffinRider1]:Q5,[gR.SteamPunk1]:s3,[gR.WingKnight1]:t3,[gR.Aladin1]:b3,[gR.ElfArcher1]:t2,[gR.HighArcher1]:r1,[gR.ElfWarrior1]:n1,[gR.ElfSwordMan1]:s1,[gR.PoisonArcher1]:a1,[gR.GreenEagle1]:Y0,[gR.WindMage1]:s2,[gR.Fairy1]:a2,[gR.Druid1]:n3,[gR.Druid2]:M3,[gR.TigerRider1]:r3,[gR.Sylphid1]:v3,[gR.OrcFighter1]:x1,[gR.OrcHunter1]:D1,[gR.OrcIceMage1]:B1,[gR.OrcWing1]:p2,[gR.OrcHammer1]:N1,[gR.OrcAxe1]:m2,[gR.OrcSpearMan1]:F1,[gR.BigDrumer1]:v2,[gR.OrcWolfRider1]:b2,[gR.OrcBigFoot1]:t5,[gR.OrcBlizzardMage1]:s5,[gR.OrcIcePhantom1]:T5,[gR.OrcRapterRider1]:K5,[gR.WyvernRider1]:Y5,[gR.BladeMaster1]:y3,[gR.ElfTown5]:Q0,[gR.OrcFlower]:t1,[gR.FlowerSoldier1]:y2,[gR.FlowerSoldier2]:M2,[gR.KingSlime]:T2,[gR.SlimeBlue]:I2,[gR.SlimeRed]:k2,[gR.SlimeYellow]:x2,[gR.HammerMole]:N2,[gR.MoleSoldier1]:B2,[gR.MoleSoldier2]:D2,[gR.DarkHermit]:F2,[gR.Crab]:$2,[gR.StarFish]:V2,[gR.Unicorn1]:K2,[gR.IceWolf]:Y2,[gR.GoldGoblin]:X2,[gR.AdsGoblin]:Q2,[gR.DeathKnight1]:n5,[gR.Golem1]:r5,[gR.GreatMage1]:a5,[gR.Ant1]:l5,[gR.WolfWarrior1]:d5,[gR.Artillery1]:p5,[gR.SSlime1]:b5,[gR.SSlime2]:M5,[gR.SSlime3]:y5,[gR.Pilot1]:I5,[gR.Spider1]:N5,[gR.Spider2]:D5,[gR.Boar1]:x5,[gR.Boar2]:k5,[gR.RoboBomb1]:F5,[gR.RoboBomb2]:B5,[gR.Frog1]:$5,[gR.Frog2]:V5,[gR.Castle0]:p3,[gR.Castle1]:d3,[gR.Castle2]:l3,[gR.ScorpionKing]:D3,[gR.HarpyKing]:B3,[gR.GolemKing]:F3,[gR.BerialKing]:V3,[gR.DragonKnight]:Y3}
+ [HR.NWolf]:E2,[HR.BlackMage1]:L2,[HR.SkeletonX1]:j2,[HR.SkeletonMan1]:U2,[HR.SkeletonMan2]:$2,[HR.SkeletonWarrior1]:W2,[HR.GreatHammer1]:G2,[HR.Ghost1]:e5,[HR.DarkMage1]:J2,[HR.DarkArcher1]:h5,[HR.Bomber1]:c3,[HR.DeathHand1]:u3,[HR.DarkNinja1]:q3,[HR.Succubus1]:o6,[HR.Abyss1]:g6,[HR.CrowKnight1]:S6,[HR.Succubus2]:C6,[HR.FireSpirit1]:h2,[HR.Naga1]:o2,[HR.Medusa1]:c2,[HR.Hippogriff1]:u2,[HR.FootMan1]:f2,[HR.Gunner1]:g2,[HR.HeavyWarrior1]:_2,[HR.HammerKnight1]:m2,[HR.HorseKnight1]:b2,[HR.FireBird1]:e2,[HR.Priest1]:Z2,[HR.GriffinRider1]:J3,[HR.SteamPunk1]:i6,[HR.WingKnight1]:Z3,[HR.Aladin1]:_6,[HR.ElfArcher1]:z2,[HR.HighArcher1]:Z1,[HR.ElfWarrior1]:J1,[HR.ElfSwordMan1]:q1,[HR.PoisonArcher1]:i2,[HR.GreenEagle1]:$1,[HR.WindMage1]:q2,[HR.Fairy1]:i5,[HR.Druid1]:e6,[HR.Druid2]:b6,[HR.TigerRider1]:h6,[HR.Sylphid1]:m6,[HR.OrcFighter1]:S2,[HR.OrcHunter1]:I2,[HR.OrcIceMage1]:R2,[HR.OrcWing1]:o5,[HR.OrcHammer1]:C2,[HR.OrcAxe1]:c5,[HR.OrcSpearMan1]:P2,[HR.BigDrumer1]:u5,[HR.OrcWolfRider1]:f5,[HR.OrcBigFoot1]:z5,[HR.OrcBlizzardMage1]:q5,[HR.OrcIcePhantom1]:_3,[HR.OrcRapterRider1]:j3,[HR.WyvernRider1]:z3,[HR.BladeMaster1]:E6,[HR.ElfTown5]:j1,[HR.OrcFlower]:z1,[HR.FlowerSoldier1]:m5,[HR.FlowerSoldier2]:g5,[HR.KingSlime]:_5,[HR.SlimeBlue]:b5,[HR.SlimeRed]:E5,[HR.SlimeYellow]:S5,[HR.HammerMole]:C5,[HR.MoleSoldier1]:R5,[HR.MoleSoldier2]:I5,[HR.DarkHermit]:P5,[HR.Crab]:L5,[HR.StarFish]:G5,[HR.Unicorn1]:U5,[HR.IceWolf]:$5,[HR.GoldGoblin]:W5,[HR.AdsGoblin]:j5,[HR.DeathKnight1]:J5,[HR.Golem1]:Z5,[HR.GreatMage1]:i3,[HR.Ant1]:e3,[HR.WolfWarrior1]:h3,[HR.Artillery1]:o3,[HR.SSlime1]:f3,[HR.SSlime2]:g3,[HR.SSlime3]:m3,[HR.Pilot1]:b3,[HR.Spider1]:C3,[HR.Spider2]:I3,[HR.Boar1]:S3,[HR.Boar2]:E3,[HR.RoboBomb1]:P3,[HR.RoboBomb2]:R3,[HR.Frog1]:L3,[HR.Frog2]:G3,[HR.EmberRat1]:U3,[HR.LavaBeetle1]:$3,[HR.CharcoalWolf1]:W3,[HR.Castle0]:f6,[HR.Castle1]:u6,[HR.Castle2]:c6,[HR.ScorpionKing]:L6,[HR.HarpyKing]:G6,[HR.GolemKing]:U6,[HR.BerialKing]:W6,[HR.DragonKnight]:z6}
ToolTipBase 1 hunks, 1 statements
- this.parent&&this.parent.removeChild(this);
+ this.parent&&this.parent.removeChild(this),this.widthMax=570;
Sr 1 hunks, 1 statements
- ...t,...$st(i)}
+ ...t,...Vet(i)}
Fr 1 hunks, 1 statements
- const met=F9,wet=set,vet=U9,_et=16,bet=new Uint8Array(_et);
+ const mnt=Ftt,vnt=nnt,_nt=Utt,Mnt=16,bnt=new Uint8Array(Mnt);
Ma 1 hunks, 1 statements
- ...iot,coercer:qt((t,i)=>frt(t,sot)?iot.coercer(eot(t,i),i):iot.coercer(t,i),"coercer")}
+ ...iat,coercer:Qt((t,i)=>fot(t,sat)?iat.coercer(eat(t,i),i):iat.coercer(t,i),"coercer")}
El 1 hunks, 1 statements
- ...lt._defaultState}
+ ...ft._defaultState}
Yp 1 hunks, 1 statements
- const e=126,n=[71,73,70,56,55,97,...i,246,0,0,255,255,255,...Gpt(381,0),44,0,0,0,0,...i,0,7],h=Math.floor(s.length/e);
+ const e=126,n=[71,73,70,56,55,97,...i,246,0,0,255,255,255,...Ggt(381,0),44,0,0,0,0,...i,0,7],h=Math.floor(s.length/e);
SuiStandardProvider 1 hunks, 1 statements
- namespace:YMt.NameSpaceKeyEip155,addresses:i,methods:[...JMt.Eip55Methods],extra:s}
+ namespace:YEt.NameSpaceKeyEip155,addresses:i,methods:[...JEt.Eip55Methods],extra:s}
AppReadyEvent 1 hunks, 1 statements
- return _yt||(_yt=[...fyt]),_yt}
+ return _St||(_St=[...fSt]),_St}
SolProvider 1 hunks, 1 statements
- namespace:yTt.NameSpaceKeySOL,addresses:i,methods:[...ITt.SOLANAMethods],extra:s}
+ namespace:ACt.NameSpaceKeySOL,addresses:i,methods:[...OCt.SOLANAMethods],extra:s}
OkxwalletInjectConnector 1 hunks, 1 statements
- namespace:sCt.NameSpaceKeyBtc,addresses:i,methods:[...nCt.BtcMethods],extra:s}
+ namespace:sOt.NameSpaceKeyBtc,addresses:i,methods:[...nOt.BtcMethods],extra:s}
TcRootElement 1 hunks, 1 statements
- return QGt()||(t.push(new pgt.OKXAppConnector),t.push(new pgt.OKXWalletAppConnector)),XGt()&&t.push(new pgt.OkxwalletInjectConnector),t.push(...tBt()),t}
+ return QBt()||(t.push(new pwt.OKXAppConnector),t.push(new pwt.OKXWalletAppConnector)),XBt()&&t.push(new pwt.OkxwalletInjectConnector),t.push(...tUt()),t}
WalletSelectPopup 1 hunks, 1 statements
- ...OL.ERROR_POPUP_LABEL_OPTION,fontSize:18}
+ ...sD.ERROR_POPUP_LABEL_OPTION,fontSize:18}
CheckBox 1 hunks, 1 statements
- ),this.bg.width=this.bg.height=24,this.bg.eventMode="none",this.addChild(this.bg),this.check=new je(eS.getTexture("UI_Ekkorr","Icon_Check_Green")),this.check.scale=.85,this.check.eventMode="none",this.check.x=.5*(this.bg.width-this.check.width)+2,this.check.y=this.bg.height-this.check.height-4,this.addChild(this.check),this.customHitArea=new je(eS.getTexture("UI_Ekkorr","Base_Tooltip")),this.customHitArea.tint=1708562,this.customHitArea.alpha=.1,this.customHitArea.x=-this.customHitAreaOffset,this.customHitArea.y=-this.customHitAreaOffset,this.customHitArea.width=this.bg.width+2*this.customHitAreaOffset,this.customHitArea.height=this.bg.height+2*this.customHitAreaOffset,this.addChildAt(this.customHitArea,0),this.customHitArea.eventMode="dynamic",this.customHitArea.on("pointertap",this.onTap,this),this.selected=!1,this.colorMatrix=new of,this.colorMatrix.blackAndWhite(!0)}
+ ),this.bg.width=this.bg.height=24,this.bg.eventMode="none",this.addChild(this.bg),this.check=new Ye(kS.getTexture("UI_Ekkorr","Icon_Check_Green")),this.check.scale=.85,this.check.eventMode="none",this.check.x=.5*(this.bg.width-this.check.width)+2,this.check.y=this.bg.height-this.check.height-4,this.addChild(this.check),this.customHitArea=new Ye(kS.getTexture("UI_Ekkorr","Base_Tooltip")),this.customHitArea.tint=1708562,this.customHitArea.alpha=.1,this.customHitArea.x=-this.customHitAreaOffset,this.customHitArea.y=-this.customHitAreaOffset,this.customHitArea.width=this.bg.width+2*this.customHitAreaOffset,this.customHitArea.height=this.bg.height+2*this.customHitAreaOffset,this.addChildAt(this.customHitArea,0),this.customHitArea.eventMode="dynamic",this.customHitArea.on("pointertap",this.onTap,this),this.selected=!1,this.colorMatrix=new bf,this.colorMatrix.blackAndWhite(!0)}
LoginButton 1 hunks, 1 statements
- super(i,s),Xt(this,"iconPlat",new je),Xt(this,"lbl"),this.iconPlat.texture=this.getTexture(`Icon_${
+ super("Button_Login","UI_Ekkorr2"),Zt(this,"iconPlat",new Ye),Zt(this,"lbl"),this.iconPlat.texture=this.getTexture(`Icon_${
MissionGuideDataManager 1 hunks, 1 statements
- Xt(this,"currentMissionId",1),Xt(this,"rewardPending",!1),Xt(this,"missionList",[]),Xt(this,"stepList",[]),Xt(this,"petStep",0)}
+ Zt(this,"currentMissionId",1),Zt(this,"rewardPending",!1),Zt(this,"missionList",[]),Zt(this,"stepList",[]),Zt(this,"petStep",0),Zt(this,"mineStep",0)}
AttackEffectManager 1 hunks, 1 statements
- const nZt=qt(t=>Math.max(1,Math.round(60*t)),"frames");
+ const f0t=Qt(t=>Math.max(1,Math.round(60*t)),"frames$1");
BaseBattleController 1 hunks, 1 statements
- Xt(this,"attackEffects",new oZt(this)),Xt(this,"player"),Xt(this,"friendList",[]),Xt(this,"enemyList",[]),Xt(this,"weaponList",[]),Xt(this,"effectList",[]),Xt(this,"unitScale",1),Xt(this,"sortCooldown",0),Xt(this,"SORT_INTERVAL",15),Xt(this,"frameTime",0),Xt(this,"avgFrameTime",0),Xt(this,"frameCount",0),Xt(this,"PERFORMANCE_LOG_INTERVAL",300),Xt(this,"killCount",0),Xt(this,"battleTime",0),Xt(this,"totalDamageDealt",0),Xt(this,"totalDamageTaken",0),Xt(this,"nextSummonedUnitId",1e6),Xt(this,"random",new iZt(Date.now())),Xt(this,"determinismCaptureEnabled",!1),Xt(this,"frameHashes",[]),Xt(this,"eventHashes",[]),Xt(this,"FRAME_HASH_INTERVAL",60),Xt(this,"execute",qt(()=>{
+ Zt(this,"attackEffects",new w0t(this)),Zt(this,"player"),Zt(this,"friendList",[]),Zt(this,"enemyList",[]),Zt(this,"weaponList",[]),Zt(this,"effectList",[]),Zt(this,"unitScale",1),Zt(this,"hitFlash",!1),Zt(this,"attackSfxChance",.1),Zt(this,"dieSfxChance",.1),Zt(this,"sortCooldown",0),Zt(this,"SORT_INTERVAL",15),Zt(this,"frameTime",0),Zt(this,"avgFrameTime",0),Zt(this,"frameCount",0),Zt(this,"PERFORMANCE_LOG_INTERVAL",300),Zt(this,"killCount",0),Zt(this,"battleTime",0),Zt(this,"totalDamageDealt",0),Zt(this,"totalDamageTaken",0),Zt(this,"nextSummonedUnitId",1e6),Zt(this,"random",new l0t(Date.now())),Zt(this,"determinismCaptureEnabled",!1),Zt(this,"frameHashes",[]),Zt(this,"eventHashes",[]),Zt(this,"FRAME_HASH_INTERVAL",60),Zt(this,"execute",Qt(()=>{
WaveCallInfo 1 hunks, 1 statements
- return this.visible&&!0===(null==(t=this.parent)?void 0:t.visible)&&!XD.isSoulResting}
+ return this.visible&&!0===(null==(t=this.parent)?void 0:t.visible)&&!EG.isSoulResting&&Ydi.getInstance().canCallNextWave()}
BuffStatusPopup 1 hunks, 1 statements
- if(n)if(t=[...UR.getInstance().getContributors(o)],o===GR.GodBless){
+ if(n)if(t=[...dx.getInstance().getContributors(o)],o===lx.GodBless){
FavoritePetSubView 1 hunks, 1 statements
- const t=[...WD.getInstance().favoritePets].sort((t,i)=>{
+ const t=[...wG.getInstance().favoritePets].sort((t,i)=>{
MineMain 1 hunks, 1 statements
- return(null==i?void 0:i.success)&&(AB.getInstance().setStatusData(null==(t=i.body)?void 0:t.status),AB.getInstance().clearInstance(),this.syncRewardManagers(i.body)),this.gameEnded=!0,i}
+ return(null==i?void 0:i.success)&&(XB.getInstance().setStatusData(null==(t=i.body)?void 0:t.status),XB.getInstance().clearInstance(),this.syncRewardManagers(i.body)),this.gameEnded=!0,qqt.getInstance().mineStep=2,i}
TreasureSubView 1 hunks, 1 statements
- const t=[...JR.getInstance().equipedList];
+ const t=[...Ax.getInstance().equipedList];
GuildBarracksRaceView 1 hunks, 1 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GuildCheckBox 1 hunks, 1 statements
- ),this.bg.width=this.bg.height=24,this.bg.eventMode="none",this.addChild(this.bg),this.check=new je(eS.getTexture("UI_Guild","Base_Check02")),this.check.scale=.85,this.check.eventMode="none",this.check.x=.5*(this.bg.width-this.check.width)+2,this.check.y=this.bg.height-this.check.height-2,this.addChild(this.check),this.customHitArea=new je(eS.getTexture("UI_Guild","whiteRect")),this.customHitArea.tint=1708562,this.customHitArea.alpha=.1,this.customHitArea.x=-this.customHitAreaOffset,this.customHitArea.y=-this.customHitAreaOffset,this.customHitArea.width=this.bg.width+2*this.customHitAreaOffset,this.customHitArea.height=this.bg.height+2*this.customHitAreaOffset,this.addChildAt(this.customHitArea,0),this.customHitArea.eventMode="dynamic",this.customHitArea.on("pointertap",this.onTap,this),this.selected=!1,this.colorMatrix=new of,this.colorMatrix.blackAndWhite(!0)}
+ ),this.bg.width=this.bg.height=24,this.bg.eventMode="none",this.addChild(this.bg),this.check=new Ye(kS.getTexture("UI_Guild","Base_Check02")),this.check.scale=.85,this.check.eventMode="none",this.check.x=.5*(this.bg.width-this.check.width)+2,this.check.y=this.bg.height-this.check.height-2,this.addChild(this.check),this.customHitArea=new Ye(kS.getTexture("UI_Guild","whiteRect")),this.customHitArea.tint=1708562,this.customHitArea.alpha=.1,this.customHitArea.x=-this.customHitAreaOffset,this.customHitArea.y=-this.customHitAreaOffset,this.customHitArea.width=this.bg.width+2*this.customHitAreaOffset,this.customHitArea.height=this.bg.height+2*this.customHitAreaOffset,this.addChildAt(this.customHitArea,0),this.customHitArea.eventMode="dynamic",this.customHitArea.on("pointertap",this.onTap,this),this.selected=!1,this.colorMatrix=new bf,this.colorMatrix.blackAndWhite(!0)}
GuildMainSubView 1 hunks, 1 statements
- const i=[...QL.guildList].sort((t,i)=>{
+ const i=[...SD.guildList].sort((t,i)=>{
GuildRaidBattleReadyPopup 1 hunks, 1 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:13}
GuildWarActiveItemRenderer 1 hunks, 1 statements
- super(),Xt(this,"bg"),Xt(this,"myEmblem"),Xt(this,"oppEmblem"),Xt(this,"lblMyName"),Xt(this,"lblMyLv"),Xt(this,"lblMyRank"),Xt(this,"lblMyEloValue"),Xt(this,"iconVs"),Xt(this,"lblOppName"),Xt(this,"lblOppLv"),Xt(this,"lblOppRank"),Xt(this,"lblOppEloValue"),Xt(this,"lblScore"),Xt(this,"iconClock"),Xt(this,"lblEndsIn"),Xt(this,"btnAttack"),Xt(this,"ticketIcons",[]),Xt(this,"ticketDimFilter",new of),this.ticketDimFilter.desaturate(),this.bg=new aU,this.bg.setIndex(2),this.bg.width=t.ROW_W,this.bg.height=t.ROW_H,this.addChild(this.bg),this.myEmblem=new tii,this.myEmblem.scale.set(t.EMBLEM_SCALE),this.myEmblem.x=t.PAD,this.myEmblem.y=10,this.addChild(this.myEmblem),this.oppEmblem=new tii,this.oppEmblem.scale.set(t.EMBLEM_SCALE),this.oppEmblem.x=t.OPP_EMBLEM_X,this.oppEmblem.y=10,this.addChild(this.oppEmblem),this.lblMyLv=new SD("",14531464,OL.DEFAULT_FONT_OPTION_16),this.addChild(this.lblMyLv),this.lblOppLv=new SD("",14531464,OL.DEFAULT_FONT_OPTION_16),this.addChild(this.lblOppLv),this.lblMyName=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblMyName.textColor=OL.DEFAULT_COLOR,this.lblMyName.x=t.LEFT_TEXT_X,this.lblMyName.y=14,this.addChild(this.lblMyName),this.lblOppName=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblOppName.textColor=OL.DEFAULT_COLOR,this.lblOppName.y=14,this.addChild(this.lblOppName),this.lblMyRank=new SD("",16750899,OL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblMyRank.x=t.LEFT_TEXT_X,this.lblMyRank.y=36,this.addChild(this.lblMyRank),this.lblOppRank=new SD("",16750899,OL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblOppRank.y=36,this.addChild(this.lblOppRank),this.lblMyEloValue=new SD("",16750899,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblMyEloValue.textColor=16750899,this.lblMyEloValue.x=t.LEFT_TEXT_X,this.lblMyEloValue.y=58,this.addChild(this.lblMyEloValue),this.lblOppEloValue=new SD("",16750899,OL.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblOppEloValue.textColor=16750899,this.lblOppEloValue.y=58,this.addChild(this.lblOppEloValue),this.iconVs=new je(eS.getTexture("UI_Ekkorr","UI_VS")),this.iconVs.scale.set(.506),this.iconVs.y=8,this.addChild(this.iconVs),this.lblScore=new SD("",16750899,OL.DEFAULT_OUTLINE_FONT_OPTION_24),this.lblScore.textColor=16750899,this.lblScore.y=51,this.addChild(this.lblScore),this.iconClock=new je(eS.getTexture("UI_Ekkorr","Icon_Time02")),this.iconClock.scale.set(.595),this.addChild(this.iconClock),this.lblEndsIn=new SD("",OL.DEFAULT_COLOR,OL.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblEndsIn.y=t.TIME_GROUP_Y,this.iconClock.y=this.lblEndsIn.y+(this.lblEndsIn.height-this.iconClock.height)/2,this.addChild(this.lblEndsIn),this.btnAttack=new IG(nB.getText("GAME_1040","공격")),this.btnAttack.color=IG.RED,this.btnAttack.width=t.BTN_W,this.btnAttack.height=t.BTN_H,this.btnAttack.x=t.BTN_X,this.btnAttack.onClick=()=>this.onAttack(),this.addChild(this.btnAttack);
+ super(),Zt(this,"bg"),Zt(this,"myEmblem"),Zt(this,"oppEmblem"),Zt(this,"lblMyName"),Zt(this,"lblMyLv"),Zt(this,"lblMyRank"),Zt(this,"lblMyEloValue"),Zt(this,"iconVs"),Zt(this,"lblOppName"),Zt(this,"lblOppLv"),Zt(this,"lblOppRank"),Zt(this,"lblOppEloValue"),Zt(this,"lblScore"),Zt(this,"iconClock"),Zt(this,"lblEndsIn"),Zt(this,"btnAttack"),Zt(this,"ticketIcons",[]),Zt(this,"ticketDimFilter",new bf),this.ticketDimFilter.desaturate(),this.bg=new WU,this.bg.setIndex(2),this.bg.width=t.ROW_W,this.bg.height=t.ROW_H,this.addChild(this.bg),this.myEmblem=new Vsi,this.myEmblem.scale.set(t.EMBLEM_SCALE),this.myEmblem.x=t.PAD,this.myEmblem.y=10,this.addChild(this.myEmblem),this.oppEmblem=new Vsi,this.oppEmblem.scale.set(t.EMBLEM_SCALE),this.oppEmblem.x=t.OPP_EMBLEM_X,this.oppEmblem.y=10,this.addChild(this.oppEmblem),this.lblMyLv=new QD("",14531464,sD.DEFAULT_FONT_OPTION_16),this.addChild(this.lblMyLv),this.lblOppLv=new QD("",14531464,sD.DEFAULT_FONT_OPTION_16),this.addChild(this.lblOppLv),this.lblMyName=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblMyName.textColor=sD.DEFAULT_COLOR,this.lblMyName.x=t.LEFT_TEXT_X,this.lblMyName.y=14,this.addChild(this.lblMyName),this.lblOppName=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_17),this.lblOppName.textColor=sD.DEFAULT_COLOR,this.lblOppName.y=14,this.addChild(this.lblOppName),this.lblMyRank=new QD("",16750899,sD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblMyRank.x=t.LEFT_TEXT_X,this.lblMyRank.y=36,this.addChild(this.lblMyRank),this.lblOppRank=new QD("",16750899,sD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblOppRank.y=36,this.addChild(this.lblOppRank),this.lblMyEloValue=new QD("",16750899,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblMyEloValue.textColor=16750899,this.lblMyEloValue.x=t.LEFT_TEXT_X,this.lblMyEloValue.y=58,this.addChild(this.lblMyEloValue),this.lblOppEloValue=new QD("",16750899,sD.DEFAULT_OUTLINE_FONT_OPTION_18),this.lblOppEloValue.textColor=16750899,this.lblOppEloValue.y=58,this.addChild(this.lblOppEloValue),this.iconVs=new Ye(kS.getTexture("UI_Ekkorr","UI_VS")),this.iconVs.scale.set(.506),this.iconVs.y=8,this.addChild(this.iconVs),this.lblScore=new QD("",16750899,sD.DEFAULT_OUTLINE_FONT_OPTION_24),this.lblScore.textColor=16750899,this.lblScore.y=51,this.addChild(this.lblScore),this.iconClock=new Ye(kS.getTexture("UI_Ekkorr","Icon_Time02")),this.iconClock.scale.set(.595),this.addChild(this.iconClock),this.lblEndsIn=new QD("",sD.DEFAULT_COLOR,sD.DEFAULT_OUTLINE_FONT_OPTION_16),this.lblEndsIn.y=t.TIME_GROUP_Y,this.iconClock.y=this.lblEndsIn.y+(this.lblEndsIn.height-this.iconClock.height)/2,this.addChild(this.lblEndsIn),this.btnAttack=new iB(RB.getText("GAME_1040","공격")),this.btnAttack.color=iB.RED,this.btnAttack.width=t.BTN_W,this.btnAttack.height=t.BTN_H,this.btnAttack.x=t.BTN_X,this.btnAttack.onClick=()=>this.onAttack(),this.addChild(this.btnAttack);
GuildWarHistoryItemRenderer 1 hunks, 1 statements
- ...OL.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
+ ...sD.DEFAULT_OUTLINE_FONT_OPTION_16,fontSize:i}
GameAccountSelectPopup3 1 hunks, 1 statements
- __proto__:null,AttendancePopup:Iri,AttendanceReceiveButton:kri}
+ __proto__:null,AttendancePopup:eai}
TransitionView 1 hunks, 1 statements
- this.bg=new je(i),this.bg.width=Xy.stageWidth,this.bg.scale.y=this.bg.scale.x,this.bg.y=0,Xy.stageHeight>1140&&(this.bg.y=.5*(Xy.stageHeight-this.bg.height)),this.addChildAt(this.bg,0),Xy.stageHeight>this.bg.height&&(this.bgEx=new je(eS.getTexture("UI_Ekkorr","whiteRect")),this.bgEx.tint=141887,this.bgEx.width=Xy.stageWidth,this.bgEx.scale.y=this.bgEx.scale.x,this.addChildAt(this.bgEx,0)),this.cover=new je(eS.getTexture("UI_Ekkorr","UI_Toast_Bg")),this.cover.alpha=.3,this.cover.width=this.bg.width,this.cover.height=this.bg.height,this.addChild(this.cover)}
+ this.bg=new Ye(i),this.bg.width=ES.stageWidth,this.bg.scale.y=this.bg.scale.x,this.bg.y=0,ES.stageHeight>1140&&(this.bg.y=Math.max(0,.5*(ES.stageHeight-this.bg.height))),this.addChildAt(this.bg,0),ES.stageHeight>this.bg.height&&(this.bgEx=new Ye(kS.getTexture("UI_Ekkorr","whiteRect")),this.bgEx.tint=1181706,this.bgEx.width=ES.stageWidth,this.bgEx.height=ES.stageHeight,this.addChildAt(this.bgEx,0)),this.cover=new Ye(kS.getTexture("UI_Ekkorr","UI_Toast_Bg")),this.cover.alpha=.3,this.cover.width=this.bg.width,this.cover.height=this.bg.height,this.addChild(this.cover)}
NpcDialogueToast 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_18,fontSize:14,lineHeight:18}
+ ...sD.DEFAULT_FONT_OPTION_18,fontSize:14,lineHeight:18}
CitadelBuildingDetailPopup 1 hunks, 1 statements
- const t=new of;
+ const t=new bf;
GuildWarCombatLogItemRenderer 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:14}
GuildWarMemberStatusItemRenderer 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:14}
GuildWarTargetMarkerItemRenderer 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_15,fontSize:14}
+ ...sD.DEFAULT_FONT_OPTION_15,fontSize:14}
ServerRejected 1 hunks, 1 statements
- qt(g_i,"pad"),qt(m_i,"toSetTeamsParams"),qt(w_i,"cardIconKind"),qt(v_i,"totalSoldiers"),qt(__i,"soldierDisplayTiers"),qt(b_i,"mapIndexForFloor"),qt(E_i,"isVerticalMap"),qt(M_i,"defaultFormation"),qt(A_i,"normalizeFormation"),qt(y_i,"swapSlots"),qt(S_i,"slotLayout");
+ Qt(Tbi,"pad$1"),Qt(Cbi,"toSetTeamsParams"),Qt(Obi,"cardIconKind"),Qt(Ibi,"totalSoldiers"),Qt(kbi,"soldierDisplayTiers"),Qt(Rbi,"mapIndexForFloor"),Qt(xbi,"isVerticalMap"),Qt(Pbi,"defaultFormation"),Qt(Nbi,"normalizeFormation"),Qt(Lbi,"swapSlots"),Qt(Dbi,"slotLayout");
MiniAscentBattleProgress 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:20,lineHeight:26,align:"center"}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:20,lineHeight:26,align:"center"}
ConquestDataManager 1 hunks, 1 statements
- ,"onVisibility"));
+ ,"onVisibility")),Zt(nyi,"shellReady",!1),Zt(nyi,"seasonEndNotified",!1);
OfflinePopup 1 hunks, 1 statements
- nB.getValueReplaceMulti("GAME_692",["##","@@"],[a,t],`망루버프 :+${
+ RB.getValueReplaceMulti("GAME_692",["##","@@"],[a,t],`망루버프 : +${
Delay 1 hunks, 1 statements
- ...gSi(),[i]:s}
+ ...mWi(),[i]:s}
NetworkTimeout 1 hunks, 1 statements
- ...USi,...i}
+ ...$Wi,...i}
RecaptchaVerifier 1 hunks, 1 statements
- ...bki}
+ ...yYi}
BrowserPopupRedirectResolver 1 hunks, 1 statements
- ...yRi,width:e.toString(),height:n.toString(),top:h,left:r}
+ ...Tqi,width:e.toString(),height:n.toString(),top:h,left:r}
MiniAscentCardsPage 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:s,lineHeight:s+6}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:s,lineHeight:s+6}
MiniAscentCrystalRowRenderer 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:20,fontWeight:"900"}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:20,fontWeight:"900"}
MiniAscentCrystalsPage 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:n,lineHeight:n+5,fontWeight:"bold"}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:n,lineHeight:n+5,fontWeight:"bold"}
MiniAscentTextButton 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:15,lineHeight:20}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:15,lineHeight:20}
MiniAscentCrystalRewardPopup 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:s,lineHeight:s+5}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:s,lineHeight:s+5}
MiniAscentModeSwitch 1 hunks, 1 statements
- ...OL.DEFAULT_FONT_OPTION_16,fontSize:19,lineHeight:24}
+ ...sD.DEFAULT_FONT_OPTION_16,fontSize:19,lineHeight:24}